Commit 617e7481 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull remoteproc updates from Bjorn Andersson:
 "This introduces a new "detached" state for remote processors that are
  deemed to be running at the time Linux boots and the infrastructure
  for "attaching" to these. It then introduces the support for
  performing this operation for the STM32 platform.

  The coredump functionality is moved out from the core file and gains
  support for an optional mode where the recovery phase awaits the
  notification from devcoredump that the dump should be released. This
  allows userspace to grab the coredump in scenarios where vmalloc space
  is too low for creating a complete copy of the coredump before handing
  this to devcoredump.

  A new character device based interface is introduced to allow tying
  the stoppage of a remote processor to the termination of a user space
  process. This is useful in situations when such process provides
  crucial resources/operations for the firmware running on the remote
  processor.

  The Texas Instrument K3 driver gains support for the C66x and C71x
  DSPs.

  Qualcomm remoteprocs gains support for stashing relocation information
  in IMEM, to aid post mortem debugging and the crash notification
  mechanism is generalized to be reusable in cases where loosely coupled
  drivers needs to know about the status of a remote processor. One such
  example is the IPA hardware block, which is jointly owned with the
  modem and migrated to this improved interface.

  It also introduces a number of bug fixes and debug improvements for
  the Qualcomm modem remoteproc driver.

  And it cleans up the inconsistent interface for remoteproc drivers to
  implement power management"

* tag 'rproc-v5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc: (56 commits)
  remoteproc: core: Register the character device interface
  remoteproc: Add remoteproc character device interface
  remoteproc: kill IPA notify code
  net: ipa: new notification infrastructure
  remoteproc: k3-dsp: Add support for C71x DSPs
  dt-bindings: remoteproc: k3-dsp: Update bindings for C71x DSPs
  remoteproc: k3-dsp: Add support for L2RAM loading on C66x DSPs
  remoteproc: k3-dsp: Add a remoteproc driver of K3 C66x DSPs
  dt-bindings: remoteproc: Add bindings for C66x DSPs on TI K3 SoCs
  remoteproc: k3: Add TI-SCI processor control helper functions
  remoteproc: Introduce rproc_of_parse_firmware() helper
  dt-bindings: arm: keystone: Add common TI SCI bindings
  remoteproc: qcom_q6v5_mss: Remove redundant running state
  remoteproc: qcom: q6v5: Update running state before requesting stop
  remoteproc: qcom_q6v5_mss: Add modem debug policy support
  remoteproc: qcom_q6v5_mss: Validate modem blob firmware size before load
  remoteproc: qcom_q6v5_mss: Validate MBA firmware size before load
  rpmsg: update documentation
  remoteproc: qcom_q6v5_mss: Add MBA log extraction support
  remoteproc: Add coredump debugfs entry
  ...
parents dded87af 62b8f9e9
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/arm/keystone/ti,k3-sci-common.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Common K3 TI-SCI bindings

maintainers:
  - Nishanth Menon <nm@ti.com>

description: |
  The TI K3 family of SoCs usually have a central System Controller Processor
  that is responsible for managing various SoC-level resources like clocks,
  resets, interrupts etc. The communication with that processor is performed
  through the TI-SCI protocol.

  Each specific device management node like a clock controller node, a reset
  controller node or an interrupt-controller node should define a common set
  of properties that enables them to implement the corresponding functionality
  over the TI-SCI protocol. The following are some of the common properties
  needed by such individual nodes. The required properties for each device
  management node is defined in the respective binding.

properties:
  ti,sci:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Should be a phandle to the TI-SCI System Controller node

  ti,sci-dev-id:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: |
      Should contain the TI-SCI device id corresponding to the device. Please
      refer to the corresponding System Controller documentation for valid
      values for the desired device.

  ti,sci-proc-ids:
    description: Should contain a single tuple of <proc_id host_id>.
    $ref: /schemas/types.yaml#/definitions/uint32-array
    items:
      - description: TI-SCI processor id for the remote processor device
      - description: TI-SCI host id to which processor control ownership
                     should be transferred to
