On 15 Jan 2016 01:41, "Zeng, Star" <star.z...@intel.com> wrote:
>
> Hi Ryan,
>
>
> On 2016/1/15 3:10, Ryan Harkin wrote:
>>
>> Hi Star,
>>
>> This patch breaks the serial terminal for ARM FVP and Juno platforms.
>> I assume it also breaks TC2 and other such "vexpress" platforms
>> effected by this change.
>>
>> Whilst simple text input seems to work ok, cursor support does not.
>> And we need cursor support for Intel BDS.
>>
>> Below is my hack at fixing the problem.
>>
>> Basically, I reintroduce PL011SerialPortExtLib and stub out the
>> functionality in the functions copied into PL011SerialPortLib.
>
>
> You just copied the function implementation back to
PL011SerialPortExtLib, then it would work? It is so weird,

Yes, that's exactly what I did!  Very weird!

> may I know where your fork?
>

I haven't pushed this branch yet because I had only just started moving to
the latest EDK2 tree.   But my branch is only tianocore plus
OpenPlatformPkg and my patch below.  I see the same problem on FVP models
on upstream and Juno on upstream if I hack it to use IntelBDS.

> Thanks,
> Star
>
>
>>
>> Any suggestions about why this is broken or proposals of a proper fix
>> are welcome.  In the meantime, I guess I'll have to carry this patch
>> in my own fork.
>>
>> Regards,
>> Ryan.
>>
>>
>>  From 76352a589d5eaf6e9be28469aba63288f4defb25 Mon Sep 17 00:00:00 2001
>> From: Ryan Harkin <ryan.har...@linaro.org>
>> Date: Thu, 14 Jan 2016 18:41:54 +0000
>> Subject: [PATCH] Fix "ArmPlatformPkg: Use SerialDxe in MdeModulePkg
>> instead of EmbeddedPkg"
>>
>> The SerialDxe patch below breaks ARM Ltd. platforms:
>>
>>> commit 921e987b2b26602dc85eaee856d494b97b6e02b0
>>> Author: Star Zeng <star.z...@intel.com>
>>> Date:   Thu Nov 26 08:51:05 2015 +0000
>>>
>>>    ArmPlatformPkg: Use SerialDxe in MdeModulePkg instead of EmbeddedPkg
>>>
>>>    It is also to integrate PL011SerialPortExtLib to PL011SerialPortLib.
>>>
>>>    Cc: Michael D Kinney <michael.d.kin...@intel.com>
>>>    Cc: Liming Gao <liming....@intel.com>
>>>    Cc: Leif Lindholm <leif.lindh...@linaro.org>
>>>    Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
>>>    Contributed-under: TianoCore Contribution Agreement 1.0
>>>    Signed-off-by: Star Zeng <star.z...@intel.com>
>>>    Reviewed-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
>>>
>>>    git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18971
6f19259b-4bc3-4df7-8a09-765794883524
>>
>>
>> I found that also reverting the change in PL011SerialPortLib.c resulted
>> in failure to compilate, so I simply changed the return values of the
>> copied in functions to zero.
>>
>> Signed-off-by: Ryan Harkin <ryan.har...@linaro.org>
>> ---
>>   ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc  |   1 +
>>   .../PL011SerialPortLib/PL011SerialPortExtLib.c     | 137
+++++++++++++++++++++
>>   .../PL011SerialPortLib/PL011SerialPortExtLib.inf   |  43 +++++++
>>   .../PL011SerialPortLib/PL011SerialPortLib.c        |  12 +-
>>   4 files changed, 184 insertions(+), 9 deletions(-)
>>   create mode 100644
>> ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c
>>   create mode 100644
>> ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.inf
>>
>> diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
>> b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
>> index 1b8127d..19c1955 100644
>> --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
>> +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
>> @@ -95,6 +95,7 @@
>>     # ARM PL011 UART Driver
>>     PL011UartLib|ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.inf
>>
SerialPortLib|ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
>> +
SerialPortExtLib|ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.inf
>>     # ARM SP804 Dual Timer Driver
>>     TimerLib|ArmPlatformPkg/Library/SP804TimerLib/SP804TimerLib.inf
>>
>> diff --git
a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c
>> b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c
>> new file mode 100644
>> index 0000000..c60e7a4
>> --- /dev/null
>> +++ b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c
>> @@ -0,0 +1,137 @@
>> +/** @file
>> +  Serial I/O Port library functions with no library
constructor/destructor
>> +
>> +  Copyright (c) 2012-2014, ARM Ltd. All rights reserved.<BR>
>> +
>> +  This program and the accompanying materials
>> +  are licensed and made available under the terms and conditions of
>> the BSD License
>> +  which accompanies this distribution.  The full text of the license
>> may be found at
>> +  http://opensource.org/licenses/bsd-license.php
>> +
>> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
IMPLIED.
>> +
>> +**/
>> +
>> +#include <Base.h>
>> +
>> +#include <Library/IoLib.h>
>> +#include <Library/PcdLib.h>
>> +#include <Library/SerialPortExtLib.h>
>> +
>> +#include <Drivers/PL011Uart.h>
>> +
>> +/**
>> +  Set new attributes to PL011.
>> +
>> +  @param  BaudRate                The baud rate of the serial device.
>> If the baud rate is not supported,
>> +                                  the speed will be reduced down to
>> the nearest supported one and the
>> +                                  variable's value will be updated
accordingly.
>> +  @param  ReceiveFifoDepth        The number of characters the device
>> will buffer on input. If the specified
>> +                                  value is not supported, the
>> variable's value will be reduced down to the
>> +                                  nearest supported one.
>> +  @param  Timeout                 If applicable, the number of
>> microseconds the device will wait
>> +                                  before timing out a Read or a Write
>> operation.
>> +  @param  Parity                  If applicable, this is the
>> EFI_PARITY_TYPE that is computed or checked
>> +                                  as each character is transmitted or
>> received. If the device does not
>> +                                  support parity, the value is the
>> default parity value.
>> +  @param  DataBits                The number of data bits in each
character
>> +  @param  StopBits                If applicable, the
>> EFI_STOP_BITS_TYPE number of stop bits per character.
>> +                                  If the device does not support stop
>> bits, the value is the default stop
>> +                                  bit value.
>> +
>> +  @retval EFI_SUCCESS             All attributes were set correctly
>> on the serial device.
>> +  @retval EFI_INVALID_PARAMETERS  One or more of the attributes has
>> an unsupported value.
>> +
>> +**/
>> +RETURN_STATUS
>> +EFIAPI
>> +SerialPortSetAttributes (
>> +  IN OUT UINT64              *BaudRate,
>> +  IN OUT UINT32              *ReceiveFifoDepth,
>> +  IN OUT UINT32              *Timeout,
>> +  IN OUT EFI_PARITY_TYPE     *Parity,
>> +  IN OUT UINT8               *DataBits,
>> +  IN OUT EFI_STOP_BITS_TYPE  *StopBits
>> +  )
>> +{
>> +  return PL011UartInitializePort (
>> +        (UINTN)PcdGet64 (PcdSerialRegisterBase),
>> +        BaudRate,
>> +        ReceiveFifoDepth,
>> +        Parity,
>> +        DataBits,
>> +        StopBits);
>> +}
>> +
>> +/**
>> +
>> +  Assert or deassert the control signals on a serial port.
>> +  The following control signals are set according their bit settings :
>> +  . Request to Send
>> +  . Data Terminal Ready
>> +
>> +  @param[in]  Control  The following bits are taken into account :
>> +                       . EFI_SERIAL_REQUEST_TO_SEND : assert/deassert
the
>> +                         "Request To Send" control signal if this bit is
>> +                         equal to one/zero.
>> +                       . EFI_SERIAL_DATA_TERMINAL_READY :
assert/deassert
>> +                         the "Data Terminal Ready" control signal if
this
>> +                         bit is equal to one/zero.
>> +                       . EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE :
enable/disable
>> +                         the hardware loopback if this bit is equal to
>> +                         one/zero.
>> +                       . EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE : not
supported.
>> +                       . EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE :
enable/
>> +                         disable the hardware flow control based on CTS
(Clear
>> +                         To Send) and RTS (Ready To Send) control
signals.
>> +
>> +  @retval  RETURN_SUCCESS      The new control bits were set on the
>> serial device.
>> +  @retval  RETURN_UNSUPPORTED  The serial device does not support
>> this operation.
>> +
>> +**/
>> +RETURN_STATUS
>> +EFIAPI
>> +SerialPortSetControl (
>> +  IN UINT32  Control
>> +  )
>> +{
>> +  return PL011UartSetControl ((UINTN)PcdGet64
>> (PcdSerialRegisterBase), Control);
>> +}
>> +
>> +/**
>> +
>> +  Retrieve the status of the control bits on a serial device.
>> +
>> +  @param[out]  Control  Status of the control bits on a serial device :
>> +
>> +                        . EFI_SERIAL_DATA_CLEAR_TO_SEND,
>> EFI_SERIAL_DATA_SET_READY,
>> +                          EFI_SERIAL_RING_INDICATE,
EFI_SERIAL_CARRIER_DETECT,
>> +                          EFI_SERIAL_REQUEST_TO_SEND,
>> EFI_SERIAL_DATA_TERMINAL_READY
>> +                          are all related to the DTE (Data Terminal
>> Equipment) and
>> +                          DCE (Data Communication Equipment) modes of
>> operation of
>> +                          the serial device.
>> +                        . EFI_SERIAL_INPUT_BUFFER_EMPTY : equal to
>> one if the receive
>> +                          buffer is empty, 0 otherwise.
>> +                        . EFI_SERIAL_OUTPUT_BUFFER_EMPTY : equal to
>> one if the transmit
>> +                          buffer is empty, 0 otherwise.
>> +                        . EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE : equal
>> to one if the
>> +                          hardware loopback is enabled (the ouput
>> feeds the receive
>> +                          buffer), 0 otherwise.
>> +                        . EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE : equal
>> to one if a
>> +                          loopback is accomplished by software, 0
otherwise.
>> +                        . EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE :
>> equal to one if the
>> +                          hardware flow control based on CTS (Clear
>> To Send) and RTS
>> +                          (Ready To Send) control signals is enabled,
>> 0 otherwise.
>> +
>> +  @retval RETURN_SUCCESS  The control bits were read from the serial
device.
>> +
>> +**/
>> +RETURN_STATUS
>> +EFIAPI
>> +SerialPortGetControl (
>> +  OUT UINT32  *Control
>> +  )
>> +{
>> +  return PL011UartGetControl ((UINTN)PcdGet64
>> (PcdSerialRegisterBase), Control);
>> +}
>> diff --git
a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.inf
>> b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.inf
>> new file mode 100644
>> index 0000000..38cdeee
>> --- /dev/null
>> +++ b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.inf
>> @@ -0,0 +1,43 @@
>> +#/** @file
>> +#
>> +#  Component description file for PL011SerialPortLib module
>> +#
>> +#  Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>
>> +#
>> +#  This program and the accompanying materials
>> +#  are licensed and made available under the terms and conditions of
>> the BSD License
>> +#  which accompanies this distribution.  The full text of the license
>> may be found at
>> +#  http://opensource.org/licenses/bsd-license.php
>> +#
>> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
>> OR IMPLIED.
>> +#
>> +#**/
>> +
>> +[Defines]
>> +  INF_VERSION                    = 0x00010005
>> +  BASE_NAME                      = PL011SerialPortExtLib
>> +  FILE_GUID                      = 2be281f1-c506-4558-bd98-d6930e6de9d6
>> +  MODULE_TYPE                    = BASE
>> +  VERSION_STRING                 = 1.0
>> +  LIBRARY_CLASS                  = SerialPortExtLib
>> +
>> +[Sources.common]
>> +  PL011SerialPortExtLib.c
>> +
>> +[LibraryClasses]
>> +  PL011UartLib
>> +  PcdLib
>> +
>> +[Packages]
>> +  EmbeddedPkg/EmbeddedPkg.dec
>> +  MdePkg/MdePkg.dec
>> +  MdeModulePkg/MdeModulePkg.dec
>> +  ArmPlatformPkg/ArmPlatformPkg.dec
>> +
>> +[Pcd]
>> +  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase
>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
>> diff --git
a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c
>> b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c
>> index 7497b5e..8ab3dac 100644
>> --- a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c
>> +++ b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c
>> @@ -144,13 +144,7 @@ SerialPortSetAttributes (
>>     IN OUT EFI_STOP_BITS_TYPE  *StopBits
>>     )
>>   {
>> -  return PL011UartInitializePort (
>> -        (UINTN)PcdGet64 (PcdSerialRegisterBase),
>> -        BaudRate,
>> -        ReceiveFifoDepth,
>> -        Parity,
>> -        DataBits,
>> -        StopBits);
>> +  return 0;
>>   }
>>
>>   /**
>> @@ -185,7 +179,7 @@ SerialPortSetControl (
>>     IN UINT32  Control
>>     )
>>   {
>> -  return PL011UartSetControl ((UINTN)PcdGet64
>> (PcdSerialRegisterBase), Control);
>> +  return 0;
>>   }
>>
>>   /**
>> @@ -222,5 +216,5 @@ SerialPortGetControl (
>>     OUT UINT32  *Control
>>     )
>>   {
>> -  return PL011UartGetControl ((UINTN)PcdGet64
>> (PcdSerialRegisterBase), Control);
>> +  return 0;
>>   }
>>
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to