* [PATCH 0/6 v3] Support for fsl-mc bus and its devices in SMMU @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta This patchset defines IOMMU DT binding for fsl-mc bus and adds support in SMMU for fsl-mc bus. This patch series is dependent on patset: https://patchwork.kernel.org/patch/10317337/ These patches - Define property 'iommu-map' for fsl-mc bus (patch 1) - Integrates the fsl-mc bus with the SMMU using this IOMMU binding (patch 2,3,4) - Adds the dma configuration support for fsl-mc bus (patch 5) - Updates the fsl-mc device node with iommu/dma related changes (patch6) Changes in v2: - use iommu-map property for fsl-mc bus - rebase over patchset https://patchwork.kernel.org/patch/10317337/ and make corresponding changes for dma configuration of devices on fsl-mc bus Changes in v3: - move of_map_rid in drivers/of/address.c Nipun Gupta (6): Docs: dt: add fsl-mc iommu-map device-tree binding iommu: of: make of_pci_map_rid() available for other devices too iommu: support iommu configuration for fsl-mc devices iommu: arm-smmu: Add support for the fsl-mc bus bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++ arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 +++- drivers/iommu/arm-smmu.c | 7 ++ drivers/iommu/iommu.c | 21 +++++ drivers/iommu/of_iommu.c | 26 +++++- drivers/of/address.c | 102 +++++++++++++++++++++ drivers/of/irq.c | 7 +- drivers/pci/of.c | 101 -------------------- include/linux/fsl/mc.h | 8 ++ include/linux/iommu.h | 2 + include/linux/of_address.h | 11 +++ include/linux/of_pci.h | 10 -- 13 files changed, 234 insertions(+), 122 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 0/6 v3] Support for fsl-mc bus and its devices in SMMU @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: linux-arm-kernel This patchset defines IOMMU DT binding for fsl-mc bus and adds support in SMMU for fsl-mc bus. This patch series is dependent on patset: https://patchwork.kernel.org/patch/10317337/ These patches - Define property 'iommu-map' for fsl-mc bus (patch 1) - Integrates the fsl-mc bus with the SMMU using this IOMMU binding (patch 2,3,4) - Adds the dma configuration support for fsl-mc bus (patch 5) - Updates the fsl-mc device node with iommu/dma related changes (patch6) Changes in v2: - use iommu-map property for fsl-mc bus - rebase over patchset https://patchwork.kernel.org/patch/10317337/ and make corresponding changes for dma configuration of devices on fsl-mc bus Changes in v3: - move of_map_rid in drivers/of/address.c Nipun Gupta (6): Docs: dt: add fsl-mc iommu-map device-tree binding iommu: of: make of_pci_map_rid() available for other devices too iommu: support iommu configuration for fsl-mc devices iommu: arm-smmu: Add support for the fsl-mc bus bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++ arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 +++- drivers/iommu/arm-smmu.c | 7 ++ drivers/iommu/iommu.c | 21 +++++ drivers/iommu/of_iommu.c | 26 +++++- drivers/of/address.c | 102 +++++++++++++++++++++ drivers/of/irq.c | 7 +- drivers/pci/of.c | 101 -------------------- include/linux/fsl/mc.h | 8 ++ include/linux/iommu.h | 2 + include/linux/of_address.h | 11 +++ include/linux/of_pci.h | 10 -- 13 files changed, 234 insertions(+), 122 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta The existing IOMMU bindings cannot be used to specify the relationship between fsl-mc devices and IOMMUs. This patch adds a generic binding for mapping fsl-mc devices to IOMMUs, using iommu-map property. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt index 6611a7c..8cbed4f 100644 --- a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +++ b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt @@ -9,6 +9,25 @@ blocks that can be used to create functional hardware objects/devices such as network interfaces, crypto accelerator instances, L2 switches, etc. +For an overview of the DPAA2 architecture and fsl-mc bus see: +drivers/staging/fsl-mc/README.txt + +As described in the above overview, all DPAA2 objects in a DPRC share the +same hardware "isolation context" and a 10-bit value called an ICID +(isolation context id) is expressed by the hardware to identify +the requester. + +The generic 'iommus' property is insufficient to describe the relationship +between ICIDs and IOMMUs, so an iommu-map property is used to define +the set of possible ICIDs under a root DPRC and how they map to +an IOMMU. + +For generic IOMMU bindings, see +Documentation/devicetree/bindings/iommu/iommu.txt. + +For arm-smmu binding, see: +Documentation/devicetree/bindings/iommu/arm,smmu.txt. + Required properties: - compatible @@ -88,14 +107,34 @@ Sub-nodes: Value type: <phandle> Definition: Specifies the phandle to the PHY device node associated with the this dpmac. +Optional properties: + +- iommu-map: Maps an ICID to an IOMMU and associated iommu-specifier + data. + + The property is an arbitrary number of tuples of + (icid-base,iommu,iommu-base,length). + + Any ICID i in the interval [icid-base, icid-base + length) is + associated with the listed IOMMU, with the iommu-specifier + (i - icid-base + iommu-base). Example: + smmu: iommu@5000000 { + compatible = "arm,mmu-500"; + #iommu-cells = <2>; + stream-match-mask = <0x7C00>; + ... + }; + fsl_mc: fsl-mc@80c000000 { compatible = "fsl,qoriq-mc"; reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + /* define map for ICIDs 23-64 */ + iommu-map = <23 &smmu 23 41>; #address-cells = <3>; #size-cells = <1>; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: linux-arm-kernel The existing IOMMU bindings cannot be used to specify the relationship between fsl-mc devices and IOMMUs. This patch adds a generic binding for mapping fsl-mc devices to IOMMUs, using iommu-map property. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt index 6611a7c..8cbed4f 100644 --- a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +++ b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt @@ -9,6 +9,25 @@ blocks that can be used to create functional hardware objects/devices such as network interfaces, crypto accelerator instances, L2 switches, etc. +For an overview of the DPAA2 architecture and fsl-mc bus see: +drivers/staging/fsl-mc/README.txt + +As described in the above overview, all DPAA2 objects in a DPRC share the +same hardware "isolation context" and a 10-bit value called an ICID +(isolation context id) is expressed by the hardware to identify +the requester. + +The generic 'iommus' property is insufficient to describe the relationship +between ICIDs and IOMMUs, so an iommu-map property is used to define +the set of possible ICIDs under a root DPRC and how they map to +an IOMMU. + +For generic IOMMU bindings, see +Documentation/devicetree/bindings/iommu/iommu.txt. + +For arm-smmu binding, see: +Documentation/devicetree/bindings/iommu/arm,smmu.txt. + Required properties: - compatible @@ -88,14 +107,34 @@ Sub-nodes: Value type: <phandle> Definition: Specifies the phandle to the PHY device node associated with the this dpmac. +Optional properties: + +- iommu-map: Maps an ICID to an IOMMU and associated iommu-specifier + data. + + The property is an arbitrary number of tuples of + (icid-base,iommu,iommu-base,length). + + Any ICID i in the interval [icid-base, icid-base + length) is + associated with the listed IOMMU, with the iommu-specifier + (i - icid-base + iommu-base). Example: + smmu: iommu at 5000000 { + compatible = "arm,mmu-500"; + #iommu-cells = <2>; + stream-match-mask = <0x7C00>; + ... + }; + fsl_mc: fsl-mc at 80c000000 { compatible = "fsl,qoriq-mc"; reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + /* define map for ICIDs 23-64 */ + iommu-map = <23 &smmu 23 41>; #address-cells = <3>; #size-cells = <1>; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r The existing IOMMU bindings cannot be used to specify the relationship between fsl-mc devices and IOMMUs. This patch adds a generic binding for mapping fsl-mc devices to IOMMUs, using iommu-map property. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt index 6611a7c..8cbed4f 100644 --- a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +++ b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt @@ -9,6 +9,25 @@ blocks that can be used to create functional hardware objects/devices such as network interfaces, crypto accelerator instances, L2 switches, etc. +For an overview of the DPAA2 architecture and fsl-mc bus see: +drivers/staging/fsl-mc/README.txt + +As described in the above overview, all DPAA2 objects in a DPRC share the +same hardware "isolation context" and a 10-bit value called an ICID +(isolation context id) is expressed by the hardware to identify +the requester. + +The generic 'iommus' property is insufficient to describe the relationship +between ICIDs and IOMMUs, so an iommu-map property is used to define +the set of possible ICIDs under a root DPRC and how they map to +an IOMMU. + +For generic IOMMU bindings, see +Documentation/devicetree/bindings/iommu/iommu.txt. + +For arm-smmu binding, see: +Documentation/devicetree/bindings/iommu/arm,smmu.txt. + Required properties: - compatible @@ -88,14 +107,34 @@ Sub-nodes: Value type: <phandle> Definition: Specifies the phandle to the PHY device node associated with the this dpmac. +Optional properties: + +- iommu-map: Maps an ICID to an IOMMU and associated iommu-specifier + data. + + The property is an arbitrary number of tuples of + (icid-base,iommu,iommu-base,length). + + Any ICID i in the interval [icid-base, icid-base + length) is + associated with the listed IOMMU, with the iommu-specifier + (i - icid-base + iommu-base). Example: + smmu: iommu@5000000 { + compatible = "arm,mmu-500"; + #iommu-cells = <2>; + stream-match-mask = <0x7C00>; + ... + }; + fsl_mc: fsl-mc@80c000000 { compatible = "fsl,qoriq-mc"; reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + /* define map for ICIDs 23-64 */ + iommu-map = <23 &smmu 23 41>; #address-cells = <3>; #size-cells = <1>; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* Re: [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-27 17:20 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:20 UTC (permalink / raw) To: Nipun Gupta Cc: robin.murphy, will.deacon, mark.rutland, catalin.marinas, hch, gregkh, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li On Fri, Apr 27, 2018 at 03:57:01PM +0530, Nipun Gupta wrote: > The existing IOMMU bindings cannot be used to specify the relationship > between fsl-mc devices and IOMMUs. This patch adds a generic binding for > mapping fsl-mc devices to IOMMUs, using iommu-map property. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ > 1 file changed, 39 insertions(+) Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-27 17:20 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:20 UTC (permalink / raw) To: linux-arm-kernel On Fri, Apr 27, 2018 at 03:57:01PM +0530, Nipun Gupta wrote: > The existing IOMMU bindings cannot be used to specify the relationship > between fsl-mc devices and IOMMUs. This patch adds a generic binding for > mapping fsl-mc devices to IOMMUs, using iommu-map property. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ > 1 file changed, 39 insertions(+) Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-27 17:20 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:20 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland, devicetree, bharat.bhushan, stuyoder, frowand.list, linux-pci, gregkh, joro, linuxppc-dev, will.deacon, linux-kernel, leoyang.li, iommu, catalin.marinas, bhelgaas, shawnguo, laurentiu.tudor, robin.murphy, hch, linux-arm-kernel, m.szyprowski On Fri, Apr 27, 2018 at 03:57:01PM +0530, Nipun Gupta wrote: > The existing IOMMU bindings cannot be used to specify the relationship > between fsl-mc devices and IOMMUs. This patch adds a generic binding for > mapping fsl-mc devices to IOMMUs, using iommu-map property. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ > 1 file changed, 39 insertions(+) Reviewed-by: Rob Herring <robh@kernel.org> _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-27 17:20 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:20 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, will.deacon-5wv7dgnIgG8, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, catalin.marinas-5wv7dgnIgG8, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r On Fri, Apr 27, 2018 at 03:57:01PM +0530, Nipun Gupta wrote: > The existing IOMMU bindings cannot be used to specify the relationship > between fsl-mc devices and IOMMUs. This patch adds a generic binding for > mapping fsl-mc devices to IOMMUs, using iommu-map property. > > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > --- > .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ > 1 file changed, 39 insertions(+) Reviewed-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta iommu-map property is also used by devices with fsl-mc. This patch moves the of_pci_map_rid to generic location, so that it can be used by other busses too. 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no functional change done in the API. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 6 +-- drivers/of/address.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ drivers/of/irq.c | 7 ++-- drivers/pci/of.c | 101 -------------------------------------------- include/linux/of_address.h | 11 +++++ include/linux/of_pci.h | 10 ----- 6 files changed, 120 insertions(+), 117 deletions(-) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 5c36a8b..ea9ecef 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -21,6 +21,7 @@ #include <linux/iommu.h> #include <linux/limits.h> #include <linux/of.h> +#include <linux/of_address.h> #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> @@ -149,9 +150,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) struct of_phandle_args iommu_spec = { .args_count = 1 }; int err; - err = of_pci_map_rid(info->np, alias, "iommu-map", - "iommu-map-mask", &iommu_spec.np, - iommu_spec.args); + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", + &iommu_spec.np, iommu_spec.args); if (err) return err == -ENODEV ? NO_IOMMU : err; diff --git a/drivers/of/address.c b/drivers/of/address.c index 5334991..4163f24 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -985,3 +985,105 @@ bool of_dma_is_coherent(struct device_node *np) return false; } EXPORT_SYMBOL_GPL(of_dma_is_coherent); + +/** + * of_map_rid - Translate a requester ID through a downstream mapping. + * @np: root complex device node. + * @rid: device requester ID to map. + * @map_name: property name of the map to use. + * @map_mask_name: optional property name of the mask to use. + * @target: optional pointer to a target device node. + * @id_out: optional pointer to receive the translated ID. + * + * Given a device requester ID, look up the appropriate implementation-defined + * platform ID and/or the target device which receives transactions on that + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or + * @id_out may be NULL if only the other is required. If @target points to + * a non-NULL device node pointer, only entries targeting that node will be + * matched; if it points to a NULL value, it will receive the device node of + * the first matching target phandle, with a reference held. + * + * Return: 0 on success or a standard error code on failure. + */ +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + u32 map_mask, masked_rid; + int map_len; + const __be32 *map = NULL; + + if (!np || !map_name || (!target && !id_out)) + return -EINVAL; + + map = of_get_property(np, map_name, &map_len); + if (!map) { + if (target) + return -ENODEV; + /* Otherwise, no map implies no translation */ + *id_out = rid; + return 0; + } + + if (!map_len || map_len % (4 * sizeof(*map))) { + pr_err("%pOF: Error: Bad %s length: %d\n", np, + map_name, map_len); + return -EINVAL; + } + + /* The default is to select all bits. */ + map_mask = 0xffffffff; + + /* + * Can be overridden by "{iommu,msi}-map-mask" property. + * If of_property_read_u32() fails, the default is used. + */ + if (map_mask_name) + of_property_read_u32(np, map_mask_name, &map_mask); + + masked_rid = map_mask & rid; + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { + struct device_node *phandle_node; + u32 rid_base = be32_to_cpup(map + 0); + u32 phandle = be32_to_cpup(map + 1); + u32 out_base = be32_to_cpup(map + 2); + u32 rid_len = be32_to_cpup(map + 3); + + if (rid_base & ~map_mask) { + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", + np, map_name, map_name, + map_mask, rid_base); + return -EFAULT; + } + + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) + continue; + + phandle_node = of_find_node_by_phandle(phandle); + if (!phandle_node) + return -ENODEV; + + if (target) { + if (*target) + of_node_put(phandle_node); + else + *target = phandle_node; + + if (*target != phandle_node) + continue; + } + + if (id_out) + *id_out = masked_rid - rid_base + out_base; + + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", + np, map_name, map_mask, rid_base, out_base, + rid_len, rid, masked_rid - rid_base + out_base); + return 0; + } + + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", + np, map_name, rid, target && *target ? *target : NULL); + return -EFAULT; +} +EXPORT_SYMBOL_GPL(of_map_rid); diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 02ad93a..e9ebe1e 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -21,8 +21,9 @@ #include <linux/list.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/of_address.h> #include <linux/of_irq.h> -#include <linux/of_pci.h> +#include <linux/of_iommu.h> #include <linux/string.h> #include <linux/slab.h> @@ -588,8 +589,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, * "msi-map" property. */ for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", - "msi-map-mask", np, &rid_out)) + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", + "msi-map-mask", np, &rid_out)) break; return rid_out; } diff --git a/drivers/pci/of.c b/drivers/pci/of.c index a28355c..d2cebbe 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); #endif /* CONFIG_OF_ADDRESS */ -/** - * of_pci_map_rid - Translate a requester ID through a downstream mapping. - * @np: root complex device node. - * @rid: PCI requester ID to map. - * @map_name: property name of the map to use. - * @map_mask_name: optional property name of the mask to use. - * @target: optional pointer to a target device node. - * @id_out: optional pointer to receive the translated ID. - * - * Given a PCI requester ID, look up the appropriate implementation-defined - * platform ID and/or the target device which receives transactions on that - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or - * @id_out may be NULL if only the other is required. If @target points to - * a non-NULL device node pointer, only entries targeting that node will be - * matched; if it points to a NULL value, it will receive the device node of - * the first matching target phandle, with a reference held. - * - * Return: 0 on success or a standard error code on failure. - */ -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - u32 map_mask, masked_rid; - int map_len; - const __be32 *map = NULL; - - if (!np || !map_name || (!target && !id_out)) - return -EINVAL; - - map = of_get_property(np, map_name, &map_len); - if (!map) { - if (target) - return -ENODEV; - /* Otherwise, no map implies no translation */ - *id_out = rid; - return 0; - } - - if (!map_len || map_len % (4 * sizeof(*map))) { - pr_err("%pOF: Error: Bad %s length: %d\n", np, - map_name, map_len); - return -EINVAL; - } - - /* The default is to select all bits. */ - map_mask = 0xffffffff; - - /* - * Can be overridden by "{iommu,msi}-map-mask" property. - * If of_property_read_u32() fails, the default is used. - */ - if (map_mask_name) - of_property_read_u32(np, map_mask_name, &map_mask); - - masked_rid = map_mask & rid; - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { - struct device_node *phandle_node; - u32 rid_base = be32_to_cpup(map + 0); - u32 phandle = be32_to_cpup(map + 1); - u32 out_base = be32_to_cpup(map + 2); - u32 rid_len = be32_to_cpup(map + 3); - - if (rid_base & ~map_mask) { - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", - np, map_name, map_name, - map_mask, rid_base); - return -EFAULT; - } - - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) - continue; - - phandle_node = of_find_node_by_phandle(phandle); - if (!phandle_node) - return -ENODEV; - - if (target) { - if (*target) - of_node_put(phandle_node); - else - *target = phandle_node; - - if (*target != phandle_node) - continue; - } - - if (id_out) - *id_out = masked_rid - rid_base + out_base; - - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", - np, map_name, map_mask, rid_base, out_base, - rid_len, rid, masked_rid - rid_base + out_base); - return 0; - } - - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", - np, map_name, rid, target && *target ? *target : NULL); - return -EFAULT; -} - #if IS_ENABLED(CONFIG_OF_IRQ) /** * of_irq_parse_pci - Resolve the interrupt for a PCI device diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 30e40fb..25cd3f1 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -120,6 +120,10 @@ static inline bool of_dma_is_coherent(struct device_node *np) extern int of_address_to_resource(struct device_node *dev, int index, struct resource *r); void __iomem *of_iomap(struct device_node *node, int index); +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out); + #else static inline int of_address_to_resource(struct device_node *dev, int index, struct resource *r) @@ -131,6 +135,13 @@ static inline void __iomem *of_iomap(struct device_node *device, int index) { return NULL; } + +static inline int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + return -EINVAL; +} #endif #if defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI) diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index 091033a..a23b44a 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, int of_get_pci_domain_nr(struct device_node *node); int of_pci_get_max_link_speed(struct device_node *node); void of_pci_check_probe_only(void); -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out); #else static inline struct device_node *of_pci_find_child_device(struct device_node *parent, unsigned int devfn) @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) return -1; } -static inline int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - return -EINVAL; -} - static inline int of_pci_get_max_link_speed(struct device_node *node) { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: linux-arm-kernel iommu-map property is also used by devices with fsl-mc. This patch moves the of_pci_map_rid to generic location, so that it can be used by other busses too. 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no functional change done in the API. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 6 +-- drivers/of/address.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ drivers/of/irq.c | 7 ++-- drivers/pci/of.c | 101 -------------------------------------------- include/linux/of_address.h | 11 +++++ include/linux/of_pci.h | 10 ----- 6 files changed, 120 insertions(+), 117 deletions(-) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 5c36a8b..ea9ecef 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -21,6 +21,7 @@ #include <linux/iommu.h> #include <linux/limits.h> #include <linux/of.h> +#include <linux/of_address.h> #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> @@ -149,9 +150,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) struct of_phandle_args iommu_spec = { .args_count = 1 }; int err; - err = of_pci_map_rid(info->np, alias, "iommu-map", - "iommu-map-mask", &iommu_spec.np, - iommu_spec.args); + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", + &iommu_spec.np, iommu_spec.args); if (err) return err == -ENODEV ? NO_IOMMU : err; diff --git a/drivers/of/address.c b/drivers/of/address.c index 5334991..4163f24 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -985,3 +985,105 @@ bool of_dma_is_coherent(struct device_node *np) return false; } EXPORT_SYMBOL_GPL(of_dma_is_coherent); + +/** + * of_map_rid - Translate a requester ID through a downstream mapping. + * @np: root complex device node. + * @rid: device requester ID to map. + * @map_name: property name of the map to use. + * @map_mask_name: optional property name of the mask to use. + * @target: optional pointer to a target device node. + * @id_out: optional pointer to receive the translated ID. + * + * Given a device requester ID, look up the appropriate implementation-defined + * platform ID and/or the target device which receives transactions on that + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or + * @id_out may be NULL if only the other is required. If @target points to + * a non-NULL device node pointer, only entries targeting that node will be + * matched; if it points to a NULL value, it will receive the device node of + * the first matching target phandle, with a reference held. + * + * Return: 0 on success or a standard error code on failure. + */ +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + u32 map_mask, masked_rid; + int map_len; + const __be32 *map = NULL; + + if (!np || !map_name || (!target && !id_out)) + return -EINVAL; + + map = of_get_property(np, map_name, &map_len); + if (!map) { + if (target) + return -ENODEV; + /* Otherwise, no map implies no translation */ + *id_out = rid; + return 0; + } + + if (!map_len || map_len % (4 * sizeof(*map))) { + pr_err("%pOF: Error: Bad %s length: %d\n", np, + map_name, map_len); + return -EINVAL; + } + + /* The default is to select all bits. */ + map_mask = 0xffffffff; + + /* + * Can be overridden by "{iommu,msi}-map-mask" property. + * If of_property_read_u32() fails, the default is used. + */ + if (map_mask_name) + of_property_read_u32(np, map_mask_name, &map_mask); + + masked_rid = map_mask & rid; + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { + struct device_node *phandle_node; + u32 rid_base = be32_to_cpup(map + 0); + u32 phandle = be32_to_cpup(map + 1); + u32 out_base = be32_to_cpup(map + 2); + u32 rid_len = be32_to_cpup(map + 3); + + if (rid_base & ~map_mask) { + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", + np, map_name, map_name, + map_mask, rid_base); + return -EFAULT; + } + + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) + continue; + + phandle_node = of_find_node_by_phandle(phandle); + if (!phandle_node) + return -ENODEV; + + if (target) { + if (*target) + of_node_put(phandle_node); + else + *target = phandle_node; + + if (*target != phandle_node) + continue; + } + + if (id_out) + *id_out = masked_rid - rid_base + out_base; + + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", + np, map_name, map_mask, rid_base, out_base, + rid_len, rid, masked_rid - rid_base + out_base); + return 0; + } + + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", + np, map_name, rid, target && *target ? *target : NULL); + return -EFAULT; +} +EXPORT_SYMBOL_GPL(of_map_rid); diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 02ad93a..e9ebe1e 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -21,8 +21,9 @@ #include <linux/list.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/of_address.h> #include <linux/of_irq.h> -#include <linux/of_pci.h> +#include <linux/of_iommu.h> #include <linux/string.h> #include <linux/slab.h> @@ -588,8 +589,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, * "msi-map" property. */ for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", - "msi-map-mask", np, &rid_out)) + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", + "msi-map-mask", np, &rid_out)) break; return rid_out; } diff --git a/drivers/pci/of.c b/drivers/pci/of.c index a28355c..d2cebbe 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); #endif /* CONFIG_OF_ADDRESS */ -/** - * of_pci_map_rid - Translate a requester ID through a downstream mapping. - * @np: root complex device node. - * @rid: PCI requester ID to map. - * @map_name: property name of the map to use. - * @map_mask_name: optional property name of the mask to use. - * @target: optional pointer to a target device node. - * @id_out: optional pointer to receive the translated ID. - * - * Given a PCI requester ID, look up the appropriate implementation-defined - * platform ID and/or the target device which receives transactions on that - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or - * @id_out may be NULL if only the other is required. If @target points to - * a non-NULL device node pointer, only entries targeting that node will be - * matched; if it points to a NULL value, it will receive the device node of - * the first matching target phandle, with a reference held. - * - * Return: 0 on success or a standard error code on failure. - */ -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - u32 map_mask, masked_rid; - int map_len; - const __be32 *map = NULL; - - if (!np || !map_name || (!target && !id_out)) - return -EINVAL; - - map = of_get_property(np, map_name, &map_len); - if (!map) { - if (target) - return -ENODEV; - /* Otherwise, no map implies no translation */ - *id_out = rid; - return 0; - } - - if (!map_len || map_len % (4 * sizeof(*map))) { - pr_err("%pOF: Error: Bad %s length: %d\n", np, - map_name, map_len); - return -EINVAL; - } - - /* The default is to select all bits. */ - map_mask = 0xffffffff; - - /* - * Can be overridden by "{iommu,msi}-map-mask" property. - * If of_property_read_u32() fails, the default is used. - */ - if (map_mask_name) - of_property_read_u32(np, map_mask_name, &map_mask); - - masked_rid = map_mask & rid; - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { - struct device_node *phandle_node; - u32 rid_base = be32_to_cpup(map + 0); - u32 phandle = be32_to_cpup(map + 1); - u32 out_base = be32_to_cpup(map + 2); - u32 rid_len = be32_to_cpup(map + 3); - - if (rid_base & ~map_mask) { - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", - np, map_name, map_name, - map_mask, rid_base); - return -EFAULT; - } - - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) - continue; - - phandle_node = of_find_node_by_phandle(phandle); - if (!phandle_node) - return -ENODEV; - - if (target) { - if (*target) - of_node_put(phandle_node); - else - *target = phandle_node; - - if (*target != phandle_node) - continue; - } - - if (id_out) - *id_out = masked_rid - rid_base + out_base; - - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", - np, map_name, map_mask, rid_base, out_base, - rid_len, rid, masked_rid - rid_base + out_base); - return 0; - } - - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", - np, map_name, rid, target && *target ? *target : NULL); - return -EFAULT; -} - #if IS_ENABLED(CONFIG_OF_IRQ) /** * of_irq_parse_pci - Resolve the interrupt for a PCI device diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 30e40fb..25cd3f1 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -120,6 +120,10 @@ static inline bool of_dma_is_coherent(struct device_node *np) extern int of_address_to_resource(struct device_node *dev, int index, struct resource *r); void __iomem *of_iomap(struct device_node *node, int index); +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out); + #else static inline int of_address_to_resource(struct device_node *dev, int index, struct resource *r) @@ -131,6 +135,13 @@ static inline void __iomem *of_iomap(struct device_node *device, int index) { return NULL; } + +static inline int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + return -EINVAL; +} #endif #if defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI) diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index 091033a..a23b44a 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, int of_get_pci_domain_nr(struct device_node *node); int of_pci_get_max_link_speed(struct device_node *node); void of_pci_check_probe_only(void); -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out); #else static inline struct device_node *of_pci_find_child_device(struct device_node *parent, unsigned int devfn) @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) return -1; } -static inline int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - return -EINVAL; -} - static inline int of_pci_get_max_link_speed(struct device_node *node) { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r iommu-map property is also used by devices with fsl-mc. This patch moves the of_pci_map_rid to generic location, so that it can be used by other busses too. 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no functional change done in the API. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/iommu/of_iommu.c | 6 +-- drivers/of/address.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ drivers/of/irq.c | 7 ++-- drivers/pci/of.c | 101 -------------------------------------------- include/linux/of_address.h | 11 +++++ include/linux/of_pci.h | 10 ----- 6 files changed, 120 insertions(+), 117 deletions(-) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 5c36a8b..ea9ecef 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -21,6 +21,7 @@ #include <linux/iommu.h> #include <linux/limits.h> #include <linux/of.h> +#include <linux/of_address.h> #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> @@ -149,9 +150,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) struct of_phandle_args iommu_spec = { .args_count = 1 }; int err; - err = of_pci_map_rid(info->np, alias, "iommu-map", - "iommu-map-mask", &iommu_spec.np, - iommu_spec.args); + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", + &iommu_spec.np, iommu_spec.args); if (err) return err == -ENODEV ? NO_IOMMU : err; diff --git a/drivers/of/address.c b/drivers/of/address.c index 5334991..4163f24 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -985,3 +985,105 @@ bool of_dma_is_coherent(struct device_node *np) return false; } EXPORT_SYMBOL_GPL(of_dma_is_coherent); + +/** + * of_map_rid - Translate a requester ID through a downstream mapping. + * @np: root complex device node. + * @rid: device requester ID to map. + * @map_name: property name of the map to use. + * @map_mask_name: optional property name of the mask to use. + * @target: optional pointer to a target device node. + * @id_out: optional pointer to receive the translated ID. + * + * Given a device requester ID, look up the appropriate implementation-defined + * platform ID and/or the target device which receives transactions on that + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or + * @id_out may be NULL if only the other is required. If @target points to + * a non-NULL device node pointer, only entries targeting that node will be + * matched; if it points to a NULL value, it will receive the device node of + * the first matching target phandle, with a reference held. + * + * Return: 0 on success or a standard error code on failure. + */ +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + u32 map_mask, masked_rid; + int map_len; + const __be32 *map = NULL; + + if (!np || !map_name || (!target && !id_out)) + return -EINVAL; + + map = of_get_property(np, map_name, &map_len); + if (!map) { + if (target) + return -ENODEV; + /* Otherwise, no map implies no translation */ + *id_out = rid; + return 0; + } + + if (!map_len || map_len % (4 * sizeof(*map))) { + pr_err("%pOF: Error: Bad %s length: %d\n", np, + map_name, map_len); + return -EINVAL; + } + + /* The default is to select all bits. */ + map_mask = 0xffffffff; + + /* + * Can be overridden by "{iommu,msi}-map-mask" property. + * If of_property_read_u32() fails, the default is used. + */ + if (map_mask_name) + of_property_read_u32(np, map_mask_name, &map_mask); + + masked_rid = map_mask & rid; + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { + struct device_node *phandle_node; + u32 rid_base = be32_to_cpup(map + 0); + u32 phandle = be32_to_cpup(map + 1); + u32 out_base = be32_to_cpup(map + 2); + u32 rid_len = be32_to_cpup(map + 3); + + if (rid_base & ~map_mask) { + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", + np, map_name, map_name, + map_mask, rid_base); + return -EFAULT; + } + + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) + continue; + + phandle_node = of_find_node_by_phandle(phandle); + if (!phandle_node) + return -ENODEV; + + if (target) { + if (*target) + of_node_put(phandle_node); + else + *target = phandle_node; + + if (*target != phandle_node) + continue; + } + + if (id_out) + *id_out = masked_rid - rid_base + out_base; + + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", + np, map_name, map_mask, rid_base, out_base, + rid_len, rid, masked_rid - rid_base + out_base); + return 0; + } + + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", + np, map_name, rid, target && *target ? *target : NULL); + return -EFAULT; +} +EXPORT_SYMBOL_GPL(of_map_rid); diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 02ad93a..e9ebe1e 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -21,8 +21,9 @@ #include <linux/list.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/of_address.h> #include <linux/of_irq.h> -#include <linux/of_pci.h> +#include <linux/of_iommu.h> #include <linux/string.h> #include <linux/slab.h> @@ -588,8 +589,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, * "msi-map" property. */ for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", - "msi-map-mask", np, &rid_out)) + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", + "msi-map-mask", np, &rid_out)) break; return rid_out; } diff --git a/drivers/pci/of.c b/drivers/pci/of.c index a28355c..d2cebbe 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); #endif /* CONFIG_OF_ADDRESS */ -/** - * of_pci_map_rid - Translate a requester ID through a downstream mapping. - * @np: root complex device node. - * @rid: PCI requester ID to map. - * @map_name: property name of the map to use. - * @map_mask_name: optional property name of the mask to use. - * @target: optional pointer to a target device node. - * @id_out: optional pointer to receive the translated ID. - * - * Given a PCI requester ID, look up the appropriate implementation-defined - * platform ID and/or the target device which receives transactions on that - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or - * @id_out may be NULL if only the other is required. If @target points to - * a non-NULL device node pointer, only entries targeting that node will be - * matched; if it points to a NULL value, it will receive the device node of - * the first matching target phandle, with a reference held. - * - * Return: 0 on success or a standard error code on failure. - */ -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - u32 map_mask, masked_rid; - int map_len; - const __be32 *map = NULL; - - if (!np || !map_name || (!target && !id_out)) - return -EINVAL; - - map = of_get_property(np, map_name, &map_len); - if (!map) { - if (target) - return -ENODEV; - /* Otherwise, no map implies no translation */ - *id_out = rid; - return 0; - } - - if (!map_len || map_len % (4 * sizeof(*map))) { - pr_err("%pOF: Error: Bad %s length: %d\n", np, - map_name, map_len); - return -EINVAL; - } - - /* The default is to select all bits. */ - map_mask = 0xffffffff; - - /* - * Can be overridden by "{iommu,msi}-map-mask" property. - * If of_property_read_u32() fails, the default is used. - */ - if (map_mask_name) - of_property_read_u32(np, map_mask_name, &map_mask); - - masked_rid = map_mask & rid; - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { - struct device_node *phandle_node; - u32 rid_base = be32_to_cpup(map + 0); - u32 phandle = be32_to_cpup(map + 1); - u32 out_base = be32_to_cpup(map + 2); - u32 rid_len = be32_to_cpup(map + 3); - - if (rid_base & ~map_mask) { - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", - np, map_name, map_name, - map_mask, rid_base); - return -EFAULT; - } - - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) - continue; - - phandle_node = of_find_node_by_phandle(phandle); - if (!phandle_node) - return -ENODEV; - - if (target) { - if (*target) - of_node_put(phandle_node); - else - *target = phandle_node; - - if (*target != phandle_node) - continue; - } - - if (id_out) - *id_out = masked_rid - rid_base + out_base; - - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", - np, map_name, map_mask, rid_base, out_base, - rid_len, rid, masked_rid - rid_base + out_base); - return 0; - } - - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", - np, map_name, rid, target && *target ? *target : NULL); - return -EFAULT; -} - #if IS_ENABLED(CONFIG_OF_IRQ) /** * of_irq_parse_pci - Resolve the interrupt for a PCI device diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 30e40fb..25cd3f1 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -120,6 +120,10 @@ static inline bool of_dma_is_coherent(struct device_node *np) extern int of_address_to_resource(struct device_node *dev, int index, struct resource *r); void __iomem *of_iomap(struct device_node *node, int index); +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out); + #else static inline int of_address_to_resource(struct device_node *dev, int index, struct resource *r) @@ -131,6 +135,13 @@ static inline void __iomem *of_iomap(struct device_node *device, int index) { return NULL; } + +static inline int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + return -EINVAL; +} #endif #if defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI) diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index 091033a..a23b44a 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, int of_get_pci_domain_nr(struct device_node *node); int of_pci_get_max_link_speed(struct device_node *node); void of_pci_check_probe_only(void); -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out); #else static inline struct device_node *of_pci_find_child_device(struct device_node *parent, unsigned int devfn) @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) return -1; } -static inline int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - return -EINVAL; -} - static inline int of_pci_get_max_link_speed(struct device_node *node) { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-27 17:15 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:15 UTC (permalink / raw) To: Nipun Gupta Cc: robin.murphy, will.deacon, mark.rutland, catalin.marinas, hch, gregkh, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/iommu/of_iommu.c | 6 +-- > drivers/of/address.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 7 ++-- > drivers/pci/of.c | 101 -------------------------------------------- > include/linux/of_address.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 120 insertions(+), 117 deletions(-) of/address.c isn't really the best fit either, though I don't have a better suggestion. I'm guessing this breaks on Sparc which doesn't build of/address.c. I guess move it to base.c and of.h if that is the case. Rob ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-27 17:15 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:15 UTC (permalink / raw) To: linux-arm-kernel On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/iommu/of_iommu.c | 6 +-- > drivers/of/address.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 7 ++-- > drivers/pci/of.c | 101 -------------------------------------------- > include/linux/of_address.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 120 insertions(+), 117 deletions(-) of/address.c isn't really the best fit either, though I don't have a better suggestion. I'm guessing this breaks on Sparc which doesn't build of/address.c. I guess move it to base.c and of.h if that is the case. Rob ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-27 17:15 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:15 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland, devicetree, bharat.bhushan, stuyoder, frowand.list, linux-pci, gregkh, joro, linuxppc-dev, will.deacon, linux-kernel, leoyang.li, iommu, catalin.marinas, bhelgaas, shawnguo, laurentiu.tudor, robin.murphy, hch, linux-arm-kernel, m.szyprowski On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/iommu/of_iommu.c | 6 +-- > drivers/of/address.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 7 ++-- > drivers/pci/of.c | 101 -------------------------------------------- > include/linux/of_address.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 120 insertions(+), 117 deletions(-) of/address.c isn't really the best fit either, though I don't have a better suggestion. I'm guessing this breaks on Sparc which doesn't build of/address.c. I guess move it to base.c and of.h if that is the case. Rob _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-27 17:15 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-04-27 17:15 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, will.deacon-5wv7dgnIgG8, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, catalin.marinas-5wv7dgnIgG8, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > --- > drivers/iommu/of_iommu.c | 6 +-- > drivers/of/address.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 7 ++-- > drivers/pci/of.c | 101 -------------------------------------------- > include/linux/of_address.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 120 insertions(+), 117 deletions(-) of/address.c isn't really the best fit either, though I don't have a better suggestion. I'm guessing this breaks on Sparc which doesn't build of/address.c. I guess move it to base.c and of.h if that is the case. Rob ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too 2018-04-27 17:15 ` Rob Herring ` (2 preceding siblings ...) (?) @ 2018-04-30 3:27 ` Nipun Gupta -1 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 3:27 UTC (permalink / raw) To: Rob Herring Cc: robin.murphy, will.deacon, mark.rutland, catalin.marinas, hch, gregkh, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Laurentiu Tudor, Leo Li > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, April 27, 2018 10:46 PM > To: Nipun Gupta <nipun.gupta@nxp.com> > Cc: robin.murphy@arm.com; will.deacon@arm.com; mark.rutland@arm.com; > catalin.marinas@arm.com; hch@lst.de; gregkh@linuxfoundation.org; > joro@8bytes.org; m.szyprowski@samsung.com; shawnguo@kernel.org; > frowand.list@gmail.com; bhelgaas@google.com; iommu@lists.linux- > foundation.org; linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linuxppc-dev@lists.ozlabs.org; linux- > pci@vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder@gmail.com; Laurentiu Tudor <laurentiu.tudor@nxp.com>; Leo Li > <leoyang.li@nxp.com> > Subject: Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for > other devices too > > On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > > iommu-map property is also used by devices with fsl-mc. This > > patch moves the of_pci_map_rid to generic location, so that it > > can be used by other busses too. > > > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > > functional change done in the API. > > > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/iommu/of_iommu.c | 6 +-- > > drivers/of/address.c | 102 > +++++++++++++++++++++++++++++++++++++++++++++ > > drivers/of/irq.c | 7 ++-- > > drivers/pci/of.c | 101 -------------------------------------------- > > include/linux/of_address.h | 11 +++++ > > include/linux/of_pci.h | 10 ----- > > 6 files changed, 120 insertions(+), 117 deletions(-) > > of/address.c isn't really the best fit either, though I don't have a > better suggestion. > > I'm guessing this breaks on Sparc which doesn't build of/address.c. > I guess move it to base.c and of.h if that is the case. Sure, that makes sense. Thank you for the suggestion !! I'll spin off new version with this change. Regards, Nipun > > Rob ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 3:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 3:27 UTC (permalink / raw) To: linux-arm-kernel > -----Original Message----- > From: Rob Herring [mailto:robh at kernel.org] > Sent: Friday, April 27, 2018 10:46 PM > To: Nipun Gupta <nipun.gupta@nxp.com> > Cc: robin.murphy at arm.com; will.deacon at arm.com; mark.rutland at arm.com; > catalin.marinas at arm.com; hch at lst.de; gregkh at linuxfoundation.org; > joro at 8bytes.org; m.szyprowski at samsung.com; shawnguo at kernel.org; > frowand.list at gmail.com; bhelgaas at google.com; iommu at lists.linux- > foundation.org; linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; > linux-arm-kernel at lists.infradead.org; linuxppc-dev at lists.ozlabs.org; linux- > pci at vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder at gmail.com; Laurentiu Tudor <laurentiu.tudor@nxp.com>; Leo Li > <leoyang.li@nxp.com> > Subject: Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for > other devices too > > On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > > iommu-map property is also used by devices with fsl-mc. This > > patch moves the of_pci_map_rid to generic location, so that it > > can be used by other busses too. > > > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > > functional change done in the API. > > > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/iommu/of_iommu.c | 6 +-- > > drivers/of/address.c | 102 > +++++++++++++++++++++++++++++++++++++++++++++ > > drivers/of/irq.c | 7 ++-- > > drivers/pci/of.c | 101 -------------------------------------------- > > include/linux/of_address.h | 11 +++++ > > include/linux/of_pci.h | 10 ----- > > 6 files changed, 120 insertions(+), 117 deletions(-) > > of/address.c isn't really the best fit either, though I don't have a > better suggestion. > > I'm guessing this breaks on Sparc which doesn't build of/address.c. > I guess move it to base.c and of.h if that is the case. Sure, that makes sense. Thank you for the suggestion !! I'll spin off new version with this change. Regards, Nipun > > Rob ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 3:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 3:27 UTC (permalink / raw) To: Rob Herring Cc: robin.murphy, will.deacon, mark.rutland, catalin.marinas, hch, gregkh, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Laurentiu Tudor, Leo Li > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, April 27, 2018 10:46 PM > To: Nipun Gupta <nipun.gupta@nxp.com> > Cc: robin.murphy@arm.com; will.deacon@arm.com; mark.rutland@arm.com; > catalin.marinas@arm.com; hch@lst.de; gregkh@linuxfoundation.org; > joro@8bytes.org; m.szyprowski@samsung.com; shawnguo@kernel.org; > frowand.list@gmail.com; bhelgaas@google.com; iommu@lists.linux- > foundation.org; linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linuxppc-dev@lists.ozlabs.org; linu= x- > pci@vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder@gmail.com; Laurentiu Tudor <laurentiu.tudor@nxp.com>; Leo Li > <leoyang.li@nxp.com> > Subject: Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available fo= r > other devices too >=20 > On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > > iommu-map property is also used by devices with fsl-mc. This > > patch moves the of_pci_map_rid to generic location, so that it > > can be used by other busses too. > > > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > > functional change done in the API. > > > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/iommu/of_iommu.c | 6 +-- > > drivers/of/address.c | 102 > +++++++++++++++++++++++++++++++++++++++++++++ > > drivers/of/irq.c | 7 ++-- > > drivers/pci/of.c | 101 -------------------------------------= ------- > > include/linux/of_address.h | 11 +++++ > > include/linux/of_pci.h | 10 ----- > > 6 files changed, 120 insertions(+), 117 deletions(-) >=20 > of/address.c isn't really the best fit either, though I don't have a > better suggestion. >=20 > I'm guessing this breaks on Sparc which doesn't build of/address.c. > I guess move it to base.c and of.h if that is the case. Sure, that makes sense. Thank you for the suggestion !! I'll spin off new version with this change. Regards, Nipun >=20 > Rob ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 3:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 3:27 UTC (permalink / raw) To: Rob Herring Cc: mark.rutland, devicetree, Bharat Bhushan, stuyoder, frowand.list, linux-pci, gregkh, joro, linuxppc-dev, will.deacon, linux-kernel, Leo Li, iommu, catalin.marinas, bhelgaas, shawnguo, Laurentiu Tudor, robin.murphy, hch, linux-arm-kernel, m.szyprowski > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, April 27, 2018 10:46 PM > To: Nipun Gupta <nipun.gupta@nxp.com> > Cc: robin.murphy@arm.com; will.deacon@arm.com; mark.rutland@arm.com; > catalin.marinas@arm.com; hch@lst.de; gregkh@linuxfoundation.org; > joro@8bytes.org; m.szyprowski@samsung.com; shawnguo@kernel.org; > frowand.list@gmail.com; bhelgaas@google.com; iommu@lists.linux- > foundation.org; linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linuxppc-dev@lists.ozlabs.org; linux- > pci@vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder@gmail.com; Laurentiu Tudor <laurentiu.tudor@nxp.com>; Leo Li > <leoyang.li@nxp.com> > Subject: Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for > other devices too > > On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > > iommu-map property is also used by devices with fsl-mc. This > > patch moves the of_pci_map_rid to generic location, so that it > > can be used by other busses too. > > > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > > functional change done in the API. > > > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/iommu/of_iommu.c | 6 +-- > > drivers/of/address.c | 102 > +++++++++++++++++++++++++++++++++++++++++++++ > > drivers/of/irq.c | 7 ++-- > > drivers/pci/of.c | 101 -------------------------------------------- > > include/linux/of_address.h | 11 +++++ > > include/linux/of_pci.h | 10 ----- > > 6 files changed, 120 insertions(+), 117 deletions(-) > > of/address.c isn't really the best fit either, though I don't have a > better suggestion. > > I'm guessing this breaks on Sparc which doesn't build of/address.c. > I guess move it to base.c and of.h if that is the case. Sure, that makes sense. Thank you for the suggestion !! I'll spin off new version with this change. Regards, Nipun > > Rob _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 3:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 3:27 UTC (permalink / raw) To: Rob Herring Cc: mark.rutland-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, will.deacon-5wv7dgnIgG8, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Leo Li, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, catalin.marinas-5wv7dgnIgG8, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r > -----Original Message----- > From: Rob Herring [mailto:robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org] > Sent: Friday, April 27, 2018 10:46 PM > To: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > Cc: robin.murphy-5wv7dgnIgG8@public.gmane.org; will.deacon-5wv7dgnIgG8@public.gmane.org; mark.rutland-5wv7dgnIgG8@public.gmane.org; > catalin.marinas-5wv7dgnIgG8@public.gmane.org; hch-jcswGhMUV9g@public.gmane.org; gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org; > joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org; shawnguo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org; > frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org; bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org; iommu-cunTk1MwBs/ROKNJybVBZg@public.gmane.org > foundation.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; > linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org; linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org; linux- > pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; Bharat Bhushan <bharat.bhushan-3arQi8VN3Tc@public.gmane.org>; > stuyoder-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org; Laurentiu Tudor <laurentiu.tudor-3arQi8VN3Tc@public.gmane.org>; Leo Li > <leoyang.li-3arQi8VN3Tc@public.gmane.org> > Subject: Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for > other devices too > > On Fri, Apr 27, 2018 at 03:57:02PM +0530, Nipun Gupta wrote: > > iommu-map property is also used by devices with fsl-mc. This > > patch moves the of_pci_map_rid to generic location, so that it > > can be used by other busses too. > > > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > > functional change done in the API. > > > > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > > --- > > drivers/iommu/of_iommu.c | 6 +-- > > drivers/of/address.c | 102 > +++++++++++++++++++++++++++++++++++++++++++++ > > drivers/of/irq.c | 7 ++-- > > drivers/pci/of.c | 101 -------------------------------------------- > > include/linux/of_address.h | 11 +++++ > > include/linux/of_pci.h | 10 ----- > > 6 files changed, 120 insertions(+), 117 deletions(-) > > of/address.c isn't really the best fit either, though I don't have a > better suggestion. > > I'm guessing this breaks on Sparc which doesn't build of/address.c. > I guess move it to base.c and of.h if that is the case. Sure, that makes sense. Thank you for the suggestion !! I'll spin off new version with this change. Regards, Nipun > > Rob ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-28 8:17 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-04-28 8:17 UTC (permalink / raw) To: Nipun Gupta Cc: kbuild-all, robin.murphy, will.deacon, mark.rutland, catalin.marinas, hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta [-- Attachment #1: Type: text/plain, Size: 1623 bytes --] Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc2 next-20180426] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Docs-dt-add-fsl-mc-iommu-map-device-tree-binding/20180428-111415 config: sparc64-allyesconfig (attached as .config) compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=sparc64 All errors (new ones prefixed by >>): `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o drivers/iommu/of_iommu.o: In function `of_pci_iommu_init': >> of_iommu.c:(.text+0x398): undefined reference to `of_map_rid' --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 53265 bytes --] ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-28 8:17 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-04-28 8:17 UTC (permalink / raw) To: linux-arm-kernel Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc2 next-20180426] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Docs-dt-add-fsl-mc-iommu-map-device-tree-binding/20180428-111415 config: sparc64-allyesconfig (attached as .config) compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=sparc64 All errors (new ones prefixed by >>): `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o drivers/iommu/of_iommu.o: In function `of_pci_iommu_init': >> of_iommu.c:(.text+0x398): undefined reference to `of_map_rid' --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -------------- next part -------------- A non-text attachment was scrubbed... Name: .config.gz Type: application/gzip Size: 53265 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20180428/dc7e08af/attachment-0001.gz> ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-28 8:17 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-04-28 8:17 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland, stuyoder, linux-pci, will.deacon, shawnguo, bharat.bhushan, hch, m.szyprowski, frowand.list, joro, catalin.marinas, devicetree, robin.murphy, robh+dt, Nipun Gupta, bhelgaas, linux-arm-kernel, laurentiu.tudor, gregkh, linux-kernel, leoyang.li, iommu, kbuild-all, linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 1623 bytes --] Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc2 next-20180426] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Docs-dt-add-fsl-mc-iommu-map-device-tree-binding/20180428-111415 config: sparc64-allyesconfig (attached as .config) compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=sparc64 All errors (new ones prefixed by >>): `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o drivers/iommu/of_iommu.o: In function `of_pci_iommu_init': >> of_iommu.c:(.text+0x398): undefined reference to `of_map_rid' --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 53265 bytes --] [-- Attachment #3: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-28 8:17 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-04-28 8:17 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, will.deacon-5wv7dgnIgG8, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, catalin.marinas-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, kbuild-all-JC7UmRfGjtg, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ [-- Attachment #1: Type: text/plain, Size: 1623 bytes --] Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc2 next-20180426] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Docs-dt-add-fsl-mc-iommu-map-device-tree-binding/20180428-111415 config: sparc64-allyesconfig (attached as .config) compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=sparc64 All errors (new ones prefixed by >>): `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o `.exit.data' referenced in section `.exit.text' of drivers/tty/n_hdlc.o: defined in discarded section `.exit.data' of drivers/tty/n_hdlc.o drivers/iommu/of_iommu.o: In function `of_pci_iommu_init': >> of_iommu.c:(.text+0x398): undefined reference to `of_map_rid' --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 53265 bytes --] [-- Attachment #3: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 3/6 v3] iommu: support iommu configuration for fsl-mc devices @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index ea9ecef..3687882 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -25,6 +25,7 @@ #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> +#include <linux/fsl/mc.h> #define NO_IOMMU 1 @@ -160,6 +161,23 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) return err; } +static int of_fsl_mc_iommu_init(struct fsl_mc_device *mc_dev, + struct device_node *master_np) +{ + struct of_phandle_args iommu_spec = { .args_count = 1 }; + int err; + + err = of_map_rid(master_np, mc_dev->icid, "iommu-map", + "iommu-map-mask", &iommu_spec.np, + iommu_spec.args); + if (err) + return err == -ENODEV ? NO_IOMMU : err; + + err = of_iommu_xlate(&mc_dev->dev, &iommu_spec); + of_node_put(iommu_spec.np); + return err; +} + const struct iommu_ops *of_iommu_configure(struct device *dev, struct device_node *master_np) { @@ -191,6 +209,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, err = pci_for_each_dma_alias(to_pci_dev(dev), of_pci_iommu_init, &info); + } else if (dev_is_fsl_mc(dev)) { + err = of_fsl_mc_iommu_init(to_fsl_mc_device(dev), master_np); } else { struct of_phandle_args iommu_spec; int idx = 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 3/6 v3] iommu: support iommu configuration for fsl-mc devices @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index ea9ecef..3687882 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -25,6 +25,7 @@ #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> +#include <linux/fsl/mc.h> #define NO_IOMMU 1 @@ -160,6 +161,23 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) return err; } +static int of_fsl_mc_iommu_init(struct fsl_mc_device *mc_dev, + struct device_node *master_np) +{ + struct of_phandle_args iommu_spec = { .args_count = 1 }; + int err; + + err = of_map_rid(master_np, mc_dev->icid, "iommu-map", + "iommu-map-mask", &iommu_spec.np, + iommu_spec.args); + if (err) + return err == -ENODEV ? NO_IOMMU : err; + + err = of_iommu_xlate(&mc_dev->dev, &iommu_spec); + of_node_put(iommu_spec.np); + return err; +} + const struct iommu_ops *of_iommu_configure(struct device *dev, struct device_node *master_np) { @@ -191,6 +209,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, err = pci_for_each_dma_alias(to_pci_dev(dev), of_pci_iommu_init, &info); + } else if (dev_is_fsl_mc(dev)) { + err = of_fsl_mc_iommu_init(to_fsl_mc_device(dev), master_np); } else { struct of_phandle_args iommu_spec; int idx = 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 3/6 v3] iommu: support iommu configuration for fsl-mc devices @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/iommu/of_iommu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index ea9ecef..3687882 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -25,6 +25,7 @@ #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> +#include <linux/fsl/mc.h> #define NO_IOMMU 1 @@ -160,6 +161,23 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) return err; } +static int of_fsl_mc_iommu_init(struct fsl_mc_device *mc_dev, + struct device_node *master_np) +{ + struct of_phandle_args iommu_spec = { .args_count = 1 }; + int err; + + err = of_map_rid(master_np, mc_dev->icid, "iommu-map", + "iommu-map-mask", &iommu_spec.np, + iommu_spec.args); + if (err) + return err == -ENODEV ? NO_IOMMU : err; + + err = of_iommu_xlate(&mc_dev->dev, &iommu_spec); + of_node_put(iommu_spec.np); + return err; +} + const struct iommu_ops *of_iommu_configure(struct device *dev, struct device_node *master_np) { @@ -191,6 +209,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, err = pci_for_each_dma_alias(to_pci_dev(dev), of_pci_iommu_init, &info); + } else if (dev_is_fsl_mc(dev)) { + err = of_fsl_mc_iommu_init(to_fsl_mc_device(dev), master_np); } else { struct of_phandle_args iommu_spec; int idx = 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 4/6 v3] iommu: arm-smmu: Add support for the fsl-mc bus @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta Implement bus specific support for the fsl-mc bus including registering arm_smmu_ops and bus specific device add operations. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/arm-smmu.c | 7 +++++++ drivers/iommu/iommu.c | 21 +++++++++++++++++++++ include/linux/fsl/mc.h | 8 ++++++++ include/linux/iommu.h | 2 ++ 4 files changed, 38 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 69e7c60..e1d5090 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -52,6 +52,7 @@ #include <linux/spinlock.h> #include <linux/amba/bus.h> +#include <linux/fsl/mc.h> #include "io-pgtable.h" #include "arm-smmu-regs.h" @@ -1459,6 +1460,8 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) if (dev_is_pci(dev)) group = pci_device_group(dev); + else if (dev_is_fsl_mc(dev)) + group = fsl_mc_device_group(dev); else group = generic_device_group(dev); @@ -2037,6 +2040,10 @@ static void arm_smmu_bus_init(void) bus_set_iommu(&pci_bus_type, &arm_smmu_ops); } #endif +#ifdef CONFIG_FSL_MC_BUS + if (!iommu_present(&fsl_mc_bus_type)) + bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops); +#endif } static int arm_smmu_device_probe(struct platform_device *pdev) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d2aa2320..6d4ce35 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -32,6 +32,7 @@ #include <linux/pci.h> #include <linux/bitops.h> #include <linux/property.h> +#include <linux/fsl/mc.h> #include <trace/events/iommu.h> static struct kset *iommu_group_kset; @@ -987,6 +988,26 @@ struct iommu_group *pci_device_group(struct device *dev) return iommu_group_alloc(); } +/* Get the IOMMU group for device on fsl-mc bus */ +struct iommu_group *fsl_mc_device_group(struct device *dev) +{ + struct device *cont_dev = fsl_mc_cont_dev(dev); + struct iommu_group *group; + + /* Container device is responsible for creating the iommu group */ + if (fsl_mc_is_cont_dev(dev)) { + group = iommu_group_alloc(); + if (IS_ERR(group)) + return NULL; + } else { + get_device(cont_dev); + group = iommu_group_get(cont_dev); + put_device(cont_dev); + } + + return group; +} + /** * iommu_group_get_for_dev - Find or create the IOMMU group for a device * @dev: target device diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h index f27cb14..dddaca1 100644 --- a/include/linux/fsl/mc.h +++ b/include/linux/fsl/mc.h @@ -351,6 +351,14 @@ struct fsl_mc_io { #define dev_is_fsl_mc(_dev) (0) #endif +/* Macro to check if a device is a container device */ +#define fsl_mc_is_cont_dev(_dev) (to_fsl_mc_device(_dev)->flags & \ + FSL_MC_IS_DPRC) + +/* Macro to get the container device of a MC device */ +#define fsl_mc_cont_dev(_dev) (fsl_mc_is_cont_dev(_dev) ? \ + (_dev) : (_dev)->parent) + /* * module_fsl_mc_driver() - Helper macro for drivers that don't do * anything special in module init/exit. This eliminates a lot of diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 19938ee..2981200 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -389,6 +389,8 @@ static inline size_t iommu_map_sg(struct iommu_domain *domain, extern struct iommu_group *pci_device_group(struct device *dev); /* Generic device grouping function */ extern struct iommu_group *generic_device_group(struct device *dev); +/* FSL-MC device grouping function */ +struct iommu_group *fsl_mc_device_group(struct device *dev); /** * struct iommu_fwspec - per-device IOMMU instance data -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 4/6 v3] iommu: arm-smmu: Add support for the fsl-mc bus @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: linux-arm-kernel Implement bus specific support for the fsl-mc bus including registering arm_smmu_ops and bus specific device add operations. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/arm-smmu.c | 7 +++++++ drivers/iommu/iommu.c | 21 +++++++++++++++++++++ include/linux/fsl/mc.h | 8 ++++++++ include/linux/iommu.h | 2 ++ 4 files changed, 38 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 69e7c60..e1d5090 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -52,6 +52,7 @@ #include <linux/spinlock.h> #include <linux/amba/bus.h> +#include <linux/fsl/mc.h> #include "io-pgtable.h" #include "arm-smmu-regs.h" @@ -1459,6 +1460,8 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) if (dev_is_pci(dev)) group = pci_device_group(dev); + else if (dev_is_fsl_mc(dev)) + group = fsl_mc_device_group(dev); else group = generic_device_group(dev); @@ -2037,6 +2040,10 @@ static void arm_smmu_bus_init(void) bus_set_iommu(&pci_bus_type, &arm_smmu_ops); } #endif +#ifdef CONFIG_FSL_MC_BUS + if (!iommu_present(&fsl_mc_bus_type)) + bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops); +#endif } static int arm_smmu_device_probe(struct platform_device *pdev) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d2aa2320..6d4ce35 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -32,6 +32,7 @@ #include <linux/pci.h> #include <linux/bitops.h> #include <linux/property.h> +#include <linux/fsl/mc.h> #include <trace/events/iommu.h> static struct kset *iommu_group_kset; @@ -987,6 +988,26 @@ struct iommu_group *pci_device_group(struct device *dev) return iommu_group_alloc(); } +/* Get the IOMMU group for device on fsl-mc bus */ +struct iommu_group *fsl_mc_device_group(struct device *dev) +{ + struct device *cont_dev = fsl_mc_cont_dev(dev); + struct iommu_group *group; + + /* Container device is responsible for creating the iommu group */ + if (fsl_mc_is_cont_dev(dev)) { + group = iommu_group_alloc(); + if (IS_ERR(group)) + return NULL; + } else { + get_device(cont_dev); + group = iommu_group_get(cont_dev); + put_device(cont_dev); + } + + return group; +} + /** * iommu_group_get_for_dev - Find or create the IOMMU group for a device * @dev: target device diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h index f27cb14..dddaca1 100644 --- a/include/linux/fsl/mc.h +++ b/include/linux/fsl/mc.h @@ -351,6 +351,14 @@ struct fsl_mc_io { #define dev_is_fsl_mc(_dev) (0) #endif +/* Macro to check if a device is a container device */ +#define fsl_mc_is_cont_dev(_dev) (to_fsl_mc_device(_dev)->flags & \ + FSL_MC_IS_DPRC) + +/* Macro to get the container device of a MC device */ +#define fsl_mc_cont_dev(_dev) (fsl_mc_is_cont_dev(_dev) ? \ + (_dev) : (_dev)->parent) + /* * module_fsl_mc_driver() - Helper macro for drivers that don't do * anything special in module init/exit. This eliminates a lot of diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 19938ee..2981200 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -389,6 +389,8 @@ static inline size_t iommu_map_sg(struct iommu_domain *domain, extern struct iommu_group *pci_device_group(struct device *dev); /* Generic device grouping function */ extern struct iommu_group *generic_device_group(struct device *dev); +/* FSL-MC device grouping function */ +struct iommu_group *fsl_mc_device_group(struct device *dev); /** * struct iommu_fwspec - per-device IOMMU instance data -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 4/6 v3] iommu: arm-smmu: Add support for the fsl-mc bus @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Implement bus specific support for the fsl-mc bus including registering arm_smmu_ops and bus specific device add operations. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/iommu/arm-smmu.c | 7 +++++++ drivers/iommu/iommu.c | 21 +++++++++++++++++++++ include/linux/fsl/mc.h | 8 ++++++++ include/linux/iommu.h | 2 ++ 4 files changed, 38 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 69e7c60..e1d5090 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -52,6 +52,7 @@ #include <linux/spinlock.h> #include <linux/amba/bus.h> +#include <linux/fsl/mc.h> #include "io-pgtable.h" #include "arm-smmu-regs.h" @@ -1459,6 +1460,8 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) if (dev_is_pci(dev)) group = pci_device_group(dev); + else if (dev_is_fsl_mc(dev)) + group = fsl_mc_device_group(dev); else group = generic_device_group(dev); @@ -2037,6 +2040,10 @@ static void arm_smmu_bus_init(void) bus_set_iommu(&pci_bus_type, &arm_smmu_ops); } #endif +#ifdef CONFIG_FSL_MC_BUS + if (!iommu_present(&fsl_mc_bus_type)) + bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops); +#endif } static int arm_smmu_device_probe(struct platform_device *pdev) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d2aa2320..6d4ce35 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -32,6 +32,7 @@ #include <linux/pci.h> #include <linux/bitops.h> #include <linux/property.h> +#include <linux/fsl/mc.h> #include <trace/events/iommu.h> static struct kset *iommu_group_kset; @@ -987,6 +988,26 @@ struct iommu_group *pci_device_group(struct device *dev) return iommu_group_alloc(); } +/* Get the IOMMU group for device on fsl-mc bus */ +struct iommu_group *fsl_mc_device_group(struct device *dev) +{ + struct device *cont_dev = fsl_mc_cont_dev(dev); + struct iommu_group *group; + + /* Container device is responsible for creating the iommu group */ + if (fsl_mc_is_cont_dev(dev)) { + group = iommu_group_alloc(); + if (IS_ERR(group)) + return NULL; + } else { + get_device(cont_dev); + group = iommu_group_get(cont_dev); + put_device(cont_dev); + } + + return group; +} + /** * iommu_group_get_for_dev - Find or create the IOMMU group for a device * @dev: target device diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h index f27cb14..dddaca1 100644 --- a/include/linux/fsl/mc.h +++ b/include/linux/fsl/mc.h @@ -351,6 +351,14 @@ struct fsl_mc_io { #define dev_is_fsl_mc(_dev) (0) #endif +/* Macro to check if a device is a container device */ +#define fsl_mc_is_cont_dev(_dev) (to_fsl_mc_device(_dev)->flags & \ + FSL_MC_IS_DPRC) + +/* Macro to get the container device of a MC device */ +#define fsl_mc_cont_dev(_dev) (fsl_mc_is_cont_dev(_dev) ? \ + (_dev) : (_dev)->parent) + /* * module_fsl_mc_driver() - Helper macro for drivers that don't do * anything special in module init/exit. This eliminates a lot of diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 19938ee..2981200 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -389,6 +389,8 @@ static inline size_t iommu_map_sg(struct iommu_domain *domain, extern struct iommu_group *pci_device_group(struct device *dev); /* Generic device grouping function */ extern struct iommu_group *generic_device_group(struct device *dev); +/* FSL-MC device grouping function */ +struct iommu_group *fsl_mc_device_group(struct device *dev); /** * struct iommu_fwspec - per-device IOMMU instance data -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c index 5d8266c..624828b 100644 --- a/drivers/bus/fsl-mc/fsl-mc-bus.c +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static int fsl_mc_dma_configure(struct device *dev) +{ + struct device *dma_dev = dev; + + while (dev_is_fsl_mc(dma_dev)) + dma_dev = dma_dev->parent; + + return of_dma_configure(dev, dma_dev->of_node, 0); +} + static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { .name = "fsl-mc", .match = fsl_mc_bus_match, .uevent = fsl_mc_bus_uevent, + .dma_configure = fsl_mc_dma_configure, .dev_groups = fsl_mc_dev_groups, }; EXPORT_SYMBOL_GPL(fsl_mc_bus_type); @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, mc_dev->icid = parent_mc_dev->icid; mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; mc_dev->dev.dma_mask = &mc_dev->dma_mask; + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; dev_set_msi_domain(&mc_dev->dev, dev_get_msi_domain(&parent_mc_dev->dev)); } @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, goto error_cleanup_dev; } - /* Objects are coherent, unless 'no shareability' flag set. */ - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); - /* * The device-specific probe callback will get invoked by device_add() */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c index 5d8266c..624828b 100644 --- a/drivers/bus/fsl-mc/fsl-mc-bus.c +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static int fsl_mc_dma_configure(struct device *dev) +{ + struct device *dma_dev = dev; + + while (dev_is_fsl_mc(dma_dev)) + dma_dev = dma_dev->parent; + + return of_dma_configure(dev, dma_dev->of_node, 0); +} + static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { .name = "fsl-mc", .match = fsl_mc_bus_match, .uevent = fsl_mc_bus_uevent, + .dma_configure = fsl_mc_dma_configure, .dev_groups = fsl_mc_dev_groups, }; EXPORT_SYMBOL_GPL(fsl_mc_bus_type); @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, mc_dev->icid = parent_mc_dev->icid; mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; mc_dev->dev.dma_mask = &mc_dev->dma_mask; + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; dev_set_msi_domain(&mc_dev->dev, dev_get_msi_domain(&parent_mc_dev->dev)); } @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, goto error_cleanup_dev; } - /* Objects are coherent, unless 'no shareability' flag set. */ - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); - /* * The device-specific probe callback will get invoked by device_add() */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c index 5d8266c..624828b 100644 --- a/drivers/bus/fsl-mc/fsl-mc-bus.c +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static int fsl_mc_dma_configure(struct device *dev) +{ + struct device *dma_dev = dev; + + while (dev_is_fsl_mc(dma_dev)) + dma_dev = dma_dev->parent; + + return of_dma_configure(dev, dma_dev->of_node, 0); +} + static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { .name = "fsl-mc", .match = fsl_mc_bus_match, .uevent = fsl_mc_bus_uevent, + .dma_configure = fsl_mc_dma_configure, .dev_groups = fsl_mc_dev_groups, }; EXPORT_SYMBOL_GPL(fsl_mc_bus_type); @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, mc_dev->icid = parent_mc_dev->icid; mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; mc_dev->dev.dma_mask = &mc_dev->dma_mask; + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; dev_set_msi_domain(&mc_dev->dev, dev_get_msi_domain(&parent_mc_dev->dev)); } @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, goto error_cleanup_dev; } - /* Objects are coherent, unless 'no shareability' flag set. */ - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); - /* * The device-specific probe callback will get invoked by device_add() */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 13:39 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-14 13:39 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li Hi Nipun, On 04/27/2018 01:27 PM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; This change seems a bit unrelated to the patch subject. I wonder if it makes sense to split it it in a distinct patch. --- Best Regards, Laurentiu ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 13:39 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-14 13:39 UTC (permalink / raw) To: linux-arm-kernel Hi Nipun, On 04/27/2018 01:27 PM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; This change seems a bit unrelated to the patch subject. I wonder if it makes sense to split it it in a distinct patch. --- Best Regards, Laurentiu ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 13:39 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-14 13:39 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li Hi Nipun, On 04/27/2018 01:27 PM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-= bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, str= uct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev =3D dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev =3D dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribut= e *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type =3D { > .name =3D "fsl-mc", > .match =3D fsl_mc_bus_match, > .uevent =3D fsl_mc_bus_uevent, > + .dma_configure =3D fsl_mc_dma_configure, > .dev_groups =3D fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_des= c, > mc_dev->icid =3D parent_mc_dev->icid; > mc_dev->dma_mask =3D FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask =3D &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask =3D mc_dev->dma_mask; This change seems a bit unrelated to the patch subject. I wonder if it=20 makes sense to split it it in a distinct patch. --- Best Regards, Laurentiu= ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 13:39 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-14 13:39 UTC (permalink / raw) To: Nipun Gupta, robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Leo Li, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Hi Nipun, On 04/27/2018 01:27 PM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; This change seems a bit unrelated to the patch subject. I wonder if it makes sense to split it it in a distinct patch. --- Best Regards, Laurentiu ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-16 8:48 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-05-16 8:48 UTC (permalink / raw) To: Laurentiu Tudor, robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li > -----Original Message----- > From: Laurentiu Tudor > Sent: Monday, May 14, 2018 7:10 PM > To: Nipun Gupta <nipun.gupta@nxp.com>; robin.murphy@arm.com; > will.deacon@arm.com; mark.rutland@arm.com; catalin.marinas@arm.com > Cc: hch@lst.de; gregkh@linuxfoundation.org; joro@8bytes.org; > robh+dt@kernel.org; m.szyprowski@samsung.com; shawnguo@kernel.org; > frowand.list@gmail.com; bhelgaas@google.com; iommu@lists.linux- > foundation.org; linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linuxppc-dev@lists.ozlabs.org; linux- > pci@vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder@gmail.com; Leo Li <leoyang.li@nxp.com> > Subject: Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices > on fsl-mc bus > > Hi Nipun, > > On 04/27/2018 01:27 PM, Nipun Gupta wrote: > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > > 1 file changed, 12 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc- > bus.c > > index 5d8266c..624828b 100644 > > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, > struct kobj_uevent_env *env) > > return 0; > > } > > > > +static int fsl_mc_dma_configure(struct device *dev) > > +{ > > + struct device *dma_dev = dev; > > + > > + while (dev_is_fsl_mc(dma_dev)) > > + dma_dev = dma_dev->parent; > > + > > + return of_dma_configure(dev, dma_dev->of_node, 0); > > +} > > + > > static ssize_t modalias_show(struct device *dev, struct device_attribute > *attr, > > char *buf) > > { > > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > > .name = "fsl-mc", > > .match = fsl_mc_bus_match, > > .uevent = fsl_mc_bus_uevent, > > + .dma_configure = fsl_mc_dma_configure, > > .dev_groups = fsl_mc_dev_groups, > > }; > > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc > *obj_desc, > > mc_dev->icid = parent_mc_dev->icid; > > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > > This change seems a bit unrelated to the patch subject. I wonder if it > makes sense to split it it in a distinct patch. Okay. I will spin a v5 after splitting this patch and adding changelog (Greg's comment), fixing typo (Bjorn's comment). Regards, Nipun > > --- > Best Regards, Laurentiu ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-16 8:48 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-05-16 8:48 UTC (permalink / raw) To: linux-arm-kernel > -----Original Message----- > From: Laurentiu Tudor > Sent: Monday, May 14, 2018 7:10 PM > To: Nipun Gupta <nipun.gupta@nxp.com>; robin.murphy at arm.com; > will.deacon at arm.com; mark.rutland at arm.com; catalin.marinas at arm.com > Cc: hch at lst.de; gregkh at linuxfoundation.org; joro at 8bytes.org; > robh+dt at kernel.org; m.szyprowski at samsung.com; shawnguo at kernel.org; > frowand.list at gmail.com; bhelgaas at google.com; iommu at lists.linux- > foundation.org; linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; > linux-arm-kernel at lists.infradead.org; linuxppc-dev at lists.ozlabs.org; linux- > pci at vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder at gmail.com; Leo Li <leoyang.li@nxp.com> > Subject: Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices > on fsl-mc bus > > Hi Nipun, > > On 04/27/2018 01:27 PM, Nipun Gupta wrote: > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > > 1 file changed, 12 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc- > bus.c > > index 5d8266c..624828b 100644 > > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, > struct kobj_uevent_env *env) > > return 0; > > } > > > > +static int fsl_mc_dma_configure(struct device *dev) > > +{ > > + struct device *dma_dev = dev; > > + > > + while (dev_is_fsl_mc(dma_dev)) > > + dma_dev = dma_dev->parent; > > + > > + return of_dma_configure(dev, dma_dev->of_node, 0); > > +} > > + > > static ssize_t modalias_show(struct device *dev, struct device_attribute > *attr, > > char *buf) > > { > > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > > .name = "fsl-mc", > > .match = fsl_mc_bus_match, > > .uevent = fsl_mc_bus_uevent, > > + .dma_configure = fsl_mc_dma_configure, > > .dev_groups = fsl_mc_dev_groups, > > }; > > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc > *obj_desc, > > mc_dev->icid = parent_mc_dev->icid; > > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > > This change seems a bit unrelated to the patch subject. I wonder if it > makes sense to split it it in a distinct patch. Okay. I will spin a v5 after splitting this patch and adding changelog (Greg's comment), fixing typo (Bjorn's comment). Regards, Nipun > > --- > Best Regards, Laurentiu ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-16 8:48 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-05-16 8:48 UTC (permalink / raw) To: Laurentiu Tudor, robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li > -----Original Message----- > From: Laurentiu Tudor > Sent: Monday, May 14, 2018 7:10 PM > To: Nipun Gupta <nipun.gupta@nxp.com>; robin.murphy@arm.com; > will.deacon@arm.com; mark.rutland@arm.com; catalin.marinas@arm.com > Cc: hch@lst.de; gregkh@linuxfoundation.org; joro@8bytes.org; > robh+dt@kernel.org; m.szyprowski@samsung.com; shawnguo@kernel.org; > frowand.list@gmail.com; bhelgaas@google.com; iommu@lists.linux- > foundation.org; linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linuxppc-dev@lists.ozlabs.org; linu= x- > pci@vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder@gmail.com; Leo Li <leoyang.li@nxp.com> > Subject: Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for device= s > on fsl-mc bus >=20 > Hi Nipun, >=20 > On 04/27/2018 01:27 PM, Nipun Gupta wrote: > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > > 1 file changed, 12 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-m= c- > bus.c > > index 5d8266c..624828b 100644 > > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, > struct kobj_uevent_env *env) > > return 0; > > } > > > > +static int fsl_mc_dma_configure(struct device *dev) > > +{ > > + struct device *dma_dev =3D dev; > > + > > + while (dev_is_fsl_mc(dma_dev)) > > + dma_dev =3D dma_dev->parent; > > + > > + return of_dma_configure(dev, dma_dev->of_node, 0); > > +} > > + > > static ssize_t modalias_show(struct device *dev, struct device_attrib= ute > *attr, > > char *buf) > > { > > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type =3D { > > .name =3D "fsl-mc", > > .match =3D fsl_mc_bus_match, > > .uevent =3D fsl_mc_bus_uevent, > > + .dma_configure =3D fsl_mc_dma_configure, > > .dev_groups =3D fsl_mc_dev_groups, > > }; > > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc > *obj_desc, > > mc_dev->icid =3D parent_mc_dev->icid; > > mc_dev->dma_mask =3D FSL_MC_DEFAULT_DMA_MASK; > > mc_dev->dev.dma_mask =3D &mc_dev->dma_mask; > > + mc_dev->dev.coherent_dma_mask =3D mc_dev->dma_mask; >=20 > This change seems a bit unrelated to the patch subject. I wonder if it > makes sense to split it it in a distinct patch. Okay. I will spin a v5 after splitting this patch and adding changelog (Gre= g's comment), fixing typo (Bjorn's comment). Regards, Nipun >=20 > --- > Best Regards, Laurentiu ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-16 8:48 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-05-16 8:48 UTC (permalink / raw) To: Laurentiu Tudor, robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: devicetree, Bharat Bhushan, stuyoder, frowand.list, gregkh, joro, linuxppc-dev, linux-kernel, Leo Li, iommu, robh+dt, linux-pci, bhelgaas, shawnguo, hch, linux-arm-kernel, m.szyprowski > -----Original Message----- > From: Laurentiu Tudor > Sent: Monday, May 14, 2018 7:10 PM > To: Nipun Gupta <nipun.gupta@nxp.com>; robin.murphy@arm.com; > will.deacon@arm.com; mark.rutland@arm.com; catalin.marinas@arm.com > Cc: hch@lst.de; gregkh@linuxfoundation.org; joro@8bytes.org; > robh+dt@kernel.org; m.szyprowski@samsung.com; shawnguo@kernel.org; > frowand.list@gmail.com; bhelgaas@google.com; iommu@lists.linux- > foundation.org; linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linuxppc-dev@lists.ozlabs.org; linux- > pci@vger.kernel.org; Bharat Bhushan <bharat.bhushan@nxp.com>; > stuyoder@gmail.com; Leo Li <leoyang.li@nxp.com> > Subject: Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices > on fsl-mc bus > > Hi Nipun, > > On 04/27/2018 01:27 PM, Nipun Gupta wrote: > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > > --- > > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > > 1 file changed, 12 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc- > bus.c > > index 5d8266c..624828b 100644 > > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, > struct kobj_uevent_env *env) > > return 0; > > } > > > > +static int fsl_mc_dma_configure(struct device *dev) > > +{ > > + struct device *dma_dev = dev; > > + > > + while (dev_is_fsl_mc(dma_dev)) > > + dma_dev = dma_dev->parent; > > + > > + return of_dma_configure(dev, dma_dev->of_node, 0); > > +} > > + > > static ssize_t modalias_show(struct device *dev, struct device_attribute > *attr, > > char *buf) > > { > > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > > .name = "fsl-mc", > > .match = fsl_mc_bus_match, > > .uevent = fsl_mc_bus_uevent, > > + .dma_configure = fsl_mc_dma_configure, > > .dev_groups = fsl_mc_dev_groups, > > }; > > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc > *obj_desc, > > mc_dev->icid = parent_mc_dev->icid; > > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > > This change seems a bit unrelated to the patch subject. I wonder if it > makes sense to split it it in a distinct patch. Okay. I will spin a v5 after splitting this patch and adding changelog (Greg's comment), fixing typo (Bjorn's comment). Regards, Nipun > > --- > Best Regards, Laurentiu _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* RE: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-16 8:48 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-05-16 8:48 UTC (permalink / raw) To: Laurentiu Tudor, robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Leo Li, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r > -----Original Message----- > From: Laurentiu Tudor > Sent: Monday, May 14, 2018 7:10 PM > To: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org>; robin.murphy-5wv7dgnIgG8@public.gmane.org; > will.deacon-5wv7dgnIgG8@public.gmane.org; mark.rutland-5wv7dgnIgG8@public.gmane.org; catalin.marinas-5wv7dgnIgG8@public.gmane.org > Cc: hch-jcswGhMUV9g@public.gmane.org; gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; > robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org; m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org; shawnguo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org; > frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org; bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org; iommu-cunTk1MwBs/ROKNJybVBZg@public.gmane.org > foundation.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; > linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org; linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org; linux- > pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; Bharat Bhushan <bharat.bhushan-3arQi8VN3Tc@public.gmane.org>; > stuyoder-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org; Leo Li <leoyang.li-3arQi8VN3Tc@public.gmane.org> > Subject: Re: [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices > on fsl-mc bus > > Hi Nipun, > > On 04/27/2018 01:27 PM, Nipun Gupta wrote: > > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > > --- > > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > > 1 file changed, 12 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc- > bus.c > > index 5d8266c..624828b 100644 > > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, > struct kobj_uevent_env *env) > > return 0; > > } > > > > +static int fsl_mc_dma_configure(struct device *dev) > > +{ > > + struct device *dma_dev = dev; > > + > > + while (dev_is_fsl_mc(dma_dev)) > > + dma_dev = dma_dev->parent; > > + > > + return of_dma_configure(dev, dma_dev->of_node, 0); > > +} > > + > > static ssize_t modalias_show(struct device *dev, struct device_attribute > *attr, > > char *buf) > > { > > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > > .name = "fsl-mc", > > .match = fsl_mc_bus_match, > > .uevent = fsl_mc_bus_uevent, > > + .dma_configure = fsl_mc_dma_configure, > > .dev_groups = fsl_mc_dev_groups, > > }; > > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc > *obj_desc, > > mc_dev->icid = parent_mc_dev->icid; > > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > > This change seems a bit unrelated to the patch subject. I wonder if it > makes sense to split it it in a distinct patch. Okay. I will spin a v5 after splitting this patch and adding changelog (Greg's comment), fixing typo (Bjorn's comment). Regards, Nipun > > --- > Best Regards, Laurentiu ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 6/6 v3] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy, will.deacon, mark.rutland, catalin.marinas Cc: hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta fsl-mc bus support the new iommu-map property. Comply to this binding for fsl_mc bus. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi index 137ef4d..6010505 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi @@ -184,6 +184,7 @@ #address-cells = <2>; #size-cells = <2>; ranges; + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; clockgen: clocking@1300000 { compatible = "fsl,ls2080a-clockgen"; @@ -357,6 +358,8 @@ reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ + dma-coherent; #address-cells = <3>; #size-cells = <1>; @@ -460,6 +463,8 @@ compatible = "arm,mmu-500"; reg = <0 0x5000000 0 0x800000>; #global-interrupts = <12>; + #iommu-cells = <1>; + stream-match-mask = <0x7C00>; interrupts = <0 13 4>, /* global secure fault */ <0 14 4>, /* combined secure interrupt */ <0 15 4>, /* global non-secure fault */ @@ -502,7 +507,6 @@ <0 204 4>, <0 205 4>, <0 206 4>, <0 207 4>, <0 208 4>, <0 209 4>; - mmu-masters = <&fsl_mc 0x300 0>; }; dspi: dspi@2100000 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 6/6 v3] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: linux-arm-kernel fsl-mc bus support the new iommu-map property. Comply to this binding for fsl_mc bus. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi index 137ef4d..6010505 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi @@ -184,6 +184,7 @@ #address-cells = <2>; #size-cells = <2>; ranges; + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; clockgen: clocking at 1300000 { compatible = "fsl,ls2080a-clockgen"; @@ -357,6 +358,8 @@ reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ + dma-coherent; #address-cells = <3>; #size-cells = <1>; @@ -460,6 +463,8 @@ compatible = "arm,mmu-500"; reg = <0 0x5000000 0 0x800000>; #global-interrupts = <12>; + #iommu-cells = <1>; + stream-match-mask = <0x7C00>; interrupts = <0 13 4>, /* global secure fault */ <0 14 4>, /* combined secure interrupt */ <0 15 4>, /* global non-secure fault */ @@ -502,7 +507,6 @@ <0 204 4>, <0 205 4>, <0 206 4>, <0 207 4>, <0 208 4>, <0 209 4>; - mmu-masters = <&fsl_mc 0x300 0>; }; dspi: dspi at 2100000 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH 6/6 v3] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-04-27 10:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-27 10:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8 Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r fsl-mc bus support the new iommu-map property. Comply to this binding for fsl_mc bus. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi index 137ef4d..6010505 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi @@ -184,6 +184,7 @@ #address-cells = <2>; #size-cells = <2>; ranges; + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; clockgen: clocking@1300000 { compatible = "fsl,ls2080a-clockgen"; @@ -357,6 +358,8 @@ reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ + dma-coherent; #address-cells = <3>; #size-cells = <1>; @@ -460,6 +463,8 @@ compatible = "arm,mmu-500"; reg = <0 0x5000000 0 0x800000>; #global-interrupts = <12>; + #iommu-cells = <1>; + stream-match-mask = <0x7C00>; interrupts = <0 13 4>, /* global secure fault */ <0 14 4>, /* combined secure interrupt */ <0 15 4>, /* global non-secure fault */ @@ -502,7 +507,6 @@ <0 204 4>, <0 205 4>, <0 206 4>, <0 207 4>, <0 208 4>, <0 209 4>; - mmu-masters = <&fsl_mc 0x300 0>; }; dspi: dspi@2100000 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* Re: [PATCH 0/6 v3] Support for fsl-mc bus and its devices in SMMU @ 2018-04-27 15:52 ` Christoph Hellwig 0 siblings, 0 replies; 100+ messages in thread From: Christoph Hellwig @ 2018-04-27 15:52 UTC (permalink / raw) To: Nipun Gupta Cc: robin.murphy, will.deacon, mark.rutland, catalin.marinas, hch, gregkh, joro, robh+dt, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li On Fri, Apr 27, 2018 at 03:57:00PM +0530, Nipun Gupta wrote: > This patchset defines IOMMU DT binding for fsl-mc bus and adds > support in SMMU for fsl-mc bus. > > This patch series is dependent on patset: > https://patchwork.kernel.org/patch/10317337/ Which still needs to be resent against 4.17-rc.. ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH 0/6 v3] Support for fsl-mc bus and its devices in SMMU @ 2018-04-27 15:52 ` Christoph Hellwig 0 siblings, 0 replies; 100+ messages in thread From: Christoph Hellwig @ 2018-04-27 15:52 UTC (permalink / raw) To: linux-arm-kernel On Fri, Apr 27, 2018 at 03:57:00PM +0530, Nipun Gupta wrote: > This patchset defines IOMMU DT binding for fsl-mc bus and adds > support in SMMU for fsl-mc bus. > > This patch series is dependent on patset: > https://patchwork.kernel.org/patch/10317337/ Which still needs to be resent against 4.17-rc.. ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH 0/6 v3] Support for fsl-mc bus and its devices in SMMU @ 2018-04-27 15:52 ` Christoph Hellwig 0 siblings, 0 replies; 100+ messages in thread From: Christoph Hellwig @ 2018-04-27 15:52 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, will.deacon-5wv7dgnIgG8, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, catalin.marinas-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ On Fri, Apr 27, 2018 at 03:57:00PM +0530, Nipun Gupta wrote: > This patchset defines IOMMU DT binding for fsl-mc bus and adds > support in SMMU for fsl-mc bus. > > This patch series is dependent on patset: > https://patchwork.kernel.org/patch/10317337/ Which still needs to be resent against 4.17-rc.. ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 0/6] Support for fsl-mc bus and its devices in SMMU @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta This patchset defines IOMMU DT binding for fsl-mc bus and adds support in SMMU for fsl-mc bus. This patch series is dependent on patset: https://patchwork.kernel.org/patch/10317337/ These patches - Define property 'iommu-map' for fsl-mc bus (patch 1) - Integrates the fsl-mc bus with the SMMU using this IOMMU binding (patch 2,3,4) - Adds the dma configuration support for fsl-mc bus (patch 5) - Updates the fsl-mc device node with iommu/dma related changes (patch6) Changes in v2: - use iommu-map property for fsl-mc bus - rebase over patchset https://patchwork.kernel.org/patch/10317337/ and make corresponding changes for dma configuration of devices on fsl-mc bus Changes in v3: - move of_map_rid in drivers/of/address.c Changes in v4: - move of_map_rid in drivers/of/base.c Nipun Gupta (6): Docs: dt: add fsl-mc iommu-map device-tree binding iommu: of: make of_pci_map_rid() available for other devices too iommu: support iommu configuration for fsl-mc devices iommu: arm-smmu: Add support for the fsl-mc bus bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++ arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 +++- drivers/iommu/arm-smmu.c | 7 ++ drivers/iommu/iommu.c | 21 +++++ drivers/iommu/of_iommu.c | 25 ++++- drivers/of/base.c | 102 +++++++++++++++++++++ drivers/of/irq.c | 5 +- drivers/pci/of.c | 101 -------------------- include/linux/fsl/mc.h | 8 ++ include/linux/iommu.h | 2 + include/linux/of.h | 11 +++ include/linux/of_pci.h | 10 -- 13 files changed, 231 insertions(+), 122 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 0/6] Support for fsl-mc bus and its devices in SMMU @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: linux-arm-kernel This patchset defines IOMMU DT binding for fsl-mc bus and adds support in SMMU for fsl-mc bus. This patch series is dependent on patset: https://patchwork.kernel.org/patch/10317337/ These patches - Define property 'iommu-map' for fsl-mc bus (patch 1) - Integrates the fsl-mc bus with the SMMU using this IOMMU binding (patch 2,3,4) - Adds the dma configuration support for fsl-mc bus (patch 5) - Updates the fsl-mc device node with iommu/dma related changes (patch6) Changes in v2: - use iommu-map property for fsl-mc bus - rebase over patchset https://patchwork.kernel.org/patch/10317337/ and make corresponding changes for dma configuration of devices on fsl-mc bus Changes in v3: - move of_map_rid in drivers/of/address.c Changes in v4: - move of_map_rid in drivers/of/base.c Nipun Gupta (6): Docs: dt: add fsl-mc iommu-map device-tree binding iommu: of: make of_pci_map_rid() available for other devices too iommu: support iommu configuration for fsl-mc devices iommu: arm-smmu: Add support for the fsl-mc bus bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++ arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 +++- drivers/iommu/arm-smmu.c | 7 ++ drivers/iommu/iommu.c | 21 +++++ drivers/iommu/of_iommu.c | 25 ++++- drivers/of/base.c | 102 +++++++++++++++++++++ drivers/of/irq.c | 5 +- drivers/pci/of.c | 101 -------------------- include/linux/fsl/mc.h | 8 ++ include/linux/iommu.h | 2 + include/linux/of.h | 11 +++ include/linux/of_pci.h | 10 -- 13 files changed, 231 insertions(+), 122 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 0/6] Support for fsl-mc bus and its devices in SMMU @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: devicetree, stuyoder, bharat.bhushan, shawnguo, joro, linuxppc-dev, linux-kernel, leoyang.li, iommu, Nipun Gupta, linux-pci, bhelgaas, laurentiu.tudor, frowand.list, hch, linux-arm-kernel, m.szyprowski This patchset defines IOMMU DT binding for fsl-mc bus and adds support in SMMU for fsl-mc bus. This patch series is dependent on patset: https://patchwork.kernel.org/patch/10317337/ These patches - Define property 'iommu-map' for fsl-mc bus (patch 1) - Integrates the fsl-mc bus with the SMMU using this IOMMU binding (patch 2,3,4) - Adds the dma configuration support for fsl-mc bus (patch 5) - Updates the fsl-mc device node with iommu/dma related changes (patch6) Changes in v2: - use iommu-map property for fsl-mc bus - rebase over patchset https://patchwork.kernel.org/patch/10317337/ and make corresponding changes for dma configuration of devices on fsl-mc bus Changes in v3: - move of_map_rid in drivers/of/address.c Changes in v4: - move of_map_rid in drivers/of/base.c Nipun Gupta (6): Docs: dt: add fsl-mc iommu-map device-tree binding iommu: of: make of_pci_map_rid() available for other devices too iommu: support iommu configuration for fsl-mc devices iommu: arm-smmu: Add support for the fsl-mc bus bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++ arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 +++- drivers/iommu/arm-smmu.c | 7 ++ drivers/iommu/iommu.c | 21 +++++ drivers/iommu/of_iommu.c | 25 ++++- drivers/of/base.c | 102 +++++++++++++++++++++ drivers/of/irq.c | 5 +- drivers/pci/of.c | 101 -------------------- include/linux/fsl/mc.h | 8 ++ include/linux/iommu.h | 2 + include/linux/of.h | 11 +++ include/linux/of_pci.h | 10 -- 13 files changed, 231 insertions(+), 122 deletions(-) -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 0/6] Support for fsl-mc bus and its devices in SMMU @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r This patchset defines IOMMU DT binding for fsl-mc bus and adds support in SMMU for fsl-mc bus. This patch series is dependent on patset: https://patchwork.kernel.org/patch/10317337/ These patches - Define property 'iommu-map' for fsl-mc bus (patch 1) - Integrates the fsl-mc bus with the SMMU using this IOMMU binding (patch 2,3,4) - Adds the dma configuration support for fsl-mc bus (patch 5) - Updates the fsl-mc device node with iommu/dma related changes (patch6) Changes in v2: - use iommu-map property for fsl-mc bus - rebase over patchset https://patchwork.kernel.org/patch/10317337/ and make corresponding changes for dma configuration of devices on fsl-mc bus Changes in v3: - move of_map_rid in drivers/of/address.c Changes in v4: - move of_map_rid in drivers/of/base.c Nipun Gupta (6): Docs: dt: add fsl-mc iommu-map device-tree binding iommu: of: make of_pci_map_rid() available for other devices too iommu: support iommu configuration for fsl-mc devices iommu: arm-smmu: Add support for the fsl-mc bus bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++ arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 +++- drivers/iommu/arm-smmu.c | 7 ++ drivers/iommu/iommu.c | 21 +++++ drivers/iommu/of_iommu.c | 25 ++++- drivers/of/base.c | 102 +++++++++++++++++++++ drivers/of/irq.c | 5 +- drivers/pci/of.c | 101 -------------------- include/linux/fsl/mc.h | 8 ++ include/linux/iommu.h | 2 + include/linux/of.h | 11 +++ include/linux/of_pci.h | 10 -- 13 files changed, 231 insertions(+), 122 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 1/6] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta The existing IOMMU bindings cannot be used to specify the relationship between fsl-mc devices and IOMMUs. This patch adds a generic binding for mapping fsl-mc devices to IOMMUs, using iommu-map property. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> Reviewed-by: Rob Herring <robh@kernel.org> --- .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt index 6611a7c..8cbed4f 100644 --- a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +++ b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt @@ -9,6 +9,25 @@ blocks that can be used to create functional hardware objects/devices such as network interfaces, crypto accelerator instances, L2 switches, etc. +For an overview of the DPAA2 architecture and fsl-mc bus see: +drivers/staging/fsl-mc/README.txt + +As described in the above overview, all DPAA2 objects in a DPRC share the +same hardware "isolation context" and a 10-bit value called an ICID +(isolation context id) is expressed by the hardware to identify +the requester. + +The generic 'iommus' property is insufficient to describe the relationship +between ICIDs and IOMMUs, so an iommu-map property is used to define +the set of possible ICIDs under a root DPRC and how they map to +an IOMMU. + +For generic IOMMU bindings, see +Documentation/devicetree/bindings/iommu/iommu.txt. + +For arm-smmu binding, see: +Documentation/devicetree/bindings/iommu/arm,smmu.txt. + Required properties: - compatible @@ -88,14 +107,34 @@ Sub-nodes: Value type: <phandle> Definition: Specifies the phandle to the PHY device node associated with the this dpmac. +Optional properties: + +- iommu-map: Maps an ICID to an IOMMU and associated iommu-specifier + data. + + The property is an arbitrary number of tuples of + (icid-base,iommu,iommu-base,length). + + Any ICID i in the interval [icid-base, icid-base + length) is + associated with the listed IOMMU, with the iommu-specifier + (i - icid-base + iommu-base). Example: + smmu: iommu@5000000 { + compatible = "arm,mmu-500"; + #iommu-cells = <2>; + stream-match-mask = <0x7C00>; + ... + }; + fsl_mc: fsl-mc@80c000000 { compatible = "fsl,qoriq-mc"; reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + /* define map for ICIDs 23-64 */ + iommu-map = <23 &smmu 23 41>; #address-cells = <3>; #size-cells = <1>; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 1/6] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: linux-arm-kernel The existing IOMMU bindings cannot be used to specify the relationship between fsl-mc devices and IOMMUs. This patch adds a generic binding for mapping fsl-mc devices to IOMMUs, using iommu-map property. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> Reviewed-by: Rob Herring <robh@kernel.org> --- .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt index 6611a7c..8cbed4f 100644 --- a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +++ b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt @@ -9,6 +9,25 @@ blocks that can be used to create functional hardware objects/devices such as network interfaces, crypto accelerator instances, L2 switches, etc. +For an overview of the DPAA2 architecture and fsl-mc bus see: +drivers/staging/fsl-mc/README.txt + +As described in the above overview, all DPAA2 objects in a DPRC share the +same hardware "isolation context" and a 10-bit value called an ICID +(isolation context id) is expressed by the hardware to identify +the requester. + +The generic 'iommus' property is insufficient to describe the relationship +between ICIDs and IOMMUs, so an iommu-map property is used to define +the set of possible ICIDs under a root DPRC and how they map to +an IOMMU. + +For generic IOMMU bindings, see +Documentation/devicetree/bindings/iommu/iommu.txt. + +For arm-smmu binding, see: +Documentation/devicetree/bindings/iommu/arm,smmu.txt. + Required properties: - compatible @@ -88,14 +107,34 @@ Sub-nodes: Value type: <phandle> Definition: Specifies the phandle to the PHY device node associated with the this dpmac. +Optional properties: + +- iommu-map: Maps an ICID to an IOMMU and associated iommu-specifier + data. + + The property is an arbitrary number of tuples of + (icid-base,iommu,iommu-base,length). + + Any ICID i in the interval [icid-base, icid-base + length) is + associated with the listed IOMMU, with the iommu-specifier + (i - icid-base + iommu-base). Example: + smmu: iommu at 5000000 { + compatible = "arm,mmu-500"; + #iommu-cells = <2>; + stream-match-mask = <0x7C00>; + ... + }; + fsl_mc: fsl-mc at 80c000000 { compatible = "fsl,qoriq-mc"; reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + /* define map for ICIDs 23-64 */ + iommu-map = <23 &smmu 23 41>; #address-cells = <3>; #size-cells = <1>; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 1/6] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: devicetree, stuyoder, bharat.bhushan, shawnguo, joro, linuxppc-dev, linux-kernel, leoyang.li, iommu, Nipun Gupta, linux-pci, bhelgaas, laurentiu.tudor, frowand.list, hch, linux-arm-kernel, m.szyprowski The existing IOMMU bindings cannot be used to specify the relationship between fsl-mc devices and IOMMUs. This patch adds a generic binding for mapping fsl-mc devices to IOMMUs, using iommu-map property. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> Reviewed-by: Rob Herring <robh@kernel.org> --- .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt index 6611a7c..8cbed4f 100644 --- a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +++ b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt @@ -9,6 +9,25 @@ blocks that can be used to create functional hardware objects/devices such as network interfaces, crypto accelerator instances, L2 switches, etc. +For an overview of the DPAA2 architecture and fsl-mc bus see: +drivers/staging/fsl-mc/README.txt + +As described in the above overview, all DPAA2 objects in a DPRC share the +same hardware "isolation context" and a 10-bit value called an ICID +(isolation context id) is expressed by the hardware to identify +the requester. + +The generic 'iommus' property is insufficient to describe the relationship +between ICIDs and IOMMUs, so an iommu-map property is used to define +the set of possible ICIDs under a root DPRC and how they map to +an IOMMU. + +For generic IOMMU bindings, see +Documentation/devicetree/bindings/iommu/iommu.txt. + +For arm-smmu binding, see: +Documentation/devicetree/bindings/iommu/arm,smmu.txt. + Required properties: - compatible @@ -88,14 +107,34 @@ Sub-nodes: Value type: <phandle> Definition: Specifies the phandle to the PHY device node associated with the this dpmac. +Optional properties: + +- iommu-map: Maps an ICID to an IOMMU and associated iommu-specifier + data. + + The property is an arbitrary number of tuples of + (icid-base,iommu,iommu-base,length). + + Any ICID i in the interval [icid-base, icid-base + length) is + associated with the listed IOMMU, with the iommu-specifier + (i - icid-base + iommu-base). Example: + smmu: iommu@5000000 { + compatible = "arm,mmu-500"; + #iommu-cells = <2>; + stream-match-mask = <0x7C00>; + ... + }; + fsl_mc: fsl-mc@80c000000 { compatible = "fsl,qoriq-mc"; reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + /* define map for ICIDs 23-64 */ + iommu-map = <23 &smmu 23 41>; #address-cells = <3>; #size-cells = <1>; -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 1/6] Docs: dt: add fsl-mc iommu-map device-tree binding @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r The existing IOMMU bindings cannot be used to specify the relationship between fsl-mc devices and IOMMUs. This patch adds a generic binding for mapping fsl-mc devices to IOMMUs, using iommu-map property. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> Reviewed-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> --- .../devicetree/bindings/misc/fsl,qoriq-mc.txt | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt index 6611a7c..8cbed4f 100644 --- a/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +++ b/Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt @@ -9,6 +9,25 @@ blocks that can be used to create functional hardware objects/devices such as network interfaces, crypto accelerator instances, L2 switches, etc. +For an overview of the DPAA2 architecture and fsl-mc bus see: +drivers/staging/fsl-mc/README.txt + +As described in the above overview, all DPAA2 objects in a DPRC share the +same hardware "isolation context" and a 10-bit value called an ICID +(isolation context id) is expressed by the hardware to identify +the requester. + +The generic 'iommus' property is insufficient to describe the relationship +between ICIDs and IOMMUs, so an iommu-map property is used to define +the set of possible ICIDs under a root DPRC and how they map to +an IOMMU. + +For generic IOMMU bindings, see +Documentation/devicetree/bindings/iommu/iommu.txt. + +For arm-smmu binding, see: +Documentation/devicetree/bindings/iommu/arm,smmu.txt. + Required properties: - compatible @@ -88,14 +107,34 @@ Sub-nodes: Value type: <phandle> Definition: Specifies the phandle to the PHY device node associated with the this dpmac. +Optional properties: + +- iommu-map: Maps an ICID to an IOMMU and associated iommu-specifier + data. + + The property is an arbitrary number of tuples of + (icid-base,iommu,iommu-base,length). + + Any ICID i in the interval [icid-base, icid-base + length) is + associated with the listed IOMMU, with the iommu-specifier + (i - icid-base + iommu-base). Example: + smmu: iommu@5000000 { + compatible = "arm,mmu-500"; + #iommu-cells = <2>; + stream-match-mask = <0x7C00>; + ... + }; + fsl_mc: fsl-mc@80c000000 { compatible = "fsl,qoriq-mc"; reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + /* define map for ICIDs 23-64 */ + iommu-map = <23 &smmu 23 41>; #address-cells = <3>; #size-cells = <1>; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta iommu-map property is also used by devices with fsl-mc. This patch moves the of_pci_map_rid to generic location, so that it can be used by other busses too. 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no functional change done in the API. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 5 +-- drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/of/irq.c | 5 +-- drivers/pci/of.c | 101 ---------------------------------------------- include/linux/of.h | 11 +++++ include/linux/of_pci.h | 10 ----- 6 files changed, 117 insertions(+), 117 deletions(-) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 5c36a8b..811e160 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -149,9 +149,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) struct of_phandle_args iommu_spec = { .args_count = 1 }; int err; - err = of_pci_map_rid(info->np, alias, "iommu-map", - "iommu-map-mask", &iommu_spec.np, - iommu_spec.args); + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", + &iommu_spec.np, iommu_spec.args); if (err) return err == -ENODEV ? NO_IOMMU : err; diff --git a/drivers/of/base.c b/drivers/of/base.c index 848f549..c7aac81 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1995,3 +1995,105 @@ int of_find_last_cache_level(unsigned int cpu) return cache_level; } + +/** + * of_map_rid - Translate a requester ID through a downstream mapping. + * @np: root complex device node. + * @rid: device requester ID to map. + * @map_name: property name of the map to use. + * @map_mask_name: optional property name of the mask to use. + * @target: optional pointer to a target device node. + * @id_out: optional pointer to receive the translated ID. + * + * Given a device requester ID, look up the appropriate implementation-defined + * platform ID and/or the target device which receives transactions on that + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or + * @id_out may be NULL if only the other is required. If @target points to + * a non-NULL device node pointer, only entries targeting that node will be + * matched; if it points to a NULL value, it will receive the device node of + * the first matching target phandle, with a reference held. + * + * Return: 0 on success or a standard error code on failure. + */ +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + u32 map_mask, masked_rid; + int map_len; + const __be32 *map = NULL; + + if (!np || !map_name || (!target && !id_out)) + return -EINVAL; + + map = of_get_property(np, map_name, &map_len); + if (!map) { + if (target) + return -ENODEV; + /* Otherwise, no map implies no translation */ + *id_out = rid; + return 0; + } + + if (!map_len || map_len % (4 * sizeof(*map))) { + pr_err("%pOF: Error: Bad %s length: %d\n", np, + map_name, map_len); + return -EINVAL; + } + + /* The default is to select all bits. */ + map_mask = 0xffffffff; + + /* + * Can be overridden by "{iommu,msi}-map-mask" property. + * If of_property_read_u32() fails, the default is used. + */ + if (map_mask_name) + of_property_read_u32(np, map_mask_name, &map_mask); + + masked_rid = map_mask & rid; + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { + struct device_node *phandle_node; + u32 rid_base = be32_to_cpup(map + 0); + u32 phandle = be32_to_cpup(map + 1); + u32 out_base = be32_to_cpup(map + 2); + u32 rid_len = be32_to_cpup(map + 3); + + if (rid_base & ~map_mask) { + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", + np, map_name, map_name, + map_mask, rid_base); + return -EFAULT; + } + + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) + continue; + + phandle_node = of_find_node_by_phandle(phandle); + if (!phandle_node) + return -ENODEV; + + if (target) { + if (*target) + of_node_put(phandle_node); + else + *target = phandle_node; + + if (*target != phandle_node) + continue; + } + + if (id_out) + *id_out = masked_rid - rid_base + out_base; + + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", + np, map_name, map_mask, rid_base, out_base, + rid_len, rid, masked_rid - rid_base + out_base); + return 0; + } + + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", + np, map_name, rid, target && *target ? *target : NULL); + return -EFAULT; +} +EXPORT_SYMBOL_GPL(of_map_rid); diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 02ad93a..e1f6f39 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -22,7 +22,6 @@ #include <linux/module.h> #include <linux/of.h> #include <linux/of_irq.h> -#include <linux/of_pci.h> #include <linux/string.h> #include <linux/slab.h> @@ -588,8 +587,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, * "msi-map" property. */ for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", - "msi-map-mask", np, &rid_out)) + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", + "msi-map-mask", np, &rid_out)) break; return rid_out; } diff --git a/drivers/pci/of.c b/drivers/pci/of.c index a28355c..d2cebbe 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); #endif /* CONFIG_OF_ADDRESS */ -/** - * of_pci_map_rid - Translate a requester ID through a downstream mapping. - * @np: root complex device node. - * @rid: PCI requester ID to map. - * @map_name: property name of the map to use. - * @map_mask_name: optional property name of the mask to use. - * @target: optional pointer to a target device node. - * @id_out: optional pointer to receive the translated ID. - * - * Given a PCI requester ID, look up the appropriate implementation-defined - * platform ID and/or the target device which receives transactions on that - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or - * @id_out may be NULL if only the other is required. If @target points to - * a non-NULL device node pointer, only entries targeting that node will be - * matched; if it points to a NULL value, it will receive the device node of - * the first matching target phandle, with a reference held. - * - * Return: 0 on success or a standard error code on failure. - */ -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - u32 map_mask, masked_rid; - int map_len; - const __be32 *map = NULL; - - if (!np || !map_name || (!target && !id_out)) - return -EINVAL; - - map = of_get_property(np, map_name, &map_len); - if (!map) { - if (target) - return -ENODEV; - /* Otherwise, no map implies no translation */ - *id_out = rid; - return 0; - } - - if (!map_len || map_len % (4 * sizeof(*map))) { - pr_err("%pOF: Error: Bad %s length: %d\n", np, - map_name, map_len); - return -EINVAL; - } - - /* The default is to select all bits. */ - map_mask = 0xffffffff; - - /* - * Can be overridden by "{iommu,msi}-map-mask" property. - * If of_property_read_u32() fails, the default is used. - */ - if (map_mask_name) - of_property_read_u32(np, map_mask_name, &map_mask); - - masked_rid = map_mask & rid; - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { - struct device_node *phandle_node; - u32 rid_base = be32_to_cpup(map + 0); - u32 phandle = be32_to_cpup(map + 1); - u32 out_base = be32_to_cpup(map + 2); - u32 rid_len = be32_to_cpup(map + 3); - - if (rid_base & ~map_mask) { - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", - np, map_name, map_name, - map_mask, rid_base); - return -EFAULT; - } - - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) - continue; - - phandle_node = of_find_node_by_phandle(phandle); - if (!phandle_node) - return -ENODEV; - - if (target) { - if (*target) - of_node_put(phandle_node); - else - *target = phandle_node; - - if (*target != phandle_node) - continue; - } - - if (id_out) - *id_out = masked_rid - rid_base + out_base; - - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", - np, map_name, map_mask, rid_base, out_base, - rid_len, rid, masked_rid - rid_base + out_base); - return 0; - } - - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", - np, map_name, rid, target && *target ? *target : NULL); - return -EFAULT; -} - #if IS_ENABLED(CONFIG_OF_IRQ) /** * of_irq_parse_pci - Resolve the interrupt for a PCI device diff --git a/include/linux/of.h b/include/linux/of.h index 4d25e4f..f4251c3 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -545,6 +545,10 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, extern int of_cpu_node_to_id(struct device_node *np); +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out); + #else /* CONFIG_OF */ static inline void of_core_init(void) @@ -931,6 +935,13 @@ static inline int of_cpu_node_to_id(struct device_node *np) return -ENODEV; } +static inline int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + return -EINVAL; +} + #define of_match_ptr(_ptr) NULL #define of_match_node(_matches, _node) NULL #endif /* CONFIG_OF */ diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index 091033a..a23b44a 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, int of_get_pci_domain_nr(struct device_node *node); int of_pci_get_max_link_speed(struct device_node *node); void of_pci_check_probe_only(void); -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out); #else static inline struct device_node *of_pci_find_child_device(struct device_node *parent, unsigned int devfn) @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) return -1; } -static inline int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - return -EINVAL; -} - static inline int of_pci_get_max_link_speed(struct device_node *node) { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: linux-arm-kernel iommu-map property is also used by devices with fsl-mc. This patch moves the of_pci_map_rid to generic location, so that it can be used by other busses too. 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no functional change done in the API. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 5 +-- drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/of/irq.c | 5 +-- drivers/pci/of.c | 101 ---------------------------------------------- include/linux/of.h | 11 +++++ include/linux/of_pci.h | 10 ----- 6 files changed, 117 insertions(+), 117 deletions(-) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 5c36a8b..811e160 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -149,9 +149,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) struct of_phandle_args iommu_spec = { .args_count = 1 }; int err; - err = of_pci_map_rid(info->np, alias, "iommu-map", - "iommu-map-mask", &iommu_spec.np, - iommu_spec.args); + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", + &iommu_spec.np, iommu_spec.args); if (err) return err == -ENODEV ? NO_IOMMU : err; diff --git a/drivers/of/base.c b/drivers/of/base.c index 848f549..c7aac81 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1995,3 +1995,105 @@ int of_find_last_cache_level(unsigned int cpu) return cache_level; } + +/** + * of_map_rid - Translate a requester ID through a downstream mapping. + * @np: root complex device node. + * @rid: device requester ID to map. + * @map_name: property name of the map to use. + * @map_mask_name: optional property name of the mask to use. + * @target: optional pointer to a target device node. + * @id_out: optional pointer to receive the translated ID. + * + * Given a device requester ID, look up the appropriate implementation-defined + * platform ID and/or the target device which receives transactions on that + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or + * @id_out may be NULL if only the other is required. If @target points to + * a non-NULL device node pointer, only entries targeting that node will be + * matched; if it points to a NULL value, it will receive the device node of + * the first matching target phandle, with a reference held. + * + * Return: 0 on success or a standard error code on failure. + */ +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + u32 map_mask, masked_rid; + int map_len; + const __be32 *map = NULL; + + if (!np || !map_name || (!target && !id_out)) + return -EINVAL; + + map = of_get_property(np, map_name, &map_len); + if (!map) { + if (target) + return -ENODEV; + /* Otherwise, no map implies no translation */ + *id_out = rid; + return 0; + } + + if (!map_len || map_len % (4 * sizeof(*map))) { + pr_err("%pOF: Error: Bad %s length: %d\n", np, + map_name, map_len); + return -EINVAL; + } + + /* The default is to select all bits. */ + map_mask = 0xffffffff; + + /* + * Can be overridden by "{iommu,msi}-map-mask" property. + * If of_property_read_u32() fails, the default is used. + */ + if (map_mask_name) + of_property_read_u32(np, map_mask_name, &map_mask); + + masked_rid = map_mask & rid; + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { + struct device_node *phandle_node; + u32 rid_base = be32_to_cpup(map + 0); + u32 phandle = be32_to_cpup(map + 1); + u32 out_base = be32_to_cpup(map + 2); + u32 rid_len = be32_to_cpup(map + 3); + + if (rid_base & ~map_mask) { + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", + np, map_name, map_name, + map_mask, rid_base); + return -EFAULT; + } + + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) + continue; + + phandle_node = of_find_node_by_phandle(phandle); + if (!phandle_node) + return -ENODEV; + + if (target) { + if (*target) + of_node_put(phandle_node); + else + *target = phandle_node; + + if (*target != phandle_node) + continue; + } + + if (id_out) + *id_out = masked_rid - rid_base + out_base; + + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", + np, map_name, map_mask, rid_base, out_base, + rid_len, rid, masked_rid - rid_base + out_base); + return 0; + } + + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", + np, map_name, rid, target && *target ? *target : NULL); + return -EFAULT; +} +EXPORT_SYMBOL_GPL(of_map_rid); diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 02ad93a..e1f6f39 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -22,7 +22,6 @@ #include <linux/module.h> #include <linux/of.h> #include <linux/of_irq.h> -#include <linux/of_pci.h> #include <linux/string.h> #include <linux/slab.h> @@ -588,8 +587,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, * "msi-map" property. */ for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", - "msi-map-mask", np, &rid_out)) + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", + "msi-map-mask", np, &rid_out)) break; return rid_out; } diff --git a/drivers/pci/of.c b/drivers/pci/of.c index a28355c..d2cebbe 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); #endif /* CONFIG_OF_ADDRESS */ -/** - * of_pci_map_rid - Translate a requester ID through a downstream mapping. - * @np: root complex device node. - * @rid: PCI requester ID to map. - * @map_name: property name of the map to use. - * @map_mask_name: optional property name of the mask to use. - * @target: optional pointer to a target device node. - * @id_out: optional pointer to receive the translated ID. - * - * Given a PCI requester ID, look up the appropriate implementation-defined - * platform ID and/or the target device which receives transactions on that - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or - * @id_out may be NULL if only the other is required. If @target points to - * a non-NULL device node pointer, only entries targeting that node will be - * matched; if it points to a NULL value, it will receive the device node of - * the first matching target phandle, with a reference held. - * - * Return: 0 on success or a standard error code on failure. - */ -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - u32 map_mask, masked_rid; - int map_len; - const __be32 *map = NULL; - - if (!np || !map_name || (!target && !id_out)) - return -EINVAL; - - map = of_get_property(np, map_name, &map_len); - if (!map) { - if (target) - return -ENODEV; - /* Otherwise, no map implies no translation */ - *id_out = rid; - return 0; - } - - if (!map_len || map_len % (4 * sizeof(*map))) { - pr_err("%pOF: Error: Bad %s length: %d\n", np, - map_name, map_len); - return -EINVAL; - } - - /* The default is to select all bits. */ - map_mask = 0xffffffff; - - /* - * Can be overridden by "{iommu,msi}-map-mask" property. - * If of_property_read_u32() fails, the default is used. - */ - if (map_mask_name) - of_property_read_u32(np, map_mask_name, &map_mask); - - masked_rid = map_mask & rid; - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { - struct device_node *phandle_node; - u32 rid_base = be32_to_cpup(map + 0); - u32 phandle = be32_to_cpup(map + 1); - u32 out_base = be32_to_cpup(map + 2); - u32 rid_len = be32_to_cpup(map + 3); - - if (rid_base & ~map_mask) { - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", - np, map_name, map_name, - map_mask, rid_base); - return -EFAULT; - } - - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) - continue; - - phandle_node = of_find_node_by_phandle(phandle); - if (!phandle_node) - return -ENODEV; - - if (target) { - if (*target) - of_node_put(phandle_node); - else - *target = phandle_node; - - if (*target != phandle_node) - continue; - } - - if (id_out) - *id_out = masked_rid - rid_base + out_base; - - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", - np, map_name, map_mask, rid_base, out_base, - rid_len, rid, masked_rid - rid_base + out_base); - return 0; - } - - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", - np, map_name, rid, target && *target ? *target : NULL); - return -EFAULT; -} - #if IS_ENABLED(CONFIG_OF_IRQ) /** * of_irq_parse_pci - Resolve the interrupt for a PCI device diff --git a/include/linux/of.h b/include/linux/of.h index 4d25e4f..f4251c3 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -545,6 +545,10 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, extern int of_cpu_node_to_id(struct device_node *np); +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out); + #else /* CONFIG_OF */ static inline void of_core_init(void) @@ -931,6 +935,13 @@ static inline int of_cpu_node_to_id(struct device_node *np) return -ENODEV; } +static inline int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + return -EINVAL; +} + #define of_match_ptr(_ptr) NULL #define of_match_node(_matches, _node) NULL #endif /* CONFIG_OF */ diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index 091033a..a23b44a 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, int of_get_pci_domain_nr(struct device_node *node); int of_pci_get_max_link_speed(struct device_node *node); void of_pci_check_probe_only(void); -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out); #else static inline struct device_node *of_pci_find_child_device(struct device_node *parent, unsigned int devfn) @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) return -1; } -static inline int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - return -EINVAL; -} - static inline int of_pci_get_max_link_speed(struct device_node *node) { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r iommu-map property is also used by devices with fsl-mc. This patch moves the of_pci_map_rid to generic location, so that it can be used by other busses too. 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no functional change done in the API. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/iommu/of_iommu.c | 5 +-- drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/of/irq.c | 5 +-- drivers/pci/of.c | 101 ---------------------------------------------- include/linux/of.h | 11 +++++ include/linux/of_pci.h | 10 ----- 6 files changed, 117 insertions(+), 117 deletions(-) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 5c36a8b..811e160 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -149,9 +149,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) struct of_phandle_args iommu_spec = { .args_count = 1 }; int err; - err = of_pci_map_rid(info->np, alias, "iommu-map", - "iommu-map-mask", &iommu_spec.np, - iommu_spec.args); + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", + &iommu_spec.np, iommu_spec.args); if (err) return err == -ENODEV ? NO_IOMMU : err; diff --git a/drivers/of/base.c b/drivers/of/base.c index 848f549..c7aac81 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1995,3 +1995,105 @@ int of_find_last_cache_level(unsigned int cpu) return cache_level; } + +/** + * of_map_rid - Translate a requester ID through a downstream mapping. + * @np: root complex device node. + * @rid: device requester ID to map. + * @map_name: property name of the map to use. + * @map_mask_name: optional property name of the mask to use. + * @target: optional pointer to a target device node. + * @id_out: optional pointer to receive the translated ID. + * + * Given a device requester ID, look up the appropriate implementation-defined + * platform ID and/or the target device which receives transactions on that + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or + * @id_out may be NULL if only the other is required. If @target points to + * a non-NULL device node pointer, only entries targeting that node will be + * matched; if it points to a NULL value, it will receive the device node of + * the first matching target phandle, with a reference held. + * + * Return: 0 on success or a standard error code on failure. + */ +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + u32 map_mask, masked_rid; + int map_len; + const __be32 *map = NULL; + + if (!np || !map_name || (!target && !id_out)) + return -EINVAL; + + map = of_get_property(np, map_name, &map_len); + if (!map) { + if (target) + return -ENODEV; + /* Otherwise, no map implies no translation */ + *id_out = rid; + return 0; + } + + if (!map_len || map_len % (4 * sizeof(*map))) { + pr_err("%pOF: Error: Bad %s length: %d\n", np, + map_name, map_len); + return -EINVAL; + } + + /* The default is to select all bits. */ + map_mask = 0xffffffff; + + /* + * Can be overridden by "{iommu,msi}-map-mask" property. + * If of_property_read_u32() fails, the default is used. + */ + if (map_mask_name) + of_property_read_u32(np, map_mask_name, &map_mask); + + masked_rid = map_mask & rid; + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { + struct device_node *phandle_node; + u32 rid_base = be32_to_cpup(map + 0); + u32 phandle = be32_to_cpup(map + 1); + u32 out_base = be32_to_cpup(map + 2); + u32 rid_len = be32_to_cpup(map + 3); + + if (rid_base & ~map_mask) { + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", + np, map_name, map_name, + map_mask, rid_base); + return -EFAULT; + } + + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) + continue; + + phandle_node = of_find_node_by_phandle(phandle); + if (!phandle_node) + return -ENODEV; + + if (target) { + if (*target) + of_node_put(phandle_node); + else + *target = phandle_node; + + if (*target != phandle_node) + continue; + } + + if (id_out) + *id_out = masked_rid - rid_base + out_base; + + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", + np, map_name, map_mask, rid_base, out_base, + rid_len, rid, masked_rid - rid_base + out_base); + return 0; + } + + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", + np, map_name, rid, target && *target ? *target : NULL); + return -EFAULT; +} +EXPORT_SYMBOL_GPL(of_map_rid); diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 02ad93a..e1f6f39 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -22,7 +22,6 @@ #include <linux/module.h> #include <linux/of.h> #include <linux/of_irq.h> -#include <linux/of_pci.h> #include <linux/string.h> #include <linux/slab.h> @@ -588,8 +587,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, * "msi-map" property. */ for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", - "msi-map-mask", np, &rid_out)) + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", + "msi-map-mask", np, &rid_out)) break; return rid_out; } diff --git a/drivers/pci/of.c b/drivers/pci/of.c index a28355c..d2cebbe 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); #endif /* CONFIG_OF_ADDRESS */ -/** - * of_pci_map_rid - Translate a requester ID through a downstream mapping. - * @np: root complex device node. - * @rid: PCI requester ID to map. - * @map_name: property name of the map to use. - * @map_mask_name: optional property name of the mask to use. - * @target: optional pointer to a target device node. - * @id_out: optional pointer to receive the translated ID. - * - * Given a PCI requester ID, look up the appropriate implementation-defined - * platform ID and/or the target device which receives transactions on that - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or - * @id_out may be NULL if only the other is required. If @target points to - * a non-NULL device node pointer, only entries targeting that node will be - * matched; if it points to a NULL value, it will receive the device node of - * the first matching target phandle, with a reference held. - * - * Return: 0 on success or a standard error code on failure. - */ -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - u32 map_mask, masked_rid; - int map_len; - const __be32 *map = NULL; - - if (!np || !map_name || (!target && !id_out)) - return -EINVAL; - - map = of_get_property(np, map_name, &map_len); - if (!map) { - if (target) - return -ENODEV; - /* Otherwise, no map implies no translation */ - *id_out = rid; - return 0; - } - - if (!map_len || map_len % (4 * sizeof(*map))) { - pr_err("%pOF: Error: Bad %s length: %d\n", np, - map_name, map_len); - return -EINVAL; - } - - /* The default is to select all bits. */ - map_mask = 0xffffffff; - - /* - * Can be overridden by "{iommu,msi}-map-mask" property. - * If of_property_read_u32() fails, the default is used. - */ - if (map_mask_name) - of_property_read_u32(np, map_mask_name, &map_mask); - - masked_rid = map_mask & rid; - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { - struct device_node *phandle_node; - u32 rid_base = be32_to_cpup(map + 0); - u32 phandle = be32_to_cpup(map + 1); - u32 out_base = be32_to_cpup(map + 2); - u32 rid_len = be32_to_cpup(map + 3); - - if (rid_base & ~map_mask) { - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", - np, map_name, map_name, - map_mask, rid_base); - return -EFAULT; - } - - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) - continue; - - phandle_node = of_find_node_by_phandle(phandle); - if (!phandle_node) - return -ENODEV; - - if (target) { - if (*target) - of_node_put(phandle_node); - else - *target = phandle_node; - - if (*target != phandle_node) - continue; - } - - if (id_out) - *id_out = masked_rid - rid_base + out_base; - - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", - np, map_name, map_mask, rid_base, out_base, - rid_len, rid, masked_rid - rid_base + out_base); - return 0; - } - - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", - np, map_name, rid, target && *target ? *target : NULL); - return -EFAULT; -} - #if IS_ENABLED(CONFIG_OF_IRQ) /** * of_irq_parse_pci - Resolve the interrupt for a PCI device diff --git a/include/linux/of.h b/include/linux/of.h index 4d25e4f..f4251c3 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -545,6 +545,10 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, extern int of_cpu_node_to_id(struct device_node *np); +int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out); + #else /* CONFIG_OF */ static inline void of_core_init(void) @@ -931,6 +935,13 @@ static inline int of_cpu_node_to_id(struct device_node *np) return -ENODEV; } +static inline int of_map_rid(struct device_node *np, u32 rid, + const char *map_name, const char *map_mask_name, + struct device_node **target, u32 *id_out) +{ + return -EINVAL; +} + #define of_match_ptr(_ptr) NULL #define of_match_node(_matches, _node) NULL #endif /* CONFIG_OF */ diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index 091033a..a23b44a 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, int of_get_pci_domain_nr(struct device_node *node); int of_pci_get_max_link_speed(struct device_node *node); void of_pci_check_probe_only(void); -int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out); #else static inline struct device_node *of_pci_find_child_device(struct device_node *parent, unsigned int devfn) @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) return -1; } -static inline int of_pci_map_rid(struct device_node *np, u32 rid, - const char *map_name, const char *map_mask_name, - struct device_node **target, u32 *id_out) -{ - return -EINVAL; -} - static inline int of_pci_get_max_link_speed(struct device_node *node) { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* Re: [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 20:56 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-04-30 20:56 UTC (permalink / raw) To: Nipun Gupta Cc: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh, hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li On Mon, Apr 30, 2018 at 11:57:17AM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> > --- > drivers/iommu/of_iommu.c | 5 +-- > drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 5 +-- > drivers/pci/of.c | 101 ---------------------------------------------- > include/linux/of.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 117 insertions(+), 117 deletions(-) > > diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c > index 5c36a8b..811e160 100644 > --- a/drivers/iommu/of_iommu.c > +++ b/drivers/iommu/of_iommu.c > @@ -149,9 +149,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) > struct of_phandle_args iommu_spec = { .args_count = 1 }; > int err; > > - err = of_pci_map_rid(info->np, alias, "iommu-map", > - "iommu-map-mask", &iommu_spec.np, > - iommu_spec.args); > + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", > + &iommu_spec.np, iommu_spec.args); > if (err) > return err == -ENODEV ? NO_IOMMU : err; > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index 848f549..c7aac81 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -1995,3 +1995,105 @@ int of_find_last_cache_level(unsigned int cpu) > > return cache_level; > } > + > +/** > + * of_map_rid - Translate a requester ID through a downstream mapping. > + * @np: root complex device node. > + * @rid: device requester ID to map. > + * @map_name: property name of the map to use. > + * @map_mask_name: optional property name of the mask to use. > + * @target: optional pointer to a target device node. > + * @id_out: optional pointer to receive the translated ID. > + * > + * Given a device requester ID, look up the appropriate implementation-defined > + * platform ID and/or the target device which receives transactions on that > + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > + * @id_out may be NULL if only the other is required. If @target points to > + * a non-NULL device node pointer, only entries targeting that node will be > + * matched; if it points to a NULL value, it will receive the device node of > + * the first matching target phandle, with a reference held. > + * > + * Return: 0 on success or a standard error code on failure. > + */ > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + u32 map_mask, masked_rid; > + int map_len; > + const __be32 *map = NULL; > + > + if (!np || !map_name || (!target && !id_out)) > + return -EINVAL; > + > + map = of_get_property(np, map_name, &map_len); > + if (!map) { > + if (target) > + return -ENODEV; > + /* Otherwise, no map implies no translation */ > + *id_out = rid; > + return 0; > + } > + > + if (!map_len || map_len % (4 * sizeof(*map))) { > + pr_err("%pOF: Error: Bad %s length: %d\n", np, > + map_name, map_len); > + return -EINVAL; > + } > + > + /* The default is to select all bits. */ > + map_mask = 0xffffffff; > + > + /* > + * Can be overridden by "{iommu,msi}-map-mask" property. > + * If of_property_read_u32() fails, the default is used. > + */ > + if (map_mask_name) > + of_property_read_u32(np, map_mask_name, &map_mask); > + > + masked_rid = map_mask & rid; > + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > + struct device_node *phandle_node; > + u32 rid_base = be32_to_cpup(map + 0); > + u32 phandle = be32_to_cpup(map + 1); > + u32 out_base = be32_to_cpup(map + 2); > + u32 rid_len = be32_to_cpup(map + 3); > + > + if (rid_base & ~map_mask) { > + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > + np, map_name, map_name, > + map_mask, rid_base); > + return -EFAULT; > + } > + > + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > + continue; > + > + phandle_node = of_find_node_by_phandle(phandle); > + if (!phandle_node) > + return -ENODEV; > + > + if (target) { > + if (*target) > + of_node_put(phandle_node); > + else > + *target = phandle_node; > + > + if (*target != phandle_node) > + continue; > + } > + > + if (id_out) > + *id_out = masked_rid - rid_base + out_base; > + > + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > + np, map_name, map_mask, rid_base, out_base, > + rid_len, rid, masked_rid - rid_base + out_base); > + return 0; > + } > + > + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > + np, map_name, rid, target && *target ? *target : NULL); > + return -EFAULT; > +} > +EXPORT_SYMBOL_GPL(of_map_rid); > diff --git a/drivers/of/irq.c b/drivers/of/irq.c > index 02ad93a..e1f6f39 100644 > --- a/drivers/of/irq.c > +++ b/drivers/of/irq.c > @@ -22,7 +22,6 @@ > #include <linux/module.h> > #include <linux/of.h> > #include <linux/of_irq.h> > -#include <linux/of_pci.h> > #include <linux/string.h> > #include <linux/slab.h> > > @@ -588,8 +587,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, > * "msi-map" property. > */ > for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) > - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", > - "msi-map-mask", np, &rid_out)) > + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", > + "msi-map-mask", np, &rid_out)) > break; > return rid_out; > } > diff --git a/drivers/pci/of.c b/drivers/pci/of.c > index a28355c..d2cebbe 100644 > --- a/drivers/pci/of.c > +++ b/drivers/pci/of.c > @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, > EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); > #endif /* CONFIG_OF_ADDRESS */ > > -/** > - * of_pci_map_rid - Translate a requester ID through a downstream mapping. > - * @np: root complex device node. > - * @rid: PCI requester ID to map. > - * @map_name: property name of the map to use. > - * @map_mask_name: optional property name of the mask to use. > - * @target: optional pointer to a target device node. > - * @id_out: optional pointer to receive the translated ID. > - * > - * Given a PCI requester ID, look up the appropriate implementation-defined > - * platform ID and/or the target device which receives transactions on that > - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > - * @id_out may be NULL if only the other is required. If @target points to > - * a non-NULL device node pointer, only entries targeting that node will be > - * matched; if it points to a NULL value, it will receive the device node of > - * the first matching target phandle, with a reference held. > - * > - * Return: 0 on success or a standard error code on failure. > - */ > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - u32 map_mask, masked_rid; > - int map_len; > - const __be32 *map = NULL; > - > - if (!np || !map_name || (!target && !id_out)) > - return -EINVAL; > - > - map = of_get_property(np, map_name, &map_len); > - if (!map) { > - if (target) > - return -ENODEV; > - /* Otherwise, no map implies no translation */ > - *id_out = rid; > - return 0; > - } > - > - if (!map_len || map_len % (4 * sizeof(*map))) { > - pr_err("%pOF: Error: Bad %s length: %d\n", np, > - map_name, map_len); > - return -EINVAL; > - } > - > - /* The default is to select all bits. */ > - map_mask = 0xffffffff; > - > - /* > - * Can be overridden by "{iommu,msi}-map-mask" property. > - * If of_property_read_u32() fails, the default is used. > - */ > - if (map_mask_name) > - of_property_read_u32(np, map_mask_name, &map_mask); > - > - masked_rid = map_mask & rid; > - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > - struct device_node *phandle_node; > - u32 rid_base = be32_to_cpup(map + 0); > - u32 phandle = be32_to_cpup(map + 1); > - u32 out_base = be32_to_cpup(map + 2); > - u32 rid_len = be32_to_cpup(map + 3); > - > - if (rid_base & ~map_mask) { > - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > - np, map_name, map_name, > - map_mask, rid_base); > - return -EFAULT; > - } > - > - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > - continue; > - > - phandle_node = of_find_node_by_phandle(phandle); > - if (!phandle_node) > - return -ENODEV; > - > - if (target) { > - if (*target) > - of_node_put(phandle_node); > - else > - *target = phandle_node; > - > - if (*target != phandle_node) > - continue; > - } > - > - if (id_out) > - *id_out = masked_rid - rid_base + out_base; > - > - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > - np, map_name, map_mask, rid_base, out_base, > - rid_len, rid, masked_rid - rid_base + out_base); > - return 0; > - } > - > - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > - np, map_name, rid, target && *target ? *target : NULL); > - return -EFAULT; > -} > - > #if IS_ENABLED(CONFIG_OF_IRQ) > /** > * of_irq_parse_pci - Resolve the interrupt for a PCI device > diff --git a/include/linux/of.h b/include/linux/of.h > index 4d25e4f..f4251c3 100644 > --- a/include/linux/of.h > +++ b/include/linux/of.h > @@ -545,6 +545,10 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, > > extern int of_cpu_node_to_id(struct device_node *np); > > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out); > + > #else /* CONFIG_OF */ > > static inline void of_core_init(void) > @@ -931,6 +935,13 @@ static inline int of_cpu_node_to_id(struct device_node *np) > return -ENODEV; > } > > +static inline int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + return -EINVAL; > +} > + > #define of_match_ptr(_ptr) NULL > #define of_match_node(_matches, _node) NULL > #endif /* CONFIG_OF */ > diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h > index 091033a..a23b44a 100644 > --- a/include/linux/of_pci.h > +++ b/include/linux/of_pci.h > @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, > int of_get_pci_domain_nr(struct device_node *node); > int of_pci_get_max_link_speed(struct device_node *node); > void of_pci_check_probe_only(void); > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out); > #else > static inline struct device_node *of_pci_find_child_device(struct device_node *parent, > unsigned int devfn) > @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) > return -1; > } > > -static inline int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - return -EINVAL; > -} > - > static inline int > of_pci_get_max_link_speed(struct device_node *node) > { > -- > 1.9.1 > ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 20:56 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-04-30 20:56 UTC (permalink / raw) To: linux-arm-kernel On Mon, Apr 30, 2018 at 11:57:17AM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> > --- > drivers/iommu/of_iommu.c | 5 +-- > drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 5 +-- > drivers/pci/of.c | 101 ---------------------------------------------- > include/linux/of.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 117 insertions(+), 117 deletions(-) > > diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c > index 5c36a8b..811e160 100644 > --- a/drivers/iommu/of_iommu.c > +++ b/drivers/iommu/of_iommu.c > @@ -149,9 +149,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) > struct of_phandle_args iommu_spec = { .args_count = 1 }; > int err; > > - err = of_pci_map_rid(info->np, alias, "iommu-map", > - "iommu-map-mask", &iommu_spec.np, > - iommu_spec.args); > + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", > + &iommu_spec.np, iommu_spec.args); > if (err) > return err == -ENODEV ? NO_IOMMU : err; > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index 848f549..c7aac81 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -1995,3 +1995,105 @@ int of_find_last_cache_level(unsigned int cpu) > > return cache_level; > } > + > +/** > + * of_map_rid - Translate a requester ID through a downstream mapping. > + * @np: root complex device node. > + * @rid: device requester ID to map. > + * @map_name: property name of the map to use. > + * @map_mask_name: optional property name of the mask to use. > + * @target: optional pointer to a target device node. > + * @id_out: optional pointer to receive the translated ID. > + * > + * Given a device requester ID, look up the appropriate implementation-defined > + * platform ID and/or the target device which receives transactions on that > + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > + * @id_out may be NULL if only the other is required. If @target points to > + * a non-NULL device node pointer, only entries targeting that node will be > + * matched; if it points to a NULL value, it will receive the device node of > + * the first matching target phandle, with a reference held. > + * > + * Return: 0 on success or a standard error code on failure. > + */ > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + u32 map_mask, masked_rid; > + int map_len; > + const __be32 *map = NULL; > + > + if (!np || !map_name || (!target && !id_out)) > + return -EINVAL; > + > + map = of_get_property(np, map_name, &map_len); > + if (!map) { > + if (target) > + return -ENODEV; > + /* Otherwise, no map implies no translation */ > + *id_out = rid; > + return 0; > + } > + > + if (!map_len || map_len % (4 * sizeof(*map))) { > + pr_err("%pOF: Error: Bad %s length: %d\n", np, > + map_name, map_len); > + return -EINVAL; > + } > + > + /* The default is to select all bits. */ > + map_mask = 0xffffffff; > + > + /* > + * Can be overridden by "{iommu,msi}-map-mask" property. > + * If of_property_read_u32() fails, the default is used. > + */ > + if (map_mask_name) > + of_property_read_u32(np, map_mask_name, &map_mask); > + > + masked_rid = map_mask & rid; > + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > + struct device_node *phandle_node; > + u32 rid_base = be32_to_cpup(map + 0); > + u32 phandle = be32_to_cpup(map + 1); > + u32 out_base = be32_to_cpup(map + 2); > + u32 rid_len = be32_to_cpup(map + 3); > + > + if (rid_base & ~map_mask) { > + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > + np, map_name, map_name, > + map_mask, rid_base); > + return -EFAULT; > + } > + > + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > + continue; > + > + phandle_node = of_find_node_by_phandle(phandle); > + if (!phandle_node) > + return -ENODEV; > + > + if (target) { > + if (*target) > + of_node_put(phandle_node); > + else > + *target = phandle_node; > + > + if (*target != phandle_node) > + continue; > + } > + > + if (id_out) > + *id_out = masked_rid - rid_base + out_base; > + > + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > + np, map_name, map_mask, rid_base, out_base, > + rid_len, rid, masked_rid - rid_base + out_base); > + return 0; > + } > + > + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > + np, map_name, rid, target && *target ? *target : NULL); > + return -EFAULT; > +} > +EXPORT_SYMBOL_GPL(of_map_rid); > diff --git a/drivers/of/irq.c b/drivers/of/irq.c > index 02ad93a..e1f6f39 100644 > --- a/drivers/of/irq.c > +++ b/drivers/of/irq.c > @@ -22,7 +22,6 @@ > #include <linux/module.h> > #include <linux/of.h> > #include <linux/of_irq.h> > -#include <linux/of_pci.h> > #include <linux/string.h> > #include <linux/slab.h> > > @@ -588,8 +587,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, > * "msi-map" property. > */ > for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) > - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", > - "msi-map-mask", np, &rid_out)) > + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", > + "msi-map-mask", np, &rid_out)) > break; > return rid_out; > } > diff --git a/drivers/pci/of.c b/drivers/pci/of.c > index a28355c..d2cebbe 100644 > --- a/drivers/pci/of.c > +++ b/drivers/pci/of.c > @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, > EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); > #endif /* CONFIG_OF_ADDRESS */ > > -/** > - * of_pci_map_rid - Translate a requester ID through a downstream mapping. > - * @np: root complex device node. > - * @rid: PCI requester ID to map. > - * @map_name: property name of the map to use. > - * @map_mask_name: optional property name of the mask to use. > - * @target: optional pointer to a target device node. > - * @id_out: optional pointer to receive the translated ID. > - * > - * Given a PCI requester ID, look up the appropriate implementation-defined > - * platform ID and/or the target device which receives transactions on that > - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > - * @id_out may be NULL if only the other is required. If @target points to > - * a non-NULL device node pointer, only entries targeting that node will be > - * matched; if it points to a NULL value, it will receive the device node of > - * the first matching target phandle, with a reference held. > - * > - * Return: 0 on success or a standard error code on failure. > - */ > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - u32 map_mask, masked_rid; > - int map_len; > - const __be32 *map = NULL; > - > - if (!np || !map_name || (!target && !id_out)) > - return -EINVAL; > - > - map = of_get_property(np, map_name, &map_len); > - if (!map) { > - if (target) > - return -ENODEV; > - /* Otherwise, no map implies no translation */ > - *id_out = rid; > - return 0; > - } > - > - if (!map_len || map_len % (4 * sizeof(*map))) { > - pr_err("%pOF: Error: Bad %s length: %d\n", np, > - map_name, map_len); > - return -EINVAL; > - } > - > - /* The default is to select all bits. */ > - map_mask = 0xffffffff; > - > - /* > - * Can be overridden by "{iommu,msi}-map-mask" property. > - * If of_property_read_u32() fails, the default is used. > - */ > - if (map_mask_name) > - of_property_read_u32(np, map_mask_name, &map_mask); > - > - masked_rid = map_mask & rid; > - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > - struct device_node *phandle_node; > - u32 rid_base = be32_to_cpup(map + 0); > - u32 phandle = be32_to_cpup(map + 1); > - u32 out_base = be32_to_cpup(map + 2); > - u32 rid_len = be32_to_cpup(map + 3); > - > - if (rid_base & ~map_mask) { > - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > - np, map_name, map_name, > - map_mask, rid_base); > - return -EFAULT; > - } > - > - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > - continue; > - > - phandle_node = of_find_node_by_phandle(phandle); > - if (!phandle_node) > - return -ENODEV; > - > - if (target) { > - if (*target) > - of_node_put(phandle_node); > - else > - *target = phandle_node; > - > - if (*target != phandle_node) > - continue; > - } > - > - if (id_out) > - *id_out = masked_rid - rid_base + out_base; > - > - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > - np, map_name, map_mask, rid_base, out_base, > - rid_len, rid, masked_rid - rid_base + out_base); > - return 0; > - } > - > - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > - np, map_name, rid, target && *target ? *target : NULL); > - return -EFAULT; > -} > - > #if IS_ENABLED(CONFIG_OF_IRQ) > /** > * of_irq_parse_pci - Resolve the interrupt for a PCI device > diff --git a/include/linux/of.h b/include/linux/of.h > index 4d25e4f..f4251c3 100644 > --- a/include/linux/of.h > +++ b/include/linux/of.h > @@ -545,6 +545,10 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, > > extern int of_cpu_node_to_id(struct device_node *np); > > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out); > + > #else /* CONFIG_OF */ > > static inline void of_core_init(void) > @@ -931,6 +935,13 @@ static inline int of_cpu_node_to_id(struct device_node *np) > return -ENODEV; > } > > +static inline int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + return -EINVAL; > +} > + > #define of_match_ptr(_ptr) NULL > #define of_match_node(_matches, _node) NULL > #endif /* CONFIG_OF */ > diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h > index 091033a..a23b44a 100644 > --- a/include/linux/of_pci.h > +++ b/include/linux/of_pci.h > @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, > int of_get_pci_domain_nr(struct device_node *node); > int of_pci_get_max_link_speed(struct device_node *node); > void of_pci_check_probe_only(void); > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out); > #else > static inline struct device_node *of_pci_find_child_device(struct device_node *parent, > unsigned int devfn) > @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) > return -1; > } > > -static inline int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - return -EINVAL; > -} > - > static inline int > of_pci_get_max_link_speed(struct device_node *node) > { > -- > 1.9.1 > ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 20:56 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-04-30 20:56 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland, stuyoder, linux-pci, will.deacon, shawnguo, bharat.bhushan, hch, m.szyprowski, robh, frowand.list, joro, catalin.marinas, devicetree, robin.murphy, robh+dt, bhelgaas, linux-arm-kernel, laurentiu.tudor, gregkh, linux-kernel, leoyang.li, iommu, linuxppc-dev On Mon, Apr 30, 2018 at 11:57:17AM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> > --- > drivers/iommu/of_iommu.c | 5 +-- > drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 5 +-- > drivers/pci/of.c | 101 ---------------------------------------------- > include/linux/of.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 117 insertions(+), 117 deletions(-) > > diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c > index 5c36a8b..811e160 100644 > --- a/drivers/iommu/of_iommu.c > +++ b/drivers/iommu/of_iommu.c > @@ -149,9 +149,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) > struct of_phandle_args iommu_spec = { .args_count = 1 }; > int err; > > - err = of_pci_map_rid(info->np, alias, "iommu-map", > - "iommu-map-mask", &iommu_spec.np, > - iommu_spec.args); > + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", > + &iommu_spec.np, iommu_spec.args); > if (err) > return err == -ENODEV ? NO_IOMMU : err; > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index 848f549..c7aac81 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -1995,3 +1995,105 @@ int of_find_last_cache_level(unsigned int cpu) > > return cache_level; > } > + > +/** > + * of_map_rid - Translate a requester ID through a downstream mapping. > + * @np: root complex device node. > + * @rid: device requester ID to map. > + * @map_name: property name of the map to use. > + * @map_mask_name: optional property name of the mask to use. > + * @target: optional pointer to a target device node. > + * @id_out: optional pointer to receive the translated ID. > + * > + * Given a device requester ID, look up the appropriate implementation-defined > + * platform ID and/or the target device which receives transactions on that > + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > + * @id_out may be NULL if only the other is required. If @target points to > + * a non-NULL device node pointer, only entries targeting that node will be > + * matched; if it points to a NULL value, it will receive the device node of > + * the first matching target phandle, with a reference held. > + * > + * Return: 0 on success or a standard error code on failure. > + */ > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + u32 map_mask, masked_rid; > + int map_len; > + const __be32 *map = NULL; > + > + if (!np || !map_name || (!target && !id_out)) > + return -EINVAL; > + > + map = of_get_property(np, map_name, &map_len); > + if (!map) { > + if (target) > + return -ENODEV; > + /* Otherwise, no map implies no translation */ > + *id_out = rid; > + return 0; > + } > + > + if (!map_len || map_len % (4 * sizeof(*map))) { > + pr_err("%pOF: Error: Bad %s length: %d\n", np, > + map_name, map_len); > + return -EINVAL; > + } > + > + /* The default is to select all bits. */ > + map_mask = 0xffffffff; > + > + /* > + * Can be overridden by "{iommu,msi}-map-mask" property. > + * If of_property_read_u32() fails, the default is used. > + */ > + if (map_mask_name) > + of_property_read_u32(np, map_mask_name, &map_mask); > + > + masked_rid = map_mask & rid; > + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > + struct device_node *phandle_node; > + u32 rid_base = be32_to_cpup(map + 0); > + u32 phandle = be32_to_cpup(map + 1); > + u32 out_base = be32_to_cpup(map + 2); > + u32 rid_len = be32_to_cpup(map + 3); > + > + if (rid_base & ~map_mask) { > + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > + np, map_name, map_name, > + map_mask, rid_base); > + return -EFAULT; > + } > + > + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > + continue; > + > + phandle_node = of_find_node_by_phandle(phandle); > + if (!phandle_node) > + return -ENODEV; > + > + if (target) { > + if (*target) > + of_node_put(phandle_node); > + else > + *target = phandle_node; > + > + if (*target != phandle_node) > + continue; > + } > + > + if (id_out) > + *id_out = masked_rid - rid_base + out_base; > + > + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > + np, map_name, map_mask, rid_base, out_base, > + rid_len, rid, masked_rid - rid_base + out_base); > + return 0; > + } > + > + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > + np, map_name, rid, target && *target ? *target : NULL); > + return -EFAULT; > +} > +EXPORT_SYMBOL_GPL(of_map_rid); > diff --git a/drivers/of/irq.c b/drivers/of/irq.c > index 02ad93a..e1f6f39 100644 > --- a/drivers/of/irq.c > +++ b/drivers/of/irq.c > @@ -22,7 +22,6 @@ > #include <linux/module.h> > #include <linux/of.h> > #include <linux/of_irq.h> > -#include <linux/of_pci.h> > #include <linux/string.h> > #include <linux/slab.h> > > @@ -588,8 +587,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, > * "msi-map" property. > */ > for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) > - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", > - "msi-map-mask", np, &rid_out)) > + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", > + "msi-map-mask", np, &rid_out)) > break; > return rid_out; > } > diff --git a/drivers/pci/of.c b/drivers/pci/of.c > index a28355c..d2cebbe 100644 > --- a/drivers/pci/of.c > +++ b/drivers/pci/of.c > @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, > EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); > #endif /* CONFIG_OF_ADDRESS */ > > -/** > - * of_pci_map_rid - Translate a requester ID through a downstream mapping. > - * @np: root complex device node. > - * @rid: PCI requester ID to map. > - * @map_name: property name of the map to use. > - * @map_mask_name: optional property name of the mask to use. > - * @target: optional pointer to a target device node. > - * @id_out: optional pointer to receive the translated ID. > - * > - * Given a PCI requester ID, look up the appropriate implementation-defined > - * platform ID and/or the target device which receives transactions on that > - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > - * @id_out may be NULL if only the other is required. If @target points to > - * a non-NULL device node pointer, only entries targeting that node will be > - * matched; if it points to a NULL value, it will receive the device node of > - * the first matching target phandle, with a reference held. > - * > - * Return: 0 on success or a standard error code on failure. > - */ > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - u32 map_mask, masked_rid; > - int map_len; > - const __be32 *map = NULL; > - > - if (!np || !map_name || (!target && !id_out)) > - return -EINVAL; > - > - map = of_get_property(np, map_name, &map_len); > - if (!map) { > - if (target) > - return -ENODEV; > - /* Otherwise, no map implies no translation */ > - *id_out = rid; > - return 0; > - } > - > - if (!map_len || map_len % (4 * sizeof(*map))) { > - pr_err("%pOF: Error: Bad %s length: %d\n", np, > - map_name, map_len); > - return -EINVAL; > - } > - > - /* The default is to select all bits. */ > - map_mask = 0xffffffff; > - > - /* > - * Can be overridden by "{iommu,msi}-map-mask" property. > - * If of_property_read_u32() fails, the default is used. > - */ > - if (map_mask_name) > - of_property_read_u32(np, map_mask_name, &map_mask); > - > - masked_rid = map_mask & rid; > - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > - struct device_node *phandle_node; > - u32 rid_base = be32_to_cpup(map + 0); > - u32 phandle = be32_to_cpup(map + 1); > - u32 out_base = be32_to_cpup(map + 2); > - u32 rid_len = be32_to_cpup(map + 3); > - > - if (rid_base & ~map_mask) { > - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > - np, map_name, map_name, > - map_mask, rid_base); > - return -EFAULT; > - } > - > - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > - continue; > - > - phandle_node = of_find_node_by_phandle(phandle); > - if (!phandle_node) > - return -ENODEV; > - > - if (target) { > - if (*target) > - of_node_put(phandle_node); > - else > - *target = phandle_node; > - > - if (*target != phandle_node) > - continue; > - } > - > - if (id_out) > - *id_out = masked_rid - rid_base + out_base; > - > - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > - np, map_name, map_mask, rid_base, out_base, > - rid_len, rid, masked_rid - rid_base + out_base); > - return 0; > - } > - > - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > - np, map_name, rid, target && *target ? *target : NULL); > - return -EFAULT; > -} > - > #if IS_ENABLED(CONFIG_OF_IRQ) > /** > * of_irq_parse_pci - Resolve the interrupt for a PCI device > diff --git a/include/linux/of.h b/include/linux/of.h > index 4d25e4f..f4251c3 100644 > --- a/include/linux/of.h > +++ b/include/linux/of.h > @@ -545,6 +545,10 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, > > extern int of_cpu_node_to_id(struct device_node *np); > > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out); > + > #else /* CONFIG_OF */ > > static inline void of_core_init(void) > @@ -931,6 +935,13 @@ static inline int of_cpu_node_to_id(struct device_node *np) > return -ENODEV; > } > > +static inline int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + return -EINVAL; > +} > + > #define of_match_ptr(_ptr) NULL > #define of_match_node(_matches, _node) NULL > #endif /* CONFIG_OF */ > diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h > index 091033a..a23b44a 100644 > --- a/include/linux/of_pci.h > +++ b/include/linux/of_pci.h > @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, > int of_get_pci_domain_nr(struct device_node *node); > int of_pci_get_max_link_speed(struct device_node *node); > void of_pci_check_probe_only(void); > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out); > #else > static inline struct device_node *of_pci_find_child_device(struct device_node *parent, > unsigned int devfn) > @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) > return -1; > } > > -static inline int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - return -EINVAL; > -} > - > static inline int > of_pci_get_max_link_speed(struct device_node *node) > { > -- > 1.9.1 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-04-30 20:56 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-04-30 20:56 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, will.deacon-5wv7dgnIgG8, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, robh-DgEjT+Ai2ygdnm+yROfE0A, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, catalin.marinas-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ On Mon, Apr 30, 2018 at 11:57:17AM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> Acked-by: Bjorn Helgaas <bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org> > --- > drivers/iommu/of_iommu.c | 5 +-- > drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 5 +-- > drivers/pci/of.c | 101 ---------------------------------------------- > include/linux/of.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 117 insertions(+), 117 deletions(-) > > diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c > index 5c36a8b..811e160 100644 > --- a/drivers/iommu/of_iommu.c > +++ b/drivers/iommu/of_iommu.c > @@ -149,9 +149,8 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) > struct of_phandle_args iommu_spec = { .args_count = 1 }; > int err; > > - err = of_pci_map_rid(info->np, alias, "iommu-map", > - "iommu-map-mask", &iommu_spec.np, > - iommu_spec.args); > + err = of_map_rid(info->np, alias, "iommu-map", "iommu-map-mask", > + &iommu_spec.np, iommu_spec.args); > if (err) > return err == -ENODEV ? NO_IOMMU : err; > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index 848f549..c7aac81 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -1995,3 +1995,105 @@ int of_find_last_cache_level(unsigned int cpu) > > return cache_level; > } > + > +/** > + * of_map_rid - Translate a requester ID through a downstream mapping. > + * @np: root complex device node. > + * @rid: device requester ID to map. > + * @map_name: property name of the map to use. > + * @map_mask_name: optional property name of the mask to use. > + * @target: optional pointer to a target device node. > + * @id_out: optional pointer to receive the translated ID. > + * > + * Given a device requester ID, look up the appropriate implementation-defined > + * platform ID and/or the target device which receives transactions on that > + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > + * @id_out may be NULL if only the other is required. If @target points to > + * a non-NULL device node pointer, only entries targeting that node will be > + * matched; if it points to a NULL value, it will receive the device node of > + * the first matching target phandle, with a reference held. > + * > + * Return: 0 on success or a standard error code on failure. > + */ > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + u32 map_mask, masked_rid; > + int map_len; > + const __be32 *map = NULL; > + > + if (!np || !map_name || (!target && !id_out)) > + return -EINVAL; > + > + map = of_get_property(np, map_name, &map_len); > + if (!map) { > + if (target) > + return -ENODEV; > + /* Otherwise, no map implies no translation */ > + *id_out = rid; > + return 0; > + } > + > + if (!map_len || map_len % (4 * sizeof(*map))) { > + pr_err("%pOF: Error: Bad %s length: %d\n", np, > + map_name, map_len); > + return -EINVAL; > + } > + > + /* The default is to select all bits. */ > + map_mask = 0xffffffff; > + > + /* > + * Can be overridden by "{iommu,msi}-map-mask" property. > + * If of_property_read_u32() fails, the default is used. > + */ > + if (map_mask_name) > + of_property_read_u32(np, map_mask_name, &map_mask); > + > + masked_rid = map_mask & rid; > + for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > + struct device_node *phandle_node; > + u32 rid_base = be32_to_cpup(map + 0); > + u32 phandle = be32_to_cpup(map + 1); > + u32 out_base = be32_to_cpup(map + 2); > + u32 rid_len = be32_to_cpup(map + 3); > + > + if (rid_base & ~map_mask) { > + pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > + np, map_name, map_name, > + map_mask, rid_base); > + return -EFAULT; > + } > + > + if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > + continue; > + > + phandle_node = of_find_node_by_phandle(phandle); > + if (!phandle_node) > + return -ENODEV; > + > + if (target) { > + if (*target) > + of_node_put(phandle_node); > + else > + *target = phandle_node; > + > + if (*target != phandle_node) > + continue; > + } > + > + if (id_out) > + *id_out = masked_rid - rid_base + out_base; > + > + pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > + np, map_name, map_mask, rid_base, out_base, > + rid_len, rid, masked_rid - rid_base + out_base); > + return 0; > + } > + > + pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > + np, map_name, rid, target && *target ? *target : NULL); > + return -EFAULT; > +} > +EXPORT_SYMBOL_GPL(of_map_rid); > diff --git a/drivers/of/irq.c b/drivers/of/irq.c > index 02ad93a..e1f6f39 100644 > --- a/drivers/of/irq.c > +++ b/drivers/of/irq.c > @@ -22,7 +22,6 @@ > #include <linux/module.h> > #include <linux/of.h> > #include <linux/of_irq.h> > -#include <linux/of_pci.h> > #include <linux/string.h> > #include <linux/slab.h> > > @@ -588,8 +587,8 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, > * "msi-map" property. > */ > for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) > - if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map", > - "msi-map-mask", np, &rid_out)) > + if (!of_map_rid(parent_dev->of_node, rid_in, "msi-map", > + "msi-map-mask", np, &rid_out)) > break; > return rid_out; > } > diff --git a/drivers/pci/of.c b/drivers/pci/of.c > index a28355c..d2cebbe 100644 > --- a/drivers/pci/of.c > +++ b/drivers/pci/of.c > @@ -362,107 +362,6 @@ int of_pci_get_host_bridge_resources(struct device_node *dev, > EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); > #endif /* CONFIG_OF_ADDRESS */ > > -/** > - * of_pci_map_rid - Translate a requester ID through a downstream mapping. > - * @np: root complex device node. > - * @rid: PCI requester ID to map. > - * @map_name: property name of the map to use. > - * @map_mask_name: optional property name of the mask to use. > - * @target: optional pointer to a target device node. > - * @id_out: optional pointer to receive the translated ID. > - * > - * Given a PCI requester ID, look up the appropriate implementation-defined > - * platform ID and/or the target device which receives transactions on that > - * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or > - * @id_out may be NULL if only the other is required. If @target points to > - * a non-NULL device node pointer, only entries targeting that node will be > - * matched; if it points to a NULL value, it will receive the device node of > - * the first matching target phandle, with a reference held. > - * > - * Return: 0 on success or a standard error code on failure. > - */ > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - u32 map_mask, masked_rid; > - int map_len; > - const __be32 *map = NULL; > - > - if (!np || !map_name || (!target && !id_out)) > - return -EINVAL; > - > - map = of_get_property(np, map_name, &map_len); > - if (!map) { > - if (target) > - return -ENODEV; > - /* Otherwise, no map implies no translation */ > - *id_out = rid; > - return 0; > - } > - > - if (!map_len || map_len % (4 * sizeof(*map))) { > - pr_err("%pOF: Error: Bad %s length: %d\n", np, > - map_name, map_len); > - return -EINVAL; > - } > - > - /* The default is to select all bits. */ > - map_mask = 0xffffffff; > - > - /* > - * Can be overridden by "{iommu,msi}-map-mask" property. > - * If of_property_read_u32() fails, the default is used. > - */ > - if (map_mask_name) > - of_property_read_u32(np, map_mask_name, &map_mask); > - > - masked_rid = map_mask & rid; > - for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { > - struct device_node *phandle_node; > - u32 rid_base = be32_to_cpup(map + 0); > - u32 phandle = be32_to_cpup(map + 1); > - u32 out_base = be32_to_cpup(map + 2); > - u32 rid_len = be32_to_cpup(map + 3); > - > - if (rid_base & ~map_mask) { > - pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores rid-base (0x%x)\n", > - np, map_name, map_name, > - map_mask, rid_base); > - return -EFAULT; > - } > - > - if (masked_rid < rid_base || masked_rid >= rid_base + rid_len) > - continue; > - > - phandle_node = of_find_node_by_phandle(phandle); > - if (!phandle_node) > - return -ENODEV; > - > - if (target) { > - if (*target) > - of_node_put(phandle_node); > - else > - *target = phandle_node; > - > - if (*target != phandle_node) > - continue; > - } > - > - if (id_out) > - *id_out = masked_rid - rid_base + out_base; > - > - pr_debug("%pOF: %s, using mask %08x, rid-base: %08x, out-base: %08x, length: %08x, rid: %08x -> %08x\n", > - np, map_name, map_mask, rid_base, out_base, > - rid_len, rid, masked_rid - rid_base + out_base); > - return 0; > - } > - > - pr_err("%pOF: Invalid %s translation - no match for rid 0x%x on %pOF\n", > - np, map_name, rid, target && *target ? *target : NULL); > - return -EFAULT; > -} > - > #if IS_ENABLED(CONFIG_OF_IRQ) > /** > * of_irq_parse_pci - Resolve the interrupt for a PCI device > diff --git a/include/linux/of.h b/include/linux/of.h > index 4d25e4f..f4251c3 100644 > --- a/include/linux/of.h > +++ b/include/linux/of.h > @@ -545,6 +545,10 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, > > extern int of_cpu_node_to_id(struct device_node *np); > > +int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out); > + > #else /* CONFIG_OF */ > > static inline void of_core_init(void) > @@ -931,6 +935,13 @@ static inline int of_cpu_node_to_id(struct device_node *np) > return -ENODEV; > } > > +static inline int of_map_rid(struct device_node *np, u32 rid, > + const char *map_name, const char *map_mask_name, > + struct device_node **target, u32 *id_out) > +{ > + return -EINVAL; > +} > + > #define of_match_ptr(_ptr) NULL > #define of_match_node(_matches, _node) NULL > #endif /* CONFIG_OF */ > diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h > index 091033a..a23b44a 100644 > --- a/include/linux/of_pci.h > +++ b/include/linux/of_pci.h > @@ -17,9 +17,6 @@ struct device_node *of_pci_find_child_device(struct device_node *parent, > int of_get_pci_domain_nr(struct device_node *node); > int of_pci_get_max_link_speed(struct device_node *node); > void of_pci_check_probe_only(void); > -int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out); > #else > static inline struct device_node *of_pci_find_child_device(struct device_node *parent, > unsigned int devfn) > @@ -44,13 +41,6 @@ static inline int of_pci_get_devfn(struct device_node *np) > return -1; > } > > -static inline int of_pci_map_rid(struct device_node *np, u32 rid, > - const char *map_name, const char *map_mask_name, > - struct device_node **target, u32 *id_out) > -{ > - return -EINVAL; > -} > - > static inline int > of_pci_get_max_link_speed(struct device_node *node) > { > -- > 1.9.1 > ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-05-01 12:44 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-05-01 12:44 UTC (permalink / raw) To: Nipun Gupta Cc: robin.murphy, will.deacon, mark.rutland, catalin.marinas, gregkh, hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li On Mon, Apr 30, 2018 at 11:57:17AM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/iommu/of_iommu.c | 5 +-- > drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 5 +-- > drivers/pci/of.c | 101 ---------------------------------------------- > include/linux/of.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 117 insertions(+), 117 deletions(-) Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-05-01 12:44 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-05-01 12:44 UTC (permalink / raw) To: linux-arm-kernel On Mon, Apr 30, 2018 at 11:57:17AM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/iommu/of_iommu.c | 5 +-- > drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 5 +-- > drivers/pci/of.c | 101 ---------------------------------------------- > include/linux/of.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 117 insertions(+), 117 deletions(-) Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too @ 2018-05-01 12:44 ` Rob Herring 0 siblings, 0 replies; 100+ messages in thread From: Rob Herring @ 2018-05-01 12:44 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, will.deacon-5wv7dgnIgG8, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, catalin.marinas-5wv7dgnIgG8, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r On Mon, Apr 30, 2018 at 11:57:17AM +0530, Nipun Gupta wrote: > iommu-map property is also used by devices with fsl-mc. This > patch moves the of_pci_map_rid to generic location, so that it > can be used by other busses too. > > 'of_pci_map_rid' is renamed here to 'of_map_rid' and there is no > functional change done in the API. > > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > --- > drivers/iommu/of_iommu.c | 5 +-- > drivers/of/base.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/of/irq.c | 5 +-- > drivers/pci/of.c | 101 ---------------------------------------------- > include/linux/of.h | 11 +++++ > include/linux/of_pci.h | 10 ----- > 6 files changed, 117 insertions(+), 117 deletions(-) Reviewed-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 3/6] iommu: support iommu configuration for fsl-mc devices @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 811e160..284474d 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -24,6 +24,7 @@ #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> +#include <linux/fsl/mc.h> #define NO_IOMMU 1 @@ -159,6 +160,23 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) return err; } +static int of_fsl_mc_iommu_init(struct fsl_mc_device *mc_dev, + struct device_node *master_np) +{ + struct of_phandle_args iommu_spec = { .args_count = 1 }; + int err; + + err = of_map_rid(master_np, mc_dev->icid, "iommu-map", + "iommu-map-mask", &iommu_spec.np, + iommu_spec.args); + if (err) + return err == -ENODEV ? NO_IOMMU : err; + + err = of_iommu_xlate(&mc_dev->dev, &iommu_spec); + of_node_put(iommu_spec.np); + return err; +} + const struct iommu_ops *of_iommu_configure(struct device *dev, struct device_node *master_np) { @@ -190,6 +208,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, err = pci_for_each_dma_alias(to_pci_dev(dev), of_pci_iommu_init, &info); + } else if (dev_is_fsl_mc(dev)) { + err = of_fsl_mc_iommu_init(to_fsl_mc_device(dev), master_np); } else { struct of_phandle_args iommu_spec; int idx = 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 3/6] iommu: support iommu configuration for fsl-mc devices @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/of_iommu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 811e160..284474d 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -24,6 +24,7 @@ #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> +#include <linux/fsl/mc.h> #define NO_IOMMU 1 @@ -159,6 +160,23 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) return err; } +static int of_fsl_mc_iommu_init(struct fsl_mc_device *mc_dev, + struct device_node *master_np) +{ + struct of_phandle_args iommu_spec = { .args_count = 1 }; + int err; + + err = of_map_rid(master_np, mc_dev->icid, "iommu-map", + "iommu-map-mask", &iommu_spec.np, + iommu_spec.args); + if (err) + return err == -ENODEV ? NO_IOMMU : err; + + err = of_iommu_xlate(&mc_dev->dev, &iommu_spec); + of_node_put(iommu_spec.np); + return err; +} + const struct iommu_ops *of_iommu_configure(struct device *dev, struct device_node *master_np) { @@ -190,6 +208,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, err = pci_for_each_dma_alias(to_pci_dev(dev), of_pci_iommu_init, &info); + } else if (dev_is_fsl_mc(dev)) { + err = of_fsl_mc_iommu_init(to_fsl_mc_device(dev), master_np); } else { struct of_phandle_args iommu_spec; int idx = 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 3/6] iommu: support iommu configuration for fsl-mc devices @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/iommu/of_iommu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index 811e160..284474d 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -24,6 +24,7 @@ #include <linux/of_iommu.h> #include <linux/of_pci.h> #include <linux/slab.h> +#include <linux/fsl/mc.h> #define NO_IOMMU 1 @@ -159,6 +160,23 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) return err; } +static int of_fsl_mc_iommu_init(struct fsl_mc_device *mc_dev, + struct device_node *master_np) +{ + struct of_phandle_args iommu_spec = { .args_count = 1 }; + int err; + + err = of_map_rid(master_np, mc_dev->icid, "iommu-map", + "iommu-map-mask", &iommu_spec.np, + iommu_spec.args); + if (err) + return err == -ENODEV ? NO_IOMMU : err; + + err = of_iommu_xlate(&mc_dev->dev, &iommu_spec); + of_node_put(iommu_spec.np); + return err; +} + const struct iommu_ops *of_iommu_configure(struct device *dev, struct device_node *master_np) { @@ -190,6 +208,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, err = pci_for_each_dma_alias(to_pci_dev(dev), of_pci_iommu_init, &info); + } else if (dev_is_fsl_mc(dev)) { + err = of_fsl_mc_iommu_init(to_fsl_mc_device(dev), master_np); } else { struct of_phandle_args iommu_spec; int idx = 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 4/6] iommu: arm-smmu: Add support for the fsl-mc bus @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta Implement bus specific support for the fsl-mc bus including registering arm_smmu_ops and bus specific device add operations. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/arm-smmu.c | 7 +++++++ drivers/iommu/iommu.c | 21 +++++++++++++++++++++ include/linux/fsl/mc.h | 8 ++++++++ include/linux/iommu.h | 2 ++ 4 files changed, 38 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 69e7c60..e1d5090 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -52,6 +52,7 @@ #include <linux/spinlock.h> #include <linux/amba/bus.h> +#include <linux/fsl/mc.h> #include "io-pgtable.h" #include "arm-smmu-regs.h" @@ -1459,6 +1460,8 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) if (dev_is_pci(dev)) group = pci_device_group(dev); + else if (dev_is_fsl_mc(dev)) + group = fsl_mc_device_group(dev); else group = generic_device_group(dev); @@ -2037,6 +2040,10 @@ static void arm_smmu_bus_init(void) bus_set_iommu(&pci_bus_type, &arm_smmu_ops); } #endif +#ifdef CONFIG_FSL_MC_BUS + if (!iommu_present(&fsl_mc_bus_type)) + bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops); +#endif } static int arm_smmu_device_probe(struct platform_device *pdev) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d2aa2320..6d4ce35 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -32,6 +32,7 @@ #include <linux/pci.h> #include <linux/bitops.h> #include <linux/property.h> +#include <linux/fsl/mc.h> #include <trace/events/iommu.h> static struct kset *iommu_group_kset; @@ -987,6 +988,26 @@ struct iommu_group *pci_device_group(struct device *dev) return iommu_group_alloc(); } +/* Get the IOMMU group for device on fsl-mc bus */ +struct iommu_group *fsl_mc_device_group(struct device *dev) +{ + struct device *cont_dev = fsl_mc_cont_dev(dev); + struct iommu_group *group; + + /* Container device is responsible for creating the iommu group */ + if (fsl_mc_is_cont_dev(dev)) { + group = iommu_group_alloc(); + if (IS_ERR(group)) + return NULL; + } else { + get_device(cont_dev); + group = iommu_group_get(cont_dev); + put_device(cont_dev); + } + + return group; +} + /** * iommu_group_get_for_dev - Find or create the IOMMU group for a device * @dev: target device diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h index f27cb14..dddaca1 100644 --- a/include/linux/fsl/mc.h +++ b/include/linux/fsl/mc.h @@ -351,6 +351,14 @@ struct fsl_mc_io { #define dev_is_fsl_mc(_dev) (0) #endif +/* Macro to check if a device is a container device */ +#define fsl_mc_is_cont_dev(_dev) (to_fsl_mc_device(_dev)->flags & \ + FSL_MC_IS_DPRC) + +/* Macro to get the container device of a MC device */ +#define fsl_mc_cont_dev(_dev) (fsl_mc_is_cont_dev(_dev) ? \ + (_dev) : (_dev)->parent) + /* * module_fsl_mc_driver() - Helper macro for drivers that don't do * anything special in module init/exit. This eliminates a lot of diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 19938ee..2981200 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -389,6 +389,8 @@ static inline size_t iommu_map_sg(struct iommu_domain *domain, extern struct iommu_group *pci_device_group(struct device *dev); /* Generic device grouping function */ extern struct iommu_group *generic_device_group(struct device *dev); +/* FSL-MC device grouping function */ +struct iommu_group *fsl_mc_device_group(struct device *dev); /** * struct iommu_fwspec - per-device IOMMU instance data -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 4/6] iommu: arm-smmu: Add support for the fsl-mc bus @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: linux-arm-kernel Implement bus specific support for the fsl-mc bus including registering arm_smmu_ops and bus specific device add operations. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/iommu/arm-smmu.c | 7 +++++++ drivers/iommu/iommu.c | 21 +++++++++++++++++++++ include/linux/fsl/mc.h | 8 ++++++++ include/linux/iommu.h | 2 ++ 4 files changed, 38 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 69e7c60..e1d5090 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -52,6 +52,7 @@ #include <linux/spinlock.h> #include <linux/amba/bus.h> +#include <linux/fsl/mc.h> #include "io-pgtable.h" #include "arm-smmu-regs.h" @@ -1459,6 +1460,8 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) if (dev_is_pci(dev)) group = pci_device_group(dev); + else if (dev_is_fsl_mc(dev)) + group = fsl_mc_device_group(dev); else group = generic_device_group(dev); @@ -2037,6 +2040,10 @@ static void arm_smmu_bus_init(void) bus_set_iommu(&pci_bus_type, &arm_smmu_ops); } #endif +#ifdef CONFIG_FSL_MC_BUS + if (!iommu_present(&fsl_mc_bus_type)) + bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops); +#endif } static int arm_smmu_device_probe(struct platform_device *pdev) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d2aa2320..6d4ce35 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -32,6 +32,7 @@ #include <linux/pci.h> #include <linux/bitops.h> #include <linux/property.h> +#include <linux/fsl/mc.h> #include <trace/events/iommu.h> static struct kset *iommu_group_kset; @@ -987,6 +988,26 @@ struct iommu_group *pci_device_group(struct device *dev) return iommu_group_alloc(); } +/* Get the IOMMU group for device on fsl-mc bus */ +struct iommu_group *fsl_mc_device_group(struct device *dev) +{ + struct device *cont_dev = fsl_mc_cont_dev(dev); + struct iommu_group *group; + + /* Container device is responsible for creating the iommu group */ + if (fsl_mc_is_cont_dev(dev)) { + group = iommu_group_alloc(); + if (IS_ERR(group)) + return NULL; + } else { + get_device(cont_dev); + group = iommu_group_get(cont_dev); + put_device(cont_dev); + } + + return group; +} + /** * iommu_group_get_for_dev - Find or create the IOMMU group for a device * @dev: target device diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h index f27cb14..dddaca1 100644 --- a/include/linux/fsl/mc.h +++ b/include/linux/fsl/mc.h @@ -351,6 +351,14 @@ struct fsl_mc_io { #define dev_is_fsl_mc(_dev) (0) #endif +/* Macro to check if a device is a container device */ +#define fsl_mc_is_cont_dev(_dev) (to_fsl_mc_device(_dev)->flags & \ + FSL_MC_IS_DPRC) + +/* Macro to get the container device of a MC device */ +#define fsl_mc_cont_dev(_dev) (fsl_mc_is_cont_dev(_dev) ? \ + (_dev) : (_dev)->parent) + /* * module_fsl_mc_driver() - Helper macro for drivers that don't do * anything special in module init/exit. This eliminates a lot of diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 19938ee..2981200 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -389,6 +389,8 @@ static inline size_t iommu_map_sg(struct iommu_domain *domain, extern struct iommu_group *pci_device_group(struct device *dev); /* Generic device grouping function */ extern struct iommu_group *generic_device_group(struct device *dev); +/* FSL-MC device grouping function */ +struct iommu_group *fsl_mc_device_group(struct device *dev); /** * struct iommu_fwspec - per-device IOMMU instance data -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 4/6] iommu: arm-smmu: Add support for the fsl-mc bus @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Implement bus specific support for the fsl-mc bus including registering arm_smmu_ops and bus specific device add operations. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/iommu/arm-smmu.c | 7 +++++++ drivers/iommu/iommu.c | 21 +++++++++++++++++++++ include/linux/fsl/mc.h | 8 ++++++++ include/linux/iommu.h | 2 ++ 4 files changed, 38 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 69e7c60..e1d5090 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -52,6 +52,7 @@ #include <linux/spinlock.h> #include <linux/amba/bus.h> +#include <linux/fsl/mc.h> #include "io-pgtable.h" #include "arm-smmu-regs.h" @@ -1459,6 +1460,8 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) if (dev_is_pci(dev)) group = pci_device_group(dev); + else if (dev_is_fsl_mc(dev)) + group = fsl_mc_device_group(dev); else group = generic_device_group(dev); @@ -2037,6 +2040,10 @@ static void arm_smmu_bus_init(void) bus_set_iommu(&pci_bus_type, &arm_smmu_ops); } #endif +#ifdef CONFIG_FSL_MC_BUS + if (!iommu_present(&fsl_mc_bus_type)) + bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops); +#endif } static int arm_smmu_device_probe(struct platform_device *pdev) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d2aa2320..6d4ce35 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -32,6 +32,7 @@ #include <linux/pci.h> #include <linux/bitops.h> #include <linux/property.h> +#include <linux/fsl/mc.h> #include <trace/events/iommu.h> static struct kset *iommu_group_kset; @@ -987,6 +988,26 @@ struct iommu_group *pci_device_group(struct device *dev) return iommu_group_alloc(); } +/* Get the IOMMU group for device on fsl-mc bus */ +struct iommu_group *fsl_mc_device_group(struct device *dev) +{ + struct device *cont_dev = fsl_mc_cont_dev(dev); + struct iommu_group *group; + + /* Container device is responsible for creating the iommu group */ + if (fsl_mc_is_cont_dev(dev)) { + group = iommu_group_alloc(); + if (IS_ERR(group)) + return NULL; + } else { + get_device(cont_dev); + group = iommu_group_get(cont_dev); + put_device(cont_dev); + } + + return group; +} + /** * iommu_group_get_for_dev - Find or create the IOMMU group for a device * @dev: target device diff --git a/include/linux/fsl/mc.h b/include/linux/fsl/mc.h index f27cb14..dddaca1 100644 --- a/include/linux/fsl/mc.h +++ b/include/linux/fsl/mc.h @@ -351,6 +351,14 @@ struct fsl_mc_io { #define dev_is_fsl_mc(_dev) (0) #endif +/* Macro to check if a device is a container device */ +#define fsl_mc_is_cont_dev(_dev) (to_fsl_mc_device(_dev)->flags & \ + FSL_MC_IS_DPRC) + +/* Macro to get the container device of a MC device */ +#define fsl_mc_cont_dev(_dev) (fsl_mc_is_cont_dev(_dev) ? \ + (_dev) : (_dev)->parent) + /* * module_fsl_mc_driver() - Helper macro for drivers that don't do * anything special in module init/exit. This eliminates a lot of diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 19938ee..2981200 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -389,6 +389,8 @@ static inline size_t iommu_map_sg(struct iommu_domain *domain, extern struct iommu_group *pci_device_group(struct device *dev); /* Generic device grouping function */ extern struct iommu_group *generic_device_group(struct device *dev); +/* FSL-MC device grouping function */ +struct iommu_group *fsl_mc_device_group(struct device *dev); /** * struct iommu_fwspec - per-device IOMMU instance data -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c index 5d8266c..624828b 100644 --- a/drivers/bus/fsl-mc/fsl-mc-bus.c +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static int fsl_mc_dma_configure(struct device *dev) +{ + struct device *dma_dev = dev; + + while (dev_is_fsl_mc(dma_dev)) + dma_dev = dma_dev->parent; + + return of_dma_configure(dev, dma_dev->of_node, 0); +} + static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { .name = "fsl-mc", .match = fsl_mc_bus_match, .uevent = fsl_mc_bus_uevent, + .dma_configure = fsl_mc_dma_configure, .dev_groups = fsl_mc_dev_groups, }; EXPORT_SYMBOL_GPL(fsl_mc_bus_type); @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, mc_dev->icid = parent_mc_dev->icid; mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; mc_dev->dev.dma_mask = &mc_dev->dma_mask; + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; dev_set_msi_domain(&mc_dev->dev, dev_get_msi_domain(&parent_mc_dev->dev)); } @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, goto error_cleanup_dev; } - /* Objects are coherent, unless 'no shareability' flag set. */ - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); - /* * The device-specific probe callback will get invoked by device_add() */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c index 5d8266c..624828b 100644 --- a/drivers/bus/fsl-mc/fsl-mc-bus.c +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static int fsl_mc_dma_configure(struct device *dev) +{ + struct device *dma_dev = dev; + + while (dev_is_fsl_mc(dma_dev)) + dma_dev = dma_dev->parent; + + return of_dma_configure(dev, dma_dev->of_node, 0); +} + static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { .name = "fsl-mc", .match = fsl_mc_bus_match, .uevent = fsl_mc_bus_uevent, + .dma_configure = fsl_mc_dma_configure, .dev_groups = fsl_mc_dev_groups, }; EXPORT_SYMBOL_GPL(fsl_mc_bus_type); @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, mc_dev->icid = parent_mc_dev->icid; mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; mc_dev->dev.dma_mask = &mc_dev->dma_mask; + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; dev_set_msi_domain(&mc_dev->dev, dev_get_msi_domain(&parent_mc_dev->dev)); } @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, goto error_cleanup_dev; } - /* Objects are coherent, unless 'no shareability' flag set. */ - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); - /* * The device-specific probe callback will get invoked by device_add() */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c index 5d8266c..624828b 100644 --- a/drivers/bus/fsl-mc/fsl-mc-bus.c +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static int fsl_mc_dma_configure(struct device *dev) +{ + struct device *dma_dev = dev; + + while (dev_is_fsl_mc(dma_dev)) + dma_dev = dma_dev->parent; + + return of_dma_configure(dev, dma_dev->of_node, 0); +} + static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { .name = "fsl-mc", .match = fsl_mc_bus_match, .uevent = fsl_mc_bus_uevent, + .dma_configure = fsl_mc_dma_configure, .dev_groups = fsl_mc_dev_groups, }; EXPORT_SYMBOL_GPL(fsl_mc_bus_type); @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, mc_dev->icid = parent_mc_dev->icid; mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; mc_dev->dev.dma_mask = &mc_dev->dma_mask; + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; dev_set_msi_domain(&mc_dev->dev, dev_get_msi_domain(&parent_mc_dev->dev)); } @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, goto error_cleanup_dev; } - /* Objects are coherent, unless 'no shareability' flag set. */ - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); - /* * The device-specific probe callback will get invoked by device_add() */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-01 5:43 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-05-01 5:43 UTC (permalink / raw) To: Nipun Gupta Cc: kbuild-all, robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh, hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta [-- Attachment #1: Type: text/plain, Size: 2664 bytes --] Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc3 next-20180430] [cannot apply to iommu/next glikely/devicetree/next] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Support-for-fsl-mc-bus-and-its-devices-in-SMMU/20180501-125745 config: x86_64-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/bus/fsl-mc/fsl-mc-bus.c: In function 'fsl_mc_dma_configure': >> drivers/bus/fsl-mc/fsl-mc-bus.c:137:9: error: too many arguments to function 'of_dma_configure' return of_dma_configure(dev, dma_dev->of_node, 0); ^~~~~~~~~~~~~~~~ In file included from drivers/bus/fsl-mc/fsl-mc-bus.c:13:0: include/linux/of_device.h:58:5: note: declared here int of_dma_configure(struct device *dev, struct device_node *np); ^~~~~~~~~~~~~~~~ drivers/bus/fsl-mc/fsl-mc-bus.c: At top level: >> drivers/bus/fsl-mc/fsl-mc-bus.c:161:3: error: 'struct bus_type' has no member named 'dma_configure' .dma_configure = fsl_mc_dma_configure, ^~~~~~~~~~~~~ vim +/of_dma_configure +137 drivers/bus/fsl-mc/fsl-mc-bus.c 129 130 static int fsl_mc_dma_configure(struct device *dev) 131 { 132 struct device *dma_dev = dev; 133 134 while (dev_is_fsl_mc(dma_dev)) 135 dma_dev = dma_dev->parent; 136 > 137 return of_dma_configure(dev, dma_dev->of_node, 0); 138 } 139 140 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, 141 char *buf) 142 { 143 struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev); 144 145 return sprintf(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor, 146 mc_dev->obj_desc.type); 147 } 148 static DEVICE_ATTR_RO(modalias); 149 150 static struct attribute *fsl_mc_dev_attrs[] = { 151 &dev_attr_modalias.attr, 152 NULL, 153 }; 154 155 ATTRIBUTE_GROUPS(fsl_mc_dev); 156 157 struct bus_type fsl_mc_bus_type = { 158 .name = "fsl-mc", 159 .match = fsl_mc_bus_match, 160 .uevent = fsl_mc_bus_uevent, > 161 .dma_configure = fsl_mc_dma_configure, 162 .dev_groups = fsl_mc_dev_groups, 163 }; 164 EXPORT_SYMBOL_GPL(fsl_mc_bus_type); 165 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 63098 bytes --] ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-01 5:43 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-05-01 5:43 UTC (permalink / raw) To: linux-arm-kernel Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc3 next-20180430] [cannot apply to iommu/next glikely/devicetree/next] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Support-for-fsl-mc-bus-and-its-devices-in-SMMU/20180501-125745 config: x86_64-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/bus/fsl-mc/fsl-mc-bus.c: In function 'fsl_mc_dma_configure': >> drivers/bus/fsl-mc/fsl-mc-bus.c:137:9: error: too many arguments to function 'of_dma_configure' return of_dma_configure(dev, dma_dev->of_node, 0); ^~~~~~~~~~~~~~~~ In file included from drivers/bus/fsl-mc/fsl-mc-bus.c:13:0: include/linux/of_device.h:58:5: note: declared here int of_dma_configure(struct device *dev, struct device_node *np); ^~~~~~~~~~~~~~~~ drivers/bus/fsl-mc/fsl-mc-bus.c: At top level: >> drivers/bus/fsl-mc/fsl-mc-bus.c:161:3: error: 'struct bus_type' has no member named 'dma_configure' .dma_configure = fsl_mc_dma_configure, ^~~~~~~~~~~~~ vim +/of_dma_configure +137 drivers/bus/fsl-mc/fsl-mc-bus.c 129 130 static int fsl_mc_dma_configure(struct device *dev) 131 { 132 struct device *dma_dev = dev; 133 134 while (dev_is_fsl_mc(dma_dev)) 135 dma_dev = dma_dev->parent; 136 > 137 return of_dma_configure(dev, dma_dev->of_node, 0); 138 } 139 140 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, 141 char *buf) 142 { 143 struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev); 144 145 return sprintf(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor, 146 mc_dev->obj_desc.type); 147 } 148 static DEVICE_ATTR_RO(modalias); 149 150 static struct attribute *fsl_mc_dev_attrs[] = { 151 &dev_attr_modalias.attr, 152 NULL, 153 }; 154 155 ATTRIBUTE_GROUPS(fsl_mc_dev); 156 157 struct bus_type fsl_mc_bus_type = { 158 .name = "fsl-mc", 159 .match = fsl_mc_bus_match, 160 .uevent = fsl_mc_bus_uevent, > 161 .dma_configure = fsl_mc_dma_configure, 162 .dev_groups = fsl_mc_dev_groups, 163 }; 164 EXPORT_SYMBOL_GPL(fsl_mc_bus_type); 165 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -------------- next part -------------- A non-text attachment was scrubbed... Name: .config.gz Type: application/gzip Size: 63098 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20180501/594f7044/attachment-0001.gz> ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-01 5:43 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-05-01 5:43 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland, stuyoder, linux-pci, will.deacon, shawnguo, bharat.bhushan, hch, m.szyprowski, robh, frowand.list, joro, catalin.marinas, devicetree, robin.murphy, robh+dt, Nipun Gupta, bhelgaas, linux-arm-kernel, laurentiu.tudor, gregkh, linux-kernel, leoyang.li, iommu, kbuild-all, linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 2664 bytes --] Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc3 next-20180430] [cannot apply to iommu/next glikely/devicetree/next] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Support-for-fsl-mc-bus-and-its-devices-in-SMMU/20180501-125745 config: x86_64-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/bus/fsl-mc/fsl-mc-bus.c: In function 'fsl_mc_dma_configure': >> drivers/bus/fsl-mc/fsl-mc-bus.c:137:9: error: too many arguments to function 'of_dma_configure' return of_dma_configure(dev, dma_dev->of_node, 0); ^~~~~~~~~~~~~~~~ In file included from drivers/bus/fsl-mc/fsl-mc-bus.c:13:0: include/linux/of_device.h:58:5: note: declared here int of_dma_configure(struct device *dev, struct device_node *np); ^~~~~~~~~~~~~~~~ drivers/bus/fsl-mc/fsl-mc-bus.c: At top level: >> drivers/bus/fsl-mc/fsl-mc-bus.c:161:3: error: 'struct bus_type' has no member named 'dma_configure' .dma_configure = fsl_mc_dma_configure, ^~~~~~~~~~~~~ vim +/of_dma_configure +137 drivers/bus/fsl-mc/fsl-mc-bus.c 129 130 static int fsl_mc_dma_configure(struct device *dev) 131 { 132 struct device *dma_dev = dev; 133 134 while (dev_is_fsl_mc(dma_dev)) 135 dma_dev = dma_dev->parent; 136 > 137 return of_dma_configure(dev, dma_dev->of_node, 0); 138 } 139 140 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, 141 char *buf) 142 { 143 struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev); 144 145 return sprintf(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor, 146 mc_dev->obj_desc.type); 147 } 148 static DEVICE_ATTR_RO(modalias); 149 150 static struct attribute *fsl_mc_dev_attrs[] = { 151 &dev_attr_modalias.attr, 152 NULL, 153 }; 154 155 ATTRIBUTE_GROUPS(fsl_mc_dev); 156 157 struct bus_type fsl_mc_bus_type = { 158 .name = "fsl-mc", 159 .match = fsl_mc_bus_match, 160 .uevent = fsl_mc_bus_uevent, > 161 .dma_configure = fsl_mc_dma_configure, 162 .dev_groups = fsl_mc_dev_groups, 163 }; 164 EXPORT_SYMBOL_GPL(fsl_mc_bus_type); 165 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 63098 bytes --] [-- Attachment #3: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-01 5:43 ` kbuild test robot 0 siblings, 0 replies; 100+ messages in thread From: kbuild test robot @ 2018-05-01 5:43 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, will.deacon-5wv7dgnIgG8, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, robh-DgEjT+Ai2ygdnm+yROfE0A, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, catalin.marinas-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, kbuild-all-JC7UmRfGjtg, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ [-- Attachment #1: Type: text/plain, Size: 2664 bytes --] Hi Nipun, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.17-rc3 next-20180430] [cannot apply to iommu/next glikely/devicetree/next] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Nipun-Gupta/Support-for-fsl-mc-bus-and-its-devices-in-SMMU/20180501-125745 config: x86_64-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/bus/fsl-mc/fsl-mc-bus.c: In function 'fsl_mc_dma_configure': >> drivers/bus/fsl-mc/fsl-mc-bus.c:137:9: error: too many arguments to function 'of_dma_configure' return of_dma_configure(dev, dma_dev->of_node, 0); ^~~~~~~~~~~~~~~~ In file included from drivers/bus/fsl-mc/fsl-mc-bus.c:13:0: include/linux/of_device.h:58:5: note: declared here int of_dma_configure(struct device *dev, struct device_node *np); ^~~~~~~~~~~~~~~~ drivers/bus/fsl-mc/fsl-mc-bus.c: At top level: >> drivers/bus/fsl-mc/fsl-mc-bus.c:161:3: error: 'struct bus_type' has no member named 'dma_configure' .dma_configure = fsl_mc_dma_configure, ^~~~~~~~~~~~~ vim +/of_dma_configure +137 drivers/bus/fsl-mc/fsl-mc-bus.c 129 130 static int fsl_mc_dma_configure(struct device *dev) 131 { 132 struct device *dma_dev = dev; 133 134 while (dev_is_fsl_mc(dma_dev)) 135 dma_dev = dma_dev->parent; 136 > 137 return of_dma_configure(dev, dma_dev->of_node, 0); 138 } 139 140 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, 141 char *buf) 142 { 143 struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev); 144 145 return sprintf(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor, 146 mc_dev->obj_desc.type); 147 } 148 static DEVICE_ATTR_RO(modalias); 149 150 static struct attribute *fsl_mc_dev_attrs[] = { 151 &dev_attr_modalias.attr, 152 NULL, 153 }; 154 155 ATTRIBUTE_GROUPS(fsl_mc_dev); 156 157 struct bus_type fsl_mc_bus_type = { 158 .name = "fsl-mc", 159 .match = fsl_mc_bus_match, 160 .uevent = fsl_mc_bus_uevent, > 161 .dma_configure = fsl_mc_dma_configure, 162 .dev_groups = fsl_mc_dev_groups, 163 }; 164 EXPORT_SYMBOL_GPL(fsl_mc_bus_type); 165 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 63098 bytes --] [-- Attachment #3: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-02 9:35 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:35 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- If my understanding is correct, the kbuild error is triggered by this missing dependency patch: https://patchwork.kernel.org/patch/10370081/ Apart from that, patch looks good to me, so Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-02 9:35 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:35 UTC (permalink / raw) To: linux-arm-kernel Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- If my understanding is correct, the kbuild error is triggered by this missing dependency patch: https://patchwork.kernel.org/patch/10370081/ Apart from that, patch looks good to me, so Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-02 9:35 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:35 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- If my understanding is correct, the kbuild error is triggered by this=20 missing dependency patch: https://patchwork.kernel.org/patch/10370081/ Apart from that, patch looks good to me, so Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-= bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, str= uct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev =3D dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev =3D dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribut= e *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type =3D { > .name =3D "fsl-mc", > .match =3D fsl_mc_bus_match, > .uevent =3D fsl_mc_bus_uevent, > + .dma_configure =3D fsl_mc_dma_configure, > .dev_groups =3D fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_des= c, > mc_dev->icid =3D parent_mc_dev->icid; > mc_dev->dma_mask =3D FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask =3D &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask =3D mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_de= sc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ >= ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-02 9:35 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:35 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: devicetree, stuyoder, Bharat Bhushan, shawnguo, joro, linuxppc-dev, linux-kernel, Leo Li, iommu, linux-pci, bhelgaas, frowand.list, hch, linux-arm-kernel, m.szyprowski Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- If my understanding is correct, the kbuild error is triggered by this missing dependency patch: https://patchwork.kernel.org/patch/10370081/ Apart from that, patch looks good to me, so Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-02 9:35 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:35 UTC (permalink / raw) To: Nipun Gupta, robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Leo Li, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > --- If my understanding is correct, the kbuild error is triggered by this missing dependency patch: https://patchwork.kernel.org/patch/10370081/ Apart from that, patch looks good to me, so Reviewed-by: Laurentiu Tudor <laurentiu.tudor-3arQi8VN3Tc@public.gmane.org> --- Best Regards, Laurentiu > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 11:24 ` Greg KH 0 siblings, 0 replies; 100+ messages in thread From: Greg KH @ 2018-05-14 11:24 UTC (permalink / raw) To: Nipun Gupta Cc: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li On Mon, Apr 30, 2018 at 11:57:20AM +0530, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- I can't take patches without any changelog text at all, sorry. Please fix up and resend. greg k-h ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 11:24 ` Greg KH 0 siblings, 0 replies; 100+ messages in thread From: Greg KH @ 2018-05-14 11:24 UTC (permalink / raw) To: linux-arm-kernel On Mon, Apr 30, 2018 at 11:57:20AM +0530, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- I can't take patches without any changelog text at all, sorry. Please fix up and resend. greg k-h ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 11:24 ` Greg KH 0 siblings, 0 replies; 100+ messages in thread From: Greg KH @ 2018-05-14 11:24 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, catalin.marinas-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, hch-jcswGhMUV9g, robh-DgEjT+Ai2ygdnm+yROfE0A, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ On Mon, Apr 30, 2018 at 11:57:20AM +0530, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > --- I can't take patches without any changelog text at all, sorry. Please fix up and resend. greg k-h ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 12:47 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-05-14 12:47 UTC (permalink / raw) To: Nipun Gupta Cc: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh, hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li When you add the changleog, please also fix the subject typo: - bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus ^^^^^^^ + bus: fsl-mc: support dma configure for devices on fsl-mc bus On Mon, Apr 30, 2018 at 11:57:20AM +0530, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > -- > 1.9.1 > ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 12:47 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-05-14 12:47 UTC (permalink / raw) To: linux-arm-kernel When you add the changleog, please also fix the subject typo: - bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus ^^^^^^^ + bus: fsl-mc: support dma configure for devices on fsl-mc bus On Mon, Apr 30, 2018 at 11:57:20AM +0530, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > -- > 1.9.1 > ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 12:47 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-05-14 12:47 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland, stuyoder, linux-pci, will.deacon, shawnguo, bharat.bhushan, hch, m.szyprowski, robh, frowand.list, joro, catalin.marinas, devicetree, robin.murphy, robh+dt, bhelgaas, linux-arm-kernel, laurentiu.tudor, gregkh, linux-kernel, leoyang.li, iommu, linuxppc-dev When you add the changleog, please also fix the subject typo: - bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus ^^^^^^^ + bus: fsl-mc: support dma configure for devices on fsl-mc bus On Mon, Apr 30, 2018 at 11:57:20AM +0530, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > -- > 1.9.1 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus @ 2018-05-14 12:47 ` Bjorn Helgaas 0 siblings, 0 replies; 100+ messages in thread From: Bjorn Helgaas @ 2018-05-14 12:47 UTC (permalink / raw) To: Nipun Gupta Cc: mark.rutland-5wv7dgnIgG8, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, linux-pci-u79uwXL29TY76Z2rM5mHXA, will.deacon-5wv7dgnIgG8, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, hch-jcswGhMUV9g, robh-DgEjT+Ai2ygdnm+yROfE0A, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, catalin.marinas-5wv7dgnIgG8, devicetree-u79uwXL29TY76Z2rM5mHXA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ When you add the changleog, please also fix the subject typo: - bus: fsl-mc: supoprt dma configure for devices on fsl-mc bus ^^^^^^^ + bus: fsl-mc: support dma configure for devices on fsl-mc bus On Mon, Apr 30, 2018 at 11:57:20AM +0530, Nipun Gupta wrote: > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> > --- > drivers/bus/fsl-mc/fsl-mc-bus.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c > index 5d8266c..624828b 100644 > --- a/drivers/bus/fsl-mc/fsl-mc-bus.c > +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c > @@ -127,6 +127,16 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +static int fsl_mc_dma_configure(struct device *dev) > +{ > + struct device *dma_dev = dev; > + > + while (dev_is_fsl_mc(dma_dev)) > + dma_dev = dma_dev->parent; > + > + return of_dma_configure(dev, dma_dev->of_node, 0); > +} > + > static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -148,6 +158,7 @@ struct bus_type fsl_mc_bus_type = { > .name = "fsl-mc", > .match = fsl_mc_bus_match, > .uevent = fsl_mc_bus_uevent, > + .dma_configure = fsl_mc_dma_configure, > .dev_groups = fsl_mc_dev_groups, > }; > EXPORT_SYMBOL_GPL(fsl_mc_bus_type); > @@ -616,6 +627,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > mc_dev->icid = parent_mc_dev->icid; > mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK; > mc_dev->dev.dma_mask = &mc_dev->dma_mask; > + mc_dev->dev.coherent_dma_mask = mc_dev->dma_mask; > dev_set_msi_domain(&mc_dev->dev, > dev_get_msi_domain(&parent_mc_dev->dev)); > } > @@ -633,10 +645,6 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc, > goto error_cleanup_dev; > } > > - /* Objects are coherent, unless 'no shareability' flag set. */ > - if (!(obj_desc->flags & FSL_MC_OBJ_FLAG_NO_MEM_SHAREABILITY)) > - arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true); > - > /* > * The device-specific probe callback will get invoked by device_add() > */ > -- > 1.9.1 > ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, bharat.bhushan, stuyoder, laurentiu.tudor, leoyang.li, Nipun Gupta fsl-mc bus support the new iommu-map property. Comply to this binding for fsl_mc bus. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi index 137ef4d..6010505 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi @@ -184,6 +184,7 @@ #address-cells = <2>; #size-cells = <2>; ranges; + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; clockgen: clocking@1300000 { compatible = "fsl,ls2080a-clockgen"; @@ -357,6 +358,8 @@ reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ + dma-coherent; #address-cells = <3>; #size-cells = <1>; @@ -460,6 +463,8 @@ compatible = "arm,mmu-500"; reg = <0 0x5000000 0 0x800000>; #global-interrupts = <12>; + #iommu-cells = <1>; + stream-match-mask = <0x7C00>; interrupts = <0 13 4>, /* global secure fault */ <0 14 4>, /* combined secure interrupt */ <0 15 4>, /* global non-secure fault */ @@ -502,7 +507,6 @@ <0 204 4>, <0 205 4>, <0 206 4>, <0 207 4>, <0 208 4>, <0 209 4>; - mmu-masters = <&fsl_mc 0x300 0>; }; dspi: dspi@2100000 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: linux-arm-kernel fsl-mc bus support the new iommu-map property. Comply to this binding for fsl_mc bus. Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> --- arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi index 137ef4d..6010505 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi @@ -184,6 +184,7 @@ #address-cells = <2>; #size-cells = <2>; ranges; + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; clockgen: clocking at 1300000 { compatible = "fsl,ls2080a-clockgen"; @@ -357,6 +358,8 @@ reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ + dma-coherent; #address-cells = <3>; #size-cells = <1>; @@ -460,6 +463,8 @@ compatible = "arm,mmu-500"; reg = <0 0x5000000 0 0x800000>; #global-interrupts = <12>; + #iommu-cells = <1>; + stream-match-mask = <0x7C00>; interrupts = <0 13 4>, /* global secure fault */ <0 14 4>, /* combined secure interrupt */ <0 15 4>, /* global non-secure fault */ @@ -502,7 +507,6 @@ <0 204 4>, <0 205 4>, <0 206 4>, <0 207 4>, <0 208 4>, <0 209 4>; - mmu-masters = <&fsl_mc 0x300 0>; }; dspi: dspi at 2100000 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-04-30 6:27 ` Nipun Gupta 0 siblings, 0 replies; 100+ messages in thread From: Nipun Gupta @ 2018-04-30 6:27 UTC (permalink / raw) To: robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, leoyang.li-3arQi8VN3Tc, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r fsl-mc bus support the new iommu-map property. Comply to this binding for fsl_mc bus. Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> --- arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi index 137ef4d..6010505 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi @@ -184,6 +184,7 @@ #address-cells = <2>; #size-cells = <2>; ranges; + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; clockgen: clocking@1300000 { compatible = "fsl,ls2080a-clockgen"; @@ -357,6 +358,8 @@ reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ msi-parent = <&its>; + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ + dma-coherent; #address-cells = <3>; #size-cells = <1>; @@ -460,6 +463,8 @@ compatible = "arm,mmu-500"; reg = <0 0x5000000 0 0x800000>; #global-interrupts = <12>; + #iommu-cells = <1>; + stream-match-mask = <0x7C00>; interrupts = <0 13 4>, /* global secure fault */ <0 14 4>, /* combined secure interrupt */ <0 15 4>, /* global non-secure fault */ @@ -502,7 +507,6 @@ <0 204 4>, <0 205 4>, <0 206 4>, <0 207 4>, <0 208 4>, <0 209 4>; - mmu-masters = <&fsl_mc 0x300 0>; }; dspi: dspi@2100000 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 100+ messages in thread
* Re: [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-05-02 9:14 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:14 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > fsl-mc bus support the new iommu-map property. Comply to this binding > for fsl_mc bus. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> This looks good to me, so: Reviewed-By: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > --- > arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > index 137ef4d..6010505 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > @@ -184,6 +184,7 @@ > #address-cells = <2>; > #size-cells = <2>; > ranges; > + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; > > clockgen: clocking@1300000 { > compatible = "fsl,ls2080a-clockgen"; > @@ -357,6 +358,8 @@ > reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ > <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ > msi-parent = <&its>; > + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ > + dma-coherent; > #address-cells = <3>; > #size-cells = <1>; > > @@ -460,6 +463,8 @@ > compatible = "arm,mmu-500"; > reg = <0 0x5000000 0 0x800000>; > #global-interrupts = <12>; > + #iommu-cells = <1>; > + stream-match-mask = <0x7C00>; > interrupts = <0 13 4>, /* global secure fault */ > <0 14 4>, /* combined secure interrupt */ > <0 15 4>, /* global non-secure fault */ > @@ -502,7 +507,6 @@ > <0 204 4>, <0 205 4>, > <0 206 4>, <0 207 4>, > <0 208 4>, <0 209 4>; > - mmu-masters = <&fsl_mc 0x300 0>; > }; > > dspi: dspi@2100000 { > ^ permalink raw reply [flat|nested] 100+ messages in thread
* [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-05-02 9:14 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:14 UTC (permalink / raw) To: linux-arm-kernel Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > fsl-mc bus support the new iommu-map property. Comply to this binding > for fsl_mc bus. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> This looks good to me, so: Reviewed-By: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > --- > arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > index 137ef4d..6010505 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > @@ -184,6 +184,7 @@ > #address-cells = <2>; > #size-cells = <2>; > ranges; > + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; > > clockgen: clocking at 1300000 { > compatible = "fsl,ls2080a-clockgen"; > @@ -357,6 +358,8 @@ > reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ > <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ > msi-parent = <&its>; > + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ > + dma-coherent; > #address-cells = <3>; > #size-cells = <1>; > > @@ -460,6 +463,8 @@ > compatible = "arm,mmu-500"; > reg = <0 0x5000000 0 0x800000>; > #global-interrupts = <12>; > + #iommu-cells = <1>; > + stream-match-mask = <0x7C00>; > interrupts = <0 13 4>, /* global secure fault */ > <0 14 4>, /* combined secure interrupt */ > <0 15 4>, /* global non-secure fault */ > @@ -502,7 +507,6 @@ > <0 204 4>, <0 205 4>, > <0 206 4>, <0 207 4>, > <0 208 4>, <0 209 4>; > - mmu-masters = <&fsl_mc 0x300 0>; > }; > > dspi: dspi at 2100000 { > ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-05-02 9:14 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:14 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: hch, joro, m.szyprowski, shawnguo, frowand.list, bhelgaas, iommu, linux-kernel, devicetree, linux-arm-kernel, linuxppc-dev, linux-pci, Bharat Bhushan, stuyoder, Leo Li Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > fsl-mc bus support the new iommu-map property. Comply to this binding > for fsl_mc bus. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> This looks good to me, so: Reviewed-By: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > --- > arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/= boot/dts/freescale/fsl-ls208xa.dtsi > index 137ef4d..6010505 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > @@ -184,6 +184,7 @@ > #address-cells =3D <2>; > #size-cells =3D <2>; > ranges; > + dma-ranges =3D <0x0 0x0 0x0 0x0 0x10000 0x00000000>; > > clockgen: clocking@1300000 { > compatible =3D "fsl,ls2080a-clockgen"; > @@ -357,6 +358,8 @@ > reg =3D <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ > <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ > msi-parent =3D <&its>; > + iommu-map =3D <0 &smmu 0 0>; /* This is fixed-up by u-boot */ > + dma-coherent; > #address-cells =3D <3>; > #size-cells =3D <1>; > > @@ -460,6 +463,8 @@ > compatible =3D "arm,mmu-500"; > reg =3D <0 0x5000000 0 0x800000>; > #global-interrupts =3D <12>; > + #iommu-cells =3D <1>; > + stream-match-mask =3D <0x7C00>; > interrupts =3D <0 13 4>, /* global secure fault */ > <0 14 4>, /* combined secure interrupt */ > <0 15 4>, /* global non-secure fault */ > @@ -502,7 +507,6 @@ > <0 204 4>, <0 205 4>, > <0 206 4>, <0 207 4>, > <0 208 4>, <0 209 4>; > - mmu-masters =3D <&fsl_mc 0x300 0>; > }; > > dspi: dspi@2100000 { >= ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-05-02 9:14 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:14 UTC (permalink / raw) To: Nipun Gupta, robin.murphy, will.deacon, robh+dt, robh, mark.rutland, catalin.marinas, gregkh Cc: devicetree, stuyoder, Bharat Bhushan, shawnguo, joro, linuxppc-dev, linux-kernel, Leo Li, iommu, linux-pci, bhelgaas, frowand.list, hch, linux-arm-kernel, m.szyprowski Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > fsl-mc bus support the new iommu-map property. Comply to this binding > for fsl_mc bus. > > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> This looks good to me, so: Reviewed-By: Laurentiu Tudor <laurentiu.tudor@nxp.com> --- Best Regards, Laurentiu > --- > arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > index 137ef4d..6010505 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > @@ -184,6 +184,7 @@ > #address-cells = <2>; > #size-cells = <2>; > ranges; > + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; > > clockgen: clocking@1300000 { > compatible = "fsl,ls2080a-clockgen"; > @@ -357,6 +358,8 @@ > reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ > <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ > msi-parent = <&its>; > + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ > + dma-coherent; > #address-cells = <3>; > #size-cells = <1>; > > @@ -460,6 +463,8 @@ > compatible = "arm,mmu-500"; > reg = <0 0x5000000 0 0x800000>; > #global-interrupts = <12>; > + #iommu-cells = <1>; > + stream-match-mask = <0x7C00>; > interrupts = <0 13 4>, /* global secure fault */ > <0 14 4>, /* combined secure interrupt */ > <0 15 4>, /* global non-secure fault */ > @@ -502,7 +507,6 @@ > <0 204 4>, <0 205 4>, > <0 206 4>, <0 207 4>, > <0 208 4>, <0 209 4>; > - mmu-masters = <&fsl_mc 0x300 0>; > }; > > dspi: dspi@2100000 { > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 100+ messages in thread
* Re: [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc @ 2018-05-02 9:14 ` Laurentiu Tudor 0 siblings, 0 replies; 100+ messages in thread From: Laurentiu Tudor @ 2018-05-02 9:14 UTC (permalink / raw) To: Nipun Gupta, robin.murphy-5wv7dgnIgG8, will.deacon-5wv7dgnIgG8, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, catalin.marinas-5wv7dgnIgG8, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, stuyoder-Re5JQEeQqe8AvxtiuMwx3w, shawnguo-DgEjT+Ai2ygdnm+yROfE0A, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Leo Li, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-pci-u79uwXL29TY76Z2rM5mHXA, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA, frowand.list-Re5JQEeQqe8AvxtiuMwx3w, hch-jcswGhMUV9g, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r Hi Nipun, On 04/30/2018 09:27 AM, Nipun Gupta wrote: > fsl-mc bus support the new iommu-map property. Comply to this binding > for fsl_mc bus. > > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org> This looks good to me, so: Reviewed-By: Laurentiu Tudor <laurentiu.tudor-3arQi8VN3Tc@public.gmane.org> --- Best Regards, Laurentiu > --- > arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > index 137ef4d..6010505 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi > @@ -184,6 +184,7 @@ > #address-cells = <2>; > #size-cells = <2>; > ranges; > + dma-ranges = <0x0 0x0 0x0 0x0 0x10000 0x00000000>; > > clockgen: clocking@1300000 { > compatible = "fsl,ls2080a-clockgen"; > @@ -357,6 +358,8 @@ > reg = <0x00000008 0x0c000000 0 0x40>, /* MC portal base */ > <0x00000000 0x08340000 0 0x40000>; /* MC control reg */ > msi-parent = <&its>; > + iommu-map = <0 &smmu 0 0>; /* This is fixed-up by u-boot */ > + dma-coherent; > #address-cells = <3>; > #size-cells = <1>; > > @@ -460,6 +463,8 @@ > compatible = "arm,mmu-500"; > reg = <0 0x5000000 0 0x800000>; > #global-interrupts = <12>; > + #iommu-cells = <1>; > + stream-match-mask = <0x7C00>; > interrupts = <0 13 4>, /* global secure fault */ > <0 14 4>, /* combined secure interrupt */ > <0 15 4>, /* global non-secure fault */ > @@ -502,7 +507,6 @@ > <0 204 4>, <0 205 4>, > <0 206 4>, <0 207 4>, > <0 208 4>, <0 209 4>; > - mmu-masters = <&fsl_mc 0x300 0>; > }; > > dspi: dspi@2100000 { > ^ permalink raw reply [flat|nested] 100+ messages in thread
end of thread, other threads:[~2018-05-16 8:49 UTC | newest] Thread overview: 100+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-04-27 10:27 [PATCH 0/6 v3] Support for fsl-mc bus and its devices in SMMU Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` [PATCH 1/6 v3] Docs: dt: add fsl-mc iommu-map device-tree binding Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 17:20 ` Rob Herring 2018-04-27 17:20 ` Rob Herring 2018-04-27 17:20 ` Rob Herring 2018-04-27 17:20 ` Rob Herring 2018-04-27 10:27 ` [PATCH 2/6 v3] iommu: of: make of_pci_map_rid() available for other devices too Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 17:15 ` Rob Herring 2018-04-27 17:15 ` Rob Herring 2018-04-27 17:15 ` Rob Herring 2018-04-27 17:15 ` Rob Herring 2018-04-30 3:27 ` Nipun Gupta 2018-04-30 3:27 ` Nipun Gupta 2018-04-30 3:27 ` Nipun Gupta 2018-04-30 3:27 ` Nipun Gupta 2018-04-30 3:27 ` Nipun Gupta 2018-04-28 8:17 ` kbuild test robot 2018-04-28 8:17 ` kbuild test robot 2018-04-28 8:17 ` kbuild test robot 2018-04-28 8:17 ` kbuild test robot 2018-04-27 10:27 ` [PATCH 3/6 v3] iommu: support iommu configuration for fsl-mc devices Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` [PATCH 4/6 v3] iommu: arm-smmu: Add support for the fsl-mc bus Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` [PATCH 5/6 v3] bus: fsl-mc: supoprt dma configure for devices on " Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-05-14 13:39 ` Laurentiu Tudor 2018-05-14 13:39 ` Laurentiu Tudor 2018-05-14 13:39 ` Laurentiu Tudor 2018-05-14 13:39 ` Laurentiu Tudor 2018-05-16 8:48 ` Nipun Gupta 2018-05-16 8:48 ` Nipun Gupta 2018-05-16 8:48 ` Nipun Gupta 2018-05-16 8:48 ` Nipun Gupta 2018-05-16 8:48 ` Nipun Gupta 2018-04-27 10:27 ` [PATCH 6/6 v3] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 10:27 ` Nipun Gupta 2018-04-27 15:52 ` [PATCH 0/6 v3] Support for fsl-mc bus and its devices in SMMU Christoph Hellwig 2018-04-27 15:52 ` Christoph Hellwig 2018-04-27 15:52 ` Christoph Hellwig 2018-04-30 6:27 ` [PATCH v4 0/6] " Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` [PATCH v4 1/6] Docs: dt: add fsl-mc iommu-map device-tree binding Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` [PATCH v4 2/6] iommu: of: make of_pci_map_rid() available for other devices too Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 20:56 ` Bjorn Helgaas 2018-04-30 20:56 ` Bjorn Helgaas 2018-04-30 20:56 ` Bjorn Helgaas 2018-04-30 20:56 ` Bjorn Helgaas 2018-05-01 12:44 ` Rob Herring 2018-05-01 12:44 ` Rob Herring 2018-05-01 12:44 ` Rob Herring 2018-04-30 6:27 ` [PATCH v4 3/6] iommu: support iommu configuration for fsl-mc devices Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` [PATCH v4 4/6] iommu: arm-smmu: Add support for the fsl-mc bus Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` [PATCH v4 5/6] bus: fsl-mc: supoprt dma configure for devices on " Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-05-01 5:43 ` kbuild test robot 2018-05-01 5:43 ` kbuild test robot 2018-05-01 5:43 ` kbuild test robot 2018-05-01 5:43 ` kbuild test robot 2018-05-02 9:35 ` Laurentiu Tudor 2018-05-02 9:35 ` Laurentiu Tudor 2018-05-02 9:35 ` Laurentiu Tudor 2018-05-02 9:35 ` Laurentiu Tudor 2018-05-02 9:35 ` Laurentiu Tudor 2018-05-14 11:24 ` Greg KH 2018-05-14 11:24 ` Greg KH 2018-05-14 11:24 ` Greg KH 2018-05-14 12:47 ` Bjorn Helgaas 2018-05-14 12:47 ` Bjorn Helgaas 2018-05-14 12:47 ` Bjorn Helgaas 2018-05-14 12:47 ` Bjorn Helgaas 2018-04-30 6:27 ` [PATCH v4 6/6] arm64: dts: ls208xa: comply with the iommu map binding for fsl_mc Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-04-30 6:27 ` Nipun Gupta 2018-05-02 9:14 ` Laurentiu Tudor 2018-05-02 9:14 ` Laurentiu Tudor 2018-05-02 9:14 ` Laurentiu Tudor 2018-05-02 9:14 ` Laurentiu Tudor 2018-05-02 9:14 ` Laurentiu Tudor
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.