[edk2-devel] [PATCH v3 1/1] MdeModulePkg/Pci: Fixed Asserts in SCT PCIIO Protocol Test.

Wu, Hao A hao.a.wu at intel.com
Wed Feb 26 01:54:33 UTC 2020


> -----Original Message-----
> From: Gaurav Jain [mailto:gaurav.jain at nxp.com]
> Sent: Tuesday, February 25, 2020 8:01 PM
> To: devel at edk2.groups.io
> Cc: Wang, Jian J; Wu, Hao A; Ni, Ray; Ard Biesheuvel; Pankaj Bansal; Gaurav
> Jain
> Subject: [PATCH v3 1/1] MdeModulePkg/Pci: Fixed Asserts in SCT PCIIO
> Protocol Test.
> 
> ASSERT in PollMem_Conf, CopyMem_Conf, SetBarAttributes_Conf
> Conformance Test.
> SCT Test expect return as Invalid Parameter or Unsupported.
> Added Checks for Function Parameters.
> return Invalid or Unsupported if Check fails.
> 
> Added Checks in PciIoPollIo(), PciIoIoRead()
> PciIoIoWrite()
> 
> Signed-off-by: Gaurav Jain <gaurav.jain at nxp.com>
> ---
> 
> Notes:
>     v3
>     - Corrected Width check in PciIoIoRead, PciIoIoWrite.
>     - Removed BarIndex check as it is already in GetBarResource().
>     - Moved DEV_SUPPORTED_ATTRIBUTES Macro from
> NonDiscoverablePciDeviceIo.c
>       to NonDiscoverablePciDeviceIo.h


Reviewed-by: Hao A Wu <hao.a.wu at intel.com>
I will push this patch *after* the upcoming edk2-stable202002 tag.

Best Regards,
Hao Wu


