2023-03-27 18:50:25

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH v2 0/5] dts: qcom: arm64: sdm845: SLPI DSP enablement

* About *

The Qualcomm SDM845 SoC has a separate SLPI (Sensor Low Power Island)
DSP for sensors connected to the SoC which is responsible for exposing
sensors to userspace, power saving, and other features.
While sensors are connected to GPIOs of the SoC, they cannot be used
because the hypervisor blocks direct access to the sensors, thus the
DSP must be used to access any sensor on this SoC. The SLPI DSP uses a
GLink edge (dsps) to communicate with the host and has a FastRPC interface
to load files from the host filesystem such as sensor configuration files.
The FastRPC interface does not use regular FastRPC Compute Banks
but instead uses an allocated CMA region through which communication happens.

* Changes *

This patchseries completes support for the SLPI in the Qualcomm SDM845 SoC
by adding the SLPI to the SDM845 DTS and enable it for 2 hardware devices:
- Oneplus 6
- SHIFTPHONES SHIFT6mq

* Related patches *

1. Remoteproc changes to support the SLPI DSP in SDM845 (v2):
https://lore.kernel.org/linux-remoteproc/[email protected]/
2. FastRPC changes to support the SLPI DSP in SDM845 (v2):
https://lore.kernel.org/linux-arm-msm/[email protected]/

This serie does not depend on any serie, but all of them are necessary
to enable the feature in the end.

* Changelog *

Changes in v2:

- Removed double blank lines
- Enforce alphabetically order for 'slpi_pas'
- Reordered 'slpi_pas' properties
- Fixed FastRPC syntax
- Dropped qcom,assign-all-mem property as this is not necessary anymore

Kind regards,
Dylan Van Assche

Dylan Van Assche (5):
dts: arm64: qcom: sdm845: add SLPI remoteproc
dt-bindings: misc: qcom,fastrpc: allow FastRPC node without reg entry
dts: arm64: qcom: sdm845: add SLPI FastRPC support
dts: arm64: qcom: sdm845-oneplus: enable SLPI
dts: arm64: qcom: sdm845-shift-axolotl: enable SLPI

.../bindings/misc/qcom,fastrpc.yaml | 3 +-
.../boot/dts/qcom/sdm845-oneplus-common.dtsi | 5 ++
.../boot/dts/qcom/sdm845-shift-axolotl.dts | 5 ++
arch/arm64/boot/dts/qcom/sdm845.dtsi | 59 +++++++++++++++++++
4 files changed, 70 insertions(+), 2 deletions(-)

--
2.39.2


2023-03-27 18:50:51

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH v2 3/5] dts: arm64: qcom: sdm845: add SLPI FastRPC support

Qualcomm SDM845 SoC features a SLPI DSP which uses FastRPC through
an allocated memory region to load files from the host filesystem
such as sensor configuration files.

Add a FastRPC node at /dev/fastrpc-sdsp and a DMA region, similar to
downstream, to allow userspace to communicate with the SLPI via the
FastRPC interface for initializing the sensors on the SLPI.

Signed-off-by: Dylan Van Assche <[email protected]>
---
arch/arm64/boot/dts/qcom/sdm845.dtsi | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi
index 3b547cb7aeb8..7412ea938765 100644
--- a/arch/arm64/boot/dts/qcom/sdm845.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi
@@ -878,6 +878,14 @@ mdata_mem: mpss-metadata {
size = <0 0x4000>;
no-map;
};
+
+ fastrpc_mem: fastrpc {
+ compatible = "shared-dma-pool";
+ reusable;
+ alloc-ranges = <0 0x00000000 0 0xffffffff>;
+ alignment = <0 0x400000>;
+ size = <0 0x1000000>;
+ };
};

adsp_pas: remoteproc-adsp {
@@ -3344,6 +3352,21 @@ glink-edge {
label = "dsps";
qcom,remote-pid = <3>;
mboxes = <&apss_shared 24>;
+
+ fastrpc {
+ compatible = "qcom,fastrpc";
+ qcom,glink-channels = "fastrpcglink-apps-dsp";
+ label = "sdsp";
+ qcom,non-secure-domain;
+ qcom,vmids = <0x3 0xF 0x5 0x6>;
+ memory-region = <&fastrpc_mem>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ compute-cb {
+ compatible = "qcom,fastrpc-compute-cb";
+ };
+ };
};
};

--
2.39.2

2023-03-27 18:51:04

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH v2 4/5] dts: arm64: qcom: sdm845-oneplus: enable SLPI

Enable the SLPI DSP on the Oneplus 6 phone with a Qualcomm SDM845 SoC.

Signed-off-by: Dylan Van Assche <[email protected]>
---
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
index b01542d79ae2..3bd15984990c 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
@@ -552,6 +552,11 @@ &qup_uart9_tx {
bias-disable;
};

