linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ARM: davinci: implement DEBUG_LL port choice
@ 2012-03-15 20:18 Uwe Kleine-König
  2012-03-20  9:54 ` Uwe Kleine-König
  0 siblings, 1 reply; 6+ messages in thread
From: Uwe Kleine-König @ 2012-03-15 20:18 UTC (permalink / raw)
  To: linux-arm-kernel

Apart from the necessity to do this change for multi-platform kernels
the previous logic depended on the zImage decompressor to write the
physical and virtual address to a magic memory location.
If the decompressor is unused or not correctly configured for the
current machid, the addruart macro was an infinite loop. Moreover
debugging the early zImage code was not possible either.

Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
---
 arch/arm/Kconfig.debug                           |   16 ++++++
 arch/arm/mach-davinci/include/mach/debug-macro.S |   58 ++++++++--------------
 arch/arm/mach-davinci/include/mach/hardware.h    |    2 +-
 arch/arm/mach-davinci/include/mach/serial.h      |   10 ----
 arch/arm/mach-davinci/include/mach/uncompress.h  |   25 +++-------
 5 files changed, 44 insertions(+), 67 deletions(-)

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index e0d236d..57019be 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -108,6 +108,22 @@ choice
 		bool "Kernel low-level debugging on 9263, 9g45 and cap9"
 		depends on HAVE_AT91_DBGU1
 
+	config DEBUG_DAVINCI_UART0
+		bool "Kernel low-level debugging on Davinci using uart0
+		depends on ARCH_DAVINCI_DM644x
+
+	config DEBUG_DA8XX_UART1
+		bool "Kernel low-level debugging on DA8xx using uart1"
+		depends on ARCH_DAVINCI_DA8XX
+
+	config DEBUG_DA8XX_UART2
+		bool "Kernel low-level debugging on DA8xx using uart2"
+		depends on ARCH_DAVINCI_DA8XX
+
+	config DEBUG_TNETV107X_UART1
+		bool "Kernel low-level debugging on TNETV107x using uart1
+		depends on ARCH_DAVINCI_TNETV107X
+
 	config DEBUG_FOOTBRIDGE_COM1
 		bool "Kernel low-level debugging messages via footbridge 8250 at PCI COM1"
 		depends on FOOTBRIDGE
diff --git a/arch/arm/mach-davinci/include/mach/debug-macro.S b/arch/arm/mach-davinci/include/mach/debug-macro.S
index cf94552..9c08295 100644
--- a/arch/arm/mach-davinci/include/mach/debug-macro.S
+++ b/arch/arm/mach-davinci/include/mach/debug-macro.S
@@ -22,46 +22,28 @@
 
 #define UART_SHIFT	2
 
-		.pushsection .data
-davinci_uart_phys:	.word	0
-davinci_uart_virt:	.word	0
-		.popsection
-
-		.macro addruart, rp, rv, tmp
-
-		/* Use davinci_uart_phys/virt if already configured */
-10:		adr	\rp, 99f		@ get effective addr of 99f
-		ldr	\rv, [\rp]		@ get absolute addr of 99f
-		sub	\rv, \rv, \rp		@ offset between the two
-		ldr	\rp, [\rp, #4]		@ abs addr of omap_uart_phys
-		sub	\tmp, \rp, \rv		@ make it effective
-		ldr	\rp, [\tmp, #0]		@ davinci_uart_phys
-		ldr	\rv, [\tmp, #4]		@ davinci_uart_virt
-		cmp	\rp, #0			@ is port configured?
-		cmpne	\rv, #0
-		bne	100f			@ already configured
-
-		/* Check the debug UART address set in uncompress.h */
-		and	\rp, pc, #0xff000000
-		ldr	\rv, =DAVINCI_UART_INFO_OFS
-		add	\rp, \rp, \rv
-
-		/* Copy uart phys address from decompressor uart info */
-		ldr	\rv, [\rp, #0]
-		str	\rv, [\tmp, #0]
-
-		/* Copy uart virt address from decompressor uart info */
-		ldr	\rv, [\rp, #4]
-		str	\rv, [\tmp, #4]
-
-		b	10b
+#if defined(CONFIG_DEBUG_DAVINCI_UART0)
+#define UART_BASE	DAVINCI_UART0_BASE
+#elif defined(CONFIG_DEBUG_DA8XX_UART0)
+#define UART_BASE	DA8XX_UART0_BASE
+#elif defined(CONFIG_DEBUG_DA8XX_UART1)
+#define UART_BASE	DA8XX_UART1_BASE
+#elif defined(CONFIG_DEBUG_DA8XX_UART2)
+#define UART_BASE	DA8XX_UART2_BASE
+#elif defined(CONFIG_DEBUG_TNETV107X_UART1)
+#define UART_BASE	TNETV107X_UART2_BASE
+#define UART_VIRTBASE	TNETV107X_UART2_VIRT
+#else
+#error "Select a specifc port for DEBUG_LL"
+#endif
 
-		.align
-99:		.word	.
-		.word	davinci_uart_phys
-		.ltorg
+#ifndef UART_VIRTBASE
+#define UART_VIRTBASE IO_ADDRESS(UART_BASE)
+#endif
 
-100:
+		.macro addruart, rp, rv, tmp
+		ldr     \rp, =UART_BASE
+		ldr     \rv, =UART_VIRTBASE
 		.endm
 
 		.macro	senduart,rd,rx
diff --git a/arch/arm/mach-davinci/include/mach/hardware.h b/arch/arm/mach-davinci/include/mach/hardware.h
index 414e0b9..649ddc2 100644
--- a/arch/arm/mach-davinci/include/mach/hardware.h
+++ b/arch/arm/mach-davinci/include/mach/hardware.h
@@ -24,7 +24,7 @@
 /*
  * I/O mapping
  */
-#define IO_PHYS				0x01c00000UL
+#define IO_PHYS				UL(0x01c00000)
 #define IO_OFFSET			0xfd000000 /* Virtual IO = 0xfec00000 */
 #define IO_SIZE				0x00400000
 #define IO_VIRT				(IO_PHYS + IO_OFFSET)
diff --git a/arch/arm/mach-davinci/include/mach/serial.h b/arch/arm/mach-davinci/include/mach/serial.h
index e347d88..46b3cd1 100644
--- a/arch/arm/mach-davinci/include/mach/serial.h
+++ b/arch/arm/mach-davinci/include/mach/serial.h
@@ -15,16 +15,6 @@
 
 #include <mach/hardware.h>
 
-/*
- * Stolen area that contains debug uart physical and virtual addresses.  These
- * addresses are filled in by the uncompress.h code, and are used by the debug
- * macros in debug-macro.S.
- *
- * This area sits just below the page tables (see arch/arm/kernel/head.S).
- * We define it as a relative offset from start of usable RAM.
- */
-#define DAVINCI_UART_INFO_OFS	0x3ff8
-
 #define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
 #define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
 #define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)
diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h
index 9dc7cf9..25cf227 100644
--- a/arch/arm/mach-davinci/include/mach/uncompress.h
+++ b/arch/arm/mach-davinci/include/mach/uncompress.h
@@ -41,37 +41,25 @@ static inline void flush(void)
 		barrier();
 }
 
-static inline void set_uart_info(u32 phys, void * __iomem virt)
+static inline void set_uart_info(u32 phys)
 {
-	/*
-	 * Get address of some.bss variable and round it down
-	 * a la CONFIG_AUTO_ZRELADDR.
-	 */
-	u32 ram_start = (u32)&uart & 0xf8000000;
-	u32 *uart_info = (u32 *)(ram_start + DAVINCI_UART_INFO_OFS);
-
 	uart = (u32 *)phys;
-	uart_info[0] = phys;
-	uart_info[1] = (u32)virt;
 }
 
-#define _DEBUG_LL_ENTRY(machine, phys, virt)			\
+#define _DEBUG_LL_ENTRY(machine, phys)				\
 	if (machine_is_##machine()) {				\
-		set_uart_info(phys, virt);			\
+		set_uart_info(phys);				\
 		break;						\
 	}
 
 #define DEBUG_LL_DAVINCI(machine, port)				\
-	_DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE,	\
-			IO_ADDRESS(DAVINCI_UART##port##_BASE))
+	_DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE)
 
 #define DEBUG_LL_DA8XX(machine, port)				\
-	_DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE,	\
-			IO_ADDRESS(DA8XX_UART##port##_BASE))
+	_DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE)
 
 #define DEBUG_LL_TNETV107X(machine, port)			\
-	_DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE,	\
-			TNETV107X_UART##port##_VIRT)
+	_DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE)
 
 static inline void __arch_decomp_setup(unsigned long arch_id)
 {
@@ -96,6 +84,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
 		DEBUG_LL_DA8XX(davinci_da850_evm,	2);
 		DEBUG_LL_DA8XX(mityomapl138,		1);
 		DEBUG_LL_DA8XX(omapl138_hawkboard,	2);
+		DEBUG_LL_DA8XX(bje_display3_5,		0);
 
 		/* TNETV107x boards */
 		DEBUG_LL_TNETV107X(tnetv107x,		1);
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH] ARM: davinci: implement DEBUG_LL port choice
  2012-03-15 20:18 [PATCH] ARM: davinci: implement DEBUG_LL port choice Uwe Kleine-König
@ 2012-03-20  9:54 ` Uwe Kleine-König
  2012-03-21 15:50   ` Nori, Sekhar
  0 siblings, 1 reply; 6+ messages in thread
From: Uwe Kleine-König @ 2012-03-20  9:54 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

On Thu, Mar 15, 2012 at 09:18:23PM +0100, Uwe Kleine-K?nig wrote:
> Apart from the necessity to do this change for multi-platform kernels
> the previous logic depended on the zImage decompressor to write the
> physical and virtual address to a magic memory location.
> If the decompressor is unused or not correctly configured for the
> current machid, the addruart macro was an infinite loop. Moreover
> debugging the early zImage code was not possible either.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
> ---
>  arch/arm/Kconfig.debug                           |   16 ++++++
>  arch/arm/mach-davinci/include/mach/debug-macro.S |   58 ++++++++--------------
>  arch/arm/mach-davinci/include/mach/hardware.h    |    2 +-
>  arch/arm/mach-davinci/include/mach/serial.h      |   10 ----
>  arch/arm/mach-davinci/include/mach/uncompress.h  |   25 +++-------
>  5 files changed, 44 insertions(+), 67 deletions(-)
> 
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index e0d236d..57019be 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -108,6 +108,22 @@ choice
>  		bool "Kernel low-level debugging on 9263, 9g45 and cap9"
>  		depends on HAVE_AT91_DBGU1
>  
> +	config DEBUG_DAVINCI_UART0
> +		bool "Kernel low-level debugging on Davinci using uart0
> +		depends on ARCH_DAVINCI_DM644x
> +
> +	config DEBUG_DA8XX_UART1
> +		bool "Kernel low-level debugging on DA8xx using uart1"
> +		depends on ARCH_DAVINCI_DA8XX
> +
> +	config DEBUG_DA8XX_UART2
> +		bool "Kernel low-level debugging on DA8xx using uart2"
> +		depends on ARCH_DAVINCI_DA8XX
> +
> +	config DEBUG_TNETV107X_UART1
> +		bool "Kernel low-level debugging on TNETV107x using uart1
> +		depends on ARCH_DAVINCI_TNETV107X
> +
on the first and the last description line there are the closing "
missing. Should I resend?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] ARM: davinci: implement DEBUG_LL port choice
  2012-03-20  9:54 ` Uwe Kleine-König
