@param[in] Slot The slot number of the SD card to send the command to.\r
@param[in] Rca The relative device address to be assigned.\r
@param[in] S18A The boolean to show if it's a UHS-I SD card.\r
+ @param[in] SdVersion1 The boolean to show if it's a Version 1 SD card.\r
\r
@retval EFI_SUCCESS The operation is done correctly.\r
@retval Others The operation fails.\r
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,\r
IN UINT8 Slot,\r
IN UINT16 Rca,\r
- IN BOOLEAN S18A\r
+ IN BOOLEAN S18A,\r
+ IN BOOLEAN SdVersion1\r
)\r
{\r
EFI_STATUS Status;\r
SD_MMC_HC_PRIVATE_DATA *Private;\r
SD_MMC_BUS_SETTINGS BusMode;\r
\r
+ ZeroMem (SwitchResp, 64 * sizeof (UINT8));\r
+\r
Private = SD_MMC_HC_PRIVATE_FROM_THIS (PassThru);\r
\r
Capability = &Private->Capability[Slot];\r
\r
//\r
// Get the supported bus speed from SWITCH cmd return data group #1.\r
+ // SdVersion1 don't support the SWITCH cmd\r
//\r
- Status = SdCardSwitch (PassThru, Slot, 0xFF, 0xF, SdDriverStrengthIgnore, 0xF, FALSE, SwitchResp);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ if (!SdVersion1) {\r
+ Status = SdCardSwitch (PassThru, Slot, 0xFF, 0xF, SdDriverStrengthIgnore, 0xF, FALSE, SwitchResp);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
\r
SdGetTargetBusMode (Private, Slot, SwitchResp, S18A, &BusMode);\r
}\r
}\r
\r
- Status = SdCardSwitch (PassThru, Slot, BusMode.BusTiming, 0xF, BusMode.DriverStrength.Sd, 0xF, TRUE, SwitchResp);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ //\r
+ // SdVersion1 don't support the SWITCH cmd\r
+ //\r
+ if (!SdVersion1) {\r
+ Status = SdCardSwitch (PassThru, Slot, BusMode.BusTiming, 0xF, BusMode.DriverStrength.Sd, 0xF, TRUE, SwitchResp);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
\r
Status = SdMmcSetDriverStrength (Private->PciIo, Slot, BusMode.DriverStrength.Sd);\r
UINT8 HostCtrl2;\r
UINTN Retry;\r
BOOLEAN ForceVoltage33;\r
+ BOOLEAN SdVersion1;\r
\r
ForceVoltage33 = FALSE;\r
+ SdVersion1 = FALSE;\r
\r
PciIo = Private->PciIo;\r
PassThru = &Private->PassThru;\r
}\r
\r
//\r
- // 2. Send Cmd8 to the device\r
+ // 2. Send Cmd8 to the device, the command will fail for SdVersion1\r
//\r
Status = SdCardVoltageCheck (PassThru, Slot, 0x1, 0xFF);\r
if (EFI_ERROR (Status)) {\r
+ SdVersion1 = TRUE;\r
DEBUG ((DEBUG_INFO, "SdCardIdentification: Executing Cmd8 fails with %r\n", Status));\r
- return Status;\r
}\r
\r
//\r
DEBUG ((DEBUG_INFO, "SdCardIdentification: Found a SD device at slot [%d]\n", Slot));\r
Private->Slot[Slot].CardType = SdCardType;\r
\r
- Status = SdCardSetBusMode (PciIo, PassThru, Slot, Rca, ((Ocr & BIT24) != 0));\r
+ Status = SdCardSetBusMode (PciIo, PassThru, Slot, Rca, ((Ocr & BIT24) != 0), SdVersion1);\r
\r
return Status;\r
\r