[PATCH v2 1/7] console: Introduce console_start() and console_stop()

Simon Glass sjg at chromium.org
Sat Dec 19 03:29:16 CET 2020


Hi Andy,

On Wed, 16 Dec 2020 at 16:16, Andy Shevchenko
<andriy.shevchenko at 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.shevchenko at 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 <sjg at 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


More information about the U-Boot mailing list