2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-18 18:23:53 +08:00
linux-next/drivers/remoteproc
Suman Anna 9077ac1ab1 remoteproc/omap: Add support for system suspend/resume
This patch adds the support for system suspend/resume to the
OMAP remoteproc driver so that the OMAP remoteproc devices can
be suspended/resumed during a system suspend/resume. The support
is added through the driver PM .suspend/.resume callbacks, and
requires appropriate support from the OS running on the remote
processors.

The IPU & DSP remote processors typically have their own private
modules like registers, internal memories, caches etc. The context
of these modules need to be saved and restored properly for a
suspend/resume to work. These are in general not accessible from
the MPU, so the remote processors themselves have to implement
the logic for the context save & restore of these modules.

The OMAP remoteproc driver initiates a suspend by sending a mailbox
message requesting the remote processor to save its context and
enter into an idle/standby state. The remote processor should
usually stop whatever processing it is doing to switch to a context
save mode. The OMAP remoteproc driver detects the completion of
the context save by checking the module standby status for the
remoteproc device. It also stops any resources used by the remote
processors like the timers. The timers need to be running only
when the processor is active and executing, and need to be stopped
otherwise to allow the timer driver to reach low-power states. The
IOMMUs are automatically suspended by the PM core during the late
suspend stage, after the remoteproc suspend process is completed by
putting the remote processor cores into reset. Thereafter, the Linux
kernel can put the domain into further lower power states as possible.

The resume sequence undoes the operations performed in the PM suspend
callback, by starting the timers and finally releasing the processors
from reset. This requires that the remote processor side OS be able to
distinguish a power-resume boot from a power-on/cold boot, restore the
context of its private modules saved during the suspend phase, and
resume executing code from where it was suspended. The IOMMUs would
have been resumed by the PM core during early resume, so they are
already enabled by the time remoteproc resume callback gets invoked.

The remote processors should save their context into System RAM (DDR),
as any internal memories are not guaranteed to retain context as it
depends on the lowest power domain that the remote processor device
is put into. The management of the DDR contents will be managed by
the Linux kernel.

Signed-off-by: Suman Anna <s-anna@ti.com>
[t-kristo@ti.com: converted to use ti-sysc instead of hwmod]
Signed-off-by: Tero Kristo <t-kristo@ti.com>
Reviewed-by: Andrew F. Davis <afd@ti.com>
Acked-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20200324110035.29907-12-t-kristo@ti.com
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-03-25 22:29:50 -07:00
..
da8xx_remoteproc.c remoteproc: Remove dev_err() usage after platform_get_irq() 2019-08-26 21:59:58 -07:00
imx_rproc.c remoteproc: Use size_t type for len in da_to_va 2020-03-25 22:29:38 -07:00
Kconfig remoteproc/omap: Add support for DRA7xx remote processors 2020-03-25 22:29:48 -07:00
keystone_remoteproc.c remoteproc: Use size_t type for len in da_to_va 2020-03-25 22:29:38 -07:00
Makefile remoteproc/mediatek: add SCP support for mt8183 2020-01-20 10:29:54 -08:00
mtk_common.h rpmsg: add rpmsg support for mt8183 SCP. 2020-01-20 10:29:56 -08:00
mtk_scp_ipi.c rpmsg: add rpmsg support for mt8183 SCP. 2020-01-20 10:29:56 -08:00
mtk_scp.c remoteproc/mediatek: Use size_t type for len in scp_da_to_va 2020-03-25 22:29:42 -07:00
omap_remoteproc.c remoteproc/omap: Add support for system suspend/resume 2020-03-25 22:29:50 -07:00
omap_remoteproc.h remoteproc/omap: Add support for system suspend/resume 2020-03-25 22:29:50 -07:00
qcom_common.c remoteproc: qcom: Move glink_ssr notification after stop 2019-07-24 16:01:14 -07:00
qcom_common.h remoteproc: qcom: Introduce sysmon 2018-02-12 16:57:22 -08:00
qcom_q6v5_adsp.c remoteproc: qcom: Introduce panic handler for PAS and ADSP 2020-03-25 22:29:45 -07:00
qcom_q6v5_mss.c remoteproc: Use size_t type for len in da_to_va 2020-03-25 22:29:38 -07:00
qcom_q6v5_pas.c remoteproc: qcom: Introduce panic handler for PAS and ADSP 2020-03-25 22:29:45 -07:00
qcom_q6v5_wcss.c remoteproc: Use size_t type for len in da_to_va 2020-03-25 22:29:38 -07:00
qcom_q6v5.c remoteproc: qcom: q6v5: Add common panic handler 2020-03-25 22:29:45 -07:00
qcom_q6v5.h remoteproc: qcom: q6v5: Add common panic handler 2020-03-25 22:29:45 -07:00
qcom_sysmon.c remoteproc: qcom: Remove unneeded semicolon 2019-12-18 23:13:29 -08:00
qcom_wcnss_iris.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
qcom_wcnss.c remoteproc: Use size_t type for len in da_to_va 2020-03-25 22:29:38 -07:00
qcom_wcnss.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
remoteproc_core.c remoteproc: Introduce "panic" callback in ops 2020-03-25 22:29:45 -07:00
remoteproc_debugfs.c remoteproc: return error for bad "recovery" debugfs input 2020-03-25 22:29:44 -07:00
remoteproc_elf_helpers.h remoteproc: Add elf helpers to access elf64 and elf32 fields 2020-03-25 22:29:39 -07:00
remoteproc_elf_loader.c remoteproc: Adapt coredump to generate correct elf type 2020-03-25 22:29:41 -07:00
remoteproc_internal.h remoteproc: Add elf64 support in elf loader 2020-03-25 22:29:40 -07:00
remoteproc_sysfs.c remoteproc: Add a sysfs interface for name 2019-08-26 14:50:16 -07:00
remoteproc_virtio.c remoteproc: Fix NULL pointer dereference in rproc_virtio_notify 2020-03-25 22:29:44 -07:00
st_remoteproc.c remoteproc: Rename rproc_elf_sanity_check for elf32 2020-03-25 22:29:40 -07:00
st_slim_rproc.c remoteproc: Rename rproc_elf_sanity_check for elf32 2020-03-25 22:29:40 -07:00
stm32_rproc.c remoteproc: stm32: demote warning about optional property absence 2020-03-25 22:29:42 -07:00
wkup_m3_rproc.c remoteproc: Use size_t type for len in da_to_va 2020-03-25 22:29:38 -07:00