@ 2012-03-21 15:50   ` Nori, Sekhar
  2012-03-22  9:29     ` [PATCH v2] " Uwe Kleine-König
  0 siblings, 1 reply; 6+ messages in thread
From: Nori, Sekhar @ 2012-03-21 15:50 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Uwe,

On Tue, Mar 20, 2012 at 15:24:13, Uwe Kleine-K?nig wrote:

> > diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> > index e0d236d..57019be 100644
> > --- a/arch/arm/Kconfig.debug
> > +++ b/arch/arm/Kconfig.debug
> > @@ -108,6 +108,22 @@ choice
> >  		bool "Kernel low-level debugging on 9263, 9g45 and cap9"
> >  		depends on HAVE_AT91_DBGU1
> >  
> > +	config DEBUG_DAVINCI_UART0
> > +		bool "Kernel low-level debugging on Davinci using uart0
> > +		depends on ARCH_DAVINCI_DM644x
> > +
> > +	config DEBUG_DA8XX_UART1
> > +		bool "Kernel low-level debugging on DA8xx using uart1"
> > +		depends on ARCH_DAVINCI_DA8XX
> > +
> > +	config DEBUG_DA8XX_UART2
> > +		bool "Kernel low-level debugging on DA8xx using uart2"
> > +		depends on ARCH_DAVINCI_DA8XX
> > +
> > +	config DEBUG_TNETV107X_UART1
> > +		bool "Kernel low-level debugging on TNETV107x using uart1
> > +		depends on ARCH_DAVINCI_TNETV107X
> > +
> on the first and the last description line there are the closing "
> missing. Should I resend?

