From patchwork Wed Feb 24 18:30:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Kipisz X-Patchwork-Id: 62823 Delivered-To: patch@linaro.org Received: by 10.112.43.199 with SMTP id y7csp2568797lbl; Wed, 24 Feb 2016 10:32:35 -0800 (PST) X-Received: by 10.28.30.132 with SMTP id e126mr26973396wme.42.1456338755785; Wed, 24 Feb 2016 10:32:35 -0800 (PST) Return-Path: Received: from theia.denx.de (theia.denx.de. [85.214.87.163]) by mx.google.com with ESMTP id wl9si5014925wjb.220.2016.02.24.10.32.35; Wed, 24 Feb 2016 10:32:35 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 85.214.87.163 as permitted sender) client-ip=85.214.87.163; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 85.214.87.163 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2526DA7649; Wed, 24 Feb 2016 19:32:34 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Td3-H-Z_uKDq; Wed, 24 Feb 2016 19:32:34 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4FBA9A7711; Wed, 24 Feb 2016 19:32:27 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 18245A76DD for ; Wed, 24 Feb 2016 19:32:21 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gMweooj4DHFB for ; Wed, 24 Feb 2016 19:32:20 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from devils.ext.ti.com (devils.ext.ti.com [198.47.26.153]) by theia.denx.de (Postfix) with ESMTPS id 294A1A75E5 for ; Wed, 24 Feb 2016 19:32:16 +0100 (CET) Received: from dlelxv90.itg.ti.com ([172.17.2.17]) by devils.ext.ti.com (8.13.7/8.13.7) with ESMTP id u1OIVFN3032266; Wed, 24 Feb 2016 12:31:15 -0600 Received: from DLEE71.ent.ti.com (dlee71.ent.ti.com [157.170.170.114]) by dlelxv90.itg.ti.com (8.14.3/8.13.8) with ESMTP id u1OIVFDq011070; Wed, 24 Feb 2016 12:31:15 -0600 Received: from dlep33.itg.ti.com (157.170.170.75) by DLEE71.ent.ti.com (157.170.170.114) with Microsoft SMTP Server id 14.3.224.2; Wed, 24 Feb 2016 12:31:15 -0600 Received: from uda0867407.am.dhcp.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by dlep33.itg.ti.com (8.14.3/8.13.8) with ESMTP id u1OIVB4Z020145; Wed, 24 Feb 2016 12:31:15 -0600 From: Steve Kipisz To: Tom Rini Date: Wed, 24 Feb 2016 12:30:56 -0600 Message-ID: <1456338658-5027-6-git-send-email-s-kipisz2@ti.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1456338658-5027-1-git-send-email-s-kipisz2@ti.com> References: <1456338658-5027-1-git-send-email-s-kipisz2@ti.com> MIME-Version: 1.0 Cc: Dave Gerlach , u-boot@lists.denx.de, Roger Quadros Subject: [U-Boot] [PATCH V5 5/7] ti: AM437x: Use generic EEPROM detection logic X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Nishanth Menon Now that we have a generic TI eeprom logic which can be reused across platforms, reuse the same. This revision also includes fixes identified by Dave Gerlach Cc: Dave Gerlach Signed-off-by: Nishanth Menon Signed-off-by: Steven Kipisz Signed-off-by: Lokesh Vutla --- V5: - updated fixes from Dave on i2c init - rebased to latest api changes V4: https://patchwork.ozlabs.org/patch/540280/ V1-v3: did not exist arch/arm/Kconfig | 1 + board/ti/am43xx/Kconfig | 2 ++ board/ti/am43xx/board.c | 87 +++++++++++++++---------------------------------- board/ti/am43xx/board.h | 37 +++++---------------- board/ti/am43xx/mux.c | 1 + 5 files changed, 39 insertions(+), 89 deletions(-) -- 2.7.0 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 38dd19a7197b..3f2faf0d595e 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -381,6 +381,7 @@ config TARGET_AM43XX_EVM bool "Support am43xx_evm" select CPU_V7 select SUPPORT_SPL + select TI_I2C_BOARD_DETECT config TARGET_BAV335X bool "Support bav335x" diff --git a/board/ti/am43xx/Kconfig b/board/ti/am43xx/Kconfig index 8d1c16883d8b..9cb80cc3f1da 100644 --- a/board/ti/am43xx/Kconfig +++ b/board/ti/am43xx/Kconfig @@ -12,4 +12,6 @@ config SYS_SOC config SYS_CONFIG_NAME default "am43xx_evm" +source "board/ti/common/Kconfig" + endif diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c index 770726c3f796..d208d2fa8918 100644 --- a/board/ti/am43xx/board.c +++ b/board/ti/am43xx/board.c @@ -19,6 +19,7 @@ #include #include #include +#include "../common/board_detect.h" #include "board.h" #include #include @@ -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 inline int __maybe_unused read_eeprom(void) { - /* 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); } #ifndef CONFIG_SKIP_LOWLEVEL_INIT @@ -374,6 +336,9 @@ const struct dpll_params *get_dpll_ddr_params(void) { int ind = get_sys_clk_index(); + if (read_eeprom() < 0) + return NULL; + if (board_is_eposevm()) return &epos_evm_dpll_ddr[ind]; else if (board_is_gpevm() || board_is_sk()) @@ -381,7 +346,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", board_ti_get_name()); return NULL; } @@ -512,16 +477,29 @@ void scale_vcores_idk(u32 m) } } +void gpi2c_init(void) +{ + /* When needed to be invoked prior to BSS initialization */ + static bool first_time = true; + + if (first_time) { + enable_i2c0_pin_mux(); + i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, + CONFIG_SYS_OMAP24_I2C_SLAVE); + first_time = false; + } +} + void scale_vcores(void) { const struct dpll_params *mpu_params; - struct am43xx_board_id header; - enable_i2c0_pin_mux(); - i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE); - if (read_eeprom(&header) < 0) + if (read_eeprom() < 0) puts("Could not get board ID.\n"); + /* Ensure I2C is initialized for PMIC configuration */ + gpi2c_init(); + /* Get the frequency */ mpu_params = get_dpll_mpu_params(); @@ -558,6 +536,8 @@ static void enable_vtt_regulator(void) void sdram_init(void) { + if (read_eeprom() < 0) + return; /* * EPOS EVM has 1GB LPDDR2 connected to EMIF. * GP EMV has 1GB DDR3 connected to EMIF @@ -655,20 +635,7 @@ 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; - - 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); - - strncpy(safe_string, (char *)header.version, sizeof(header.version)); - safe_string[sizeof(header.version)] = 0; - setenv("board_rev", safe_string); + set_board_info_env(NULL); #endif return 0; } diff --git a/board/ti/am43xx/board.h b/board/ti/am43xx/board.h index eb9493e191c6..2cf7a7751d41 100644 --- a/board/ti/am43xx/board.h +++ b/board/ti/am43xx/board.h @@ -14,58 +14,37 @@ #include -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_ti_is("AM43EPOS"); } static inline int board_is_gpevm(void) { - return !strncmp(am43xx_board_name, "AM43__GP", HDR_NAME_LEN); + return board_ti_is("AM43__GP"); } static inline int board_is_sk(void) { - return !strncmp(am43xx_board_name, "AM43__SK", HDR_NAME_LEN); + return board_ti_is("AM43__SK"); } static inline int board_is_idk(void) { - return !strncmp(am43xx_board_name, "AM43_IDK", HDR_NAME_LEN); + return board_ti_is("AM43_IDK"); } static inline int board_is_evm_14_or_later(void) { - return (board_is_gpevm() && strncmp("1.4", am43xx_board_rev, 3) <= 0); + return (board_is_gpevm() && strncmp("1.4", board_ti_get_rev(), 3) <= 0); } static inline int board_is_evm_12_or_later(void) { - return (board_is_gpevm() && strncmp("1.2", am43xx_board_rev, 3) <= 0); + return (board_is_gpevm() && strncmp("1.2", board_ti_get_rev(), 3) <= 0); } void enable_uart0_pin_mux(void); diff --git a/board/ti/am43xx/mux.c b/board/ti/am43xx/mux.c index 510477dad9e2..e03b1bcfaaa8 100644 --- a/board/ti/am43xx/mux.c +++ b/board/ti/am43xx/mux.c @@ -9,6 +9,7 @@ #include #include #include +#include "../common/board_detect.h" #include "board.h" static struct module_pin_mux rmii1_pin_mux[] = {