]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c
EmbeddedPkg: Fix Command Argument for SD/eMMC R/W operation.
[mirror_edk2.git] / EmbeddedPkg / Universal / MmcDxe / MmcBlockIo.c
index a2b923270cc7cbb234eb0f2e15e24bdba36ed7e4..1dea7d35febbaad7f262225f9b5fd5a00e7d3026 100644 (file)
@@ -148,12 +148,23 @@ MmcTransferBlock (
   MmcHostInstance = MMC_HOST_INSTANCE_FROM_BLOCK_IO_THIS (This);\r
   MmcHost = MmcHostInstance->MmcHost;\r
 \r
-  //Set command argument based on the card access mode (Byte mode or Block mode)\r
-  if ((MmcHostInstance->CardInfo.OCRData.AccessMode & MMC_OCR_ACCESS_MASK) ==\r
-      MMC_OCR_ACCESS_SECTOR) {\r
-    CmdArg = Lba;\r
+  if (MmcHostInstance->CardInfo.CardType != EMMC_CARD) {\r
+    //Set command argument based on the card capacity\r
+    //if 0 : SDSC card\r
+    //if 1 : SDXC/SDHC\r
+    if (MmcHostInstance->CardInfo.OCRData.AccessMode & SD_CARD_CAPACITY) {\r
+      CmdArg = Lba;\r
+    } else {\r
+      CmdArg = Lba * This->Media->BlockSize;\r
+    }\r
   } else {\r
-    CmdArg = Lba * This->Media->BlockSize;\r
+    //Set command argument based on the card access mode (Byte mode or Block mode)\r
+    if ((MmcHostInstance->CardInfo.OCRData.AccessMode & MMC_OCR_ACCESS_MASK) ==\r
+        MMC_OCR_ACCESS_SECTOR) {\r
+      CmdArg = Lba;\r
+    } else {\r
+      CmdArg = Lba * This->Media->BlockSize;\r
+    }\r
   }\r
 \r
   Status = MmcHost->SendCommand (MmcHost, Cmd, CmdArg);\r