DynamicTablesPkg: AcpiDbg2Lib: Prepare to support other archs

Allow other architectures to reuse the AcpiDbg2Lib by extracting
the Arm specific part of the table generation.

Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
Pierre Gondois 2024-06-10 14:00:00 +02:00 committed by mergify[bot]
parent e69e1eea2c
commit 2e6076edaf
5 changed files with 207 additions and 7 deletions

View File

@ -18,6 +18,13 @@
[Sources]
Dbg2Generator.c
Dbg2Generator.h
[Sources.ARM, Sources.AARCH64]
Arm/ArmDbg2Generator.c
[Sources.IA32, Sources.X86]
Dbg2GeneratorNull.c
[Packages.ARM, Packages.AARCH64]
ArmPlatformPkg/ArmPlatformPkg.dec

View File

@ -0,0 +1,67 @@
/** @file
Arm DBG2 Table Generator
Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
- Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
**/
#include <ConfigurationManagerObject.h>
#include <Library/PL011UartLib.h>
#include <Protocol/SerialIo.h>
#include "Dbg2Generator.h"
/**
Initialise the serial port to the specified settings.
The serial port is re-configured only if the specified settings
are different from the current settings.
All unspecified settings will be set to the default values.
@param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing
the serial port.
@param BaudRate The baud rate of the serial device. If the
baud rate is not supported, the speed will be
reduced 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. Value of 0 will use the
device's default FIFO depth.
@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 RETURN_SUCCESS All attributes were set correctly on the
serial device.
@retval RETURN_INVALID_PARAMETER One or more of the attributes has an
unsupported value.
**/
RETURN_STATUS
EFIAPI
Dbg2InitializePort (
IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo,
IN OUT UINT64 *BaudRate,
IN OUT UINT32 *ReceiveFifoDepth,
IN OUT EFI_PARITY_TYPE *Parity,
IN OUT UINT8 *DataBits,
IN OUT EFI_STOP_BITS_TYPE *StopBits
)
{
return PL011UartInitializePort (
(UINTN)SerialPortInfo->BaseAddress,
SerialPortInfo->Clock,
BaudRate,
ReceiveFifoDepth,
Parity,
DataBits,
StopBits
);
}

View File

@ -14,7 +14,6 @@
#include <Library/AcpiLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PL011UartLib.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/SerialIo.h>
@ -26,9 +25,11 @@
#include <Library/TableHelperLib.h>
#include <Protocol/ConfigurationManagerProtocol.h>
#include "Dbg2Generator.h"
/** ARM standard DBG2 Table Generator
Constructs the DBG2 table for PL011 or SBSA UART peripherals.
Constructs the DBG2 table for corresponding DBG2 peripheral.
Requirements:
The following Configuration Manager Object(s) are required by
@ -169,7 +170,7 @@ DBG2_TABLE AcpiDbg2 = {
DBG2_DEBUG_PORT_DDI (
0, // {Template}: Serial Port Subtype
0, // {Template}: Serial Port Base Address
PL011_UART_LENGTH,
0, // {Template}: Serial Port Base Address Size
NAMESPACE_STR_DBG_PORT0
)
}
@ -186,7 +187,7 @@ GET_OBJECT_LIST (
CM_ARCH_COMMON_SERIAL_PORT_INFO
);
/** Initialize the PL011/SBSA UART with the parameters obtained from
/** Initialize the DBG2 UART with the parameters obtained from
the Configuration Manager.
@param [in] SerialPortInfo Pointer to the Serial Port Information.
@ -218,9 +219,8 @@ SetupDebugUart (
StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);
BaudRate = SerialPortInfo->BaudRate;
Status = PL011UartInitializePort (
(UINTN)SerialPortInfo->BaseAddress,
SerialPortInfo->Clock,
Status = Dbg2InitializePort (
SerialPortInfo,
&BaudRate,
&ReceiveFifoDepth,
&Parity,
@ -460,6 +460,9 @@ BuildDbg2TableEx (
(SerialPortInfo->PortSubtype ==
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART))
{
// Setup the PL011 length.
AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].AddressSize = PL011_UART_LENGTH;
// Initialize the serial port
Status = SetupDebugUart (SerialPortInfo);
if (EFI_ERROR (Status)) {
@ -470,6 +473,13 @@ BuildDbg2TableEx (
));
goto error_handler;
}
} else if ((SerialPortInfo->PortSubtype ==
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_16550_WITH_GAS))
{
AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].AddressSize = SIZE_4KB;
} else {
// Try to catch other serial ports, but don't return an error.
ASSERT (0);
}
TableList[0] = (EFI_ACPI_DESCRIPTION_HEADER *)&AcpiDbg2;

View File

@ -0,0 +1,56 @@
/** @file
DBG2 Table Generator
Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
- Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
**/
#ifndef DBG2_GENERATOR_H_
#define DBG2_GENERATOR_H_
/**
Initialise the serial port to the specified settings.
The serial port is re-configured only if the specified settings
are different from the current settings.
All unspecified settings will be set to the default values.
@param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing
the serial port.
@param BaudRate The baud rate of the serial device. If the
baud rate is not supported, the speed will be
reduced 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. Value of 0 will use the
device's default FIFO depth.
@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 RETURN_SUCCESS All attributes were set correctly on the
serial device.
@retval RETURN_INVALID_PARAMETER One or more of the attributes has an
unsupported value.
**/
RETURN_STATUS
EFIAPI
Dbg2InitializePort (
IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo,
IN OUT UINT64 *BaudRate,
IN OUT UINT32 *ReceiveFifoDepth,
IN OUT EFI_PARITY_TYPE *Parity,
IN OUT UINT8 *DataBits,
IN OUT EFI_STOP_BITS_TYPE *StopBits
);
#endif // DBG2_GENERATOR_H_

View File

@ -0,0 +1,60 @@
/** @file
Common DBG2 Table Generator
Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
- Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
**/
#include <ConfigurationManagerObject.h>
#include <Protocol/SerialIo.h>
#include "Dbg2Generator.h"
/**
Initialise the serial port to the specified settings.
The serial port is re-configured only if the specified settings
are different from the current settings.
All unspecified settings will be set to the default values.
@param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing
the serial port.
@param BaudRate The baud rate of the serial device. If the
baud rate is not supported, the speed will be
reduced 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. Value of 0 will use the
device's default FIFO depth.
@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 RETURN_SUCCESS All attributes were set correctly on the
serial device.
@retval RETURN_UNSUPPORTED Not supported.
@retval RETURN_INVALID_PARAMETER One or more of the attributes has an
unsupported value.
**/
RETURN_STATUS
EFIAPI
Dbg2InitializePort (
IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo,
IN OUT UINT64 *BaudRate,
IN OUT UINT32 *ReceiveFifoDepth,
IN OUT EFI_PARITY_TYPE *Parity,
IN OUT UINT8 *DataBits,
IN OUT EFI_STOP_BITS_TYPE *StopBits
)
{
// Not implemented.
return RETURN_UNSUPPORTED;
}