All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 4/5] ZOOM2 Add serial support.
Date: Wed, 29 Apr 2009 23:08:48 +0200	[thread overview]
Message-ID: <20090429210848.GE522@game.jcrosoft.org> (raw)
In-Reply-To: <1240933314-12769-4-git-send-email-Tom.Rix@windriver.com>

On 10:41 Tue 28 Apr     , Tom Rix wrote:
> 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.Rix@windriver.com>
> ---
>  board/omap3/zoom2/Makefile       |    3 +-
>  board/omap3/zoom2/zoom2.c        |   30 +++++++++
>  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    |   28 ++++----
>  include/serial.h                 |    7 ++
>  8 files changed, 262 insertions(+), 17 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..a2a5b5a 100644
> --- a/board/omap3/zoom2/zoom2.c
> +++ b/board/omap3/zoom2/zoom2.c
> @@ -30,10 +30,24 @@
>   */
>  #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"
> +
> +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
> +};
please add a few comment about this value
>  
>  /*
>   * Routine: board_init
> @@ -42,13 +56,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;
>  }
>  

> +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..ccd42c9
> --- /dev/null
> +++ b/board/omap3/zoom2/zoom2_serial.h
> @@ -0,0 +1,75 @@
> +/*
> + * Copyright (c) 2009 Wind River Systems, Inc.
> + * Tom Rix <Tom.Rix@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 */
						  ^^^^^^
whitespace please fix
> +
> +#define QUAD_BASE_0      SERIAL_TL16CP754C_BASE
		      ^^^^^^
whitespace please fix
> +#define QUAD_BASE_1      (SERIAL_TL16CP754C_BASE + 0x100)
		      ^^^^^^
whitespace please fix
> +#define QUAD_BASE_2      (SERIAL_TL16CP754C_BASE + 0x200)
		      ^^^^^^
whitespace please fix
> +#define QUAD_BASE_3      (SERIAL_TL16CP754C_BASE + 0x300)
		      ^^^^^^
whitespace please fix
> +
> +#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,				\
> +};
I'm not a fan of this kind of define
a upgrade of the serial API and console device to allow
to provide a struct pointer will be great so we could merge this 2 API

(change not resquested for this patch)
> +
> +#endif /* ZOOM2_SERIAL_H */
> diff --git a/common/serial.c b/common/serial.c
> index 09385d0..3e9135b 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 DEFAULT_ZOOM2_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 1517145..8f09dd8 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_SYS_NS16550
> -#define CONFIG_SYS_NS16550_SERIAL
> -#define CONFIG_SYS_NS16550_REG_SIZE	(-4)
> -#define CONFIG_SYS_NS16550_CLK		V_NS16550_CLK
> -
> +#define CONFIG_SERIAL_MULTI      1
			      ^^^^^^
whitespace please fix
>  /*
> - * select serial console configuration
> + * 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 CONFIG_CONS_INDEX		3
> -#define CONFIG_SYS_NS16550_COM3		OMAP34XX_UART3
> -#define CONFIG_SERIAL3			3	/* UART3 */
> +#define DEFAULT_ZOOM2_SERIAL_DEVICE (&zoom2_serial_device0)
> +
> +#define V_NS16550_CLK            (1843200)  /* 1.8432 Mhz */
			^^^^^^^^^^^^
whitespace please fix
> +
> +#define CONFIG_SYS_NS16550
> +#define CONFIG_SYS_NS16550_REG_SIZE     (-2)
				      ^^^^^
whitespace please fix
> +#define CONFIG_SYS_NS16550_CLK          V_NS16550_CLK
				 ^^^^^^^^^^
whitespace please fix
> +#define CONFIG_BAUDRATE          115200
			  ^^^^^^^^^^
whitespace please fix
> +#define CONFIG_SYS_BAUDRATE_TABLE   {115200}
				    ^^^
whitespace please fix
>  
>  /* 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}
> +
Best Regards,
J.

  parent reply	other threads:[~2009-04-29 21:08 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-28 15:41 [U-Boot] [PATCH 1/5] ZOOM2 Add initial support for Zoom2 Tom Rix
2009-04-28 15:41 ` [U-Boot] [PATCH 2/5] OMAP3 Port kernel omap gpio interface Tom Rix
2009-04-28 15:41   ` [U-Boot] [PATCH 3/5] ZOOM2 Add support for debug board detection Tom Rix
2009-04-28 15:41     ` [U-Boot] [PATCH 4/5] ZOOM2 Add serial support Tom Rix
2009-04-28 15:41       ` [U-Boot] [PATCH 5/5] ZOOM2 Add led support Tom Rix
2009-04-29 20:56         ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-30  3:41           ` Tom
2009-04-29 21:08       ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2009-04-29 21:10     ` [U-Boot] [PATCH 3/5] ZOOM2 Add support for debug board detection Jean-Christophe PLAGNIOL-VILLARD
2009-04-29 21:11   ` [U-Boot] [PATCH 2/5] OMAP3 Port kernel omap gpio interface Jean-Christophe PLAGNIOL-VILLARD
2009-04-29 21:15 ` [U-Boot] [PATCH 1/5] ZOOM2 Add initial support for Zoom2 Jean-Christophe PLAGNIOL-VILLARD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090429210848.GE522@game.jcrosoft.org \
    --to=plagnioj@jcrosoft.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.