Skip to content

Commit

Permalink
sdps: Fix the issues in reading CID and CSD
Browse files Browse the repository at this point in the history
This patch fix the issue in reading the CardId information
and also store the Card Specific Data in the driver structure
instance.

Signed-off-by: Sai Krishna Potthuri <lakshmi.sai.krishna.potthuri@xilinx.com>

Acked-for-series: Srinivas Goud <srinivas.goud@xilinx.com>
  • Loading branch information
P L Sai Krishna authored and Siva Addepalli committed Feb 16, 2021
1 parent 690f6fc commit e48ad41
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 4 deletions.
1 change: 1 addition & 0 deletions XilinxProcessorIPLib/drivers/sdps/src/xsdps.h
Expand Up @@ -138,6 +138,7 @@
* sk 12/17/20 Removed checking platform specific SD macros and used
* Baseaddress instead.
* 3.12 sk 01/28/21 Added support for non-blocking write.
* sk 02/12/21 Fix the issue in reading CID and CSD.
*
* </pre>
*
Expand Down
14 changes: 10 additions & 4 deletions XilinxProcessorIPLib/drivers/sdps/src/xsdps_card.c
Expand Up @@ -25,6 +25,7 @@
* mn 10/15/20 Modify power cycle API to poll for SD bus lines to go
* low for versal platform
* 3.12 sk 01/28/21 Added support for non-blocking write.
* sk 02/12/21 Fix the issue in reading CID and CSD.
*
* </pre>
*
Expand Down Expand Up @@ -561,16 +562,16 @@ s32 XSdPs_GetCardId(XSdPs *InstancePtr)
}

InstancePtr->CardID[0] =
XSdPs_ReadReg16(InstancePtr->Config.BaseAddress,
XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
XSDPS_RESP0_OFFSET);
InstancePtr->CardID[1] =
XSdPs_ReadReg16(InstancePtr->Config.BaseAddress,
XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
XSDPS_RESP1_OFFSET);
InstancePtr->CardID[2] =
XSdPs_ReadReg16(InstancePtr->Config.BaseAddress,
XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
XSDPS_RESP2_OFFSET);
InstancePtr->CardID[3] =
XSdPs_ReadReg16(InstancePtr->Config.BaseAddress,
XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
XSDPS_RESP3_OFFSET);

if(InstancePtr->CardType == XSDPS_CARD_SD) {
Expand Down Expand Up @@ -642,6 +643,11 @@ s32 XSdPs_GetCsd(XSdPs *InstancePtr)
CSD[3] = XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
XSDPS_RESP3_OFFSET);

InstancePtr->CardSpecData[0] = CSD[0];
InstancePtr->CardSpecData[1] = CSD[1];
InstancePtr->CardSpecData[2] = CSD[2];
InstancePtr->CardSpecData[3] = CSD[3];

if (InstancePtr->CardType != XSDPS_CARD_SD) {
InstancePtr->Card_Version = (u8)((u32)(CSD[3] & CSD_SPEC_VER_MASK) >>18U);
Status = XST_SUCCESS;
Expand Down

0 comments on commit e48ad41

Please sign in to comment.