diff --git a/XilinxProcessorIPLib/drivers/sdps/data/sdps.tcl b/XilinxProcessorIPLib/drivers/sdps/data/sdps.tcl index 7ff7c40d..46cfb87d 100755 --- a/XilinxProcessorIPLib/drivers/sdps/data/sdps.tcl +++ b/XilinxProcessorIPLib/drivers/sdps/data/sdps.tcl @@ -37,17 +37,18 @@ # ----- ---- -------- ----------------------------------------------- # 1.00a hk 10/17/13 First release # 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" 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" } diff --git a/XilinxProcessorIPLib/drivers/sdps/src/xsdps.c b/XilinxProcessorIPLib/drivers/sdps/src/xsdps.c index 01042ae4..0b239db4 100755 --- a/XilinxProcessorIPLib/drivers/sdps/src/xsdps.c +++ b/XilinxProcessorIPLib/drivers/sdps/src/xsdps.c @@ -50,6 +50,8 @@ * when re-initialization is done.CR# 819614. * Use XSdPs_Change_ClkFreq API whenever changing * clock.CR# 816586. +* 2.4 sk 12/04/14 Added support for micro SD without +* WP/CD. CR# 810655. * * * @@ -139,6 +141,8 @@ int XSdPs_CfgInitialize(XSdPs *InstancePtr, XSdPs_Config *ConfigPtr, InstancePtr->Config.BaseAddress = EffectiveAddr; InstancePtr->Config.InputClockHz = ConfigPtr->InputClockHz; InstancePtr->IsReady = XIL_COMPONENT_IS_READY; + InstancePtr->Config.CardDetect = ConfigPtr->CardDetect; + InstancePtr->Config.WriteProtect = ConfigPtr->WriteProtect; /* * "Software reset for all" is initiated @@ -255,15 +259,17 @@ int XSdPs_SdCardInitialize(XSdPs *InstancePtr) Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - /* - * 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); - if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) { - Status = XST_FAILURE; - goto RETURN_PATH; + if(InstancePtr->Config.CardDetect) { + /* + * 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); + if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) { + Status = XST_FAILURE; + goto RETURN_PATH; + } } /* @@ -650,14 +656,16 @@ int XSdPs_ReadPolled(XSdPs *InstancePtr, u32 Arg, u32 BlkCnt, u8 *Buff) u32 PresentStateReg; u32 StatusReg; - /* - * Check status to ensure card is initialized - */ - PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, - XSDPS_PRES_STATE_OFFSET); - if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) { - Status = XST_FAILURE; - goto RETURN_PATH; + if(InstancePtr->Config.CardDetect) { + /* + * Check status to ensure card is initialized + */ + PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, + XSDPS_PRES_STATE_OFFSET); + if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) { + 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 StatusReg; - /* - * Check status to ensure card is initialized - */ - PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, - XSDPS_PRES_STATE_OFFSET); - if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) { - Status = XST_FAILURE; - goto RETURN_PATH; + if(InstancePtr->Config.CardDetect) { + /* + * Check status to ensure card is initialized + */ + PresentStateReg = XSdPs_ReadReg(InstancePtr->Config.BaseAddress, + XSDPS_PRES_STATE_OFFSET); + if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0x0) { + Status = XST_FAILURE; + goto RETURN_PATH; + } } /* @@ -970,15 +980,17 @@ int XSdPs_MmcCardInitialize(XSdPs *InstancePtr) Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - /* - * 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); - if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) { - Status = XST_FAILURE; - goto RETURN_PATH; + if(InstancePtr->Config.CardDetect) { + /* + * 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); + if ((PresentStateReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) { + Status = XST_FAILURE; + goto RETURN_PATH; + } } /* diff --git a/XilinxProcessorIPLib/drivers/sdps/src/xsdps.h b/XilinxProcessorIPLib/drivers/sdps/src/xsdps.h index 60e66d94..d20b453a 100755 --- a/XilinxProcessorIPLib/drivers/sdps/src/xsdps.h +++ b/XilinxProcessorIPLib/drivers/sdps/src/xsdps.h @@ -108,6 +108,8 @@ * when re-initialization is done.CR# 819614. * Use XSdPs_Change_ClkFreq API whenever changing * clock.CR# 816586. +* 2.4 sk 12/04/14 Added support for micro SD without +* WP/CD. CR# 810655. * * * @@ -137,6 +139,8 @@ typedef struct { u16 DeviceId; /**< Unique ID of device */ u32 BaseAddress; /**< Base address of the device */ u32 InputClockHz; /**< Input clock frequency */ + u32 CardDetect; /**< Card Detect */ + u32 WriteProtect; /**< Write Protect */ } XSdPs_Config; /*