2023-03-25 13:25:21

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH 0/2] Qualcomm SDM845 SLPI DSP driver support

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.

This set of patches adds support to drivers for the SLPI DSP:
1. Configure the permissions of assigned DSP memory through the hypervisor.
2. Allocate a remote heap when the FastRPC session ID is 0 instead of using
a Compute Bank directly.
3. Add the SLPI remoteproc resource to the q6v5_pas driver to enable support
for it in the driver.
over QRTR.

DTS changes to enable the SLPI DSP in the SDM845 DTS and hardware
e.g. Oneplus 6 and SHIFTPHONES SHIFT6mq will be send once the driver changes
are applied.

Kind regards,
Dylan Van Assche

Dylan Van Assche (2):
dt-bindings: remoteproc: qcom: adsp: add qcom,sdm845-slpi-pas
compatible
remoteproc: qcom: pas: add SDM845 SLPI resource

.../bindings/remoteproc/qcom,adsp.yaml | 3 +++
drivers/remoteproc/qcom_q6v5_pas.c | 17 +++++++++++++++++
2 files changed, 20 insertions(+)

--
2.39.2


2023-03-25 13:26:03

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH 1/2] dt-bindings: remoteproc: qcom: adsp: add qcom,sdm845-slpi-pas compatible

SLPI DSP remoteproc on DSP is defined by the 'qcom,sdm845-slpi-pas'
compatible in the qcom_q6v5_pas driver. Add this compatible to the
devicetree bindings.

Signed-off-by: Dylan Van Assche <[email protected]>
---
Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml | 3 +++
1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
index 643ee787a81f..175be01ecd1c 100644
--- a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
@@ -26,6 +26,7 @@ properties:
- qcom,sdm660-adsp-pas
- qcom,sdm845-adsp-pas
- qcom,sdm845-cdsp-pas
+ - qcom,sdm845-slpi-pas

reg:
maxItems: 1
@@ -63,6 +64,7 @@ allOf:
- qcom,msm8998-adsp-pas
- qcom,sdm845-adsp-pas
- qcom,sdm845-cdsp-pas
+ - qcom,sdm845-slpi-pas
then:
properties:
clocks:
@@ -104,6 +106,7 @@ allOf:
- qcom,msm8998-slpi-pas
- qcom,sdm845-adsp-pas
- qcom,sdm845-cdsp-pas
+ - qcom,sdm845-slpi-pas
then:
properties:
interrupts:
--
2.39.2

2023-03-25 13:27:31

by Dylan Van Assche

[permalink] [raw]
Subject: [PATCH 2/2] remoteproc: qcom: pas: add SDM845 SLPI resource

Add SLPI resources for the SDM845 Qualcomm SoC to the Qualcomm
remoteproc q6v5_pas driver to define the default firmware name
and GLink edge name.

Signed-off-by: Dylan Van Assche <[email protected]>
---
drivers/remoteproc/qcom_q6v5_pas.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
index c99a20542685..d82b6f4bced4 100644
--- a/drivers/remoteproc/qcom_q6v5_pas.c
+++ b/drivers/remoteproc/qcom_q6v5_pas.c
@@ -1028,6 +1028,22 @@ static const struct adsp_data slpi_resource_init = {
.ssctl_id = 0x16,
};

