diff --git a/XilinxProcessorIPLib/drivers/sdps/src/xsdps_options.c b/XilinxProcessorIPLib/drivers/sdps/src/xsdps_options.c index aa671aee..59e62c6c 100755 --- a/XilinxProcessorIPLib/drivers/sdps/src/xsdps_options.c +++ b/XilinxProcessorIPLib/drivers/sdps/src/xsdps_options.c @@ -203,6 +203,8 @@ int XSdPs_Get_BusWidth(XSdPs *InstancePtr, u8 *SCR) XSDPS_XFER_MODE_OFFSET, XSDPS_TM_DAT_DIR_SEL_MASK | XSDPS_TM_DMA_EN_MASK); + Xil_DCacheInvalidateRange(SCR, 8); + Status = XSdPs_CmdTransfer(InstancePtr, ACMD51, 0, BlkCnt); if (Status != XST_SUCCESS) { Status = XST_FAILURE; @@ -380,6 +382,8 @@ int XSdPs_Get_BusSpeed(XSdPs *InstancePtr, u8 *ReadBuff) Arg = XSDPS_SWITCH_CMD_HS_GET; + Xil_DCacheInvalidateRange(ReadBuff, 64); + Status = XSdPs_CmdTransfer(InstancePtr, CMD6, Arg, 1); if (Status != XST_SUCCESS) { Status = XST_FAILURE; @@ -444,7 +448,13 @@ int XSdPs_Change_BusSpeed(XSdPs *InstancePtr) #ifndef MMC_CARD u32 ClockReg; +#ifdef __ICCARM__ +#pragma data_alignment = 32 u8 ReadBuff[64]; +#pragma data_alignment = 4 +#else + u8 ReadBuff[64] __attribute__ ((aligned(32))); +#endif u16 BlkCnt; u16 BlkSize; #endif @@ -462,6 +472,8 @@ int XSdPs_Change_BusSpeed(XSdPs *InstancePtr) XSdPs_SetupADMA2DescTbl(InstancePtr, BlkCnt, ReadBuff); + Xil_DCacheFlushRange(ReadBuff, 64); + XSdPs_WriteReg16(InstancePtr->Config.BaseAddress, XSDPS_XFER_MODE_OFFSET, XSDPS_TM_DAT_DIR_SEL_MASK | XSDPS_TM_DMA_EN_MASK); @@ -752,6 +764,8 @@ int XSdPs_Get_Mmc_ExtCsd(XSdPs *InstancePtr, u8 *ReadBuff) XSdPs_SetupADMA2DescTbl(InstancePtr, BlkCnt, ReadBuff); + Xil_DCacheInvalidateRange(ReadBuff, 512); + XSdPs_WriteReg16(InstancePtr->Config.BaseAddress, XSDPS_XFER_MODE_OFFSET, XSDPS_TM_DAT_DIR_SEL_MASK | XSDPS_TM_DMA_EN_MASK); diff --git a/lib/sw_services/xilffs/src/diskio.c b/lib/sw_services/xilffs/src/diskio.c index ca13d985..4f7400f4 100755 --- a/lib/sw_services/xilffs/src/diskio.c +++ b/lib/sw_services/xilffs/src/diskio.c @@ -107,7 +107,13 @@ static DSTATUS Stat; /* Disk status */ static XSdPs SdInstance; #endif +#ifdef __ICCARM__ +#pragma data_alignment = 32 u8 ExtCsd[512]; +#pragma data_alignment = 4 +#else +u8 ExtCsd[512] __attribute__ ((aligned(32))); +#endif /*-----------------------------------------------------------------------*/ /* Get Disk Status */ @@ -185,8 +191,15 @@ DSTATUS disk_initialize ( { DSTATUS s; int Status; +#ifdef __ICCARM__ +#pragma data_alignment = 32 u8 SCR[8]; u8 ReadBuff[64]; +#pragma data_alignment = 4 +#else + u8 SCR[8] __attribute__ ((aligned(32))); + u8 ReadBuff[64] __attribute__ ((aligned(32))); +#endif #ifdef FILE_SYSTEM_INTERFACE_SD