All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Kipisz <s-kipisz2@ti.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V5 5/7] ti: AM437x: Use generic EEPROM detection logic
Date: Wed, 24 Feb 2016 12:30:56 -0600	[thread overview]
Message-ID: <1456338658-5027-6-git-send-email-s-kipisz2@ti.com> (raw)
In-Reply-To: <1456338658-5027-1-git-send-email-s-kipisz2@ti.com>

From: Nishanth Menon <nm@ti.com>

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
<d-gerlach@ti.com>

Cc: Dave Gerlach <d-gerlach@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Steven Kipisz <s-kipisz2@ti.com>
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
---
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(-)

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 <asm/arch/ddr_defs.h>
 #include <asm/arch/gpio.h>
 #include <asm/emif.h>
+#include "../common/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 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 <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_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 <common.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/arch/mux.h>
+#include "../common/board_detect.h"
 #include "board.h"
 
 static struct module_pin_mux rmii1_pin_mux[] = {
-- 
2.7.0

  parent reply	other threads:[~2016-02-24 18:30 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-24 18:30 [U-Boot] [PATCH V5 0/7] ARM: omap-common: Add board detection support for TI EVMs Steve Kipisz
2016-02-24 18:30 ` [U-Boot] [PATCH V5 1/7] ARM: OMAP4/5: Centralize early clock initialization Steve Kipisz
2016-02-26 18:17   ` Tom Rini
2016-03-15 11:55   ` [U-Boot] [U-Boot, V5, " Tom Rini
2016-02-24 18:30 ` [U-Boot] [PATCH V5 2/7] ARM: OMAP4/5: Centralize gpi2c_init Steve Kipisz
2016-02-26 18:17   ` Tom Rini
2016-03-15 11:55   ` [U-Boot] [U-Boot,V5,2/7] " Tom Rini
2016-02-24 18:30 ` [U-Boot] [PATCH V5 3/7] ARM: omap-common: Add standard access for board description EEPROM Steve Kipisz
2016-02-26 18:17   ` Tom Rini
2016-03-15 11:55   ` [U-Boot] [U-Boot, V5, " Tom Rini
2016-02-24 18:30 ` [U-Boot] [PATCH V5 4/7] ti: AM335x: Use generic EEPROM detection logic Steve Kipisz
2016-02-26 18:17   ` Tom Rini
2016-03-15 11:56   ` [U-Boot] [U-Boot, V5, " Tom Rini
2016-02-24 18:30 ` Steve Kipisz [this message]
2016-02-26 18:17   ` [U-Boot] [PATCH V5 5/7] ti: AM437x: " Tom Rini
2016-03-15 11:56   ` [U-Boot] [U-Boot, V5, " Tom Rini
2016-02-24 18:30 ` [U-Boot] [PATCH V5 6/7] ARM: OMAP4/5: Add generic board detection hook Steve Kipisz
2016-02-26 18:17   ` Tom Rini
2016-03-15 11:56   ` [U-Boot] [U-Boot, V5, " Tom Rini
2016-02-24 18:30 ` [U-Boot] [PATCH V5 7/7] board: ti: AM57xx: Add detection logic for AM57xx-evm Steve Kipisz
2016-02-25  7:06   ` Lokesh Vutla
2016-02-25 14:52     ` Nishanth Menon
2016-02-26 18:17   ` Tom Rini
2016-03-15 11:56   ` [U-Boot] [U-Boot, V5, " Tom Rini
2016-02-26 18:17 ` [U-Boot] [PATCH V5 0/7] ARM: omap-common: Add board detection support for TI EVMs Tom Rini

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=1456338658-5027-6-git-send-email-s-kipisz2@ti.com \
    --to=s-kipisz2@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.