Message ID | 20200503130457.7080-1-peng.fan@nxp.com |
---|---|
State | New |
Headers | show |
Series | dm: serial: introduce puts hook | expand |
Hi Peng, On Sun, 3 May 2020 at 06:42, Peng Fan <peng.fan at nxp.com> wrote: > > Introduce puts hook for dm serial driver. > > Signed-off-by: Peng Fan <peng.fan at nxp.com> > --- > drivers/serial/serial-uclass.c | 13 +++++++++++-- > include/serial.h | 8 ++++++++ > 2 files changed, 19 insertions(+), 2 deletions(-) I'm just wondering why we need this? Isn't serial_putc() enough? Regards, Simon
Hi Simon, > Subject: Re: [PATCH] dm: serial: introduce puts hook > > Hi Peng, > > On Sun, 3 May 2020 at 06:42, Peng Fan <peng.fan at nxp.com> wrote: > > > > Introduce puts hook for dm serial driver. > > > > Signed-off-by: Peng Fan <peng.fan at nxp.com> > > --- > > drivers/serial/serial-uclass.c | 13 +++++++++++-- > > include/serial.h | 8 ++++++++ > > 2 files changed, 19 insertions(+), 2 deletions(-) > > I'm just wondering why we need this? Isn't serial_putc() enough? This is to let u-boot could run in a XEN hypervisor DomU virtual machine. It is low efficiently if each time, we use putc to let xen dom0 print uboot log. We could pass a string, not a char to improve performance. Thanks, Peng. > > Regards, > Simon
Hi Peng, On Mon, 4 May 2020 at 08:24, Peng Fan <peng.fan at nxp.com> wrote: > > Hi Simon, > > > Subject: Re: [PATCH] dm: serial: introduce puts hook > > > > Hi Peng, > > > > On Sun, 3 May 2020 at 06:42, Peng Fan <peng.fan at nxp.com> wrote: > > > > > > Introduce puts hook for dm serial driver. > > > > > > Signed-off-by: Peng Fan <peng.fan at nxp.com> > > > --- > > > drivers/serial/serial-uclass.c | 13 +++++++++++-- > > > include/serial.h | 8 ++++++++ > > > 2 files changed, 19 insertions(+), 2 deletions(-) > > > > I'm just wondering why we need this? Isn't serial_putc() enough? > > This is to let u-boot could run in a XEN hypervisor DomU virtual machine. > It is low efficiently if each time, we use putc to let xen dom0 print uboot > log. OK that is the sort of thing that should be in the commit message :-) > > We could pass a string, not a char to improve performance. If we are going to do that, I think it would be better to add a write() call, with a length. It should return the number of bytes written, since sometimes the port might be full. The uclass itself needs a serial_write() call which would then fall back to writing characters if the driver doesn't have the write method. Also should have a test. Regards, Simon
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c index 7703c67492..b6a7502ac8 100644 --- a/drivers/serial/serial-uclass.c +++ b/drivers/serial/serial-uclass.c @@ -189,8 +189,17 @@ static void _serial_putc(struct udevice *dev, char ch) static void _serial_puts(struct udevice *dev, const char *str) { - while (*str) - _serial_putc(dev, *str++); + struct dm_serial_ops *ops = serial_get_ops(dev); + int err; + + if (ops->puts) { + do { + err = ops->puts(dev, str); + } while (err == -EAGAIN); + } else { + while (*str) + _serial_putc(dev, *str++); + } } static int __serial_getc(struct udevice *dev) diff --git a/include/serial.h b/include/serial.h index 54b21a0470..0b40b27526 100644 --- a/include/serial.h +++ b/include/serial.h @@ -186,6 +186,14 @@ struct dm_serial_ops { * @return character (0..255), -ve on error */ int (*getc)(struct udevice *dev); + /** + * puts() - puts a string + * + * @dev: Device pointer + * @str: string to write + * @return 0 if OK, -ve on error + */ + int (*puts)(struct udevice *dev, const char *str); /** * putc() - Write a character *
Introduce puts hook for dm serial driver. Signed-off-by: Peng Fan <peng.fan at nxp.com> --- drivers/serial/serial-uclass.c | 13 +++++++++++-- include/serial.h | 8 ++++++++ 2 files changed, 19 insertions(+), 2 deletions(-)