From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=fail (domain: intel.com, ip: , mailfrom: tien.hock.loh@intel.com) Received: from mga02.intel.com (mga02.intel.com []) by groups.io with SMTP; Mon, 27 May 2019 02:31:49 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 May 2019 02:31:49 -0700 X-ExtLoop1: 1 Received: from pg-nx11.altera.com ([10.104.4.26]) by orsmga008.jf.intel.com with ESMTP; 27 May 2019 02:31:47 -0700 From: "Loh, Tien Hock" To: devel@edk2.groups.io, thloh85@gmail.com Cc: "TIen Hock, Loh" , Leif Lindholm , Ard Biesheuvel Subject: [PATCH v2 1/7] EmbeddedPkg: Add SD command support for DwEmmc Date: Mon, 27 May 2019 17:30:22 +0800 Message-Id: <1558949428-190715-2-git-send-email-tien.hock.loh@intel.com> X-Mailer: git-send-email 2.2.2 In-Reply-To: <1558949428-190715-1-git-send-email-tien.hock.loh@intel.com> References: <1558949428-190715-1-git-send-email-tien.hock.loh@intel.com> 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