Browse Source

dw: mmc: Add sd driver module support

Signed-off-by: Yuin Yee Chew <yuinyee.chew@linux.starfivetech.com>
Yuin Yee Chew 1 year ago
parent
commit
d6fab186b6

+ 32 - 32
Silicon/Synopsys/DesignWare/Drivers/DwEmmcDxe/DwEmmc.h

@@ -18,38 +18,38 @@
 #include <Protocol/EmbeddedGpio.h>
 
 // DW MMC Registers
-#define DWEMMC_CTRL             ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x000)
-#define DWEMMC_PWREN            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x004)
-#define DWEMMC_CLKDIV           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x008)
-#define DWEMMC_CLKSRC           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x00c)
-#define DWEMMC_CLKENA           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x010)
-#define DWEMMC_TMOUT            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x014)
-#define DWEMMC_CTYPE            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x018)
-#define DWEMMC_BLKSIZ           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x01c)
-#define DWEMMC_BYTCNT           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x020)
-#define DWEMMC_INTMASK          ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x024)
-#define DWEMMC_CMDARG           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x028)
-#define DWEMMC_CMD              ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x02c)
-#define DWEMMC_RESP0            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x030)
-#define DWEMMC_RESP1            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x034)
-#define DWEMMC_RESP2            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x038)
-#define DWEMMC_RESP3            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x03c)
-#define DWEMMC_RINTSTS          ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x044)
-#define DWEMMC_STATUS           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x048)
-#define DWEMMC_FIFOTH           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x04c)
-#define DWEMMC_TCBCNT           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x05c)
-#define DWEMMC_TBBCNT           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x060)
-#define DWEMMC_DEBNCE           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x064)
-#define DWEMMC_HCON             ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x070)
-#define DWEMMC_UHSREG           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x074)
-#define DWEMMC_BMOD             ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x080)
-#define DWEMMC_DBADDR           ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x088)
-#define DWEMMC_IDSTS            ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x08c)
-#define DWEMMC_IDINTEN          ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x090)
-#define DWEMMC_DSCADDR          ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x094)
-#define DWEMMC_BUFADDR          ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0x098)
-#define DWEMMC_CARDTHRCTL       ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0X100)
-#define DWEMMC_DATA             ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress) + 0X200)
+#define DWEMMC_CTRL             ((PcdDwDxeBaseAddress) + 0x000)
+#define DWEMMC_PWREN            ((PcdDwDxeBaseAddress) + 0x004)
+#define DWEMMC_CLKDIV           ((PcdDwDxeBaseAddress) + 0x008)
+#define DWEMMC_CLKSRC           ((PcdDwDxeBaseAddress) + 0x00c)
+#define DWEMMC_CLKENA           ((PcdDwDxeBaseAddress) + 0x010)
+#define DWEMMC_TMOUT            ((PcdDwDxeBaseAddress) + 0x014)
+#define DWEMMC_CTYPE            ((PcdDwDxeBaseAddress) + 0x018)
+#define DWEMMC_BLKSIZ           ((PcdDwDxeBaseAddress) + 0x01c)
+#define DWEMMC_BYTCNT           ((PcdDwDxeBaseAddress) + 0x020)
+#define DWEMMC_INTMASK          ((PcdDwDxeBaseAddress) + 0x024)
+#define DWEMMC_CMDARG           ((PcdDwDxeBaseAddress) + 0x028)
+#define DWEMMC_CMD              ((PcdDwDxeBaseAddress) + 0x02c)
+#define DWEMMC_RESP0            ((PcdDwDxeBaseAddress) + 0x030)
+#define DWEMMC_RESP1            ((PcdDwDxeBaseAddress) + 0x034)
+#define DWEMMC_RESP2            ((PcdDwDxeBaseAddress) + 0x038)
+#define DWEMMC_RESP3            ((PcdDwDxeBaseAddress) + 0x03c)
+#define DWEMMC_RINTSTS          ((PcdDwDxeBaseAddress) + 0x044)
+#define DWEMMC_STATUS           ((PcdDwDxeBaseAddress) + 0x048)
+#define DWEMMC_FIFOTH           ((PcdDwDxeBaseAddress) + 0x04c)
+#define DWEMMC_TCBCNT           ((PcdDwDxeBaseAddress) + 0x05c)
+#define DWEMMC_TBBCNT           ((PcdDwDxeBaseAddress) + 0x060)
+#define DWEMMC_DEBNCE           ((PcdDwDxeBaseAddress) + 0x064)
+#define DWEMMC_HCON             ((PcdDwDxeBaseAddress) + 0x070)
+#define DWEMMC_UHSREG           ((PcdDwDxeBaseAddress) + 0x074)
+#define DWEMMC_BMOD             ((PcdDwDxeBaseAddress) + 0x080)
+#define DWEMMC_DBADDR           ((PcdDwDxeBaseAddress) + 0x088)
+#define DWEMMC_IDSTS            ((PcdDwDxeBaseAddress) + 0x08c)
+#define DWEMMC_IDINTEN          ((PcdDwDxeBaseAddress) + 0x090)
+#define DWEMMC_DSCADDR          ((PcdDwDxeBaseAddress) + 0x094)
+#define DWEMMC_BUFADDR          ((PcdDwDxeBaseAddress) + 0x098)
+#define DWEMMC_CARDTHRCTL       ((PcdDwDxeBaseAddress) + 0X100)
+#define DWEMMC_DATA             ((PcdDwDxeBaseAddress) + 0X200)
 
 #define CMD_UPDATE_CLK                          0x80202000
 #define CMD_START_BIT                           (1 << 31)