Yes, please do so. I have not yet reviewed/tested this.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2] ARM: davinci: implement DEBUG_LL port choice
  2012-03-21 15:50   ` Nori, Sekhar
@ 2012-03-22  9:29     ` Uwe Kleine-König
  2012-04-27 18:06       ` Nori, Sekhar
  0 siblings, 1 reply; 6+ messages in thread
From: Uwe Kleine-König @ 2012-03-22  9:29 UTC (permalink / raw)
  To: linux-arm-kernel

Apart from the necessity to do this change for multi-platform kernels
the previous logic depended on the zImage decompressor to write the
physical and virtual address to a magic memory location.
If the decompressor is unused or not correctly configured for the
current machid, the addruart macro was an infinite loop. Moreover
debugging the early zImage code was not possible either.

Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
---
Changes since (implicit) v1:
 - add closing " to description strings
 - remove debug setting for unmainlined machine id in uncompress.h

 arch/arm/Kconfig.debug                           |   16 ++++++
 arch/arm/mach-davinci/include/mach/debug-macro.S |   58 ++++++++--------------
 arch/arm/mach-davinci/include/mach/hardware.h    |    2 +-
 arch/arm/mach-davinci/include/mach/serial.h      |   10 ----
 arch/arm/mach-davinci/include/mach/uncompress.h  |   24 ++-------
 5 files changed, 43 insertions(+), 67 deletions(-)

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index e0d236d..4c2fb44 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -108,6 +108,22 @@ choice
 		bool "Kernel low-level debugging on 9263, 9g45 and cap9"
 		depends on HAVE_AT91_DBGU1
 
+	config DEBUG_DAVINCI_UART0
+		bool "Kernel low-level debugging on Davinci using uart0"
+		depends on ARCH_DAVINCI_DM644x
+
+	config DEBUG_DA8XX_UART1
+		bool "Kernel low-level debugging on DA8xx using uart1"
+		depends on ARCH_DAVINCI_DA8XX
+
+	config DEBUG_DA8XX_UART2
+		bool "Kernel low-level debugging on DA8xx using uart2"
+		depends on ARCH_DAVINCI_DA8XX
+
+	config DEBUG_TNETV107X_UART1
+		bool "Kernel low-level debugging on TNETV107x using uart1"
+		depends on ARCH_DAVINCI_TNETV107X
+
 	config DEBUG_FOOTBRIDGE_COM1
 		bool "Kernel low-level debugging messages via footbridge 8250 at PCI COM1"
 		depends on FOOTBRIDGE
diff --git a/arch/arm/mach-davinci/include/mach/debug-macro.S b/arch/arm/mach-davinci/include/mach/debug-macro.S
index cf94552..9c08295 100644
--- a/arch/arm/mach-davinci/include/mach/debug-macro.S
+++ b/arch/arm/mach-davinci/include/mach/debug-macro.S
@@ -22,46 +22,28 @@
 
 #define UART_SHIFT	2
 
-		.pushsection .data
-davinci_uart_phys:	.word	0
-davinci_uart_virt:	.word	0
-		.popsection
-
-		.macro addruart, rp, rv, tmp
-
-		/* Use davinci_uart_phys/virt if already configured */
-10:		adr	\rp, 99f		@ get effective addr of 99f
-		ldr	\rv, [\rp]		@ get absolute addr of 99f
-		sub	\rv, \rv, \rp		@ offset between the two
-		ldr	\rp, [\rp, #4]		@ abs addr of omap_uart_phys
-		sub	\tmp, \rp, \rv		@ make it effective
-		ldr	\rp, [\tmp, #0]		@ davinci_uart_phys
-		ldr	\rv, [\tmp, #4]		@ davinci_uart_virt
-		cmp	\rp, #0			@ is port configured?
-		cmpne	\rv, #0
-		bne	100f			@ already configured
-
-		/* Check the debug UART address set in uncompress.h */
-		and	\rp, pc, #0xff000000
-		ldr	\rv, =DAVINCI_UART_INFO_OFS
-		add	\rp, \rp, \rv
-
-		/* Copy uart phys address from decompressor uart info */
-		ldr	\rv, [\rp, #0]
-		str	\rv, [\tmp, #0]
-
-		/* Copy uart virt address from decompressor uart info */
-		ldr	\rv, [\rp, #4]
-		str	\rv, [\tmp, #4]
-
-		b	10b
+#if defined(CONFIG_DEBUG_DAVINCI_UART0)
+#define UART_BASE	DAVINCI_UART0_BASE
+#elif defined(CONFIG_DEBUG_DA8XX_UART0)
+#define UART_BASE	DA8XX_UART0_BASE
+#elif defined(CONFIG_DEBUG_DA8XX_UART1)
+#define UART_BASE	DA8XX_UART1_BASE
+#elif defined(CONFIG_DEBUG_DA8XX_UART2)
+#define UART_BASE	DA8XX_UART2_BASE
+#elif defined(CONFIG_DEBUG_TNETV107X_UART1)
+#define UART_BASE	TNETV107X_UART2_BASE
+#define UART_VIRTBASE	TNETV107X_UART2_VIRT
+#else
+#error "Select a specifc port for DEBUG_LL"
+#endif
 
-		.align
-99:		.word	.
-		.word	davinci_uart_phys
-		.ltorg
+#ifndef UART_VIRTBASE
+#define UART_VIRTBASE IO_ADDRESS(UART_BASE)
+#endif
 
-100:
+		.macro addruart, rp, rv, tmp
+		ldr     \rp, =UART_BASE
+		ldr     \rv, =UART_VIRTBASE
 		.endm
 
 		.macro	senduart,rd,rx
diff --git a/arch/arm/mach-davinci/include/mach/hardware.h b/arch/arm/mach-davinci/include/mach/hardware.h
index 414e0b9..649ddc2 100644
--- a/arch/arm/mach-davinci/include/mach/hardware.h
+++ b/arch/arm/mach-davinci/include/mach/hardware.h
@@ -24,7 +24,7 @@
 /*
  * I/O mapping
  */
-#define IO_PHYS				0x01c00000UL
+#define IO_PHYS				UL(0x01c00000)
 #define IO_OFFSET			0xfd000000 /* Virtual IO = 0xfec00000 */
 #define IO_SIZE				0x00400000
 #define IO_VIRT				(IO_PHYS + IO_OFFSET)
diff --git a/arch/arm/mach-davinci/include/mach/serial.h b/arch/arm/mach-davinci/include/mach/serial.h
index e347d88..46b3cd1 100644
--- a/arch/arm/mach-davinci/include/mach/serial.h
+++ b/arch/arm/mach-davinci/include/mach/serial.h
@@ -15,16 +15,6 @@
 
 #include <mach/hardware.h>
 
-/*
- * Stolen area that contains debug uart physical and virtual addresses.  These
- * addresses are filled in by the uncompress.h code, and are used by the debug
- * macros in debug-macro.S.
- *
- * This area sits just below the page tables (see arch/arm/kernel/head.S).
- * We define it as a relative offset from start of usable RAM.
- */
-#define DAVINCI_UART_INFO_OFS	0x3ff8
-
 #define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
 #define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
 #define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)
diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h
index 9dc7cf9..0ff7363 100644
--- a/arch/arm/mach-davinci/include/mach/uncompress.h
+++ b/arch/arm/mach-davinci/include/mach/uncompress.h
@@ -41,37 +41,25 @@ static inline void flush(void)
 		barrier();
 }
 
-static inline void set_uart_info(u32 phys, void * __iomem virt)
+static inline void set_uart_info(u32 phys)
 {
-	/*
-	 * Get address of some.bss variable and round it down
-	 * a la CONFIG_AUTO_ZRELADDR.
-	 */
-	u32 ram_start = (u32)&uart & 0xf8000000;
-	u32 *uart_info = (u32 *)(ram_start + DAVINCI_UART_INFO_OFS);
-
 	uart = (u32 *)phys;
-	uart_info[0] = phys;
-	uart_info[1] = (u32)virt;
 }
 
-#define _DEBUG_LL_ENTRY(machine, phys, virt)			\
+#define _DEBUG_LL_ENTRY(machine, phys)				\
 	if (machine_is_##machine()) {				\
-		set_uart_info(phys, virt);			\
+		set_uart_info(phys);				\
 		break;						\
 	}
 
 #define DEBUG_LL_DAVINCI(machine, port)				\
-	_DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE,	\
-			IO_ADDRESS(DAVINCI_UART##port##_BASE))
+	_DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE)
 
 #define DEBUG_LL_DA8XX(machine, port)				\
-	_DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE,	\
-			IO_ADDRESS(DA8XX_UART##port##_BASE))
+	_DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE)
 
 #define DEBUG_LL_TNETV107X(machine, port)			\
-	_DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE,	\
-			TNETV107X_UART##port##_VIRT)
+	_DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE)
 
 static inline void __arch_decomp_setup(unsigned long arch_id)
 {
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2] ARM: davinci: implement DEBUG_LL port choice
  2012-03-22  9:29     ` [PATCH v2] " Uwe Kleine-König
