[PATCH] i386/pc: Initialise the printk serial port on first use

Gedare Bloom gedare at rtems.org
Thu Jun 18 01:36:25 UTC 2020


Looks good to me, thanks for the type fixes too.

On Tue, Jun 16, 2020, 11:58 PM <chrisj at rtems.org> wrote:

> From: Chris Johns <chrisj at rtems.org>
>
> ---
>  bsps/i386/pc386/console/conscfg.c        |  7 ++--
>  bsps/i386/pc386/console/printk_support.c | 42 +++++++++++++++++++-----
>  2 files changed, 37 insertions(+), 12 deletions(-)
>
> diff --git a/bsps/i386/pc386/console/conscfg.c
> b/bsps/i386/pc386/console/conscfg.c
> index a4ae88626f..8aa8ab5c2a 100644
> --- a/bsps/i386/pc386/console/conscfg.c
> +++ b/bsps/i386/pc386/console/conscfg.c
> @@ -46,15 +46,14 @@
>
>    #define CLOCK_RATE    (115200 * 16)
>
> -  static uint8_t com_get_register(uint32_t addr, uint8_t i)
> +  static uint8_t com_get_register(uintptr_t addr, uint8_t i)
>    {
> -    register uint8_t val;
> -
> +    uint8_t val;
>      inport_byte( (addr + i), val );
>      return val;
>    }
>
> -  static void com_set_register(uint32_t addr, uint8_t i, uint8_t val)
> +  static void com_set_register(uintptr_t addr, uint8_t i, uint8_t val)
>    {
>      outport_byte( (addr + i), val );
>    }
> diff --git a/bsps/i386/pc386/console/printk_support.c
> b/bsps/i386/pc386/console/printk_support.c
> index d7bc329868..c9e003dab0 100644
> --- a/bsps/i386/pc386/console/printk_support.c
> +++ b/bsps/i386/pc386/console/printk_support.c
> @@ -29,6 +29,28 @@
>
>  rtems_device_minor_number BSPPrintkPort = 0;
>
> +static bool serialInit;
> +static bool serialOK;
> +
> +static bool serialValid(console_tbl *port)
> +{
> +  if (port->pDeviceFns) {
> +    if (!serialInit) {
> +      serialOK = true;
> +      if (port->pDeviceFns->deviceProbe != NULL) {
> +        if (!port->pDeviceFns->deviceProbe( BSPPrintkPort ))
> +          serialOK = false;
> +        else if (port->pDeviceFns->deviceInitialize != NULL)
> +          port->pDeviceFns->deviceInitialize( BSPPrintkPort );
> +        else
> +          serialOK = false;
> +      }
> +      serialInit = true;
> +    }
> +  }
> +  return serialOK;
> +}
> +
>  void BSP_outch(char ch);
>  int BSP_inch(void);
>
> @@ -42,10 +64,12 @@ void BSP_outch(char ch)
>
>    if ( !isVga ) {
>      console_tbl *port = Console_Port_Tbl[BSPPrintkPort];
> -    if (port->pDeviceFns && port->pDeviceFns->deviceWritePolled) {
> -      port->pDeviceFns->deviceWritePolled( BSPPrintkPort, ch );
> +    if (serialValid(port)) {
> +      if (port->pDeviceFns->deviceWritePolled) {
> +        port->pDeviceFns->deviceWritePolled( BSPPrintkPort, ch );
> +      }
> +      return;
>      }
> -    return;
>    }
>
>    #if BSP_ENABLE_VGA
> @@ -65,11 +89,13 @@ int BSP_inch(void)
>
>    if ( !isVga ) {
>      console_tbl *port = Console_Port_Tbl[BSPPrintkPort];
> -    if (port->pDeviceFns && port->pDeviceFns->deviceRead) {
> -      do {
> -        result = port->pDeviceFns->deviceRead( BSPPrintkPort );
> -      } while (result == -1);
> -      return result;
> +    if (serialValid(port)) {
> +      if (port->pDeviceFns->deviceRead) {
> +        do {
> +          result = port->pDeviceFns->deviceRead( BSPPrintkPort );
> +        } while (result == -1);
> +        return result;
> +      }
>      }
>    }
>
> --
> 2.24.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200617/4ed1cc2f/attachment.html>


More information about the devel mailing list