From 9a619626821d931cbe61aaddc5276f66594f37f8 Mon Sep 17 00:00:00 2001 From: Subbaraya Sundeep Bhatta Date: Thu, 7 Aug 2014 15:02:48 +0530 Subject: [PATCH] spi: Use interrupt status register Tx empty bit Use interrupt status register Tx empty bit instead of status register Signed-off-by: Subbaraya Sundeep Bhatta Acked-by: Kedareswara rao Appana --- XilinxProcessorIPLib/drivers/spi/src/xspi.c | 9 +++++++-- XilinxProcessorIPLib/drivers/spi/src/xspi.h | 4 ++++ XilinxProcessorIPLib/drivers/spi/src/xspi_selftest.c | 7 +++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/XilinxProcessorIPLib/drivers/spi/src/xspi.c b/XilinxProcessorIPLib/drivers/spi/src/xspi.c index d09cf39d..3fd990c2 100755 --- a/XilinxProcessorIPLib/drivers/spi/src/xspi.c +++ b/XilinxProcessorIPLib/drivers/spi/src/xspi.c @@ -90,6 +90,9 @@ * register inorder to work with CPOL and CPHA High Options. * As per spec (Dual/Quad SPI Transaction instrunction 7,8,9) * CR:732962 +* 4.1 bss 08/07/14 Modified XSpi_Transfer to check for Interrupt Status +* register Tx Empty bit instead of Status register +* CR#810294. * * ******************************************************************************/ @@ -687,8 +690,10 @@ int XSpi_Transfer(XSpi *InstancePtr, u8 *SendBufPtr, * Transmit empty status bit */ do { - StatusReg = XSpi_GetStatusReg(InstancePtr); - } while ((StatusReg & XSP_SR_TX_EMPTY_MASK) == 0); + StatusReg = XSpi_IntrGetStatus(InstancePtr); + } while ((StatusReg & XSP_INTR_TX_EMPTY_MASK) == 0); + + XSpi_IntrClear(InstancePtr,XSP_INTR_TX_EMPTY_MASK); /* * A transmit has just completed. Process received data diff --git a/XilinxProcessorIPLib/drivers/spi/src/xspi.h b/XilinxProcessorIPLib/drivers/spi/src/xspi.h index 1ad3717b..3bf086a2 100755 --- a/XilinxProcessorIPLib/drivers/spi/src/xspi.h +++ b/XilinxProcessorIPLib/drivers/spi/src/xspi.h @@ -277,6 +277,10 @@ * block is used in the h/w design (CR 721229). * 3.07a adk 11/10/13 Fixed CR:732962 Changes are made in the xspi.c file * 4.0 adk 19/12/13 Updated as per the New Tcl API's +* 4.1 bss 08/07/14 Modified XSpi_Transfer in xspi.c and LoopbackTest in +* xspi_selftest.c to check for Interrupt Status +* register Tx Empty bit instead of Status register +* CR#810294. * * * diff --git a/XilinxProcessorIPLib/drivers/spi/src/xspi_selftest.c b/XilinxProcessorIPLib/drivers/spi/src/xspi_selftest.c index 6ade9bec..d781e0b8 100755 --- a/XilinxProcessorIPLib/drivers/spi/src/xspi_selftest.c +++ b/XilinxProcessorIPLib/drivers/spi/src/xspi_selftest.c @@ -305,12 +305,15 @@ static int LoopbackTest(XSpi *InstancePtr) * empty status bit. */ do { - StatusReg = XSpi_GetStatusReg(InstancePtr); - } while ((StatusReg & XSP_SR_TX_EMPTY_MASK) == 0); + StatusReg = XSpi_IntrGetStatus(InstancePtr); + } while ((StatusReg & XSP_INTR_TX_EMPTY_MASK) == 0); + + XSpi_IntrClear(InstancePtr, XSP_INTR_TX_EMPTY_MASK); /* * Receive and verify the data just transmitted. */ + StatusReg = XSpi_GetStatusReg(InstancePtr); while ((StatusReg & XSP_SR_RX_EMPTY_MASK) == 0) { RxData = XSpi_ReadReg(InstancePtr->BaseAddr,