diff mbox series

[v5,02/13] dt-bindings: remoteproc: qcom: pas: Add QMP property

Message ID 1629342136-3667-3-git-send-email-sibis@codeaurora.org (mailing list archive)
State Superseded
Headers show
Series Use qmp_send to update co-processor load state | expand

Commit Message

Sibi Sankar Aug. 19, 2021, 3:02 a.m. UTC
The load state power-domain, used by the co-processors to notify the
Always on Subsystem (AOSS) that a particular co-processor is up/down,
suffers from the side-effect of changing states during suspend/resume.
However the co-processors enter low-power modes independent to that of
the application processor and their states are expected to remain
unaltered across system suspend/resume cycles. To achieve this behavior
let's drop the load state power-domain and replace them with the qmp
property for all SoCs supporting low power mode signalling.

Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
---

v5:
 * Fixup power-domain count. [Matthias]

 .../devicetree/bindings/remoteproc/qcom,adsp.yaml  | 61 +++++++++++-----------
 1 file changed, 31 insertions(+), 30 deletions(-)

Comments

Stephen Boyd Aug. 19, 2021, 6:55 p.m. UTC | #1
Quoting Sibi Sankar (2021-08-18 20:02:05)
> The load state power-domain, used by the co-processors to notify the
> Always on Subsystem (AOSS) that a particular co-processor is up/down,
> suffers from the side-effect of changing states during suspend/resume.
> However the co-processors enter low-power modes independent to that of
> the application processor and their states are expected to remain
> unaltered across system suspend/resume cycles. To achieve this behavior
> let's drop the load state power-domain and replace them with the qmp
> property for all SoCs supporting low power mode signalling.
>

How do we drop the load state property without breaking existing DTBs?
Maybe we need to leave it there and then somehow make it optional? Or do
we not care about this problem as the driver will start ignoring it?
Sibi Sankar Aug. 20, 2021, 2:24 p.m. UTC | #2
On 2021-08-20 00:25, Stephen Boyd wrote:
> Quoting Sibi Sankar (2021-08-18 20:02:05)
>> The load state power-domain, used by the co-processors to notify the
>> Always on Subsystem (AOSS) that a particular co-processor is up/down,
>> suffers from the side-effect of changing states during suspend/resume.
>> However the co-processors enter low-power modes independent to that of
>> the application processor and their states are expected to remain
>> unaltered across system suspend/resume cycles. To achieve this 
>> behavior
>> let's drop the load state power-domain and replace them with the qmp
>> property for all SoCs supporting low power mode signalling.
>> 
> 
> How do we drop the load state property without breaking existing DTBs?
> Maybe we need to leave it there and then somehow make it optional? Or 
> do
> we not care about this problem as the driver will start ignoring it?

We can afford to break the bindings
because of the following reason:

* Load state in mainline is currently
   broken i.e. it doesn't serve its
   main purpose of signalling AOP of
   the correct state of Q6 during
   system suspend/resume. Thus we
   can maintain current functionality
   even without the load state votes
   i.e. when a new kernel with load
   state removed is used with an older
   dtb the remoteproc functionality
   will remain the same.
Stephen Boyd Aug. 21, 2021, 6:17 p.m. UTC | #3
Quoting Sibi Sankar (2021-08-20 07:24:02)
> On 2021-08-20 00:25, Stephen Boyd wrote:
> > Quoting Sibi Sankar (2021-08-18 20:02:05)
> >> The load state power-domain, used by the co-processors to notify the
> >> Always on Subsystem (AOSS) that a particular co-processor is up/down,
> >> suffers from the side-effect of changing states during suspend/resume.
> >> However the co-processors enter low-power modes independent to that of
> >> the application processor and their states are expected to remain
> >> unaltered across system suspend/resume cycles. To achieve this
> >> behavior
> >> let's drop the load state power-domain and replace them with the qmp
> >> property for all SoCs supporting low power mode signalling.
> >>
> >
> > How do we drop the load state property without breaking existing DTBs?
> > Maybe we need to leave it there and then somehow make it optional? Or
> > do
> > we not care about this problem as the driver will start ignoring it?
>
> We can afford to break the bindings
> because of the following reason:
>
> * Load state in mainline is currently
>    broken i.e. it doesn't serve its
>    main purpose of signalling AOP of
>    the correct state of Q6 during
>    system suspend/resume. Thus we
>    can maintain current functionality
>    even without the load state votes
>    i.e. when a new kernel with load
>    state removed is used with an older
>    dtb the remoteproc functionality
>    will remain the same.
>