+&slpi_pas {
+ firmware-name = "qcom/sdm845/oneplus6/slpi.mbn";
+ status = "okay";
+};
+
&sound {
compatible = "qcom,sdm845-sndcard";
pinctrl-0 = <&quat_mi2s_active &quat_mi2s_sd0_active &quat_mi2s_sd1_active>;
--
2.39.2

2023-03-27 18:51:28

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH v2 5/5] dts: arm64: qcom: sdm845-shift-axolotl: enable SLPI

Enable the SLPI DSP on the SHIFTPHONES SHIFT6mq phone with a
Qualcomm SDM845 SoC.

Signed-off-by: Dylan Van Assche <[email protected]>
---
arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts b/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts
index b54e304abf71..bd9571a258cf 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts
+++ b/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts
@@ -572,6 +572,11 @@ &qupv3_id_1 {
status = "okay";
};

+&slpi_pas {
+ firmware-name = "qcom/sdm845/axolotl/slpi.mbn";
+ status = "okay";
+};
+
&tlmm {
gpio-reserved-ranges = <0 4>, <81 4>;

--
2.39.2

2023-03-27 18:51:39

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH v2 2/5] dt-bindings: misc: qcom,fastrpc: allow FastRPC node without reg entry

FastRPC nodes may exist without a registry property and actual
Compute Banks in some cases such as the SLPI on the Qualcomm SDM845 SoC.
Relax the regex to allow such FastRPC nodes and remove 'reg' as a
required property.

Signed-off-by: Dylan Van Assche <[email protected]>
---
Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml b/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml
index 1ab9588cdd89..0ccd3296d4f2 100644
--- a/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml
+++ b/Documentation/devicetree/bindings/misc/qcom,fastrpc.yaml
@@ -64,7 +64,7 @@ properties:
const: 0

patternProperties:
- "(compute-)?cb@[0-9]*$":
+ "(compute-)?cb(@[0-9]*)?$":
type: object

description: >
@@ -89,7 +89,6 @@ patternProperties:

required:
- compatible
- - reg

additionalProperties: false

--
2.39.2

2023-03-27 19:36:56

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v2 2/5] dt-bindings: misc: qcom,fastrpc: allow FastRPC node without reg entry

On 27/03/2023 20:48, Dylan Van Assche wrote:
> FastRPC nodes may exist without a registry property and actual

Why would they exist without unit address?

> Compute Banks in some cases such as the SLPI on the Qualcomm SDM845 SoC.

I do not see there anything disallowing unit address yet...


> Relax the regex to allow such FastRPC nodes and remove 'reg' as a
> required property.

No, at least not without proper explanation why unit address is not
allowed for these.


Best regards,
Krzysztof

2023-03-27 19:37:02

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v2 3/5] dts: arm64: qcom: sdm845: add SLPI FastRPC support

On 27/03/2023 20:48, Dylan Van Assche wrote:
> Qualcomm SDM845 SoC features a SLPI DSP which uses FastRPC through
> an allocated memory region to load files from the host filesystem
> such as sensor configuration files.
>
> Add a FastRPC node at /dev/fastrpc-sdsp and a DMA region, similar to
> downstream, to allow userspace to communicate with the SLPI via the
> FastRPC interface for initializing the sensors on the SLPI.
>
> Signed-off-by: Dylan Van Assche <[email protected]>
> ---
> arch/arm64/boot/dts/qcom/sdm845.dtsi | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi
> index 3b547cb7aeb8..7412ea938765 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi
> @@ -878,6 +878,14 @@ mdata_mem: mpss-metadata {
> size = <0 0x4000>;
> no-map;
> };
> +
> + fastrpc_mem: fastrpc {
> + compatible = "shared-dma-pool";
> + reusable;
> + alloc-ranges = <0 0x00000000 0 0xffffffff>;
> + alignment = <0 0x400000>;
> + size = <0 0x1000000>;
> + };
> };
>
> adsp_pas: remoteproc-adsp {
> @@ -3344,6 +3352,21 @@ glink-edge {
> label = "dsps";
> qcom,remote-pid = <3>;
> mboxes = <&apss_shared 24>;
> +
> + fastrpc {
> + compatible = "qcom,fastrpc";
> + qcom,glink-channels = "fastrpcglink-apps-dsp";
> + label = "sdsp";
> + qcom,non-secure-domain;
> + qcom,vmids = <0x3 0xF 0x5 0x6>;
> + memory-region = <&fastrpc_mem>;
> + #address-cells = <1>;
> + #size-cells = <0>;

This does not make sense now with children nodes not having unit
addresses... but anyway, I do not understand why this one compute node
cannot have unit address.



Best regards,
Krzysztof