Browse Source

SpcrFeaturePkg: Modify PCI device interrupt setting.

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3708

The original code will cause FWTS V21.08.00 testing failed.
 spcr: SPCR PC-AT compatible IRQ 0xff is invalid
 spcr: SPCR PCI flags compatibility bit 0 is 0, expecting 1 for PCI device

Now modify the SpcrAcpi for following:
1. Disable the support of PC-AT compatible IRQ support.
   Now only support IO-APIC interrupt type.
2. Set irq to 0.
3. Set the GSI to the value read from PCI device cfg space 0x3C.
4. Set PCI Flags to 1.

Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Signed-off-by: Ming Tan <ming.tan@intel.com>
Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Reviewed-by: Abdul Lateef Attar <abdattar@amd.com>
Ming Tan 2 years ago
parent
commit
e9149e2c1b

+ 4 - 1
Features/Intel/OutOfBandManagement/SpcrFeaturePkg/SpcrAcpiDxe/SpcrAcpi.c

@@ -324,7 +324,9 @@ GetPciTypeInfo (
   }
 
   gSpcrInfo.BaseAddress.Address = BaseAddress;
-  gSpcrInfo.Irq = (UINT8) Irq;
+  gSpcrInfo.InterruptType = EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_APIC;
+  gSpcrInfo.Irq = 0;
+  gSpcrInfo.GlobalSystemInterrupt = (UINT32)Irq;
 
   gSpcrInfo.PciDeviceId       = DeviceId;
   gSpcrInfo.PciVendorId       = VendorId;
@@ -332,6 +334,7 @@ GetPciTypeInfo (
   gSpcrInfo.PciDeviceNumber   = (UINT8) Device;
   gSpcrInfo.PciFunctionNumber = (UINT8) Function;
   gSpcrInfo.PciSegment        = (UINT8) SegNum;
+  gSpcrInfo.PciFlags          = 1;
 
 Done:
   if (Resources != NULL) {