+44 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/remoteproc/qcom,pil-info.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm peripheral image loader relocation info binding

maintainers:
  - Bjorn Andersson <bjorn.andersson@linaro.org>

description:
  The Qualcomm peripheral image loader relocation memory region, in IMEM, is
  used for communicating remoteproc relocation information to post mortem
  debugging tools.

properties:
  compatible:
    const: qcom,pil-reloc-info

  reg:
    maxItems: 1

required:
  - compatible
  - reg

examples:
  - |
    imem@146bf000 {
      compatible = "syscon", "simple-mfd";
      reg = <0x146bf000 0x1000>;

      #address-cells = <1>;
      #size-cells = <1>;

      ranges = <0 0x146bf000 0x1000>;

      pil-reloc@94c {
        compatible = "qcom,pil-reloc-info";
        reg = <0x94c 0xc8>;
      };
    };
...
+184 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/remoteproc/ti,k3-dsp-rproc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: TI K3 DSP devices

maintainers:
  - Suman Anna <s-anna@ti.com>

description: |
  The TI K3 family of SoCs usually have one or more TI DSP Core sub-systems
  that are used to offload some of the processor-intensive tasks or algorithms,
  for achieving various system level goals.

  These processor sub-systems usually contain additional sub-modules like
  L1 and/or L2 caches/SRAMs, an Interrupt Controller, an external memory
  controller, a dedicated local power/sleep controller etc. The DSP processor
  cores in the K3 SoCs are usually either a TMS320C66x CorePac processor or a
  TMS320C71x CorePac processor.

  Each DSP Core sub-system is represented as a single DT node. Each node has a
  number of required or optional properties that enable the OS running on the
  host processor (Arm CorePac) to perform the device management of the remote
  processor and to communicate with the remote processor.

allOf:
  - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml#

properties:
  compatible:
    enum:
      - ti,j721e-c66-dsp
      - ti,j721e-c71-dsp
    description:
      Use "ti,j721e-c66-dsp" for C66x DSPs on K3 J721E SoCs
      Use "ti,j721e-c71-dsp" for C71x DSPs on K3 J721E SoCs

  resets:
    description: |
      Should contain the phandle to the reset controller node managing the
      local resets for this device, and a reset specifier.
    maxItems: 1

  firmware-name:
    description: |
      Should contain the name of the default firmware image
      file located on the firmware search path

  mboxes:
    description: |
      OMAP Mailbox specifier denoting the sub-mailbox, to be used for
      communication with the remote processor. This property should match
      with the sub-mailbox node used in the firmware image.
    maxItems: 1

  memory-region:
    minItems: 2
    maxItems: 8
    description: |
      phandle to the reserved memory nodes to be associated with the remoteproc
      device. There should be at least two reserved memory nodes defined. The
      reserved memory nodes should be carveout nodes, and should be defined as
      per the bindings in
      Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
    items:
      - description: region used for dynamic DMA allocations like vrings and
                     vring buffers
      - description: region reserved for firmware image sections
    additionalItems: true

# Optional properties:
# --------------------

  sram:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    minItems: 1
    maxItems: 4
    description: |
      phandles to one or more reserved on-chip SRAM regions. The regions
      should be defined as child nodes of the respective SRAM node, and
      should be defined as per the generic bindings in,
      Documentation/devicetree/bindings/sram/sram.yaml

if:
  properties:
    compatible:
      enum:
        - ti,j721e-c66-dsp
then:
  properties:
    reg:
      items:
        - description: Address and Size of the L2 SRAM internal memory region
        - description: Address and Size of the L1 PRAM internal memory region
        - description: Address and Size of the L1 DRAM internal memory region
    reg-names:
      items:
        - const: l2sram
        - const: l1pram
        - const: l1dram
else:
  if:
    properties:
      compatible:
        enum:
          - ti,j721e-c71-dsp
  then:
    properties:
      reg:
        items:
          - description: Address and Size of the L2 SRAM internal memory region
          - description: Address and Size of the L1 DRAM internal memory region
      reg-names:
        items:
          - const: l2sram
          - const: l1dram

