summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCooper Jr., Franklin <fcooper@ti.com>2017-06-16 22:25:15 (GMT)
committerTom Rini <trini@konsulko.com>2017-07-10 18:25:55 (GMT)
commit5f48da9a9828c3bde89407a51124458915cd671a (patch)
treeef3d4d78fc382e15c9c5dab01fcd012396ce0602
parent85bfe48b0ab807e8c7308507ea923a16ce3fdd1a (diff)
downloadu-boot-fsl-qoriq-5f48da9a9828c3bde89407a51124458915cd671a.tar.xz
ARM: k2g: Define embedded_dtb_select for runtime DTB selection in U-boot
For K2G, runtime DTB selection utilizes the embedded_dtb_select function. Therefore, define the function which will perform a EEPROM read and then retries selecting the correct dtb now that it can detect which board its on. For other Keystone devices use an empty function since they will still use the embedded FIT functionality but their FIT will only contain a single dtb. Most production K2G boards do not have their EEPROM programmed. Therefore, perform a test to verify a K2G GP is currently being used and if it is then set the values normally set by a EEPROM read. Signed-off-by: Franklin S Cooper Jr <fcooper@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com>
-rw-r--r--board/ti/ks2_evm/board.c7
-rw-r--r--board/ti/ks2_evm/board_k2g.c38
2 files changed, 45 insertions, 0 deletions
diff --git a/board/ti/ks2_evm/board.c b/board/ti/ks2_evm/board.c
index 03254e1..4792311 100644
--- a/board/ti/ks2_evm/board.c
+++ b/board/ti/ks2_evm/board.c
@@ -277,3 +277,10 @@ void ft_board_setup_ex(void *blob, bd_t *bd)
ddr3_check_ecc_int(KS2_DDR3A_EMIF_CTRL_BASE);
}
#endif /* CONFIG_OF_BOARD_SETUP */
+
+#if defined(CONFIG_DTB_RESELECT)
+int __weak embedded_dtb_select(void)
+{
+ return 0;
+}
+#endif
diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c
index f0bd31d..3c75e22 100644
--- a/board/ti/ks2_evm/board_k2g.c
+++ b/board/ti/ks2_evm/board_k2g.c
@@ -11,9 +11,13 @@
#include <asm/ti-common/keystone_net.h>
#include <asm/arch/psc_defs.h>
#include <asm/arch/mmc_host_def.h>
+#include <fdtdec.h>
+#include <i2c.h>
#include "mux-k2g.h"
#include "../common/board_detect.h"
+#define K2G_GP_AUDIO_CODEC_ADDRESS 0x1B
+
const unsigned int sysclk_array[MAX_SYSCLK] = {
19200000,
24000000,
@@ -210,6 +214,40 @@ int board_mmc_init(bd_t *bis)
}
#endif
+#if defined(CONFIG_DTB_RESELECT)
+static int k2g_alt_board_detect(void)
+{
+ int rc;
+
+ rc = i2c_set_bus_num(1);
+ if (rc)
+ return rc;
+
+ rc = i2c_probe(K2G_GP_AUDIO_CODEC_ADDRESS);
+ if (rc)
+ return rc;
+
+ ti_i2c_eeprom_am_set("66AK2GGP", "1.0X");
+
+ return 0;
+}
+
+int embedded_dtb_select(void)
+{
+ int rc;
+
+ rc = k2g_alt_board_detect();
+ if (rc) {
+ printf("Unable to do board detection\n");
+ return -1;
+ }
+
+ fdtdec_setup();
+
+ return 0;
+}
+#endif
+
#ifdef CONFIG_BOARD_EARLY_INIT_F
static void k2g_reset_mux_config(void)