Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit edc57ea9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'rproc-v4.10' of git://github.com/andersson/remoteproc

Pull remoteproc updates from Bjorn Andersson:

 - introduce remoteproc "subdevice" support, which allows remoteproc
   driver to associate devices to the "running" state of the remoteproc,
   allowing devices to be probed and removed as the remote processor is
   booted, shut down or recovering from a crash.

 - handling of virtio device resources was improved, vring memory is now
   allocated as part of other memory allocation. This ensures that all
   vrings for all virtio devices are allocated before we boot the remote
   processor.

 - the debugfs mechanism for starting and stopping remoteproc instances
   was replaced with a sysfs interface, also providing a mechanism for
   specifying firmware to use by the instance. This allows user space to
   load and boot use case specific firmware on remote processors.

 - new drivers for the ST Slimcore and Qualcomm Hexagon DSP as well as
   removal of the unused StE modem loader.

 - finally support for crash recovery in the Qualcomm Wirelss subsystem
   (used for WiFi/BT/FM on a number of platforms) and a number of bug
   fixes and cleanups

* tag 'rproc-v4.10' of git://github.com/andersson/remoteproc: (49 commits)
  remoteproc: qcom_adsp_pil: select qcom_scm
  remoteproc: Drop wait in __rproc_boot()
  remoteproc/ste: Delete unused driver
  remoteproc: Remove "experimental" warning
  remoteproc: qcom_adsp_pil: select qcom_scm
  dt-binding: soc: qcom: smd: Add label property
  remoteproc: qcom: mdt_loader: add include for sizes
  remoteproc: Update last rproc_put users to rproc_free
  remoteproc: qcom: adsp: Add missing MODULE_DEVICE_TABLE
  remoteproc: wcnss-pil: add QCOM_SMD dependency
  dmaengine: st_fdma: Revert: "Revert: Update st_fdma to 'depends on REMOTEPROC'"
  remoteproc: Add support for xo clock
  remoteproc: adsp-pil: fix recursive dependency
  remoteproc: Introduce Qualcomm ADSP PIL
  dt-binding: remoteproc: Introduce ADSP loader binding
  remoteproc: qcom_wcnss: Fix circular module dependency
  remoteproc: Merge table_ptr and cached_table pointers
  remoteproc: Remove custom vdev handler list
  remoteproc: Update max_notifyid as we allocate vrings
  remoteproc: Decouple vdev resources and devices
  ...
parents 5233c331 e2a32b6b
Loading
Loading
Loading
Loading
+50 −0
Original line number Diff line number Diff line
What:		/sys/class/remoteproc/.../firmware
Date:		October 2016
Contact:	Matt Redfearn <matt.redfearn@imgtec.com>
Description:	Remote processor firmware

		Reports the name of the firmware currently loaded to the
		remote processor.

		To change the running firmware, ensure the remote processor is
		stopped (using /sys/class/remoteproc/.../state) and write a new filename.

What:		/sys/class/remoteproc/.../state
Date:		October 2016
Contact:	Matt Redfearn <matt.redfearn@imgtec.com>
Description:	Remote processor state

		Reports the state of the remote processor, which will be one of:

		"offline"
		"suspended"
		"running"
		"crashed"
		"invalid"

		"offline" means the remote processor is powered off.

		"suspended" means that the remote processor is suspended and
		must be woken to receive messages.

		"running" is the normal state of an available remote processor

		"crashed" indicates that a problem/crash has been detected on
		the remote processor.

		"invalid" is returned if the remote processor is in an
		unknown state.

		Writing this file controls the state of the remote processor.
		The following states can be written:

		"start"
		"stop"

		Writing "start" will attempt to start the processor running the
		firmware indicated by, or written to,
		/sys/class/remoteproc/.../firmware. The remote processor should
		transition to "running" state.

		Writing "stop" will attempt to halt the remote processor and
		return it to the "offline" state.
+87 −0
Original line number Diff line number Diff line
* STMicroelectronics Flexible Direct Memory Access Device Tree bindings

