Thread (1 message) 1 message, 1 author, 2016-10-31

[PATCH] ARM: DT: stm32: move dma translation to board files

From: Bruno Herrera <hidden>
Date: 2016-10-31 16:41:31
Also in: linux-devicetree

On Mon, Oct 31, 2016 at 12:14 PM, Rados?aw Pietrzyk
[off-list ref] wrote:
This is weird because dma ddresses are recalculated using parent's
dma-ranges property and soc already has it so there should be absolutely no
problem.
These are my DTS and DTSI file.
2016-10-31 11:27 GMT+01:00 Bruno Herrera [off-list ref]:
quoted
On Fri, Oct 28, 2016 at 5:09 AM, Rados?aw Pietrzyk
[off-list ref] wrote:
quoted
Have you defined your sdio node within soc node ?
It is in the SOC node of the DSTI file.
quoted
2016-10-27 14:57 GMT+02:00 Bruno Herrera [off-list ref]:
quoted
Hi Alex,

On Thu, Oct 27, 2016 at 10:21 AM, Alexandre Torgue
[off-list ref] wrote:
quoted
Hi Bruno,


On 10/27/2016 12:43 PM, Bruno Herrera wrote:
quoted
Hi Alex,

On Wed, Oct 26, 2016 at 7:09 AM, Alexandre Torgue
[off-list ref] wrote:
quoted
Hi Bruno,

On 10/25/2016 11:06 PM, Bruno Herrera wrote:
quoted

Hi Alexandre,
quoted
stm32f469-disco and stm32f429-eval boards use SDRAM start address
remapping
(to @0) to boost performances. A DMA translation through
"dma-ranges"
property was needed for other masters than the M4 CPU.
stm32f429-disco doesn't use remapping so doesn't need this DMA
translation.
This patches moves this DMA translation definition from stm32f429
soc
file
to board files.

Signed-off-by: Alexandre TORGUE <redacted>
diff --git a/arch/arm/boot/dts/stm32429i-eval.dts
b/arch/arm/boot/dts/stm32429i-eval.dts
index 13c7cd2..a763c15 100644
--- a/arch/arm/boot/dts/stm32429i-eval.dts
+++ b/arch/arm/boot/dts/stm32429i-eval.dts
@@ -82,6 +82,10 @@
                };
        };

