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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.