Hi Hans, On 25 July 2015 at 03:58, Hans de Goede <hdego...@redhat.com> wrote: > Currently the serial code assumes that there is always at least one serial > port (and panics / crashes due to null pointer dereferences when there is > none). > > This makes it impossible to use u-boot on boards where there is no (debug) > serial port, because e.g. all uart pins are muxed to another function. > > This commit adds a CONFIG_REQUIRE_SERIAL_CONSOLE Kconfig option, which > defaults to y (preserving existing behavior), which can be set to n on > such boards to make them work. > > This commit only implements this for CONFIG_DM_SERIAL=y configs, as allowing > running without a serial port for CONFIG_DM_SERIAL=n configs is non trivial, > and is not necessary at this moment. > > Signed-off-by: Hans de Goede <hdego...@redhat.com> > --- > drivers/serial/Kconfig | 11 +++++++++++ > drivers/serial/serial-uclass.c | 20 +++++++++++++++++--- > 2 files changed, 28 insertions(+), 3 deletions(-)
Acked-by: Simon Glass <s...@chromium.org> A few nits below. > > diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig > index 4829284..89d01d5 100644 > --- a/drivers/serial/Kconfig > +++ b/drivers/serial/Kconfig > @@ -1,3 +1,14 @@ > +config REQUIRE_SERIAL_CONSOLE > + bool "Require a serial port for console" > + # Running without a serial console is not supported by the > + # non dm serial code non-dm > + depends on DM_SERIAL > + default y > + help > + Require a serial port for the console, and panic of none is found s/of/if/ > + during serial port initialization (default y). Set this to n on > + boards which have no debug serial port what so ever. whatsoever > + > config DM_SERIAL > bool "Enable Driver Model for serial drivers" > depends on DM > diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c > index 815fec3..df0f183 100644 > --- a/drivers/serial/serial-uclass.c > +++ b/drivers/serial/serial-uclass.c > @@ -78,7 +78,9 @@ static void serial_find_console_or_panic(void) > #undef INDEX > } > > +#ifdef CONFIG_REQUIRE_SERIAL_CONSOLE > panic_str("No serial driver found"); > +#endif > } > > /* Called prior to relocation */ > @@ -140,28 +142,40 @@ static int _serial_tstc(struct udevice *dev) > > void serial_putc(char ch) > { > - _serial_putc(gd->cur_serial_dev, ch); > + if (gd->cur_serial_dev) > + _serial_putc(gd->cur_serial_dev, ch); > } > > void serial_puts(const char *str) > { > - _serial_puts(gd->cur_serial_dev, str); > + if (gd->cur_serial_dev) > + _serial_puts(gd->cur_serial_dev, str); > } > > int serial_getc(void) > { > + if (!gd->cur_serial_dev) > + return 0; > + > return _serial_getc(gd->cur_serial_dev); > } > > int serial_tstc(void) > { > + if (!gd->cur_serial_dev) > + return 0; > + > return _serial_tstc(gd->cur_serial_dev); > } > > void serial_setbrg(void) > { > - struct dm_serial_ops *ops = serial_get_ops(gd->cur_serial_dev); > + struct dm_serial_ops *ops; > + > + if (!gd->cur_serial_dev) > + return; > > + ops = serial_get_ops(gd->cur_serial_dev); > if (ops->setbrg) > ops->setbrg(gd->cur_serial_dev, gd->baudrate); > } > -- > 2.4.3 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot