diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-06-02 16:28:34 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-06-02 16:28:34 +0200 |
commit | e57a8119d11bd1c835945cb4090d036003f8d2f9 (patch) | |
tree | c58501e4c3b9a2c0c87e520c3311f72f6df2f0fd /arch | |
parent | 08f2dda59fbf1be33f45e307cdd5c98e2a4ed3c2 (diff) | |
parent | 631063fb44c10ea971ac7b4919b528634dde4b2e (diff) | |
download | barebox-e57a8119d11bd1c835945cb4090d036003f8d2f9.tar.gz barebox-e57a8119d11bd1c835945cb4090d036003f8d2f9.tar.xz |
Merge branch 'for-next/mxs'
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/boards/crystalfontz-cfa10036/hwdetect.c | 16 | ||||
-rw-r--r-- | arch/arm/mach-mxs/imx.c | 44 |
2 files changed, 59 insertions, 1 deletions
diff --git a/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c b/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c index 5eb3ca4cf7..21199d6433 100644 --- a/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c +++ b/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c @@ -29,6 +29,10 @@ enum board_type { BOARD_ID_CFA10036 = 0, BOARD_ID_CFA10037 = 1, BOARD_ID_CFA10049 = 2, + BOARD_ID_CFA10055 = 3, + BOARD_ID_CFA10056 = 4, + BOARD_ID_CFA10057 = 5, + BOARD_ID_CFA10058 = 6, }; struct cfa_eeprom_info { @@ -83,6 +87,18 @@ void cfa10036_detect_hw(void) case BOARD_ID_CFA10049: board_name = "cfa10049"; break; + case BOARD_ID_CFA10055: + board_name = "cfa10055"; + break; + case BOARD_ID_CFA10056: + board_name = "cfa10056"; + break; + case BOARD_ID_CFA10057: + board_name = "cfa10057"; + break; + case BOARD_ID_CFA10058: + board_name = "cfa10058"; + break; default: pr_err("Board ID not supported\n"); return; diff --git a/arch/arm/mach-mxs/imx.c b/arch/arm/mach-mxs/imx.c index fcb26f73b3..5acce9376a 100644 --- a/arch/arm/mach-mxs/imx.c +++ b/arch/arm/mach-mxs/imx.c @@ -112,6 +112,48 @@ static void mxs_silicon_revision(void) silicon_revision_set(product, revision); } +#define HW_PINCTRL_MUXSEL2 0x120 +#define HW_PINCTRL_MUXSEL3 0x130 +#define HW_PINCTRL_DOE1 0x710 +#define HW_PINCTRL_DIN1 0x610 + +/* + * we are interested in the setting of: + * - GPIO BANK1/19: 1 = the ROM has used the following pins for boot source selection + * - GPIO BANK1/5: ETM enable + * - GPIO BANK1/3: BM3 + * - GPIO BANK1/2: BM2 + * - GPIO BANK1/1: BM1 + * - GPIO BANK1/0: BM0 + */ +static uint32_t mx23_detect_bootsource(void) +{ + uint32_t mux2, mux3, dir, mode; + + mux3 = readl(IMX_IOMUXC_BASE + HW_PINCTRL_MUXSEL3); + mux2 = readl(IMX_IOMUXC_BASE + HW_PINCTRL_MUXSEL2); + dir = readl(IMX_IOMUXC_BASE + HW_PINCTRL_DOE1); + + /* force the GPIO lines of interest to input */ + writel(0x0008002f, IMX_IOMUXC_BASE + HW_PINCTRL_DOE1 + 8); + /* force the GPIO lines of interest to act as GPIO */ + writel(0x00000cff, IMX_IOMUXC_BASE + HW_PINCTRL_MUXSEL2 + 4); + writel(0x000000c0, IMX_IOMUXC_BASE + HW_PINCTRL_MUXSEL3 + 4); + + /* read the bootstrapping */ + mode = readl(IMX_IOMUXC_BASE + HW_PINCTRL_DIN1) & 0x8002f; + + /* restore previous settings */ + writel(mux3, IMX_IOMUXC_BASE + HW_PINCTRL_MUXSEL3); + writel(mux2, IMX_IOMUXC_BASE + HW_PINCTRL_MUXSEL2); + writel(dir, IMX_IOMUXC_BASE + HW_PINCTRL_DOE1); + + if (!(mode & (1 << 19))) + return 0xff; /* invalid marker */ + + return (mode & 0xf) | ((mode & 0x20) >> 1); +} + #define MX28_REV_1_0_MODE (0x0001a7f0) #define MX28_REV_1_2_MODE (0x00019bf0) @@ -122,7 +164,7 @@ static void mxs_boot_save_loc(void) uint32_t mode = 0xff; if (cpu_is_mx23()) { - /* not implemented yet */ + mode = mx23_detect_bootsource(); } else if (cpu_is_mx28()) { enum silicon_revision rev = silicon_revision_get(); |