linux/Documentation/devicetree/bindings/arm
Dave Gerlach afe761f8d3 soc: ti: Add pm33xx driver for basic suspend support
AM335x and AM437x support various low power modes as documented
in section 8.1.4.3 of the AM335x Technical Reference Manual and
section 6.4.3 of the AM437x Technical Reference Manual.

DeepSleep0 mode offers the lowest power mode with limited
wakeup sources without a system reboot and is mapped as
the suspend state in the kernel. In this state, MPU and
PER domains are turned off with the internal RAM held in
retention to facilitate the resume process. As part of
the boot process, the assembly code is copied over to OCMCRAM
so it can be executed to turn of the EMIF and put DDR into self
refresh.

Both platforms have a Cortex-M3 (WKUP_M3) which assists the MPU
in DeepSleep0 entry and exit. WKUP_M3 takes care
of the clockdomain and powerdomain transitions based on the
intended low power state. MPU needs to load the appropriate
WKUP_M3 binary onto the WKUP_M3 memory space before it can
leverage any of the PM features like DeepSleep. This loading
is handled by the remoteproc driver wkup_m3_rproc.

Communication with the WKUP_M3 is handled by a wkup_m3_ipc
driver that exposes the specific PM functionality to be used
the PM code.

In the current implementation when the suspend process
is initiated, MPU interrupts the WKUP_M3 to let it know about
the intent of entering DeepSleep0 and waits for an ACK. When
the ACK is received MPU continues with its suspend process
to suspend all the drivers and then jumps to assembly in
OCMC RAM. The assembly code puts the external RAM in self-refresh
mode, gates the MPU clock, and then finally executes the WFI
instruction. Execution of the WFI instruction with MPU clock gated
triggers another interrupt to the WKUP_M3 which then continues
with the power down sequence wherein the clockdomain and
powerdomain transition takes place. As part of the sleep sequence,
WKUP_M3 unmasks the interrupt lines for the wakeup sources. WFI
execution on WKUP_M3 causes the hardware to disable the main
oscillator of the SoC and from here system remains in sleep state
until a wake source brings the system into resume path.

When a wakeup event occurs, WKUP_M3 starts the power-up
sequence by switching on the power domains and finally
enabling the clock to MPU. Since the MPU gets powered down
as part of the sleep sequence in the resume path ROM code
starts executing. The ROM code detects a wakeup from sleep
and then jumps to the resume location in OCMC which was
populated in one of the IPC registers as part of the suspend
sequence.

