From 78cccda0943b2f68a36e1614cb33c3408b3c54c0 Mon Sep 17 00:00:00 2001 From: Andrei-Liviu Simion Date: Mon, 9 Feb 2015 15:34:15 -0700 Subject: [PATCH] dp: tx: Always ensure that any pending AUX transactions have completed. Prior to initiating a new AUX transaction, always ensure that any pending transactions have completed. Signed-off-by: Andrei-Liviu Simion --- XilinxProcessorIPLib/drivers/dp/src/xdp.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/XilinxProcessorIPLib/drivers/dp/src/xdp.c b/XilinxProcessorIPLib/drivers/dp/src/xdp.c index 7ce9d974..397da57c 100644 --- a/XilinxProcessorIPLib/drivers/dp/src/xdp.c +++ b/XilinxProcessorIPLib/drivers/dp/src/xdp.c @@ -2967,6 +2967,20 @@ static u32 XDp_TxAuxRequestSend(XDp *InstancePtr, XDp_AuxTransaction *Request) u32 Status; u8 Index; + /* Ensure that any pending AUX transactions have completed. */ + TimeoutCount = 0; + do { + Status = XDp_ReadReg(InstancePtr->Config.BaseAddr, + XDP_TX_REPLY_STATUS); + + XDp_WaitUs(InstancePtr, 20); + TimeoutCount++; + if (TimeoutCount >= XDP_AUX_MAX_TIMEOUT_COUNT) { + return XST_ERROR_COUNT_MAX; + } + } while ((Status & XDP_TX_REPLY_STATUS_REQUEST_IN_PROGRESS_MASK) && + (Status & XDP_TX_REPLY_STATUS_REPLY_IN_PROGRESS_MASK)); + /* Set the address for the request. */ XDp_WriteReg(InstancePtr->Config.BaseAddr, XDP_TX_AUX_ADDRESS, Request->Address);