On Friday 06 November 2015 06:09 AM, Steve Kipisz wrote: > From: Nishanth Menon <n...@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 <n...@ti.com> > Signed-off-by: Steven Kipisz <s-kipi...@ti.com>
Reviewed-by: Lokesh Vutla <lokeshvu...@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[] = { > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot