Commit d2199b34 authored by Peng Fan's avatar Peng Fan Committed by Shawn Guo

ARM: imx: use device_initcall for imx_soc_device_init

This is preparation to move imx_soc_device_init to drivers/soc/imx/

There is no reason to must put dt devices under /sys/devices/soc0,
they could also be under /sys/devices/platform, so we could
pass NULL as parent when calling of_platform_default_populate.

Following soc-imx8.c soc-imx-scu.c using device_initcall, need
to change return type to int type for imx_soc_device_init.
Signed-off-by: default avatarPeng Fan <peng.fan@nxp.com>
Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
parent 64d7bf58
...@@ -49,7 +49,6 @@ void imx_aips_allow_unprivileged_access(const char *compat); ...@@ -49,7 +49,6 @@ void imx_aips_allow_unprivileged_access(const char *compat);
int mxc_device_init(void); int mxc_device_init(void);
void imx_set_soc_revision(unsigned int rev); void imx_set_soc_revision(unsigned int rev);
void imx_init_revision_from_anatop(void); void imx_init_revision_from_anatop(void);
struct device *imx_soc_device_init(void);
void imx6_enable_rbc(bool enable); void imx6_enable_rbc(bool enable);
void imx_gpc_check_dt(void); void imx_gpc_check_dt(void);
void imx_gpc_set_arm_power_in_lpm(bool power_off); void imx_gpc_set_arm_power_in_lpm(bool power_off);
......
...@@ -83,7 +83,7 @@ void __init imx_aips_allow_unprivileged_access( ...@@ -83,7 +83,7 @@ void __init imx_aips_allow_unprivileged_access(
} }
} }
struct device * __init imx_soc_device_init(void) static int __init imx_soc_device_init(void)
{ {
struct soc_device_attribute *soc_dev_attr; struct soc_device_attribute *soc_dev_attr;
const char *ocotp_compat = NULL; const char *ocotp_compat = NULL;
...@@ -97,7 +97,7 @@ struct device * __init imx_soc_device_init(void) ...@@ -97,7 +97,7 @@ struct device * __init imx_soc_device_init(void)
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
if (!soc_dev_attr) if (!soc_dev_attr)
return NULL; return -ENOMEM;
soc_dev_attr->family = "Freescale i.MX"; soc_dev_attr->family = "Freescale i.MX";
...@@ -224,18 +224,24 @@ struct device * __init imx_soc_device_init(void) ...@@ -224,18 +224,24 @@ struct device * __init imx_soc_device_init(void)
soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%d.%d", soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%d.%d",
(imx_soc_revision >> 4) & 0xf, (imx_soc_revision >> 4) & 0xf,
imx_soc_revision & 0xf); imx_soc_revision & 0xf);
if (!soc_dev_attr->revision) if (!soc_dev_attr->revision) {
ret = -ENOMEM;
goto free_soc; goto free_soc;
}
soc_dev_attr->serial_number = kasprintf(GFP_KERNEL, "%016llX", soc_uid); soc_dev_attr->serial_number = kasprintf(GFP_KERNEL, "%016llX", soc_uid);
if (!soc_dev_attr->serial_number) if (!soc_dev_attr->serial_number) {
ret = -ENOMEM;
goto free_rev; goto free_rev;
}
soc_dev = soc_device_register(soc_dev_attr); soc_dev = soc_device_register(soc_dev_attr);
if (IS_ERR(soc_dev)) if (IS_ERR(soc_dev)) {
ret = PTR_ERR(soc_dev);
goto free_serial_number; goto free_serial_number;
}
return soc_device_to_device(soc_dev); return 0;
free_serial_number: free_serial_number:
kfree(soc_dev_attr->serial_number); kfree(soc_dev_attr->serial_number);
...@@ -243,5 +249,6 @@ struct device * __init imx_soc_device_init(void) ...@@ -243,5 +249,6 @@ struct device * __init imx_soc_device_init(void)
kfree(soc_dev_attr->revision); kfree(soc_dev_attr->revision);
free_soc: free_soc:
kfree(soc_dev_attr); kfree(soc_dev_attr);
return NULL; return ret;
} }
device_initcall(imx_soc_device_init);
...@@ -245,21 +245,15 @@ static void __init imx6q_axi_init(void) ...@@ -245,21 +245,15 @@ static void __init imx6q_axi_init(void)
static void __init imx6q_init_machine(void) static void __init imx6q_init_machine(void)
{ {
struct device *parent;
if (cpu_is_imx6q() && imx_get_soc_revision() == IMX_CHIP_REVISION_2_0) if (cpu_is_imx6q() && imx_get_soc_revision() == IMX_CHIP_REVISION_2_0)
imx_print_silicon_rev("i.MX6QP", IMX_CHIP_REVISION_1_0); imx_print_silicon_rev("i.MX6QP", IMX_CHIP_REVISION_1_0);
else else
imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q", imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q",
imx_get_soc_revision()); imx_get_soc_revision());
parent = imx_soc_device_init();
if (parent == NULL)
pr_warn("failed to initialize soc device\n");
imx6q_enet_phy_init(); imx6q_enet_phy_init();
of_platform_default_populate(NULL, NULL, parent); of_platform_default_populate(NULL, NULL, NULL);
imx_anatop_init(); imx_anatop_init();
cpu_is_imx6q() ? imx6q_pm_init() : imx6dl_pm_init(); cpu_is_imx6q() ? imx6q_pm_init() : imx6dl_pm_init();
......
...@@ -45,13 +45,7 @@ static void __init imx6sl_init_late(void) ...@@ -45,13 +45,7 @@ static void __init imx6sl_init_late(void)
static void __init imx6sl_init_machine(void) static void __init imx6sl_init_machine(void)
{ {
struct device *parent; of_platform_default_populate(NULL, NULL, NULL);
parent = imx_soc_device_init();
if (parent == NULL)
pr_warn("failed to initialize soc device\n");
of_platform_default_populate(NULL, NULL, parent);
if (cpu_is_imx6sl()) if (cpu_is_imx6sl())
imx6sl_fec_init(); imx6sl_fec_init();
......
...@@ -63,13 +63,7 @@ static inline void imx6sx_enet_init(void) ...@@ -63,13 +63,7 @@ static inline void imx6sx_enet_init(void)
static void __init imx6sx_init_machine(void) static void __init imx6sx_init_machine(void)
{ {
struct device *parent; of_platform_default_populate(NULL, NULL, NULL);
parent = imx_soc_device_init();
if (parent == NULL)
pr_warn("failed to initialize soc device\n");
of_platform_default_populate(NULL, NULL, parent);
imx6sx_enet_init(); imx6sx_enet_init();
imx_anatop_init(); imx_anatop_init();
......
...@@ -55,13 +55,7 @@ static inline void imx6ul_enet_init(void) ...@@ -55,13 +55,7 @@ static inline void imx6ul_enet_init(void)
static void __init imx6ul_init_machine(void) static void __init imx6ul_init_machine(void)
{ {
struct device *parent; of_platform_default_populate(NULL, NULL, NULL);
parent = imx_soc_device_init();
if (parent == NULL)
pr_warn("failed to initialize soc device\n");
of_platform_default_populate(NULL, NULL, parent);
imx6ul_enet_init(); imx6ul_enet_init();
imx_anatop_init(); imx_anatop_init();
imx6ul_pm_init(); imx6ul_pm_init();
......
...@@ -78,12 +78,6 @@ static inline void imx7d_enet_init(void) ...@@ -78,12 +78,6 @@ static inline void imx7d_enet_init(void)
static void __init imx7d_init_machine(void) static void __init imx7d_init_machine(void)
{ {
struct device *parent;
parent = imx_soc_device_init();
if (parent == NULL)
pr_warn("failed to initialize soc device\n");
imx_anatop_init(); imx_anatop_init();
imx7d_enet_init(); imx7d_enet_init();
} }
......
...@@ -57,7 +57,7 @@ static void __init imx7ulp_init_machine(void) ...@@ -57,7 +57,7 @@ static void __init imx7ulp_init_machine(void)
mxc_set_cpu_type(MXC_CPU_IMX7ULP); mxc_set_cpu_type(MXC_CPU_IMX7ULP);
imx7ulp_set_revision(); imx7ulp_set_revision();
of_platform_default_populate(NULL, NULL, imx_soc_device_init()); of_platform_default_populate(NULL, NULL, NULL);
} }
static const char *const imx7ulp_dt_compat[] __initconst = { static const char *const imx7ulp_dt_compat[] __initconst = {
......
...@@ -49,15 +49,9 @@ static void __init vf610_detect_cpu(void) ...@@ -49,15 +49,9 @@ static void __init vf610_detect_cpu(void)
static void __init vf610_init_machine(void) static void __init vf610_init_machine(void)
{ {
struct device *parent;
vf610_detect_cpu(); vf610_detect_cpu();
parent = imx_soc_device_init(); of_platform_default_populate(NULL, NULL, NULL);
if (parent == NULL)
pr_warn("failed to initialize soc device\n");
of_platform_default_populate(NULL, NULL, parent);
} }
static const char * const vf610_dt_compat[] __initconst = { static const char * const vf610_dt_compat[] __initconst = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment