mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
syscore: Pass context data to callbacks
Several drivers can benefit from registering per-instance data along with the syscore operations. To achieve this, move the modifiable fields out of the syscore_ops structure and into a separate struct syscore that can be registered with the framework. Add a void * driver data field for drivers to store contextual data that will be passed to the syscore ops. Acked-by: Rafael J. Wysocki (Intel) <rafael@kernel.org> Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
@@ -215,7 +215,7 @@ static const struct of_device_id exynos_dt_mcpm_match[] = {
|
||||
{},
|
||||
};
|
||||
|
||||
static void exynos_mcpm_setup_entry_point(void)
|
||||
static void exynos_mcpm_setup_entry_point(void *data)
|
||||
{
|
||||
/*
|
||||
* U-Boot SPL is hardcoded to jump to the start of ns_sram_base_addr
|
||||
@@ -228,10 +228,14 @@ static void exynos_mcpm_setup_entry_point(void)
|
||||
__raw_writel(__pa_symbol(mcpm_entry_point), ns_sram_base_addr + 8);
|
||||
}
|
||||
|
||||
static struct syscore_ops exynos_mcpm_syscore_ops = {
|
||||
static const struct syscore_ops exynos_mcpm_syscore_ops = {
|
||||
.resume = exynos_mcpm_setup_entry_point,
|
||||
};
|
||||
|
||||
static struct syscore exynos_mcpm_syscore = {
|
||||
.ops = &exynos_mcpm_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init exynos_mcpm_init(void)
|
||||
{
|
||||
struct device_node *node;
|
||||
@@ -300,9 +304,9 @@ static int __init exynos_mcpm_init(void)
|
||||
pmu_raw_writel(value, EXYNOS_COMMON_OPTION(i));
|
||||
}
|
||||
|
||||
exynos_mcpm_setup_entry_point();
|
||||
exynos_mcpm_setup_entry_point(NULL);
|
||||
|
||||
register_syscore_ops(&exynos_mcpm_syscore_ops);
|
||||
register_syscore(&exynos_mcpm_syscore);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -53,9 +53,9 @@ struct exynos_pm_data {
|
||||
|
||||
void (*pm_prepare)(void);
|
||||
void (*pm_resume_prepare)(void);
|
||||
void (*pm_resume)(void);
|
||||
int (*pm_suspend)(void);
|
||||
int (*cpu_suspend)(unsigned long);
|
||||
|
||||
const struct syscore_ops *syscore_ops;
|
||||
};
|
||||
|
||||
/* Used only on Exynos542x/5800 */
|
||||
@@ -376,7 +376,7 @@ static void exynos5420_pm_prepare(void)
|
||||
}
|
||||
|
||||
|
||||
static int exynos_pm_suspend(void)
|
||||
static int exynos_pm_suspend(void *data)
|
||||
{
|
||||
exynos_pm_central_suspend();
|
||||
|
||||
@@ -390,7 +390,7 @@ static int exynos_pm_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int exynos5420_pm_suspend(void)
|
||||
static int exynos5420_pm_suspend(void *data)
|
||||
{
|
||||
u32 this_cluster;
|
||||
|
||||
@@ -408,7 +408,7 @@ static int exynos5420_pm_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void exynos_pm_resume(void)
|
||||
static void exynos_pm_resume(void *data)
|
||||
{
|
||||
u32 cpuid = read_cpuid_part();
|
||||
|
||||
@@ -429,7 +429,7 @@ early_wakeup:
|
||||
exynos_set_delayed_reset_assertion(true);
|
||||
}
|
||||
|
||||
static void exynos3250_pm_resume(void)
|
||||
static void exynos3250_pm_resume(void *data)
|
||||
{
|
||||
u32 cpuid = read_cpuid_part();
|
||||
|
||||
@@ -473,7 +473,7 @@ static void exynos5420_prepare_pm_resume(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void exynos5420_pm_resume(void)
|
||||
static void exynos5420_pm_resume(void *data)
|
||||
{
|
||||
unsigned long tmp;
|
||||
|
||||
@@ -596,41 +596,52 @@ static const struct platform_suspend_ops exynos_suspend_ops = {
|
||||
.valid = suspend_valid_only_mem,
|
||||
};
|
||||
|
||||
static const struct syscore_ops exynos3250_syscore_ops = {
|
||||
.suspend = exynos_pm_suspend,
|
||||
.resume = exynos3250_pm_resume,
|
||||
};
|
||||
|
||||
static const struct exynos_pm_data exynos3250_pm_data = {
|
||||
.wkup_irq = exynos3250_wkup_irq,
|
||||
.wake_disable_mask = ((0xFF << 8) | (0x1F << 1)),
|
||||
.pm_suspend = exynos_pm_suspend,
|
||||
.pm_resume = exynos3250_pm_resume,
|
||||
.pm_prepare = exynos3250_pm_prepare,
|
||||
.cpu_suspend = exynos3250_cpu_suspend,
|
||||
.syscore_ops = &exynos3250_syscore_ops,
|
||||
};
|
||||
|
||||
static const struct syscore_ops exynos_syscore_ops = {
|
||||
.suspend = exynos_pm_suspend,
|
||||
.resume = exynos_pm_resume,
|
||||
};
|
||||
|
||||
static const struct exynos_pm_data exynos4_pm_data = {
|
||||
.wkup_irq = exynos4_wkup_irq,
|
||||
.wake_disable_mask = ((0xFF << 8) | (0x1F << 1)),
|
||||
.pm_suspend = exynos_pm_suspend,
|
||||
.pm_resume = exynos_pm_resume,
|
||||
.pm_prepare = exynos_pm_prepare,
|
||||
.cpu_suspend = exynos_cpu_suspend,
|
||||
.syscore_ops = &exynos_syscore_ops,
|
||||
};
|
||||
|
||||
static const struct exynos_pm_data exynos5250_pm_data = {
|
||||
.wkup_irq = exynos5250_wkup_irq,
|
||||
.wake_disable_mask = ((0xFF << 8) | (0x1F << 1)),
|
||||
.pm_suspend = exynos_pm_suspend,
|
||||
.pm_resume = exynos_pm_resume,
|
||||
.pm_prepare = exynos_pm_prepare,
|
||||
.cpu_suspend = exynos_cpu_suspend,
|
||||
.syscore_ops = &exynos_syscore_ops,
|
||||
};
|
||||
|
||||
static const struct syscore_ops exynos5420_syscore_ops = {
|
||||
.resume = exynos5420_pm_resume,
|
||||
.suspend = exynos5420_pm_suspend,
|
||||
};
|
||||
|
||||
static const struct exynos_pm_data exynos5420_pm_data = {
|
||||
.wkup_irq = exynos5250_wkup_irq,
|
||||
.wake_disable_mask = (0x7F << 7) | (0x1F << 1),
|
||||
.pm_resume_prepare = exynos5420_prepare_pm_resume,
|
||||
.pm_resume = exynos5420_pm_resume,
|
||||
.pm_suspend = exynos5420_pm_suspend,
|
||||
.pm_prepare = exynos5420_pm_prepare,
|
||||
.cpu_suspend = exynos5420_cpu_suspend,
|
||||
.syscore_ops = &exynos5420_syscore_ops,
|
||||
};
|
||||
|
||||
static const struct of_device_id exynos_pmu_of_device_ids[] __initconst = {
|
||||
@@ -656,7 +667,7 @@ static const struct of_device_id exynos_pmu_of_device_ids[] __initconst = {
|
||||
{ /*sentinel*/ },
|
||||
};
|
||||
|
||||
static struct syscore_ops exynos_pm_syscore_ops;
|
||||
static struct syscore exynos_pm_syscore;
|
||||
|
||||
void __init exynos_pm_init(void)
|
||||
{
|
||||
@@ -684,10 +695,9 @@ void __init exynos_pm_init(void)
|
||||
tmp |= pm_data->wake_disable_mask;
|
||||
pmu_raw_writel(tmp, S5P_WAKEUP_MASK);
|
||||
|
||||
exynos_pm_syscore_ops.suspend = pm_data->pm_suspend;
|
||||
exynos_pm_syscore_ops.resume = pm_data->pm_resume;
|
||||
exynos_pm_syscore.ops = pm_data->syscore_ops;
|
||||
|
||||
register_syscore_ops(&exynos_pm_syscore_ops);
|
||||
register_syscore(&exynos_pm_syscore);
|
||||
suspend_set_ops(&exynos_suspend_ops);
|
||||
|
||||
/*
|
||||
|
||||
@@ -34,9 +34,9 @@ extern void __init pxa27x_map_io(void);
|
||||
extern void __init pxa3xx_init_irq(void);
|
||||
extern void __init pxa3xx_map_io(void);
|
||||
|
||||
extern struct syscore_ops pxa_irq_syscore_ops;
|
||||
extern struct syscore_ops pxa2xx_mfp_syscore_ops;
|
||||
extern struct syscore_ops pxa3xx_mfp_syscore_ops;
|
||||
extern struct syscore pxa_irq_syscore;
|
||||
extern struct syscore pxa2xx_mfp_syscore;
|
||||
extern struct syscore pxa3xx_mfp_syscore;
|
||||
|
||||
void __init pxa_set_ffuart_info(void *info);
|
||||
void __init pxa_set_btuart_info(void *info);
|
||||
|
||||
@@ -178,7 +178,7 @@ void __init pxa_init_irq(int irq_nr, int (*fn)(struct irq_data *, unsigned int))
|
||||
static unsigned long saved_icmr[MAX_INTERNAL_IRQS/32];
|
||||
static unsigned long saved_ipr[MAX_INTERNAL_IRQS];
|
||||
|
||||
static int pxa_irq_suspend(void)
|
||||
static int pxa_irq_suspend(void *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -197,7 +197,7 @@ static int pxa_irq_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pxa_irq_resume(void)
|
||||
static void pxa_irq_resume(void *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -219,11 +219,15 @@ static void pxa_irq_resume(void)
|
||||
#define pxa_irq_resume NULL
|
||||
#endif
|
||||
|
||||
struct syscore_ops pxa_irq_syscore_ops = {
|
||||
static const struct syscore_ops pxa_irq_syscore_ops = {
|
||||
.suspend = pxa_irq_suspend,
|
||||
.resume = pxa_irq_resume,
|
||||
};
|
||||
|
||||
struct syscore pxa_irq_syscore = {
|
||||
.ops = &pxa_irq_syscore_ops,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id intc_ids[] __initconst = {
|
||||
{ .compatible = "marvell,pxa-intc", },
|
||||
|
||||
@@ -346,7 +346,7 @@ static unsigned long saved_gpdr[4];
|
||||
static unsigned long saved_gplr[4];
|
||||
static unsigned long saved_pgsr[4];
|
||||
|
||||
static int pxa2xx_mfp_suspend(void)
|
||||
static int pxa2xx_mfp_suspend(void *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -385,7 +385,7 @@ static int pxa2xx_mfp_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pxa2xx_mfp_resume(void)
|
||||
static void pxa2xx_mfp_resume(void *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -404,11 +404,15 @@ static void pxa2xx_mfp_resume(void)
|
||||
#define pxa2xx_mfp_resume NULL
|
||||
#endif
|
||||
|
||||
struct syscore_ops pxa2xx_mfp_syscore_ops = {
|
||||
static const struct syscore_ops pxa2xx_mfp_syscore_ops = {
|
||||
.suspend = pxa2xx_mfp_suspend,
|
||||
.resume = pxa2xx_mfp_resume,
|
||||
};
|
||||
|
||||
struct syscore pxa2xx_mfp_syscore = {
|
||||
.ops = &pxa2xx_mfp_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init pxa2xx_mfp_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -27,13 +27,13 @@
|
||||
* a pull-down mode if they're an active low chip select, and we're
|
||||
* just entering standby.
|
||||
*/
|
||||
static int pxa3xx_mfp_suspend(void)
|
||||
static int pxa3xx_mfp_suspend(void *data)
|
||||
{
|
||||
mfp_config_lpm();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pxa3xx_mfp_resume(void)
|
||||
static void pxa3xx_mfp_resume(void *data)
|
||||
{
|
||||
mfp_config_run();
|
||||
|
||||
@@ -49,7 +49,11 @@ static void pxa3xx_mfp_resume(void)
|
||||
#define pxa3xx_mfp_resume NULL
|
||||
#endif
|
||||
|
||||
struct syscore_ops pxa3xx_mfp_syscore_ops = {
|
||||
static const struct syscore_ops pxa3xx_mfp_syscore_ops = {
|
||||
.suspend = pxa3xx_mfp_suspend,
|
||||
.resume = pxa3xx_mfp_resume,
|
||||
};
|
||||
|
||||
struct syscore pxa3xx_mfp_syscore = {
|
||||
.ops = &pxa3xx_mfp_syscore_ops,
|
||||
};
|
||||
|
||||
@@ -235,8 +235,8 @@ static int __init pxa25x_init(void)
|
||||
|
||||
pxa25x_init_pm();
|
||||
|
||||
register_syscore_ops(&pxa_irq_syscore_ops);
|
||||
register_syscore_ops(&pxa2xx_mfp_syscore_ops);
|
||||
register_syscore(&pxa_irq_syscore);
|
||||
register_syscore(&pxa2xx_mfp_syscore);
|
||||
|
||||
if (!of_have_populated_dt()) {
|
||||
software_node_register(&pxa2xx_gpiochip_node);
|
||||
|
||||
@@ -337,8 +337,8 @@ static int __init pxa27x_init(void)
|
||||
|
||||
pxa27x_init_pm();
|
||||
|
||||
register_syscore_ops(&pxa_irq_syscore_ops);
|
||||
register_syscore_ops(&pxa2xx_mfp_syscore_ops);
|
||||
register_syscore(&pxa_irq_syscore);
|
||||
register_syscore(&pxa2xx_mfp_syscore);
|
||||
|
||||
if (!of_have_populated_dt()) {
|
||||
software_node_register(&pxa2xx_gpiochip_node);
|
||||
|
||||
@@ -424,8 +424,8 @@ static int __init pxa3xx_init(void)
|
||||
if (cpu_is_pxa320())
|
||||
enable_irq_wake(IRQ_WAKEUP1);
|
||||
|
||||
register_syscore_ops(&pxa_irq_syscore_ops);
|
||||
register_syscore_ops(&pxa3xx_mfp_syscore_ops);
|
||||
register_syscore(&pxa_irq_syscore);
|
||||
register_syscore(&pxa3xx_mfp_syscore);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -18,7 +18,7 @@ static unsigned long msc[2];
|
||||
static unsigned long sxcnfg, memclkcfg;
|
||||
static unsigned long csadrcfg[4];
|
||||
|
||||
static int pxa3xx_smemc_suspend(void)
|
||||
static int pxa3xx_smemc_suspend(void *data)
|
||||
{
|
||||
msc[0] = __raw_readl(MSC0);
|
||||
msc[1] = __raw_readl(MSC1);
|
||||
@@ -32,7 +32,7 @@ static int pxa3xx_smemc_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pxa3xx_smemc_resume(void)
|
||||
static void pxa3xx_smemc_resume(void *data)
|
||||
{
|
||||
__raw_writel(msc[0], MSC0);
|
||||
__raw_writel(msc[1], MSC1);
|
||||
@@ -46,11 +46,15 @@ static void pxa3xx_smemc_resume(void)
|
||||
__raw_writel(0x2, CSMSADRCFG);
|
||||
}
|
||||
|
||||
static struct syscore_ops smemc_syscore_ops = {
|
||||
static const struct syscore_ops smemc_syscore_ops = {
|
||||
.suspend = pxa3xx_smemc_suspend,
|
||||
.resume = pxa3xx_smemc_resume,
|
||||
};
|
||||
|
||||
static struct syscore smemc_syscore = {
|
||||
.ops = &smemc_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init smemc_init(void)
|
||||
{
|
||||
if (cpu_is_pxa3xx()) {
|
||||
@@ -64,7 +68,7 @@ static int __init smemc_init(void)
|
||||
*/
|
||||
__raw_writel(0x2, CSMSADRCFG);
|
||||
|
||||
register_syscore_ops(&smemc_syscore_ops);
|
||||
register_syscore(&smemc_syscore);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -58,7 +58,7 @@ static struct irq_grp_save {
|
||||
|
||||
static u32 irq_uart_mask[SERIAL_SAMSUNG_UARTS];
|
||||
|
||||
static int s3c64xx_irq_pm_suspend(void)
|
||||
static int s3c64xx_irq_pm_suspend(void *data)
|
||||
{
|
||||
struct irq_grp_save *grp = eint_grp_save;
|
||||
int i;
|
||||
@@ -79,7 +79,7 @@ static int s3c64xx_irq_pm_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void s3c64xx_irq_pm_resume(void)
|
||||
static void s3c64xx_irq_pm_resume(void *data)
|
||||
{
|
||||
struct irq_grp_save *grp = eint_grp_save;
|
||||
int i;
|
||||
@@ -100,18 +100,22 @@ static void s3c64xx_irq_pm_resume(void)
|
||||
S3C_PMDBG("%s: IRQ configuration restored\n", __func__);
|
||||
}
|
||||
|
||||
static struct syscore_ops s3c64xx_irq_syscore_ops = {
|
||||
static const struct syscore_ops s3c64xx_irq_syscore_ops = {
|
||||
.suspend = s3c64xx_irq_pm_suspend,
|
||||
.resume = s3c64xx_irq_pm_resume,
|
||||
};
|
||||
|
||||
static struct syscore s3c64xx_irq_syscore = {
|
||||
.ops = &s3c64xx_irq_syscore_ops,
|
||||
};
|
||||
|
||||
static __init int s3c64xx_syscore_init(void)
|
||||
{
|
||||
/* Appropriate drivers (pinctrl, uart) handle this when using DT. */
|
||||
if (of_have_populated_dt() || !soc_is_s3c64xx())
|
||||
return 0;
|
||||
|
||||
register_syscore_ops(&s3c64xx_irq_syscore_ops);
|
||||
register_syscore(&s3c64xx_irq_syscore);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -195,20 +195,24 @@ static const struct platform_suspend_ops s5pv210_suspend_ops = {
|
||||
/*
|
||||
* Syscore operations used to delay restore of certain registers.
|
||||
*/
|
||||
static void s5pv210_pm_resume(void)
|
||||
static void s5pv210_pm_resume(void *data)
|
||||
{
|
||||
s3c_pm_do_restore_core(s5pv210_core_save, ARRAY_SIZE(s5pv210_core_save));
|
||||
}
|
||||
|
||||
static struct syscore_ops s5pv210_pm_syscore_ops = {
|
||||
static const struct syscore_ops s5pv210_pm_syscore_ops = {
|
||||
.resume = s5pv210_pm_resume,
|
||||
};
|
||||
|
||||
static struct syscore s5pv210_pm_syscore = {
|
||||
.ops = &s5pv210_pm_syscore_ops,
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialization entry point.
|
||||
*/
|
||||
void __init s5pv210_pm_init(void)
|
||||
{
|
||||
register_syscore_ops(&s5pv210_pm_syscore_ops);
|
||||
register_syscore(&s5pv210_pm_syscore);
|
||||
suspend_set_ops(&s5pv210_suspend_ops);
|
||||
}
|
||||
|
||||
@@ -63,13 +63,13 @@ static void __init ap_map_io(void)
|
||||
#ifdef CONFIG_PM
|
||||
static unsigned long ic_irq_enable;
|
||||
|
||||
static int irq_suspend(void)
|
||||
static int irq_suspend(void *data)
|
||||
{
|
||||
ic_irq_enable = readl(VA_IC_BASE + IRQ_ENABLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void irq_resume(void)
|
||||
static void irq_resume(void *data)
|
||||
{
|
||||
/* disable all irq sources */
|
||||
cm_clear_irqs();
|
||||
@@ -83,14 +83,18 @@ static void irq_resume(void)
|
||||
#define irq_resume NULL
|
||||
#endif
|
||||
|
||||
static struct syscore_ops irq_syscore_ops = {
|
||||
static const struct syscore_ops irq_syscore_ops = {
|
||||
.suspend = irq_suspend,
|
||||
.resume = irq_resume,
|
||||
};
|
||||
|
||||
static struct syscore irq_syscore = {
|
||||
.ops = &irq_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init irq_syscore_init(void)
|
||||
{
|
||||
register_syscore_ops(&irq_syscore_ops);
|
||||
register_syscore(&irq_syscore);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -256,7 +256,7 @@ static int b15_rac_dead_cpu(unsigned int cpu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int b15_rac_suspend(void)
|
||||
static int b15_rac_suspend(void *data)
|
||||
{
|
||||
/* Suspend the read-ahead cache oeprations, forcing our cache
|
||||
* implementation to fallback to the regular ARMv7 calls.
|
||||
@@ -271,7 +271,7 @@ static int b15_rac_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void b15_rac_resume(void)
|
||||
static void b15_rac_resume(void *data)
|
||||
{
|
||||
/* Coming out of a S3 suspend/resume cycle, the read-ahead cache
|
||||
* register RAC_CONFIG0_REG will be restored to its default value, make
|
||||
@@ -282,11 +282,15 @@ static void b15_rac_resume(void)
|
||||
clear_bit(RAC_SUSPENDED, &b15_rac_flags);
|
||||
}
|
||||
|
||||
static struct syscore_ops b15_rac_syscore_ops = {
|
||||
static const struct syscore_ops b15_rac_syscore_ops = {
|
||||
.suspend = b15_rac_suspend,
|
||||
.resume = b15_rac_resume,
|
||||
};
|
||||
|
||||
static struct syscore b15_rac_syscore = {
|
||||
.ops = &b15_rac_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init b15_rac_init(void)
|
||||
{
|
||||
struct device_node *dn, *cpu_dn;
|
||||
@@ -347,7 +351,7 @@ static int __init b15_rac_init(void)
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_PM_SLEEP))
|
||||
register_syscore_ops(&b15_rac_syscore_ops);
|
||||
register_syscore(&b15_rac_syscore);
|
||||
|
||||
spin_lock(&rac_lock);
|
||||
reg = __raw_readl(b15_rac_base + RAC_CONFIG0_REG);
|
||||
|
||||
@@ -535,28 +535,32 @@ int hibernate_resume_nonboot_cpu_disable(void)
|
||||
*/
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int loongson_ipi_suspend(void)
|
||||
static int loongson_ipi_suspend(void *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void loongson_ipi_resume(void)
|
||||
static void loongson_ipi_resume(void *data)
|
||||
{
|
||||
iocsr_write32(0xffffffff, LOONGARCH_IOCSR_IPI_EN);
|
||||
}
|
||||
|
||||
static struct syscore_ops loongson_ipi_syscore_ops = {
|
||||
static const struct syscore_ops loongson_ipi_syscore_ops = {
|
||||
.resume = loongson_ipi_resume,
|
||||
.suspend = loongson_ipi_suspend,
|
||||
};
|
||||
|
||||
static struct syscore loongson_ipi_syscore = {
|
||||
.ops = &loongson_ipi_syscore_ops,
|
||||
};
|
||||
|
||||
/*
|
||||
* Enable boot cpu ipi before enabling nonboot cpus
|
||||
* during syscore_resume.
|
||||
*/
|
||||
static int __init ipi_pm_init(void)
|
||||
{
|
||||
register_syscore_ops(&loongson_ipi_syscore_ops);
|
||||
register_syscore(&loongson_ipi_syscore);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -982,7 +982,7 @@ u32 au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t *dscr)
|
||||
|
||||
static unsigned long alchemy_dbdma_pm_data[NUM_DBDMA_CHANS + 1][6];
|
||||
|
||||
static int alchemy_dbdma_suspend(void)
|
||||
static int alchemy_dbdma_suspend(void *data)
|
||||
{
|
||||
int i;
|
||||
void __iomem *addr;
|
||||
@@ -1019,7 +1019,7 @@ static int alchemy_dbdma_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void alchemy_dbdma_resume(void)
|
||||
static void alchemy_dbdma_resume(void *data)
|
||||
{
|
||||
int i;
|
||||
void __iomem *addr;
|
||||
@@ -1044,11 +1044,15 @@ static void alchemy_dbdma_resume(void)
|
||||
}
|
||||
}
|
||||
|
||||
static struct syscore_ops alchemy_dbdma_syscore_ops = {
|
||||
static const struct syscore_ops alchemy_dbdma_syscore_ops = {
|
||||
.suspend = alchemy_dbdma_suspend,
|
||||
.resume = alchemy_dbdma_resume,
|
||||
};
|
||||
|
||||
static struct syscore alchemy_dbdma_syscore = {
|
||||
.ops = &alchemy_dbdma_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init dbdma_setup(unsigned int irq, dbdev_tab_t *idtable)
|
||||
{
|
||||
int ret;
|
||||
@@ -1071,7 +1075,7 @@ static int __init dbdma_setup(unsigned int irq, dbdev_tab_t *idtable)
|
||||
printk(KERN_ERR "Cannot grab DBDMA interrupt!\n");
|
||||
else {
|
||||
dbdma_initialized = 1;
|
||||
register_syscore_ops(&alchemy_dbdma_syscore_ops);
|
||||
register_syscore(&alchemy_dbdma_syscore);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -758,7 +758,7 @@ static inline void alchemy_ic_resume_one(void __iomem *base, unsigned long *d)
|
||||
wmb();
|
||||
}
|
||||
|
||||
static int alchemy_ic_suspend(void)
|
||||
static int alchemy_ic_suspend(void *data)
|
||||
{
|
||||
alchemy_ic_suspend_one((void __iomem *)KSEG1ADDR(AU1000_IC0_PHYS_ADDR),
|
||||
alchemy_gpic_pmdata);
|
||||
@@ -767,7 +767,7 @@ static int alchemy_ic_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void alchemy_ic_resume(void)
|
||||
static void alchemy_ic_resume(void *data)
|
||||
{
|
||||
alchemy_ic_resume_one((void __iomem *)KSEG1ADDR(AU1000_IC1_PHYS_ADDR),
|
||||
&alchemy_gpic_pmdata[7]);
|
||||
@@ -775,7 +775,7 @@ static void alchemy_ic_resume(void)
|
||||
alchemy_gpic_pmdata);
|
||||
}
|
||||
|
||||
static int alchemy_gpic_suspend(void)
|
||||
static int alchemy_gpic_suspend(void *data)
|
||||
{
|
||||
void __iomem *base = (void __iomem *)KSEG1ADDR(AU1300_GPIC_PHYS_ADDR);
|
||||
int i;
|
||||
@@ -806,7 +806,7 @@ static int alchemy_gpic_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void alchemy_gpic_resume(void)
|
||||
static void alchemy_gpic_resume(void *data)
|
||||
{
|
||||
void __iomem *base = (void __iomem *)KSEG1ADDR(AU1300_GPIC_PHYS_ADDR);
|
||||
int i;
|
||||
@@ -837,16 +837,24 @@ static void alchemy_gpic_resume(void)
|
||||
wmb();
|
||||
}
|
||||
|
||||
static struct syscore_ops alchemy_ic_pmops = {
|
||||
static const struct syscore_ops alchemy_ic_pmops = {
|
||||
.suspend = alchemy_ic_suspend,
|
||||
.resume = alchemy_ic_resume,
|
||||
};
|
||||
|
||||
static struct syscore_ops alchemy_gpic_pmops = {
|
||||
static struct syscore alchemy_ic_pm = {
|
||||
.ops = &alchemy_ic_pmops,
|
||||
};
|
||||
|
||||
static const struct syscore_ops alchemy_gpic_pmops = {
|
||||
.suspend = alchemy_gpic_suspend,
|
||||
.resume = alchemy_gpic_resume,
|
||||
};
|
||||
|
||||
static struct syscore alchemy_gpic_pm = {
|
||||
.ops = &alchemy_gpic_pmops,
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/* create chained handlers for the 4 IC requests to the MIPS IRQ ctrl */
|
||||
@@ -880,7 +888,7 @@ static void __init au1000_init_irq(struct alchemy_irqmap *map)
|
||||
|
||||
ic_init((void __iomem *)KSEG1ADDR(AU1000_IC0_PHYS_ADDR));
|
||||
ic_init((void __iomem *)KSEG1ADDR(AU1000_IC1_PHYS_ADDR));
|
||||
register_syscore_ops(&alchemy_ic_pmops);
|
||||
register_syscore(&alchemy_ic_pm);
|
||||
mips_cpu_irq_init();
|
||||
|
||||
/* register all 64 possible IC0+IC1 irq sources as type "none".
|
||||
@@ -925,7 +933,7 @@ static void __init alchemy_gpic_init_irq(const struct alchemy_irqmap *dints)
|
||||
int i;
|
||||
void __iomem *bank_base;
|
||||
|
||||
register_syscore_ops(&alchemy_gpic_pmops);
|
||||
register_syscore(&alchemy_gpic_pm);
|
||||
mips_cpu_irq_init();
|
||||
|
||||
/* disable & ack all possible interrupt sources */
|
||||
|
||||
@@ -580,22 +580,26 @@ static void alchemy_usb_pm(int susp)
|
||||
}
|
||||
}
|
||||
|
||||
static int alchemy_usb_suspend(void)
|
||||
static int alchemy_usb_suspend(void *data)
|
||||
{
|
||||
alchemy_usb_pm(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void alchemy_usb_resume(void)
|
||||
static void alchemy_usb_resume(void *data)
|
||||
{
|
||||
alchemy_usb_pm(0);
|
||||
}
|
||||
|
||||
static struct syscore_ops alchemy_usb_pm_ops = {
|
||||
static const struct syscore_ops alchemy_usb_pm_syscore_ops = {
|
||||
.suspend = alchemy_usb_suspend,
|
||||
.resume = alchemy_usb_resume,
|
||||
};
|
||||
|
||||
static struct syscore alchemy_usb_pm_syscore = {
|
||||
.ops = &alchemy_usb_pm_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init alchemy_usb_init(void)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -620,7 +624,7 @@ static int __init alchemy_usb_init(void)
|
||||
}
|
||||
|
||||
if (!ret)
|
||||
register_syscore_ops(&alchemy_usb_pm_ops);
|
||||
register_syscore(&alchemy_usb_pm_syscore);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ static int alchemy_pci_def_idsel(unsigned int devsel, int assert)
|
||||
}
|
||||
|
||||
/* save PCI controller register contents. */
|
||||
static int alchemy_pci_suspend(void)
|
||||
static int alchemy_pci_suspend(void *data)
|
||||
{
|
||||
struct alchemy_pci_context *ctx = __alchemy_pci_ctx;
|
||||
if (!ctx)
|
||||
@@ -326,7 +326,7 @@ static int alchemy_pci_suspend(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void alchemy_pci_resume(void)
|
||||
static void alchemy_pci_resume(void *data)
|
||||
{
|
||||
struct alchemy_pci_context *ctx = __alchemy_pci_ctx;
|
||||
if (!ctx)
|
||||
@@ -354,9 +354,13 @@ static void alchemy_pci_resume(void)
|
||||
alchemy_pci_wired_entry(ctx); /* install it */
|
||||
}
|
||||
|
||||
static struct syscore_ops alchemy_pci_pmops = {
|
||||
.suspend = alchemy_pci_suspend,
|
||||
.resume = alchemy_pci_resume,
|
||||
static const struct syscore_ops alchemy_pci_syscore_ops = {
|
||||
.suspend = alchemy_pci_suspend,
|
||||
.resume = alchemy_pci_resume,
|
||||
};
|
||||
|
||||
static struct syscore alchemy_pci_syscore = {
|
||||
.ops = &alchemy_pci_syscore_ops,
|
||||
};
|
||||
|
||||
static int alchemy_pci_probe(struct platform_device *pdev)
|
||||
@@ -478,7 +482,7 @@ static int alchemy_pci_probe(struct platform_device *pdev)
|
||||
|
||||
__alchemy_pci_ctx = ctx;
|
||||
platform_set_drvdata(pdev, ctx);
|
||||
register_syscore_ops(&alchemy_pci_pmops);
|
||||
register_syscore(&alchemy_pci_syscore);
|
||||
register_pci_controller(&ctx->alchemy_pci_ctrl);
|
||||
|
||||
dev_info(&pdev->dev, "PCI controller at %ld MHz\n",
|
||||
|
||||
@@ -726,7 +726,7 @@ static inline void crash_register_spus(struct list_head *list)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void spu_shutdown(void)
|
||||
static void spu_shutdown(void *data)
|
||||
{
|
||||
struct spu *spu;
|
||||
|
||||
@@ -738,10 +738,14 @@ static void spu_shutdown(void)
|
||||
mutex_unlock(&spu_full_list_mutex);
|
||||
}
|
||||
|
||||
static struct syscore_ops spu_syscore_ops = {
|
||||
static const struct syscore_ops spu_syscore_ops = {
|
||||
.shutdown = spu_shutdown,
|
||||
};
|
||||
|
||||
static struct syscore spu_syscore = {
|
||||
.ops = &spu_syscore_ops,
|
||||
};
|
||||
|
||||
static int __init init_spu_base(void)
|
||||
{
|
||||
int i, ret = 0;
|
||||
@@ -774,7 +778,7 @@ static int __init init_spu_base(void)
|
||||
crash_register_spus(&spu_full_list);
|
||||
mutex_unlock(&spu_full_list_mutex);
|
||||
spu_add_dev_attr(&dev_attr_stat);
|
||||
register_syscore_ops(&spu_syscore_ops);
|
||||
register_syscore(&spu_syscore);
|
||||
|
||||
spu_init_affinity();
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user