ARM: zynq: Simplify SLCR initialization
Based on
"mfd: syscon: Decouple syscon interface from platform devices"
(sha1: bdb0066df9
)
SLCR driver can use syscon/regmap drivers directly.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
Родитель
bb9cac24d7
Коммит
3329659df0
|
@ -146,8 +146,6 @@ out:
|
||||||
|
|
||||||
platform_device_register(&zynq_cpuidle_device);
|
platform_device_register(&zynq_cpuidle_device);
|
||||||
platform_device_register_full(&devinfo);
|
platform_device_register_full(&devinfo);
|
||||||
|
|
||||||
zynq_slcr_init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init zynq_timer_init(void)
|
static void __init zynq_timer_init(void)
|
||||||
|
|
|
@ -47,11 +47,6 @@ static struct regmap *zynq_slcr_regmap;
|
||||||
*/
|
*/
|
||||||
static int zynq_slcr_write(u32 val, u32 offset)
|
static int zynq_slcr_write(u32 val, u32 offset)
|
||||||
{
|
{
|
||||||
if (!zynq_slcr_regmap) {
|
|
||||||
writel(val, zynq_slcr_base + offset);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return regmap_write(zynq_slcr_regmap, offset, val);
|
return regmap_write(zynq_slcr_regmap, offset, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,12 +60,7 @@ static int zynq_slcr_write(u32 val, u32 offset)
|
||||||
*/
|
*/
|
||||||
static int zynq_slcr_read(u32 *val, u32 offset)
|
static int zynq_slcr_read(u32 *val, u32 offset)
|
||||||
{
|
{
|
||||||
if (zynq_slcr_regmap)
|
|
||||||
return regmap_read(zynq_slcr_regmap, offset, val);
|
return regmap_read(zynq_slcr_regmap, offset, val);
|
||||||
|
|
||||||
*val = readl(zynq_slcr_base + offset);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -195,23 +185,6 @@ void zynq_slcr_cpu_state_write(int cpu, bool die)
|
||||||
writel(state, zynq_slcr_base + SLCR_REBOOT_STATUS_OFFSET);
|
writel(state, zynq_slcr_base + SLCR_REBOOT_STATUS_OFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* zynq_slcr_init - Regular slcr driver init
|
|
||||||
* Return: 0 on success, negative errno otherwise.
|
|
||||||
*
|
|
||||||
* Called early during boot from platform code to remap SLCR area.
|
|
||||||
*/
|
|
||||||
int __init zynq_slcr_init(void)
|
|
||||||
{
|
|
||||||
zynq_slcr_regmap = syscon_regmap_lookup_by_compatible("xlnx,zynq-slcr");
|
|
||||||
if (IS_ERR(zynq_slcr_regmap)) {
|
|
||||||
pr_err("%s: failed to find zynq-slcr\n", __func__);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* zynq_early_slcr_init - Early slcr init function
|
* zynq_early_slcr_init - Early slcr init function
|
||||||
*
|
*
|
||||||
|
@ -237,6 +210,12 @@ int __init zynq_early_slcr_init(void)
|
||||||
|
|
||||||
np->data = (__force void *)zynq_slcr_base;
|
np->data = (__force void *)zynq_slcr_base;
|
||||||
|
|
||||||
|
zynq_slcr_regmap = syscon_regmap_lookup_by_compatible("xlnx,zynq-slcr");
|
||||||
|
if (IS_ERR(zynq_slcr_regmap)) {
|
||||||
|
pr_err("%s: failed to find zynq-slcr\n", __func__);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
/* unlock the SLCR so that registers can be changed */
|
/* unlock the SLCR so that registers can be changed */
|
||||||
zynq_slcr_unlock();
|
zynq_slcr_unlock();
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче