Hi Andy, On Wed, 16 Dec 2020 at 16:16, Andy Shevchenko <andriy.shevche...@linux.intel.com> wrote: > > In the future we would like to stop unused consoles and > also add a reference counting to avoid imbalanced calls > to ->start() and ->stop() in some cases. > > Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com> > --- > v2: new patch > common/console.c | 30 +++++++++++++++++++++++------- > include/console.h | 3 +++ > 2 files changed, 26 insertions(+), 7 deletions(-) >
Reviewed-by: Simon Glass <s...@chromium.org> But please see below > diff --git a/common/console.c b/common/console.c > index 3348436da6f7..1efbcc7672ce 100644 > --- a/common/console.c > +++ b/common/console.c > @@ -114,13 +114,9 @@ static int console_setfile(int file, struct stdio_dev * > dev) > case stdin: > case stdout: > case stderr: > - /* Start new device */ > - if (dev->start) { > - error = dev->start(dev); > - /* If it's not started dont use it */ > - if (error < 0) > - break; > - } > + error = console_start(file, dev); > + if (error) > + break; > > /* Assign the new device (leaving the existing one started) */ > stdio_devices[file] = dev; > @@ -310,6 +306,26 @@ static inline void console_doenv(int file, struct > stdio_dev *dev) > #endif > #endif /* CONIFIG_IS_ENABLED(CONSOLE_MUX) */ > > +int console_start(int file, struct stdio_dev *dev) > +{ > + int error; > + > + /* Start new device */ > + if (dev->start) { > + error = dev->start(dev); > + /* If it's not started don't use it */ > + if (error < 0) > + return error; > + } > + return 0; > +} > + > +void console_stop(int file, struct stdio_dev *dev) > +{ > + if (dev->stop) > + dev->stop(dev); > +} > + > /** U-Boot INITIAL CONSOLE-NOT COMPATIBLE FUNCTIONS > *************************/ > > int serial_printf(const char *fmt, ...) > diff --git a/include/console.h b/include/console.h > index 432f892b6cce..233ff323e1ee 100644 > --- a/include/console.h > +++ b/include/console.h > @@ -8,6 +8,7 @@ > #define __CONSOLE_H > > #include <stdbool.h> > +#include <stdio_dev.h> > #include <linux/errno.h> > > extern char console_buffer[]; > @@ -15,6 +16,8 @@ extern char console_buffer[]; > /* common/console.c */ > int console_init_f(void); /* Before relocation; uses the serial stuff > */ > int console_init_r(void); /* After relocation; uses the console stuff > */ > +int console_start(int file, struct stdio_dev *dev); > +void console_stop(int file, struct stdio_dev *dev); These two need comments Also I'd prefer to use sdev for the args, since we use dev for a driver model device. > int console_assign(int file, const char *devname); /* Assign the console > */ > int ctrlc(void); > int had_ctrlc(void); /* have we had a Control-C since last clear? */ > -- > 2.29.2 > Regards, Simon