[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.dtsb/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¤tviews=44quoted
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
alexquoted
quoted
Thanks in advance Alexquoted
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 filediff --git a/arch/arm/boot/dts/stm32429i-eval.dtsb/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 @@ ðernet0 { status = "okay"; + dma-ranges; pinctrl-0 = <ðernet0_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.dtsib/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.dtsib/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.dtsb/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>