diff mbox

ARM: debug: add stm32 low-level debug support

Message ID 1512394376-25962-1-git-send-email-ludovic.Barre@st.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ludovic BARRE Dec. 4, 2017, 1:32 p.m. UTC
From: Ludovic Barre <ludovic.barre@st.com>

This adds low-level debug support on USART1 for STM32F4
and STM32F7. Compiled via 'CONFIG_DEBUG_LL' and 'CONFIG_EARLY_PRINTK'.
Enabled via 'earlyprintk' in bootargs.

Signed-off-by: Gerald Baeza <gerald.baeza@st.com>
---
 arch/arm/Kconfig.debug         | 25 +++++++++++++++++++++++++
 arch/arm/include/debug/stm32.S | 41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+)
 create mode 100644 arch/arm/include/debug/stm32.S

Comments

Alexandre TORGUE Dec. 11, 2017, 9:08 a.m. UTC | #1
Hi Ludovic

On 12/04/2017 02:32 PM, Ludovic Barre wrote:
> From: Ludovic Barre <ludovic.barre@st.com>
> 
> This adds low-level debug support on USART1 for STM32F4
> and STM32F7. Compiled via 'CONFIG_DEBUG_LL' and 'CONFIG_EARLY_PRINTK'.
> Enabled via 'earlyprintk' in bootargs.
> 
> Signed-off-by: Gerald Baeza <gerald.baeza@st.com>

Acked-by: Alexandre TORGUE <alexandre.torgue@st.com>