@ 2012-04-27 18:06       ` Nori, Sekhar
  2012-04-29  9:09         ` Uwe Kleine-König
  0 siblings, 1 reply; 6+ messages in thread
From: Nori, Sekhar @ 2012-04-27 18:06 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Uwe,

Thanks for the patch.

On Thu, Mar 22, 2012 at 14:59:23, Uwe Kleine-K?nig wrote:
> Apart from the necessity to do this change for multi-platform kernels
> the previous logic depended on the zImage decompressor to write the
> physical and virtual address to a magic memory location.
> If the decompressor is unused or not correctly configured for the
> current machid, the addruart macro was an infinite loop. Moreover
> debugging the early zImage code was not possible either.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>

> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index e0d236d..4c2fb44 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -108,6 +108,22 @@ choice
>  		bool "Kernel low-level debugging on 9263, 9g45 and cap9"
>  		depends on HAVE_AT91_DBGU1
>  
> +	config DEBUG_DAVINCI_UART0
> +		bool "Kernel low-level debugging on Davinci using uart0"
> +		depends on ARCH_DAVINCI_DM644x

I guess this is meant for the traditional DaVinci DM* devices.
The correct "depends on" in that case is ARCH_DAVINCI_DMx. DM644x
is just one of those DaVinci devices. Also, the config is better
named DEBUG_DAVINCI_DMx_UART0 to remain consistent with the
corresponding ARCH_ config.

