summaryrefslogtreecommitdiff
path: root/board/keymile
diff options
context:
space:
mode:
authorStefan Bigler <stefan.bigler@keymile.com>2014-05-02 10:49:27 +0200
committerYork Sun <yorksun@freescale.com>2014-05-13 08:26:54 -0700
commit4921a149e1470d92e2982e13c709357d90ef5e6c (patch)
treeb8825d039e819e4c35c24e4c8fa762d43bf1dad7 /board/keymile
parenta53e65d053401fff12740a8bbed8cb41670c268f (diff)
downloadu-boot-imx-4921a149e1470d92e2982e13c709357d90ef5e6c.zip
u-boot-imx-4921a149e1470d92e2982e13c709357d90ef5e6c.tar.gz
u-boot-imx-4921a149e1470d92e2982e13c709357d90ef5e6c.tar.bz2
kmp204x: handle dip-switch for factory settings
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@keymile.com> Signed-off-by: Valentin Longchamp <valentin.longchamp@keymile.com>
Diffstat (limited to 'board/keymile')
-rw-r--r--board/keymile/kmp204x/kmp204x.c15
-rw-r--r--board/keymile/kmp204x/kmp204x.h1
-rw-r--r--board/keymile/kmp204x/qrio.c14
3 files changed, 30 insertions, 0 deletions
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 86df2c7..08d5ca4 100644
--- a/board/keymile/kmp204x/qrio.c
+++ b/board/keymile/kmp204x/qrio.c
@@ -159,3 +159,17 @@ 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);
+}