On Sat, Jul 27, 2024 at 12:21 AM Patrick Rudolph <patrick.rudo...@9elements.com> wrote: > > From: Maximilian Brune <maximilian.br...@9elements.com> > > When ACPI is enabled on arm it will use the getinfo function to fill > the SPCR ACPI table. > > Signed-off-by: Maximilian Brune <maximilian.br...@9elements.com> > Cc: Simon Glass <s...@chromium.org> > Cc: Tom Rini <tr...@konsulko.com>
Reviewed-by: Moritz Fischer <mori...@google.com> > --- > boot/bootflow.c | 8 ++++++-- > drivers/serial/serial_pl01x.c | 24 ++++++++++++++++++++++++ > include/serial.h | 1 + > 3 files changed, 31 insertions(+), 2 deletions(-) > > diff --git a/boot/bootflow.c b/boot/bootflow.c > index 59d77d2385..d8807eb109 100644 > --- a/boot/bootflow.c > +++ b/boot/bootflow.c > @@ -936,11 +936,15 @@ int bootflow_cmdline_auto(struct bootflow *bflow, const > char *arg) > return ret; > > *buf = '\0'; > - if (!strcmp("earlycon", arg)) { > + if (!strcmp("earlycon", arg) && info.type == > SERIAL_CHIP_16550_COMPATIBLE) { > snprintf(buf, sizeof(buf), > "uart8250,mmio32,%#lx,%dn8", info.addr, > info.baudrate); > - } else if (!strcmp("console", arg)) { > + } else if (!strcmp("earlycon", arg) && info.type == > SERIAL_CHIP_PL01X) { > + snprintf(buf, sizeof(buf), > + "pl011,mmio32,%#lx,%dn8", info.addr, > + info.baudrate); > + } else if (!strcmp("console", arg) && info.type == > SERIAL_CHIP_16550_COMPATIBLE) { > snprintf(buf, sizeof(buf), > "ttyS0,%dn8", info.baudrate); > } > diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c > index 80c35963b8..ab67922d18 100644 > --- a/drivers/serial/serial_pl01x.c > +++ b/drivers/serial/serial_pl01x.c > @@ -19,6 +19,7 @@ > #include <watchdog.h> > #include <asm/io.h> > #include <serial.h> > +#include <spl.h> > #include <dm/device_compat.h> > #include <dm/platform_data/serial_pl01x.h> > #include <linux/compiler.h> > @@ -272,6 +273,28 @@ __weak struct serial_device *default_serial_console(void) > return &pl01x_serial_drv; > } > #else > + > +static int pl01x_serial_getinfo(struct udevice *dev, > + struct serial_device_info *info) > +{ > + struct pl01x_serial_plat *plat = dev_get_plat(dev); > + > + /* save code size */ > + if (!spl_in_proper()) > + return -ENOSYS; > + > + info->type = SERIAL_CHIP_PL01X; > + info->addr_space = SERIAL_ADDRESS_SPACE_MEMORY; > + info->addr = plat->base; > + info->size = 0x1000; > + info->reg_width = 4; > + info->reg_shift = 2; > + info->reg_offset = 0; > + info->clock = plat->clock; > + > + return 0; > +} > + > int pl01x_serial_setbrg(struct udevice *dev, int baudrate) > { > struct pl01x_serial_plat *plat = dev_get_plat(dev); > @@ -341,6 +364,7 @@ static const struct dm_serial_ops pl01x_serial_ops = { > .pending = pl01x_serial_pending, > .getc = pl01x_serial_getc, > .setbrg = pl01x_serial_setbrg, > + .getinfo = pl01x_serial_getinfo, > }; > > #if CONFIG_IS_ENABLED(OF_REAL) > diff --git a/include/serial.h b/include/serial.h > index d129dc3253..d7a9a8cfb8 100644 > --- a/include/serial.h > +++ b/include/serial.h > @@ -124,6 +124,7 @@ enum serial_stop { > enum serial_chip_type { > SERIAL_CHIP_UNKNOWN = -1, > SERIAL_CHIP_16550_COMPATIBLE, > + SERIAL_CHIP_PL01X, > }; > > enum adr_space_type { > -- > 2.45.2 >