> +	config DEBUG_DA8XX_UART1

I would prefer calling this DEBUG_DAVINCI_DA8XX_UART0 for the same
reason of naming consistency with the corresponding ARCH_ config.

> +		bool "Kernel low-level debugging on DA8xx using uart1"
> +		depends on ARCH_DAVINCI_DA8XX
> +
> +	config DEBUG_DA8XX_UART2
> +		bool "Kernel low-level debugging on DA8xx using uart2"
> +		depends on ARCH_DAVINCI_DA8XX
> +
> +	config DEBUG_TNETV107X_UART1
> +		bool "Kernel low-level debugging on TNETV107x using uart1"
> +		depends on ARCH_DAVINCI_TNETV107X

There should be some help text associated with each of these macros.

[...]

> diff --git a/arch/arm/mach-davinci/include/mach/debug-macro.S b/arch/arm/mach-davinci/include/mach/debug-macro.S

> +#ifndef UART_VIRTBASE
> +#define UART_VIRTBASE IO_ADDRESS(UART_BASE)
> +#endif

Prefer using tabs for indentation here..

> -100:
> +		.macro addruart, rp, rv, tmp
> +		ldr     \rp, =UART_BASE
> +		ldr     \rv, =UART_VIRTBASE

.. and here (after ldr)

