Fixed the issue that SD card cannot be detected by BIOS. Add SD host and device 
drivers.

Signed-off-by: zwei4 <[email protected]>
Cc: Mike Wu <[email protected]>
Cc: Benjamin You <[email protected]>
Cc: Mang Guo <[email protected]>
Cc: Shifei Lu <[email protected]>
Cc: Ruth Li <[email protected]>
---
 .../Common/PlatformSettings/PlatformDxe/Platform.c | 47 ++++++++++++++++++++++
 .../PlatformSettings/PlatformDxe/PlatformDxe.inf   |  1 +
 .../BroxtonPlatformPkg/PlatformDsc/Components.dsc  |  4 ++
 Platform/BroxtonPlatformPkg/PlatformPkg.fdf        |  3 ++
 4 files changed, 55 insertions(+)

diff --git 
a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c 
b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c
index e034e6ed8..02dcc2750 100644
--- a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c
+++ b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c
@@ -641,6 +641,50 @@ InitPlatformResolution (
   PcdSet32S (PcdVideoVerticalResolution, 
PanelResolution[mSystemConfiguration.IgdFlatPanel].VerticalResolution);
 }
 
+VOID 
+OverrideSdCardPresence (
+  VOID
+  )
+{
+  UINT32 PciP2sbBar0RegOffset;
+  UINT32 P2sbMmioBar;
+  UINT32 Gpio177PadConfigDW0RegAdd;
+  UINT32 Gpio177RxState;
+
+  PciP2sbBar0RegOffset = (UINT32) MmPciAddress (
+                                    0,
+                                    DEFAULT_PCI_BUS_NUMBER_SC,
+                                    PCI_DEVICE_NUMBER_P2SB,
+                                    PCI_FUNCTION_NUMBER_P2SB,
+                                    R_P2SB_BASE
+                                    );
+  //
+  // Read back P2SB MMIO BAR Base Addr
+  //
+  P2sbMmioBar = MmioRead32 (PciP2sbBar0RegOffset);
+  if (P2sbMmioBar == 0xFFFFFFFF) {
+    //
+    // P2SB has been hidden, read it from Pcd
+    //
+    P2sbMmioBar = PcdGet32 (PcdP2SBBaseAddress);
+  } else {
+    P2sbMmioBar &= B_P2SB_BAR_BA;
+  }
+  
+  Gpio177PadConfigDW0RegAdd = P2SB_MMIO_ADDR (P2sbMmioBar, SOUTHWEST, 0x5D0);
+  Gpio177RxState = MmioRead32(Gpio177PadConfigDW0RegAdd) & BIT1;
+  DEBUG ((DEBUG_INFO, "Gpio177PadConfigDW0RegAdd: 0x%X\n", 
Gpio177PadConfigDW0RegAdd));
+  DEBUG ((DEBUG_INFO, "Gpio177RxState: 0x%X\n", Gpio177RxState));
+
+  if (Gpio177RxState == 0x00) {
+    SideBandAndThenOr32 (
+      0xD6,
+      0x0600 + 0x08,
+      0xFFFFFFFF,
+      BIT5
+      );
+  };
+}
 
 /**
   This is the standard EFI driver point for the Driver. This
@@ -872,6 +916,9 @@ InitializePlatform (
                   &EfiExitBootServicesEvent
                   );
 
+  
+  OverrideSdCardPresence(); 
+        
   return EFI_SUCCESS;
 }
 
diff --git 
a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf
 
b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf
index e00588170..c2714a6ae 100644
--- 
a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf
+++ 
b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf
@@ -127,6 +127,7 @@
   gEfiBxtTokenSpaceGuid.PcdPmcGcrBaseAddress
   gPlatformModuleTokenSpaceGuid.PcdPBTNDisableInterval
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdFastPS2Detection
+  gEfiBxtTokenSpaceGuid.PcdP2SBBaseAddress
 
 [Depex]
   gEfiPciRootBridgeIoProtocolGuid     AND
diff --git a/Platform/BroxtonPlatformPkg/PlatformDsc/Components.dsc 
b/Platform/BroxtonPlatformPkg/PlatformDsc/Components.dsc
index 53658cf79..0edcd9867 100644
--- a/Platform/BroxtonPlatformPkg/PlatformDsc/Components.dsc
+++ b/Platform/BroxtonPlatformPkg/PlatformDsc/Components.dsc
@@ -353,6 +353,10 @@
   $(PLATFORM_SI_PACKAGE)/SouthCluster/Sdio/Dxe/MMC/MmcHostDxe/MmcHostDxe.inf
 
   
$(PLATFORM_SI_PACKAGE)/SouthCluster/Sdio/Dxe/MMC/MmcMediaDeviceDxe/MmcMediaDeviceDxe.inf
+  
+  
$(PLATFORM_SI_PACKAGE)/SouthCluster/Sdio/Dxe/SD/SdControllerDxe/SdControllerDxe.inf
+  
$(PLATFORM_SI_PACKAGE)/SouthCluster/Sdio/Dxe/SD/SdMediaDeviceDxe/SdMediaDeviceDxe.inf
+    
 
   !if $(ACPI50_ENABLE) == TRUE
     
MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferDxe.inf
diff --git a/Platform/BroxtonPlatformPkg/PlatformPkg.fdf 
b/Platform/BroxtonPlatformPkg/PlatformPkg.fdf
index 0d9a087f3..404efd156 100644
--- a/Platform/BroxtonPlatformPkg/PlatformPkg.fdf
+++ b/Platform/BroxtonPlatformPkg/PlatformPkg.fdf
@@ -447,6 +447,9 @@ APRIORI DXE {
   INF 
$(PLATFORM_SI_PACKAGE)/SouthCluster/Sdio/Dxe/MMC/MmcMediaDeviceDxe/MmcMediaDeviceDxe.inf
 !endif
 
+  INF 
$(PLATFORM_SI_PACKAGE)/SouthCluster/Sdio/Dxe/SD/SdControllerDxe/SdControllerDxe.inf
+  INF 
$(PLATFORM_SI_PACKAGE)/SouthCluster/Sdio/Dxe/SD/SdMediaDeviceDxe/SdMediaDeviceDxe.inf
+    
   INF IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
 
   #
-- 
2.11.0.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to