+static const struct adsp_data sdm845_slpi_resource = {
+ .crash_reason_smem = 424,
+ .firmware_name = "slpi.mdt",
+ .pas_id = 12,
+ .auto_boot = true,
+ .proxy_pd_names = (char*[]){
+ "lcx",
+ "lmx",
+ NULL
+ },
+ .load_state = "slpi",
+ .ssr_name = "dsps",
+ .sysmon_name = "slpi",
+ .ssctl_id = 0x16,
+};
+
static const struct adsp_data sm8150_slpi_resource = {
.crash_reason_smem = 424,
.firmware_name = "slpi.mdt",
@@ -1201,6 +1217,7 @@ static const struct of_device_id adsp_of_match[] = {
{ .compatible = "qcom,sdm660-adsp-pas", .data = &adsp_resource_init},
{ .compatible = "qcom,sdm845-adsp-pas", .data = &sdm845_adsp_resource_init},
{ .compatible = "qcom,sdm845-cdsp-pas", .data = &sdm845_cdsp_resource_init},
+ { .compatible = "qcom,sdm845-slpi-pas", .data = &sdm845_slpi_resource},
{ .compatible = "qcom,sdx55-mpss-pas", .data = &sdx55_mpss_resource},
{ .compatible = "qcom,sm6115-adsp-pas", .data = &adsp_resource_init},
{ .compatible = "qcom,sm6115-cdsp-pas", .data = &cdsp_resource_init},
--
2.39.2

2023-03-26 08:56:50

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 0/2] Qualcomm SDM845 SLPI DSP driver support

On 25/03/2023 14:21, Dylan Van Assche wrote:
> 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.
>
> This set of patches adds support to drivers for the SLPI DSP:
> 1. Configure the permissions of assigned DSP memory through the hypervisor.
> 2. Allocate a remote heap when the FastRPC session ID is 0 instead of using
> a Compute Bank directly.
> 3. Add the SLPI remoteproc resource to the q6v5_pas driver to enable support
> for it in the driver.
> over QRTR.
>
> DTS changes to enable the SLPI DSP in the SDM845 DTS and hardware
> e.g. Oneplus 6 and SHIFTPHONES SHIFT6mq will be send once the driver changes
> are applied.

No, as we explained on IRC, we expect DTS to be sent the same time.

Best regards,
Krzysztof

2023-03-26 08:58:07

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: remoteproc: qcom: adsp: add qcom,sdm845-slpi-pas compatible

On 25/03/2023 14:21, Dylan Van Assche wrote:
> SLPI DSP remoteproc on DSP is defined by the 'qcom,sdm845-slpi-pas'
> compatible in the qcom_q6v5_pas driver. Add this compatible to the
> devicetree bindings.
>
> Signed-off-by: Dylan Van Assche <[email protected]>
> ---
> Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
> index 643ee787a81f..175be01ecd1c 100644
> --- a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
> +++ b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
> @@ -26,6 +26,7 @@ properties:
> - qcom,sdm660-adsp-pas
> - qcom,sdm845-adsp-pas
> - qcom,sdm845-cdsp-pas
> + - qcom,sdm845-slpi-pas
>
> reg:
> maxItems: 1
> @@ -63,6 +64,7 @@ allOf:
> - qcom,msm8998-adsp-pas
> - qcom,sdm845-adsp-pas
> - qcom,sdm845-cdsp-pas
> + - qcom,sdm845-slpi-pas
> then:
> properties:
> clocks:
> @@ -104,6 +106,7 @@ allOf:


You miss also if:then: for power-domains.

Best regards,
Krzysztof

2023-03-27 08:49:47

by Konrad Dybcio

[permalink] [raw]
Subject: Re: [PATCH 2/2] remoteproc: qcom: pas: add SDM845 SLPI resource



On 25.03.2023 14:21, Dylan Van Assche wrote:
> Add SLPI resources for the SDM845 Qualcomm SoC to the Qualcomm
> remoteproc q6v5_pas driver to define the default firmware name
> and GLink edge name.
>
> Signed-off-by: Dylan Van Assche <[email protected]>
> ---
> drivers/remoteproc/qcom_q6v5_pas.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
> index c99a20542685..d82b6f4bced4 100644
> --- a/drivers/remoteproc/qcom_q6v5_pas.c
> +++ b/drivers/remoteproc/qcom_q6v5_pas.c
> @@ -1028,6 +1028,22 @@ static const struct adsp_data slpi_resource_init = {
> .ssctl_id = 0x16,
> };
>
> +static const struct adsp_data sdm845_slpi_resource = {
> + .crash_reason_smem = 424,
> + .firmware_name = "slpi.mdt",
> + .pas_id = 12,
> + .auto_boot = true,
> + .proxy_pd_names = (char*[]){
> + "lcx",
> + "lmx",
> + NULL
> + },
> + .load_state = "slpi",
> + .ssr_name = "dsps",
> + .sysmon_name = "slpi",
> + .ssctl_id = 0x16,
Isn't this identical to sm8150_slpi_resource?

Konrad
> +};
> +
> static const struct adsp_data sm8150_slpi_resource = {
> .crash_reason_smem = 424,
> .firmware_name = "slpi.mdt",
> @@ -1201,6 +1217,7 @@ static const struct of_device_id adsp_of_match[] = {
> { .compatible = "qcom,sdm660-adsp-pas", .data = &adsp_resource_init},
> { .compatible = "qcom,sdm845-adsp-pas", .data = &sdm845_adsp_resource_init},
> { .compatible = "qcom,sdm845-cdsp-pas", .data = &sdm845_cdsp_resource_init},
> + { .compatible = "qcom,sdm845-slpi-pas", .data = &sdm845_slpi_resource},
> { .compatible = "qcom,sdx55-mpss-pas", .data = &sdx55_mpss_resource},
> { .compatible = "qcom,sm6115-adsp-pas", .data = &adsp_resource_init},
> { .compatible = "qcom,sm6115-cdsp-pas", .data = &cdsp_resource_init},

2023-03-27 09:35:52

by Dylan Van Assche

[permalink] [raw]
Subject: Re: [PATCH 2/2] remoteproc: qcom: pas: add SDM845 SLPI resource

Hi Konrad,

On Mon, 2023-03-27 at 10:44 +0200, Konrad Dybcio wrote:
>
>
> On 25.03.2023 14:21, Dylan Van Assche wrote:
> > Add SLPI resources for the SDM845 Qualcomm SoC to the Qualcomm
> > remoteproc q6v5_pas driver to define the default firmware name
> > and GLink edge name.
> >
> > Signed-off-by: Dylan Van Assche <[email protected]>
> > ---
> >  drivers/remoteproc/qcom_q6v5_pas.c | 17 +++++++++++++++++
> >  1 file changed, 17 insertions(+)
> >
> > diff --git a/drivers/remoteproc/qcom_q6v5_pas.c
> > b/drivers/remoteproc/qcom_q6v5_pas.c
> > index c99a20542685..d82b6f4bced4 100644
> > --- a/drivers/remoteproc/qcom_q6v5_pas.c
> > +++ b/drivers/remoteproc/qcom_q6v5_pas.c
> > @@ -1028,6 +1028,22 @@ static const struct adsp_data
> > slpi_resource_init = {
> >                 .ssctl_id = 0x16,
> >  };
> >  
> > +static const struct adsp_data sdm845_slpi_resource = {
> > +               .crash_reason_smem = 424,
> > +               .firmware_name = "slpi.mdt",
> > +               .pas_id = 12,
> > +               .auto_boot = true,
> > +               .proxy_pd_names = (char*[]){
> > +                       "lcx",
> > +                       "lmx",
> > +                       NULL
> > +               },
> > +               .load_state = "slpi",
> > +               .ssr_name = "dsps",
> > +               .sysmon_name = "slpi",
> > +               .ssctl_id = 0x16,
> Isn't this identical to sm8150_slpi_resource?
>
> Konrad

Yes it is. I added a new entry because for SM8150, SM8250, and SM8350
they are duplicated as well. The SDM845's struct is indentical to
SM8150/SM8250/SM8350's structs.

Kind regards,
Dylan Van Assche

> > +};
> > +
> >  static const struct adsp_data sm8150_slpi_resource = {
> >                 .crash_reason_smem = 424,
> >                 .firmware_name = "slpi.mdt",
> > @@ -1201,6 +1217,7 @@ static const struct of_device_id
> > adsp_of_match[] = {
> >         { .compatible = "qcom,sdm660-adsp-pas", .data =
> > &adsp_resource_init},
> >         { .compatible = "qcom,sdm845-adsp-pas", .data =
> > &sdm845_adsp_resource_init},
> >         { .compatible = "qcom,sdm845-cdsp-pas", .data =
> > &sdm845_cdsp_resource_init},
> > +       { .compatible = "qcom,sdm845-slpi-pas", .data =
> > &sdm845_slpi_resource},
> >         { .compatible = "qcom,sdx55-mpss-pas", .data =
> > &sdx55_mpss_resource},
> >         { .compatible = "qcom,sm6115-adsp-pas", .data =
> > &adsp_resource_init},
> >         { .compatible = "qcom,sm6115-cdsp-pas", .data =
> > &cdsp_resource_init},

2023-03-27 11:05:14

by Konrad Dybcio

[permalink] [raw]
Subject: Re: [PATCH 2/2] remoteproc: qcom: pas: add SDM845 SLPI resource



On 27.03.2023 11:34, Dylan Van Assche wrote:
> Hi Konrad,
>
> On Mon, 2023-03-27 at 10:44 +0200, Konrad Dybcio wrote:
>>
>>
>> On 25.03.2023 14:21, Dylan Van Assche wrote:
>>> Add SLPI resources for the SDM845 Qualcomm SoC to the Qualcomm
>>> remoteproc q6v5_pas driver to define the default firmware name
>>> and GLink edge name.
>>>
>>> Signed-off-by: Dylan Van Assche <[email protected]>
>>> ---
>>>  drivers/remoteproc/qcom_q6v5_pas.c | 17 +++++++++++++++++
>>>  1 file changed, 17 insertions(+)
>>>
>>> diff --git a/drivers/remoteproc/qcom_q6v5_pas.c
>>> b/drivers/remoteproc/qcom_q6v5_pas.c
>>> index c99a20542685..d82b6f4bced4 100644
>>> --- a/drivers/remoteproc/qcom_q6v5_pas.c
>>> +++ b/drivers/remoteproc/qcom_q6v5_pas.c
>>> @@ -1028,6 +1028,22 @@ static const struct adsp_data
>>> slpi_resource_init = {
>>>                 .ssctl_id = 0x16,
>>>  };
>>>  
>>> +static const struct adsp_data sdm845_slpi_resource = {
>>> +               .crash_reason_smem = 424,
>>> +               .firmware_name = "slpi.mdt",
>>> +               .pas_id = 12,
>>> +               .auto_boot = true,
>>> +               .proxy_pd_names = (char*[]){
>>> +                       "lcx",
>>> +                       "lmx",
>>> +                       NULL
>>> +               },
>>> +               .load_state = "slpi",
>>> +               .ssr_name = "dsps",
>>> +               .sysmon_name = "slpi",
>>> +               .ssctl_id = 0x16,
>> Isn't this identical to sm8150_slpi_resource?
>>
>> Konrad
>
> Yes it is. I added a new entry because for SM8150, SM8250, and SM8350
> they are duplicated as well. The SDM845's struct is indentical to
> SM8150/SM8250/SM8350's structs.
Well, you just found a quick improvement to make then! :D

Konrad
>
> Kind regards,
> Dylan Van Assche
>
>>> +};
>>> +
>>>  static const struct adsp_data sm8150_slpi_resource = {
>>>                 .crash_reason_smem = 424,
>>>                 .firmware_name = "slpi.mdt",
>>> @@ -1201,6 +1217,7 @@ static const struct of_device_id
>>> adsp_of_match[] = {
>>>         { .compatible = "qcom,sdm660-adsp-pas", .data =
>>> &adsp_resource_init},
>>>         { .compatible = "qcom,sdm845-adsp-pas", .data =
>>> &sdm845_adsp_resource_init},
>>>         { .compatible = "qcom,sdm845-cdsp-pas", .data =
>>> &sdm845_cdsp_resource_init},
>>> +       { .compatible = "qcom,sdm845-slpi-pas", .data =
>>> &sdm845_slpi_resource},
>>>         { .compatible = "qcom,sdx55-mpss-pas", .data =
>>> &sdx55_mpss_resource},
>>>         { .compatible = "qcom,sm6115-adsp-pas", .data =
>>> &adsp_resource_init},
>>>         { .compatible = "qcom,sm6115-cdsp-pas", .data =
>>> &cdsp_resource_init},
>

2023-03-27 11:49:43

by Dylan Van Assche

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: remoteproc: qcom: adsp: add qcom,sdm845-slpi-pas compatible

Hi Krzysztof,

On Sun, 2023-03-26 at 10:53 +0200, Krzysztof Kozlowski wrote:
> On 25/03/2023 14:21, Dylan Van Assche wrote:
> > SLPI DSP remoteproc on DSP is defined by the 'qcom,sdm845-slpi-pas'
> > compatible in the qcom_q6v5_pas driver. Add this compatible to the
> > devicetree bindings.
> >
> > Signed-off-by: Dylan Van Assche <[email protected]>
> > ---
> >  Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml | 3
> > +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git
> > a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
> > b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
> > index 643ee787a81f..175be01ecd1c 100644
> > --- a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
> > +++ b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
> > @@ -26,6 +26,7 @@ properties:
> >        - qcom,sdm660-adsp-pas
> >        - qcom,sdm845-adsp-pas
> >        - qcom,sdm845-cdsp-pas
> > +      - qcom,sdm845-slpi-pas
> >  
> >    reg:
> >      maxItems: 1
> > @@ -63,6 +64,7 @@ allOf:
> >                - qcom,msm8998-adsp-pas
> >                - qcom,sdm845-adsp-pas
> >                - qcom,sdm845-cdsp-pas
> > +              - qcom,sdm845-slpi-pas
> >      then:
> >        properties:
> >          clocks:
> > @@ -104,6 +106,7 @@ allOf:
>
>
> You miss also if:then: for power-domains.

I am not sure what to put for the power-domains, newer remoteprocs from
SM8150/SM8250/SM8350 etc. are not in this binding either.

Could you elaborate a bit here? Thanks!

Kind regards,
Dylan Van Assche

>
> Best regards,
> Krzysztof
>

2023-03-27 12:26:30

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: remoteproc: qcom: adsp: add qcom,sdm845-slpi-pas compatible

On 27/03/2023 13:39, Dylan Van Assche wrote:
> Hi Krzysztof,
>
> On Sun, 2023-03-26 at 10:53 +0200, Krzysztof Kozlowski wrote:
>> On 25/03/2023 14:21, Dylan Van Assche wrote:
>>> SLPI DSP remoteproc on DSP is defined by the 'qcom,sdm845-slpi-pas'
>>> compatible in the qcom_q6v5_pas driver. Add this compatible to the
>>> devicetree bindings.
>>>
>>> Signed-off-by: Dylan Van Assche <[email protected]>
>>> ---
>>>  Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml | 3
>>> +++
>>>  1 file changed, 3 insertions(+)
>>>
>>> diff --git
>>> a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
>>> b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
>>> index 643ee787a81f..175be01ecd1c 100644
>>> --- a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
>>> +++ b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
>>> @@ -26,6 +26,7 @@ properties:
>>>        - qcom,sdm660-adsp-pas
>>>        - qcom,sdm845-adsp-pas
>>>        - qcom,sdm845-cdsp-pas
>>> +      - qcom,sdm845-slpi-pas
>>>  
>>>    reg:
>>>      maxItems: 1
>>> @@ -63,6 +64,7 @@ allOf:
>>>                - qcom,msm8998-adsp-pas
>>>                - qcom,sdm845-adsp-pas
>>>                - qcom,sdm845-cdsp-pas
>>> +              - qcom,sdm845-slpi-pas
>>>      then:
>>>        properties:
>>>          clocks:
>>> @@ -104,6 +106,7 @@ allOf:
>>
>>
>> You miss also if:then: for power-domains.
>
> I am not sure what to put for the power-domains,

Doesn't your driver patch clearly state it?

> newer remoteprocs from
> SM8150/SM8250/SM8350 etc. are not in this binding either.

They have their own binding, but why is it an argument to add
sdm845-slpi a bit incomplete?

>
> Could you elaborate a bit here? Thanks!

There are already examples of other remoteprocs which do it, so I do not
understand why this one is different. What to elaborate more?

Best regards,
Krzysztof