[...]

> diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h

> -#define _DEBUG_LL_ENTRY(machine, phys, virt)			\
> +#define _DEBUG_LL_ENTRY(machine, phys)				\
>  	if (machine_is_##machine()) {				\
> -		set_uart_info(phys, virt);			\
> +		set_uart_info(phys);				\
>  		break;						\
>  	}

So, this throws a checkpatch error:

ERROR: Macros with complex values should be enclosed in parenthesis

I made changes for these issues and in the process also made sure the
patch applies cleanly to latest kernel. Here is the updated patch I
intend to queue for v3.5

Thanks,
Sekhar

-----8<-----
Author: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
Commit: Sekhar Nori <nsekhar@ti.com>

    ARM: davinci: implement DEBUG_LL port choice
    
    Apart from the necessity to do this change for multi-platform kernels
    the previous logic depended on the zImage decompressor to write the
    physical and virtual address to a magic memory location.
    If the decompressor is unused or not correctly configured for the
    current machid, the addruart macro was an infinite loop. Moreover
    debugging the early zImage code was not possible either.
    
    Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
    [nsekhar at ti.com: add braces in _DEBUG_LL_ENTRY() macro to fix checkpatch
    error. Fix debug port choice config dependency for traditional DaVincis.
    Modify debug port config names and add help text.]
    Signed-off-by: Sekhar Nori <nsekhar@ti.com>

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 85348a0..e561adc 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -103,6 +103,35 @@ choice
 		  Say Y here if you want the debug print routines to direct
 		  their output to the second serial port on these devices.
 
+	config DEBUG_DAVINCI_DA8XX_UART1
+		bool "Kernel low-level debugging on DaVinci DA8XX using UART1"
+		depends on ARCH_DAVINCI_DA8XX
+		help
+		  Say Y here if you want the debug print routines to direct
+		  their output to UART1 serial port on DaVinci DA8XX devices.
+
+	config DEBUG_DAVINCI_DA8XX_UART2
+		bool "Kernel low-level debugging on DaVinci DA8XX using UART2"
+		depends on ARCH_DAVINCI_DA8XX
+		help
+		  Say Y here if you want the debug print routines to direct
+		  their output to UART2 serial port on DaVinci DA8XX devices.
+
+	config DEBUG_DAVINCI_DMx_UART0
+		bool "Kernel low-level debugging on DaVinci DMx using UART0"
+		depends on ARCH_DAVINCI_DMx
+		help
+		  Say Y here if you want the debug print routines to direct
+		  their output to UART0 serial port on DaVinci DMx devices.
+
+	config DEBUG_DAVINCI_TNETV107X_UART1
+		bool "Kernel low-level debugging on DaVinci TNETV107x using UART1"
+		depends on ARCH_DAVINCI_TNETV107X
+		help
+		  Say Y here if you want the debug print routines to direct
+		  their output to UART1 serial port on DaVinci TNETV107X
+		  devices.
+
 	config DEBUG_DC21285_PORT
 		bool "Kernel low-level debugging messages via footbridge serial port"
 		depends on FOOTBRIDGE
diff --git a/arch/arm/mach-davinci/include/mach/debug-macro.S b/arch/arm/mach-davinci/include/mach/debug-macro.S
index cf94552..34290d1 100644
--- a/arch/arm/mach-davinci/include/mach/debug-macro.S
+++ b/arch/arm/mach-davinci/include/mach/debug-macro.S
@@ -22,46 +22,28 @@
 
 #define UART_SHIFT	2
 
