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

Reply via email to