> ---
>   arch/arm/Kconfig.debug         | 25 +++++++++++++++++++++++++
>   arch/arm/include/debug/stm32.S | 41 +++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 66 insertions(+)
>   create mode 100644 arch/arm/include/debug/stm32.S
> 
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index 17685e1..9469c58 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -1140,6 +1140,26 @@ choice
>   
>   		  If unsure, say N.
>   
> +	config STM32F4_DEBUG_UART
> +		bool "Use STM32F4 UART for low-level debug"
> +		depends on ARCH_STM32
> +		select DEBUG_STM32_UART
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on STM32 based platforms.
> +
> +		  If unsure, say N.
> +
> +	config STM32F7_DEBUG_UART
> +		bool "Use STM32F7 UART for low-level debug"
> +		depends on ARCH_STM32
> +		select DEBUG_STM32_UART
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on STM32 based platforms.
> +
> +		  If unsure, say N.
> +
>   	config TEGRA_DEBUG_UART_AUTO_ODMDATA
>   		bool "Kernel low-level debugging messages via Tegra UART via ODMDATA"
>   		depends on ARCH_TEGRA
> @@ -1424,6 +1444,10 @@ config DEBUG_STI_UART
>   	bool
>   	depends on ARCH_STI
>   
> +config DEBUG_STM32_UART
> +	bool
> +	depends on ARCH_STM32
> +
>   config DEBUG_SIRFSOC_UART
>   	bool
>   	depends on ARCH_SIRF
> @@ -1472,6 +1496,7 @@ config DEBUG_LL_INCLUDE
>   	default "debug/s5pv210.S" if DEBUG_S5PV210_UART
>   	default "debug/sirf.S" if DEBUG_SIRFSOC_UART
>   	default "debug/sti.S" if DEBUG_STI_UART
> +	default "debug/stm32.S" if DEBUG_STM32_UART
>   	default "debug/tegra.S" if DEBUG_TEGRA_UART
>   	default "debug/ux500.S" if DEBUG_UX500_UART
>   	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT
> diff --git a/arch/arm/include/debug/stm32.S b/arch/arm/include/debug/stm32.S
> new file mode 100644
> index 0000000..4015257
> --- /dev/null
> +++ b/arch/arm/include/debug/stm32.S
> @@ -0,0 +1,41 @@
> +/*
> + * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
> + * Author: Gerald Baeza <gerald_baeza@st.com>
> + * License terms:  GNU General Public License (GPL), version 2
> + */
> +
> +#define STM32_UART_BASE			0x40011000	/* USART1 */
> +
> +#ifdef CONFIG_STM32F4_DEBUG_UART
> +#define STM32_USART_SR_OFF		0x00
> +#define STM32_USART_TDR_OFF		0x04
> +#endif
> +
> +#ifdef CONFIG_STM32F7_DEBUG_UART
> +#define STM32_USART_SR_OFF		0x1C
> +#define STM32_USART_TDR_OFF		0x28
> +#endif
> +
> +#define STM32_USART_TC			(1 << 6)	/* Tx complete       */
> +#define STM32_USART_TXE			(1 << 7)	/* Tx data reg empty */
> +
> +		.macro	addruart, rp, rv, tmp
> +		ldr	\rp,      =STM32_UART_BASE	@ physical base
> +		ldr	\rv,      =STM32_UART_BASE      @ virt base /* NoMMU */
> +		.endm
> +
> +                .macro  senduart,rd,rx
> +                strb    \rd, [\rx, #STM32_USART_TDR_OFF]
> +                .endm
> +
> +                .macro  waituart,rd,rx
> +1001:	ldr	\rd, [\rx, #(STM32_USART_SR_OFF)]	@ Read Status Register
> +	tst	\rd, #STM32_USART_TXE			@ TXE = 1 = tx empty
> +	beq	1001b
> +                .endm
> +
> +                .macro  busyuart,rd,rx
> +1001:	ldr	\rd, [\rx, #(STM32_USART_SR_OFF)]	@ Read Status Register
> +	tst	\rd, #STM32_USART_TC			@ TC = 1 = tx complete
> +	beq	1001b
> +                .endm
>
Neil Armstrong Dec. 11, 2017, 9:28 a.m. UTC | #2
On 04/12/2017 14:32, Ludovic Barre wrote:
> From: Ludovic Barre <ludovic.barre@st.com>
> 
> This adds low-level debug support on USART1 for STM32F4
> and STM32F7. Compiled via 'CONFIG_DEBUG_LL' and 'CONFIG_EARLY_PRINTK'.
> Enabled via 'earlyprintk' in bootargs.
> 
> Signed-off-by: Gerald Baeza <gerald.baeza@st.com>

Hi Ludovic,

Please also add your sign-off here.

Neil

> ---
>  arch/arm/Kconfig.debug         | 25 +++++++++++++++++++++++++
>  arch/arm/include/debug/stm32.S | 41 +++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 66 insertions(+)
>  create mode 100644 arch/arm/include/debug/stm32.S
> 
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index 17685e1..9469c58 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -1140,6 +1140,26 @@ choice
>  
>  		  If unsure, say N.
>  
> +	config STM32F4_DEBUG_UART
> +		bool "Use STM32F4 UART for low-level debug"
> +		depends on ARCH_STM32
> +		select DEBUG_STM32_UART
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on STM32 based platforms.
> +
> +		  If unsure, say N.
> +
> +	config STM32F7_DEBUG_UART
> +		bool "Use STM32F7 UART for low-level debug"
> +		depends on ARCH_STM32
> +		select DEBUG_STM32_UART
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on STM32 based platforms.
> +
> +		  If unsure, say N.
> +
>  	config TEGRA_DEBUG_UART_AUTO_ODMDATA
>  		bool "Kernel low-level debugging messages via Tegra UART via ODMDATA"
>  		depends on ARCH_TEGRA
> @@ -1424,6 +1444,10 @@ config DEBUG_STI_UART
>  	bool
>  	depends on ARCH_STI
>  
> +config DEBUG_STM32_UART
> +	bool
> +	depends on ARCH_STM32
> +
>  config DEBUG_SIRFSOC_UART
>  	bool
>  	depends on ARCH_SIRF
> @@ -1472,6 +1496,7 @@ config DEBUG_LL_INCLUDE
>  	default "debug/s5pv210.S" if DEBUG_S5PV210_UART
>  	default "debug/sirf.S" if DEBUG_SIRFSOC_UART
>  	default "debug/sti.S" if DEBUG_STI_UART
> +	default "debug/stm32.S" if DEBUG_STM32_UART
>  	default "debug/tegra.S" if DEBUG_TEGRA_UART
>  	default "debug/ux500.S" if DEBUG_UX500_UART
>  	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT
> diff --git a/arch/arm/include/debug/stm32.S b/arch/arm/include/debug/stm32.S
> new file mode 100644
> index 0000000..4015257
> --- /dev/null
> +++ b/arch/arm/include/debug/stm32.S
> @@ -0,0 +1,41 @@
> +/*
> + * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
> + * Author: Gerald Baeza <gerald_baeza@st.com>
> + * License terms:  GNU General Public License (GPL), version 2
> + */
> +
> +#define STM32_UART_BASE			0x40011000	/* USART1 */
> +
> +#ifdef CONFIG_STM32F4_DEBUG_UART
> +#define STM32_USART_SR_OFF		0x00
> +#define STM32_USART_TDR_OFF		0x04
> +#endif
> +
> +#ifdef CONFIG_STM32F7_DEBUG_UART
> +#define STM32_USART_SR_OFF		0x1C
> +#define STM32_USART_TDR_OFF		0x28
> +#endif
> +
> +#define STM32_USART_TC			(1 << 6)	/* Tx complete       */
> +#define STM32_USART_TXE			(1 << 7)	/* Tx data reg empty */
> +
> +		.macro	addruart, rp, rv, tmp
> +		ldr	\rp,      =STM32_UART_BASE	@ physical base
> +		ldr	\rv,      =STM32_UART_BASE      @ virt base /* NoMMU */
> +		.endm
> +
> +                .macro  senduart,rd,rx
> +                strb    \rd, [\rx, #STM32_USART_TDR_OFF]
> +                .endm
> +
> +                .macro  waituart,rd,rx
> +1001:	ldr	\rd, [\rx, #(STM32_USART_SR_OFF)]	@ Read Status Register
> +	tst	\rd, #STM32_USART_TXE			@ TXE = 1 = tx empty
> +	beq	1001b
> +                .endm
> +
> +                .macro  busyuart,rd,rx
> +1001:	ldr	\rd, [\rx, #(STM32_USART_SR_OFF)]	@ Read Status Register
> +	tst	\rd, #STM32_USART_TC			@ TC = 1 = tx complete
> +	beq	1001b
> +                .endm
>
Philippe Ombredanne Dec. 11, 2017, 9:33 a.m. UTC | #3
Ludovic,

On Mon, Dec 11, 2017 at 10:08 AM, Alexandre Torgue
<alexandre.torgue@st.com> wrote:
> Hi Ludovic
>
> On 12/04/2017 02:32 PM, Ludovic Barre wrote:
>>
>> From: Ludovic Barre <ludovic.barre@st.com>
>>
>> This adds low-level debug support on USART1 for STM32F4
>> and STM32F7. Compiled via 'CONFIG_DEBUG_LL' and 'CONFIG_EARLY_PRINTK'.
>> Enabled via 'earlyprintk' in bootargs.
>>
>> Signed-off-by: Gerald Baeza <gerald.baeza@st.com>
>
>
> Acked-by: Alexandre TORGUE <alexandre.torgue@st.com>

[...]

>> --- /dev/null
>> +++ b/arch/arm/include/debug/stm32.S
>> @@ -0,0 +1,41 @@
>> +/*
>> + * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
>> + * Author: Gerald Baeza <gerald_baeza@st.com>
>> + * License terms:  GNU General Public License (GPL), version 2

Have you considered using the new SPDX ids? See THomas doc patches for details.
Ludovic BARRE Dec. 11, 2017, 10:22 a.m. UTC | #4
Hi Neil, Philippe

thanks for review

I will send V2 with:
-my "signed-off"
-Acked-by: Alexandre TORGUE <alexandre.torgue@st.com>
-SPDX license
/* SPDX-License-Identifier: GPL-2.0 */

BR
Ludo

On 12/11/2017 10:33 AM, Philippe Ombredanne wrote:
> Ludovic,
> 
> On Mon, Dec 11, 2017 at 10:08 AM, Alexandre Torgue
> <alexandre.torgue@st.com> wrote:
>> Hi Ludovic
>>
>> On 12/04/2017 02:32 PM, Ludovic Barre wrote:
>>>
>>> From: Ludovic Barre <ludovic.barre@st.com>
>>>
>>> This adds low-level debug support on USART1 for STM32F4
>>> and STM32F7. Compiled via 'CONFIG_DEBUG_LL' and 'CONFIG_EARLY_PRINTK'.
>>> Enabled via 'earlyprintk' in bootargs.
>>>
>>> Signed-off-by: Gerald Baeza <gerald.baeza@st.com>
>>
>>
>> Acked-by: Alexandre TORGUE <alexandre.torgue@st.com>
> 
> [...]
> 
>>> --- /dev/null
>>> +++ b/arch/arm/include/debug/stm32.S
>>> @@ -0,0 +1,41 @@
>>> +/*
>>> + * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
>>> + * Author: Gerald Baeza <gerald_baeza@st.com>
>>> + * License terms:  GNU General Public License (GPL), version 2
> 
> Have you considered using the new SPDX ids? See THomas doc patches for details.
>
diff mbox

Patch

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 17685e1..9469c58 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -1140,6 +1140,26 @@  choice
 
 		  If unsure, say N.
 
+	config STM32F4_DEBUG_UART
+		bool "Use STM32F4 UART for low-level debug"
+		depends on ARCH_STM32
+		select DEBUG_STM32_UART
+		help
+		  Say Y here if you want kernel low-level debugging support
+		  on STM32 based platforms.
+
+		  If unsure, say N.
+
+	config STM32F7_DEBUG_UART
+		bool "Use STM32F7 UART for low-level debug"
+		depends on ARCH_STM32
+		select DEBUG_STM32_UART
+		help
+		  Say Y here if you want kernel low-level debugging support
+		  on STM32 based platforms.
+
+		  If unsure, say N.
+
 	config TEGRA_DEBUG_UART_AUTO_ODMDATA
 		bool "Kernel low-level debugging messages via Tegra UART via ODMDATA"
 		depends on ARCH_TEGRA
@@ -1424,6 +1444,10 @@  config DEBUG_STI_UART
 	bool
 	depends on ARCH_STI
 
+config DEBUG_STM32_UART
+	bool
+	depends on ARCH_STM32
+
 config DEBUG_SIRFSOC_UART
 	bool
 	depends on ARCH_SIRF
@@ -1472,6 +1496,7 @@  config DEBUG_LL_INCLUDE
 	default "debug/s5pv210.S" if DEBUG_S5PV210_UART
 	default "debug/sirf.S" if DEBUG_SIRFSOC_UART
 	default "debug/sti.S" if DEBUG_STI_UART
+	default "debug/stm32.S" if DEBUG_STM32_UART
 	default "debug/tegra.S" if DEBUG_TEGRA_UART
 	default "debug/ux500.S" if DEBUG_UX500_UART
 	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT
diff --git a/arch/arm/include/debug/stm32.S b/arch/arm/include/debug/stm32.S
new file mode 100644
index 0000000..4015257
--- /dev/null
+++ b/arch/arm/include/debug/stm32.S
@@ -0,0 +1,41 @@ 
+/*
+ * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
+ * Author: Gerald Baeza <gerald_baeza@st.com>
+ * License terms:  GNU General Public License (GPL), version 2
+ */
+
+#define STM32_UART_BASE			0x40011000	/* USART1 */
+
+#ifdef CONFIG_STM32F4_DEBUG_UART
+#define STM32_USART_SR_OFF		0x00
+#define STM32_USART_TDR_OFF		0x04
+#endif
+
+#ifdef CONFIG_STM32F7_DEBUG_UART
+#define STM32_USART_SR_OFF		0x1C
+#define STM32_USART_TDR_OFF		0x28
+#endif
+
+#define STM32_USART_TC			(1 << 6)	/* Tx complete       */
+#define STM32_USART_TXE			(1 << 7)	/* Tx data reg empty */
+
+		.macro	addruart, rp, rv, tmp
+		ldr	\rp,      =STM32_UART_BASE	@ physical base
+		ldr	\rv,      =STM32_UART_BASE      @ virt base /* NoMMU */
+		.endm
+
+                .macro  senduart,rd,rx
+                strb    \rd, [\rx, #STM32_USART_TDR_OFF]
+                .endm
+
+                .macro  waituart,rd,rx
+1001:	ldr	\rd, [\rx, #(STM32_USART_SR_OFF)]	@ Read Status Register
+	tst	\rd, #STM32_USART_TXE			@ TXE = 1 = tx empty
+	beq	1001b
+                .endm
+
+                .macro  busyuart,rd,rx
+1001:	ldr	\rd, [\rx, #(STM32_USART_SR_OFF)]	@ Read Status Register
+	tst	\rd, #STM32_USART_TC			@ TC = 1 = tx complete
+	beq	1001b
+                .endm