* [PATCH v5 0/2] Resolve MPM register space situation @ 2023-08-23 11:15 Konrad Dybcio 2023-08-23 11:15 ` [PATCH v5 1/2] dt-bindings: interrupt-controller: mpm: Pass MSG RAM slice through phandle Konrad Dybcio 2023-08-23 11:15 ` [PATCH v5 2/2] irqchip: irq-qcom-mpm: Support passing a slice of SRAM as reg space Konrad Dybcio 0 siblings, 2 replies; 4+ messages in thread From: Konrad Dybcio @ 2023-08-23 11:15 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Thomas Gleixner, Marc Zyngier, Rob Herring, Krzysztof Kozlowski, Shawn Guo, Conor Dooley Cc: Marijn Suijten, linux-arm-msm, linux-kernel, devicetree, Konrad Dybcio, Krzysztof Kozlowski v4 -> v5: - Pick up tags - Rebase on Rob's of_ header untanglement Link to v4: https://lore.kernel.org/r/20230328-topic-msgram_mpm-v4-0-bae382dc0f92@linaro.org v3 -> v4: - Fix up indentation in the bindings patch - Add an example glink-edge subnode to remoteproc-rpm (its bindings require that..) Link to v3: https://lore.kernel.org/r/20230328-topic-msgram_mpm-v3-0-2c72f27b4706@linaro.org v2 -> v3: - Fix the example - Pick up tags - remove the outdated example from the cover letter, check bindings should you want to see one The bindings for the wrapper node used in the yaml example are merged in qcom/for-next Link to v2: https://lore.kernel.org/r/20230328-topic-msgram_mpm-v2-0-e24a48e57f0d@linaro.org v1 -> v2: - deprecate 'reg', make qcom,rpm-msg-ram required [1/2] - Use devm_ioremap() [2/2] Link to v1: https://lore.kernel.org/r/20230328-topic-msgram_mpm-v1-0-1b788a5f5a33@linaro.org Depends on resolution of https://github.com/devicetree-org/dt-schema/issues/104 The MPM (and some other things, irrelevant to this patchset) resides (as far as the ARM cores are concerned, anyway) in a MMIO-mapped region that's a portion of the RPM (low-power management core)'s RAM, known as the RPM Message RAM. Representing this relation in the Device Tree creates some challenges, as one would either have to treat a memory region as a bus, map nodes in a way such that their reg-s would be overlapping, or supply the nodes with a slice of that region. This series implements the third option, by adding a qcom,rpm-msg-ram property, which has been used for some drivers poking into this region before. Bindings ABI compatibility is preserved through keeping the "normal" (a.k.a read the reg property and map that region) way of passing the register space. Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> --- Konrad Dybcio (2): dt-bindings: interrupt-controller: mpm: Pass MSG RAM slice through phandle irqchip: irq-qcom-mpm: Support passing a slice of SRAM as reg space .../bindings/interrupt-controller/qcom,mpm.yaml | 52 +++++++++++++++------- drivers/irqchip/irq-qcom-mpm.c | 21 +++++++-- 2 files changed, 53 insertions(+), 20 deletions(-) --- base-commit: e3f80d3eae76c3557b3c9b5938ad01c0e6cf25ec change-id: 20230328-topic-msgram_mpm-c688be3bc294 Best regards, -- Konrad Dybcio <konrad.dybcio@linaro.org> ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v5 1/2] dt-bindings: interrupt-controller: mpm: Pass MSG RAM slice through phandle 2023-08-23 11:15 [PATCH v5 0/2] Resolve MPM register space situation Konrad Dybcio @ 2023-08-23 11:15 ` Konrad Dybcio 2023-08-23 12:09 ` Rob Herring 2023-08-23 11:15 ` [PATCH v5 2/2] irqchip: irq-qcom-mpm: Support passing a slice of SRAM as reg space Konrad Dybcio 1 sibling, 1 reply; 4+ messages in thread From: Konrad Dybcio @ 2023-08-23 11:15 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Thomas Gleixner, Marc Zyngier, Rob Herring, Krzysztof Kozlowski, Shawn Guo, Conor Dooley Cc: Marijn Suijten, linux-arm-msm, linux-kernel, devicetree, Konrad Dybcio, Krzysztof Kozlowski Due to the wild nature of the Qualcomm RPM Message RAM, we can't really use 'reg' to point to the MPM's slice of Message RAM without cutting into an already-defined RPM MSG RAM node used for GLINK and SMEM. Document passing the register space as a slice of SRAM through the qcom,rpm-msg-ram property. This also makes 'reg' deprecated. Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> --- .../bindings/interrupt-controller/qcom,mpm.yaml | 52 +++++++++++++++------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml b/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml index 509d20c091af..4ce7912d8047 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml +++ b/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.yaml @@ -29,6 +29,12 @@ properties: maxItems: 1 description: Specifies the base address and size of vMPM registers in RPM MSG RAM. + deprecated: true + + qcom,rpm-msg-ram: + $ref: /schemas/types.yaml#/definitions/phandle + description: + Phandle to the APSS MPM slice of the RPM Message RAM interrupts: maxItems: 1 @@ -64,33 +70,45 @@ properties: required: - compatible - - reg - interrupts - mboxes - interrupt-controller - '#interrupt-cells' - qcom,mpm-pin-count - qcom,mpm-pin-map + - qcom,rpm-msg-ram additionalProperties: false examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h> - mpm: interrupt-controller@45f01b8 { - compatible = "qcom,mpm"; - interrupts = <GIC_SPI 197 IRQ_TYPE_EDGE_RISING>; - reg = <0x45f01b8 0x1000>; - mboxes = <&apcs_glb 1>; - interrupt-controller; - #interrupt-cells = <2>; - interrupt-parent = <&intc>; - qcom,mpm-pin-count = <96>; - qcom,mpm-pin-map = <2 275>, - <5 296>, - <12 422>, - <24 79>, - <86 183>, - <90 260>, - <91 260>; + + remoteproc-rpm { + compatible = "qcom,msm8998-rpm-proc", "qcom,rpm-proc"; + + glink-edge { + compatible = "qcom,glink-rpm"; + + interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>; + qcom,rpm-msg-ram = <&rpm_msg_ram>; + mboxes = <&apcs_glb 0>; + }; + + mpm: interrupt-controller { + compatible = "qcom,mpm"; + qcom,rpm-msg-ram = <&apss_mpm>; + interrupts = <GIC_SPI 197 IRQ_TYPE_EDGE_RISING>; + mboxes = <&apcs_glb 1>; + interrupt-controller; + #interrupt-cells = <2>; + interrupt-parent = <&intc>; + qcom,mpm-pin-count = <96>; + qcom,mpm-pin-map = <2 275>, + <5 296>, + <12 422>, + <24 79>, + <86 183>, + <91 260>; + }; }; -- 2.42.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v5 1/2] dt-bindings: interrupt-controller: mpm: Pass MSG RAM slice through phandle 2023-08-23 11:15 ` [PATCH v5 1/2] dt-bindings: interrupt-controller: mpm: Pass MSG RAM slice through phandle Konrad Dybcio @ 2023-08-23 12:09 ` Rob Herring 0 siblings, 0 replies; 4+ messages in thread From: Rob Herring @ 2023-08-23 12:09 UTC (permalink / raw) To: Konrad Dybcio Cc: Andy Gross, linux-arm-msm, Marijn Suijten, Krzysztof Kozlowski, Marc Zyngier, devicetree, Krzysztof Kozlowski, Bjorn Andersson, linux-kernel, Conor Dooley, Thomas Gleixner, Rob Herring, Shawn Guo On Wed, 23 Aug 2023 13:15:31 +0200, Konrad Dybcio wrote: > Due to the wild nature of the Qualcomm RPM Message RAM, we can't really > use 'reg' to point to the MPM's slice of Message RAM without cutting into > an already-defined RPM MSG RAM node used for GLINK and SMEM. > > Document passing the register space as a slice of SRAM through the > qcom,rpm-msg-ram property. This also makes 'reg' deprecated. > > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> > --- > .../bindings/interrupt-controller/qcom,mpm.yaml | 52 +++++++++++++++------- > 1 file changed, 35 insertions(+), 17 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: Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.example.dtb: /example-0/remoteproc-rpm: failed to match any schema with compatible: ['qcom,msm8998-rpm-proc', 'qcom,rpm-proc'] /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.example.dtb: glink-edge: 'label' is a required property from schema $id: http://devicetree.org/schemas/remoteproc/qcom,glink-edge.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.example.dtb: glink-edge: 'qcom,remote-pid' is a required property from schema $id: http://devicetree.org/schemas/remoteproc/qcom,glink-edge.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/interrupt-controller/qcom,mpm.example.dtb: glink-edge: 'compatible', 'qcom,rpm-msg-ram' do not match any of the regexes: 'pinctrl-[0-9]+' from schema $id: http://devicetree.org/schemas/remoteproc/qcom,glink-edge.yaml# doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20230328-topic-msgram_mpm-v5-1-6e06278896b5@linaro.org The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. 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 after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v5 2/2] irqchip: irq-qcom-mpm: Support passing a slice of SRAM as reg space 2023-08-23 11:15 [PATCH v5 0/2] Resolve MPM register space situation Konrad Dybcio 2023-08-23 11:15 ` [PATCH v5 1/2] dt-bindings: interrupt-controller: mpm: Pass MSG RAM slice through phandle Konrad Dybcio @ 2023-08-23 11:15 ` Konrad Dybcio 1 sibling, 0 replies; 4+ messages in thread From: Konrad Dybcio @ 2023-08-23 11:15 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Thomas Gleixner, Marc Zyngier, Rob Herring, Krzysztof Kozlowski, Shawn Guo, Conor Dooley Cc: Marijn Suijten, linux-arm-msm, linux-kernel, devicetree, Konrad Dybcio The MPM hardware is accessible to us from the ARM CPUs through a shared memory region (RPM MSG RAM) that's also concurrently accessed by other kinds of cores on the system (like modem, ADSP etc.). Modeling this relation in a (somewhat) sane manner in the device tree basically requires us to either present the MPM as a child of said memory region (which makes little sense, as a mapped memory carveout is not a bus), define nodes which bleed their register spaces into one another, or passing their slice of the MSG RAM through some kind of a property. Go with the third option and add a way to map a region passed through the "qcom,rpm-msg-ram" property as our register space. The current way of using 'reg' is preserved for ABI reasons. Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> --- drivers/irqchip/irq-qcom-mpm.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/irqchip/irq-qcom-mpm.c b/drivers/irqchip/irq-qcom-mpm.c index 7124565234a5..7115e3056aa5 100644 --- a/drivers/irqchip/irq-qcom-mpm.c +++ b/drivers/irqchip/irq-qcom-mpm.c @@ -14,6 +14,7 @@ #include <linux/mailbox_client.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/of_address.h> #include <linux/of_platform.h> #include <linux/platform_device.h> #include <linux/pm_domain.h> @@ -322,8 +323,10 @@ static int qcom_mpm_init(struct device_node *np, struct device_node *parent) struct device *dev = &pdev->dev; struct irq_domain *parent_domain; struct generic_pm_domain *genpd; + struct device_node *msgram_np; struct qcom_mpm_priv *priv; unsigned int pin_cnt; + struct resource res; int i, irq; int ret; @@ -374,9 +377,21 @@ static int qcom_mpm_init(struct device_node *np, struct device_node *parent) raw_spin_lock_init(&priv->lock); - priv->base = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(priv->base)) - return PTR_ERR(priv->base); + /* If we have a handle to an RPM message ram partition, use it. */ + msgram_np = of_parse_phandle(np, "qcom,rpm-msg-ram", 0); + if (msgram_np) { + ret = of_address_to_resource(msgram_np, 0, &res); + /* Don't use devm_ioremap_resource, as we're accessing a shared region. */ + priv->base = devm_ioremap(dev, res.start, resource_size(&res)); + of_node_put(msgram_np); + if (IS_ERR(priv->base)) + return PTR_ERR(priv->base); + } else { + /* Otherwise, fall back to simple MMIO. */ + priv->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(priv->base)) + return PTR_ERR(priv->base); + } for (i = 0; i < priv->reg_stride; i++) { qcom_mpm_write(priv, MPM_REG_ENABLE, i, 0); -- 2.42.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-08-23 12:09 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-08-23 11:15 [PATCH v5 0/2] Resolve MPM register space situation Konrad Dybcio 2023-08-23 11:15 ` [PATCH v5 1/2] dt-bindings: interrupt-controller: mpm: Pass MSG RAM slice through phandle Konrad Dybcio 2023-08-23 12:09 ` Rob Herring 2023-08-23 11:15 ` [PATCH v5 2/2] irqchip: irq-qcom-mpm: Support passing a slice of SRAM as reg space Konrad Dybcio
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).