summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2018-02-28 19:06:08 +0000
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2018-03-07 12:59:00 +0000
commit4013fb55b9c05ebf87b4eeb43efa03d03bc0d8e1 (patch)
tree023a74b066e1a18913277e6c2135ed73af11dfb2
parentcd06670432e3acb533b650086eb433c0599c3a0e (diff)
Silicon/SynQuacer/AcpiTables: take presence detect of PCI0 into account
On the SynQuacer Evalution Board, PCIe RC #0 is not clocked if no card is inserted into the PCIe slot, and so any attempt to access the device registers will lock up the system. So let's check the presence detect pin directly in the _STA implementation of PCI0. This needs to be done before the config space check, because that access itself will lock the system if no card is inserted. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org> Reviewed-by: Graeme Gregory <graeme.gregory@linaro.org>
-rw-r--r--Silicon/Socionext/SynQuacer/AcpiTables/AcpiSsdtRootPci.asl15
-rw-r--r--Silicon/Socionext/SynQuacer/AcpiTables/AcpiTables.inf1
2 files changed, 16 insertions, 0 deletions
diff --git a/Silicon/Socionext/SynQuacer/AcpiTables/AcpiSsdtRootPci.asl b/Silicon/Socionext/SynQuacer/AcpiTables/AcpiSsdtRootPci.asl
index 24a3aa3a..51e9d0b2 100644
--- a/Silicon/Socionext/SynQuacer/AcpiTables/AcpiSsdtRootPci.asl
+++ b/Silicon/Socionext/SynQuacer/AcpiTables/AcpiSsdtRootPci.asl
@@ -14,6 +14,7 @@
**/
+#include <Platform/MemoryMap.h>
#include <Platform/Pcie.h>
#include "AcpiTables.h"
@@ -37,7 +38,21 @@ DefinitionBlock ("SsdtPci.aml", "SSDT", 1, "SNI", "SYNQUACR",
VPID, 16,
}
+ OperationRegion (GPIO, SystemMemory, SYNQUACER_GPIO_BASE, 8)
+ Field (GPIO, DWordAcc, NoLock, Preserve) {
+ , 39,
+ PRDT, 1,
+ , 24,
+ }
+
Method (_STA, 0x0, Serialized) {
+ If (!LEqual (FixedPcdGet8 (PcdPcie0PresenceDetectGpioPin), 0xff)) {
+ Store (PRDT, local0)
+ If (!LEqual (local0, 0x0)) {
+ Return (0x0)
+ }
+ }
+
//
// Check whether the VID/PID of device #1 on bus #0 equals 0xffff.
// If this is not the case, we are dealing with a ghost device,
diff --git a/Silicon/Socionext/SynQuacer/AcpiTables/AcpiTables.inf b/Silicon/Socionext/SynQuacer/AcpiTables/AcpiTables.inf
index b1b6bbaa..bca8354d 100644
--- a/Silicon/Socionext/SynQuacer/AcpiTables/AcpiTables.inf
+++ b/Silicon/Socionext/SynQuacer/AcpiTables/AcpiTables.inf
@@ -62,3 +62,4 @@
gSynQuacerTokenSpaceGuid.PcdNetsecEepromBase
gSynQuacerTokenSpaceGuid.PcdNetsecPhyAddress
+ gSynQuacerTokenSpaceGuid.PcdPcie0PresenceDetectGpioPin