-		.pushsection .data
-davinci_uart_phys:	.word	0
-davinci_uart_virt:	.word	0
-		.popsection
-
-		.macro addruart, rp, rv, tmp
-
-		/* Use davinci_uart_phys/virt if already configured */
-10:		adr	\rp, 99f		@ get effective addr of 99f
-		ldr	\rv, [\rp]		@ get absolute addr of 99f
-		sub	\rv, \rv, \rp		@ offset between the two
-		ldr	\rp, [\rp, #4]		@ abs addr of omap_uart_phys
-		sub	\tmp, \rp, \rv		@ make it effective
-		ldr	\rp, [\tmp, #0]		@ davinci_uart_phys
-		ldr	\rv, [\tmp, #4]		@ davinci_uart_virt
-		cmp	\rp, #0			@ is port configured?
-		cmpne	\rv, #0
-		bne	100f			@ already configured
-
-		/* Check the debug UART address set in uncompress.h */
-		and	\rp, pc, #0xff000000
-		ldr	\rv, =DAVINCI_UART_INFO_OFS
-		add	\rp, \rp, \rv
-
-		/* Copy uart phys address from decompressor uart info */
-		ldr	\rv, [\rp, #0]
-		str	\rv, [\tmp, #0]
-
-		/* Copy uart virt address from decompressor uart info */
-		ldr	\rv, [\rp, #4]
-		str	\rv, [\tmp, #4]
-
-		b	10b
+#if defined(CONFIG_DEBUG_DAVINCI_DMx_UART0)
+#define UART_BASE	DAVINCI_UART0_BASE
+#elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART0)
+#define UART_BASE	DA8XX_UART0_BASE
+#elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART1)
+#define UART_BASE	DA8XX_UART1_BASE
+#elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART2)
+#define UART_BASE	DA8XX_UART2_BASE
+#elif defined(CONFIG_DEBUG_DAVINCI_TNETV107X_UART1)
+#define UART_BASE	TNETV107X_UART2_BASE
+#define UART_VIRTBASE	TNETV107X_UART2_VIRT
+#else
+#error "Select a specifc port for DEBUG_LL"
+#endif
 
-		.align
-99:		.word	.
-		.word	davinci_uart_phys
-		.ltorg
+#ifndef UART_VIRTBASE
+#define UART_VIRTBASE	IO_ADDRESS(UART_BASE)
+#endif
 
-100:
+		.macro addruart, rp, rv, tmp
+		ldr	\rp, =UART_BASE
+		ldr	\rv, =UART_VIRTBASE
 		.endm
 
 		.macro	senduart,rd,rx
diff --git a/arch/arm/mach-davinci/include/mach/hardware.h b/arch/arm/mach-davinci/include/mach/hardware.h
index 2184691..16bb422 100644
--- a/arch/arm/mach-davinci/include/mach/hardware.h
+++ b/arch/arm/mach-davinci/include/mach/hardware.h
@@ -22,7 +22,7 @@
 /*
  * I/O mapping
  */
-#define IO_PHYS				0x01c00000UL
+#define IO_PHYS				UL(0x01c00000)
 #define IO_OFFSET			0xfd000000 /* Virtual IO = 0xfec00000 */
 #define IO_SIZE				0x00400000
 #define IO_VIRT				(IO_PHYS + IO_OFFSET)
diff --git a/arch/arm/mach-davinci/include/mach/serial.h b/arch/arm/mach-davinci/include/mach/serial.h
index e347d88..46b3cd1 100644
--- a/arch/arm/mach-davinci/include/mach/serial.h
+++ b/arch/arm/mach-davinci/include/mach/serial.h
@@ -15,16 +15,6 @@
 
 #include <mach/hardware.h>
 
-/*
- * Stolen area that contains debug uart physical and virtual addresses.  These
- * addresses are filled in by the uncompress.h code, and are used by the debug
- * macros in debug-macro.S.
- *
- * This area sits just below the page tables (see arch/arm/kernel/head.S).
- * We define it as a relative offset from start of usable RAM.
- */
-#define DAVINCI_UART_INFO_OFS	0x3ff8
-
 #define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
 #define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
 #define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)
diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h
index da2fb2c..18cfd49 100644
--- a/arch/arm/mach-davinci/include/mach/uncompress.h
+++ b/arch/arm/mach-davinci/include/mach/uncompress.h
@@ -43,37 +43,27 @@ static inline void flush(void)
 		barrier();
 }
 
-static inline void set_uart_info(u32 phys, void * __iomem virt)
+static inline void set_uart_info(u32 phys)
 {
-	/*
-	 * Get address of some.bss variable and round it down
-	 * a la CONFIG_AUTO_ZRELADDR.
-	 */
-	u32 ram_start = (u32)&uart & 0xf8000000;
-	u32 *uart_info = (u32 *)(ram_start + DAVINCI_UART_INFO_OFS);
-
 	uart = (u32 *)phys;
-	uart_info[0] = phys;
-	uart_info[1] = (u32)virt;
 }
 
-#define _DEBUG_LL_ENTRY(machine, phys, virt)			\
-	if (machine_is_##machine()) {				\
-		set_uart_info(phys, virt);			\
-		break;						\
+#define _DEBUG_LL_ENTRY(machine, phys)				\
+	{							\
+		if (machine_is_##machine()) {			\
+			set_uart_info(phys);			\
+			break;					\
+		}						\
 	}
 
 #define DEBUG_LL_DAVINCI(machine, port)				\
-	_DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE,	\
-			IO_ADDRESS(DAVINCI_UART##port##_BASE))
+	_DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE)
 
 #define DEBUG_LL_DA8XX(machine, port)				\
-	_DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE,	\
-			IO_ADDRESS(DA8XX_UART##port##_BASE))
+	_DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE)
 
 #define DEBUG_LL_TNETV107X(machine, port)			\
-	_DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE,	\
-			TNETV107X_UART##port##_VIRT)
+	_DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE)
 
 static inline void __arch_decomp_setup(unsigned long arch_id)
 {

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2] ARM: davinci: implement DEBUG_LL port choice
  2012-04-27 18:06       ` Nori, Sekhar
@ 2012-04-29  9:09         ` Uwe Kleine-König
  0 siblings, 0 replies; 6+ messages in thread
From: Uwe Kleine-König @ 2012-04-29  9:09 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On Fri, Apr 27, 2012 at 06:06:15PM +0000, Nori, Sekhar wrote:
> > diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> > index e0d236d..4c2fb44 100644
> > --- a/arch/arm/Kconfig.debug
> > +++ b/arch/arm/Kconfig.debug
> > @@ -108,6 +108,22 @@ choice
> >  		bool "Kernel low-level debugging on 9263, 9g45 and cap9"
> >  		depends on HAVE_AT91_DBGU1
> >  
> > +	config DEBUG_DAVINCI_UART0
> > +		bool "Kernel low-level debugging on Davinci using uart0"
> > +		depends on ARCH_DAVINCI_DM644x
> 
> I guess this is meant for the traditional DaVinci DM* devices.
> The correct "depends on" in that case is ARCH_DAVINCI_DMx. DM644x
> is just one of those DaVinci devices. Also, the config is better
> named DEBUG_DAVINCI_DMx_UART0 to remain consistent with the
> corresponding ARCH_ config.
> 
> > +	config DEBUG_DA8XX_UART1
> 
> I would prefer calling this DEBUG_DAVINCI_DA8XX_UART0 for the same
> reason of naming consistency with the corresponding ARCH_ config.
..._UART1, but otherwise ok.

> > +		bool "Kernel low-level debugging on DA8xx using uart1"
> > +		depends on ARCH_DAVINCI_DA8XX
> > +
> > +	config DEBUG_DA8XX_UART2
> > +		bool "Kernel low-level debugging on DA8xx using uart2"
> > +		depends on ARCH_DAVINCI_DA8XX
> > +
> > +	config DEBUG_TNETV107X_UART1
> > +		bool "Kernel low-level debugging on TNETV107x using uart1"
> > +		depends on ARCH_DAVINCI_TNETV107X
> 
> There should be some help text associated with each of these macros.
> 
> [...]
> 
> > diff --git a/arch/arm/mach-davinci/include/mach/debug-macro.S b/arch/arm/mach-davinci/include/mach/debug-macro.S
> 
> > +#ifndef UART_VIRTBASE
> > +#define UART_VIRTBASE IO_ADDRESS(UART_BASE)
> > +#endif
> 
> Prefer using tabs for indentation here..
*shrug*

> > -100:
> > +		.macro addruart, rp, rv, tmp
> > +		ldr     \rp, =UART_BASE
> > +		ldr     \rv, =UART_VIRTBASE
> 
> .. and here (after ldr)
ack

> 
> [...]
> 
> > diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h
> 
> > -#define _DEBUG_LL_ENTRY(machine, phys, virt)			\
> > +#define _DEBUG_LL_ENTRY(machine, phys)				\
> >  	if (machine_is_##machine()) {				\
> > -		set_uart_info(phys, virt);			\
> > +		set_uart_info(phys);				\
> >  		break;						\
> >  	}
> 
> So, this throws a checkpatch error:
> 
> ERROR: Macros with complex values should be enclosed in parenthesis
Yeah, but the problem is not new and so it's IMHO right to keep it as
is. YMMV.

> I made changes for these issues and in the process also made sure the
> patch applies cleanly to latest kernel. Here is the updated patch I
> intend to queue for v3.5
> 
> Thanks,
> Sekhar
looks good, thanks
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-04-29  9:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-15 20:18 [PATCH] ARM: davinci: implement DEBUG_LL port choice Uwe Kleine-König
2012-03-20  9:54 ` Uwe Kleine-König
2012-03-21 15:50   ` Nori, Sekhar
2012-03-22  9:29     ` [PATCH v2] " Uwe Kleine-König
2012-04-27 18:06       ` Nori, Sekhar
2012-04-29  9:09         ` Uwe Kleine-König

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).