The FDMA is a general-purpose direct memory access controller capable of
supporting 16 independent DMA channels. It accepts up to 32 DMA requests.
The FDMA is based on a Slim processor which requires a firmware.

* FDMA Controller

Required properties:
- compatible	: Should be one of
		 - st,stih407-fdma-mpe31-11, "st,slim-rproc";
		 - st,stih407-fdma-mpe31-12, "st,slim-rproc";
		 - st,stih407-fdma-mpe31-13, "st,slim-rproc";
- reg		: Should contain an entry for each name in reg-names
- reg-names	: Must contain "slimcore", "dmem", "peripherals", "imem" entries
- interrupts	: Should contain one interrupt shared by all channels
- dma-channels	: Number of channels supported by the controller
- #dma-cells	: Must be <3>. See DMA client section below
- clocks	: Must contain an entry for each clock
See: Documentation/devicetree/bindings/clock/clock-bindings.txt


Example:

	fdma0: dma-controller@8e20000 {
		compatible = "st,stih407-fdma-mpe31-11", "st,slim-rproc";
		reg = <0x8e20000 0x8000>,
		      <0x8e30000 0x3000>,
		      <0x8e37000 0x1000>,
		      <0x8e38000 0x8000>;
		reg-names = "slimcore", "dmem", "peripherals", "imem";
		clocks = <&clk_s_c0_flexgen CLK_FDMA>,
			 <&clk_s_c0_flexgen CLK_EXT2F_A9>,
			 <&clk_s_c0_flexgen CLK_EXT2F_A9>,
			 <&clk_s_c0_flexgen CLK_EXT2F_A9>;
		interrupts = <GIC_SPI 5 IRQ_TYPE_NONE>;
		dma-channels = <16>;
		#dma-cells = <3>;
	};

* DMA client

Required properties:
- dmas: Comma separated list of dma channel requests
- dma-names: Names of the aforementioned requested channels

Each dmas request consists of 4 cells:
1. A phandle pointing to the FDMA controller
2. The request line number
3. A 32bit mask specifying (see include/linux/platform_data/dma-st-fdma.h)
 -bit 2-0: Holdoff value, dreq will be masked for
	0x0: 0-0.5us
	0x1: 0.5-1us
	0x2: 1-1.5us
 -bit 17: data swap
	0x0: disabled
	0x1: enabled
 -bit 21: Increment Address
	0x0: no address increment between transfers
	0x1: increment address between transfers
 -bit 22: 2 STBus Initiator Coprocessor interface
	0x0: high priority port
	0x1: low priority port
4. transfers type
 0 free running
 1 paced

Example:

	sti_uni_player2: sti-uni-player@2 {
		compatible = "st,sti-uni-player";
		status = "disabled";
		#sound-dai-cells = <0>;
		st,syscfg = <&syscfg_core>;
		clocks = <&clk_s_d0_flexgen CLK_PCM_2>;
		assigned-clocks = <&clk_s_d0_flexgen CLK_PCM_2>;
		assigned-clock-parents = <&clk_s_d0_quadfs 2>;
		assigned-clock-rates = <50000000>;
		reg = <0x8D82000 0x158>;
		interrupts = <GIC_SPI 86 IRQ_TYPE_NONE>;
		dmas = <&fdma0 4 0 1>;
		dai-name = "Uni Player #1 (DAC)";
		dma-names = "tx";
		st,uniperiph-id = <2>;
		st,version = <5>;
		st,mode = "PCM";
	};
+98 −0
Original line number Diff line number Diff line
Qualcomm ADSP Peripheral Image Loader

This document defines the binding for a component that loads and boots firmware
on the Qualcomm ADSP Hexagon core.

- compatible:
	Usage: required
	Value type: <string>
	Definition: must be one of:
		    "qcom,msm8974-adsp-pil"
		    "qcom,msm8996-adsp-pil"

- interrupts-extended:
	Usage: required
	Value type: <prop-encoded-array>
	Definition: must list the watchdog, fatal IRQs ready, handover and
		    stop-ack IRQs

- interrupt-names:
	Usage: required
	Value type: <stringlist>
	Definition: must be "wdog", "fatal", "ready", "handover", "stop-ack"

