Merge branch 'vexpress' of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-aarch64
From Catalin Marinas <catalin.marinas@arm.com>: "... move the vexpress poweroff/restart code from arch/arm to driver/power/reset so that the code can be reused in arm64."
This commit is contained in:
Коммит
18bc4e79fd
|
@ -17,6 +17,9 @@ config ARCH_VEXPRESS
|
||||||
select NO_IOPORT
|
select NO_IOPORT
|
||||||
select PLAT_VERSATILE
|
select PLAT_VERSATILE
|
||||||
select PLAT_VERSATILE_CLCD
|
select PLAT_VERSATILE_CLCD
|
||||||
|
select POWER_RESET
|
||||||
|
select POWER_RESET_VEXPRESS
|
||||||
|
select POWER_SUPPLY
|
||||||
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
select VEXPRESS_CONFIG
|
select VEXPRESS_CONFIG
|
||||||
help
|
help
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
|
ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
|
||||||
-I$(srctree)/arch/arm/plat-versatile/include
|
-I$(srctree)/arch/arm/plat-versatile/include
|
||||||
|
|
||||||
obj-y := v2m.o reset.o
|
obj-y := v2m.o
|
||||||
obj-$(CONFIG_ARCH_VEXPRESS_CA9X4) += ct-ca9x4.o
|
obj-$(CONFIG_ARCH_VEXPRESS_CA9X4) += ct-ca9x4.o
|
||||||
obj-$(CONFIG_SMP) += platsmp.o
|
obj-$(CONFIG_SMP) += platsmp.o
|
||||||
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
||||||
|
|
|
@ -361,8 +361,6 @@ static void __init v2m_init(void)
|
||||||
for (i = 0; i < ARRAY_SIZE(v2m_amba_devs); i++)
|
for (i = 0; i < ARRAY_SIZE(v2m_amba_devs); i++)
|
||||||
amba_device_register(v2m_amba_devs[i], &iomem_resource);
|
amba_device_register(v2m_amba_devs[i], &iomem_resource);
|
||||||
|
|
||||||
pm_power_off = vexpress_power_off;
|
|
||||||
|
|
||||||
ct_desc->init_tile();
|
ct_desc->init_tile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,7 +372,6 @@ MACHINE_START(VEXPRESS, "ARM-Versatile Express")
|
||||||
.init_irq = v2m_init_irq,
|
.init_irq = v2m_init_irq,
|
||||||
.init_time = v2m_timer_init,
|
.init_time = v2m_timer_init,
|
||||||
.init_machine = v2m_init,
|
.init_machine = v2m_init,
|
||||||
.restart = vexpress_restart,
|
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
||||||
static struct map_desc v2m_rs1_io_desc __initdata = {
|
static struct map_desc v2m_rs1_io_desc __initdata = {
|
||||||
|
@ -464,7 +461,6 @@ static void __init v2m_dt_init(void)
|
||||||
{
|
{
|
||||||
l2x0_of_init(0x00400000, 0xfe0fffff);
|
l2x0_of_init(0x00400000, 0xfe0fffff);
|
||||||
of_platform_populate(NULL, v2m_dt_bus_match, NULL, NULL);
|
of_platform_populate(NULL, v2m_dt_bus_match, NULL, NULL);
|
||||||
pm_power_off = vexpress_power_off;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * const v2m_dt_match[] __initconst = {
|
static const char * const v2m_dt_match[] __initconst = {
|
||||||
|
@ -481,5 +477,4 @@ DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express")
|
||||||
.init_irq = irqchip_init,
|
.init_irq = irqchip_init,
|
||||||
.init_time = v2m_dt_timer_init,
|
.init_time = v2m_dt_timer_init,
|
||||||
.init_machine = v2m_dt_init,
|
.init_machine = v2m_dt_init,
|
||||||
.restart = vexpress_restart,
|
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
|
@ -30,3 +30,10 @@ config POWER_RESET_RESTART
|
||||||
Some boards don't actually have the ability to power off.
|
Some boards don't actually have the ability to power off.
|
||||||
Instead they restart, and u-boot holds the SoC until the
|
Instead they restart, and u-boot holds the SoC until the
|
||||||
user presses a key. u-boot then boots into Linux.
|
user presses a key. u-boot then boots into Linux.
|
||||||
|
|
||||||
|
config POWER_RESET_VEXPRESS
|
||||||
|
bool
|
||||||
|
depends on POWER_RESET
|
||||||
|
help
|
||||||
|
Power off and reset support for the ARM Ltd. Versatile
|
||||||
|
Express boards.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o
|
obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o
|
||||||
obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
|
obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
|
||||||
obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o
|
obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o
|
||||||
|
obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.o
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
#include <linux/stat.h>
|
#include <linux/stat.h>
|
||||||
#include <linux/vexpress.h>
|
#include <linux/vexpress.h>
|
||||||
|
|
||||||
|
#include <asm/system_misc.h>
|
||||||
|
|
||||||
static void vexpress_reset_do(struct device *dev, const char *what)
|
static void vexpress_reset_do(struct device *dev, const char *what)
|
||||||
{
|
{
|
||||||
int err = -ENOENT;
|
int err = -ENOENT;
|
||||||
|
@ -39,14 +41,14 @@ static void vexpress_reset_do(struct device *dev, const char *what)
|
||||||
|
|
||||||
static struct device *vexpress_power_off_device;
|
static struct device *vexpress_power_off_device;
|
||||||
|
|
||||||
void vexpress_power_off(void)
|
static void vexpress_power_off(void)
|
||||||
{
|
{
|
||||||
vexpress_reset_do(vexpress_power_off_device, "power off");
|
vexpress_reset_do(vexpress_power_off_device, "power off");
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct device *vexpress_restart_device;
|
static struct device *vexpress_restart_device;
|
||||||
|
|
||||||
void vexpress_restart(char str, const char *cmd)
|
static void vexpress_restart(char str, const char *cmd)
|
||||||
{
|
{
|
||||||
vexpress_reset_do(vexpress_restart_device, "restart");
|
vexpress_reset_do(vexpress_restart_device, "restart");
|
||||||
}
|
}
|
||||||
|
@ -103,14 +105,17 @@ static int vexpress_reset_probe(struct platform_device *pdev)
|
||||||
switch (func) {
|
switch (func) {
|
||||||
case FUNC_SHUTDOWN:
|
case FUNC_SHUTDOWN:
|
||||||
vexpress_power_off_device = &pdev->dev;
|
vexpress_power_off_device = &pdev->dev;
|
||||||
|
pm_power_off = vexpress_power_off;
|
||||||
break;
|
break;
|
||||||
case FUNC_RESET:
|
case FUNC_RESET:
|
||||||
if (!vexpress_restart_device)
|
if (!vexpress_restart_device)
|
||||||
vexpress_restart_device = &pdev->dev;
|
vexpress_restart_device = &pdev->dev;
|
||||||
|
arm_pm_restart = vexpress_restart;
|
||||||
device_create_file(&pdev->dev, &dev_attr_active);
|
device_create_file(&pdev->dev, &dev_attr_active);
|
||||||
break;
|
break;
|
||||||
case FUNC_REBOOT:
|
case FUNC_REBOOT:
|
||||||
vexpress_restart_device = &pdev->dev;
|
vexpress_restart_device = &pdev->dev;
|
||||||
|
arm_pm_restart = vexpress_restart;
|
||||||
device_create_file(&pdev->dev, &dev_attr_active);
|
device_create_file(&pdev->dev, &dev_attr_active);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
|
@ -115,9 +115,6 @@ unsigned __vexpress_get_site(struct device *dev, struct device_node *node);
|
||||||
void vexpress_sysreg_early_init(void __iomem *base);
|
void vexpress_sysreg_early_init(void __iomem *base);
|
||||||
void vexpress_sysreg_of_early_init(void);
|
void vexpress_sysreg_of_early_init(void);
|
||||||
|
|
||||||
void vexpress_power_off(void);
|
|
||||||
void vexpress_restart(char str, const char *cmd);
|
|
||||||
|
|
||||||
/* Clocks */
|
/* Clocks */
|
||||||
|
|
||||||
struct clk *vexpress_osc_setup(struct device *dev);
|
struct clk *vexpress_osc_setup(struct device *dev);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче