[1/3] ARM: dts: stm32: add DMA memory pool on MCU which embed a cortex-M7

Message ID 1513101746-18030-2-git-send-email-alexandre.torgue@st.com
State New
Headers show
Series
  • Enable DMA on STM32 MCU based on cortex-M7
Related show

Commit Message

Alexandre Torgue Dec. 12, 2017, 6:02 p.m.
On cortex-M7 MCU, DMA have to use a non cache-able memory area. For this
reason a dedicated memory pool is created for DMA.
This patch creates a DMA memory pool of 1MB of each STM32 MCU which
embeds a cortex-M7 expect stm32f746-disco. Indeed, as stm32f746-disco has
only a 8MB SDRAM and it's tricky to reduce memory used by Kernel.

Signed-off-by: Alexandre Torgue <alexandre.torgue@st.com>


-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Vladimir Murzin Dec. 13, 2017, 10:06 a.m. | #1
On 12/12/17 18:02, Alexandre Torgue wrote:
> On cortex-M7 MCU, DMA have to use a non cache-able memory area. For this

> reason a dedicated memory pool is created for DMA.

> This patch creates a DMA memory pool of 1MB of each STM32 MCU which

> embeds a cortex-M7 expect stm32f746-disco. Indeed, as stm32f746-disco has

                     ^^^^^^
                     except?

> only a 8MB SDRAM and it's tricky to reduce memory used by Kernel.


I guess that 1MB is a kind of "should be enough" estimate, probably something
along with [1] would give you exact numbers...

> 

> Signed-off-by: Alexandre Torgue <alexandre.torgue@st.com>

> 

> diff --git a/arch/arm/boot/dts/stm32746g-eval.dts b/arch/arm/boot/dts/stm32746g-eval.dts

> index 2d4e717..3f52a7b 100644

> --- a/arch/arm/boot/dts/stm32746g-eval.dts

> +++ b/arch/arm/boot/dts/stm32746g-eval.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xc0000000 0x2000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc1f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart1;

>  	};

> diff --git a/arch/arm/boot/dts/stm32f769-disco.dts b/arch/arm/boot/dts/stm32f769-disco.dts

> index 4463ca1..08699a2 100644

> --- a/arch/arm/boot/dts/stm32f769-disco.dts

> +++ b/arch/arm/boot/dts/stm32f769-disco.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xC0000000 0x1000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc0f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart1;

>  	};

> diff --git a/arch/arm/boot/dts/stm32h743i-disco.dts b/arch/arm/boot/dts/stm32h743i-disco.dts

> index 79e841d..104545a 100644

> --- a/arch/arm/boot/dts/stm32h743i-disco.dts

> +++ b/arch/arm/boot/dts/stm32h743i-disco.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xd0000000 0x2000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc1f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart2;

>  	};

> diff --git a/arch/arm/boot/dts/stm32h743i-eval.dts b/arch/arm/boot/dts/stm32h743i-eval.dts

> index 9f0e72c..5bd4b16 100644

> --- a/arch/arm/boot/dts/stm32h743i-eval.dts

> +++ b/arch/arm/boot/dts/stm32h743i-eval.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xd0000000 0x2000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc1f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart1;

>  	};

> 


Usage of dma-default looks correct to me, so FWIW

Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com>


[1] https://lkml.org/lkml/2017/7/7/296

Vladimir
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alexandre Torgue Dec. 13, 2017, 10:28 a.m. | #2
-----Original Message-----
From: Vladimir Murzin [mailto:vladimir.murzin@arm.com] 

Sent: mercredi 13 d├ęcembre 2017 11:07
To: Alexandre TORGUE <alexandre.torgue@st.com>; Maxime Coquelin <mcoquelin.stm32@gmail.com>; arnd@arndb.de; robh+dt@kernel.org; mark.rutland@arm.com; linux@armlinux.org.uk; Patrice CHOTARD <patrice.chotard@st.com>; lee.jones@linaro.org
Cc: devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/3] ARM: dts: stm32: add DMA memory pool on MCU which embed a cortex-M7

On 12/12/17 18:02, Alexandre Torgue wrote:
> On cortex-M7 MCU, DMA have to use a non cache-able memory area. For 

> this reason a dedicated memory pool is created for DMA.

> This patch creates a DMA memory pool of 1MB of each STM32 MCU which 

> embeds a cortex-M7 expect stm32f746-disco. Indeed, as stm32f746-disco 

> has

                     ^^^^^^
                     except?
Sorry, Is there a typo issue (or just wording issue) ?
 
> only a 8MB SDRAM and it's tricky to reduce memory used by Kernel.


I guess that 1MB is a kind of "should be enough" estimate, probably something along with [1] would give you exact numbers...

Exactly, 1MB is  a kind "should be enough" and code is here to show that we need a dedicated memory area for DMA. But this value has
to be adapt regarding to use case needed by users. Thanks for the lkml link. It will help users to adapt DMA area and thanks for reviewing.

Regards
Alex

> 

