* [U-Boot] microblaze - serial multi
@ 2011-10-10 7:17 Michal Simek
2011-10-10 7:17 ` [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI Michal Simek
0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2011-10-10 7:17 UTC (permalink / raw)
To: u-boot
Hi,
my uartlite serial multi patch is upstream that's why I can enable
serial multi for microblaze.
There is one issue with serial.h where are spaces at the start
of a line. I just follow coding style there.
If you require to fix it, I will do it.
Thanks,
Michal
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 7:17 [U-Boot] microblaze - serial multi Michal Simek
@ 2011-10-10 7:17 ` Michal Simek
2011-10-10 10:11 ` Graeme Russ
0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2011-10-10 7:17 UTC (permalink / raw)
To: u-boot
Enable support for SERIAL_MULTI.
Microblaze can use uart16550 and uartlite drivers.
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
Note:
Follow serial.h conding style.
---
arch/microblaze/lib/board.c | 4 ++++
include/configs/microblaze-generic.h | 2 ++
include/serial.h | 2 +-
3 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index ca5882d..64089c8 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -32,6 +32,7 @@
#include <stdio_dev.h>
#include <net.h>
#include <asm/processor.h>
+#include <serial.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -110,6 +111,9 @@ void board_init (void)
monitor_flash_len = __end - __text_start;
+#ifdef CONFIG_SERIAL_MULTI
+ serial_initialize();
+#endif
/*
* The Malloc area is immediately below the monitor copy in DRAM
* aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index 6b3fd76..89657189 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -31,6 +31,8 @@
#define CONFIG_MICROBLAZE 1
#define MICROBLAZE_V5 1
+#define CONFIG_SERIAL_MULTI 1
+
/* uart */
#ifdef XILINX_UARTLITE_BASEADDR
# define CONFIG_XILINX_UARTLITE
diff --git a/include/serial.h b/include/serial.h
index 5926244..f047d2f 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -31,7 +31,7 @@ extern struct serial_device * default_serial_console (void);
defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
- defined(CONFIG_TEGRA2)
+ defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
extern struct serial_device serial0_device;
extern struct serial_device serial1_device;
#if defined(CONFIG_SYS_NS16550_SERIAL)
--
1.7.5.4
^ permalink raw reply related [flat|nested] 10+ messages in thread* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 7:17 ` [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI Michal Simek
@ 2011-10-10 10:11 ` Graeme Russ
2011-10-10 10:52 ` Michal Simek
0 siblings, 1 reply; 10+ messages in thread
From: Graeme Russ @ 2011-10-10 10:11 UTC (permalink / raw)
To: u-boot
On 10/10/11, Michal Simek <monstr@monstr.eu> wrote:
> Enable support for SERIAL_MULTI.
>
> Microblaze can use uart16550 and uartlite drivers.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
>
> ---
> Note:
> Follow serial.h conding style.
> ---
> arch/microblaze/lib/board.c | 4 ++++
> include/configs/microblaze-generic.h | 2 ++
> include/serial.h | 2 +-
> 3 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index ca5882d..64089c8 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -32,6 +32,7 @@
> #include <stdio_dev.h>
> #include <net.h>
> #include <asm/processor.h>
> +#include <serial.h>
>
> DECLARE_GLOBAL_DATA_PTR;
>
> @@ -110,6 +111,9 @@ void board_init (void)
>
> monitor_flash_len = __end - __text_start;
>
> +#ifdef CONFIG_SERIAL_MULTI
> + serial_initialize();
> +#endif
> /*
> * The Malloc area is immediately below the monitor copy in DRAM
> * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
> diff --git a/include/configs/microblaze-generic.h
> b/include/configs/microblaze-generic.h
> index 6b3fd76..89657189 100644
> --- a/include/configs/microblaze-generic.h
> +++ b/include/configs/microblaze-generic.h
> @@ -31,6 +31,8 @@
> #define CONFIG_MICROBLAZE 1
> #define MICROBLAZE_V5 1
>
> +#define CONFIG_SERIAL_MULTI 1
> +
> /* uart */
> #ifdef XILINX_UARTLITE_BASEADDR
> # define CONFIG_XILINX_UARTLITE
> diff --git a/include/serial.h b/include/serial.h
> index 5926244..f047d2f 100644
> --- a/include/serial.h
> +++ b/include/serial.h
> @@ -31,7 +31,7 @@ extern struct serial_device * default_serial_console
> (void);
> defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
> defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
> defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
> - defined(CONFIG_TEGRA2)
> + defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
Am I the only one that thinks this is all really ugly?
> extern struct serial_device serial0_device;
> extern struct serial_device serial1_device;
> #if defined(CONFIG_SYS_NS16550_SERIAL)
> --
> 1.7.5.4
Regards,
Graeme
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 10:11 ` Graeme Russ
@ 2011-10-10 10:52 ` Michal Simek
2011-10-10 12:57 ` Wolfgang Denk
0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2011-10-10 10:52 UTC (permalink / raw)
To: u-boot
Graeme Russ wrote:
> On 10/10/11, Michal Simek <monstr@monstr.eu> wrote:
>> Enable support for SERIAL_MULTI.
>>
>> Microblaze can use uart16550 and uartlite drivers.
>>
>> Signed-off-by: Michal Simek <monstr@monstr.eu>
>>
>> ---
>> Note:
>> Follow serial.h conding style.
>> ---
>> arch/microblaze/lib/board.c | 4 ++++
>> include/configs/microblaze-generic.h | 2 ++
>> include/serial.h | 2 +-
>> 3 files changed, 7 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
>> index ca5882d..64089c8 100644
>> --- a/arch/microblaze/lib/board.c
>> +++ b/arch/microblaze/lib/board.c
>> @@ -32,6 +32,7 @@
>> #include <stdio_dev.h>
>> #include <net.h>
>> #include <asm/processor.h>
>> +#include <serial.h>
>>
>> DECLARE_GLOBAL_DATA_PTR;
>>
>> @@ -110,6 +111,9 @@ void board_init (void)
>>
>> monitor_flash_len = __end - __text_start;
>>
>> +#ifdef CONFIG_SERIAL_MULTI
>> + serial_initialize();
>> +#endif
>> /*
>> * The Malloc area is immediately below the monitor copy in DRAM
>> * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
>> diff --git a/include/configs/microblaze-generic.h
>> b/include/configs/microblaze-generic.h
>> index 6b3fd76..89657189 100644
>> --- a/include/configs/microblaze-generic.h
>> +++ b/include/configs/microblaze-generic.h
>> @@ -31,6 +31,8 @@
>> #define CONFIG_MICROBLAZE 1
>> #define MICROBLAZE_V5 1
>>
>> +#define CONFIG_SERIAL_MULTI 1
>> +
>> /* uart */
>> #ifdef XILINX_UARTLITE_BASEADDR
>> # define CONFIG_XILINX_UARTLITE
>> diff --git a/include/serial.h b/include/serial.h
>> index 5926244..f047d2f 100644
>> --- a/include/serial.h
>> +++ b/include/serial.h
>> @@ -31,7 +31,7 @@ extern struct serial_device * default_serial_console
>> (void);
>> defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
>> defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
>> defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
>> - defined(CONFIG_TEGRA2)
>> + defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
>
> Am I the only one that thinks this is all really ugly?
I hope you mean serial.h not mb code.
I agree with you but not sure if we can remove all ifdefs there.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 10:52 ` Michal Simek
@ 2011-10-10 12:57 ` Wolfgang Denk
2011-10-10 15:18 ` Mike Frysinger
0 siblings, 1 reply; 10+ messages in thread
From: Wolfgang Denk @ 2011-10-10 12:57 UTC (permalink / raw)
To: u-boot
Dear Michal Simek,
In message <4E92CE64.5000609@monstr.eu> you wrote:
>
> >> defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
> >> defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
> >> defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
> >> - defined(CONFIG_TEGRA2)
> >> + defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
> >
> > Am I the only one that thinks this is all really ugly?
>
> I hope you mean serial.h not mb code.
>
> I agree with you but not sure if we can remove all ifdefs there.
The long list of device specific ifdef's should be converted into a
single ifdef testing for a specific feature instead.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"He only drinks when he gets depressed." "Why does he get depressed?"
"Sometimes it's because he hasn't had a drink."
- Terry Pratchett, _Men at Arms_
^ permalink raw reply [flat|nested] 10+ messages in thread* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 12:57 ` Wolfgang Denk
@ 2011-10-10 15:18 ` Mike Frysinger
2011-10-10 17:35 ` Wolfgang Denk
0 siblings, 1 reply; 10+ messages in thread
From: Mike Frysinger @ 2011-10-10 15:18 UTC (permalink / raw)
To: u-boot
On Monday 10 October 2011 08:57:28 Wolfgang Denk wrote:
> Michal Simek wrote:
> > >> defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
> > >> defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
> > >> defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
> > >> - defined(CONFIG_TEGRA2)
> > >> + defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
> > >
> > > Am I the only one that thinks this is all really ugly?
> >
> > I hope you mean serial.h not mb code.
> >
> > I agree with you but not sure if we can remove all ifdefs there.
>
> The long list of device specific ifdef's should be converted into a
> single ifdef testing for a specific feature instead.
it's driver specific code in this file, so it doesn't make much sense to have
the board config define something just to get these prototypes
i do agree that this multi serial code is all very ugly ...
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20111010/45ae8963/attachment.pgp
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 15:18 ` Mike Frysinger
@ 2011-10-10 17:35 ` Wolfgang Denk
2011-10-10 17:52 ` Mike Frysinger
0 siblings, 1 reply; 10+ messages in thread
From: Wolfgang Denk @ 2011-10-10 17:35 UTC (permalink / raw)
To: u-boot
Dear Mike Frysinger,
In message <201110101118.05350.vapier@gentoo.org> you wrote:
>
> > > >> defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
> > > >> defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
> > > >> defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
> > > >> - defined(CONFIG_TEGRA2)
> > > >> + defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
> > > >
> > > > Am I the only one that thinks this is all really ugly?
> > >
> > > I hope you mean serial.h not mb code.
> > >
> > > I agree with you but not sure if we can remove all ifdefs there.
> >
> > The long list of device specific ifdef's should be converted into a
> > single ifdef testing for a specific feature instead.
>
> it's driver specific code in this file, so it doesn't make much sense to have
> the board config define something just to get these prototypes
It could be a CPU specific header file, then.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"Deliver yesterday, code today, think tomorrow."
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 17:35 ` Wolfgang Denk
@ 2011-10-10 17:52 ` Mike Frysinger
2011-10-10 18:26 ` Wolfgang Denk
0 siblings, 1 reply; 10+ messages in thread
From: Mike Frysinger @ 2011-10-10 17:52 UTC (permalink / raw)
To: u-boot
On Monday 10 October 2011 13:35:13 Wolfgang Denk wrote:
> Mike Frysinger wrote:
> > > > >> defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
> > > > >> defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
> > > > >> defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
> > > > >>
> > > > >> - defined(CONFIG_TEGRA2)
> > > > >> + defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
> > > > >
> > > > > Am I the only one that thinks this is all really ugly?
> > > >
> > > > I hope you mean serial.h not mb code.
> > > >
> > > > I agree with you but not sure if we can remove all ifdefs there.
> > >
> > > The long list of device specific ifdef's should be converted into a
> > > single ifdef testing for a specific feature instead.
> >
> > it's driver specific code in this file, so it doesn't make much sense to
> > have the board config define something just to get these prototypes
>
> It could be a CPU specific header file, then.
some of these drivers are shared across SoCs/arches :)
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20111010/368a1b28/attachment.pgp
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-10-10 17:52 ` Mike Frysinger
@ 2011-10-10 18:26 ` Wolfgang Denk
0 siblings, 0 replies; 10+ messages in thread
From: Wolfgang Denk @ 2011-10-10 18:26 UTC (permalink / raw)
To: u-boot
Dear Mike Frysinger,
In message <201110101352.15660.vapier@gentoo.org> you wrote:
>
> > > it's driver specific code in this file, so it doesn't make much sense to
> > > have the board config define something just to get these prototypes
> >
> > It could be a CPU specific header file, then.
>
> some of these drivers are shared across SoCs/arches :)
So put the #define in the CPU specific header files for all
SoCs/arches that use this driver :-)
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
On a clear disk you can seek forever.
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH v2] serial: uartlite: Support for SERIAL_MULTI
@ 2011-09-06 14:22 Michal Simek
2011-09-06 14:22 ` [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI Michal Simek
0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2011-09-06 14:22 UTC (permalink / raw)
To: u-boot
Add support for SERIAL MULTI for uartlite.
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
v2: Use in/out_be32 functions
---
common/serial.c | 14 ++++
drivers/serial/serial_xuartlite.c | 137 ++++++++++++++++++++++++++++++++-----
include/serial.h | 7 ++
3 files changed, 140 insertions(+), 18 deletions(-)
diff --git a/common/serial.c b/common/serial.c
index 995d268..df02fa5 100644
--- a/common/serial.c
+++ b/common/serial.c
@@ -108,6 +108,20 @@ void serial_initialize (void)
#if defined(CONFIG_SYS_BFIN_UART)
serial_register_bfin_uart();
#endif
+#if defined(CONFIG_XILINX_UARTLITE)
+# ifdef XILINX_UARTLITE_BASEADDR
+ serial_register(&uartlite_serial0_device);
+# endif /* XILINX_UARTLITE_BASEADDR */
+# ifdef XILINX_UARTLITE_BASEADDR1
+ serial_register(&uartlite_serial1_device);
+# endif /* XILINX_UARTLITE_BASEADDR1 */
+# ifdef XILINX_UARTLITE_BASEADDR2
+ serial_register(&uartlite_serial2_device);
+# endif /* XILINX_UARTLITE_BASEADDR2 */
+# ifdef XILINX_UARTLITE_BASEADDR3
+ serial_register(&uartlite_serial3_device);
+# endif /* XILINX_UARTLITE_BASEADDR3 */
+#endif /* CONFIG_XILINX_UARTLITE */
serial_assign (default_serial_console ()->name);
}
diff --git a/drivers/serial/serial_xuartlite.c b/drivers/serial/serial_xuartlite.c
index 00d0eaa..948d952 100644
--- a/drivers/serial/serial_xuartlite.c
+++ b/drivers/serial/serial_xuartlite.c
@@ -25,20 +25,75 @@
*/
#include <config.h>
+#include <common.h>
#include <asm/io.h>
-
-#define RX_FIFO_OFFSET 0 /* receive FIFO, read only */
-#define TX_FIFO_OFFSET 4 /* transmit FIFO, write only */
-#define STATUS_REG_OFFSET 8 /* status register, read only */
+#include <linux/compiler.h>
+#include <serial.h>
#define SR_TX_FIFO_FULL 0x08 /* transmit FIFO full */
#define SR_RX_FIFO_VALID_DATA 0x01 /* data in receive FIFO */
#define SR_RX_FIFO_FULL 0x02 /* receive FIFO full */
-#define UARTLITE_STATUS (CONFIG_SERIAL_BASE + STATUS_REG_OFFSET)
-#define UARTLITE_TX_FIFO (CONFIG_SERIAL_BASE + TX_FIFO_OFFSET)
-#define UARTLITE_RX_FIFO (CONFIG_SERIAL_BASE + RX_FIFO_OFFSET)
+struct uartlite {
+ u32 rx_fifo;
+ u32 tx_fifo;
+ u32 status;
+};
+
+static struct uartlite *userial_ports[4] = {
+#ifdef XILINX_UARTLITE_BASEADDR
+ (struct uartlite *)XILINX_UARTLITE_BASEADDR,
+#else
+ NULL,
+#endif
+#ifdef XILINX_UARTLITE_BASEADDR1
+ (struct uartlite *)XILINX_UARTLITE_BASEADDR1,
+#else
+ NULL,
+#endif
+#ifdef XILINX_UARTLITE_BASEADDR2
+ (struct uartlite *)XILINX_UARTLITE_BASEADDR2,
+#else
+ NULL,
+#endif
+#ifdef XILINX_UARTLITE_BASEADDR3
+ (struct uartlite *)XILINX_UARTLITE_BASEADDR3
+#else
+ NULL
+#endif
+};
+
+void uartlite_serial_putc(const char c, const int port)
+{
+ struct uartlite *regs = userial_ports[port];
+ if (c == '\n')
+ uartlite_serial_putc('\r', port);
+ while (in_be32(®s->status) & SR_TX_FIFO_FULL)
+ ;
+ out_be32(®s->tx_fifo, c & 0xff);
+}
+
+void uartlite_serial_puts(const char * s, const int port)
+{
+ while (*s)
+ uartlite_serial_putc(*s++, port);
+}
+
+int uartlite_serial_getc(const int port)
+{
+ struct uartlite *regs = userial_ports[port];
+ while (!(in_be32(®s->status) & SR_RX_FIFO_VALID_DATA))
+ ;
+ return in_be32(®s->rx_fifo) & 0xff;
+}
+
+int uartlite_serial_tstc(const int port)
+{
+ struct uartlite *regs = userial_ports[port];
+ return in_be32(®s->status) & SR_RX_FIFO_VALID_DATA;
+}
+#if !defined(CONFIG_SERIAL_MULTI)
int serial_init(void)
{
/* FIXME: Nothing for now. We should initialize fifo, etc */
@@ -52,26 +107,72 @@ void serial_setbrg(void)
void serial_putc(const char c)
{
- if (c == '\n')
- serial_putc('\r');
- while (in_be32((u32 *) UARTLITE_STATUS) & SR_TX_FIFO_FULL);
- out_be32((u32 *) UARTLITE_TX_FIFO, (unsigned char) (c & 0xff));
+ uartlite_serial_putc(c, 0);
}
-void serial_puts(const char * s)
+void serial_puts(const char *s)
{
- while (*s) {
- serial_putc(*s++);
- }
+ uartlite_serial_puts(s, 0);
}
int serial_getc(void)
{
- while (!(in_be32((u32 *) UARTLITE_STATUS) & SR_RX_FIFO_VALID_DATA));
- return in_be32((u32 *) UARTLITE_RX_FIFO) & 0xff;
+ return uartlite_serial_getc(0);
}
int serial_tstc(void)
{
- return (in_be32((u32 *) UARTLITE_STATUS) & SR_RX_FIFO_VALID_DATA);
+ return uartlite_serial_tstc(0);
+}
+#endif
+
+#if defined(CONFIG_SERIAL_MULTI)
+/* Multi serial device functions */
+#define DECLARE_ESERIAL_FUNCTIONS(port) \
+ int userial##port##_init (void) {return(0);}\
+ void userial##port##_setbrg (void) {}\
+ int userial##port##_getc (void) {return uartlite_serial_getc(port);}\
+ int userial##port##_tstc (void) {return uartlite_serial_tstc(port);}\
+ void userial##port##_putc (const char c) {uartlite_serial_putc(c, port);}\
+ void userial##port##_puts (const char *s) {uartlite_serial_puts(s, port);}
+
+/* Serial device descriptor */
+#define INIT_ESERIAL_STRUCTURE(port,name) {\
+ name,\
+ userial##port##_init,\
+ NULL,\
+ userial##port##_setbrg,\
+ userial##port##_getc,\
+ userial##port##_tstc,\
+ userial##port##_putc,\
+ userial##port##_puts, }
+
+DECLARE_ESERIAL_FUNCTIONS(0);
+struct serial_device uartlite_serial0_device =
+ INIT_ESERIAL_STRUCTURE(0,"ttyUL0");
+DECLARE_ESERIAL_FUNCTIONS(1);
+struct serial_device uartlite_serial1_device =
+ INIT_ESERIAL_STRUCTURE(1,"ttyUL1");
+DECLARE_ESERIAL_FUNCTIONS(2);
+struct serial_device uartlite_serial2_device =
+ INIT_ESERIAL_STRUCTURE(2,"ttyUL2");
+DECLARE_ESERIAL_FUNCTIONS(3);
+struct serial_device uartlite_serial3_device =
+ INIT_ESERIAL_STRUCTURE(3,"ttyUL3");
+
+__weak struct serial_device *default_serial_console(void)
+{
+# ifdef XILINX_UARTLITE_BASEADDR
+ return &uartlite_serial0_device;
+# endif /* XILINX_UARTLITE_BASEADDR */
+# ifdef XILINX_UARTLITE_BASEADDR1
+ return &uartlite_serial1_device;
+# endif /* XILINX_UARTLITE_BASEADDR1 */
+# ifdef XILINX_UARTLITE_BASEADDR2
+ return &uartlite_serial2_device;
+# endif /* XILINX_UARTLITE_BASEADDR2 */
+# ifdef XILINX_UARTLITE_BASEADDR3
+ return &uartlite_serial3_device;
+# endif /* XILINX_UARTLITE_BASEADDR3 */
}
+#endif /* CONFIG_SERIAL_MULTI */
diff --git a/include/serial.h b/include/serial.h
index ff1ce99..5926244 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -50,6 +50,13 @@ extern struct serial_device serial4_device;
extern struct serial_device serial6_device;
#endif
+#if defined(CONFIG_XILINX_UARTLITE)
+extern struct serial_device uartlite_serial0_device;
+extern struct serial_device uartlite_serial1_device;
+extern struct serial_device uartlite_serial2_device;
+extern struct serial_device uartlite_serial3_device;
+#endif
+
#if defined(CONFIG_S3C2410)
extern struct serial_device s3c24xx_serial0_device;
extern struct serial_device s3c24xx_serial1_device;
--
1.5.5.6
^ permalink raw reply related [flat|nested] 10+ messages in thread* [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI
2011-09-06 14:22 [U-Boot] [PATCH v2] serial: uartlite: Support for SERIAL_MULTI Michal Simek
@ 2011-09-06 14:22 ` Michal Simek
0 siblings, 0 replies; 10+ messages in thread
From: Michal Simek @ 2011-09-06 14:22 UTC (permalink / raw)
To: u-boot
Enable support for SERIAL_MULTI.
Microblaze can use uart16550 and uartlite drivers.
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
arch/microblaze/lib/board.c | 4 ++++
include/configs/microblaze-generic.h | 2 ++
include/serial.h | 2 +-
3 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index b9ac514..799ba7f 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -31,6 +31,7 @@
#include <watchdog.h>
#include <stdio_dev.h>
#include <net.h>
+#include <serial.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -111,6 +112,9 @@ void board_init (void)
monitor_flash_len = __end - __text_start;
+#ifdef CONFIG_SERIAL_MULTI
+ serial_initialize();
+#endif
/*
* The Malloc area is immediately below the monitor copy in DRAM
* aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index 1320e9a..bb2c5a9 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -31,6 +31,8 @@
#define CONFIG_MICROBLAZE 1
#define MICROBLAZE_V5 1
+#define CONFIG_SERIAL_MULTI 1
+
/* uart */
#ifdef XILINX_UARTLITE_BASEADDR
# define CONFIG_XILINX_UARTLITE
diff --git a/include/serial.h b/include/serial.h
index 5926244..f047d2f 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -31,7 +31,7 @@ extern struct serial_device * default_serial_console (void);
defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
- defined(CONFIG_TEGRA2)
+ defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
extern struct serial_device serial0_device;
extern struct serial_device serial1_device;
#if defined(CONFIG_SYS_NS16550_SERIAL)
--
1.5.5.6
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2011-10-10 18:26 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-10 7:17 [U-Boot] microblaze - serial multi Michal Simek
2011-10-10 7:17 ` [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI Michal Simek
2011-10-10 10:11 ` Graeme Russ
2011-10-10 10:52 ` Michal Simek
2011-10-10 12:57 ` Wolfgang Denk
2011-10-10 15:18 ` Mike Frysinger
2011-10-10 17:35 ` Wolfgang Denk
2011-10-10 17:52 ` Mike Frysinger
2011-10-10 18:26 ` Wolfgang Denk
-- strict thread matches above, loose matches on Subject: below --
2011-09-06 14:22 [U-Boot] [PATCH v2] serial: uartlite: Support for SERIAL_MULTI Michal Simek
2011-09-06 14:22 ` [U-Boot] [PATCH] microblaze: Enable SERIAL_MULTI Michal Simek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox