Add support for sc7280 WPSS PIL loading
v2 cover Add support for sc7280 WPSS PIL loading
Add support for PIL loading of WPSS co-processor for SC7280 SOCs.
Rakesh Pillai (3):
dt-bindings: remoteproc: qcom: adsp: Convert binding to YAML
dt-bindings: remoteproc: qcom: Add SC7280 WPSS support
remoteproc: qcom: q6v5_wpss: Add support for sc7280 WPSS
.../bindings/remoteproc/qcom,hexagon-v56.txt | 140 -------- .../bindings/remoteproc/qcom,hexagon-v56.yaml | 361 +++++++++++++++++++++ drivers/remoteproc/qcom_q6v5_adsp.c | 70 +++- 3 files changed, 430 insertions(+), 141 deletions(-) delete mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.txt create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml
Signature · 1 line
2.7.4
PATCH v2 1/3 dt-bindings: remoteproc: qcom: adsp: Convert binding to YAML
Convert Qualcomm ADSP/CDSP Remoteproc devicetree
binding to YAML.
--- .../bindings/remoteproc/qcom,hexagon-v56.txt | 140 ---------- .../bindings/remoteproc/qcom,hexagon-v56.yaml | 292 +++++++++++++++++++++ 2 files changed, 292 insertions(+), 140 deletions(-) delete mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.txt create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.txt deleted +0 -140
@@ -1,140 +0,0 @@ -Qualcomm Technology Inc. Hexagon v56 Peripheral Image Loader - -This document defines the binding for a component that loads and boots firmware -on the Qualcomm Technology Inc. Hexagon v56 core. - -- compatible: - Usage: required - Value type: <string> - Definition: must be one of: - "qcom,qcs404-cdsp-pil", - "qcom,sdm845-adsp-pil" - -- reg: - Usage: required - Value type: <prop-encoded-array> - Definition: must specify the base address and size of the qdsp6ss register - -- interrupts-extended: - Usage: required - Value type: <prop-encoded-array> - Definition: must list the watchdog, fatal IRQs ready, handover and - stop-ack IRQs - -- interrupt-names: - Usage: required - Value type: <stringlist> - Definition: must be "wdog", "fatal", "ready", "handover", "stop-ack" - -- clocks: - Usage: required - Value type: <prop-encoded-array> - Definition: List of phandles and clock specifier pairs for the Hexagon, - per clock-names below. - -- clock-names: - Usage: required for SDM845 ADSP - Value type: <stringlist> - Definition: List of clock input name strings sorted in the same - order as the clocks property. Definition must have - "xo", "sway_cbcr", "lpass_ahbs_aon_cbcr", - "lpass_ahbm_aon_cbcr", "qdsp6ss_xo", "qdsp6ss_sleep" - and "qdsp6ss_core". - -- clock-names: - Usage: required for QCS404 CDSP - Value type: <stringlist> - Definition: List of clock input name strings sorted in the same - order as the clocks property. Definition must have - "xo", "sway", "tbu", "bimc", "ahb_aon", "q6ss_slave", - "q6ss_master", "q6_axim". - -- power-domains: - Usage: required - Value type: <phandle> - Definition: reference to cx power domain node. - -- resets: - Usage: required - Value type: <phandle> - Definition: reference to the list of resets for the Hexagon. - -- reset-names: - Usage: required for SDM845 ADSP - Value type: <stringlist> - Definition: must be "pdc_sync" and "cc_lpass" - -- reset-names: - Usage: required for QCS404 CDSP - Value type: <stringlist> - Definition: must be "restart" - -- qcom,halt-regs: - Usage: required - Value type: <prop-encoded-array> - Definition: a phandle reference to a syscon representing TCSR followed - by the offset within syscon for Hexagon halt register. - -- memory-region: - Usage: required - Value type: <phandle> - Definition: reference to the reserved-memory for the firmware - -- qcom,smem-states: - Usage: required - Value type: <phandle> - Definition: reference to the smem state for requesting the Hexagon to - shut down - -- qcom,smem-state-names: - Usage: required - Value type: <stringlist> - Definition: must be "stop" - - -= SUBNODES -The adsp node may have an subnode named "glink-edge" that describes the -communication edge, channels and devices related to the Hexagon. -See ../soc/qcom/qcom,glink.txt for details on how to describe these. - -= EXAMPLE -The following example describes the resources needed to boot control the -ADSP, as it is found on SDM845 boards. - - remoteproc@17300000 { - compatible = "qcom,sdm845-adsp-pil"; - reg = <0x17300000 0x40c>; - - interrupts-extended = <&intc GIC_SPI 162 IRQ_TYPE_EDGE_RISING>, - <&adsp_smp2p_in 0 IRQ_TYPE_EDGE_RISING>, - <&adsp_smp2p_in 1 IRQ_TYPE_EDGE_RISING>, - <&adsp_smp2p_in 2 IRQ_TYPE_EDGE_RISING>, - <&adsp_smp2p_in 3 IRQ_TYPE_EDGE_RISING>; - interrupt-names = "wdog", "fatal", "ready", - "handover", "stop-ack"; - - clocks = <&rpmhcc RPMH_CXO_CLK>, - <&gcc GCC_LPASS_SWAY_CLK>, - <&lpasscc LPASS_Q6SS_AHBS_AON_CLK>, - <&lpasscc LPASS_Q6SS_AHBM_AON_CLK>, - <&lpasscc LPASS_QDSP6SS_XO_CLK>, - <&lpasscc LPASS_QDSP6SS_SLEEP_CLK>, - <&lpasscc LPASS_QDSP6SS_CORE_CLK>; - clock-names = "xo", "sway_cbcr", - "lpass_ahbs_aon_cbcr", - "lpass_ahbm_aon_cbcr", "qdsp6ss_xo", - "qdsp6ss_sleep", "qdsp6ss_core"; - - power-domains = <&rpmhpd SDM845_CX>; - - resets = <&pdc_reset PDC_AUDIO_SYNC_RESET>, - <&aoss_reset AOSS_CC_LPASS_RESTART>; - reset-names = "pdc_sync", "cc_lpass"; - - qcom,halt-regs = <&tcsr_mutex_regs 0x22000>; - - memory-region = <&pil_adsp_mem>; - - qcom,smem-states = <&adsp_smp2p_out 0>; - qcom,smem-state-names = "stop"; - };
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml new file +292 -0
292 lines not on this page · raw message
Signature · 1 line
2.7.4
PATCH v2 2/3 dt-bindings: remoteproc: qcom: Add SC7280 WPSS support
In reply to Rakesh PillaiAdd WPSS PIL loading support for SC7280 SoCs.
--- .../bindings/remoteproc/qcom,hexagon-v56.yaml | 79 ++++++++++++++++++++-- 1 file changed, 74 insertions(+), 5 deletions(-)
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +74 -5
@@ -17,6 +17,7 @@ properties: compatible: enum: - qcom,qcs404-cdsp-pil + - qcom,sc7280-wpss-pil - qcom,sdm845-adsp-pil reg:
@@ -26,25 +27,30 @@ properties: interrupts-extended: minItems: 5 - maxItems: 5 + maxItems: 6 interrupt-names: minItems: 5 - maxItems: 5 + maxItems: 6 clocks: - minItems: 7 + minItems: 3 maxItems: 8 description: List of phandles and clock specifier pairs for the Hexagon, per clock-names below. clock-names: - minItems: 7 + minItems: 3 maxItems: 8 power-domains: - maxItems: 1 + minItems: 1 + maxItems: 2 + + power-domain-names: + minItems: 1 + maxItems: 2 resets: minItems: 1
@@ -92,6 +98,7 @@ required: - clocks - clock-names - power-domains + - power-domain-names - qcom,halt-regs - memory-region - qcom,smem-states
@@ -129,6 +136,31 @@ allOf: compatible: contains: enum: + - qcom,sc7280-wpss-pil + then: + properties: + interrupts-extended: + items: + - description: Watchdog interrupt + - description: Fatal interrupt + - description: Ready interrupt + - description: Handover interrupt + - description: Stop acknowledge interrupt + - description: Shutdown acknowledge interrupt + interrupt-names: + items: + - const: wdog + - const: fatal + - const: ready + - const: handover + - const: stop-ack + - const: shutdown-ack + + - if: + properties: + compatible: + contains: + enum: - qcom,sdm845-adsp-pil then: properties:
@@ -211,6 +243,26 @@ allOf: power-domains: items: - description: CX power domain + power-domain-names: + items: + - const: cx + + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7280-wpss-pil + then: + properties: + power-domains: + items: + - description: CX power domain + - description: MX power domain + power-domain-names: + items: + - const: cx + - const: mx - if: properties:
@@ -244,6 +296,23 @@ allOf: items: - const: restart + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7280-wpss-pil + then: + properties: + resets: + items: + - description: AOSS restart + - description: PDC SYNC + reset-names: + items: + - const: restart + - const: pdc_sync + examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h>
Signature · 1 line
2.7.4
Rob Herring
maintainerRe: [PATCH v2 2/3] dt-bindings: remoteproc: qcom: Add SC7280 WPSS support
Quoted 7 lines · Rakesh Pillai
Add WPSS PIL loading support for SC7280 SoCs.
Signed-off-by Rakesh Pillai <[email protected]>--- .../bindings/remoteproc/qcom,hexagon-v56.yaml | 79 ++++++++++++++++++++-- 1 file changed, 74 insertions(+), 5 deletions(-)
My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check' on your patch (DT_CHECKER_FLAGS is new in v5.13):
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.example.dt.yaml: remoteproc@17300000: 'power-domain-names' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/patch/1515482
This check can fail if there are any dependencies. The base for a patch series is generally the most recent rc1.
If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date:
pip3 install dtschema --upgrade
Please check and re-submit.
RE: [PATCH v2 2/3] dt-bindings: remoteproc: qcom: Add SC7280 WPSS support
Quoted 38 lines
-----Original Message-----
From: Rob Herring <[email protected]>
Sent: Wednesday, August 11, 2021 10:55 PM
To: Rakesh Pillai <[email protected]>
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; linux- [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH v2 2/3] dt-bindings: remoteproc: qcom: Add SC7280 WPSS supportQuoted 5 lines · Rakesh Pillai
Add WPSS PIL loading support for SC7280 SoCs.
Signed-off-by Rakesh Pillai <[email protected]>--- .../bindings/remoteproc/qcom,hexagon-v56.yaml | 79++++++++++++++++++++--
Quoted 2 lines
1 file changed, 74 insertions(+), 5 deletions(-)My bot found errors running 'make DT_CHECKER_FLAGS=-m
dt_binding_check'
on your patch (DT_CHECKER_FLAGSis new in v5.13):yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/linux-dt- review/Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.example.dt.yaml: remoteproc@17300000: 'power-domain-names' is a required property
From schema: /builds/robherring/linux-dt-
review/Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml
Quoted 5 lines
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/patch/1515482
This check can fail if there are any dependencies. The base for a patch
series
Quoted 3 lines
is generally the most recent rc1.
If you already ran 'make
dt_binding_check' and didn't see the above
error(s),
Quoted 6 lines
then make sure 'yamllint' is installed and dt-schema is up to date:
pip3 install dtschema --upgrade
Please check and re-submit.
Thanks Rob, I will submit next patchset for this and fix the issues.
Rob Herring
maintainerRe: [PATCH v2 2/3] dt-bindings: remoteproc: qcom: Add SC7280 WPSS support
In reply to Rakesh PillaiQuoted 24 lines · Rakesh Pillai
Add WPSS PIL loading support for SC7280 SoCs.
Signed-off-by Rakesh Pillai <[email protected]>--- .../bindings/remoteproc/qcom,hexagon-v56.yaml | 79 ++++++++++++++++++++-- 1 file changed, 74 insertions(+), 5 deletions(-)Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +1
-1@@ -17,6 +17,7 @@ properties: compatible: enum: - qcom,qcs404-cdsp-pil + - qcom,sc7280-wpss-pil - qcom,sdm845-adsp-pil reg:@@ -26,25 +27,30 @@ properties: interrupts-extended: minItems: 5 - maxItems: 5
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml properties: · line 37
Quoted 10 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +3
-2+ maxItems: 6 interrupt-names: minItems: 5 - maxItems: 5 + maxItems: 6 clocks: - minItems: 7 + minItems: 3
Patch 1 shows 3 clocks are valid...
Quoted 22 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +7
-2maxItems: 8 description: List of phandles and clock specifier pairs for the Hexagon, per clock-names below. clock-names: - minItems: 7 + minItems: 3 maxItems: 8 power-domains: - maxItems: 1 + minItems: 1 + maxItems: 2 + + power-domain-names: + minItems: 1 + maxItems: 2 resets: minItems: 1
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml required: · line 101
Quoted 4 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +1
-0@@ -92,6 +98,7 @@ required: - clocks - clock-names - power-domains + - power-domain-names
It's not backwards compatible to add a required property.
Quoted 16 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +9
-0- qcom,halt-regs - memory-region - qcom,smem-states@@ -129,6 +136,31 @@ allOf: compatible: contains: enum: + - qcom,sc7280-wpss-pil + then: + properties: + interrupts-extended: + items: + - description: Watchdog interrupt + - description: Fatal interrupt + - description: Ready interrupt + - description: Handover interrupt
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml allOf: · line 157
Quoted 10 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +10
-0+ - description: Stop acknowledge interrupt + - description: Shutdown acknowledge interrupt + interrupt-names: + items: + - const: wdog + - const: fatal + - const: ready + - const: handover + - const: stop-ack + - const: shutdown-ack
The items lists can go in the main section with 'minItems: 5' and just 'minItems: 6' here.
Quoted 23 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +16
-0+ + - if: + properties: + compatible: + contains: + enum: - qcom,sdm845-adsp-pil then: properties:@@ -211,6 +243,26 @@ allOf: power-domains: items: - description: CX power domain + power-domain-names: + items: + - const: cx + + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7280-wpss-pil
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml allOf: · line 265
Quoted 10 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +10
-0+ then: + properties: + power-domains: + items: + - description: CX power domain + - description: MX power domain + power-domain-names: + items: + - const: cx + - const: mx
As 'cx' is always the first entry, the 'items' lists here can be moved to the main section and you just need minItems or maxItems in the if/then.
Quoted 31 lines
Documentation/devicetree/bindings/remoteproc/qcom,hexagon-v56.yaml +17
-0- if: properties:@@ -244,6 +296,23 @@ allOf: items: - const: restart + - if: + properties: + compatible: + contains: + enum: + - qcom,sc7280-wpss-pil + then: + properties: + resets: + items: + - description: AOSS restart + - description: PDC SYNC + reset-names: + items: + - const: restart + - const: pdc_sync + examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h>Signature · 1 line
2.7.4
PATCH v2 3/3 remoteproc: qcom: q6v5_wpss: Add support for sc7280 WPSS
In reply to Rakesh PillaiAdd support for PIL loading of WPSS processor for SC7280 WPSS boot will be requested by the wifi driver and hence disable auto-boot for WPSS. Also add a separate shutdown sequence handler for WPSS.
--- drivers/remoteproc/qcom_q6v5_adsp.c | 70 ++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-)
drivers/remoteproc/qcom_q6v5_adsp.c +69 -1
@@ -32,6 +32,7 @@/* time out value */ #define ACK_TIMEOUT 1000 +#define ACK_TIMEOUT_US 1000000#define BOOT_FSM_TIMEOUT 10000/* mask values */ #define EVB_MASK GENMASK(27, 4)
@@ -58,6 +59,8 @@ struct adsp_pil_data {const char *ssr_name;const char *sysmon_name;int ssctl_id; +bool is_wpss; +bool auto_boot;const char **clk_ids;int num_clks;
@@ -96,8 +99,46 @@ struct qcom_adsp {struct qcom_rproc_glink glink_subdev;struct qcom_rproc_ssr ssr_subdev;struct qcom_sysmon *sysmon; + +int (*shutdown)(struct qcom_adsp *adsp); }; +static int qcom_wpss_shutdown (struct qcom_adsp *adsp) +{ +unsigned int val; + +regmap_write (adsp->halt_map, adsp->halt_lpass +LPASS_HALTREQ_REG ,1 ); + +/* Wait for halt ACK from QDSP6 */ +regmap_read_poll_timeout (adsp->halt_map, + adsp->halt_lpass +LPASS_HALTACK_REG , val, + val,1000 ,ACK_TIMEOUT_US ); + +/* Assert the WPSS PDC Reset */ +reset_control_assert (adsp->pdc_sync_reset); +/* Place the WPSS processor into reset */ +reset_control_assert (adsp->restart); +/* wait after asserting subsystem restart from AOSS */ +usleep_range (200 ,205 ); +/* Remove the WPSS reset */ +reset_control_deassert (adsp->restart); +/* De-assert the WPSS PDC Reset */ +reset_control_deassert (adsp->pdc_sync_reset); + +usleep_range (100 ,105 ); + +clk_bulk_disable_unprepare (adsp->num_clks, adsp->clks); + +regmap_write (adsp->halt_map, adsp->halt_lpass +LPASS_HALTREQ_REG ,0 ); + +/* Wait for halt ACK from QDSP6 */ +regmap_read_poll_timeout (adsp->halt_map, + adsp->halt_lpass +LPASS_HALTACK_REG , val, + !val,1000 ,ACK_TIMEOUT_US ); + +return 0 ; +} +static int qcom_adsp_shutdown (struct qcom_adsp *adsp) {unsigned long timeout;
@@ -270,7 +311,7 @@ static int adsp_stop(struct rproc *rproc)if (ret == -ETIMEDOUT )dev_err (adsp->dev,"timed out on wait\n" ); - ret =qcom_adsp_shutdown (adsp); + ret = adsp->shutdown (adsp);if (ret)dev_err (adsp->dev,"failed to shutdown: %d\n" , ret);
@@ -439,6 +480,8 @@ static int adsp_probe(struct platform_device *pdev)dev_err (&pdev->dev,"unable to allocate remoteproc\n" );return -ENOMEM ; } + + rproc->auto_boot = desc->auto_boot;rproc_coredump_set_elf_info (rproc,ELFCLASS32 ,EM_NONE ); adsp = (struct qcom_adsp *)rproc->priv;
@@ -447,6 +490,11 @@ static int adsp_probe(struct platform_device *pdev) adsp->info_name = desc->sysmon_name;platform_set_drvdata (pdev, adsp); +if (desc->is_wpss) + adsp->shutdown = qcom_wpss_shutdown; +else + adsp->shutdown = qcom_adsp_shutdown; + ret =adsp_alloc_memory_region (adsp);if (ret) goto free_rproc;
@@ -515,6 +563,8 @@ static const struct adsp_pil_data adsp_resource_init = { .ssr_name = "lpass", .sysmon_name = "adsp", .ssctl_id = 0x14, + .is_wpss = false, + .auto_boot = true, .clk_ids = (const char *[]) {"sway_cbcr" ,"lpass_ahbs_aon_cbcr" ,"lpass_ahbm_aon_cbcr" ,"qdsp6ss_xo" ,"qdsp6ss_sleep" ,"qdsp6ss_core" ,NULL
@@ -528,6 +578,8 @@ static const struct adsp_pil_data cdsp_resource_init = { .ssr_name = "cdsp", .sysmon_name = "cdsp", .ssctl_id = 0x17, + .is_wpss = false, + .auto_boot = true, .clk_ids = (const char *[]) {"sway" ,"tbu" ,"bimc" ,"ahb_aon" ,"q6ss_slave" ,"q6ss_master" ,"q6_axim" ,NULL
@@ -535,8 +587,24 @@ static const struct adsp_pil_data cdsp_resource_init = { .num_clks = 7, }; +static const struct adsp_pil_data wpss_resource_init = { + .crash_reason_smem =626 , + .firmware_name ="wpss.mdt" , + .ssr_name ="wpss" , + .sysmon_name ="wpss" , + .ssctl_id =0x19 , + .is_wpss = true, + .auto_boot = false, + .clk_ids = (const char *[]) { +"gcc_wpss_ahb_bdg_mst_clk" ,"gcc_wpss_ahb_clk" , +"gcc_wpss_rscp_clk" ,NULL + }, + .num_clks =3 , +}; +static const struct of_device_id adsp_of_match[] = { { .compatible ="qcom,qcs404-cdsp-pil" , .data = &cdsp_resource_init }, + { .compatible ="qcom,sc7280-wpss-pil" , .data = &wpss_resource_init }, { .compatible ="qcom,sdm845-adsp-pil" , .data = &adsp_resource_init }, { }, };
Signature · 1 line
2.7.4