I don't have access to target hardware right now but if you say it works,
please commit this everywhere needed. This was the problem Lou was
reporting around the end of last year/first of this year.

Any idea when this regression was introduced?

On Wed, Jun 17, 2020 at 8:36 PM Gedare Bloom <ged...@rtems.org> wrote:

> Looks good to me, thanks for the type fixes too.
>
> On Tue, Jun 16, 2020, 11:58 PM <chr...@rtems.org> wrote:
>
>> From: Chris Johns <chr...@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@rtems.org
>> http://lists.rtems.org/mailman/listinfo/devel
>>
> _______________________________________________
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to