| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | /* * OMAP MPUSS low power code * * Copyright (C) 2011 Texas Instruments, Inc. *	Santosh Shilimkar <santosh.shilimkar@ti.com> * * OMAP4430 MPUSS mainly consists of dual Cortex-A9 with per-CPU * Local timer and Watchdog, GIC, SCU, PL310 L2 cache controller, * CPU0 and CPU1 LPRM modules. * CPU0, CPU1 and MPUSS each have there own power domain and * hence multiple low power combinations of MPUSS are possible. * * The CPU0 and CPU1 can't support Closed switch Retention (CSWR) * because the mode is not supported by hw constraints of dormant * mode. While waking up from the dormant mode, a reset  signal * to the Cortex-A9 processor must be asserted by the external * power controller. * * With architectural inputs and hardware recommendations, only * below modes are supported from power gain vs latency point of view. * *	CPU0		CPU1		MPUSS *	---------------------------------------------- *	ON		ON		ON *	ON(Inactive)	OFF		ON(Inactive) *	OFF		OFF		CSWR *	OFF		OFF		OSWR *	OFF		OFF		OFF(Device OFF *TBD) *	---------------------------------------------- * * Note: CPU0 is the master core and it is the last CPU to go down * and first to wake-up when MPUSS low power states are excercised * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */#include <linux/kernel.h>#include <linux/io.h>#include <linux/errno.h>#include <linux/linkage.h>#include <linux/smp.h>#include <asm/cacheflush.h>#include <asm/tlbflush.h>#include <asm/smp_scu.h>#include <asm/pgalloc.h>#include <asm/suspend.h>#include <asm/hardware/cache-l2x0.h>#include "soc.h"#include "common.h"#include "omap44xx.h"#include "omap4-sar-layout.h"#include "pm.h"#include "prcm_mpu44xx.h"#include "prminst44xx.h"#include "prcm44xx.h"#include "prm44xx.h"#include "prm-regbits-44xx.h"#ifdef CONFIG_SMPstruct omap4_cpu_pm_info {	struct powerdomain *pwrdm;	void __iomem *scu_sar_addr;	void __iomem *wkup_sar_addr;	void __iomem *l2x0_sar_addr;	void (*secondary_startup)(void);};static DEFINE_PER_CPU(struct omap4_cpu_pm_info, omap4_pm_info);static struct powerdomain *mpuss_pd;static void __iomem *sar_base;
 |