sdps: Cache support for switch command
High speed/wide bus operations involve data transfers. Hence these buffers should be aligned and flushed/invalidated where required. Signed-off-by: Harini Katakam <harinik@xilinx.com>
This commit is contained in:
parent
9aee07a7b5
commit
ceb52d805c
2 changed files with 27 additions and 0 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue