Use qmp_send to update co-processor load state
Subsystems (8)
v3 cover Use qmp_send to update co-processor load state
The power domains exposed by the AOSS QMP driver control the load state resources linked to modem, adsp, cdsp remoteprocs. These are used to notify the Always on Subsystem (AOSS) that a particular co-processor is up/down. AOSS uses this information to wait for the co-processors to suspend before starting its sleep sequence. These co-processors enter low-power modes independent to that of the application processor and the load state resources linked to them are expected to remain unaltered across system suspend/resume cycles. To achieve this behavior let's stop modeling them as power-domains and replace them with generic qmp_send interface instead.
https://lore.kernel.org/lkml/20200913034603.GV3715@yoga/
Previous dicussion on dropping power-domain support from AOSS QMP driver
Depends on:qmp_send: https://patchwork.kernel.org/project/linux-arm-msm/cover/[email protected]/
V3:
* Misc. documentation fixes [patch 2]:
- Reduce power-domain maxItems due to load_state pd removal
- Combine compatibles where possible with the load_state pd removal
- Fixup the qcom,qmp ref to phandle type
V2:
* load_state is currently broken on mainline so be safely dropped without side-effects.
* Rebased on top of qmp_send v3 series.
* Dropped R-b from Stephen and Rob on patch 3 due to the yaml conversion.
* New patch [12] to drop unused aoss-qmp header.
* Commit message update [patch 1] [Rob]
* Reorder the series [Stephen]
Sibi Sankar (13):
dt-bindings: soc: qcom: aoss: Drop power-domain bindings
dt-bindings: remoteproc: qcom: pas: Add QMP bindings
dt-bindings: remoteproc: qcom: Add QMP bindings
remoteproc: qcom: q6v5: Use qmp_send to update co-processor load state
arm64: dts: qcom: sc7180: Use QMP binding to control load state
arm64: dts: qcom: sc7280: Use QMP binding to control load state
arm64: dts: qcom: sdm845: Use QMP binding to control load state
arm64: dts: qcom: sm8150: Use QMP binding to control load state
arm64: dts: qcom: sm8250: Use QMP binding to control load state
arm64: dts: qcom: sm8350: Use QMP binding to control load state
soc: qcom: aoss: Drop power domain support
dt-bindings: msm/dp: Remove aoss-qmp header
dt-bindings: soc: qcom: aoss: Delete unused power-domain definitions
.../bindings/display/msm/dp-controller.yaml | 1 - .../devicetree/bindings/remoteproc/qcom,adsp.yaml | 62 ++++++------ .../devicetree/bindings/remoteproc/qcom,q6v5.txt | 7 +- .../devicetree/bindings/soc/qcom/qcom,aoss-qmp.txt | 16 +-- arch/arm64/boot/dts/qcom/sc7180.dtsi | 9 +- arch/arm64/boot/dts/qcom/sc7280.dtsi | 2 - arch/arm64/boot/dts/qcom/sdm845.dtsi | 8 +- arch/arm64/boot/dts/qcom/sm8150.dtsi | 28 +++--- arch/arm64/boot/dts/qcom/sm8250.dtsi | 22 ++--- arch/arm64/boot/dts/qcom/sm8350.dtsi | 30 +++--- drivers/remoteproc/qcom_q6v5.c | 56 ++++++++++- drivers/remoteproc/qcom_q6v5.h | 7 +- drivers/remoteproc/qcom_q6v5_adsp.c | 7 +- drivers/remoteproc/qcom_q6v5_mss.c | 44 ++------- drivers/remoteproc/qcom_q6v5_pas.c | 80 ++++----------- drivers/remoteproc/qcom_q6v5_wcss.c | 4 +- drivers/soc/qcom/qcom_aoss.c | 109 +-------------------- include/dt-bindings/power/qcom-aoss-qmp.h | 14 --- 18 files changed, 184 insertions(+), 322 deletions(-) delete mode 100644 include/dt-bindings/power/qcom-aoss-qmp.h
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 1/13 dt-bindings: soc: qcom: aoss: Drop power-domain bindings
The power-domains exposed by AOSS QMP node are used to notify the Always on Subsystem (AOSS) that a particular co-processor is up/down. These 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 power-domain bindings and replace them with generic qmp_send interface instead.
--- .../devicetree/bindings/soc/qcom/qcom,aoss-qmp.txt | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-)
Documentation/devicetree/bindings/soc/qcom/qcom,aoss-qmp.txt +2 -14
@@ -9,8 +9,7 @@ Messaging Protocol (QMP) The AOSS side channel exposes control over a set of resources, used to control a set of debug related clocks and to affect the low power state of resources -related to the secondary subsystems. These resources are exposed as a set of -power-domains. +related to the secondary subsystems. - compatible: Usage: required
@@ -46,14 +45,6 @@ power-domains. Definition: must be 0 The single clock represents the QDSS clock. -- #power-domain-cells: - Usage: optional - Value type: <u32> - Definition: must be 1 - The provided power-domains are: - CDSP state (0), LPASS state (1), modem state (2), SLPI - state (3), SPSS state (4) and Venus state (5). - = SUBNODES The AOSS side channel also provides the controls for three cooling devices, these are expressed as subnodes of the QMP node. The name of the node is used
@@ -66,8 +57,7 @@ to identify the resource and must therefor be "cx", "mx" or "ebi". = EXAMPLE -The following example represents the AOSS side-channel message RAM and the -mechanism exposing the power-domains, as found in SDM845. +The following example represents the AOSS side-channel message RAM as found in SDM845. aoss_qmp: qmp@c300000 { compatible = "qcom,sdm845-aoss-qmp";
@@ -75,8 +65,6 @@ mechanism exposing the power-domains, as found in SDM845. interrupts = <GIC_SPI 389 IRQ_TYPE_EDGE_RISING>; mboxes = <&apss_shared 0>; - #power-domain-cells = <1>; - cx_cdev: cx { #cooling-cells = <2>; };
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 01/13] dt-bindings: soc: qcom: aoss: Drop power-domain bindings
Quoted 10 lines · Sibi Sankar
The power-domains exposed by AOSS QMP node are used to notify the Always on Subsystem (AOSS) that a particular co-processor is up/down. These 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 power-domain bindings and replace them with generic
qmp_sendinterface instead.Signed-off-by Sibi Sankar <[email protected]>Reviewed-by Stephen Boyd <[email protected]>Acked-by Rob Herring <[email protected]>
FWIW:
PATCH v3 2/13 dt-bindings: remoteproc: qcom: pas: Add QMP bindings
In reply to Sibi SankarAdd Qualcomm Mailbox Protocol (QMP) binding to replace the power domains exposed by the AOSS QMP node.
---
v3:
* Misc. documentation fixes:
- Reduce power-domain maxItems due to load_state pd removal
- Combine compatibles where possible with the load_state pd removal
- Fixup the qcom,qmp ref to phandle type
.../devicetree/bindings/remoteproc/qcom,adsp.yaml | 62 +++++++++++----------- 1 file changed, 30 insertions(+), 32 deletions(-)
Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml +30 -32
@@ -75,11 +75,11 @@ properties: power-domains: minItems: 1 - maxItems: 3 + maxItems: 2 power-domain-names: minItems: 1 - maxItems: 3 + maxItems: 2 firmware-name: $ref: /schemas/types.yaml#/definitions/string
@@ -89,6 +89,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
@@ -359,13 +363,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
@@ -381,43 +383,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:
@@ -439,12 +418,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
@@ -458,12 +435,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
@@ -499,6 +474,29 @@ allOf: - const: mss_restart - const: pdc_reset + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7180-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>
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 02/13] dt-bindings: remoteproc: qcom: pas: Add QMP bindings
Quoted 1 line · Sibi Sankar
Subject: dt-bindings: remoteproc: qcom: pas: Add QMP bindings
nit: does this really add a QMP binding (as in Documentation/devicetree/bindings/soc/qcom/qcom,aoss-qmp.txt) or rather a QMP property/phandle to the ADSP binding?
Quoted 1 line
Add Qualcomm Mailbox Protocol (QMP) binding to replace the power domains
same nit
Quoted 3 lines
exposed by the AOSS QMP node.
Signed-off-by Sibi Sankar <[email protected]>
Re: [PATCH v3 02/13] dt-bindings: remoteproc: qcom: pas: Add QMP bindings
Quoted 4 lines · Matthias Kaehlcke
Quoted 1 line · Sibi Sankar
Subject: dt-bindings: remoteproc: qcom: pas: Add QMP bindings
Quoted 8 lines
nit: does this really add a QMP binding (as in
Documentation/devicetree/bindings/soc/qcom/qcom,aoss-qmp.txt) or rather a QMP property/phandle to the ADSP binding?Quoted 1 line
Add Qualcomm Mailbox Protocol (QMP) binding to replace the power domains
same nit
Will need to re-spin this anyway since Bjorn
aoss-qmp to yaml, will fixup the commit message.
Quoted 3 lines
Quoted 3 lines
exposed by the AOSS QMP node.
Signed-off-by Sibi Sankar <[email protected]>
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Rob Herring
maintainerRe: [PATCH v3 02/13] dt-bindings: remoteproc: qcom: pas: Add QMP bindings
In reply to Sibi SankarQuoted 2 lines · Sibi Sankar
Add Qualcomm Mailbox Protocol (QMP) binding to replace the power domains exposed by the AOSS QMP node.
Not a compatible change. Explain why that's okay for all platforms/users.
Quoted 162 lines
Signed-off-by Sibi Sankar <[email protected]>---
v3:
* Misc. documentation fixes:
- Reduce power-domain maxItems due toload_statepd removal
- Combine compatibles where possible with theload_statepd removal
- Fixup the qcom,qmp ref to phandle type.../devicetree/bindings/remoteproc/qcom,adsp.yaml | 62 +++++++++++----------- 1 file changed, 30 insertions(+), 32 deletions(-)Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml +30
-32@@ -75,11 +75,11 @@ properties: power-domains: minItems: 1 - maxItems: 3 + maxItems: 2 power-domain-names: minItems: 1 - maxItems: 3 + maxItems: 2 firmware-name: $ref: /schemas/types.yaml#/definitions/string@@ -89,6 +89,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@@ -359,13 +363,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@@ -381,43 +383,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:@@ -439,12 +418,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@@ -458,12 +435,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@@ -499,6 +474,29 @@ allOf: - const: mss_restart - const: pdc_reset + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7180-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>Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 02/13] dt-bindings: remoteproc: qcom: pas: Add QMP bindings
Quoted 6 lines · Rob Herring
Quoted 2 lines · Sibi Sankar
Add Qualcomm Mailbox Protocol (QMP) binding to replace the power domains exposed by the AOSS QMP node.
Not a compatible change. Explain why that's okay for all platforms/users.
It's not meant for all platforms.
Rather we just replace the load-state
power-domain with the new qmp
property and it only affects the
compatibles covered below.
Quoted 166 lines
Quoted 166 lines
Signed-off-by Sibi Sankar <[email protected]>---
v3:
* Misc. documentation fixes:
- Reduce power-domain maxItems due toload_statepd removal
- Combine compatibles where possible with theload_statepd removal
- Fixup the qcom,qmp ref to phandle type.../devicetree/bindings/remoteproc/qcom,adsp.yaml | 62 +++++++++++----------- 1 file changed, 30 insertions(+), 32 deletions(-)Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml +2
-2@@ -75,11 +75,11 @@ properties: power-domains: minItems: 1 - maxItems: 3 + maxItems: 2 power-domain-names: minItems: 1 - maxItems: 3 + maxItems: 2 firmware-name: $ref: /schemas/types.yaml#/definitions/string@@ -89,6 +89,10 @@ properties: maxItems: 1 description: Reference to the reserved-memory for the Hexagoncore
Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml +27
-30+ 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@@ -359,13 +363,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@@ -381,43 +383,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:@@ -439,12 +418,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@@ -458,12 +435,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@@ -499,6 +474,29 @@ allOf: - const: mss_restart - const: pdc_reset + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7180-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 messageRAM.
+
examples:
- |#include <dt-bindings/clock/qcom,rpmcc.h>--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Re: [PATCH v3 02/13] dt-bindings: remoteproc: qcom: pas: Add QMP bindings
In reply to Sibi SankarQuoted 3 lines · Sibi Sankar
Add Qualcomm Mailbox Protocol (QMP) binding to replace the power domains exposed by the AOSS QMP node.
I think this would be a good opportunity to describe why you need to make this change to the binding.
Regards,
Bjorn
Quoted 160 lines
Signed-off-by Sibi Sankar <[email protected]>---
v3:
* Misc. documentation fixes:
- Reduce power-domain maxItems due toload_statepd removal
- Combine compatibles where possible with theload_statepd removal
- Fixup the qcom,qmp ref to phandle type.../devicetree/bindings/remoteproc/qcom,adsp.yaml | 62 +++++++++++----------- 1 file changed, 30 insertions(+), 32 deletions(-)Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml +30
-32@@ -75,11 +75,11 @@ properties: power-domains: minItems: 1 - maxItems: 3 + maxItems: 2 power-domain-names: minItems: 1 - maxItems: 3 + maxItems: 2 firmware-name: $ref: /schemas/types.yaml#/definitions/string@@ -89,6 +89,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@@ -359,13 +363,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@@ -381,43 +383,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:@@ -439,12 +418,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@@ -458,12 +435,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@@ -499,6 +474,29 @@ allOf: - const: mss_restart - const: pdc_reset + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7180-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>Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 3/13 dt-bindings: remoteproc: qcom: Add QMP bindings
In reply to Sibi SankarAdd Qualcomm Mailbox Protocol (QMP) binding to replace the power domains exposed by the AOSS QMP node.
--- Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt +6 -1
@@ -174,7 +174,12 @@ For the compatible string below the following supplies are required: must be "cx", "mx" qcom,sc7180-mss-pil: qcom,sdm845-mss-pil: - must be "cx", "mx", "mss", "load_state" + must be "cx", "mx", "mss" + +- qcom,qmp: + Usage: optional + Value type: <phandle> + Definition: reference to the AOSS side-channel message RAM. - qcom,smem-states: Usage: required
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 4/13 remoteproc: qcom: q6v5: Use qmp_send to update co-processor load state
In reply to Sibi SankarThe power domains exposed by the AOSS QMP driver control the load state resources linked to modem, adsp, cdsp remoteprocs. These are used to notify the Always on Subsystem (AOSS) that a particular co-processor is up/down. AOSS uses this information to wait for the co-processors to suspend before starting its sleep sequence.
These co-processors enter low-power modes independent to that of the application processor and the load state resources linked to them are expected to remain unaltered across system suspend/resume cycles. To achieve this behavior lets stop using the power-domains exposed by the AOSS QMP node and replace them with generic qmp_send interface instead.
--- drivers/remoteproc/qcom_q6v5.c | 56 +++++++++++++++++++++++++- drivers/remoteproc/qcom_q6v5.h | 7 +++- drivers/remoteproc/qcom_q6v5_adsp.c | 7 +++- drivers/remoteproc/qcom_q6v5_mss.c | 44 ++++---------------- drivers/remoteproc/qcom_q6v5_pas.c | 80 +++++++++---------------------------- drivers/remoteproc/qcom_q6v5_wcss.c | 4 +- 6 files changed, 94 insertions(+), 104 deletions(-)
drivers/remoteproc/qcom_q6v5.c +55 -1
@@ -16,8 +16,28 @@#include "qcom_common.h" #include "qcom_q6v5.h" +#define Q6V5_LOAD_STATE_MSG_LEN 64#define Q6V5_PANIC_DELAY_MS 200 +static int q6v5_load_state_toggle (struct qcom_q6v5 *q6v5,bool enable) +{ +char buf[Q6V5_LOAD_STATE_MSG_LEN ] = {}; +int ret; + +if (IS_ERR (q6v5->qmp)) +return 0 ; + +snprintf (buf,sizeof (buf), +"{class: image, res: load_state, name: %s, val: %s}" , + q6v5->load_state, enable ?"on" :"off" ); + + ret =qmp_send (q6v5->qmp, buf,sizeof (buf)); +if (ret) +dev_err (q6v5->dev,"failed to toggle load state\n" ); + +return ret; +} +/** * qcom_q6v5_prepare() - reinitialize the qcom_q6v5 context before start * @q6v5: reference to qcom_q6v5 context to be reinitialized
@@ -26,6 +46,12 @@*/ int qcom_q6v5_prepare (struct qcom_q6v5 *q6v5) { +int ret; + + ret =q6v5_load_state_toggle (q6v5, true); +if (ret) +return ret; +reinit_completion (&q6v5->start_done);reinit_completion (&q6v5->stop_done);
@@ -47,6 +73,7 @@ EXPORT_SYMBOL_GPL(qcom_q6v5_prepare);int qcom_q6v5_unprepare (struct qcom_q6v5 *q6v5) {disable_irq (q6v5->handover_irq); +q6v5_load_state_toggle (q6v5, false);return !q6v5->handover_issued; }
@@ -196,12 +223,13 @@ EXPORT_SYMBOL_GPL(qcom_q6v5_panic);* @pdev: platform_device reference for acquiring resources * @rproc: associated remoteproc instance * @crash_reason: SMEM id for crash reason string, or 0 if none +* @load_state: load state resource string * @handover: function to be called when proxy resources should be released * * Return: 0 on success, negative errno on failure */ int qcom_q6v5_init (struct qcom_q6v5 *q6v5,struct platform_device *pdev, -struct rproc *rproc,int crash_reason, +struct rproc *rproc,int crash_reason,const char *load_state,void (*handover)(struct qcom_q6v5 *q6v5)) {int ret;
@@ -210,6 +238,7 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, q6v5->dev = &pdev->dev; q6v5->crash_reason = crash_reason; q6v5->handover = handover; + q6v5->load_state =kstrdup_const (load_state,GFP_KERNEL );init_completion (&q6v5->start_done);init_completion (&q6v5->stop_done);
@@ -286,9 +315,34 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,return PTR_ERR (q6v5->state); } + q6v5->qmp =qmp_get (&pdev->dev); +if (IS_ERR (q6v5->qmp)) { +if (PTR_ERR (q6v5->qmp) != -ENODEV ) { +if (PTR_ERR (q6v5->qmp) != -EPROBE_DEFER ) +dev_err (&pdev->dev,"failed to acquire load state\n" ); +return PTR_ERR (q6v5->qmp); + } + }else { +if (!q6v5->load_state) { +dev_err (&pdev->dev,"load state resource string empty\n" ); +return -EINVAL ; + } + } +return 0 ; }EXPORT_SYMBOL_GPL (qcom_q6v5_init); +/** +* qcom_q6v5_deinit() - deinitialize the q6v5 common struct +* @q6v5: reference to qcom_q6v5 context to be deinitialized +* @pdev: platform_device reference for acquiring resources +*/ +void qcom_q6v5_deinit (struct qcom_q6v5 *q6v5,struct platform_device *pdev) +{ +qmp_put (q6v5->qmp); +} +EXPORT_SYMBOL_GPL (qcom_q6v5_deinit); +MODULE_LICENSE ("GPL v2" );MODULE_DESCRIPTION ("Qualcomm Peripheral Image Loader for Q6V5" );
drivers/remoteproc/qcom_q6v5.h +6 -1
@@ -5,6 +5,7 @@#include <linux/kernel.h> #include <linux/completion.h> +#include <linux/soc/qcom/qcom_aoss.h> struct rproc ;struct qcom_smem_state ;
@@ -15,6 +16,8 @@ struct qcom_q6v5 {struct rproc *rproc;struct qcom_smem_state *state; +struct qmp *qmp; +unsigned stop_bit;int wdog_irq;
@@ -32,12 +35,14 @@ struct qcom_q6v5 {bool running; +const char *load_state;void (*handover)(struct qcom_q6v5 *q6v5); };int qcom_q6v5_init (struct qcom_q6v5 *q6v5,struct platform_device *pdev, -struct rproc *rproc,int crash_reason, +struct rproc *rproc,int crash_reason,const char *load_state,void (*handover)(struct qcom_q6v5 *q6v5)); +void qcom_q6v5_deinit (struct qcom_q6v5 *q6v5,struct platform_device *pdev);int qcom_q6v5_prepare (struct qcom_q6v5 *q6v5);int qcom_q6v5_unprepare (struct qcom_q6v5 *q6v5);
drivers/remoteproc/qcom_q6v5_adsp.c +5 -2
@@ -185,7 +185,9 @@ static int adsp_start(struct rproc *rproc)int ret;unsigned int val; -qcom_q6v5_prepare (&adsp->q6v5); + ret =qcom_q6v5_prepare (&adsp->q6v5); +if (ret) +return ret; ret =clk_prepare_enable (adsp->xo);if (ret)
@@ -465,7 +467,7 @@ static int adsp_probe(struct platform_device *pdev)if (ret) goto disable_pm; - ret =qcom_q6v5_init (&adsp->q6v5, pdev, rproc, desc->crash_reason_smem, + ret =qcom_q6v5_init (&adsp->q6v5, pdev, rproc, desc->crash_reason_smem,NULL , qcom_adsp_pil_handover);if (ret) goto disable_pm;
@@ -500,6 +502,7 @@ static int adsp_remove(struct platform_device *pdev)rproc_del (adsp->rproc); +qcom_q6v5_deinit (&adsp->q6v5, pdev);qcom_remove_glink_subdev (adsp->rproc, &adsp->glink_subdev);qcom_remove_sysmon_subdev (adsp->sysmon);qcom_remove_ssr_subdev (adsp->rproc, &adsp->ssr_subdev);
drivers/remoteproc/qcom_q6v5_mss.c +8 -36
134 lines not on this page · raw message
drivers/remoteproc/qcom_q6v5_pas.c +18 -62
247 lines not on this page · raw message
drivers/remoteproc/qcom_q6v5_wcss.c +2 -2
@@ -1044,8 +1044,7 @@ static int q6v5_wcss_probe(struct platform_device *pdev)if (ret) goto free_rproc; - ret =qcom_q6v5_init (&wcss->q6v5, pdev, rproc, desc->crash_reason_smem, -NULL ); + ret =qcom_q6v5_init (&wcss->q6v5, pdev, rproc, desc->crash_reason_smem,NULL ,NULL );if (ret) goto free_rproc;
@@ -1075,6 +1074,7 @@ static int q6v5_wcss_remove(struct platform_device *pdev) {struct rproc *rproc =platform_get_drvdata (pdev); +qcom_q6v5_deinit (&qproc->q6v5, pdev);rproc_del (rproc);rproc_free (rproc);
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 04/13] remoteproc: qcom: q6v5: Use qmp_send to update co-processor load state
Quoted 118 lines · Sibi Sankar
The power domains exposed by the AOSS QMP driver control the load state resources linked to modem, adsp, cdsp remoteprocs. These are used to notify the Always on Subsystem (AOSS) that a particular co-processor is up/down. AOSS uses this information to wait for the co-processors to suspend before starting its sleep sequence.
These co-processors enter low-power modes independent to that of the application processor and the load state resources linked to them are expected to remain unaltered across system suspend/resume cycles. To achieve this behavior lets stop using the power-domains exposed by the AOSS QMP node and replace them with generic
qmp_sendinterface instead.Signed-off-by Sibi Sankar <[email protected]>--- drivers/remoteproc/qcom_q6v5.c | 56 +++++++++++++++++++++++++- drivers/remoteproc/qcom_q6v5.h | 7 +++- drivers/remoteproc/qcom_q6v5_adsp.c | 7 +++- drivers/remoteproc/qcom_q6v5_mss.c | 44 ++++---------------- drivers/remoteproc/qcom_q6v5_pas.c | 80 +++++++++---------------------------- drivers/remoteproc/qcom_q6v5_wcss.c | 4 +- 6 files changed, 94 insertions(+), 104 deletions(-)drivers/remoteproc/qcom_q6v5.c +44
-1@@ -16,8 +16,28 @@#include "qcom_common.h" #include "qcom_q6v5.h" +#define Q6V5_LOAD_STATE_MSG_LEN 64#define Q6V5_PANIC_DELAY_MS 200 +static int q6v5_load_state_toggle (struct qcom_q6v5 *q6v5,bool enable) +{ +char buf[Q6V5_LOAD_STATE_MSG_LEN ] = {}; +int ret; + +if (IS_ERR (q6v5->qmp)) +return 0 ; + +snprintf (buf,sizeof (buf), +"{class: image, res: load_state, name: %s, val: %s}" , + q6v5->load_state, enable ?"on" :"off" ); + + ret =qmp_send (q6v5->qmp, buf,sizeof (buf)); +if (ret) +dev_err (q6v5->dev,"failed to toggle load state\n" ); + +return ret; +} +/** * qcom_q6v5_prepare() - reinitialize the qcom_q6v5 context before start * @q6v5: reference to qcom_q6v5 context to be reinitialized @@ -26,6 +46,12 @@*/ int qcom_q6v5_prepare (struct qcom_q6v5 *q6v5) { +int ret; + + ret =q6v5_load_state_toggle (q6v5, true); +if (ret) +return ret; +reinit_completion (&q6v5->start_done);reinit_completion (&q6v5->stop_done);@@ -47,6 +73,7 @@ EXPORT_SYMBOL_GPL(qcom_q6v5_prepare);int qcom_q6v5_unprepare (struct qcom_q6v5 *q6v5) {disable_irq (q6v5->handover_irq); +q6v5_load_state_toggle (q6v5, false);return !q6v5->handover_issued; }@@ -196,12 +223,13 @@ EXPORT_SYMBOL_GPL(qcom_q6v5_panic);* @pdev: platform_device reference for acquiring resources * @rproc: associated remoteproc instance * @crash_reason: SMEM id for crash reason string, or 0 if none +* @load_state: load state resource string * @handover: function to be called when proxy resources should be released * * Return: 0 on success, negative errno on failure */ int qcom_q6v5_init (struct qcom_q6v5 *q6v5,struct platform_device *pdev, -struct rproc *rproc,int crash_reason, +struct rproc *rproc,int crash_reason,const char *load_state,void (*handover)(struct qcom_q6v5 *q6v5)) {int ret;@@ -210,6 +238,7 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, q6v5->dev = &pdev->dev; q6v5->crash_reason = crash_reason; q6v5->handover = handover; + q6v5->load_state =kstrdup_const (load_state,GFP_KERNEL );init_completion (&q6v5->start_done);init_completion (&q6v5->stop_done);@@ -286,9 +315,34 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,return PTR_ERR (q6v5->state); } + q6v5->qmp =qmp_get (&pdev->dev); +if (IS_ERR (q6v5->qmp)) { +if (PTR_ERR (q6v5->qmp) != -ENODEV ) { +if (PTR_ERR (q6v5->qmp) != -EPROBE_DEFER ) +dev_err (&pdev->dev,"failed to acquire load state\n" ); +return PTR_ERR (q6v5->qmp); + } + }else { +if (!q6v5->load_state) { +dev_err (&pdev->dev,"load state resource string empty\n" ); +return -EINVAL ; + } + } +return 0 ;
drivers/remoteproc/qcom_q6v5.c int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, · line 342
Quoted 10 lines
drivers/remoteproc/qcom_q6v5.c +7
-0}EXPORT_SYMBOL_GPL (qcom_q6v5_init); +/** +* qcom_q6v5_deinit() - deinitialize the q6v5 common struct +* @q6v5: reference to qcom_q6v5 context to be deinitialized +* @pdev: platform_device reference for acquiring resources +*/ +void qcom_q6v5_deinit (struct qcom_q6v5 *q6v5,struct platform_device *pdev) +{
pdev isn't used, remove it?
kfree_const(q6v5->load_state);
Quoted 59 lines
drivers/remoteproc/qcom_q6v5.c +4
-0+qmp_put (q6v5->qmp); +} +EXPORT_SYMBOL_GPL (qcom_q6v5_deinit); +MODULE_LICENSE ("GPL v2" );MODULE_DESCRIPTION ("Qualcomm Peripheral Image Loader for Q6V5" );drivers/remoteproc/qcom_q6v5.h +6
-1@@ -5,6 +5,7 @@#include <linux/kernel.h> #include <linux/completion.h> +#include <linux/soc/qcom/qcom_aoss.h> struct rproc ;struct qcom_smem_state ;@@ -15,6 +16,8 @@ struct qcom_q6v5 {struct rproc *rproc;struct qcom_smem_state *state; +struct qmp *qmp; +unsigned stop_bit;int wdog_irq;@@ -32,12 +35,14 @@ struct qcom_q6v5 {bool running; +const char *load_state;void (*handover)(struct qcom_q6v5 *q6v5); };int qcom_q6v5_init (struct qcom_q6v5 *q6v5,struct platform_device *pdev, -struct rproc *rproc,int crash_reason, +struct rproc *rproc,int crash_reason,const char *load_state,void (*handover)(struct qcom_q6v5 *q6v5)); +void qcom_q6v5_deinit (struct qcom_q6v5 *q6v5,struct platform_device *pdev);int qcom_q6v5_prepare (struct qcom_q6v5 *q6v5);int qcom_q6v5_unprepare (struct qcom_q6v5 *q6v5);drivers/remoteproc/qcom_q6v5_adsp.c +3
-1@@ -185,7 +185,9 @@ static int adsp_start(struct rproc *rproc)int ret;unsigned int val; -qcom_q6v5_prepare (&adsp->q6v5); + ret =qcom_q6v5_prepare (&adsp->q6v5); +if (ret) +return ret; ret =clk_prepare_enable (adsp->xo);if (ret)
drivers/remoteproc/qcom_q6v5_adsp.c static int adsp_probe(struct platform_device *pdev) · line 471
Quoted 6 lines
drivers/remoteproc/qcom_q6v5_adsp.c +1
-1@@ -465,7 +467,7 @@ static int adsp_probe(struct platform_device *pdev)if (ret) goto disable_pm; - ret =qcom_q6v5_init (&adsp->q6v5, pdev, rproc, desc->crash_reason_smem, + ret =qcom_q6v5_init (&adsp->q6v5, pdev, rproc, desc->crash_reason_smem,NULL , qcom_adsp_pil_handover);
Doesn't passing a load_state of NULL cause qcom_q6v5_init() to fail with -EINVAL?
drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_wcss_probe(struct platform_device *pdev) · line 1047
Quoted 9 lines
drivers/remoteproc/qcom_q6v5_wcss.c +1
-2@@ -1044,8 +1044,7 @@ static int q6v5_wcss_probe(struct platform_device *pdev)if (ret) goto free_rproc; - ret =qcom_q6v5_init (&wcss->q6v5, pdev, rproc, desc->crash_reason_smem, -NULL ); + ret =qcom_q6v5_init (&wcss->q6v5, pdev, rproc, desc->crash_reason_smem,NULL ,NULL );
Same as for adsp_probe(), doesn't a load_state of NULL cause _init() to fail?
Re: [PATCH v3 04/13] remoteproc: qcom: q6v5: Use qmp_send to update co-processor load state
Hey Matthias,
Thanks for taking time to review the series.
Quoted 129 lines · Matthias Kaehlcke
Quoted 128 lines · Sibi Sankar
The power domains exposed by the AOSS QMP driver control the load state resources linked to modem, adsp, cdsp remoteprocs. These are used to notify the Always on Subsystem (AOSS) that a particular co-processor is up/down. AOSS uses this information to wait for the co-processors to suspend before starting its sleep sequence.
These co-processors enter low-power modes independent to that of the application processor and the load state resources linked to them are expected to remain unaltered across system suspend/resume cycles. To achieve this behavior lets stop using the power-domains exposed by the AOSS QMP node and replace them with generic
qmp_sendinterface instead.Signed-off-by Sibi Sankar <[email protected]>--- drivers/remoteproc/qcom_q6v5.c | 56 +++++++++++++++++++++++++- drivers/remoteproc/qcom_q6v5.h | 7 +++- drivers/remoteproc/qcom_q6v5_adsp.c | 7 +++- drivers/remoteproc/qcom_q6v5_mss.c | 44 ++++---------------- drivers/remoteproc/qcom_q6v5_pas.c | 80 +++++++++---------------------------- drivers/remoteproc/qcom_q6v5_wcss.c | 4 +- 6 files changed, 94 insertions(+), 104 deletions(-)drivers/remoteproc/qcom_q6v5.c +20
-0@@ -16,8 +16,28 @@#include "qcom_common.h" #include "qcom_q6v5.h" +#define Q6V5_LOAD_STATE_MSG_LEN 64#define Q6V5_PANIC_DELAY_MS 200 +static int q6v5_load_state_toggle (struct qcom_q6v5 *q6v5,bool enable) +{ +char buf[Q6V5_LOAD_STATE_MSG_LEN ] = {}; +int ret; + +if (IS_ERR (q6v5->qmp)) +return 0 ; + +snprintf (buf,sizeof (buf), +"{class: image, res: load_state, name: %s, val: %s}" , + q6v5->load_state, enable ?"on" :"off" ); + + ret =qmp_send (q6v5->qmp, buf,sizeof (buf)); +if (ret) +dev_err (q6v5->dev,"failed to toggle load state\n" ); + +return ret; +} +/** * qcom_q6v5_prepare() - reinitialize the qcom_q6v5 context before start
* @q6v5: reference toqcom_q6v5context to be reinitializeddrivers/remoteproc/qcom_q6v5.c +8
-0@@ -26,6 +46,12 @@*/ int qcom_q6v5_prepare (struct qcom_q6v5 *q6v5) { +int ret; + + ret =q6v5_load_state_toggle (q6v5, true); +if (ret) +return ret; +reinit_completion (&q6v5->start_done);reinit_completion (&q6v5->stop_done);@@ -47,6 +73,7 @@ EXPORT_SYMBOL_GPL(qcom_q6v5_prepare);int qcom_q6v5_unprepare (struct qcom_q6v5 *q6v5) {disable_irq (q6v5->handover_irq); +q6v5_load_state_toggle (q6v5, false);return !q6v5->handover_issued; }@@ -196,12 +223,13 @@ EXPORT_SYMBOL_GPL(qcom_q6v5_panic);* @pdev: platform_device reference for acquiring resources * @rproc: associated remoteproc instance * @crash_reason: SMEM id for crash reason string, or 0 if none +* @load_state: load state resource string * @handover: function to be called when proxy resources should be released
*
* Return: 0 on success, negative errno on failure
*/
int qcom_q6v5_init(structqcom_q6v5*q6v5, structplatform_device
*pdev,drivers/remoteproc/qcom_q6v5.c +2
-1- struct rproc *rproc, int crash_reason, + struct rproc *rproc, int crash_reason, const char *load_state, void (*handover)(struct qcom_q6v5 *q6v5)) { int ret;@@ -210,6 +238,7 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, q6v5->dev = &pdev->dev; q6v5->crash_reason = crash_reason; q6v5->handover = handover; + q6v5->load_state =kstrdup_const (load_state,GFP_KERNEL );init_completion (&q6v5->start_done);drivers/remoteproc/qcom_q6v5.c +14
-0init_completion (&q6v5->stop_done);@@ -286,9 +315,34 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, structplatform_device *pdev, return PTR_ERR(q6v5->state); } + q6v5->qmp =qmp_get (&pdev->dev); +if (IS_ERR (q6v5->qmp)) { +if (PTR_ERR (q6v5->qmp) != -ENODEV ) { +if (PTR_ERR (q6v5->qmp) != -EPROBE_DEFER ) +dev_err (&pdev->dev,"failed to acquire load state\n" ); +return PTR_ERR (q6v5->qmp); + } + }else { +if (!q6v5->load_state) { +dev_err (&pdev->dev,"load state resource string empty\n" ); +return -EINVAL ; + } + } +return 0 ; }EXPORT_SYMBOL_GPL (qcom_q6v5_init);
Quoted 10 lines
drivers/remoteproc/qcom_q6v5.c int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, · line 342
Quoted 8 lines
drivers/remoteproc/qcom_q6v5.c +7
-0+/** +* qcom_q6v5_deinit() - deinitialize the q6v5 common struct +* @q6v5: reference to qcom_q6v5 context to be deinitialized +* @pdev: platform_device reference for acquiring resources +*/ +void qcom_q6v5_deinit (struct qcom_q6v5 *q6v5,struct platform_device *pdev) +{pdev isn't used, remove it?
thanks for catching this. It was an
artefact of the recent qmp api changes.
Quoted 68 lines
kfree_const(q6v5->load_state);Quoted 65 lines
drivers/remoteproc/qcom_q6v5.c +4
-0+qmp_put (q6v5->qmp); +} +EXPORT_SYMBOL_GPL (qcom_q6v5_deinit); +
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("Qualcomm Peripheral Image Loader for Q6V5");drivers/remoteproc/qcom_q6v5.h +6
-1@@ -5,6 +5,7 @@#include <linux/kernel.h> #include <linux/completion.h> +#include <linux/soc/qcom/qcom_aoss.h> struct rproc ;struct qcom_smem_state ;@@ -15,6 +16,8 @@ struct qcom_q6v5 {struct rproc *rproc;struct qcom_smem_state *state; +struct qmp *qmp; +unsigned stop_bit;int wdog_irq;@@ -32,12 +35,14 @@ struct qcom_q6v5 {bool running; +const char *load_state;void (*handover)(struct qcom_q6v5 *q6v5); };int qcom_q6v5_init (struct qcom_q6v5 *q6v5,struct platform_device *pdev, -struct rproc *rproc,int crash_reason, +struct rproc *rproc,int crash_reason,const char *load_state,void (*handover)(struct qcom_q6v5 *q6v5)); +void qcom_q6v5_deinit (struct qcom_q6v5 *q6v5,struct platform_device *pdev);int
qcom_q6v5_prepare(struct qcom_q6v5 *q6v5);
intqcom_q6v5_unprepare(struct qcom_q6v5 *q6v5);drivers/remoteproc/qcom_q6v5_adsp.c +3
-1@@ -185,7 +185,9 @@ static int adsp_start(struct rproc *rproc)int ret;unsigned int val; -qcom_q6v5_prepare (&adsp->q6v5); + ret =qcom_q6v5_prepare (&adsp->q6v5); +if (ret) +return ret; ret =clk_prepare_enable (adsp->xo);if (ret)@@ -465,7 +467,7 @@ static int adsp_probe(struct platform_device *pdev)if (ret) goto disable_pm;
Quoted 8 lines
Quoted 5 lines
drivers/remoteproc/qcom_q6v5_adsp.c +1
-1- ret = qcom_q6v5_init(&adsp->q6v5, pdev, rproc, desc->crash_reason_smem, + ret = qcom_q6v5_init(&adsp->q6v5, pdev, rproc, desc->crash_reason_smem, NULL,
qcom_adsp_pil_handover);Doesn't passing a
load_stateof NULL causeqcom_q6v5_init()to fail with-EINVAL?
qmp_get is expected to error out with-ENODEV since we don't mention a qmp
node in dt. When a client needs to use
qmp in the future we would replace NULL
with the proper load_state string value.
Quoted 8 lines
Quoted 8 lines
drivers/remoteproc/qcom_q6v5_wcss.c +0
-0@@ -1044,8 +1044,7 @@ static int q6v5_wcss_probe(struct platform_device *pdev)if (ret) goto free_rproc;
Quoted 7 lines
drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_wcss_probe(struct · line 1050
Quoted 5 lines
drivers/remoteproc/qcom_q6v5_wcss.c +1
-2- ret =qcom_q6v5_init (&wcss->q6v5, pdev, rproc, desc->crash_reason_smem, -NULL ); + ret =qcom_q6v5_init (&wcss->q6v5, pdev, rproc, desc->crash_reason_smem,NULL ,NULL );Same as for
adsp_probe(), doesn't aload_stateof NULL cause_init()to fail?
it won't for the same reason explained
above.
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v3 5/13 arm64: dts: qcom: sc7180: Use QMP binding to control load state
In reply to Sibi SankarUse the Qualcomm Mailbox Protocol (QMP) binding to control the load state resources on SC7180 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
--- arch/arm64/boot/dts/qcom/sc7180.dtsi | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
arch/arm64/boot/dts/qcom/sc7180.dtsi +4 -5
@@ -15,7 +15,6 @@ #include <dt-bindings/interconnect/qcom,sc7180.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/phy/phy-qcom-qusb2.h> -#include <dt-bindings/power/qcom-aoss-qmp.h> #include <dt-bindings/power/qcom-rpmpd.h> #include <dt-bindings/reset/qcom,sdm845-aoss.h> #include <dt-bindings/reset/qcom,sdm845-pdc.h>
@@ -1893,14 +1892,15 @@ clock-names = "iface", "bus", "nav", "snoc_axi", "mnoc_axi", "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_MODEM>, - <&rpmhpd SC7180_CX>, + power-domains = <&rpmhpd SC7180_CX>, <&rpmhpd SC7180_MX>, <&rpmhpd SC7180_MSS>; - power-domain-names = "load_state", "cx", "mx", "mss"; + power-domain-names = "cx", "mx", "mss"; memory-region = <&mpss_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&modem_smp2p_out 0>; qcom,smem-state-names = "stop";
@@ -3116,7 +3116,6 @@ mboxes = <&apss_shared 0>; #clock-cells = <0>; - #power-domain-cells = <1>; }; spmi_bus: spmi@c440000 {
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 05/13] arm64: dts: qcom: sc7180: Use QMP binding to control load state
Quoted 1 line · Sibi Sankar
Subject: arm64: dts: qcom: sc7180: Use QMP binding to control load state
nit: s/binding //
Quoted 1 line
Use the Qualcomm Mailbox Protocol (QMP) binding to control the load
ditto
same for other DT patches if you re-spin
Quoted 5 lines
state resources on SC7180 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
Signed-off-by Sibi Sankar <[email protected]>Reviewed-by Stephen Boyd <[email protected]>
Re: [PATCH v3 05/13] arm64: dts: qcom: sc7180: Use QMP binding to control load state
Quoted 10 lines · Matthias Kaehlcke
Quoted 1 line · Sibi Sankar
Subject: arm64: dts: qcom: sc7180: Use QMP binding to control load state
nit: s/binding //
Quoted 1 line
Use the Qualcomm Mailbox Protocol (QMP) binding to control the load
ditto
same for other DT patches if you re-spin
sure, I fix this up in the re-spin
that I base on top of Bjorn's aoss-qmp
yaml conversion series.
Quoted 8 lines
Quoted 6 lines
state resources on SC7180 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
Signed-off-by Sibi Sankar <[email protected]>Reviewed-by Stephen Boyd <[email protected]>Reviewed-by Matthias Kaehlcke <[email protected]>
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v3 6/13 arm64: dts: qcom: sc7280: Use QMP binding to control load state
In reply to Sibi SankarUse the Qualcomm Mailbox Protocol (QMP) binding to control the load state resources on SC7280 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
--- arch/arm64/boot/dts/qcom/sc7280.dtsi | 2 -- 1 file changed, 2 deletions(-)
arch/arm64/boot/dts/qcom/sc7280.dtsi +0 -2
@@ -9,7 +9,6 @@ #include <dt-bindings/clock/qcom,rpmh.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/mailbox/qcom-ipcc.h> -#include <dt-bindings/power/qcom-aoss-qmp.h> #include <dt-bindings/power/qcom-rpmpd.h> #include <dt-bindings/reset/qcom,sdm845-aoss.h> #include <dt-bindings/reset/qcom,sdm845-pdc.h>
@@ -1149,7 +1148,6 @@ IPCC_MPROC_SIGNAL_GLINK_QMP>; #clock-cells = <0>; - #power-domain-cells = <1>; }; spmi_bus: spmi@c440000 {
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 7/13 arm64: dts: qcom: sdm845: Use QMP binding to control load state
In reply to Sibi SankarUse the Qualcomm Mailbox Protocol (QMP) binding to control the load state resources on SDM845 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
--- arch/arm64/boot/dts/qcom/sdm845.dtsi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/arm64/boot/dts/qcom/sdm845.dtsi +4 -4
@@ -2984,6 +2984,8 @@ clock-names = "iface", "bus", "mem", "gpll0_mss", "snoc_axi", "mnoc_axi", "prng", "xo"; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&modem_smp2p_out 0>; qcom,smem-state-names = "stop";
@@ -2993,11 +2995,10 @@ qcom,halt-regs = <&tcsr_mutex_regs 0x23000 0x25000 0x24000>; - power-domains = <&aoss_qmp 2>, - <&rpmhpd SDM845_CX>, + power-domains = <&rpmhpd SDM845_CX>, <&rpmhpd SDM845_MX>, <&rpmhpd SDM845_MSS>; - power-domain-names = "load_state", "cx", "mx", "mss"; + power-domain-names = "cx", "mx", "mss"; mba { memory-region = <&mba_region>;
@@ -4582,7 +4583,6 @@ mboxes = <&apss_shared 0>; #clock-cells = <0>; - #power-domain-cells = <1>; cx_cdev: cx { #cooling-cells = <2>;
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 8/13 arm64: dts: qcom: sm8150: Use QMP binding to control load state
In reply to Sibi SankarUse the Qualcomm Mailbox Protocol (QMP) binding to control the load state resources on SM8150 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
--- arch/arm64/boot/dts/qcom/sm8150.dtsi | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
arch/arm64/boot/dts/qcom/sm8150.dtsi +14 -14
@@ -6,7 +6,6 @@ #include <dt-bindings/dma/qcom-gpi.h> #include <dt-bindings/interrupt-controller/arm-gic.h> -#include <dt-bindings/power/qcom-aoss-qmp.h> #include <dt-bindings/power/qcom-rpmpd.h> #include <dt-bindings/soc/qcom,rpmh-rsc.h> #include <dt-bindings/clock/qcom,rpmh.h>
@@ -1110,13 +1109,14 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_SLPI>, - <&rpmhpd 3>, + power-domains = <&rpmhpd 3>, <&rpmhpd 2>; - power-domain-names = "load_state", "lcx", "lmx"; + power-domain-names = "lcx", "lmx"; memory-region = <&slpi_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&slpi_smp2p_out 0>; qcom,smem-state-names = "stop";
@@ -1560,13 +1560,14 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_MODEM>, - <&rpmhpd 7>, + power-domains = <&rpmhpd 7>, <&rpmhpd 0>; - power-domain-names = "load_state", "cx", "mss"; + power-domain-names = "cx", "mss"; memory-region = <&mpss_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&modem_smp2p_out 0>; qcom,smem-state-names = "stop";
@@ -2186,12 +2187,12 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_CDSP>, - <&rpmhpd 7>; - power-domain-names = "load_state", "cx"; + power-domains = <&rpmhpd 7>; memory-region = <&cdsp_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&cdsp_smp2p_out 0>; qcom,smem-state-names = "stop";
@@ -2415,7 +2416,6 @@ mboxes = <&apss_shared 0>; #clock-cells = <0>; - #power-domain-cells = <1>; }; tsens0: thermal-sensor@c263000 {
@@ -2562,12 +2562,12 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_LPASS>, - <&rpmhpd 7>; - power-domain-names = "load_state", "cx"; + power-domains = <&rpmhpd 7>; memory-region = <&adsp_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&adsp_smp2p_out 0>; qcom,smem-state-names = "stop";
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 9/13 arm64: dts: qcom: sm8250: Use QMP binding to control load state
In reply to Sibi SankarUse the Qualcomm Mailbox Protocol (QMP) binding to control the load state resources on SM8250 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
--- arch/arm64/boot/dts/qcom/sm8250.dtsi | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
arch/arm64/boot/dts/qcom/sm8250.dtsi +11 -11
@@ -13,7 +13,6 @@ #include <dt-bindings/interconnect/qcom,osm-l3.h> #include <dt-bindings/interconnect/qcom,sm8250.h> #include <dt-bindings/mailbox/qcom-ipcc.h> -#include <dt-bindings/power/qcom-aoss-qmp.h> #include <dt-bindings/power/qcom-rpmpd.h> #include <dt-bindings/soc/qcom,apr.h> #include <dt-bindings/soc/qcom,rpmh-rsc.h>
@@ -1968,13 +1967,14 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_SLPI>, - <&rpmhpd SM8250_LCX>, + power-domains = <&rpmhpd SM8250_LCX>, <&rpmhpd SM8250_LMX>; - power-domain-names = "load_state", "lcx", "lmx"; + power-domain-names = "lcx", "lmx"; memory-region = <&slpi_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&smp2p_slpi_out 0>; qcom,smem-state-names = "stop";
@@ -2034,12 +2034,12 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_CDSP>, - <&rpmhpd SM8250_CX>; - power-domain-names = "load_state", "cx"; + power-domains = <&rpmhpd SM8250_CX>; memory-region = <&cdsp_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&smp2p_cdsp_out 0>; qcom,smem-state-names = "stop";
@@ -2782,7 +2782,6 @@ IPCC_MPROC_SIGNAL_GLINK_QMP>; #clock-cells = <0>; - #power-domain-cells = <1>; }; spmi_bus: spmi@c440000 {
@@ -3699,13 +3698,14 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_LPASS>, - <&rpmhpd SM8250_LCX>, + power-domains = <&rpmhpd SM8250_LCX>, <&rpmhpd SM8250_LMX>; - power-domain-names = "load_state", "lcx", "lmx"; + power-domain-names = "lcx", "lmx"; memory-region = <&adsp_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&smp2p_adsp_out 0>; qcom,smem-state-names = "stop";
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 10/13 arm64: dts: qcom: sm8350: Use QMP binding to control load state
In reply to Sibi SankarUse the Qualcomm Mailbox Protocol (QMP) binding to control the load state resources on SM8350 SoCs and drop deprecated power-domains exposed by AOSS QMP node.
--- arch/arm64/boot/dts/qcom/sm8350.dtsi | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-)
arch/arm64/boot/dts/qcom/sm8350.dtsi +16 -14
@@ -8,7 +8,6 @@ #include <dt-bindings/clock/qcom,rpmh.h> #include <dt-bindings/interconnect/qcom,sm8350.h> #include <dt-bindings/mailbox/qcom-ipcc.h> -#include <dt-bindings/power/qcom-aoss-qmp.h> #include <dt-bindings/power/qcom-rpmpd.h> #include <dt-bindings/soc/qcom,rpmh-rsc.h> #include <dt-bindings/thermal/thermal.h>
@@ -703,15 +702,16 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_MODEM>, - <&rpmhpd 0>, + power-domains = <&rpmhpd 0>, <&rpmhpd 12>; - power-domain-names = "load_state", "cx", "mss"; + power-domain-names = "cx", "mss"; interconnects = <&mc_virt MASTER_LLCC &mc_virt SLAVE_EBI1>; memory-region = <&pil_modem_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&smp2p_modem_out 0>; qcom,smem-state-names = "stop";
@@ -771,7 +771,6 @@ mboxes = <&ipcc IPCC_CLIENT_AOP IPCC_MPROC_SIGNAL_GLINK_QMP>; #clock-cells = <0>; - #power-domain-cells = <1>; }; spmi_bus: spmi@c440000 {
@@ -1070,13 +1069,14 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_SLPI>, - <&rpmhpd 4>, + power-domains = <&rpmhpd 4>, <&rpmhpd 5>; - power-domain-names = "load_state", "lcx", "lmx"; + power-domain-names = "lcx", "lmx"; memory-region = <&pil_slpi_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&smp2p_slpi_out 0>; qcom,smem-state-names = "stop";
@@ -1110,15 +1110,16 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_CDSP>, - <&rpmhpd 0>, + power-domains = <&rpmhpd 0>, <&rpmhpd 10>; - power-domain-names = "load_state", "cx", "mxc"; + power-domain-names = "cx", "mxc"; interconnects = <&compute_noc MASTER_CDSP_PROC &mc_virt SLAVE_EBI1>; memory-region = <&pil_cdsp_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&smp2p_cdsp_out 0>; qcom,smem-state-names = "stop";
@@ -1344,13 +1345,14 @@ clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&aoss_qmp AOSS_QMP_LS_LPASS>, - <&rpmhpd 4>, + power-domains = <&rpmhpd 4>, <&rpmhpd 5>; - power-domain-names = "load_state", "lcx", "lmx"; + power-domain-names = "lcx", "lmx"; memory-region = <&pil_adsp_mem>; + qcom,qmp = <&aoss_qmp>; + qcom,smem-states = <&smp2p_adsp_out 0>; qcom,smem-state-names = "stop";
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 11/13 soc: qcom: aoss: Drop power domain support
In reply to Sibi SankarThe load state resources are expected to follow the life cycle of the remote processor it tracks. However, modeling load state resources as power-domains result in them getting turned off during system suspend and thereby falling out of sync with the remote processors that are still on. Fix this by replacing load state resource control through the generic qmp message send interface instead.
--- drivers/soc/qcom/qcom_aoss.c | 109 ++----------------------------------------- 1 file changed, 3 insertions(+), 106 deletions(-)
drivers/soc/qcom/qcom_aoss.c +3 -106
@@ -2,7 +2,6 @@/* * Copyright (c) 2019, Linaro Ltd */ -#include <dt-bindings/power/qcom-aoss-qmp.h> #include <linux/clk-provider.h> #include <linux/debugfs.h> #include <linux/interrupt.h>
@@ -11,7 +10,6 @@#include <linux/module.h> #include <linux/of_platform.h> #include <linux/platform_device.h> -#include <linux/pm_domain.h> #include <linux/thermal.h> #include <linux/slab.h> #include <linux/soc/qcom/qcom_aoss.h>
@@ -68,7 +66,6 @@ struct qmp_cooling_device {* @event: wait_queue for synchronization with the IRQ * @tx_lock: provides synchronization between multiple callers of qmp_send() * @qdss_clk: QDSS clock hw struct -* @pd_data: genpd data * @cooling_devs: thermal cooling devices */ struct qmp {
@@ -88,20 +85,12 @@ struct qmp {struct mutex tx_lock;struct clk_hw qdss_clk; -struct genpd_onecell_data pd_data;struct qmp_cooling_device *cooling_devs;#if IS_ENABLED (CONFIG_DEBUG_FS )struct dentry *debugfs_file;#endif /* CONFIG_DEBUG_FS */ }; -struct qmp_pd { -struct qmp *qmp; -struct generic_pm_domain pd; -}; - -#define to_qmp_pd_resource (res) container_of(res, struct qmp_pd, pd) -static void qmp_kick (struct qmp *qmp) {mbox_send_message (qmp->mbox_chan,NULL );
@@ -330,95 +319,6 @@ static void qmp_qdss_clk_remove(struct qmp *qmp)clk_hw_unregister (&qmp->qdss_clk); } -static int qmp_pd_power_toggle (struct qmp_pd *res,bool enable) -{ -char buf[QMP_MSG_LEN ] = {}; - -snprintf (buf,sizeof (buf), -"{class: image, res: load_state, name: %s, val: %s}" , - res->pd.name, enable ?"on" :"off" ); -return qmp_send (res->qmp, buf,sizeof (buf)); -} - -static int qmp_pd_power_on (struct generic_pm_domain *domain) -{ -return qmp_pd_power_toggle (to_qmp_pd_resource (domain), true); -} - -static int qmp_pd_power_off (struct generic_pm_domain *domain) -{ -return qmp_pd_power_toggle (to_qmp_pd_resource (domain), false); -} - -static const char *const sdm845_resources[] = { - [AOSS_QMP_LS_CDSP ] ="cdsp" , - [AOSS_QMP_LS_LPASS ] ="adsp" , - [AOSS_QMP_LS_MODEM ] ="modem" , - [AOSS_QMP_LS_SLPI ] ="slpi" , - [AOSS_QMP_LS_SPSS ] ="spss" , - [AOSS_QMP_LS_VENUS ] ="venus" , -}; - -static int qmp_pd_add (struct qmp *qmp) -{ -struct genpd_onecell_data *data = &qmp->pd_data; -struct device *dev = qmp->dev; -struct qmp_pd *res; -size_t num =ARRAY_SIZE (sdm845_resources); -int ret; -int i; - - res =devm_kcalloc (dev, num,sizeof (*res),GFP_KERNEL ); -if (!res) -return -ENOMEM ; - - data->domains =devm_kcalloc (dev, num,sizeof (*data->domains), -GFP_KERNEL ); -if (!data->domains) -return -ENOMEM ; - -for (i =0 ; i < num; i++) { - res[i].qmp = qmp; - res[i].pd.name = sdm845_resources[i]; - res[i].pd.power_on = qmp_pd_power_on; - res[i].pd.power_off = qmp_pd_power_off; - - ret =pm_genpd_init (&res[i].pd,NULL , true); -if (ret <0 ) { -dev_err (dev,"failed to init genpd\n" ); - goto unroll_genpds; - } - - data->domains[i] = &res[i].pd; - } - - data->num_domains = i; - - ret =of_genpd_add_provider_onecell (dev->of_node, data); -if (ret <0 ) - goto unroll_genpds; - -return 0 ; - -unroll_genpds: -for (i--; i >=0 ; i--) -pm_genpd_remove (data->domains[i]); - -return ret; -} - -static void qmp_pd_remove (struct qmp *qmp) -{ -struct genpd_onecell_data *data = &qmp->pd_data; -struct device *dev = qmp->dev; -int i; - -of_genpd_del_provider (dev->of_node); - -for (i =0 ; i < data->num_domains; i++) -pm_genpd_remove (data->domains[i]); -} -static int qmp_cdev_get_max_state (struct thermal_cooling_device *cdev,unsigned long *state) {
@@ -650,13 +550,11 @@ static int qmp_probe(struct platform_device *pdev)if (ret) goto err_close_qmp; - ret =qmp_pd_add (qmp); -if (ret) - goto err_remove_qdss_clk; - ret =qmp_cooling_devices_register (qmp); -if (ret) +if (ret) {dev_err (&pdev->dev,"failed to register aoss cooling devices\n" ); + goto err_remove_qdss_clk; + }platform_set_drvdata (pdev, qmp);
@@ -689,7 +587,6 @@ static int qmp_remove(struct platform_device *pdev)#endif /* CONFIG_DEBUG_FS */ qmp_qdss_clk_remove (qmp); -qmp_pd_remove (qmp);qmp_cooling_devices_remove (qmp);qmp_close (qmp);
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 11/13] soc: qcom: aoss: Drop power domain support
Quoted 6 lines · Sibi Sankar
The load state resources are expected to follow the life cycle of the remote processor it tracks. However, modeling load state resources as power-domains result in them getting turned off during system suspend and thereby falling out of sync with the remote processors that are still on. Fix this by replacing load state resource control through the generic qmp message send interface instead.
nit: the above sounds as if this patch does all of that, when it only removes power domain support. Instead you could start with saying what the patch actually does (remove power domain support), followed by why PD support isn't needed anymore (now done by sending QMP messages directly).
Quoted 15 lines
Signed-off-by Sibi Sankar <[email protected]>--- drivers/soc/qcom/qcom_aoss.c | 109 ++----------------------------------------- 1 file changed, 3 insertions(+), 106 deletions(-)drivers/soc/qcom/qcom_aoss.c +0
-0@@ -650,13 +550,11 @@ static int qmp_probe(struct platform_device *pdev)if (ret) goto err_close_qmp;
drivers/soc/qcom/qcom_aoss.c static int qmp_probe(struct platform_device *pdev) · line 556
Quoted 10 lines
drivers/soc/qcom/qcom_aoss.c +2
-5- ret =qmp_pd_add (qmp); -if (ret) - goto err_remove_qdss_clk; - ret =qmp_cooling_devices_register (qmp); -if (ret) +if (ret) {dev_err (&pdev->dev,"failed to register aoss cooling devices\n" ); + goto err_remove_qdss_clk;
This isn't really related with the PD removal, right? I wonder if it was intentional to have _probe() succeed even when the cooling device registration failed, since the cooling devices aren't essential.
If it is still desirable to fail the change should be done in a separate patch, unless it is actually related with removing PD support.
Re: [PATCH v3 11/13] soc: qcom: aoss: Drop power domain support
Quoted 8 lines · Matthias Kaehlcke
Quoted 6 lines · Sibi Sankar
The load state resources are expected to follow the life cycle of the remote processor it tracks. However, modeling load state resources as power-domains result in them getting turned off during system suspend and thereby falling out of sync with the remote processors that are still on. Fix this by replacing load state resource control through the generic qmp message send interface instead.
Quoted 5 lines
nit: the above sounds as if this patch does all of that, when it only removes power domain support. Instead you could start with saying what the patch actually does (remove power domain support), followed by why PD support isn't needed anymore (now done by sending QMP messages directly).
sure, will fix this up in the next
re-spin.
Quoted 18 lines
Quoted 18 lines
Signed-off-by Sibi Sankar <[email protected]>--- drivers/soc/qcom/qcom_aoss.c | 109 ++----------------------------------------- 1 file changed, 3 insertions(+), 106 deletions(-)drivers/soc/qcom/qcom_aoss.c +0
-0@@ -650,13 +550,11 @@ static int qmp_probe(struct platform_device *pdev)if (ret) goto err_close_qmp;
Quoted 14 lines
drivers/soc/qcom/qcom_aoss.c static int qmp_probe(struct platform_device *pdev) · line 556
Quoted 9 lines
drivers/soc/qcom/qcom_aoss.c +2
-5- ret =qmp_pd_add (qmp); -if (ret) - goto err_remove_qdss_clk; - ret =qmp_cooling_devices_register (qmp); -if (ret) +if (ret) {dev_err (&pdev->dev,"failed to register aoss cooling devices\n" ); + goto err_remove_qdss_clk;This isn't really related with the PD removal, right? I wonder if it was intentional to have
_probe()succeed even when the cooling device registration failed, since the cooling devices aren't essential.
Thanks for catching ^^
Quoted 2 lines
If it is still desirable to fail the change should be done in a separate patch, unless it is actually related with removing PD support.
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v3 12/13 dt-bindings: msm/dp: Remove aoss-qmp header
In reply to Sibi SankarRemove the unused aoss-qmp header from the list of includes.
--- Documentation/devicetree/bindings/display/msm/dp-controller.yaml | 1 - 1 file changed, 1 deletion(-)
Documentation/devicetree/bindings/display/msm/dp-controller.yaml +0 -1
@@ -95,7 +95,6 @@ examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/clock/qcom,dispcc-sc7180.h> - #include <dt-bindings/power/qcom-aoss-qmp.h> #include <dt-bindings/power/qcom-rpmpd.h> displayport-controller@ae90000 {
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 13/13 dt-bindings: soc: qcom: aoss: Delete unused power-domain definitions
In reply to Sibi SankarDelete unused power-domain definitions exposed by AOSS QMP.
--- include/dt-bindings/power/qcom-aoss-qmp.h | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 include/dt-bindings/power/qcom-aoss-qmp.h
include/dt-bindings/power/qcom-aoss-qmp.h deleted +0 -14
@@ -1,14 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* Copyright (c) 2018, Linaro Ltd. */ - -#ifndef __DT_BINDINGS_POWER_QCOM_AOSS_QMP_H -#define __DT_BINDINGS_POWER_QCOM_AOSS_QMP_H - -#define AOSS_QMP_LS_CDSP 0 -#define AOSS_QMP_LS_LPASS 1 -#define AOSS_QMP_LS_MODEM 2 -#define AOSS_QMP_LS_SLPI 3 -#define AOSS_QMP_LS_SPSS 4 -#define AOSS_QMP_LS_VENUS 5 - -#endif
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 13/13] dt-bindings: soc: qcom: aoss: Delete unused power-domain definitions
Quoted 5 lines · Sibi Sankar
Delete unused power-domain definitions exposed by AOSS QMP.
Signed-off-by Sibi Sankar <[email protected]>Reviewed-by Stephen Boyd <[email protected]>Acked-by Rob Herring <[email protected]>