required:
 - compatible
 - reg
 - reg-names
 - ti,sci
 - ti,sci-dev-id
 - ti,sci-proc-ids
 - resets
 - firmware-name
 - mboxes
 - memory-region

unevaluatedProperties: false

examples:
  - |
    / {
        model = "Texas Instruments K3 J721E SoC";
        compatible = "ti,j721e";
        #address-cells = <2>;
        #size-cells = <2>;

        bus@100000 {
            compatible = "simple-bus";
            #address-cells = <2>;
            #size-cells = <2>;
            ranges = <0x00 0x00100000 0x00 0x00100000 0x00 0x00020000>, /* ctrl mmr */
                     <0x00 0x64800000 0x00 0x64800000 0x00 0x00800000>, /* C71_0 */
                     <0x4d 0x80800000 0x4d 0x80800000 0x00 0x00800000>, /* C66_0 */
                     <0x4d 0x81800000 0x4d 0x81800000 0x00 0x00800000>; /* C66_1 */

            /* J721E C66_0 DSP node */
            dsp@4d80800000 {
                compatible = "ti,j721e-c66-dsp";
                reg = <0x4d 0x80800000 0x00 0x00048000>,
                      <0x4d 0x80e00000 0x00 0x00008000>,
                      <0x4d 0x80f00000 0x00 0x00008000>;
                reg-names = "l2sram", "l1pram", "l1dram";
                ti,sci = <&dmsc>;
                ti,sci-dev-id = <142>;
                ti,sci-proc-ids = <0x03 0xFF>;
                resets = <&k3_reset 142 1>;
                firmware-name = "j7-c66_0-fw";
                memory-region = <&c66_0_dma_memory_region>,
                                <&c66_0_memory_region>;
                mboxes = <&mailbox0_cluster3 &mbox_c66_0>;
            };

            /* J721E C71_0 DSP node */
            c71_0: dsp@64800000 {
                compatible = "ti,j721e-c71-dsp";
                reg = <0x00 0x64800000 0x00 0x00080000>,
                      <0x00 0x64e00000 0x00 0x0000c000>;
                reg-names = "l2sram", "l1dram";
                ti,sci = <&dmsc>;
                ti,sci-dev-id = <15>;
                ti,sci-proc-ids = <0x30 0xFF>;
                resets = <&k3_reset 15 1>;
                firmware-name = "j7-c71_0-fw";
                memory-region = <&c71_0_dma_memory_region>,
                                <&c71_0_memory_region>;
                mboxes = <&mailbox0_cluster4 &mbox_c71_0>;
            };
        };
    };
+3 −3
Original line number Diff line number Diff line
@@ -192,9 +192,9 @@ Returns 0 on success and an appropriate error value on failure.

::

  struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *rpdev,
		void (*cb)(struct rpmsg_channel *, void *, int, void *, u32),
		void *priv, u32 addr);
  struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_device *rpdev,
					  rpmsg_rx_cb_t cb, void *priv,
					  struct rpmsg_channel_info chinfo);

every rpmsg address in the system is bound to an rx callback (so when
inbound messages arrive, they are dispatched by the rpmsg bus using the
+1 −0
Original line number Diff line number Diff line
@@ -339,6 +339,7 @@ Code Seq# Include File Comments
0xB4  00-0F  linux/gpio.h                                            <mailto:linux-gpio@vger.kernel.org>
0xB5  00-0F  uapi/linux/rpmsg.h                                      <mailto:linux-remoteproc@vger.kernel.org>
0xB6  all    linux/fpga-dfl.h
0xB7  all    uapi/linux/remoteproc_cdev.h                            <mailto:linux-remoteproc@vger.kernel.org>
0xC0  00-0F  linux/usb/iowarrior.h
0xCA  00-0F  uapi/misc/cxl.h
0xCA  10-2F  uapi/misc/ocxl.h
Loading