Alright. Is that reflected somewhere in the commit text? I must have
missed it. Can you please add it?
Sibi Sankar Aug. 23, 2021, 4:19 p.m. UTC | #4
On 2021-08-21 23:47, Stephen Boyd wrote:
> Quoting Sibi Sankar (2021-08-20 07:24:02)
>> On 2021-08-20 00:25, Stephen Boyd wrote:
>> > Quoting Sibi Sankar (2021-08-18 20:02:05)
>> >> The load state power-domain, used by the co-processors to notify the
>> >> Always on Subsystem (AOSS) that a particular co-processor is up/down,
>> >> suffers from the side-effect of changing states during suspend/resume.
>> >> However the co-processors enter low-power modes independent to that of
>> >> the application processor and their states are expected to remain
>> >> unaltered across system suspend/resume cycles. To achieve this
>> >> behavior
>> >> let's drop the load state power-domain and replace them with the qmp
>> >> property for all SoCs supporting low power mode signalling.
>> >>
>> >
>> > How do we drop the load state property without breaking existing DTBs?
>> > Maybe we need to leave it there and then somehow make it optional? Or
>> > do
>> > we not care about this problem as the driver will start ignoring it?
>> 
>> We can afford to break the bindings
>> because of the following reason:
>> 
>> * Load state in mainline is currently
>>    broken i.e. it doesn't serve its
>>    main purpose of signalling AOP of
>>    the correct state of Q6 during
>>    system suspend/resume. Thus we
>>    can maintain current functionality
>>    even without the load state votes
>>    i.e. when a new kernel with load
>>    state removed is used with an older
>>    dtb the remoteproc functionality
>>    will remain the same.
>> 
> 
> Alright. Is that reflected somewhere in the commit text? I must have
> missed it. Can you please add it?

Commit message throughout the series
mention that the current load state
implementation is broken but it is
never mentioned explicitly that it
is the reason why bindings can be
broken. I'll wait for a couple of
days to see if I get any more
comments and will re-word it in the
next re-spin.
Stephen Boyd Aug. 23, 2021, 8:18 p.m. UTC | #5
Quoting Sibi Sankar (2021-08-23 09:19:08)
> On 2021-08-21 23:47, Stephen Boyd wrote:
> > Quoting Sibi Sankar (2021-08-20 07:24:02)
> >> On 2021-08-20 00:25, Stephen Boyd wrote:
> >> > Quoting Sibi Sankar (2021-08-18 20:02:05)
> >> >> The load state power-domain, used by the co-processors to notify the
> >> >> Always on Subsystem (AOSS) that a particular co-processor is up/down,
> >> >> suffers from the side-effect of changing states during suspend/resume.
> >> >> However the co-processors enter low-power modes independent to that of
> >> >> the application processor and their states are expected to remain
> >> >> unaltered across system suspend/resume cycles. To achieve this
> >> >> behavior
> >> >> let's drop the load state power-domain and replace them with the qmp
> >> >> property for all SoCs supporting low power mode signalling.
> >> >>
> >> >
> >> > How do we drop the load state property without breaking existing DTBs?
> >> > Maybe we need to leave it there and then somehow make it optional? Or
> >> > do
> >> > we not care about this problem as the driver will start ignoring it?
> >>
> >> We can afford to break the bindings
> >> because of the following reason:
> >>
> >> * Load state in mainline is currently
> >>    broken i.e. it doesn't serve its
> >>    main purpose of signalling AOP of
> >>    the correct state of Q6 during
> >>    system suspend/resume. Thus we
> >>    can maintain current functionality
> >>    even without the load state votes
> >>    i.e. when a new kernel with load
> >>    state removed is used with an older
> >>    dtb the remoteproc functionality
> >>    will remain the same.
> >>
> >
> > Alright. Is that reflected somewhere in the commit text? I must have
> > missed it. Can you please add it?
>
> Commit message throughout the series
> mention that the current load state
> implementation is broken but it is
> never mentioned explicitly that it
> is the reason why bindings can be
> broken. I'll wait for a couple of
> days to see if I get any more
> comments and will re-word it in the
> next re-spin.
>

