diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c index 3b3fc417510..c5fb20542c4 100644 --- a/arch/arm/mach-msm/board-msm8960.c +++ b/arch/arm/mach-msm/board-msm8960.c @@ -740,6 +740,12 @@ static void __init msm8960_reserve(void) msm_reserve(); } +static int msm8960_change_memory_power(unsigned long start_pfn, + unsigned long nr_pages, int change_type) +{ + return 1; +} + #ifdef CONFIG_MSM_CAMERA static int msm_cam_gpio_tbl[] = { @@ -3377,6 +3383,7 @@ static void __init msm8960_cdp_init(void) msm_pm_set_rpm_wakeup_irq(RPM_APCC_CPU0_WAKE_UP_IRQ); msm_cpuidle_set_states(msm_cstates, ARRAY_SIZE(msm_cstates), msm_pm_data); + change_memory_power = &msm8960_change_memory_power; } MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR") diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h index d5858fb907a..00189346c1e 100644 --- a/arch/arm/mach-msm/include/mach/memory.h +++ b/arch/arm/mach-msm/include/mach/memory.h @@ -67,6 +67,8 @@ int platform_physical_remove_pages(unsigned long, unsigned long); int platform_physical_active_pages(unsigned long, unsigned long); int platform_physical_low_power_pages(unsigned long, unsigned long); +extern int (*change_memory_power)(unsigned long, unsigned long, int); + #if defined(CONFIG_ARCH_MSM_ARM11) || defined(CONFIG_ARCH_MSM_CORTEX_A5) void write_to_strongly_ordered_memory(void); void map_page_strongly_ordered(void); diff --git a/arch/arm/mach-msm/memory.c b/arch/arm/mach-msm/memory.c index c38071ca3ca..2ece32eb752 100644 --- a/arch/arm/mach-msm/memory.c +++ b/arch/arm/mach-msm/memory.c @@ -194,25 +194,32 @@ void *alloc_bootmem_aligned(unsigned long size, unsigned long alignment) return (void *)addr; } +int (*change_memory_power)(unsigned long, unsigned long, int); + int platform_physical_remove_pages(unsigned long start_pfn, unsigned long nr_pages) { - return 1; + if (!change_memory_power) + return 0; + return change_memory_power(start_pfn, nr_pages, MEMORY_DEEP_POWERDOWN); } int platform_physical_active_pages(unsigned long start_pfn, unsigned long nr_pages) { - return 1; + if (!change_memory_power) + return 0; + return change_memory_power(start_pfn, nr_pages, MEMORY_ACTIVE); } int platform_physical_low_power_pages(unsigned long start_pfn, unsigned long nr_pages) { - return 1; + if (!change_memory_power) + return 0; + return change_memory_power(start_pfn, nr_pages, MEMORY_SELF_REFRESH); } - char *memtype_name[] = { "SMI_KERNEL", "SMI",