From: Lokesh Vutla <a0131933@ti.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 5/7] ti: AM437x: Use generic EEPROM detection logic
Date: Fri, 6 Nov 2015 09:19:10 +0530 [thread overview]
Message-ID: <563C2336.6080505@ti.com> (raw)
In-Reply-To: <1446770376-8205-5-git-send-email-s-kipisz2@ti.com>
On Friday 06 November 2015 06:09 AM, Steve Kipisz wrote:
> From: Nishanth Menon <nm@ti.com>
>
> Now that we have a generic TI eeprom logic which can be reused accross
> platforms, reuse the same.
>
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Steven Kipisz <s-kipisz2@ti.com>
Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com>
Thanks and regards,
Lokesh
> ---
> Changes in v4:
> - New patch
> - depends on https://patchwork.ozlabs.org/patch/540280/
>
> board/ti/am43xx/board.c | 86 ++++++++++++++++---------------------------------
> board/ti/am43xx/board.h | 41 ++++++-----------------
> board/ti/am43xx/mux.c | 1 +
> 3 files changed, 38 insertions(+), 90 deletions(-)
>
> diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c
> index 770726c3f796..ea64672606e9 100644
> --- a/board/ti/am43xx/board.c
> +++ b/board/ti/am43xx/board.c
> @@ -19,6 +19,7 @@
> #include <asm/arch/ddr_defs.h>
> #include <asm/arch/gpio.h>
> #include <asm/emif.h>
> +#include <board_detect.h>
> #include "board.h"
> #include <power/pmic.h>
> #include <power/tps65218.h>
> @@ -37,48 +38,9 @@ static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
> /*
> * Read header information from EEPROM into global structure.
> */
> -static int read_eeprom(struct am43xx_board_id *header)
> +static int __maybe_unused read_eeprom(struct ti_am_eeprom **header)
> {
> - /* Check if baseboard eeprom is available */
> - if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) {
> - printf("Could not probe the EEPROM at 0x%x\n",
> - CONFIG_SYS_I2C_EEPROM_ADDR);
> - return -ENODEV;
> - }
> -
> - /* read the eeprom using i2c */
> - if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header,
> - sizeof(struct am43xx_board_id))) {
> - printf("Could not read the EEPROM\n");
> - return -EIO;
> - }
> -
> - if (header->magic != 0xEE3355AA) {
> - /*
> - * read the eeprom using i2c again,
> - * but use only a 1 byte address
> - */
> - if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header,
> - sizeof(struct am43xx_board_id))) {
> - printf("Could not read the EEPROM at 0x%x\n",
> - CONFIG_SYS_I2C_EEPROM_ADDR);
> - return -EIO;
> - }
> -
> - if (header->magic != 0xEE3355AA) {
> - printf("Incorrect magic number (0x%x) in EEPROM\n",
> - header->magic);
> - return -EINVAL;
> - }
> - }
> -
> - strncpy(am43xx_board_name, (char *)header->name, sizeof(header->name));
> - am43xx_board_name[sizeof(header->name)] = 0;
> -
> - strncpy(am43xx_board_rev, (char *)header->version, sizeof(header->version));
> - am43xx_board_rev[sizeof(header->version)] = 0;
> -
> - return 0;
> + return ti_i2c_eeprom_am_get(-1, CONFIG_SYS_I2C_EEPROM_ADDR, header);
> }
>
> #ifndef CONFIG_SKIP_LOWLEVEL_INIT
> @@ -373,6 +335,10 @@ static u32 get_sys_clk_index(void)
> const struct dpll_params *get_dpll_ddr_params(void)
> {
> int ind = get_sys_clk_index();
> + struct ti_am_eeprom *header;
> +
> + if (read_eeprom(&header) < 0)
> + return NULL;
>
> if (board_is_eposevm())
> return &epos_evm_dpll_ddr[ind];
> @@ -381,7 +347,7 @@ const struct dpll_params *get_dpll_ddr_params(void)
> else if (board_is_idk())
> return &idk_dpll_ddr;
>
> - printf(" Board '%s' not supported\n", am43xx_board_name);
> + printf(" Board '%s' not supported\n", header->name);
> return NULL;
> }
>
> @@ -512,13 +478,17 @@ void scale_vcores_idk(u32 m)
> }
> }
>
> +void gpi2c_init(void)
> +{
> + enable_i2c0_pin_mux();
> + i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
> +}
> +
> void scale_vcores(void)
> {
> const struct dpll_params *mpu_params;
> - struct am43xx_board_id header;
> + struct ti_am_eeprom *header;
>
> - enable_i2c0_pin_mux();
> - i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
> if (read_eeprom(&header) < 0)
> puts("Could not get board ID.\n");
>
> @@ -558,6 +528,10 @@ static void enable_vtt_regulator(void)
>
> void sdram_init(void)
> {
> + struct ti_am_eeprom *header;
> +
> + if (read_eeprom(&header) < 0)
> + return;
> /*
> * EPOS EVM has 1GB LPDDR2 connected to EMIF.
> * GP EMV has 1GB DDR3 connected to EMIF
> @@ -565,11 +539,11 @@ void sdram_init(void)
> */
> if (board_is_eposevm()) {
> config_ddr(0, &ioregs_lpddr2, NULL, NULL, &emif_regs_lpddr2, 0);
> - } else if (board_is_evm_14_or_later()) {
> + } else if (board_is_evm_14_or_later(header)) {
> enable_vtt_regulator();
> config_ddr(0, &ioregs_ddr3, NULL, NULL,
> &ddr3_emif_regs_400Mhz_production, 0);
> - } else if (board_is_evm_12_or_later()) {
> + } else if (board_is_evm_12_or_later(header)) {
> enable_vtt_regulator();
> config_ddr(0, &ioregs_ddr3, NULL, NULL,
> &ddr3_emif_regs_400Mhz_beta, 0);
> @@ -655,20 +629,14 @@ int board_init(void)
> int board_late_init(void)
> {
> #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
> - char safe_string[HDR_NAME_LEN + 1];
> - struct am43xx_board_id header;
> + struct ti_am_eeprom_printable p;
> + int rc;
>
> - if (read_eeprom(&header) < 0)
> - puts("Could not get board ID.\n");
> -
> - /* Now set variables based on the header. */
> - strncpy(safe_string, (char *)header.name, sizeof(header.name));
> - safe_string[sizeof(header.name)] = 0;
> - setenv("board_name", safe_string);
> + rc = ti_i2c_eeprom_am_get_print(-1, CONFIG_SYS_I2C_EEPROM_ADDR, &p);
>
> - strncpy(safe_string, (char *)header.version, sizeof(header.version));
> - safe_string[sizeof(header.version)] = 0;
> - setenv("board_rev", safe_string);
> + if (rc)
> + puts("Could not get board ID.\n");
> + set_board_info_env(p.name, p.version, p.serial);
> #endif
> return 0;
> }
> diff --git a/board/ti/am43xx/board.h b/board/ti/am43xx/board.h
> index eb9493e191c6..9a6eeac4ac1f 100644
> --- a/board/ti/am43xx/board.h
> +++ b/board/ti/am43xx/board.h
> @@ -14,58 +14,37 @@
>
> #include <asm/arch/omap.h>
>
> -static char *const am43xx_board_name = (char *)AM4372_BOARD_NAME_START;
> -static char *const am43xx_board_rev = (char *)AM4372_BOARD_VERSION_START;
> -
> -/*
> - * TI AM437x EVMs define a system EEPROM that defines certain sub-fields.
> - * We use these fields to in turn see what board we are on, and what
> - * that might require us to set or not set.
> - */
> -#define HDR_NO_OF_MAC_ADDR 3
> -#define HDR_ETH_ALEN 6
> -#define HDR_NAME_LEN 8
> -
> -#define DEV_ATTR_MAX_OFFSET 5
> -#define DEV_ATTR_MIN_OFFSET 0
> -
> -struct am43xx_board_id {
> - unsigned int magic;
> - char name[HDR_NAME_LEN];
> - char version[4];
> - char serial[12];
> - char config[32];
> - char mac_addr[HDR_NO_OF_MAC_ADDR][HDR_ETH_ALEN];
> -};
> +#define DEV_ATTR_MAX_OFFSET 5
> +#define DEV_ATTR_MIN_OFFSET 0
>
> static inline int board_is_eposevm(void)
> {
> - return !strncmp(am43xx_board_name, "AM43EPOS", HDR_NAME_LEN);
> + return board_am_is("AM43EPOS");
> }
>
> static inline int board_is_gpevm(void)
> {
> - return !strncmp(am43xx_board_name, "AM43__GP", HDR_NAME_LEN);
> + return board_am_is("AM43__GP");
> }
>
> static inline int board_is_sk(void)
> {
> - return !strncmp(am43xx_board_name, "AM43__SK", HDR_NAME_LEN);
> + return board_am_is("AM43__SK");
> }
>
> static inline int board_is_idk(void)
> {
> - return !strncmp(am43xx_board_name, "AM43_IDK", HDR_NAME_LEN);
> + return board_am_is("AM43_IDK");
> }
>
> -static inline int board_is_evm_14_or_later(void)
> +static inline int board_is_evm_14_or_later(struct ti_am_eeprom *header)
> {
> - return (board_is_gpevm() && strncmp("1.4", am43xx_board_rev, 3) <= 0);
> + return (board_is_gpevm() && strncmp("1.4", header->version, 3) <= 0);
> }
>
> -static inline int board_is_evm_12_or_later(void)
> +static inline int board_is_evm_12_or_later(struct ti_am_eeprom *header)
> {
> - return (board_is_gpevm() && strncmp("1.2", am43xx_board_rev, 3) <= 0);
> + return (board_is_gpevm() && strncmp("1.2", header->version, 3) <= 0);
> }
>
> void enable_uart0_pin_mux(void);
> diff --git a/board/ti/am43xx/mux.c b/board/ti/am43xx/mux.c
> index 510477dad9e2..3902f4025028 100644
> --- a/board/ti/am43xx/mux.c
> +++ b/board/ti/am43xx/mux.c
> @@ -9,6 +9,7 @@
> #include <common.h>
> #include <asm/arch/sys_proto.h>
> #include <asm/arch/mux.h>
> +#include <board_detect.h>
> #include "board.h"
>
> static struct module_pin_mux rmii1_pin_mux[] = {
>
next prev parent reply other threads:[~2015-11-06 3:49 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-06 0:39 [U-Boot] [PATCH v4 1/7] ARM: OMAP4/5: Centralize early clock initialization Steve Kipisz
2015-11-06 0:39 ` [U-Boot] [PATCH v4 2/7] ARM: OMAP4/5: Centralize gpi2c_init Steve Kipisz
2015-11-06 0:39 ` [U-Boot] [PATCH v4 3/7] ARM: omap-common: Add standard access for board description EEPROM Steve Kipisz
2015-11-06 9:29 ` Igor Grinberg
2015-11-08 13:34 ` Tom Rini
2015-11-09 22:19 ` Nishanth Menon
2015-11-09 23:47 ` Nishanth Menon
2015-11-06 0:39 ` [U-Boot] [PATCH v4 4/7] ti: am335x: Use generic EEPROM detection logic Steve Kipisz
2015-11-06 3:48 ` Lokesh Vutla
2015-11-08 13:35 ` Tom Rini
2015-11-06 0:39 ` [U-Boot] [PATCH v4 5/7] ti: AM437x: " Steve Kipisz
2015-11-06 3:49 ` Lokesh Vutla [this message]
2015-11-08 13:36 ` Tom Rini
2015-11-06 0:39 ` [U-Boot] [PATCH v4 6/7] ARM: OMAP4/5: Add generic board detection hook Steve Kipisz
2015-11-06 3:49 ` Lokesh Vutla
2015-11-06 0:39 ` [U-Boot] [PATCH v4 7/7] board: ti: AM57xx: Add detection logic for AM57xx-evm Steve Kipisz
2015-11-06 9:35 ` Igor Grinberg
2015-11-08 13:36 ` Tom Rini
2015-11-10 0:15 ` Nishanth Menon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=563C2336.6080505@ti.com \
--to=a0131933@ti.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox