On Tue, 22 Mar 2022 at 15:00, Sean Anderson <[email protected]> wrote: > > Some serial drivers can be vastly more efficient when printing multiple > characters at once. Non-DM serial has had a puts option for these sorts > of drivers; implement it for DM serial as well. > > Because we have to add carriage returns, we can't just pass the whole > string directly to the serial driver. Instead, we print up to the > newline, then print a carriage return, and then continue on. This is > less efficient, but it is better than printing each character > individually. It also avoids having to allocate memory just to add a few > characters. > > Drivers may perform short writes (such as filling a FIFO) and return the > number of characters written in len. We loop over them in the same way > that _serial_putc loops over putc. > > This results in around sizeof(void *) growth for all boards with > DM_SERIAL. The full implementation takes around 140 bytes. > > Signed-off-by: Sean Anderson <[email protected]> > --- > > Changes in v3: > - Add a config for puts to reduce the impact on the (vast majority) of > boards which don't need it. > - Fix null pointer dereference in _serial_puts caused by a missing > return. > - Make puts return the number of characters written on success, instead > of reusing the len parameter. > > Changes in v2: > - New > > drivers/serial/Kconfig | 13 +++++++++++++ > drivers/serial/serial-uclass.c | 26 ++++++++++++++++++++++++-- > include/serial.h | 18 ++++++++++++++++++ > 3 files changed, 55 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass <[email protected]>