+       soc {
+               dma-ranges = <0xc0000000 0x0 0x10000000>;
+       };
+
        usbotg_hs_phy: usbphy {
                #phy-cells = <0>;
                compatible = "usb-nop-xceiv";


Shouldn't also the peripheral dma-ranges property move to board
specific
too?
I  had this patch for while but I didn't had the time to submit:


Well spot I forgot it. Actually, discussing with Arnd ysterday on
IIRC,
empty dma-ranges is not needed. Can you test on your side by
removing
dma-ranges in usb node please ?
Unfortunately will take a time for me to set up this environment on
the STM32F4-EVAL board.
And on the discovery boards we dont have this scenario. That was the
main reason I did not submit the patch right away.
My conclusion and I might be wrong but is based on the my tests with
SDIO device at STM32F469I-DISCO board.

I started this issue as discussion at ST Forum but Maxime gave me
the
hint.




https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fDMA2%20and%20SYSCFG_MEMRMP%20relationship&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=44
quoted
I will push a v2 by removing empty dma-ranges if tests are ok in
your
side.

From my understating/conclusion is: when empty property(dma-ranges)
is
the device node, the mapping will be taken in consideration when
using
DMA otherwise the mapping is ignored.
And in the SDIO case it is needed for DEV->MEM(SDRAM) and
MEM(SDRAM)->DEV. If it is not the case for the devices in question
so
I suppose it can work without the property.

For sure translation has to be done but I'm not sure that an empty
"dma-ranges" is needed in device node to activate it. For Ethernet
empty
"dma-ranges" is not needed. I will try with usb.
In the case of SDIO it is needed. As example this is my working SDIO
node:

sdio: sdio at 40012c00 {
compatible = "arm,pl18x", "arm,primecell";
arm,primecell-periphid = <0x00480181>;
reg = <0x40012c00 0x400>;
dmas =  <&dma2 6 4 0x10400 0x3>, /* Logical - DevToMem */
<&dma2 3 4 0x10400 0x3>; /* Logical - MemToDev */
dma-names = "rx", "tx";
clocks = <&rcc 0 171>;
clock-names = "apb_pclk";
interrupts = <49>;
status = "disabled";
};

&sdio {
status = "okay";
vmmc-supply = <&wlan_en>;
bus-width = <4>;
max-frequency = <24000000>;
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
ti,non-removable;
ti,needs-special-hs-handling;
dma-ranges;
cap-power-off-card;
keep-power-in-suspend;

#address-cells = <1>;
#size-cells = <0>;
wlcore: wlcore at 0 {
compatible = "ti,wl1835";
reg = <2>;
interrupt-parent = <&gpioa>;
interrupts = <8 IRQ_TYPE_EDGE_RISING>;
};
};
quoted
alex

quoted
quoted
Thanks in advance
Alex

quoted
Author: Bruno Herrera [off-list ref]
Date:   Sun Oct 16 14:50:00 2016 -0200

    ARM: DT: STM32: Use dma-ranges property per board not at dtsi
file
diff --git a/arch/arm/boot/dts/stm32429i-eval.dts
b/arch/arm/boot/dts/stm32429i-eval.dts
index 6bfc595..2a22a82 100644
--- a/arch/arm/boot/dts/stm32429i-eval.dts
+++ b/arch/arm/boot/dts/stm32429i-eval.dts
@@ -52,6 +52,10 @@
        model = "STMicroelectronics STM32429i-EVAL board";
        compatible = "st,stm32429i-eval", "st,stm32f429";

+       soc {
+               dma-ranges = <0xC0000000 0x0 0x10000000>;
+       };
+
        chosen {
                bootargs = "root=/dev/ram rdinit=/linuxrc";
                stdout-path = "serial0:115200n8";
@@ -96,6 +100,7 @@

 &ethernet0 {
        status = "okay";
+       dma-ranges;
        pinctrl-0       = <&ethernet0_mii>;
        pinctrl-names   = "default";
        phy-mode        = "mii-id";
@@ -116,6 +121,7 @@
 };

 &usbotg_hs {
+       dma-ranges;
        dr_mode = "host";
        phys = <&usbotg_hs_phy>;
        phy-names = "usb2-phy";
diff --git a/arch/arm/boot/dts/stm32f429.dtsi
b/arch/arm/boot/dts/stm32f429.dtsi
index 7d624a2..697a133 100644
--- a/arch/arm/boot/dts/stm32f429.dtsi
+++ b/arch/arm/boot/dts/stm32f429.dtsi
@@ -59,7 +59,6 @@
        };

        soc {
-               dma-ranges = <0xc0000000 0x0 0x10000000>;

                timer2: timer at 40000000 {
                        compatible = "st,stm32-timer";
@@ -472,13 +471,11 @@
                        st,syscon = <&syscfg 0x4>;
                        snps,pbl = <8>;
                        snps,mixed-burst;
-                       dma-ranges;
                        status = "disabled";
                };

                usbotg_hs: usb at 40040000 {
                        compatible = "snps,dwc2";
-                       dma-ranges;
                        reg = <0x40040000 0x40000>;
                        interrupts = <77>;
                        clocks = <&rcc 0 29>;

quoted
diff --git a/arch/arm/boot/dts/stm32f429.dtsi
b/arch/arm/boot/dts/stm32f429.dtsi
index 0596d60..3a1cfdd 100644
--- a/arch/arm/boot/dts/stm32f429.dtsi
+++ b/arch/arm/boot/dts/stm32f429.dtsi
@@ -59,8 +59,6 @@
        };

        soc {
-               dma-ranges = <0xc0000000 0x0 0x10000000>;
-
                timer2: timer at 40000000 {
                        compatible = "st,stm32-timer";
                        reg = <0x40000000 0x400>;
diff --git a/arch/arm/boot/dts/stm32f469-disco.dts
b/arch/arm/boot/dts/stm32f469-disco.dts
index 9e73656..c2213c0 100644
--- a/arch/arm/boot/dts/stm32f469-disco.dts
+++ b/arch/arm/boot/dts/stm32f469-disco.dts
@@ -64,6 +64,10 @@
        aliases {
                serial0 = &usart3;
        };
+
+       soc {
+               dma-ranges = <0xc0000000 0x0 0x10000000>;
+       };
 };

 &clk_hse {
--



Br.,
Bruno
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stm32f469-disco.dts
Type: application/octet-stream
Size: 3330 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161031/f28cc5d8/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stm32f429.dtsi
Type: application/octet-stream
Size: 12741 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161031/f28cc5d8/attachment-0003.obj>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help