From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Chou Date: Mon, 01 Oct 2012 20:33:28 +0800 Subject: [U-Boot] [PATCH 39/71] serial: arm: Implement CONFIG_SERIAL_MULTI into altera_jtag serial driver In-Reply-To: <1347837696-3192-40-git-send-email-marex@denx.de> References: <1347837696-3192-1-git-send-email-marex@denx.de> <1347837696-3192-40-git-send-email-marex@denx.de> Message-ID: <50698D98.3060605@wytron.com.tw> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 09/17/2012 07:21 AM, Marek Vasut wrote: > Implement support for CONFIG_SERIAL_MULTI into altera_jtag serial driver. > This driver was so far only usable directly, but this patch also adds > support for the multi method. This allows using more than one serial > driver alongside the altera_jtag driver. Also, add a weak implementation > of default_serial_console() returning this driver. > > Signed-off-by: Marek Vasut > Cc: Marek Vasut > Cc: Tom Rini > Cc: Thomas Chou > --- > common/serial.c | 2 ++ > drivers/serial/altera_jtag_uart.c | 71 +++++++++++++++++++++++++++++++++---- > 2 files changed, 67 insertions(+), 6 deletions(-) Dear Marek, Please include the following headers. --- a/drivers/serial/altera_jtag_uart.c +++ b/drivers/serial/altera_jtag_uart.c @@ -25,6 +25,8 @@ #include #include #include +#include +#include DECLARE_GLOBAL_DATA_PTR; And the .name string is too long. >16 static struct serial_device altera_jtag_serial_drv = { .name = "altera_jtag_serial", Otherwise, Acked-by: Thomas Chou Best regards, Thomas Chou > > diff --git a/common/serial.c b/common/serial.c > index 2d6ba05..24879ec 100644 > --- a/common/serial.c > +++ b/common/serial.c > @@ -69,6 +69,7 @@ serial_initfunc(evb64260_serial_initialize); > serial_initfunc(ml2_serial_initialize); > serial_initfunc(sconsole_serial_initialize); > serial_initfunc(p3mx_serial_initialize); > +serial_initfunc(altera_jtag_serial_initialize); > > void serial_register(struct serial_device *dev) > { > @@ -116,6 +117,7 @@ void serial_initialize(void) > ml2_serial_initialize(); > sconsole_serial_initialize(); > p3mx_serial_initialize(); > + altera_jtag_serial_initialize(); > > serial_assign(default_serial_console()->name); > } > diff --git a/drivers/serial/altera_jtag_uart.c b/drivers/serial/altera_jtag_uart.c > index 2980e4d..d3b6c1c 100644 > --- a/drivers/serial/altera_jtag_uart.c > +++ b/drivers/serial/altera_jtag_uart.c > @@ -33,10 +33,16 @@ DECLARE_GLOBAL_DATA_PTR; > *-----------------------------------------------------------------*/ > static nios_jtag_t *jtag = (nios_jtag_t *)CONFIG_SYS_NIOS_CONSOLE; > > -void serial_setbrg( void ){ return; } > -int serial_init( void ) { return(0);} > +static void altera_jtag_serial_setbrg(void) > +{ > +} > + > +static int altera_jtag_serial_init(void) > +{ > + return 0; > +} > > -void serial_putc (char c) > +static void altera_jtag_serial_putc(char c) > { > while (1) { > unsigned st = readl(&jtag->control); > @@ -51,18 +57,18 @@ void serial_putc (char c) > writel ((unsigned char)c, &jtag->data); > } > > -void serial_puts (const char *s) > +static void altera_jtag_serial_puts(const char *s) > { > while (*s != 0) > serial_putc (*s++); > } > > -int serial_tstc (void) > +static int altera_jtag_serial_tstc(void) > { > return ( readl (&jtag->control) & NIOS_JTAG_RRDY); > } > > -int serial_getc (void) > +static int altera_jtag_serial_getc(void) > { > int c; > unsigned val; > @@ -76,3 +82,56 @@ int serial_getc (void) > c = val & 0x0ff; > return (c); > } > + > +#ifdef CONFIG_SERIAL_MULTI > +static struct serial_device altera_jtag_serial_drv = { > + .name = "altera_jtag_serial", > + .start = altera_jtag_serial_init, > + .stop = NULL, > + .setbrg = altera_jtag_serial_setbrg, > + .putc = altera_jtag_serial_putc, > + .puts = altera_jtag_serial_puts, > + .getc = altera_jtag_serial_getc, > + .tstc = altera_jtag_serial_tstc, > +}; > + > +void altera_jtag_serial_initialize(void) > +{ > + serial_register(&altera_jtag_serial_drv); > +} > + > +__weak struct serial_device *default_serial_console(void) > +{ > + return &altera_jtag_serial_drv; > +} > +#else > +int serial_init(void) > +{ > + return altera_jtag_serial_init(); > +} > + > +void serial_setbrg(void) > +{ > + altera_jtag_serial_setbrg(); > +} > + > +void serial_putc(const char c) > +{ > + altera_jtag_serial_putc(c); > +} > + > +void serial_puts(const char *s) > +{ > + altera_jtag_serial_puts(s); > +} > + > +int serial_getc(void) > +{ > + return altera_jtag_serial_getc(); > +} > + > +int serial_tstc(void) > +{ > + return altera_jtag_serial_tstc(); > +} > +#endif >