- clocks:
	Usage: required
	Value type: <prop-encoded-array>
	Definition: reference to the xo clock to be held on behalf of the
		    booting Hexagon core

- clock-names:
	Usage: required
	Value type: <stringlist>
	Definition: must be "xo"

- cx-supply:
	Usage: required
	Value type: <phandle>
	Definition: reference to the regulator to be held on behalf of the
		    booting Hexagon core

- memory-region:
	Usage: required
	Value type: <phandle>
	Definition: reference to the reserved-memory for the ADSP

- qcom,smem-states:
	Usage: required
	Value type: <phandle>
	Definition: reference to the smem state for requesting the ADSP to
		    shut down

- qcom,smem-state-names:
	Usage: required
	Value type: <stringlist>
	Definition: must be "stop"


= SUBNODES
The adsp node may have an subnode named "smd-edge" that describes the SMD edge,
channels and devices related to the ADSP.  See ../soc/qcom/qcom,smd.txt for
details on how to describe the SMD edge.


= EXAMPLE
The following example describes the resources needed to boot control the
ADSP, as it is found on MSM8974 boards.

	adsp {
		compatible = "qcom,msm8974-adsp-pil";

		interrupts-extended = <&intc 0 162 IRQ_TYPE_EDGE_RISING>,
				      <&adsp_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
				      <&adsp_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
				      <&adsp_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
				      <&adsp_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
		interrupt-names = "wdog",
				  "fatal",
				  "ready",
				  "handover",
				  "stop-ack";

		clocks = <&rpmcc RPM_CXO_CLK>;
		clock-names = "xo";

		cx-supply = <&pm8841_s2>;

		memory-region = <&adsp_region>;

		qcom,smem-states = <&adsp_smp2p_out 0>;
		qcom,smem-state-names = "stop";

		smd-edge {
			interrupts = <0 156 IRQ_TYPE_EDGE_RISING>;

			qcom,ipc = <&apcs 8 8>;
			qcom,smd-edge = <1>;
		};
	};
+28 −2
Original line number Diff line number Diff line
@@ -60,8 +60,8 @@ on the Qualcomm WCNSS core.
		    see ../reserved-memory/reserved-memory.txt

= SUBNODES
A single subnode of the WCNSS PIL describes the attached rf module and its
resource dependencies.
A required subnode of the WCNSS PIL is used to describe the attached rf module
and its resource dependencies. It is described by the following properties:

- compatible:
	Usage: required
@@ -90,6 +90,11 @@ resource dependencies.
	Definition: reference to the regulators to be held on behalf of the
		    booting of the WCNSS core


The wcnss node can also have an subnode named "smd-edge" that describes the SMD
edge, channels and devices related to the WCNSS.
See ../soc/qcom/qcom,smd.txt for details on how to describe the SMD edge.

= EXAMPLE
The following example describes the resources needed to boot control the WCNSS,
with attached WCN3680, as it is commonly found on MSM8974 boards.
@@ -129,4 +134,25 @@ pronto@fb204000 {
		vddpa-supply = <&pm8941_l19>;
		vdddig-supply = <&pm8941_s3>;
	};

	smd-edge {
		interrupts = <0 142 1>;

		qcom,ipc = <&apcs 8 17>;
		qcom,smd-edge = <6>;
		qcom,remote-pid = <4>;

		label = "pronto";

		wcnss {
			compatible = "qcom,wcnss";
			qcom,smd-channels = "WCNSS_CTRL";

			qcom,mmio = <&pronto>;

			bt {
				compatible = "qcom,wcnss-bt";
			};
		};
	};
};
+7 −0
Original line number Diff line number Diff line
@@ -43,6 +43,13 @@ The edge is described by the following properties:
	Definition: the identifier for the remote processor as known by the rest
		    of the system.

- label:
	Usage: optional
	Value type: <string>
	Definition: name of the edge, used for debugging and identification
		    purposes. The node name will be used if this is not
		    present.

= SMD DEVICES

In turn, subnodes of the "edges" represent devices tied to SMD channels on that
Loading