diff options
Diffstat (limited to 'arch/arm/mach-imx/imx51.c')
-rw-r--r-- | arch/arm/mach-imx/imx51.c | 100 |
1 files changed, 11 insertions, 89 deletions
diff --git a/arch/arm/mach-imx/imx51.c b/arch/arm/mach-imx/imx51.c index 8709c43ac2..f5a867be3f 100644 --- a/arch/arm/mach-imx/imx51.c +++ b/arch/arm/mach-imx/imx51.c @@ -17,69 +17,58 @@ #include <environment.h> #include <io.h> #include <mach/imx5.h> -#include <mach/imx-regs.h> +#include <mach/imx51-regs.h> +#include <mach/revision.h> #include <mach/clock-imx51_53.h> +#include <mach/generic.h> #define SI_REV 0x48 -static u32 mx51_silicon_revision; -static char *mx51_rev_string = "unknown"; - -int imx_silicon_revision(void) -{ - return mx51_silicon_revision; -} - -static int query_silicon_revision(void) +static int imx51_silicon_revision(void) { void __iomem *rom = MX51_IROM_BASE_ADDR; + u32 mx51_silicon_revision; u32 rev; rev = readl(rom + SI_REV); switch (rev) { case 0x1: mx51_silicon_revision = IMX_CHIP_REV_1_0; - mx51_rev_string = "1.0"; break; case 0x2: mx51_silicon_revision = IMX_CHIP_REV_1_1; - mx51_rev_string = "1.1"; break; case 0x10: mx51_silicon_revision = IMX_CHIP_REV_2_0; - mx51_rev_string = "2.0"; break; case 0x20: mx51_silicon_revision = IMX_CHIP_REV_3_0; - mx51_rev_string = "3.0"; break; default: mx51_silicon_revision = 0; } - return 0; -} -core_initcall(query_silicon_revision); - -static int imx51_print_silicon_rev(void) -{ - printf("detected i.MX51 rev %s\n", mx51_rev_string); + imx_set_silicon_revision("i.MX51", mx51_silicon_revision); return 0; } -device_initcall(imx51_print_silicon_rev); static int imx51_init(void) { + imx51_silicon_revision(); + imx51_boot_save_loc((void *)MX51_SRC_BASE_ADDR); + add_generic_device("imx_iim", 0, NULL, MX51_IIM_BASE_ADDR, SZ_4K, IORESOURCE_MEM, NULL); + add_generic_device("imx-iomuxv3", 0, NULL, MX51_IOMUXC_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); add_generic_device("imx51-ccm", 0, NULL, MX51_CCM_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); add_generic_device("imx31-gpt", 0, NULL, MX51_GPT1_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); add_generic_device("imx31-gpio", 0, NULL, MX51_GPIO1_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); add_generic_device("imx31-gpio", 1, NULL, MX51_GPIO2_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); add_generic_device("imx31-gpio", 2, NULL, MX51_GPIO3_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); add_generic_device("imx31-gpio", 3, NULL, MX51_GPIO4_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); + add_generic_device("imx21-wdt", 0, NULL, MX51_WDOG_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL); return 0; } @@ -104,73 +93,6 @@ postcore_initcall(imx51_init); * power up. */ -#define SRC_SBMR 0x4 -#define SBMR_BT_MEM_TYPE_SHIFT 7 -#define SBMR_BT_MEM_CTL_SHIFT 0 -#define SBMR_BMOD_SHIFT 14 - -static int imx51_boot_save_loc(void) -{ - const char *bareboxloc = NULL; - uint32_t reg; - unsigned int ctrl, type; - - /* [CTRL][TYPE] */ - const char *const locations[4][4] = { - { /* CTRL = WEIM */ - "nor", - NULL, - "onenand", - NULL, - }, { /* CTRL == NAND */ - "nand", - "nand", - "nand", - "nand", - }, { /* CTRL == reserved */ - NULL, - NULL, - NULL, - NULL, - }, { /* CTRL == expansion */ - "mmc", - NULL, - "i2c", - "spi", - } - }; - - reg = readl(MX51_SRC_BASE_ADDR + SRC_SBMR); - - switch ((reg >> SBMR_BMOD_SHIFT) & 0x3) { - case 0: - case 2: - /* internal boot */ - ctrl = (reg >> SBMR_BT_MEM_CTL_SHIFT) & 0x3; - type = (reg >> SBMR_BT_MEM_TYPE_SHIFT) & 0x3; - - bareboxloc = locations[ctrl][type]; - break; - case 1: - /* reserved */ - bareboxloc = "unknown"; - break; - case 3: - bareboxloc = "serial"; - break; - - } - - if (bareboxloc) { - setenv("barebox_loc", bareboxloc); - export("barebox_loc"); - } - - return 0; -} - -coredevice_initcall(imx51_boot_save_loc); - #define setup_pll_800(base) imx5_setup_pll((base), 800, (( 8 << 4) + ((1 - 1) << 0)), ( 3 - 1), 1) #define setup_pll_665(base) imx5_setup_pll((base), 665, (( 6 << 4) + ((1 - 1) << 0)), (96 - 1), 89) #define setup_pll_600(base) imx5_setup_pll((base), 600, (( 6 << 4) + ((1 - 1) << 0)), ( 4 - 1), 1) |