Zoom2 serial is in general supplied by one of the 4 UARTS on the debug board.
The default serial is from the USB connector on left side of the debug board.
The USB connector will produce 2 of the 4 UARTS.  On your host pick the first
enumeration.

The serial port set up is the same with Zoom1.
Baud rate 115200, 8 bit data, no parity, 1 stop bit, no flow.

The kernel bootargs are
console=ttyS3,115200n8

Signed-off-by: Tom Rix <tom....@windriver.com>
---
 board/omap3/zoom2/Makefile       |    3 +-
 board/omap3/zoom2/zoom2.c        |   35 ++++++++++
 board/omap3/zoom2/zoom2_serial.c |  130 ++++++++++++++++++++++++++++++++++++++
 board/omap3/zoom2/zoom2_serial.h |   75 ++++++++++++++++++++++
 common/serial.c                  |    2 +
 drivers/serial/ns16550.c         |    4 +-
 include/configs/omap3_zoom2.h    |   26 ++++----
 include/serial.h                 |    7 ++
 8 files changed, 266 insertions(+), 16 deletions(-)
 create mode 100644 board/omap3/zoom2/zoom2_serial.c
 create mode 100644 board/omap3/zoom2/zoom2_serial.h

diff --git a/board/omap3/zoom2/Makefile b/board/omap3/zoom2/Makefile
index b8fa5a7..d27990c 100644
--- a/board/omap3/zoom2/Makefile
+++ b/board/omap3/zoom2/Makefile
@@ -26,7 +26,8 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(BOARD).a
 
 COBJS  := zoom2.o \
-       debug_board.o
+       debug_board.o \
+       zoom2_serial.o
 
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/omap3/zoom2/zoom2.c b/board/omap3/zoom2/zoom2.c
index 0700c56..dd0086c 100644
--- a/board/omap3/zoom2/zoom2.c
+++ b/board/omap3/zoom2/zoom2.c
@@ -30,10 +30,29 @@
  */
 #include <common.h>
 #include <asm/io.h>
+#include <asm/arch/mem.h>
 #include <asm/arch/mux.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/mach-types.h>
 #include "zoom2.h"
+#include "zoom2_serial.h"
+
+/*
+ * This the the zoom2, board specific, gpmc configuration for the
+ * quad uart on the debug board.   The more general gpmc configurations
+ * are setup at the cpu level in cpu/arm_cortexa8/omap3/mem.c
+ */
+extern void enable_gpmc_config(u32 *gpmc_config, gpmc_csx_t *gpmc_cs_base,
+                              u32 base, u32 size);
+
+static u32 gpmc_serial_TL16CP754C[GPMC_MAX_REG] = {
+       0x00011000,
+       0x001F1F01,
+       0x00080803,
+       0x1D091D09,
+       0x041D1F1F,
+       0x1D0904C4, 0
+};
 
 /*
  * Routine: board_init
@@ -42,13 +61,29 @@
 int board_init (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
+       gpmc_csx_t *serial_cs_base;
+       u32 *gpmc_config;
 
        gpmc_init ();           /* in SRAM or SDRAM, finish GPMC */
+
+       /* Configure console support on zoom2 */
+       gpmc_config = gpmc_serial_TL16CP754C;
+       serial_cs_base = (gpmc_csx_t *) (GPMC_CONFIG_CS0_BASE +
+                                        (3 * GPMC_CONFIG_WIDTH));
+       enable_gpmc_config(gpmc_config,
+                          serial_cs_base,
+                          SERIAL_TL16CP754C_BASE,
+                          GPMC_SIZE_16M);
+
        /* board id for Linux */
        gd->bd->bi_arch_number = MACH_TYPE_OMAP_ZOOM2;
        /* boot param addr */
        gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
 
+#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
+       status_led_set (STATUS_LED_BOOT, STATUS_LED_ON);
+#endif
+
        return 0;
 }
 
