diff mbox series

[2/2] arm64: dts: ls1028a: add "fsl,vf610-edma" compatible

Message ID 20200306205403.29881-2-michael@walle.cc (mailing list archive)
State Mainlined
Commit e0d7856eb9a411444b49f210c1fd2de11bc0df07
Headers show
Series [1/2] dt-bindings: dma: fsl-edma: fix ls1028a-edma compatible | expand

Commit Message

Michael Walle March 6, 2020, 8:54 p.m. UTC
The bootloader does the IOMMU fixup and dynamically adds the "iommus"
property to devices according to its compatible string. In case of the
eDMA controller this property is missing. Add it. After that the IOMMU
will work with the eDMA core.

Signed-off-by: Michael Walle <michael@walle.cc>
---
 arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Peng Ma March 7, 2020, 2:09 a.m. UTC | #1
>-----Original Message-----
>From: Michael Walle <michael@walle.cc>
>Sent: 2020年3月7日 4:54
>To: dmaengine@vger.kernel.org; devicetree@vger.kernel.org;
>linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org
>Cc: Vinod Koul <vkoul@kernel.org>; Rob Herring <robh+dt@kernel.org>; Mark
>Rutland <mark.rutland@arm.com>; Shawn Guo <shawnguo@kernel.org>; Leo Li
><leoyang.li@nxp.com>; Peng Ma <peng.ma@nxp.com>; Michael Walle
><michael@walle.cc>
>Subject: [EXT] [PATCH 2/2] arm64: dts: ls1028a: add "fsl,vf610-edma"
>compatible
>
>Caution: EXT Email
>
>The bootloader does the IOMMU fixup and dynamically adds the "iommus"
>property to devices according to its compatible string. In case of the eDMA
>controller this property is missing. Add it. After that the IOMMU will work with
>the eDMA core.
>
>Signed-off-by: Michael Walle <michael@walle.cc>
>---
> arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>index b152fa90cf5c..aa467bff2209 100644
>--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>@@ -447,7 +447,7 @@
>
>                edma0: dma-controller@22c0000 {
>                        #dma-cells = <2>;
>-                       compatible = "fsl,ls1028a-edma";
>+                       compatible = "fsl,ls1028a-edma",
>+ "fsl,vf610-edma";
Hi Michael,

You should change it on bootloader instead of kernel, Some Reg of LS1028a is different
from others, So we used compatible "fsl,ls1028a-edm" to distinguish " fsl,vf610-edma".

Thanks,
Peng
>                        reg = <0x0 0x22c0000 0x0 0x10000>,
>                              <0x0 0x22d0000 0x0 0x10000>,
>                              <0x0 0x22e0000 0x0 0x10000>;
>--
>2.20.1
Michael Walle March 7, 2020, 9:25 a.m. UTC | #2
Hi Peng,

Am 2020-03-07 03:09, schrieb Peng Ma:
>> -----Original Message-----
>> From: Michael Walle <michael@walle.cc>
>> Sent: 2020年3月7日 4:54
>> To: dmaengine@vger.kernel.org; devicetree@vger.kernel.org;
>> linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org
>> Cc: Vinod Koul <vkoul@kernel.org>; Rob Herring <robh+dt@kernel.org>; 
>> Mark
>> Rutland <mark.rutland@arm.com>; Shawn Guo <shawnguo@kernel.org>; Leo 
>> Li
>> <leoyang.li@nxp.com>; Peng Ma <peng.ma@nxp.com>; Michael Walle
>> <michael@walle.cc>
>> Subject: [EXT] [PATCH 2/2] arm64: dts: ls1028a: add "fsl,vf610-edma"
>> compatible
>> 
>> Caution: EXT Email
>> 
>> The bootloader does the IOMMU fixup and dynamically adds the "iommus"
>> property to devices according to its compatible string. In case of the 
>> eDMA
>> controller this property is missing. Add it. After that the IOMMU will 
>> work with
>> the eDMA core.
>> 
>> Signed-off-by: Michael Walle <michael@walle.cc>
>> ---
>> arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>> b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>> index b152fa90cf5c..aa467bff2209 100644
>> --- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>> @@ -447,7 +447,7 @@
>> 
>>                edma0: dma-controller@22c0000 {
>>                        #dma-cells = <2>;
>> -                       compatible = "fsl,ls1028a-edma";
>> +                       compatible = "fsl,ls1028a-edma",
>> + "fsl,vf610-edma";
> Hi Michael,
> 
> You should change it on bootloader instead of kernel, Some Reg of
> LS1028a is different
> from others, So we used compatible "fsl,ls1028a-edm" to distinguish "
> fsl,vf610-edma".

Yes this might be the right thing to do. So since it is NXPs bootloader
feel free to fix that ;) Looking at the u-boot code right now, I don't
even know it that is the right fix at all. The fixup code in u-boot is
SoC independent (its in fsl_icid.h and is enabled with CONFIG_LSCH3, ie
your chassis version). For example, the sdhc fixup will scan the nodes
for "compatible = fsl,esdhc", which is also the secondary compatible
for the "ls1028a-esdhc" compatible.

And here is another reason to have it this way: we need backwards
compatibility, the are already boards out there whose bootloader will
fix-up the "old" node. Thus I don't see any other possibilty.

-michael

> 
> Thanks,
> Peng
>>                        reg = <0x0 0x22c0000 0x0 0x10000>,
>>                              <0x0 0x22d0000 0x0 0x10000>,
>>                              <0x0 0x22e0000 0x0 0x10000>;
>> --
>> 2.20.1
Peng Ma March 7, 2020, 10:32 a.m. UTC | #3
>-----Original Message-----
>From: Michael Walle <michael@walle.cc>
>Sent: 2020年3月7日 17:26
>To: Peng Ma <peng.ma@nxp.com>
>Cc: dmaengine@vger.kernel.org; devicetree@vger.kernel.org;
>linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org; Vinod Koul
><vkoul@kernel.org>; Rob Herring <robh+dt@kernel.org>; Mark Rutland
><mark.rutland@arm.com>; Shawn Guo <shawnguo@kernel.org>; Leo Li
><leoyang.li@nxp.com>
>Subject: Re: [EXT] [PATCH 2/2] arm64: dts: ls1028a: add "fsl,vf610-edma"
>compatible
>
>Caution: EXT Email
>
>Hi Peng,
>
>Am 2020-03-07 03:09, schrieb Peng Ma:
>>> -----Original Message-----
>>> From: Michael Walle <michael@walle.cc>
>>> Sent: 2020年3月7日 4:54
>>> To: dmaengine@vger.kernel.org; devicetree@vger.kernel.org;
>>> linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org
>>> Cc: Vinod Koul <vkoul@kernel.org>; Rob Herring <robh+dt@kernel.org>;
>>> Mark Rutland <mark.rutland@arm.com>; Shawn Guo
><shawnguo@kernel.org>;
>>> Leo Li <leoyang.li@nxp.com>; Peng Ma <peng.ma@nxp.com>; Michael Walle
>>> <michael@walle.cc>
>>> Subject: [EXT] [PATCH 2/2] arm64: dts: ls1028a: add "fsl,vf610-edma"
>>> compatible
>>>
>>> Caution: EXT Email
>>>
>>> The bootloader does the IOMMU fixup and dynamically adds the "iommus"
>>> property to devices according to its compatible string. In case of
>>> the eDMA controller this property is missing. Add it. After that the
>>> IOMMU will work with the eDMA core.
>>>
>>> Signed-off-by: Michael Walle <michael@walle.cc>
>>> ---
>>> arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>> b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>> index b152fa90cf5c..aa467bff2209 100644
>>> --- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>> @@ -447,7 +447,7 @@
>>>
>>>                edma0: dma-controller@22c0000 {
>>>                        #dma-cells = <2>;
>>> -                       compatible = "fsl,ls1028a-edma";
>>> +                       compatible = "fsl,ls1028a-edma",
>>> + "fsl,vf610-edma";
>> Hi Michael,
>>
>> You should change it on bootloader instead of kernel, Some Reg of
>> LS1028a is different from others, So we used compatible
>> "fsl,ls1028a-edm" to distinguish "
>> fsl,vf610-edma".
>
>Yes this might be the right thing to do. So since it is NXPs bootloader feel free to
>fix that ;) Looking at the u-boot code right now, I don't even know it that is the
>right fix at all. The fixup code in u-boot is SoC independent (its in fsl_icid.h and is
>enabled with CONFIG_LSCH3, ie your chassis version). For example, the sdhc
>fixup will scan the nodes for "compatible = fsl,esdhc", which is also the
>secondary compatible for the "ls1028a-esdhc" compatible.
>
>And here is another reason to have it this way: we need backwards compatibility,
>the are already boards out there whose bootloader will fix-up the "old" node.
>Thus I don't see any other possibilty.
>
[Peng Ma] OK, There is non fixed on uboot.
I will fix it on uboot, if you want to use now, please change the uboot as below:

diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c b/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c
index d9d125e8ba..db9dd69548 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c
@@ -14,7 +14,7 @@ struct icid_id_table icid_tbl[] = {
        SET_SDHC_ICID(1, FSL_SDMMC_STREAM_ID),
        SET_SDHC_ICID(2, FSL_SDMMC2_STREAM_ID),
        SET_SATA_ICID(1, "fsl,ls1028a-ahci", FSL_SATA1_STREAM_ID),
-       SET_EDMA_ICID(FSL_EDMA_STREAM_ID),
+       SET_EDMA_ICID_LS1028(FSL_EDMA_STREAM_ID),
        SET_QDMA_ICID("fsl,ls1028a-qdma", FSL_DMA_STREAM_ID),
        SET_GPU_ICID("fsl,ls1028a-gpu", FSL_GPU_STREAM_ID),
        SET_DISPLAY_ICID(FSL_DISPLAY_STREAM_ID),
diff --git a/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h b/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
index 37e2fe4e66..15d0b60dbe 100644
--- a/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
+++ b/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
@@ -144,6 +144,10 @@ extern int fman_icid_tbl_sz;
        SET_GUR_ICID("fsl,vf610-edma", streamid, spare3_amqr,\
                EDMA_BASE_ADDR)
 
+#define SET_EDMA_ICID_LS1028(streamid) \
+       SET_GUR_ICID("fsl,ls1028a-edma", streamid, spare3_amqr,\
+               EDMA_BASE_ADDR)
+
 #define SET_GPU_ICID(compat, streamid) \
        SET_GUR_ICID(compat, streamid, misc1_amqr,\
                GPU_BASE_ADDR)

BR,
Peng
>-michael
>
>>
>> Thanks,
>> Peng
>>>                        reg = <0x0 0x22c0000 0x0 0x10000>,
>>>                              <0x0 0x22d0000 0x0 0x10000>,
>>>                              <0x0 0x22e0000 0x0 0x10000>;
>>> --
>>> 2.20.1
Michael Walle March 7, 2020, 1:10 p.m. UTC | #4
Hi Peng,

Am 2020-03-07 11:32, schrieb Peng Ma:
>> -----Original Message-----
>> From: Michael Walle <michael@walle.cc>
>> Sent: 2020年3月7日 17:26
>> To: Peng Ma <peng.ma@nxp.com>
>> Cc: dmaengine@vger.kernel.org; devicetree@vger.kernel.org;
>> linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org; 
>> Vinod Koul
>> <vkoul@kernel.org>; Rob Herring <robh+dt@kernel.org>; Mark Rutland
>> <mark.rutland@arm.com>; Shawn Guo <shawnguo@kernel.org>; Leo Li
>> <leoyang.li@nxp.com>
>> Subject: Re: [EXT] [PATCH 2/2] arm64: dts: ls1028a: add 
>> "fsl,vf610-edma"
>> compatible
>> 
>> Caution: EXT Email
>> 
>> Hi Peng,
>> 
>> Am 2020-03-07 03:09, schrieb Peng Ma:
>>>> -----Original Message-----
>>>> From: Michael Walle <michael@walle.cc>
>>>> Sent: 2020年3月7日 4:54
>>>> To: dmaengine@vger.kernel.org; devicetree@vger.kernel.org;
>>>> linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org
>>>> Cc: Vinod Koul <vkoul@kernel.org>; Rob Herring <robh+dt@kernel.org>;
>>>> Mark Rutland <mark.rutland@arm.com>; Shawn Guo
>> <shawnguo@kernel.org>;
>>>> Leo Li <leoyang.li@nxp.com>; Peng Ma <peng.ma@nxp.com>; Michael 
>>>> Walle
>>>> <michael@walle.cc>
>>>> Subject: [EXT] [PATCH 2/2] arm64: dts: ls1028a: add "fsl,vf610-edma"
>>>> compatible
>>>> 
>>>> Caution: EXT Email
>>>> 
>>>> The bootloader does the IOMMU fixup and dynamically adds the 
>>>> "iommus"
>>>> property to devices according to its compatible string. In case of
>>>> the eDMA controller this property is missing. Add it. After that the
>>>> IOMMU will work with the eDMA core.
>>>> 
>>>> Signed-off-by: Michael Walle <michael@walle.cc>
>>>> ---
>>>> arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>> 
>>>> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>>> b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>>> index b152fa90cf5c..aa467bff2209 100644
>>>> --- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>>> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
>>>> @@ -447,7 +447,7 @@
>>>> 
>>>>                edma0: dma-controller@22c0000 {
>>>>                        #dma-cells = <2>;
>>>> -                       compatible = "fsl,ls1028a-edma";
>>>> +                       compatible = "fsl,ls1028a-edma",
>>>> + "fsl,vf610-edma";
>>> Hi Michael,
>>> 
>>> You should change it on bootloader instead of kernel, Some Reg of
>>> LS1028a is different from others, So we used compatible
>>> "fsl,ls1028a-edm" to distinguish "
>>> fsl,vf610-edma".
>> 
>> Yes this might be the right thing to do. So since it is NXPs 
>> bootloader feel free to
>> fix that ;) Looking at the u-boot code right now, I don't even know it 
>> that is the
>> right fix at all. The fixup code in u-boot is SoC independent (its in 
>> fsl_icid.h and is
>> enabled with CONFIG_LSCH3, ie your chassis version). For example, the 
>> sdhc
>> fixup will scan the nodes for "compatible = fsl,esdhc", which is also 
>> the
>> secondary compatible for the "ls1028a-esdhc" compatible.
>> 
>> And here is another reason to have it this way: we need backwards 
>> compatibility,
>> the are already boards out there whose bootloader will fix-up the 
>> "old" node.
>> Thus I don't see any other possibilty.
>> 
> [Peng Ma] OK, There is non fixed on uboot.
> I will fix it on uboot, if you want to use now, please change the
> uboot as below:

As I told you, I cannot be changed for shipped bootloaders. While it can 
be
changed for newer ones, I would really like to retain backwards 
compatibility.
And so should you.

That being said, I don't see a problem in having both compatibles. Linux
will use the ls1028a-emda one and u-boot will fix up the "older"
vf610-edma one.

Unfortunately, this patch will not only affect eDMA but all other 
drivers
which uses eDMA, eg. sound, lpuart, i2c and maybe DSPI.

-michael

> 
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c
> b/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c
> index d9d125e8ba..db9dd69548 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/ls1028_ids.c
> @@ -14,7 +14,7 @@ struct icid_id_table icid_tbl[] = {
>         SET_SDHC_ICID(1, FSL_SDMMC_STREAM_ID),
>         SET_SDHC_ICID(2, FSL_SDMMC2_STREAM_ID),
>         SET_SATA_ICID(1, "fsl,ls1028a-ahci", FSL_SATA1_STREAM_ID),
> -       SET_EDMA_ICID(FSL_EDMA_STREAM_ID),
> +       SET_EDMA_ICID_LS1028(FSL_EDMA_STREAM_ID),
>         SET_QDMA_ICID("fsl,ls1028a-qdma", FSL_DMA_STREAM_ID),
>         SET_GPU_ICID("fsl,ls1028a-gpu", FSL_GPU_STREAM_ID),
>         SET_DISPLAY_ICID(FSL_DISPLAY_STREAM_ID),
> diff --git a/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
> b/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
> index 37e2fe4e66..15d0b60dbe 100644
> --- a/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
> +++ b/arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
> @@ -144,6 +144,10 @@ extern int fman_icid_tbl_sz;
>         SET_GUR_ICID("fsl,vf610-edma", streamid, spare3_amqr,\
>                 EDMA_BASE_ADDR)
> 
> +#define SET_EDMA_ICID_LS1028(streamid) \
> +       SET_GUR_ICID("fsl,ls1028a-edma", streamid, spare3_amqr,\
> +               EDMA_BASE_ADDR)
> +
>  #define SET_GPU_ICID(compat, streamid) \
>         SET_GUR_ICID(compat, streamid, misc1_amqr,\
>                 GPU_BASE_ADDR)
> 
> BR,
> Peng
>> -michael
>> 
>>> 
>>> Thanks,
>>> Peng
>>>>                        reg = <0x0 0x22c0000 0x0 0x10000>,
>>>>                              <0x0 0x22d0000 0x0 0x10000>,
>>>>                              <0x0 0x22e0000 0x0 0x10000>;
>>>> --
>>>> 2.20.1
Michael Walle March 23, 2020, 2:36 p.m. UTC | #5
Hi all,

Am 2020-03-06 21:54, schrieb Michael Walle:
> The bootloader does the IOMMU fixup and dynamically adds the "iommus"
> property to devices according to its compatible string. In case of the
> eDMA controller this property is missing. Add it. After that the IOMMU
> will work with the eDMA core.
> 
> Signed-off-by: Michael Walle <michael@walle.cc>

Is it possible to have this merged, so it gets into the merge window
for 5.7? As I explained in this thread [1], without this compatible
all boards with enabled IOMMU (and who have either sound, lpuart or
i2c enabled), doesn't work.

-michael

[1] 
https://lore.kernel.org/linux-devicetree/433418e889347784bc74f3c22c23e644@walle.cc/

> ---
>  arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
> b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
> index b152fa90cf5c..aa467bff2209 100644
> --- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
> @@ -447,7 +447,7 @@
> 
>  		edma0: dma-controller@22c0000 {
>  			#dma-cells = <2>;
> -			compatible = "fsl,ls1028a-edma";
> +			compatible = "fsl,ls1028a-edma", "fsl,vf610-edma";
>  			reg = <0x0 0x22c0000 0x0 0x10000>,
>  			      <0x0 0x22d0000 0x0 0x10000>,
>  			      <0x0 0x22e0000 0x0 0x10000>;
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
index b152fa90cf5c..aa467bff2209 100644
--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
@@ -447,7 +447,7 @@ 
 
 		edma0: dma-controller@22c0000 {
 			#dma-cells = <2>;
-			compatible = "fsl,ls1028a-edma";
+			compatible = "fsl,ls1028a-edma", "fsl,vf610-edma";
 			reg = <0x0 0x22c0000 0x0 0x10000>,
 			      <0x0 0x22d0000 0x0 0x10000>,
 			      <0x0 0x22e0000 0x0 0x10000>;