Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0da5e9ad authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "defconfig: Enable PSCI driver on 32bit"

parents 51facc51 fca0a3de
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ CONFIG_ARCH_MSMTITANIUM=y
CONFIG_SMP=y
CONFIG_SCHED_MC=y
CONFIG_NR_CPUS=8
CONFIG_ARM_PSCI=y
CONFIG_PREEMPT=y
CONFIG_AEABI=y
CONFIG_HIGHMEM=y
+5 −1
Original line number Diff line number Diff line
@@ -7,6 +7,10 @@ struct sleep_save_sp {
};

extern void cpu_resume(void);
extern int cpu_suspend(unsigned long, int (*)(unsigned long));
extern int cpu_suspend(unsigned long);

extern int __cpu_suspend(unsigned long, int (*fn)(unsigned long));
extern int __cpu_suspend_enter(unsigned long arg, int (*fn)(unsigned long),
							unsigned int);

#endif
+2 −2
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@
 *  r1 = suspend function
 *  r2 = MPIDR value the resuming CPU will use
 */
ENTRY(__cpu_suspend)
ENTRY(__cpu_suspend_enter)
	stmfd	sp!, {r4 - r11, lr}
#ifdef MULTI_CPU
	ldr	r10, =processor
@@ -83,7 +83,7 @@ ENTRY(__cpu_suspend)
	bl	__cpu_suspend_save
	adr	lr, BSYM(cpu_suspend_abort)
	ldmfd	sp!, {r0, pc}		@ call suspend fn
ENDPROC(__cpu_suspend)
ENDPROC(__cpu_suspend_enter)
	.ltorg

cpu_suspend_abort:
+15 −5
Original line number Diff line number Diff line
@@ -9,8 +9,8 @@
#include <asm/smp_plat.h>
#include <asm/suspend.h>
#include <asm/tlbflush.h>
#include <asm/psci.h>

extern int __cpu_suspend(unsigned long, int (*)(unsigned long), u32 cpuid);
extern void cpu_resume_mmu(void);

#ifdef CONFIG_MMU
@@ -18,7 +18,7 @@ extern void cpu_resume_mmu(void);
 * Hide the first two arguments to __cpu_suspend - these are an implementation
 * detail which platform code shouldn't have to know about.
 */
int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
{
	struct mm_struct *mm = current->active_mm;
	u32 __mpidr = cpu_logical_map(smp_processor_id());
@@ -33,7 +33,7 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
	 * resume (indicated by a zero return code), we need to switch
	 * back to the correct page tables.
	 */
	ret = __cpu_suspend(arg, fn, __mpidr);
	ret = __cpu_suspend_enter(arg, fn, __mpidr);
	if (ret == 0) {
		cpu_switch_mm(mm->pgd, mm);
		local_flush_bp_all();
@@ -43,10 +43,10 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
	return ret;
}
#else
int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
{
	u32 __mpidr = cpu_logical_map(smp_processor_id());
	return __cpu_suspend(arg, fn, __mpidr);
	return __cpu_suspend_enter(arg, fn, __mpidr);
}
#define	idmap_pgd	NULL
#endif
@@ -88,6 +88,16 @@ void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
			  virt_to_phys(save_ptr) + sizeof(*save_ptr));
}

int cpu_suspend(unsigned long arg)
{
#if defined(CONFIG_ARM_PSCI)
	return cpu_psci_cpu_suspend(arg);
#else
	WARN_ONCE(true, "PSCI is not enabled\n");
	return 0;
#endif
}

extern struct sleep_save_sp sleep_save_sp;

static int cpu_suspend_alloc_sp(void)
+0 −5
Original line number Diff line number Diff line
@@ -285,13 +285,8 @@ static bool __ref msm_pm_spm_power_collapse(

	msm_jtag_save_state();

#ifdef CONFIG_CPU_V7
	collapsed = save_cpu_regs ?
		!cpu_suspend(0, msm_pm_collapse) : msm_pm_pc_hotplug();
#else
	collapsed = save_cpu_regs ?
		!__cpu_suspend(0, msm_pm_collapse) : msm_pm_pc_hotplug();
#endif

	msm_jtag_restore_state();