diff --git a/board/omap3/zoom2/zoom2_serial.c b/board/omap3/zoom2/zoom2_serial.c
new file mode 100644
index 0000000..a3d777d
--- /dev/null
+++ b/board/omap3/zoom2/zoom2_serial.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2009 Wind River Systems, Inc.
+ * Tom Rix <tom....@windriver.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * This file was adapted from cpu/mpc5xxx/serial.c
+ *
+ */
+
+#include <common.h>
+#include <serial.h>
+#include <ns16550.h>
+#include <asm/arch/cpu.h>
+#include "zoom2_serial.h"
+
+int quad_init_dev (unsigned long base)
+{
+       /*
+        * The Quad UART is on the debug board.
+        * Check if the debug board is attached before using the UART
+        */
+       if (zoom2_debug_board_connected ()) {
+               NS16550_t com_port = (NS16550_t) base;
+               int baud_divisor = CONFIG_SYS_NS16550_CLK / 16 /
+                       CONFIG_BAUDRATE;
+
+               /*
+                * Zoom2 has a board specific initialization of its UART.
+                * This generic initialization has been copied from
+                * drivers/serial/ns16550.c. The macros have been expanded.
+                *
+                * Do the following instead of
+                *
+                * NS16550_init (com_port, clock_divisor);
+                */
+               com_port->ier = 0x00;
+
+               /*
+                * On Zoom2 board Set pre-scalar to 1
+                * CLKSEL is GND => MCR[7] is 1 => preslr is 4
+                * So change the prescl to 1
+                */
+               com_port->lcr = 0xBF;
+               com_port->fcr |= 0x10;
+               com_port->mcr &= 0x7F;
+
+               /* This is generic ns16550.c setup */
+               com_port->lcr = UART_LCR_BKSE | UART_LCR_8N1;
+               com_port->dll = 0;
+               com_port->dlm = 0;
+               com_port->lcr = UART_LCR_8N1;
+               com_port->mcr = UART_MCR_DTR | UART_MCR_RTS;
+               com_port->fcr = UART_FCR_FIFO_EN | UART_FCR_RXSR |
+                       UART_FCR_TXSR;
+               com_port->lcr = UART_LCR_BKSE | UART_LCR_8N1;
+               com_port->dll = baud_divisor & 0xff;
+               com_port->dlm = (baud_divisor >> 8) & 0xff;
+               com_port->lcr = UART_LCR_8N1;
+       }
+       /*
+        * We have to lie here, otherwise the board init code will hang
+        * on the check
+        */
+       return 0;
+}
+
+void quad_putc_dev (unsigned long base, const char c)
+{
+       if (zoom2_debug_board_connected ()) {
+
+               if (c == '\n')
+                       quad_putc_dev (base, '\r');
+
+               NS16550_putc ((NS16550_t) base, c);
+       }
+}
+
+void quad_puts_dev (unsigned long base, const char *s)
+{
+       if (zoom2_debug_board_connected ()) {
+               while ((s != NULL) && (*s != '\0'))
+                       quad_putc_dev (base, *s++);
+       }
+}
+
+int quad_getc_dev (unsigned long base)
+{
+       if (zoom2_debug_board_connected ())
+               return NS16550_getc ((NS16550_t) base);
+       else
+               return 0;
+}
+
+int quad_tstc_dev (unsigned long base)
+{
+       if (zoom2_debug_board_connected ())
+               return NS16550_tstc ((NS16550_t) base);
+       else
+               return 0;
+}
+
+void quad_setbrg_dev (unsigned long base)
+{
+       if (zoom2_debug_board_connected ()) {
+
+               int clock_divisor = CONFIG_SYS_NS16550_CLK / 16 /
+                       CONFIG_BAUDRATE;
+
+               NS16550_reinit ((NS16550_t) base, clock_divisor);
+       }
+}
+
+QUAD_INIT (0)
+QUAD_INIT (1)
+QUAD_INIT (2)
+QUAD_INIT (3)
diff --git a/board/omap3/zoom2/zoom2_serial.h b/board/omap3/zoom2/zoom2_serial.h
new file mode 100644
index 0000000..c98158f
--- /dev/null
+++ b/board/omap3/zoom2/zoom2_serial.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2009 Wind River Systems, Inc.
+ * Tom Rix <tom....@windriver.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#ifndef ZOOM2_SERIAL_H
+#define ZOOM2_SERIAL_H
+
+extern int zoom2_debug_board_connected (void);
+
+#define SERIAL_TL16CP754C_BASE 0x10000000      /* Zoom2 Serial chip address */
+
+#define QUAD_BASE_0    SERIAL_TL16CP754C_BASE
+#define QUAD_BASE_1    (SERIAL_TL16CP754C_BASE + 0x100)
+#define QUAD_BASE_2    (SERIAL_TL16CP754C_BASE + 0x200)
+#define QUAD_BASE_3    (SERIAL_TL16CP754C_BASE + 0x300)
+
+#define S(a) #a
+#define N(a) S(quad##a)
+#define U(a) S(UART##a)
+
+#define QUAD_INIT(n)                           \
+int quad_init_##n(void)                                \
+{                                              \
+       return quad_init_dev(QUAD_BASE_##n);    \
+}                                              \
+void quad_setbrg_##n(void)                     \
+{                                              \
+       quad_setbrg_dev(QUAD_BASE_##n);         \
+}                                              \
+void quad_putc_##n(const char c)               \
+{                                              \
+       quad_putc_dev(QUAD_BASE_##n, c);        \
+}                                              \
+void quad_puts_##n(const char *s)              \
+{                                              \
+       quad_puts_dev(QUAD_BASE_##n, s);        \
+}                                              \
+int quad_getc_##n(void)                                \
+{                                              \
+       return quad_getc_dev(QUAD_BASE_##n);    \
+}                                              \
+int quad_tstc_##n(void)                                \
+{                                              \
+       return quad_tstc_dev(QUAD_BASE_##n);    \
+}                                              \
+struct serial_device zoom2_serial_device##n =  \
+{                                              \
+       N(n),                                   \
+       U(n),                                   \
+       quad_init_##n,                          \
+       quad_setbrg_##n,                        \
+       quad_getc_##n,                          \
+       quad_tstc_##n,                          \
+       quad_putc_##n,                          \
+       quad_puts_##n,                          \
+};
+
+#endif /* ZOOM2_SERIAL_H */
diff --git a/common/serial.c b/common/serial.c
index 09385d0..dd80e7c 100644
--- a/common/serial.c
+++ b/common/serial.c
@@ -68,6 +68,8 @@ struct serial_device *__default_serial_console (void)
 #else
 #error "CONFIG_SERIAL? missing."
 #endif
+#elif defined(CONFIG_OMAP3_ZOOM2)
+               return ZOOM2_DEFAULT_SERIAL_DEVICE;
 #else
 #error No default console
 #endif
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index 657c9da..2fcc8c3 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -17,7 +17,7 @@
 void NS16550_init (NS16550_t com_port, int baud_divisor)
 {
        com_port->ier = 0x00;
-#ifdef CONFIG_OMAP
+#if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
        com_port->mdr1 = 0x7;   /* mode select reset TL16C750*/
 #endif
        com_port->lcr = UART_LCR_BKSE | UART_LCRVAL;
@@ -30,7 +30,7 @@ void NS16550_init (NS16550_t com_port, int baud_divisor)
        com_port->dll = baud_divisor & 0xff;
        com_port->dlm = (baud_divisor >> 8) & 0xff;
        com_port->lcr = UART_LCRVAL;
-#if defined(CONFIG_OMAP)
+#if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
 #if defined(CONFIG_APTIX)
        com_port->mdr1 = 3;     /* /13 mode so Aptix 6MHz can hit 115200 */
 #else
diff --git a/include/configs/omap3_zoom2.h b/include/configs/omap3_zoom2.h
index 8aea4cb..d9a9c1a 100644
--- a/include/configs/omap3_zoom2.h
+++ b/include/configs/omap3_zoom2.h
@@ -69,26 +69,26 @@
 
 /*
  * NS16550 Configuration
+ * Zoom2 uses the TL16CP754C on the debug board
  */
-#define V_NS16550_CLK                  48000000        /* 48MHz (APLL96/2) */
+#define CONFIG_SERIAL_MULTI            1
+/*
+ * 0 - 1 : first  USB with respect to the left edge of the debug board
+ * 2 - 3 : second USB with respect to the left edge of the debug board
+ */
+#define ZOOM2_DEFAULT_SERIAL_DEVICE    (&zoom2_serial_device0)
+
+#define V_NS16550_CLK                  (1843200)       /* 1.8432 Mhz */
 
 #define CONFIG_SYS_NS16550
-#define CONFIG_SYS_NS16550_SERIAL
-#define CONFIG_SYS_NS16550_REG_SIZE    (-4)
+#define CONFIG_SYS_NS16550_REG_SIZE    (-2)
 #define CONFIG_SYS_NS16550_CLK         V_NS16550_CLK
-
-/*
- * select serial console configuration
- */
-#define CONFIG_CONS_INDEX              3
-#define CONFIG_SYS_NS16550_COM3                OMAP34XX_UART3
-#define CONFIG_SERIAL3                 3       /* UART3 */
+#define CONFIG_BAUDRATE                        115200
+#define CONFIG_SYS_BAUDRATE_TABLE      {115200}
 
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_BAUDRATE                        115200
-#define CONFIG_SYS_BAUDRATE_TABLE      {4800, 9600, 19200, 38400, 57600,\
-                                       115200}
+
 #define CONFIG_MMC                     1
 #define CONFIG_OMAP3_MMC               1
 #define CONFIG_DOS_PARTITION           1
diff --git a/include/serial.h b/include/serial.h
index e3d8b36..aca5221 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -42,6 +42,13 @@ extern struct serial_device s3c24xx_serial1_device;
 extern struct serial_device s3c24xx_serial2_device;
 #endif
 
+#if defined(CONFIG_OMAP3_ZOOM2)
+extern struct serial_device zoom2_serial_device0;
+extern struct serial_device zoom2_serial_device1;
+extern struct serial_device zoom2_serial_device2;
+extern struct serial_device zoom2_serial_device3;
+#endif
+
 extern struct serial_device serial_ffuart_device;
 extern struct serial_device serial_btuart_device;
 extern struct serial_device serial_stuart_device;
-- 
1.6.0.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to