From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: tien.hock.loh@intel.com) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by groups.io with SMTP; Wed, 08 May 2019 04:26:41 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 May 2019 04:26:41 -0700 X-ExtLoop1: 1 Received: from pg-iccf0304.altera.com ([10.104.2.57]) by fmsmga004.fm.intel.com with ESMTP; 08 May 2019 04:26:39 -0700 From: "Loh, Tien Hock" To: devel@edk2.groups.io, thloh85@gmail.com Cc: "TIen Hock, Loh" , Leif Lindholm , Ard Biesheuvel Subject: [PATCH 1/1] EmbeddedPkg: Add SD command support for DwEmmc Date: Wed, 8 May 2019 19:26:18 +0800 Message-Id: <1557314778-48956-1-git-send-email-tien.hock.loh@intel.com> X-Mailer: git-send-email 2.2.2 From: "TIen Hock, Loh" Added ACMD6 for SD support. For SD, after CMD55 is sent, the next command should be an application command, which should not expect data Signed-off-by: "Tien Hock, Loh" Cc: Leif Lindholm Cc: Ard Biesheuvel -- v2: - Move IsACmd as a local static variable in function - Fix some coding standard issue with spacing --- EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c index 68c523a99f..420487757d 100644 --- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c +++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c @@ -307,6 +307,7 @@ DwEmmcSendCommand ( { UINT32 Cmd = 0; EFI_STATUS Status = EFI_SUCCESS; + STATIC BOOLEAN IsACmd = FALSE; switch (MMC_GET_INDX(MmcCmd)) { case MMC_INDX(0): @@ -323,6 +324,15 @@ DwEmmcSendCommand ( Cmd = BIT_CMD_RESPONSE_EXPECT | BIT_CMD_CHECK_RESPONSE_CRC | BIT_CMD_SEND_INIT; break; + case MMC_INDX (6): + if(IsACmd) { + Cmd = BIT_CMD_RESPONSE_EXPECT; + } + else { + Cmd = BIT_CMD_RESPONSE_EXPECT | BIT_CMD_DATA_EXPECTED | + BIT_CMD_READ; + } + break; case MMC_INDX(7): if (Argument) Cmd = BIT_CMD_RESPONSE_EXPECT | BIT_CMD_CHECK_RESPONSE_CRC; @@ -367,12 +377,22 @@ DwEmmcSendCommand ( Cmd = BIT_CMD_RESPONSE_EXPECT | BIT_CMD_CHECK_RESPONSE_CRC | BIT_CMD_DATA_EXPECTED; break; + case MMC_INDX (51): + Cmd = BIT_CMD_RESPONSE_EXPECT | BIT_CMD_DATA_EXPECTED | + BIT_CMD_READ | BIT_CMD_WAIT_PRVDATA_COMPLETE; + break; default: Cmd = BIT_CMD_RESPONSE_EXPECT | BIT_CMD_CHECK_RESPONSE_CRC; break; } Cmd |= MMC_GET_INDX(MmcCmd) | BIT_CMD_USE_HOLD_REG | BIT_CMD_START; + + if(MMC_INDX (55) == MMC_GET_INDX (MmcCmd)) + IsACmd = TRUE; + else + IsACmd = FALSE; + if (IsPendingReadCommand (Cmd) || IsPendingWriteCommand (Cmd)) { mDwEmmcCommand = Cmd; mDwEmmcArgument = Argument; -- 2.19.0