> Signed-off-by: Alexandre Torgue <alexandre.torgue@st.com>

> 

> diff --git a/arch/arm/boot/dts/stm32746g-eval.dts 

> b/arch/arm/boot/dts/stm32746g-eval.dts

> index 2d4e717..3f52a7b 100644

> --- a/arch/arm/boot/dts/stm32746g-eval.dts

> +++ b/arch/arm/boot/dts/stm32746g-eval.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xc0000000 0x2000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc1f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart1;

>  	};

> diff --git a/arch/arm/boot/dts/stm32f769-disco.dts 

> b/arch/arm/boot/dts/stm32f769-disco.dts

> index 4463ca1..08699a2 100644

> --- a/arch/arm/boot/dts/stm32f769-disco.dts

> +++ b/arch/arm/boot/dts/stm32f769-disco.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xC0000000 0x1000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc0f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart1;

>  	};

> diff --git a/arch/arm/boot/dts/stm32h743i-disco.dts 

> b/arch/arm/boot/dts/stm32h743i-disco.dts

> index 79e841d..104545a 100644

> --- a/arch/arm/boot/dts/stm32h743i-disco.dts

> +++ b/arch/arm/boot/dts/stm32h743i-disco.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xd0000000 0x2000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc1f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart2;

>  	};

> diff --git a/arch/arm/boot/dts/stm32h743i-eval.dts 

> b/arch/arm/boot/dts/stm32h743i-eval.dts

> index 9f0e72c..5bd4b16 100644

> --- a/arch/arm/boot/dts/stm32h743i-eval.dts

> +++ b/arch/arm/boot/dts/stm32h743i-eval.dts

> @@ -57,6 +57,19 @@

>  		reg = <0xd0000000 0x2000000>;

>  	};

>  

> +	reserved-memory {

> +		#address-cells = <1>;

> +		#size-cells = <1>;

> +		ranges;

> +

> +		linux,dma {

> +			compatible = "shared-dma-pool";

> +			linux,dma-default;

> +			no-map;

> +			reg = <0xc1f00000 0x100000>;

> +		};

> +	};

> +

>  	aliases {

>  		serial0 = &usart1;

>  	};

> 


Usage of dma-default looks correct to me, so FWIW

Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com>


[1] https://lkml.org/lkml/2017/7/7/296

Vladimir

Patch

diff --git a/arch/arm/boot/dts/stm32746g-eval.dts b/arch/arm/boot/dts/stm32746g-eval.dts
index 2d4e717..3f52a7b 100644
--- a/arch/arm/boot/dts/stm32746g-eval.dts
+++ b/arch/arm/boot/dts/stm32746g-eval.dts
@@ -57,6 +57,19 @@ 
 		reg = <0xc0000000 0x2000000>;
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		linux,dma {
+			compatible = "shared-dma-pool";
+			linux,dma-default;
+			no-map;
+			reg = <0xc1f00000 0x100000>;
+		};
+	};
+
 	aliases {
 		serial0 = &usart1;
 	};
diff --git a/arch/arm/boot/dts/stm32f769-disco.dts b/arch/arm/boot/dts/stm32f769-disco.dts
index 4463ca1..08699a2 100644
--- a/arch/arm/boot/dts/stm32f769-disco.dts
+++ b/arch/arm/boot/dts/stm32f769-disco.dts
@@ -57,6 +57,19 @@ 
 		reg = <0xC0000000 0x1000000>;
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		linux,dma {
+			compatible = "shared-dma-pool";
+			linux,dma-default;
+			no-map;
+			reg = <0xc0f00000 0x100000>;
+		};
+	};
+
 	aliases {
 		serial0 = &usart1;
 	};
diff --git a/arch/arm/boot/dts/stm32h743i-disco.dts b/arch/arm/boot/dts/stm32h743i-disco.dts
index 79e841d..104545a 100644
--- a/arch/arm/boot/dts/stm32h743i-disco.dts
+++ b/arch/arm/boot/dts/stm32h743i-disco.dts
@@ -57,6 +57,19 @@ 
 		reg = <0xd0000000 0x2000000>;
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		linux,dma {
+			compatible = "shared-dma-pool";
+			linux,dma-default;
+			no-map;
+			reg = <0xc1f00000 0x100000>;
+		};
+	};
+
 	aliases {
 		serial0 = &usart2;
 	};
diff --git a/arch/arm/boot/dts/stm32h743i-eval.dts b/arch/arm/boot/dts/stm32h743i-eval.dts
index 9f0e72c..5bd4b16 100644
--- a/arch/arm/boot/dts/stm32h743i-eval.dts
+++ b/arch/arm/boot/dts/stm32h743i-eval.dts
@@ -57,6 +57,19 @@ 
 		reg = <0xd0000000 0x2000000>;
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		linux,dma {
+			compatible = "shared-dma-pool";
+			linux,dma-default;
+			no-map;
+			reg = <0xc1f00000 0x100000>;
+		};
+	};
+
 	aliases {
 		serial0 = &usart1;
 	};