diff mbox

[edk2] ArmPlatformPkg: Set Juno debug serial port defaults

Message ID 20160701115206.14276-1-evan.lloyd@arm.com
State New
Headers show

Commit Message

Evan Lloyd July 1, 2016, 11:52 a.m. UTC
From: Evan Lloyd <evan.lloyd@arm.com>


Juno has several serial ports, one of which may be used for a remote
debug interface (e.g. gdb, WinDbg).  The debug serial port needs to
be distinct from that used for UEFI trace to prevent corruption of
debugger protocol messaging.
The UEFI spec requires that serial devices be initialised to default
settings. (11.8 Serial I/O Protocol - "The default attributes for all
UART-style serial device interfaces are: 115,200 baud, ..."
and 17.3.3 EFI Debugport Variable - "These defaults must be used in the
absence of a DEBUGPORT variable...")

This change adds initialization of the serial device reported in the
ACPI DBG2 table.  The initialisation is done early in the boot to allow
the possibility of remote debug of UEFI itself.

NOTE: This is functionally dependent on the DBG2 table being updated in
OpenPlatformPkg, but is required as a precursor to that change.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>

Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>

---

Notes:
    v2
    - No code change.
    - Clarified commit message in response to comments [Ard Bieshevel]
      Specific points include clarity that change is not OS specific,
      and pertains to any debugger use, and justification for doing it
      at an early point in the process.
      Confirmed with Leif that update here (not OpenPlatformPkg) is
      appropriate.

 ArmPlatformPkg/ArmPlatformPkg.dec                           |  5 +++
 ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf | 15 ++++++++-
 ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c      | 35 ++++++++++++++++++--
 3 files changed, 52 insertions(+), 3 deletions(-)

Code available at:
https://github.com/EvanLloyd/tianocore/tree/debug_serial_v2

-- 
Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Ard Biesheuvel July 7, 2016, 3:02 p.m. UTC | #1
On 1 July 2016 at 13:52,  <evan.lloyd@arm.com> wrote:
> From: Evan Lloyd <evan.lloyd@arm.com>

>

> Juno has several serial ports, one of which may be used for a remote

> debug interface (e.g. gdb, WinDbg).  The debug serial port needs to

> be distinct from that used for UEFI trace to prevent corruption of

> debugger protocol messaging.

> The UEFI spec requires that serial devices be initialised to default

> settings. (11.8 Serial I/O Protocol - "The default attributes for all

> UART-style serial device interfaces are: 115,200 baud, ..."

> and 17.3.3 EFI Debugport Variable - "These defaults must be used in the

> absence of a DEBUGPORT variable...")

>

> This change adds initialization of the serial device reported in the

> ACPI DBG2 table.  The initialisation is done early in the boot to allow

> the possibility of remote debug of UEFI itself.

>

> NOTE: This is functionally dependent on the DBG2 table being updated in

> OpenPlatformPkg, but is required as a precursor to that change.

>

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>

> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>


This looks fine to me, but given that I've never been within 10 ft of
a Juno in my life, I'd rather have Leif pick this up

Thanks,
Ard.

> ---

>

> Notes:

>     v2

>     - No code change.

>     - Clarified commit message in response to comments [Ard Bieshevel]

>       Specific points include clarity that change is not OS specific,

>       and pertains to any debugger use, and justification for doing it

>       at an early point in the process.

>       Confirmed with Leif that update here (not OpenPlatformPkg) is

>       appropriate.

>

>  ArmPlatformPkg/ArmPlatformPkg.dec                           |  5 +++

>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf | 15 ++++++++-

>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c      | 35 ++++++++++++++++++--

>  3 files changed, 52 insertions(+), 3 deletions(-)

>

> Code available at:

> https://github.com/EvanLloyd/tianocore/tree/debug_serial_v2

>

> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec

> index 1c05132cd625be75b0d9d1cd09950af983d1f049..5864d9835989382b79b1e6db6486fe67082df6a0 100644

> --- a/ArmPlatformPkg/ArmPlatformPkg.dec

> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec

> @@ -98,6 +98,11 @@ [PcdsFixedAtBuild.common]

>    gArmPlatformTokenSpaceGuid.PL011UartFractional|0|UINT32|0x0000002D

>    gArmPlatformTokenSpaceGuid.PL011UartInterrupt|0x00000000|UINT32|0x0000002F

>

> +  ## PL011 Serial Debug UART

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x00000000|UINT64|0x00000030

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|0x00000000|UINT64|0x00000031

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|0x00000000|UINT32|0x00000032

> +

>    ## PL061 GPIO

>    gArmPlatformTokenSpaceGuid.PcdPL061GpioBase|0x0|UINT32|0x00000025

>

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> index 8c8b141c35a2693b618c1515cb665b9b1e81cc4e..77d18f855a833fff0d38518436ef331dfab2d7e1 100644

> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> @@ -1,5 +1,5 @@

>  #

> -#  Copyright (c) 2013-2015, ARM Limited. All rights reserved.

> +#  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>  #

>  #  This program and the accompanying materials

>  #  are licensed and made available under the terms and conditions of the BSD License

> @@ -57,6 +57,19 @@ [FixedPcd]

>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress

>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize

>

> +

> +  #

> +  # PL011 Serial Debug UART

> +  #

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz

> +

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits

> +

>  [Pcd]

>    gArmTokenSpaceGuid.PcdPciMmio32Base

>    gArmTokenSpaceGuid.PcdPciMmio32Size

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> index ffff5628247f61f4c2f31d3b9f7763b24f10641d..ae7f5e94acdaa5a37ba56c27fe0700c588dafcc9 100644

> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> @@ -1,6 +1,6 @@

>  /** @file

>  *

> -*  Copyright (c) 2013-2014, ARM Limited. All rights reserved.

> +*  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>  *

>  *  This program and the accompanying materials

>  *  are licensed and made available under the terms and conditions of the BSD License

> @@ -18,6 +18,7 @@

>  #include <Library/PcdLib.h>

>

>  #include <Ppi/ArmMpCoreInfo.h>

> +#include <Drivers/PL011Uart.h>

>

>  #include <ArmPlatform.h>

>

> @@ -112,7 +113,37 @@ ArmPlatformInitialize (

>    IN  UINTN                     MpId

>    )

>  {

> -  return RETURN_SUCCESS;

> +  RETURN_STATUS       Status;

> +  UINT64              BaudRate;

> +  UINT32              ReceiveFifoDepth;

> +  EFI_PARITY_TYPE     Parity;

> +  UINT8               DataBits;

> +  EFI_STOP_BITS_TYPE  StopBits;

> +

> +  Status = RETURN_SUCCESS;

> +

> +  //

> +  // Initialize the Serial Debug UART

> +  //

> +  if (FixedPcdGet64 (PcdSerialDbgRegisterBase)) {

> +    ReceiveFifoDepth = 0; // Use the default value for FIFO depth

> +    Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);

> +    DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);

> +    StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);

> +

> +    BaudRate = (UINTN)FixedPcdGet64 (PcdSerialDbgUartBaudRate);

> +    Status = PL011UartInitializePort (

> +               (UINTN)FixedPcdGet64 (PcdSerialDbgRegisterBase),

> +               FixedPcdGet32 (PcdSerialDbgUartClkInHz),

> +               &BaudRate,

> +               &ReceiveFifoDepth,

> +               &Parity,

> +               &DataBits,

> +               &StopBits

> +               );

> +  }

> +

> +  return Status;

>  }

>

>  /**

> --

> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Leif Lindholm July 7, 2016, 3:59 p.m. UTC | #2
On Fri, Jul 01, 2016 at 12:52:06PM +0100, evan.lloyd@arm.com wrote:
> From: Evan Lloyd <evan.lloyd@arm.com>

> 

> Juno has several serial ports, one of which may be used for a remote

> debug interface (e.g. gdb, WinDbg).  The debug serial port needs to

> be distinct from that used for UEFI trace to prevent corruption of

> debugger protocol messaging.

> The UEFI spec requires that serial devices be initialised to default

> settings. (11.8 Serial I/O Protocol - "The default attributes for all

> UART-style serial device interfaces are: 115,200 baud, ..."

> and 17.3.3 EFI Debugport Variable - "These defaults must be used in the

> absence of a DEBUGPORT variable...")

> 

> This change adds initialization of the serial device reported in the

> ACPI DBG2 table.  The initialisation is done early in the boot to allow

> the possibility of remote debug of UEFI itself.

> 

> NOTE: This is functionally dependent on the DBG2 table being updated in

> OpenPlatformPkg, but is required as a precursor to that change.

> 

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>

> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>


I'd like a nod from Ryan on this one.
One style comment below.

> ---

> 

> Notes:

>     v2

>     - No code change.

>     - Clarified commit message in response to comments [Ard Bieshevel]

>       Specific points include clarity that change is not OS specific,

>       and pertains to any debugger use, and justification for doing it

>       at an early point in the process.

>       Confirmed with Leif that update here (not OpenPlatformPkg) is

>       appropriate.

> 

>  ArmPlatformPkg/ArmPlatformPkg.dec                           |  5 +++

>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf | 15 ++++++++-

>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c      | 35 ++++++++++++++++++--

>  3 files changed, 52 insertions(+), 3 deletions(-)

> 

> Code available at:

> https://github.com/EvanLloyd/tianocore/tree/debug_serial_v2

> 

> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec

> index 1c05132cd625be75b0d9d1cd09950af983d1f049..5864d9835989382b79b1e6db6486fe67082df6a0 100644

> --- a/ArmPlatformPkg/ArmPlatformPkg.dec

> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec

> @@ -98,6 +98,11 @@ [PcdsFixedAtBuild.common]

>    gArmPlatformTokenSpaceGuid.PL011UartFractional|0|UINT32|0x0000002D

>    gArmPlatformTokenSpaceGuid.PL011UartInterrupt|0x00000000|UINT32|0x0000002F

>  

> +  ## PL011 Serial Debug UART

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x00000000|UINT64|0x00000030

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|0x00000000|UINT64|0x00000031

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|0x00000000|UINT32|0x00000032

> +

>    ## PL061 GPIO

>    gArmPlatformTokenSpaceGuid.PcdPL061GpioBase|0x0|UINT32|0x00000025

>  

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> index 8c8b141c35a2693b618c1515cb665b9b1e81cc4e..77d18f855a833fff0d38518436ef331dfab2d7e1 100644

> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> @@ -1,5 +1,5 @@

>  #

> -#  Copyright (c) 2013-2015, ARM Limited. All rights reserved.

> +#  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>  #

>  #  This program and the accompanying materials

>  #  are licensed and made available under the terms and conditions of the BSD License

> @@ -57,6 +57,19 @@ [FixedPcd]

>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress

>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize

>  

> +

> +  #

> +  # PL011 Serial Debug UART

> +  #

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz

> +

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits

> +

>  [Pcd]

>    gArmTokenSpaceGuid.PcdPciMmio32Base

>    gArmTokenSpaceGuid.PcdPciMmio32Size

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> index ffff5628247f61f4c2f31d3b9f7763b24f10641d..ae7f5e94acdaa5a37ba56c27fe0700c588dafcc9 100644

> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> @@ -1,6 +1,6 @@

>  /** @file

>  *

> -*  Copyright (c) 2013-2014, ARM Limited. All rights reserved.

> +*  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>  *

>  *  This program and the accompanying materials

>  *  are licensed and made available under the terms and conditions of the BSD License

> @@ -18,6 +18,7 @@

>  #include <Library/PcdLib.h>

>  

>  #include <Ppi/ArmMpCoreInfo.h>

> +#include <Drivers/PL011Uart.h>


Is there an ordering requirement for the include file?
If not, I would prefer it before the Library includes in order to keep
the sort order.

I can do this before pushing if someone tells me it's OK.

>  

>  #include <ArmPlatform.h>

>  

> @@ -112,7 +113,37 @@ ArmPlatformInitialize (

>    IN  UINTN                     MpId

>    )

>  {

> -  return RETURN_SUCCESS;

> +  RETURN_STATUS       Status;

> +  UINT64              BaudRate;

> +  UINT32              ReceiveFifoDepth;

> +  EFI_PARITY_TYPE     Parity;

> +  UINT8               DataBits;

> +  EFI_STOP_BITS_TYPE  StopBits;

> +

> +  Status = RETURN_SUCCESS;

> +

> +  //

> +  // Initialize the Serial Debug UART

> +  //

> +  if (FixedPcdGet64 (PcdSerialDbgRegisterBase)) {

> +    ReceiveFifoDepth = 0; // Use the default value for FIFO depth

> +    Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);

> +    DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);

> +    StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);

> +

> +    BaudRate = (UINTN)FixedPcdGet64 (PcdSerialDbgUartBaudRate);

> +    Status = PL011UartInitializePort (

> +               (UINTN)FixedPcdGet64 (PcdSerialDbgRegisterBase),

> +               FixedPcdGet32 (PcdSerialDbgUartClkInHz),

> +               &BaudRate,

> +               &ReceiveFifoDepth,

> +               &Parity,

> +               &DataBits,

> +               &StopBits

> +               );

> +  }

> +

> +  return Status;

>  }

>  

>  /**

> -- 

> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ryan Harkin July 7, 2016, 4:01 p.m. UTC | #3
On 7 July 2016 at 16:59, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Fri, Jul 01, 2016 at 12:52:06PM +0100, evan.lloyd@arm.com wrote:

>> From: Evan Lloyd <evan.lloyd@arm.com>

>>

>> Juno has several serial ports, one of which may be used for a remote

>> debug interface (e.g. gdb, WinDbg).  The debug serial port needs to

>> be distinct from that used for UEFI trace to prevent corruption of

>> debugger protocol messaging.

>> The UEFI spec requires that serial devices be initialised to default

>> settings. (11.8 Serial I/O Protocol - "The default attributes for all

>> UART-style serial device interfaces are: 115,200 baud, ..."

>> and 17.3.3 EFI Debugport Variable - "These defaults must be used in the

>> absence of a DEBUGPORT variable...")

>>

>> This change adds initialization of the serial device reported in the

>> ACPI DBG2 table.  The initialisation is done early in the boot to allow

>> the possibility of remote debug of UEFI itself.

>>

>> NOTE: This is functionally dependent on the DBG2 table being updated in

>> OpenPlatformPkg, but is required as a precursor to that change.

>>

>> Contributed-under: TianoCore Contribution Agreement 1.0

>> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>

>> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>

>

> I'd like a nod from Ryan on this one.


As it happens, I've just finished testing it (on R0, R1 and R2):

Tested-by: Ryan Harkin <ryan.harkin@linaro.org>



> One style comment below.

>

>> ---

>>

>> Notes:

>>     v2

>>     - No code change.

>>     - Clarified commit message in response to comments [Ard Bieshevel]

>>       Specific points include clarity that change is not OS specific,

>>       and pertains to any debugger use, and justification for doing it

>>       at an early point in the process.

>>       Confirmed with Leif that update here (not OpenPlatformPkg) is

>>       appropriate.

>>

>>  ArmPlatformPkg/ArmPlatformPkg.dec                           |  5 +++

>>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf | 15 ++++++++-

>>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c      | 35 ++++++++++++++++++--

>>  3 files changed, 52 insertions(+), 3 deletions(-)

>>

>> Code available at:

>> https://github.com/EvanLloyd/tianocore/tree/debug_serial_v2

>>

>> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec

>> index 1c05132cd625be75b0d9d1cd09950af983d1f049..5864d9835989382b79b1e6db6486fe67082df6a0 100644

>> --- a/ArmPlatformPkg/ArmPlatformPkg.dec

>> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec

>> @@ -98,6 +98,11 @@ [PcdsFixedAtBuild.common]

>>    gArmPlatformTokenSpaceGuid.PL011UartFractional|0|UINT32|0x0000002D

>>    gArmPlatformTokenSpaceGuid.PL011UartInterrupt|0x00000000|UINT32|0x0000002F

>>

>> +  ## PL011 Serial Debug UART

>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x00000000|UINT64|0x00000030

>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|0x00000000|UINT64|0x00000031

>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|0x00000000|UINT32|0x00000032

>> +

>>    ## PL061 GPIO

>>    gArmPlatformTokenSpaceGuid.PcdPL061GpioBase|0x0|UINT32|0x00000025

>>

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

>> index 8c8b141c35a2693b618c1515cb665b9b1e81cc4e..77d18f855a833fff0d38518436ef331dfab2d7e1 100644

>> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

>> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

>> @@ -1,5 +1,5 @@

>>  #

>> -#  Copyright (c) 2013-2015, ARM Limited. All rights reserved.

>> +#  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>>  #

>>  #  This program and the accompanying materials

>>  #  are licensed and made available under the terms and conditions of the BSD License

>> @@ -57,6 +57,19 @@ [FixedPcd]

>>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress

>>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize

>>

>> +

>> +  #

>> +  # PL011 Serial Debug UART

>> +  #

>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase

>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate

>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz

>> +

>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate

>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits

>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity

>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits

>> +

>>  [Pcd]

>>    gArmTokenSpaceGuid.PcdPciMmio32Base

>>    gArmTokenSpaceGuid.PcdPciMmio32Size

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

>> index ffff5628247f61f4c2f31d3b9f7763b24f10641d..ae7f5e94acdaa5a37ba56c27fe0700c588dafcc9 100644

>> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

>> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

>> @@ -1,6 +1,6 @@

>>  /** @file

>>  *

>> -*  Copyright (c) 2013-2014, ARM Limited. All rights reserved.

>> +*  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>>  *

>>  *  This program and the accompanying materials

>>  *  are licensed and made available under the terms and conditions of the BSD License

>> @@ -18,6 +18,7 @@

>>  #include <Library/PcdLib.h>

>>

>>  #include <Ppi/ArmMpCoreInfo.h>

>> +#include <Drivers/PL011Uart.h>

>

> Is there an ordering requirement for the include file?

> If not, I would prefer it before the Library includes in order to keep

> the sort order.

>

> I can do this before pushing if someone tells me it's OK.

>

>>

>>  #include <ArmPlatform.h>

>>

>> @@ -112,7 +113,37 @@ ArmPlatformInitialize (

>>    IN  UINTN                     MpId

>>    )

>>  {

>> -  return RETURN_SUCCESS;

>> +  RETURN_STATUS       Status;

>> +  UINT64              BaudRate;

>> +  UINT32              ReceiveFifoDepth;

>> +  EFI_PARITY_TYPE     Parity;

>> +  UINT8               DataBits;

>> +  EFI_STOP_BITS_TYPE  StopBits;

>> +

>> +  Status = RETURN_SUCCESS;

>> +

>> +  //

>> +  // Initialize the Serial Debug UART

>> +  //

>> +  if (FixedPcdGet64 (PcdSerialDbgRegisterBase)) {

>> +    ReceiveFifoDepth = 0; // Use the default value for FIFO depth

>> +    Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);

>> +    DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);

>> +    StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);

>> +

>> +    BaudRate = (UINTN)FixedPcdGet64 (PcdSerialDbgUartBaudRate);

>> +    Status = PL011UartInitializePort (

>> +               (UINTN)FixedPcdGet64 (PcdSerialDbgRegisterBase),

>> +               FixedPcdGet32 (PcdSerialDbgUartClkInHz),

>> +               &BaudRate,

>> +               &ReceiveFifoDepth,

>> +               &Parity,

>> +               &DataBits,

>> +               &StopBits

>> +               );

>> +  }

>> +

>> +  return Status;

>>  }

>>

>>  /**

>> --

>> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

>>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ryan Harkin July 7, 2016, 4:24 p.m. UTC | #4
On 7 July 2016 at 17:01, Ryan Harkin <ryan.harkin@linaro.org> wrote:
> On 7 July 2016 at 16:59, Leif Lindholm <leif.lindholm@linaro.org> wrote:

>> On Fri, Jul 01, 2016 at 12:52:06PM +0100, evan.lloyd@arm.com wrote:

>>> From: Evan Lloyd <evan.lloyd@arm.com>

>>>

>>> Juno has several serial ports, one of which may be used for a remote

>>> debug interface (e.g. gdb, WinDbg).  The debug serial port needs to

>>> be distinct from that used for UEFI trace to prevent corruption of

>>> debugger protocol messaging.

>>> The UEFI spec requires that serial devices be initialised to default

>>> settings. (11.8 Serial I/O Protocol - "The default attributes for all

>>> UART-style serial device interfaces are: 115,200 baud, ..."

>>> and 17.3.3 EFI Debugport Variable - "These defaults must be used in the

>>> absence of a DEBUGPORT variable...")

>>>

>>> This change adds initialization of the serial device reported in the

>>> ACPI DBG2 table.  The initialisation is done early in the boot to allow

>>> the possibility of remote debug of UEFI itself.

>>>

>>> NOTE: This is functionally dependent on the DBG2 table being updated in

>>> OpenPlatformPkg, but is required as a precursor to that change.

>>>

>>> Contributed-under: TianoCore Contribution Agreement 1.0

>>> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>

>>> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>

>>

>> I'd like a nod from Ryan on this one.

>

> As it happens, I've just finished testing it (on R0, R1 and R2):

>

> Tested-by: Ryan Harkin <ryan.harkin@linaro.org>

>

>

>> One style comment below.

>>

>>> ---

>>>

>>> Notes:

>>>     v2

>>>     - No code change.

>>>     - Clarified commit message in response to comments [Ard Bieshevel]

>>>       Specific points include clarity that change is not OS specific,

>>>       and pertains to any debugger use, and justification for doing it

>>>       at an early point in the process.

>>>       Confirmed with Leif that update here (not OpenPlatformPkg) is

>>>       appropriate.

>>>

>>>  ArmPlatformPkg/ArmPlatformPkg.dec                           |  5 +++

>>>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf | 15 ++++++++-

>>>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c      | 35 ++++++++++++++++++--

>>>  3 files changed, 52 insertions(+), 3 deletions(-)

>>>

>>> Code available at:

>>> https://github.com/EvanLloyd/tianocore/tree/debug_serial_v2

>>>

>>> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec

>>> index 1c05132cd625be75b0d9d1cd09950af983d1f049..5864d9835989382b79b1e6db6486fe67082df6a0 100644

>>> --- a/ArmPlatformPkg/ArmPlatformPkg.dec

>>> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec

>>> @@ -98,6 +98,11 @@ [PcdsFixedAtBuild.common]

>>>    gArmPlatformTokenSpaceGuid.PL011UartFractional|0|UINT32|0x0000002D

>>>    gArmPlatformTokenSpaceGuid.PL011UartInterrupt|0x00000000|UINT32|0x0000002F

>>>

>>> +  ## PL011 Serial Debug UART

>>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x00000000|UINT64|0x00000030

>>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|0x00000000|UINT64|0x00000031

>>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|0x00000000|UINT32|0x00000032

>>> +

>>>    ## PL061 GPIO

>>>    gArmPlatformTokenSpaceGuid.PcdPL061GpioBase|0x0|UINT32|0x00000025

>>>

>>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

>>> index 8c8b141c35a2693b618c1515cb665b9b1e81cc4e..77d18f855a833fff0d38518436ef331dfab2d7e1 100644

>>> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

>>> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

>>> @@ -1,5 +1,5 @@

>>>  #

>>> -#  Copyright (c) 2013-2015, ARM Limited. All rights reserved.

>>> +#  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>>>  #

>>>  #  This program and the accompanying materials

>>>  #  are licensed and made available under the terms and conditions of the BSD License

>>> @@ -57,6 +57,19 @@ [FixedPcd]

>>>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress

>>>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize

>>>

>>> +

>>> +  #

>>> +  # PL011 Serial Debug UART

>>> +  #

>>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase

>>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate

>>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz

>>> +

>>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate

>>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits

>>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity

>>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits

>>> +

>>>  [Pcd]

>>>    gArmTokenSpaceGuid.PcdPciMmio32Base

>>>    gArmTokenSpaceGuid.PcdPciMmio32Size

>>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

>>> index ffff5628247f61f4c2f31d3b9f7763b24f10641d..ae7f5e94acdaa5a37ba56c27fe0700c588dafcc9 100644

>>> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

>>> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

>>> @@ -1,6 +1,6 @@

>>>  /** @file

>>>  *

>>> -*  Copyright (c) 2013-2014, ARM Limited. All rights reserved.

>>> +*  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

>>>  *

>>>  *  This program and the accompanying materials

>>>  *  are licensed and made available under the terms and conditions of the BSD License

>>> @@ -18,6 +18,7 @@

>>>  #include <Library/PcdLib.h>

>>>

>>>  #include <Ppi/ArmMpCoreInfo.h>

>>> +#include <Drivers/PL011Uart.h>

>>

>> Is there an ordering requirement for the include file?

>> If not, I would prefer it before the Library includes in order to keep

>> the sort order.

>>

>> I can do this before pushing if someone tells me it's OK.

>>


I moved the new include to the top of the list and it built fine from
clean, so go for it.

>>>

>>>  #include <ArmPlatform.h>

>>>

>>> @@ -112,7 +113,37 @@ ArmPlatformInitialize (

>>>    IN  UINTN                     MpId

>>>    )

>>>  {

>>> -  return RETURN_SUCCESS;

>>> +  RETURN_STATUS       Status;

>>> +  UINT64              BaudRate;

>>> +  UINT32              ReceiveFifoDepth;

>>> +  EFI_PARITY_TYPE     Parity;

>>> +  UINT8               DataBits;

>>> +  EFI_STOP_BITS_TYPE  StopBits;

>>> +

>>> +  Status = RETURN_SUCCESS;

>>> +

>>> +  //

>>> +  // Initialize the Serial Debug UART

>>> +  //

>>> +  if (FixedPcdGet64 (PcdSerialDbgRegisterBase)) {

>>> +    ReceiveFifoDepth = 0; // Use the default value for FIFO depth

>>> +    Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);

>>> +    DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);

>>> +    StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);

>>> +

>>> +    BaudRate = (UINTN)FixedPcdGet64 (PcdSerialDbgUartBaudRate);

>>> +    Status = PL011UartInitializePort (

>>> +               (UINTN)FixedPcdGet64 (PcdSerialDbgRegisterBase),

>>> +               FixedPcdGet32 (PcdSerialDbgUartClkInHz),

>>> +               &BaudRate,

>>> +               &ReceiveFifoDepth,

>>> +               &Parity,

>>> +               &DataBits,

>>> +               &StopBits

>>> +               );

>>> +  }

>>> +

>>> +  return Status;

>>>  }

>>>

>>>  /**

>>> --

>>> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

>>>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Leif Lindholm July 7, 2016, 4:56 p.m. UTC | #5
On Thu, Jul 07, 2016 at 05:24:54PM +0100, Ryan Harkin wrote:
> On 7 July 2016 at 17:01, Ryan Harkin <ryan.harkin@linaro.org> wrote:

> > On 7 July 2016 at 16:59, Leif Lindholm <leif.lindholm@linaro.org> wrote:

> >> On Fri, Jul 01, 2016 at 12:52:06PM +0100, evan.lloyd@arm.com wrote:

> >>> From: Evan Lloyd <evan.lloyd@arm.com>

> >>>

> >>> Juno has several serial ports, one of which may be used for a remote

> >>> debug interface (e.g. gdb, WinDbg).  The debug serial port needs to

> >>> be distinct from that used for UEFI trace to prevent corruption of

> >>> debugger protocol messaging.

> >>> The UEFI spec requires that serial devices be initialised to default

> >>> settings. (11.8 Serial I/O Protocol - "The default attributes for all

> >>> UART-style serial device interfaces are: 115,200 baud, ..."

> >>> and 17.3.3 EFI Debugport Variable - "These defaults must be used in the

> >>> absence of a DEBUGPORT variable...")

> >>>

> >>> This change adds initialization of the serial device reported in the

> >>> ACPI DBG2 table.  The initialisation is done early in the boot to allow

> >>> the possibility of remote debug of UEFI itself.

> >>>

> >>> NOTE: This is functionally dependent on the DBG2 table being updated in

> >>> OpenPlatformPkg, but is required as a precursor to that change.

> >>>

> >>> Contributed-under: TianoCore Contribution Agreement 1.0

> >>> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>

> >>> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>

> >>

> >> I'd like a nod from Ryan on this one.

> >

> > As it happens, I've just finished testing it (on R0, R1 and R2):

> >

> > Tested-by: Ryan Harkin <ryan.harkin@linaro.org>

> >

> >

> >> One style comment below.

> >>

> >>> ---

> >>>

> >>> Notes:

> >>>     v2

> >>>     - No code change.

> >>>     - Clarified commit message in response to comments [Ard Bieshevel]

> >>>       Specific points include clarity that change is not OS specific,

> >>>       and pertains to any debugger use, and justification for doing it

> >>>       at an early point in the process.

> >>>       Confirmed with Leif that update here (not OpenPlatformPkg) is

> >>>       appropriate.

> >>>

> >>>  ArmPlatformPkg/ArmPlatformPkg.dec                           |  5 +++

> >>>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf | 15 ++++++++-

> >>>  ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c      | 35 ++++++++++++++++++--

> >>>  3 files changed, 52 insertions(+), 3 deletions(-)

> >>>

> >>> Code available at:

> >>> https://github.com/EvanLloyd/tianocore/tree/debug_serial_v2

> >>>

> >>> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec

> >>> index 1c05132cd625be75b0d9d1cd09950af983d1f049..5864d9835989382b79b1e6db6486fe67082df6a0 100644

> >>> --- a/ArmPlatformPkg/ArmPlatformPkg.dec

> >>> +++ b/ArmPlatformPkg/ArmPlatformPkg.dec

> >>> @@ -98,6 +98,11 @@ [PcdsFixedAtBuild.common]

> >>>    gArmPlatformTokenSpaceGuid.PL011UartFractional|0|UINT32|0x0000002D

> >>>    gArmPlatformTokenSpaceGuid.PL011UartInterrupt|0x00000000|UINT32|0x0000002F

> >>>

> >>> +  ## PL011 Serial Debug UART

> >>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x00000000|UINT64|0x00000030

> >>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|0x00000000|UINT64|0x00000031

> >>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|0x00000000|UINT32|0x00000032

> >>> +

> >>>    ## PL061 GPIO

> >>>    gArmPlatformTokenSpaceGuid.PcdPL061GpioBase|0x0|UINT32|0x00000025

> >>>

> >>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> >>> index 8c8b141c35a2693b618c1515cb665b9b1e81cc4e..77d18f855a833fff0d38518436ef331dfab2d7e1 100644

> >>> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> >>> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf

> >>> @@ -1,5 +1,5 @@

> >>>  #

> >>> -#  Copyright (c) 2013-2015, ARM Limited. All rights reserved.

> >>> +#  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

> >>>  #

> >>>  #  This program and the accompanying materials

> >>>  #  are licensed and made available under the terms and conditions of the BSD License

> >>> @@ -57,6 +57,19 @@ [FixedPcd]

> >>>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress

> >>>    gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize

> >>>

> >>> +

> >>> +  #

> >>> +  # PL011 Serial Debug UART

> >>> +  #

> >>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase

> >>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate

> >>> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz

> >>> +

> >>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate

> >>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits

> >>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity

> >>> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits

> >>> +

> >>>  [Pcd]

> >>>    gArmTokenSpaceGuid.PcdPciMmio32Base

> >>>    gArmTokenSpaceGuid.PcdPciMmio32Size

> >>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> >>> index ffff5628247f61f4c2f31d3b9f7763b24f10641d..ae7f5e94acdaa5a37ba56c27fe0700c588dafcc9 100644

> >>> --- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> >>> +++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c

> >>> @@ -1,6 +1,6 @@

> >>>  /** @file

> >>>  *

> >>> -*  Copyright (c) 2013-2014, ARM Limited. All rights reserved.

> >>> +*  Copyright (c) 2013-2016, ARM Limited. All rights reserved.

> >>>  *

> >>>  *  This program and the accompanying materials

> >>>  *  are licensed and made available under the terms and conditions of the BSD License

> >>> @@ -18,6 +18,7 @@

> >>>  #include <Library/PcdLib.h>

> >>>

> >>>  #include <Ppi/ArmMpCoreInfo.h>

> >>> +#include <Drivers/PL011Uart.h>

> >>

> >> Is there an ordering requirement for the include file?

> >> If not, I would prefer it before the Library includes in order to keep

> >> the sort order.

> >>

> >> I can do this before pushing if someone tells me it's OK.

> >>

> 

> I moved the new include to the top of the list and it built fine from

> clean, so go for it.


Thanks Ryan - and Evan.
Pushed.

> >>>

> >>>  #include <ArmPlatform.h>

> >>>

> >>> @@ -112,7 +113,37 @@ ArmPlatformInitialize (

> >>>    IN  UINTN                     MpId

> >>>    )

> >>>  {

> >>> -  return RETURN_SUCCESS;

> >>> +  RETURN_STATUS       Status;

> >>> +  UINT64              BaudRate;

> >>> +  UINT32              ReceiveFifoDepth;

> >>> +  EFI_PARITY_TYPE     Parity;

> >>> +  UINT8               DataBits;

> >>> +  EFI_STOP_BITS_TYPE  StopBits;

> >>> +

> >>> +  Status = RETURN_SUCCESS;

> >>> +

> >>> +  //

> >>> +  // Initialize the Serial Debug UART

> >>> +  //

> >>> +  if (FixedPcdGet64 (PcdSerialDbgRegisterBase)) {

> >>> +    ReceiveFifoDepth = 0; // Use the default value for FIFO depth

> >>> +    Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);

> >>> +    DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);

> >>> +    StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);

> >>> +

> >>> +    BaudRate = (UINTN)FixedPcdGet64 (PcdSerialDbgUartBaudRate);

> >>> +    Status = PL011UartInitializePort (

> >>> +               (UINTN)FixedPcdGet64 (PcdSerialDbgRegisterBase),

> >>> +               FixedPcdGet32 (PcdSerialDbgUartClkInHz),

> >>> +               &BaudRate,

> >>> +               &ReceiveFifoDepth,

> >>> +               &Parity,

> >>> +               &DataBits,

> >>> +               &StopBits

> >>> +               );

> >>> +  }

> >>> +

> >>> +  return Status;

> >>>  }

> >>>

> >>>  /**

> >>> --

> >>> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

> >>>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox

Patch

diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec
index 1c05132cd625be75b0d9d1cd09950af983d1f049..5864d9835989382b79b1e6db6486fe67082df6a0 100644
--- a/ArmPlatformPkg/ArmPlatformPkg.dec
+++ b/ArmPlatformPkg/ArmPlatformPkg.dec
@@ -98,6 +98,11 @@  [PcdsFixedAtBuild.common]
   gArmPlatformTokenSpaceGuid.PL011UartFractional|0|UINT32|0x0000002D
   gArmPlatformTokenSpaceGuid.PL011UartInterrupt|0x00000000|UINT32|0x0000002F
 
+  ## PL011 Serial Debug UART
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x00000000|UINT64|0x00000030
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|0x00000000|UINT64|0x00000031
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|0x00000000|UINT32|0x00000032
+
   ## PL061 GPIO
   gArmPlatformTokenSpaceGuid.PcdPL061GpioBase|0x0|UINT32|0x00000025
 
diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf
index 8c8b141c35a2693b618c1515cb665b9b1e81cc4e..77d18f855a833fff0d38518436ef331dfab2d7e1 100644
--- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf
+++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJunoLib.inf
@@ -1,5 +1,5 @@ 
 #
-#  Copyright (c) 2013-2015, ARM Limited. All rights reserved.
+#  Copyright (c) 2013-2016, ARM Limited. All rights reserved.
 #
 #  This program and the accompanying materials
 #  are licensed and made available under the terms and conditions of the BSD License
@@ -57,6 +57,19 @@  [FixedPcd]
   gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress
   gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize
 
+
+  #
+  # PL011 Serial Debug UART
+  #
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz
+
+  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
+  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
+  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
+  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
+
 [Pcd]
   gArmTokenSpaceGuid.PcdPciMmio32Base
   gArmTokenSpaceGuid.PcdPciMmio32Size
diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c
index ffff5628247f61f4c2f31d3b9f7763b24f10641d..ae7f5e94acdaa5a37ba56c27fe0700c588dafcc9 100644
--- a/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c
+++ b/ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/ArmJuno.c
@@ -1,6 +1,6 @@ 
 /** @file
 *
-*  Copyright (c) 2013-2014, ARM Limited. All rights reserved.
+*  Copyright (c) 2013-2016, ARM Limited. All rights reserved.
 *
 *  This program and the accompanying materials
 *  are licensed and made available under the terms and conditions of the BSD License
@@ -18,6 +18,7 @@ 
 #include <Library/PcdLib.h>
 
 #include <Ppi/ArmMpCoreInfo.h>
+#include <Drivers/PL011Uart.h>
 
 #include <ArmPlatform.h>
 
@@ -112,7 +113,37 @@  ArmPlatformInitialize (
   IN  UINTN                     MpId
   )
 {
-  return RETURN_SUCCESS;
+  RETURN_STATUS       Status;
+  UINT64              BaudRate;
+  UINT32              ReceiveFifoDepth;
+  EFI_PARITY_TYPE     Parity;
+  UINT8               DataBits;
+  EFI_STOP_BITS_TYPE  StopBits;
+
+  Status = RETURN_SUCCESS;
+
+  //
+  // Initialize the Serial Debug UART
+  //
+  if (FixedPcdGet64 (PcdSerialDbgRegisterBase)) {
+    ReceiveFifoDepth = 0; // Use the default value for FIFO depth
+    Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);
+    DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);
+    StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);
+
+    BaudRate = (UINTN)FixedPcdGet64 (PcdSerialDbgUartBaudRate);
+    Status = PL011UartInitializePort (
+               (UINTN)FixedPcdGet64 (PcdSerialDbgRegisterBase),
+               FixedPcdGet32 (PcdSerialDbgUartClkInHz),
+               &BaudRate,
+               &ReceiveFifoDepth,
+               &Parity,
+               &DataBits,
+               &StopBits
+               );
+  }
+
+  return Status;
 }
 
 /**