[U-Boot] [PATCH 3/7] S3C24XX: Add serial driver

Marek Vasut marex at denx.de
Thu Sep 13 11:17:51 CEST 2012


Dear José Miguel Gonçalves,

> Hi Marek,
> 
> On 09/12/2012 10:01 PM, Marek Vasut wrote:
> > Dear José Miguel Gonçalves,
> > 
> >> Serial driver for the S3C24XX SoCs.
> >> 
> >> Signed-off-by: José Miguel Gonçalves <jose.goncalves at inov.pt>
> >> ---
> >> 
> >>   drivers/serial/Makefile         |    1 +
> >>   drivers/serial/s3c24xx_serial.c |  146
> >> 
> >> +++++++++++++++++++++++++++++++++++++++ 2 files changed, 147
> >> insertions(+)
> >> 
> >>   create mode 100644 drivers/serial/s3c24xx_serial.c
> >> 
> >> diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
> >> index 65d0f23..2cbdaac 100644
> >> --- a/drivers/serial/Makefile
> >> +++ b/drivers/serial/Makefile
> >> @@ -52,6 +52,7 @@ COBJS-$(CONFIG_PL011_SERIAL) += serial_pl01x.o
> >> 
> >>   COBJS-$(CONFIG_PXA_SERIAL) += serial_pxa.o
> >>   COBJS-$(CONFIG_SA1100_SERIAL) += serial_sa1100.o
> >>   COBJS-$(CONFIG_S3C24X0_SERIAL) += serial_s3c24x0.o
> >> 
> >> +COBJS-$(CONFIG_S3C24XX_SERIAL) += s3c24xx_serial.o
> > 
> > What's the difference between those two drivers ?!
> 
> No substantial differences exists. The UART controller block is the same
> in all S3C24XX chips. One difference is the number of UARTs. The more
> recent chips (S3C2416 & S3C2450) have 4 instead of the 3 found on the
> old ones. Besides that, the driver that I submitted uses a more precise
> method for baudrate generation.

So we will have two drivers for the same hardware? No way ... Use the original 
one and apply incremental patches onto it to improve it.

> >> +
> >> +#ifdef CONFIG_SERIAL0
> >> +#define UART_NR	S3C24XX_UART0
> >> +
> >> +#elif defined(CONFIG_SERIAL1)
> >> +#define UART_NR	S3C24XX_UART1
> >> +
> >> +#elif defined(CONFIG_SERIAL2)
> >> +#define UART_NR	S3C24XX_UART2
> >> +
> >> +#elif defined(CONFIG_SERIAL3)
> >> +#define UART_NR	S3C24XX_UART3
> >> +
> >> +#else
> >> +#error "Bad: you didn't configure serial ..."
> > 
> > Error itself is "Bad:" so remove it
> 
> OK.
> 
> >> +#endif
> >> +
> >> +#define barrier() asm volatile("" ::: "memory")
> > 
> > Is that even used ?
> 
> Yes. Without it the GCC optimization removes the loop at the end of the
> baurate generation routine.

So it's yet another accessor issue.
[...]

But anyway, there's more. I'd like to teach you how to do things properly. So 
let's focus on the in-tree driver and fix that one. Incrementally and in small 
steps.
Best regards,
Marek Vasut


More information about the U-Boot mailing list