[U-Boot] [PATCH v4 5/8] arm: serial: Add ability to use pre-initialized UARTs
Sergei Temerkhanov
s.temerkhanov at gmail.com
Mon Sep 7 12:20:36 CEST 2015
On Sat, Aug 22, 2015 at 3:36 AM, Simon Glass <sjg at chromium.org> wrote:
> Hi Serkey,
>
> On 18 August 2015 at 06:26, Sergey Temerkhanov <s.temerkhanov at gmail.com> wrote:
>> On some systems, UART initialization is performed before running U-Boot.
>> This commit allows to skip UART re-initializaion on those systems
>>
>> Signed-off-by: Sergey Temerkhanov <s.temerkhanov at gmail.com>
>> Signed-off-by: Radha Mohan Chintakuntla <rchintakuntla at cavium.com>
>>
>> ---
>>
>> Changes in v4:
>> - Fixed build warnings
>> - Moved to DM_SERIAL
>>
>> Changes in v3:
>> - Added __used keyword
>>
>> Changes in v2: None
>>
>> drivers/serial/serial_pl01x.c | 12 ++++++------
>> include/dm/platform_data/serial_pl01x.h | 6 ++++++
>> 2 files changed, 12 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c
>> index ad503af..037fd23 100644
>> --- a/drivers/serial/serial_pl01x.c
>> +++ b/drivers/serial/serial_pl01x.c
>> @@ -125,7 +125,7 @@ static int pl011_set_line_control(struct pl01x_regs *regs)
>> }
>>
>> static int pl01x_generic_setbrg(struct pl01x_regs *regs, enum pl01x_type type,
>> - int clock, int baudrate)
>> + int clock, int baudrate)
>> {
>> switch (type) {
>> case TYPE_PL010: {
>> @@ -295,7 +295,6 @@ __weak struct serial_device *default_serial_console(void)
>> #endif /* nCONFIG_DM_SERIAL */
>>
>> #ifdef CONFIG_DM_SERIAL
>> -
>> struct pl01x_priv {
>> struct pl01x_regs *regs;
>> enum pl01x_type type;
>> @@ -306,9 +305,9 @@ static int pl01x_serial_setbrg(struct udevice *dev, int baudrate)
>> struct pl01x_serial_platdata *plat = dev_get_platdata(dev);
>> struct pl01x_priv *priv = dev_get_priv(dev);
>>
>> - pl01x_generic_setbrg(priv->regs, priv->type, plat->clock, baudrate);
>> -
>> - return 0;
>> + return (plat->flags & PL0x_PREINITIALIZED) ? 0 :
>> + pl01x_generic_setbrg(priv->regs, priv->type,
>> + plat->clock, baudrate);
>> }
>>
>> static int pl01x_serial_probe(struct udevice *dev)
>> @@ -318,7 +317,8 @@ static int pl01x_serial_probe(struct udevice *dev)
>>
>> priv->regs = (struct pl01x_regs *)plat->base;
>> priv->type = plat->type;
>> - return pl01x_generic_serial_init(priv->regs, priv->type);
>> + return (plat->flags & PL0x_PREINITIALIZED) ? 0 :
>> + pl01x_generic_serial_init(priv->regs, priv->type);
>> }
>>
>> static int pl01x_serial_getc(struct udevice *dev)
>> diff --git a/include/dm/platform_data/serial_pl01x.h b/include/dm/platform_data/serial_pl01x.h
>> index 5e068f3..455121b 100644
>> --- a/include/dm/platform_data/serial_pl01x.h
>> +++ b/include/dm/platform_data/serial_pl01x.h
>> @@ -11,17 +11,23 @@ enum pl01x_type {
>> TYPE_PL011,
>> };
>>
>> +enum pl01x_flags {
>> + PL0x_PREINITIALIZED = 1 << 0, /* Skip port initialization */
>> +};
>> +
>> /*
>> *Information about a serial port
>> *
>> * @base: Register base address
>> * @type: Port type
>> * @clock: Input clock rate, used for calculating the baud rate divisor
>> + * @flags: Port flags
>> */
>> struct pl01x_serial_platdata {
>> unsigned long base;
>> enum pl01x_type type;
>> unsigned int clock;
>> + unsigned long flags;
>> };
>>
>> #endif
>
> This patch is fine as far as it goes (although the x in
> PL0x_PREINITIALIZED should be capitalised to match style I think).
Agreed
>
> But why doesn't this board use device tree (CONFIG_OF_CONTROL)? Do you
> have a device tree file for it?
OK, I'll import one from the Linux kernel.
>
> Regards,
> Simon
Regards,
Sergey
More information about the U-Boot
mailing list