ARM: i.MX: centralize i.MX startup
Each i.MX SoC has its own SoC initcall. To ease multi SoC support move it to a single initcall. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
a6375f6e45
commit
f887536147
|
@ -12,7 +12,9 @@
|
|||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <init.h>
|
||||
#include <mach/revision.h>
|
||||
#include <mach/generic.h>
|
||||
|
||||
static int __imx_silicon_revision = IMX_CHIP_REV_UNKNOWN;
|
||||
|
||||
|
@ -29,3 +31,56 @@ void imx_set_silicon_revision(const char *soc, int revision)
|
|||
(revision >> 4) & 0xf,
|
||||
revision & 0xf);
|
||||
}
|
||||
|
||||
static int imx_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (cpu_is_mx1())
|
||||
ret = imx1_init();
|
||||
else if (cpu_is_mx21())
|
||||
ret = imx21_init();
|
||||
else if (cpu_is_mx25())
|
||||
ret = imx25_init();
|
||||
else if (cpu_is_mx27())
|
||||
ret = imx27_init();
|
||||
else if (cpu_is_mx31())
|
||||
ret = imx31_init();
|
||||
else if (cpu_is_mx35())
|
||||
ret = imx35_init();
|
||||
else if (cpu_is_mx51())
|
||||
ret = imx51_init();
|
||||
else if (cpu_is_mx53())
|
||||
ret = imx53_init();
|
||||
else if (cpu_is_mx6())
|
||||
ret = imx6_init();
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
if (of_get_root_node())
|
||||
return ret;
|
||||
|
||||
if (cpu_is_mx1())
|
||||
ret = imx1_devices_init();
|
||||
else if (cpu_is_mx21())
|
||||
ret = imx21_devices_init();
|
||||
else if (cpu_is_mx25())
|
||||
ret = imx25_devices_init();
|
||||
else if (cpu_is_mx27())
|
||||
ret = imx27_devices_init();
|
||||
else if (cpu_is_mx31())
|
||||
ret = imx31_devices_init();
|
||||
else if (cpu_is_mx35())
|
||||
ret = imx35_devices_init();
|
||||
else if (cpu_is_mx51())
|
||||
ret = imx51_devices_init();
|
||||
else if (cpu_is_mx53())
|
||||
ret = imx53_devices_init();
|
||||
else if (cpu_is_mx6())
|
||||
ret = imx6_devices_init();
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
postcore_initcall(imx_init);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <mach/imx1-regs.h>
|
||||
#include <mach/weim.h>
|
||||
#include <mach/iomux-v1.h>
|
||||
#include <mach/generic.h>
|
||||
#include <reset_source.h>
|
||||
|
||||
#define MX1_RSR MX1_SCM_BASE_ADDR
|
||||
|
@ -51,10 +52,16 @@ void imx1_setup_eimcs(size_t cs, unsigned upper, unsigned lower)
|
|||
|
||||
#include <mach/esdctl.h>
|
||||
|
||||
static int imx1_init(void)
|
||||
int imx1_init(void)
|
||||
{
|
||||
imx1_detect_reset_source();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx1_devices_init(void)
|
||||
{
|
||||
imx_iomuxv1_init((void *)MX1_GPIO1_BASE_ADDR);
|
||||
imx1_detect_reset_source();
|
||||
|
||||
add_generic_device("imx1-ccm", 0, NULL, MX1_CCM_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
|
||||
add_generic_device("imx1-gpt", 0, NULL, MX1_TIM1_BASE_ADDR, 0x100, IORESOURCE_MEM, NULL);
|
||||
|
@ -67,4 +74,3 @@ static int imx1_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx1_init);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <mach/imx21-regs.h>
|
||||
#include <mach/weim.h>
|
||||
#include <mach/iomux-v1.h>
|
||||
#include <mach/generic.h>
|
||||
|
||||
void imx21_setup_eimcs(size_t cs, unsigned upper, unsigned lower)
|
||||
{
|
||||
|
@ -24,7 +25,12 @@ void imx21_setup_eimcs(size_t cs, unsigned upper, unsigned lower)
|
|||
writel(lower, MX21_EIM_BASE_ADDR + 4 + cs * 8);
|
||||
}
|
||||
|
||||
static int imx21_init(void)
|
||||
int imx21_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx21_devices_init(void)
|
||||
{
|
||||
imx_iomuxv1_init((void *)MX21_GPIO1_BASE_ADDR);
|
||||
|
||||
|
@ -40,4 +46,3 @@ static int imx21_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx21_init);
|
||||
|
|
|
@ -53,10 +53,15 @@ u64 imx_uid(void)
|
|||
return uid;
|
||||
}
|
||||
|
||||
static int imx25_init(void)
|
||||
int imx25_init(void)
|
||||
{
|
||||
imx25_boot_save_loc((void *)MX25_CCM_BASE_ADDR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx25_devices_init(void)
|
||||
{
|
||||
add_generic_device("imx_iim", 0, NULL, MX25_IIM_BASE_ADDR, SZ_4K,
|
||||
IORESOURCE_MEM, NULL);
|
||||
|
||||
|
@ -72,4 +77,3 @@ static int imx25_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx25_init);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <mach/generic.h>
|
||||
#include <init.h>
|
||||
#include <io.h>
|
||||
#include <mach/generic.h>
|
||||
|
||||
static int imx27_silicon_revision(void)
|
||||
{
|
||||
|
@ -96,11 +97,16 @@ static void imx27_init_max(void)
|
|||
writel(val, max_base + MAX_SLAVE_PORT2_OFFSET + MAX_SLAVE_AMPR_OFFSET);
|
||||
}
|
||||
|
||||
static int imx27_init(void)
|
||||
int imx27_init(void)
|
||||
{
|
||||
imx27_silicon_revision();
|
||||
imx27_boot_save_loc((void *)MX27_SYSCTRL_BASE_ADDR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx27_devices_init(void)
|
||||
{
|
||||
imx_iomuxv1_init((void *)MX27_GPIO1_BASE_ADDR);
|
||||
|
||||
add_generic_device("imx_iim", DEVICE_ID_SINGLE, NULL,
|
||||
|
@ -124,4 +130,3 @@ static int imx27_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx27_init);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <io.h>
|
||||
#include <mach/imx31-regs.h>
|
||||
#include <mach/weim.h>
|
||||
#include <mach/generic.h>
|
||||
|
||||
void imx31_setup_weimcs(size_t cs, unsigned upper, unsigned lower,
|
||||
unsigned additional)
|
||||
|
@ -26,7 +27,12 @@ void imx31_setup_weimcs(size_t cs, unsigned upper, unsigned lower,
|
|||
writel(additional, MX31_WEIM_BASE_ADDR + (cs * 0x10) + 0x8);
|
||||
}
|
||||
|
||||
static int imx31_init(void)
|
||||
int imx31_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx31_devices_init(void)
|
||||
{
|
||||
add_generic_device("imx_iim", 0, NULL, MX31_IIM_BASE_ADDR, SZ_4K,
|
||||
IORESOURCE_MEM, NULL);
|
||||
|
@ -43,4 +49,3 @@ static int imx31_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx31_init);
|
||||
|
|
|
@ -49,20 +49,19 @@ static void imx35_silicon_revision(void)
|
|||
|
||||
#define L2_MEM_VAL 0x10
|
||||
|
||||
static int imx35_l2_fix(void)
|
||||
int imx35_init(void)
|
||||
{
|
||||
writel(0x515, MX35_CLKCTL_BASE_ADDR + L2_MEM_VAL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
core_initcall(imx35_l2_fix);
|
||||
|
||||
static int imx35_init(void)
|
||||
{
|
||||
imx35_silicon_revision();
|
||||
|
||||
imx35_boot_save_loc((void *)MX35_CCM_BASE_ADDR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx35_devices_init(void)
|
||||
{
|
||||
add_generic_device("imx_iim", 0, NULL, MX35_IIM_BASE_ADDR, SZ_4K,
|
||||
IORESOURCE_MEM, NULL);
|
||||
|
||||
|
@ -77,4 +76,3 @@ static int imx35_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx35_init);
|
||||
|
|
|
@ -41,14 +41,16 @@ static int imx51_silicon_revision(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int imx51_init(void)
|
||||
int imx51_init(void)
|
||||
{
|
||||
imx_set_silicon_revision("i.MX51", imx51_silicon_revision());
|
||||
imx51_boot_save_loc((void *)MX51_SRC_BASE_ADDR);
|
||||
|
||||
if (of_get_root_node())
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx51_devices_init(void)
|
||||
{
|
||||
add_generic_device("imx_iim", 0, NULL, MX51_IIM_BASE_ADDR, SZ_4K,
|
||||
IORESOURCE_MEM, NULL);
|
||||
|
||||
|
@ -65,7 +67,6 @@ static int imx51_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx51_init);
|
||||
|
||||
/*
|
||||
* Saves the boot source media into the $bootsource environment variable
|
||||
|
|
|
@ -50,11 +50,16 @@ static int imx53_silicon_revision(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int imx53_init(void)
|
||||
int imx53_init(void)
|
||||
{
|
||||
imx53_silicon_revision();
|
||||
imx53_boot_save_loc((void *)MX53_SRC_BASE_ADDR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx53_devices_init(void)
|
||||
{
|
||||
add_generic_device("imx_iim", 0, NULL, MX53_IIM_BASE_ADDR, SZ_4K,
|
||||
IORESOURCE_MEM, NULL);
|
||||
|
||||
|
@ -73,7 +78,6 @@ static int imx53_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx53_init);
|
||||
|
||||
void imx53_init_lowlevel_early(unsigned int cpufreq_mhz)
|
||||
{
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <mach/generic.h>
|
||||
#include <mach/revision.h>
|
||||
#include <mach/imx6-regs.h>
|
||||
#include <mach/generic.h>
|
||||
|
||||
#define SI_REV 0x260
|
||||
|
||||
|
@ -56,7 +57,7 @@ void imx6_init_lowlevel(void)
|
|||
writel(0xffffffff, 0x020c4080);
|
||||
}
|
||||
|
||||
static int imx6_init(void)
|
||||
int imx6_init(void)
|
||||
{
|
||||
u32 rev;
|
||||
u32 mx6_silicon_revision;
|
||||
|
@ -83,9 +84,11 @@ static int imx6_init(void)
|
|||
|
||||
imx_set_silicon_revision("i.MX6", mx6_silicon_revision);
|
||||
|
||||
if (of_get_root_node())
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int imx6_devices_init(void)
|
||||
{
|
||||
add_generic_device("imx-iomuxv3", 0, NULL, MX6_IOMUXC_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
|
||||
add_generic_device("imx6-ccm", 0, NULL, MX6_CCM_BASE_ADDR, 0x4000, IORESOURCE_MEM, NULL);
|
||||
add_generic_device("imx31-gpt", 0, NULL, MX6_GPT_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
|
||||
|
@ -101,4 +104,3 @@ static int imx6_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(imx6_init);
|
||||
|
|
|
@ -13,6 +13,26 @@ void imx51_boot_save_loc(void __iomem *src_base);
|
|||
void imx53_boot_save_loc(void __iomem *src_base);
|
||||
void imx6_boot_save_loc(void __iomem *src_base);
|
||||
|
||||
int imx1_init(void);
|
||||
int imx21_init(void);
|
||||
int imx25_init(void);
|
||||
int imx27_init(void);
|
||||
int imx31_init(void);
|
||||
int imx35_init(void);
|
||||
int imx51_init(void);
|
||||
int imx53_init(void);
|
||||
int imx6_init(void);
|
||||
|
||||
int imx1_devices_init(void);
|
||||
int imx21_devices_init(void);
|
||||
int imx25_devices_init(void);
|
||||
int imx27_devices_init(void);
|
||||
int imx31_devices_init(void);
|
||||
int imx35_devices_init(void);
|
||||
int imx51_devices_init(void);
|
||||
int imx53_devices_init(void);
|
||||
int imx6_devices_init(void);
|
||||
|
||||
/* 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 */
|
||||
#define IMX_GPIO_NR(bank, nr) (((bank) - 1) * 32 + (nr))
|
||||
|
|
Loading…
Reference in New Issue