mbox series

[0/6] K3 R5F & DSP IPC-only mode support

Message ID 20210522000309.26134-1-s-anna@ti.com (mailing list archive)
Headers show
Series K3 R5F & DSP IPC-only mode support | expand

Message

Suman Anna May 22, 2021, 12:03 a.m. UTC
Hi All,

The following series adds the IPC-only mode support for the TI K3 R5F
and DSP (C66x and C71x) remoteprocs covering AM65x, J721E, J7200 and
AM64x SoCs. Patches are on top of 5.13-rc1 + Minor remoteproc cleanup
series [1] + TI K3 R5F remoteproc support on AM64x series [2].

The 'IPC-only' mode terminology essentially means establishing only the
IPC rpmsg stack for remoteprocs that are booted early by bootloaders and
supporting only 'attach' and 'detach' of the remoteprocs. The existing
remoteproc infrastructure does support 'stop' of an early-booted remote
processor, and the TI K3 remoteprocs are intentionally being limited to
'detach', and are designed to only establish and tear apart IPC (the 
virtio devices that provide the IPC transport) without ever shutting
down the core. This is done by introducing a new flag in remoteproc core
in Patch 2. Support for the regular 'stop' can be enhanced in the future
easily by adding a new sysfs or configfs file that changes this flag,
but IPC-only is the expected usage model for now on K3 SoCs.

Following is a summary of some of the design details:
 - The TI K3 SoCs use a dedicated system processor for Power and Clocks
   and the IPC-only mode is detected by communicating with this central
   processor and checking on the power status of remoteprocs.
 - The driver support is provided through the recently added .attach(),
  .detach() and .get_loaded_rsc_table() rproc ops, and new RPROC_ATTACHED
   and RPROC_DETACHED state flags.
 - The default kernel dts cluster modes and TCM configuration for R5Fs
   are ignored and overridden by querying this config from the system
   processor in IPC-only mode. Any core not booted earlier will fall back
   to using the kernel dts (eg: R5F Core0 can be booted by bootloader, and
   R5F Core1 will be booted using kernel).
 - The remoteproc firmwares are not loaded again in kernel to retrieve
   the resource table. This allows early-boot to be done from different
   boot media such as OSPI or eMMC, and be completely independent of the
   rootfs in SDCard or NFS.
 - The IPC-only mode support follows a design-by-contract (DBC) approach
   to achieve the above. The resource tables are always expected to be at
   the base on the DDR memory region reserved for firmwares (base of the
   second memory-region property in the remoteproc dts node). This also
   eliminates the need for dts properties being dynamically updated to
   provide the resource table address (there are no dedicated h/w
   registers either like with the ST SoCs). This scales to designs where
   either U-Boot is not involved or a different processor is used to
   load the various remoteprocs.
 - The "stop" command results in a failure when the remoteproc is in
   IPC-only mode, and "detach" serves as the corresponding replacement.
   Note that there is no equivalent "attach" command, and "start" command
   also serves as "attach" for remoteprocs that are in detached state.
 - The remoteproc sysfs 'state' file shows the mode as "detached"
   when the early-booted remoteproc is detached. "offline" continues
   to be shown when the remoteproc is powered off.

Following is the summary of patches:
 - Patch 1 is a minor cleanup patch in remoteproc core to make the 
   helper functions look symmetric.
 - Patch 2 introduces a new flag 'detach_on_shutdown' and enhances
   the remoteproc core to restrict stop on early-booted remoteprocs.
   This patch provides the required behavior for K3 IPC-only mode (no
   stopping of early-booted rprocs). The default behavior continues
   to support stopping of remoteproc like with the existing code.
 - Patches 3 and 5 refactor the mailbox request code out of start
   for reuse in the new attach callbacks.
 - Patch 4 adds the IPC-only mode support for R5F.
 - Patch 6 adds the IPC-only mode support for both K3 C66x and C71x
   DSPs.

Patches 1, 3 and 5 can be considered cleanup, so I suggest these be
picked up if there are any major comments on the others.

I have verified the different combinations on J721E, J7200 and AM65x
SoCs. AM64x currently lacks early-boot support, but the logic is ready
for Single-CPU and Split modes that are specific to AM64x SoCs. 

regards
Suman

[1] https://patchwork.kernel.org/project/linux-remoteproc/list/?series=485235
[2] https://patchwork.kernel.org/project/linux-remoteproc/list/?series=456755 

Suman Anna (6):
  remoteproc: Introduce rproc_detach_device() wrapper
  remoteproc: Add support for detach-only during shutdown
  remoteproc: k3-r5: Refactor mbox request code in start
  remoteproc: k3-r5: Add support for IPC-only mode for all R5Fs
  remoteproc: k3-dsp: Refactor mbox request code in start
  remoteproc: k3-dsp: Add support for IPC-only mode for all K3 DSPs

 drivers/remoteproc/remoteproc_cdev.c      |   7 +
 drivers/remoteproc/remoteproc_core.c      |   7 +-
 drivers/remoteproc/remoteproc_internal.h  |   8 +
 drivers/remoteproc/remoteproc_sysfs.c     |   6 +
 drivers/remoteproc/ti_k3_dsp_remoteproc.c | 214 ++++++++++++++---
 drivers/remoteproc/ti_k3_r5_remoteproc.c  | 279 ++++++++++++++++++++--
 include/linux/remoteproc.h                |   3 +
 7 files changed, 459 insertions(+), 65 deletions(-)