diff mbox

[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 (mailing list archive)
State New, archived
Headers show

Commit Message

Alexandre TORGUE Dec. 12, 2017, 6:02 p.m. UTC
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>

Comments

Vladimir Murzin Dec. 13, 2017, 10:06 a.m. UTC | #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
Alexandre TORGUE Dec. 13, 2017, 10:28 a.m. UTC | #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
Alexandre TORGUE Dec. 13, 2017, 12:50 p.m. UTC | #3
-----Original Message-----
From: Alexandre TORGUE 

Sent: mercredi 13 décembre 2017 11:28
To: 'Vladimir Murzin' <vladimir.murzin@arm.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


-----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) ?

Sorry I was not awake this morning. If no v2 I will fix this typo when I will apply patch on my tree.

 
> 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
diff mbox

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;
 	};