[PATCH 2/4] omap: Make uncompress code and DEBUG_LL code generic

Pandita, Vikram vikram.pandita at ti.com
Mon Jan 18 20:26:22 EST 2010



>-----Original Message-----
>From: linux-omap-owner at vger.kernel.org [mailto:linux-omap-owner at vger.kernel.org] On Behalf Of Tony
>Lindgren
>Sent: Friday, January 15, 2010 7:35 PM
>To: linux-arm-kernel at lists.infradead.org
>Cc: linux-omap at vger.kernel.org
>Subject: [PATCH 2/4] omap: Make uncompress code and DEBUG_LL code generic

UART_SCR 		-> this is the scratchpad register 
UART_OMAP_SCR	-> This is TI-only Supplementary control register

You probably confused the two (as rightly so since SCR is same name).
So there is no need to save/restore the UART_SCR register as you have done, see inlined -- 

>
>Define arch_decomp_setup() the same way as some other
>architectures do. Use arch_id to configure the debug uart
>based on the machine_is by storing it into the uart
>scratchpad register for DEBUG_LL code to use.
>
>Signed-off-by: Tony Lindgren <tony at atomide.com>
<snip>
>--- a/arch/arm/mach-omap2/serial.c
>+++ b/arch/arm/mach-omap2/serial.c
>@@ -161,11 +161,22 @@ static inline void serial_write_reg(struct plat_serial8250_port *p, int offset,
> static inline void __init omap_uart_reset(struct omap_uart_state *uart)
> {
> 	struct plat_serial8250_port *p = uart->p;
>+	u8 scratchpad = 0;
>+
>+	/*
>+	 * Save UART1 scratchpad register value for UART1 for DEBUG_LL.
>+	 * See also include/plat/uncompress.h and include/mach/debug-macro.S.
>+	 */
>+	if (p->mapbase == OMAP2_UART1_BASE)	/* OMAP2/3/4UART1_BASE */
>+		scratchpad = serial_read_reg(p, UART_SCR);

No need to save and restore the UART_SCR register. 
This never gets used in this function.

What gets used is UART_OMAP_SCR which is OMAP specific supplimantry control register 
and not scratchpad.

>
> 	serial_write_reg(p, UART_OMAP_MDR1, 0x07);
> 	serial_write_reg(p, UART_OMAP_SCR, 0x08);
> 	serial_write_reg(p, UART_OMAP_MDR1, 0x00);
> 	serial_write_reg(p, UART_OMAP_SYSC, (0x02 << 3) | (1 << 2) | (1 << 0));
>+
>+	if (p->mapbase == OMAP2_UART1_BASE)	/* OMAP2/3/4UART1_BASE */
>+		serial_write_reg(p, UART_SCR, scratchpad);

Remove this as well. No need. 


<snip>
>diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-
>omap/include/plat/uncompress.h
>index 13c305d..479bac8 100644
>--- a/arch/arm/plat-omap/include/plat/uncompress.h
>+++ b/arch/arm/plat-omap/include/plat/uncompress.h
>@@ -19,62 +19,36 @@
>
> #include <linux/types.h>
> #include <linux/serial_reg.h>
>+
>+#include <asm/mach-types.h>
>+
> #include <plat/serial.h>
>
>-unsigned int system_rev;
>+static volatile u8 *uart1_base;
>+static volatile u8 *uart_base;
>+static volatile int uart_shift;

Just like uart_base is stored in scratchpad,
Somehow the uart_shift also needs to be stored so that boards with different uart_shift requirements can be addressed. Where can we store this another variable? 

<snip>

> /*
>+ * Macros to configure UART1 and debug UART
>+ */
>+#define _DEBUG_LL_ENTRY(mach, uart1, dbg_uart, shift, dbg_id, reset_fn)	\
>+	if (machine_is_##mach()) {					\
>+		uart1_base = (volatile u8 *)(uart1);			\
>+		uart_base = (volatile u8 *)(dbg_uart);			\
>+		uart_shift = (shift);					\
>+		port = (dbg_id);					\
>+		reset_fn;						\
>+		break;							\
>+	}

Nice Idea... you are the man !!

<snip>


More information about the linux-arm-kernel mailing list