sdps: Added the driver support for micro sd without WP/CD.

This patch add the driver support for micro sd without WP/CD.

Signed-off-by: P L Sai Krishna <lakshmis@xilinx.com>
This commit is contained in:
P L Sai Krishna 2014-12-04 14:39:38 +05:30 committed by Suneel Garapati
parent ec95e33596
commit a6dbf26307
3 changed files with 54 additions and 37 deletions

View file

@ -37,17 +37,18 @@
# ----- ---- -------- ----------------------------------------------- # ----- ---- -------- -----------------------------------------------
# 1.00a hk 10/17/13 First release # 1.00a hk 10/17/13 First release
# 2.0 adk 12/10/13 Updated as per the New Tcl API's # 2.0 adk 12/10/13 Updated as per the New Tcl API's
# 2.4 sk 12/04/14 Added CD and WP parameters
# #
############################################################################## ##############################################################################
#uses "xillib.tcl" #uses "xillib.tcl"
proc generate {drv_handle} { proc generate {drv_handle} {
xdefine_zynq_include_file $drv_handle "xparameters.h" "XSdPs" "NUM_INSTANCES" "DEVICE_ID" "C_S_AXI_BASEADDR" "C_S_AXI_HIGHADDR" "C_SDIO_CLK_FREQ_HZ" xdefine_zynq_include_file $drv_handle "xparameters.h" "XSdPs" "NUM_INSTANCES" "DEVICE_ID" "C_S_AXI_BASEADDR" "C_S_AXI_HIGHADDR" "C_SDIO_CLK_FREQ_HZ" "C_HAS_CD" "C_HAS_WP"
xdefine_zynq_config_file $drv_handle "xsdps_g.c" "XSdPs" "DEVICE_ID" "C_S_AXI_BASEADDR" "C_SDIO_CLK_FREQ_HZ" xdefine_zynq_config_file $drv_handle "xsdps_g.c" "XSdPs" "DEVICE_ID" "C_S_AXI_BASEADDR" "C_SDIO_CLK_FREQ_HZ" "C_HAS_CD" "C_HAS_WP"
xdefine_zynq_canonical_xpars $drv_handle "xparameters.h" "XSdPs" "DEVICE_ID" "C_S_AXI_BASEADDR" "C_S_AXI_HIGHADDR" "C_SDIO_CLK_FREQ_HZ" xdefine_zynq_canonical_xpars $drv_handle "xparameters.h" "XSdPs" "DEVICE_ID" "C_S_AXI_BASEADDR" "C_S_AXI_HIGHADDR" "C_SDIO_CLK_FREQ_HZ" "C_HAS_CD" "C_HAS_WP"
} }

View file

@ -50,6 +50,8 @@
* when re-initialization is done.CR# 819614. * when re-initialization is done.CR# 819614.
* Use XSdPs_Change_ClkFreq API whenever changing * Use XSdPs_Change_ClkFreq API whenever changing
* clock.CR# 816586. * clock.CR# 816586.
* 2.4 sk 12/04/14 Added support for micro SD without
* WP/CD. CR# 810655.
* *
* </pre> * </pre>
* *
@ -139,6 +141,8 @@ int XSdPs_CfgInitialize(XSdPs *InstancePtr, XSdPs_Config *ConfigPtr,
InstancePtr->Config.BaseAddress = EffectiveAddr; InstancePtr->Config.BaseAddress = EffectiveAddr;
InstancePtr->Config.InputClockHz = ConfigPtr->InputClockHz; InstancePtr->Config.InputClockHz = ConfigPtr->InputClockHz;
InstancePtr->IsReady = XIL_COMPONENT_IS_READY; InstancePtr->IsReady = XIL_COMPONENT_IS_READY;
InstancePtr->Config.CardDetect = ConfigPtr->CardDetect;
InstancePtr->Config.WriteProtect = ConfigPtr->WriteProtect;
/* /*
* "Software reset for all" is initiated * "Software reset for all" is initiated
@ -255,15 +259,17 @@ int XSdPs_SdCardInitialize(XSdPs *InstancePtr)
Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
/* if(InstancePtr->Config.CardDetect) {
* Check the present state register to make sure /*
* card is inserted and detected by host controller * Check the present state register to make sure
*/ * card is inserted and detected by host controller
PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, */
XSDPS_PRES_STATE_OFFSET); PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) { XSDPS_PRES_STATE_OFFSET);
Status = XST_FAILURE; if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) {
goto RETURN_PATH; Status = XST_FAILURE;
goto RETURN_PATH;
}
} }
/* /*
@ -650,14 +656,16 @@ int XSdPs_ReadPolled(XSdPs *InstancePtr, u32 Arg, u32 BlkCnt, u8 *Buff)
u32 PresentStateReg; u32 PresentStateReg;
u32 StatusReg; u32 StatusReg;
/* if(InstancePtr->Config.CardDetect) {
* Check status to ensure card is initialized /*
*/ * Check status to ensure card is initialized
PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, */
XSDPS_PRES_STATE_OFFSET); PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) { XSDPS_PRES_STATE_OFFSET);
Status = XST_FAILURE; if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) {
goto RETURN_PATH; Status = XST_FAILURE;
goto RETURN_PATH;
}
} }
/* /*
@ -746,14 +754,16 @@ int XSdPs_WritePolled(XSdPs *InstancePtr, u32 Arg, u32 BlkCnt, const u8 *Buff)
u32 PresentStateReg; u32 PresentStateReg;
u32 StatusReg; u32 StatusReg;
/* if(InstancePtr->Config.CardDetect) {
* Check status to ensure card is initialized /*
*/ * Check status to ensure card is initialized
PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, */
XSDPS_PRES_STATE_OFFSET); PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) { XSDPS_PRES_STATE_OFFSET);
Status = XST_FAILURE; if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) {
goto RETURN_PATH; Status = XST_FAILURE;
goto RETURN_PATH;
}
} }
/* /*
@ -970,15 +980,17 @@ int XSdPs_MmcCardInitialize(XSdPs *InstancePtr)
Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
/* if(InstancePtr->Config.CardDetect) {
* Check the present state register to make sure /*
* card is inserted and detected by host controller * Check the present state register to make sure
*/ * card is inserted and detected by host controller
PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, */
XSDPS_PRES_STATE_OFFSET); PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress,
if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) { XSDPS_PRES_STATE_OFFSET);
Status = XST_FAILURE; if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) {
goto RETURN_PATH; Status = XST_FAILURE;
goto RETURN_PATH;
}
} }
/* /*

View file

@ -108,6 +108,8 @@
* when re-initialization is done.CR# 819614. * when re-initialization is done.CR# 819614.
* Use XSdPs_Change_ClkFreq API whenever changing * Use XSdPs_Change_ClkFreq API whenever changing
* clock.CR# 816586. * clock.CR# 816586.
* 2.4 sk 12/04/14 Added support for micro SD without
* WP/CD. CR# 810655.
* *
* </pre> * </pre>
* *
@ -137,6 +139,8 @@ typedef struct {
u16 DeviceId; /**< Unique ID of device */ u16 DeviceId; /**< Unique ID of device */
u32 BaseAddress; /**< Base address of the device */ u32 BaseAddress; /**< Base address of the device */
u32 InputClockHz; /**< Input clock frequency */ u32 InputClockHz; /**< Input clock frequency */
u32 CardDetect; /**< Card Detect */
u32 WriteProtect; /**< Write Protect */
} XSdPs_Config; } XSdPs_Config;
/* /*