Code is based on work by Vaibhav Bedia.

Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
Acked-by: Santosh Shilimkar <ssantosh@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2018-02-27 08:53:46 -08:00
..
altera
amlogic ARM: Device-tree updates for 4.15 2017-11-16 15:48:26 -08:00
apm
bcm dt-bindings: arm: brcmstb: Correct BIUCTRL node documentation 2017-12-20 17:37:22 -08:00
calxeda
cpu-enable-method
firmware Docs: dt: add devicetree binding for describing arm64 SDEI firmware 2018-01-13 10:44:48 +00:00
freescale
hisilicon dt-bindings: arm: hisilicon: add bindings for HiKey960 board 2017-06-15 11:50:22 +01:00
keystone ARM: keystone: Create new binding for K2G ICE evm 2017-05-21 22:46:56 -07:00
marvell dt-bindings: marvell: Add documentation for the North Bridge PM on Armada 37xx 2017-12-16 17:11:42 +01:00
mediatek dt-bindings: ARM: Mediatek: Fix ethsys documentation 2017-12-20 18:10:12 +01:00
mrvl
msm
nxp
omap soc: ti: Add pm33xx driver for basic suspend support 2018-02-27 08:53:46 -08:00
rockchip
samsung dt-bindings: Use lower case hex in unit-addresses 2017-12-26 10:37:05 -06:00
tegra dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
uniphier
ux500
vt8500
actions.txt Actions Semi arm64 based SoC DT for v4.16 2018-01-04 22:36:42 -08:00
adapteva.txt
al,alpine.txt
altera.txt
amlogic,scpi.txt Documentation: bindings: Add support for Amlogic GXBB SCPI protocol 2016-11-17 16:31:13 +00:00
amlogic.txt dt-bindings: arm: amlogic: Add Meson AXG binding 2017-10-19 03:16:09 -07:00
arch_timer.txt dt-bindings: Remove "status" from examples 2017-09-05 10:03:06 -05:00
arm-boards dt/bindings: arm-boards: Remove skeleton.dtsi inclusion from example 2016-11-15 09:17:09 -06:00
arm-dsu-pmu.txt dt-bindings: Document devicetree binding for ARM DSU PMU 2018-01-02 16:43:12 +00:00
arm,scpi.txt Documentation: bindings: add compatible specific to pre v1.0 SCPI protocols 2016-11-17 16:31:12 +00:00
armadeus.txt
armv7m_systick.txt
atmel-at91.txt ARM: at91: Document new TCB bindings 2017-12-31 15:50:00 +01:00
atmel-pmc.txt
axentia.txt ARM: dts: at91: add devicetree for the Axentia Nattis with Natte power 2017-12-04 20:37:45 +01:00
axis.txt
axxia.txt
bhf.txt dt-bindings: arm: Add entry for Beckhoff CX9020 2017-08-05 11:07:47 +08:00
calxeda.txt
cavium-thunder2.txt dt-bindings: Add arm64 ARCH_THUNDER2 platform documentation 2017-03-31 11:40:12 +02:00
cavium-thunder.txt
cci.txt of: update ePAPR references to point to Devicetree Specification 2017-06-22 11:22:06 -05:00
ccn.txt dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
compulab-boards.txt
coresight-cpu-debug.txt coresight: bindings for CPU debug module 2017-06-09 11:45:24 +02:00
coresight.txt coresight replicator: Cleanup programmable replicator naming 2017-08-28 16:05:48 +02:00
cpu-capacity.txt Documentation: arm: define DT cpu capacity-dmips-mhz bindings 2016-11-07 18:15:03 +00:00
cpus.txt dt-bindings: arm: Add entry for Broadcom Brahma-B53 2017-12-20 17:35:54 -08:00
davinci.txt dt-bindings: Add LEGO MINDSTORMS EV3 compatible specification 2017-01-20 17:16:48 +05:30
digicolor.txt
fsl.txt dt-bindings: arm: Add entry for FSL LS1088A RDB, QDS boards 2017-04-04 20:57:27 +08:00
fw-cfg.txt
gemini.txt dt-bindings: Augment Gemini for clocks, resets 2017-05-24 10:50:11 +02:00
global_timer.txt
i2se.txt dt-bindings: arm: add entries for I2SE boards 2017-03-08 15:18:50 +01:00
idle-states.txt of: update ePAPR references to point to Devicetree Specification 2017-06-22 11:22:06 -05:00
insignal-boards.txt
juno,scpi.txt Documentation: bindings: decouple juno specific details from generic binding 2016-11-17 16:30:56 +00:00
l2c2x0.txt of: update ePAPR references to point to Devicetree Specification 2017-06-22 11:22:06 -05:00
mediatek.txt Merge branch 'next/dt64' into next/dt 2017-09-05 20:41:43 -07:00
moxart.txt
nspire.txt
olimex.txt
oxnas.txt ARM: dts: Add support for OX820 and Pogoplug V3 2016-11-04 11:23:09 +01:00
picoxcell.txt
pmu.txt arm64: perf: add support for Cortex-A35 2017-08-10 17:46:49 +01:00
primecell.txt
psci.txt
qcom.txt dt-bindings: qcom: Add IPQ8074 bindings 2017-08-08 14:50:52 -05:00
realtek.txt dt-bindings: arm: realtek: Document MeLE V9 2017-10-26 16:22:19 +09:00
rockchip.txt ARM: dts: rockchip: Add rk3288 vyasa board 2017-09-17 01:55:46 +02:00
rtsm-dcscb.txt
scu.txt
secure.txt
shmobile.txt arm64: renesas: document V3MSK board bindings 2017-11-29 09:18:24 +01:00
sirf.txt
sp810.txt dt-bindings: Remove leading zeros from bindings notation 2017-11-09 17:05:05 -06:00
spe-pmu.txt dt-bindings: Document devicetree binding for ARM SPE 2017-10-18 12:53:33 +01:00
spear-misc.txt
spear-timer.txt
spear.txt
sprd.txt dt-bindings: arm: Add bindings for SP9860G 2017-04-08 18:42:46 +02:00
ste-nomadik.txt
ste-u300.txt
sti.txt
stm32.txt dt-bindings: arm: document supported STM32 SoC family 2017-12-12 15:03:34 -06:00
sunxi.txt ARM: sunxi: add support for R40 SoC 2017-09-22 21:57:09 +02:00
swir.txt dt-bindings: arm: Add Sierra Wireless modules bindings 2016-11-18 23:30:27 -06:00
technologic.txt of: documentation: add bindings documentation for TS-4600 2017-12-26 16:15:44 +08:00
tegra.txt ARM: tegra: remove Whistler support 2017-06-13 15:35:44 +02:00
topology.txt of: update ePAPR references to point to Devicetree Specification 2017-06-22 11:22:06 -05:00
twd.txt
versatile-sysreg.txt
vexpress-scc.txt
vexpress-sysreg.txt dt-bindings: Remove leading zeros from bindings notation 2017-11-09 17:05:05 -06:00
vexpress.txt
vt8500.txt
xen.txt
xilinx.txt
zte.txt arm64: dts: Add ZTE ZX296718 SoC dts and Makefile 2016-09-16 10:47:05 +08:00