9
0
Fork 0

ARM i.MX53: set bootsource location

To be able to set the environment location based on the
bootsource.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2012-10-12 16:10:53 +02:00
parent 3bbe8a9ea4
commit 7b84676763
3 changed files with 39 additions and 0 deletions

View File

@ -28,6 +28,7 @@ static const char *bootsource_str[] = {
[bootsource_spi] = "spi",
[bootsource_serial] = "serial",
[bootsource_onenand] = "onenand",
[bootsource_hd] = "harddisk",
};
static enum imx_bootsource bootsource;
@ -183,3 +184,37 @@ int imx51_boot_save_loc(void __iomem *src_base)
return 0;
}
#define IMX53_SRC_SBMR 0x4
int imx53_boot_save_loc(void __iomem *src_base)
{
enum imx_bootsource src = bootsource_unknown;
uint32_t cfg1 = readl(src_base + IMX53_SRC_SBMR) & 0xff;
switch (cfg1 >> 4) {
case 2:
src = bootsource_hd;
break;
case 3:
if (cfg1 & (1 << 3))
src = bootsource_spi;
else
src = bootsource_i2c;
break;
case 4:
case 5:
case 6:
case 7:
src = bootsource_mmc;
break;
default:
break;
}
if (cfg1 & (1 << 7))
src = bootsource_nand;
imx_set_bootsource(src);
return 0;
}

View File

@ -20,6 +20,7 @@
#include <mach/imx53-regs.h>
#include <mach/revision.h>
#include <mach/clock-imx51_53.h>
#include <mach/generic.h>
#define SI_REV 0x48
@ -52,6 +53,7 @@ static int imx53_silicon_revision(void)
static int imx53_init(void)
{
imx53_silicon_revision();
imx53_boot_save_loc((void *)MX53_SRC_BASE_ADDR);
add_generic_device("imx_iim", 0, NULL, MX53_IIM_BASE_ADDR, SZ_4K,
IORESOURCE_MEM, NULL);

View File

@ -10,6 +10,7 @@ enum imx_bootsource {
bootsource_spi,
bootsource_serial,
bootsource_onenand,
bootsource_hd,
};
enum imx_bootsource imx_bootsource(void);
@ -18,6 +19,7 @@ void imx_set_bootsource(enum imx_bootsource src);
int imx_25_35_boot_save_loc(unsigned int ctrl, unsigned int type);
void imx_27_boot_save_loc(void __iomem *sysctrl_base);
int imx51_boot_save_loc(void __iomem *src_base);
int imx53_boot_save_loc(void __iomem *src_base);
/* There's a off-by-one betweem the gpio bank number and the gpiochip */
/* range e.g. GPIO_1_5 is gpio 5 under linux */