> 
>     v2
>     - Reverted ASSERT(FALSE) code.
>     - Added Checks for Width, BarIndex, Buffer,
>       Address range in PciIoIoRead, PciIoIoWrite.
>     - Added Checks for Width, BarIndex, Result,
>       Address range in PciIoPollIo, PciIoPollMem,
>       PciIoCopyMem.
>     - Added Checks for Attributes, BarIndex,
>       Address range in PciIoSetBarAttributes.
> 
>  .../NonDiscoverablePciDeviceIo.c              | 155 +++++++++++++++++-
>  .../NonDiscoverablePciDeviceIo.h              |   3 +
>  2 files changed, 155 insertions(+), 3 deletions(-)
> 
> diff --git
> a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.c
> b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.c
> index 2d55c9699322..c3e83003a01c 100644
> ---
> a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.c
> +++
> b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.c
> @@ -93,6 +93,31 @@ PciIoPollMem (
>    OUT UINT64                      *Result
>    )
>  {
> +  NON_DISCOVERABLE_PCI_DEVICE         *Dev;
> +  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;
> +  UINTN                               Count;
> +  EFI_STATUS                          Status;
> +
> +  if ((UINT32)Width > EfiPciIoWidthUint64) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  if (Result == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);
> +  Count = 1;
> +
> +  Status = GetBarResource (Dev, BarIndex, &Desc);
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
>    ASSERT (FALSE);
>    return EFI_UNSUPPORTED;
>  }
> @@ -126,6 +151,31 @@ PciIoPollIo (
>    OUT UINT64                      *Result
>    )
>  {
> +  NON_DISCOVERABLE_PCI_DEVICE         *Dev;
> +  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;
> +  UINTN                               Count;
> +  EFI_STATUS                          Status;
> +
> +  if ((UINT32)Width > EfiPciIoWidthUint64) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  if (Result == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);
> +  Count = 1;
> +
> +  Status = GetBarResource (Dev, BarIndex, &Desc);
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
>    ASSERT (FALSE);
>    return EFI_UNSUPPORTED;
>  }
> @@ -396,6 +446,29 @@ PciIoIoRead (
>    IN OUT VOID                         *Buffer
>    )
>  {
> +  NON_DISCOVERABLE_PCI_DEVICE         *Dev;
> +  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;
> +  EFI_STATUS                          Status;
> +
> +  if ((UINT32)Width >= EfiPciIoWidthMaximum) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  if (Buffer == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);
> +
> +  Status = GetBarResource (Dev, BarIndex, &Desc);
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
>    ASSERT (FALSE);
>    return EFI_UNSUPPORTED;
>  }
> @@ -425,6 +498,29 @@ PciIoIoWrite (
>    IN OUT VOID                         *Buffer
>    )
>  {
> +  NON_DISCOVERABLE_PCI_DEVICE         *Dev;
> +  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;
> +  EFI_STATUS                          Status;
> +
> +  if ((UINT32)Width >= EfiPciIoWidthMaximum) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  if (Buffer == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);
> +
> +  Status = GetBarResource (Dev, BarIndex, &Desc);
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
>    ASSERT (FALSE);
>    return EFI_UNSUPPORTED;
>  }
> @@ -556,6 +652,35 @@ PciIoCopyMem (
>    IN     UINTN                        Count
>    )
>  {
> +  NON_DISCOVERABLE_PCI_DEVICE         *Dev;
> +  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *DestDesc;
> +  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *SrcDesc;
> +  EFI_STATUS                          Status;
> +
> +  if ((UINT32)Width > EfiPciIoWidthUint64) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);
> +
> +  Status = GetBarResource (Dev, DestBarIndex, &DestDesc);
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  if (DestOffset + (Count << (Width & 0x3)) > DestDesc->AddrLen) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
> +  Status = GetBarResource (Dev, SrcBarIndex, &SrcDesc);
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  if (SrcOffset + (Count << (Width & 0x3)) > SrcDesc->AddrLen) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
>    ASSERT (FALSE);
>    return EFI_UNSUPPORTED;
>  }
> @@ -1265,9 +1390,6 @@ PciIoAttributes (
>    NON_DISCOVERABLE_PCI_DEVICE   *Dev;
>    BOOLEAN                       Enable;
> 
> -  #define DEV_SUPPORTED_ATTRIBUTES \
> -    (EFI_PCI_DEVICE_ENABLE |
> EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE)
> -
>    Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);
> 
>    if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) {
> @@ -1414,6 +1536,33 @@ PciIoSetBarAttributes (
>    IN OUT UINT64                       *Length
>    )
>  {
> +  NON_DISCOVERABLE_PCI_DEVICE         *Dev;
> +  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;
> +  EFI_PCI_IO_PROTOCOL_WIDTH           Width;
> +  UINTN                               Count;
> +  EFI_STATUS                          Status;
> +
> +  if ((Attributes & (~DEV_SUPPORTED_ATTRIBUTES)) != 0) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
> +  if (Offset == NULL || Length == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);
> +  Width = EfiPciIoWidthUint8;
> +  Count = (UINT32) *Length;
> +
> +  Status = GetBarResource(Dev, BarIndex, &Desc);
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  if (*Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
>    ASSERT (FALSE);
>    return EFI_UNSUPPORTED;
>  }
> diff --git
> a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.h
> b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.h
> index 6511fbb13770..15541c281153 100644
> ---
> a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.h
> +++
> b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverableP
> ciDeviceIo.h
> @@ -30,6 +30,9 @@
>          CR (PciIoPointer, NON_DISCOVERABLE_PCI_DEVICE, PciIo, \
>              NON_DISCOVERABLE_PCI_DEVICE_SIG)
> 
> +#define DEV_SUPPORTED_ATTRIBUTES \
> +    (EFI_PCI_DEVICE_ENABLE |
> EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE)
> +
>  #define PCI_ID_VENDOR_UNKNOWN         0xffff
>  #define PCI_ID_DEVICE_DONTCARE        0x0000
> 
> --
> 2.17.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#54834): https://edk2.groups.io/g/devel/message/54834
Mute This Topic: https://groups.io/mt/71528680/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list