+ 5 - 0
Silicon/Synopsys/DesignWare/Drivers/DwEmmcDxe/DwEmmcDxe.c

@@ -25,6 +25,11 @@
 
 #include <Protocol/MmcHost.h>
 
+#ifdef CONFIG_DWEMMC
+#define PcdDwDxeBaseAddress ((UINT32)PcdGet32 (PcdDwEmmcDxeBaseAddress))
+#elif CONFIG_DWSDMMC
+#define PcdDwDxeBaseAddress ((UINT32)PcdGet32 (PcdDwSdDxeBaseAddress))
+#endif
 #include "DwEmmc.h"
 
 #define DWEMMC_DESC_PAGE                1

+ 55 - 0
Silicon/Synopsys/DesignWare/Drivers/DwEmmcDxe/DwSdmmcDxe.inf

@@ -0,0 +1,55 @@
+#/** @file
+#  INF file for the SdMMC Host Protocol implementation for the DesignWare MMC.
+#
+#  WARNING:
+#  This driver fails to follow the UEFI driver model without a good
+#  reason, and only remains in the tree because it is still used by
+#  a small number of platforms. It will be removed when no longer used.
+#
+#  Copyright (c) 2014-2017, Linaro Limited. All rights reserved.
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#**/
+
+[Defines]
+  INF_VERSION                    = 0x00010019
+  BASE_NAME                      = DwSdmmcDxe
+  FILE_GUID                      = b549f005-4bd4-4020-a0cb-06f5478a68c3
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+
+  ENTRY_POINT                    = DwEmmcDxeInitialize
+
+[Sources.common]
+  DwEmmcDxe.c
+
+[Packages]
+  EmbeddedPkg/EmbeddedPkg.dec
+  MdePkg/MdePkg.dec
+  Silicon/Synopsys/DesignWare/DesignWare.dec
+
+[LibraryClasses]
+  BaseLib
+  BaseMemoryLib
+  CacheMaintenanceLib
+  IoLib
+  MemoryAllocationLib
+  TimerLib
+  UefiDriverEntryPoint
+  UefiLib
+
+[Protocols]
+  gEfiCpuArchProtocolGuid
+  gEfiDevicePathProtocolGuid
+  gEmbeddedMmcHostProtocolGuid
+
+[Pcd]
+  gDesignWareTokenSpaceGuid.PcdDwSdDxeBaseAddress
+  gDesignWareTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz
+  gDesignWareTokenSpaceGuid.PcdDwEmmcDxeMaxClockFreqInHz
+  gDesignWareTokenSpaceGuid.PcdDwEmmcDxeFifoDepth
+  gDesignWareTokenSpaceGuid.PcdDwPermitObsoleteDrivers
+
+[Depex]
+  TRUE