Ok. You can add my Reviewed-by tag with that text updated.
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
index 0c112f3264a9..0d2b5bd4907a 100644
--- a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml
@@ -93,6 +93,10 @@  properties:
     maxItems: 1
     description: Reference to the reserved-memory for the Hexagon core
 
+  qcom,qmp:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: Reference to the AOSS side-channel message RAM.
+
   qcom,smem-states:
     $ref: /schemas/types.yaml#/definitions/phandle-array
     description: States used by the AP to signal the Hexagon core
@@ -369,13 +373,11 @@  allOf:
       properties:
         power-domains:
           items:
-            - description: Load State power domain
             - description: CX power domain
             - description: MX power domain
             - description: MSS power domain
         power-domain-names:
           items:
-            - const: load_state
             - const: cx
             - const: mx
             - const: mss
@@ -391,43 +393,20 @@  allOf:
       properties:
         power-domains:
           items:
-            - description: Load State power domain
             - description: CX power domain
-        power-domain-names:
-          items:
-            - const: load_state
-            - const: cx
 
   - if:
       properties:
         compatible:
           contains:
             enum:
+              - qcom,sdx55-mpss-pas
               - qcom,sm8150-mpss-pas
               - qcom,sm8350-mpss-pas
     then:
       properties:
         power-domains:
           items:
-            - description: Load State power domain
-            - description: CX power domain
-            - description: MSS power domain
-        power-domain-names:
-          items:
-            - const: load_state
-            - const: cx
-            - const: mss
-
-  - if:
-      properties:
-        compatible:
-          contains:
-            enum:
-              - qcom,sdx55-mpss-pas
-    then:
-      properties:
-        power-domains:
-          items:
             - description: CX power domain
             - description: MSS power domain
         power-domain-names:
@@ -451,12 +430,10 @@  allOf:
       properties:
         power-domains:
           items:
-            - description: Load State power domain
             - description: LCX power domain
             - description: LMX power domain
         power-domain-names:
           items:
-            - const: load_state
             - const: lcx
             - const: lmx
 
@@ -470,12 +447,10 @@  allOf:
       properties:
         power-domains:
           items:
-            - description: Load State power domain
             - description: CX power domain
             - description: MXC power domain
         power-domain-names:
           items:
-            - const: load_state
             - const: cx
             - const: mxc
 
@@ -511,6 +486,32 @@  allOf:
             - const: mss_restart
             - const: pdc_reset
 
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - qcom,sc7180-mpss-pas
+              - qcom,sc8180x-adsp-pas
+              - qcom,sc8180x-cdsp-pas
+              - qcom,sc8180x-mpss-pas
+              - qcom,sm8150-adsp-pas
+              - qcom,sm8150-cdsp-pas
+              - qcom,sm8150-mpss-pas
+              - qcom,sm8150-slpi-pas
+              - qcom,sm8250-adsp-pas
+              - qcom,sm8250-cdsp-pas
+              - qcom,sm8250-slpi-pas
+              - qcom,sm8350-adsp-pas
+              - qcom,sm8350-cdsp-pas
+              - qcom,sm8350-mpss-pas
+              - qcom,sm8350-slpi-pas
+    then:
+      properties:
+        qcom,qmp:
+          items:
+            - description: Reference to the AOSS side-channel message RAM.
+
 examples:
   - |
     #include <dt-bindings/clock/qcom,rpmcc.h>