[U-Boot] [PATCH 2/8] kmp204x: handle dip-switch for factory settings

Valentin Longchamp valentin.longchamp at keymile.com
Wed Apr 30 15:01:43 CEST 2014


From: Stefan Bigler <stefan.bigler at keymile.com>

Add readout of dip-switch to revert to factory settings.
If one or more dip-switch are set, launch bank 0 that contains the
bootloader to do the required action.

Signed-off-by: Stefan Bigler <stefan.bigler at keymile.com>
Signed-off-by: Valentin Longchamp <valentin.longchamp at keymile.com>
---

 board/keymile/kmp204x/kmp204x.c | 15 +++++++++++++++
 board/keymile/kmp204x/kmp204x.h |  1 +
 board/keymile/kmp204x/qrio.c    | 13 +++++++++++++
 3 files changed, 29 insertions(+)

diff --git a/board/keymile/kmp204x/kmp204x.c b/board/keymile/kmp204x/kmp204x.c
index 5fceedd..fba1bdd 100644
--- a/board/keymile/kmp204x/kmp204x.c
+++ b/board/keymile/kmp204x/kmp204x.c
@@ -116,6 +116,9 @@ int board_early_init_r(void)
 	/* enable the Unit LED (red) & Boot LED (on) */
 	qrio_set_leds();
 
+	/* enable Application Buffer */
+	qrio_enable_app_buffer();
+
 	return ret;
 }
 
@@ -171,6 +174,18 @@ int hush_init_var(void)
 #if defined(CONFIG_LAST_STAGE_INIT)
 int last_stage_init(void)
 {
+#if defined(CONFIG_KMCOGE4)
+	/* on KMCOGE4, the BFTIC4 is on the LBAPP2 */
+	struct bfticu_iomap *bftic4 =
+		(struct bfticu_iomap *)CONFIG_SYS_LBAPP2_BASE;
+	u8 dip_switch = in_8((u8 *)&(bftic4->mswitch)) & BFTICU_DIPSWITCH_MASK;
+
+	if (dip_switch != 0) {
+		/* start bootloader */
+		puts("DIP:   Enabled\n");
+		setenv("actual_bank", "0");
+	}
+#endif
 	set_km_env();
 	return 0;
 }
diff --git a/board/keymile/kmp204x/kmp204x.h b/board/keymile/kmp204x/kmp204x.h
index 34de27e..720e225 100644
--- a/board/keymile/kmp204x/kmp204x.h
+++ b/board/keymile/kmp204x/kmp204x.h
@@ -22,5 +22,6 @@ void qrio_gpio_direction_input(u8 port_off, u8 gpio_nr);
 void qrio_prst(u8 bit, bool en, bool wden);
 void qrio_prstcfg(u8 bit, u8 mode);
 void qrio_set_leds(void);
+void qrio_enable_app_buffer(void);
 
 void pci_of_setup(void *blob, bd_t *bd);
diff --git a/board/keymile/kmp204x/qrio.c b/board/keymile/kmp204x/qrio.c
index 11949f4..c4f8dfd 100644
--- a/board/keymile/kmp204x/qrio.c
+++ b/board/keymile/kmp204x/qrio.c
@@ -158,3 +158,16 @@ void qrio_set_leds(void)
 	ctrlh |= (CTRLH_WRL_BOOT | CTRLH_WRL_UNITRUN);
 	out_8(qrio_base + CTRLH_OFF, ctrlh);
 }
+
+#define CTRLL_OFF		0x03
+#define CTRLL_WRB_BUFENA	0x20
+
+void qrio_enable_app_buffer(void)
+{
+	u8 ctrll;
+	void __iomem *qrio_base = (void *)CONFIG_SYS_QRIO_BASE;
+	/* enable application buffer */
+	ctrll = in_8(qrio_base + CTRLL_OFF);
+	ctrll |= (CTRLL_WRB_BUFENA);
+	out_8(qrio_base + CTRLL_OFF, ctrll);
+}
-- 
1.8.0.1



More information about the U-Boot mailing list