[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