diff options
author | Stefan Bigler <stefan.bigler@keymile.com> | 2014-05-02 10:49:27 +0200 |
---|---|---|
committer | York Sun <yorksun@freescale.com> | 2014-05-13 08:26:54 -0700 |
commit | 4921a149e1470d92e2982e13c709357d90ef5e6c (patch) | |
tree | b8825d039e819e4c35c24e4c8fa762d43bf1dad7 | |
parent | a53e65d053401fff12740a8bbed8cb41670c268f (diff) | |
download | u-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>
-rw-r--r-- | board/keymile/kmp204x/kmp204x.c | 15 | ||||
-rw-r--r-- | board/keymile/kmp204x/kmp204x.h | 1 | ||||
-rw-r--r-- | board/keymile/kmp204x/qrio.c | 14 |
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); +} |