mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-26 22:24:09 +08:00
afe761f8d3
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>
63 lines
1.9 KiB
Plaintext
63 lines
1.9 KiB
Plaintext
#
|
|
# TI SOC drivers
|
|
#
|
|
menuconfig SOC_TI
|
|
bool "TI SOC drivers support"
|
|
|
|
if SOC_TI
|
|
|
|
config KEYSTONE_NAVIGATOR_QMSS
|
|
tristate "Keystone Queue Manager Sub System"
|
|
depends on ARCH_KEYSTONE
|
|
help
|
|
Say y here to support the Keystone multicore Navigator Queue
|
|
Manager support. The Queue Manager is a hardware module that
|
|
is responsible for accelerating management of the packet queues.
|
|
Packets are queued/de-queued by writing/reading descriptor address
|
|
to a particular memory mapped location in the Queue Manager module.
|
|
|
|
If unsure, say N.
|
|
|
|
config KEYSTONE_NAVIGATOR_DMA
|
|
tristate "TI Keystone Navigator Packet DMA support"
|
|
depends on ARCH_KEYSTONE
|
|
help
|
|
Say y tp enable support for the Keystone Navigator Packet DMA on
|
|
on Keystone family of devices. It sets up the dma channels for the
|
|
Queue Manager Sub System.
|
|
|
|
If unsure, say N.
|
|
|
|
config AMX3_PM
|
|
tristate "AMx3 Power Management"
|
|
depends on SOC_AM33XX || SOC_AM43XX
|
|
depends on WKUP_M3_IPC && TI_EMIF_SRAM && SRAM
|
|
help
|
|
Enable power management on AM335x and AM437x. Required for suspend to mem
|
|
and standby states on both AM335x and AM437x platforms and for deeper cpuidle
|
|
c-states on AM335x.
|
|
|
|
config WKUP_M3_IPC
|
|
tristate "TI AMx3 Wkup-M3 IPC Driver"
|
|
depends on WKUP_M3_RPROC
|
|
depends on OMAP2PLUS_MBOX
|
|
help
|
|
TI AM33XX and AM43XX have a Cortex M3, the Wakeup M3, to handle
|
|
low power transitions. This IPC driver provides the necessary API
|
|
to communicate and use the Wakeup M3 for PM features like suspend
|
|
resume and boots it using wkup_m3_rproc driver.
|
|
|
|
config TI_SCI_PM_DOMAINS
|
|
tristate "TI SCI PM Domains Driver"
|
|
depends on TI_SCI_PROTOCOL
|
|
depends on PM_GENERIC_DOMAINS
|
|
help
|
|
Generic power domain implementation for TI device implementing
|
|
the TI SCI protocol.
|
|
|
|
To compile this as a module, choose M here. The module will be
|
|
called ti_sci_pm_domains. Note this is needed early in boot before
|
|
rootfs may be available.
|
|
|
|
endif # SOC_TI
|