diff --git a/XilinxProcessorIPLib/drivers/spips/data/spips.mdd b/XilinxProcessorIPLib/drivers/spips/data/spips.mdd index e5c794e4..f80e7d71 100755 --- a/XilinxProcessorIPLib/drivers/spips/data/spips.mdd +++ b/XilinxProcessorIPLib/drivers/spips/data/spips.mdd @@ -28,6 +28,15 @@ # in advertising or otherwise to promote the sale, use or other dealings in # this Software without prior written authorization from Xilinx. # + +
+* MODIFICATION HISTORY:
+*
+* Ver   Who    Date     Changes
+* ----- ------ -------- -----------------------------------------------
+* 3.0	vm   12/09/14  support for Zynq Ultrascale Mp added
+*
+
 ###############################################################################
 OPTION psf_version = 2.1;
 
diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips.c b/XilinxProcessorIPLib/drivers/spips/src/xspips.c
index 66c191c8..8e7f35f3 100755
--- a/XilinxProcessorIPLib/drivers/spips/src/xspips.c
+++ b/XilinxProcessorIPLib/drivers/spips/src/xspips.c
@@ -95,7 +95,7 @@
 *
 *****************************************************************************/
 #define XSpiPs_SendByte(BaseAddress, Data) \
-		XSpiPs_Out32((BaseAddress) + XSPIPS_TXD_OFFSET, (Data))
+        XSpiPs_Out32((BaseAddress) + (u32)XSPIPS_TXD_OFFSET, (u32)(Data))
 
 /****************************************************************************/
 /*
@@ -112,12 +112,12 @@
 *
 *****************************************************************************/
 #define XSpiPs_RecvByte(BaseAddress) \
-		(u8)XSpiPs_In32((BaseAddress) + XSPIPS_RXD_OFFSET)
+		XSpiPs_In32((u32)((BaseAddress) + (u32)XSPIPS_RXD_OFFSET))
 
 /************************** Function Prototypes ******************************/
 
 static void StubStatusHandler(void *CallBackRef, u32 StatusEvent,
-				unsigned ByteCount);
+				u32 ByteCount);
 
 /************************** Variable Definitions *****************************/
 
@@ -156,9 +156,10 @@ static void StubStatusHandler(void *CallBackRef, u32 StatusEvent,
 * @note		None.
 *
 ******************************************************************************/
-int XSpiPs_CfgInitialize(XSpiPs *InstancePtr, XSpiPs_Config *ConfigPtr,
+s32 XSpiPs_CfgInitialize(XSpiPs *InstancePtr, XSpiPs_Config *ConfigPtr,
 				u32 EffectiveAddr)
 {
+	s32 Status;
 	Xil_AssertNonvoid(InstancePtr != NULL);
 	Xil_AssertNonvoid(ConfigPtr != NULL);
 
@@ -169,31 +170,33 @@ int XSpiPs_CfgInitialize(XSpiPs *InstancePtr, XSpiPs_Config *ConfigPtr,
 	 * initializing. This assumes the busy flag is cleared at startup.
 	 */
 	if (InstancePtr->IsBusy == TRUE) {
-		return XST_DEVICE_IS_STARTED;
+		Status = (s32)XST_DEVICE_IS_STARTED;
+	} else {
+
+		/*
+		 * Set some default values.
+		 */
+		InstancePtr->IsBusy = FALSE;
+
+		InstancePtr->Config.BaseAddress = EffectiveAddr;
+		InstancePtr->StatusHandler = StubStatusHandler;
+
+		InstancePtr->SendBufferPtr = NULL;
+		InstancePtr->RecvBufferPtr = NULL;
+		InstancePtr->RequestedBytes = 0U;
+		InstancePtr->RemainingBytes = 0U;
+		InstancePtr->IsReady = XIL_COMPONENT_IS_READY;
+
+		/*
+		 * Reset the SPI device to get it into its initial state. It is
+		 * expected that device configuration will take place after this
+		 * initialization is done, but before the device is started.
+		 */
+		XSpiPs_Reset(InstancePtr);
+		Status = (s32)XST_SUCCESS;
 	}
 
-	/*
-	 * Set some default values.
-	 */
-	InstancePtr->IsBusy = FALSE;
-
-	InstancePtr->Config.BaseAddress = EffectiveAddr;
-	InstancePtr->StatusHandler = StubStatusHandler;
-
-	InstancePtr->SendBufferPtr = NULL;
-	InstancePtr->RecvBufferPtr = NULL;
-	InstancePtr->RequestedBytes = 0;
-	InstancePtr->RemainingBytes = 0;
-	InstancePtr->IsReady = XIL_COMPONENT_IS_READY;
-
-	/*
-	 * Reset the SPI device to get it into its initial state. It is
-	 * expected that device configuration will take place after this
-	 * initialization is done, but before the device is started.
-	 */
-	XSpiPs_Reset(InstancePtr);
-
-	return XST_SUCCESS;
+	return Status;
 }
 
 
@@ -302,102 +305,104 @@ void XSpiPs_Reset(XSpiPs *InstancePtr)
 * no two threads are transferring data on the SPI bus at the same time.
 *
 ******************************************************************************/
-int XSpiPs_Transfer(XSpiPs *InstancePtr, u8 *SendBufPtr,
-			u8 *RecvBufPtr, unsigned ByteCount)
+s32 XSpiPs_Transfer(XSpiPs *InstancePtr, u8 *SendBufPtr,
+			u8 *RecvBufPtr, u32 ByteCount)
 {
 	u32 ConfigReg;
-	u8 TransCount = 0;
+	u8 TransCount = 0U;
+	s32 StatusTransfer;
 
 	/*
 	 * The RecvBufPtr argument can be null
 	 */
 	Xil_AssertNonvoid(InstancePtr != NULL);
 	Xil_AssertNonvoid(SendBufPtr != NULL);
-	Xil_AssertNonvoid(ByteCount > 0);
-	Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
+	Xil_AssertNonvoid(ByteCount > 0U);
+	Xil_AssertNonvoid(InstancePtr->IsReady == (u32)XIL_COMPONENT_IS_READY);
 
 	/*
 	 * Check whether there is another transfer in progress. Not thread-safe.
 	 */
-	if (InstancePtr->IsBusy) {
-		return XST_DEVICE_BUSY;
-	}
+	if (InstancePtr->IsBusy == TRUE) {
+		StatusTransfer = (s32)XST_DEVICE_BUSY;
+	} else {
 
-	/*
-	 * Set the busy flag, which will be cleared in the ISR when the
-	 * transfer is entirely done.
-	 */
-	InstancePtr->IsBusy = TRUE;
+		/*
+		 * Set the busy flag, which will be cleared in the ISR when the
+		 * transfer is entirely done.
+		 */
+		InstancePtr->IsBusy = TRUE;
 
-	/*
-	 * Set up buffer pointers.
-	 */
-	InstancePtr->SendBufferPtr = SendBufPtr;
-	InstancePtr->RecvBufferPtr = RecvBufPtr;
+		/*
+		 * Set up buffer pointers.
+		 */
+		InstancePtr->SendBufferPtr = SendBufPtr;
+		InstancePtr->RecvBufferPtr = RecvBufPtr;
 
-	InstancePtr->RequestedBytes = ByteCount;
-	InstancePtr->RemainingBytes = ByteCount;
+		InstancePtr->RequestedBytes = ByteCount;
+		InstancePtr->RemainingBytes = ByteCount;
 
 	/*
 	 * If manual chip select mode, initialize the slave select value.
 	 */
-	if (XSpiPs_IsManualChipSelect(InstancePtr)) {
+	if (XSpiPs_IsManualChipSelect(InstancePtr) != FALSE) {
 		ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
 					 XSPIPS_CR_OFFSET);
 		/*
 		 * Set the slave select value.
 		 */
-		ConfigReg &= ~XSPIPS_CR_SSCTRL_MASK;
+		ConfigReg &= (u32)(~XSPIPS_CR_SSCTRL_MASK);
 		ConfigReg |= InstancePtr->SlaveSelect;
 		XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
 				 XSPIPS_CR_OFFSET, ConfigReg);
 	}
 
-	/*
-	 * Enable the device.
-	 */
-	XSpiPs_Enable(InstancePtr);
+		/*
+		 * Enable the device.
+		 */
+		XSpiPs_Enable(InstancePtr);
 
-	/*
-	 * Clear all the interrrupts.
-	 */
-	XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, XSPIPS_SR_OFFSET,
-			XSPIPS_IXR_WR_TO_CLR_MASK);
+		/*
+		 * Clear all the interrrupts.
+		 */
+		XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, XSPIPS_SR_OFFSET,
+				XSPIPS_IXR_WR_TO_CLR_MASK);
 
-	/*
-	 * Fill the TXFIFO with as many bytes as it will take (or as many as
-	 * we have to send).
-	 */
-	while ((InstancePtr->RemainingBytes > 0) &&
-		(TransCount < XSPIPS_FIFO_DEPTH)) {
-		XSpiPs_SendByte(InstancePtr->Config.BaseAddress,
-			  *InstancePtr->SendBufferPtr);
-		InstancePtr->SendBufferPtr++;
-		InstancePtr->RemainingBytes--;
-		TransCount++;
-	}
+		/*
+		 * Fill the TXFIFO with as many bytes as it will take (or as many as
+		 * we have to send).
+		 */
+		while ((InstancePtr->RemainingBytes > 0U) &&
+			(TransCount < XSPIPS_FIFO_DEPTH)) {
+			XSpiPs_SendByte(InstancePtr->Config.BaseAddress,
+				  *InstancePtr->SendBufferPtr);
+                  InstancePtr->SendBufferPtr += 1;
+			InstancePtr->RemainingBytes--;
+			TransCount++;
+		}
 
-	/*
-	 * Enable interrupts (connecting to the interrupt controller and
-	 * enabling interrupts should have been done by the caller).
-	 */
-	XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
-			XSPIPS_IER_OFFSET, XSPIPS_IXR_DFLT_MASK);
-
-	/*
-	 * If master mode and manual start mode, issue manual start command
-	 * to start the transfer.
-	 */
-	if (XSpiPs_IsManualStart(InstancePtr)
-		&& XSpiPs_IsMaster(InstancePtr)) {
-		ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
-					   XSPIPS_CR_OFFSET);
-			ConfigReg |= XSPIPS_CR_MANSTRT_MASK;
+		/*
+		 * Enable interrupts (connecting to the interrupt controller and
+		 * enabling interrupts should have been done by the caller).
+		 */
 		XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
-				 XSPIPS_CR_OFFSET, ConfigReg);
-	}
+				XSPIPS_IER_OFFSET, XSPIPS_IXR_DFLT_MASK);
 
-	return XST_SUCCESS;
+		/*
+		 * If master mode and manual start mode, issue manual start command
+		 * to start the transfer.
+		 */
+	     if ((XSpiPs_IsManualStart(InstancePtr) == TRUE)
+		&& (XSpiPs_IsMaster(InstancePtr) == TRUE)) {
+			ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
+						   XSPIPS_CR_OFFSET);
+				ConfigReg |= XSPIPS_CR_MANSTRT_MASK;
+			XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
+					 XSPIPS_CR_OFFSET, ConfigReg);
+		 }
+		StatusTransfer = (s32)XST_SUCCESS;
+	}
+	return StatusTransfer;
 }
 
 /*****************************************************************************/
@@ -454,157 +459,163 @@ int XSpiPs_Transfer(XSpiPs *InstancePtr, u8 *SendBufPtr,
 * no two threads are transferring data on the SPI bus at the same time.
 *
 ******************************************************************************/
-int XSpiPs_PolledTransfer(XSpiPs *InstancePtr, u8 *SendBufPtr,
-				u8 *RecvBufPtr, unsigned ByteCount)
+s32 XSpiPs_PolledTransfer(XSpiPs *InstancePtr, u8 *SendBufPtr,
+				u8 *RecvBufPtr, u32 ByteCount)
 {
 	u32 StatusReg;
 	u32 ConfigReg;
 	u32 TransCount;
+	u32 CheckTransfer;
+	s32 Status_Polled;
+	u8 TempData;
 
 	/*
 	 * The RecvBufPtr argument can be NULL.
 	 */
 	Xil_AssertNonvoid(InstancePtr != NULL);
 	Xil_AssertNonvoid(SendBufPtr != NULL);
-	Xil_AssertNonvoid(ByteCount > 0);
+	Xil_AssertNonvoid(ByteCount > 0U);
 	Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
 
 	/*
 	 * Check whether there is another transfer in progress. Not thread-safe.
 	 */
-	if (InstancePtr->IsBusy) {
-		return XST_DEVICE_BUSY;
-	}
-
-	/*
-	 * Set the busy flag, which will be cleared when the transfer is
-	 * entirely done.
-	 */
-	InstancePtr->IsBusy = TRUE;
-
-	/*
-	 * Set up buffer pointers.
-	 */
-	InstancePtr->SendBufferPtr = SendBufPtr;
-	InstancePtr->RecvBufferPtr = RecvBufPtr;
-
-	InstancePtr->RequestedBytes = ByteCount;
-	InstancePtr->RemainingBytes = ByteCount;
-
-	/*
-	 * If manual chip select mode, initialize the slave select value.
-	 */
-	if (XSpiPs_IsManualChipSelect(InstancePtr)) {
-		ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
-					 XSPIPS_CR_OFFSET);
-		/*
-		 * Set the slave select value.
-		 */
-		ConfigReg &= ~XSPIPS_CR_SSCTRL_MASK;
-		ConfigReg |= InstancePtr->SlaveSelect;
-		XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
-				 XSPIPS_CR_OFFSET, ConfigReg);
-	}
-
-	/*
-	 * Enable the device.
-	 */
-	XSpiPs_Enable(InstancePtr);
-
-	while((InstancePtr->RemainingBytes > 0) ||
-		(InstancePtr->RequestedBytes > 0)) {
-		TransCount = 0;
-		/*
-		 * Fill the TXFIFO with as many bytes as it will take (or as
-		 * many as we have to send).
-		 */
-		while ((InstancePtr->RemainingBytes > 0) &&
-			(TransCount < XSPIPS_FIFO_DEPTH)) {
-			XSpiPs_SendByte(InstancePtr->Config.BaseAddress,
-					*InstancePtr->SendBufferPtr);
-			InstancePtr->SendBufferPtr++;
-			InstancePtr->RemainingBytes--;
-			++TransCount;
-		}
+	if (InstancePtr->IsBusy == TRUE) {
+		Status_Polled = (s32)XST_DEVICE_BUSY;
+	} else {
 
 		/*
-		 * If master mode and manual start mode, issue manual start
-		 * command to start the transfer.
+		 * Set the busy flag, which will be cleared when the transfer is
+		 * entirely done.
 		 */
-		if (XSpiPs_IsManualStart(InstancePtr)
-			&& XSpiPs_IsMaster(InstancePtr)) {
-			ConfigReg = XSpiPs_ReadReg(
-					InstancePtr->Config.BaseAddress,
-					 XSPIPS_CR_OFFSET);
-			ConfigReg |= XSPIPS_CR_MANSTRT_MASK;
+		InstancePtr->IsBusy = TRUE;
+
+		/*
+		 * Set up buffer pointers.
+		 */
+		InstancePtr->SendBufferPtr = SendBufPtr;
+		InstancePtr->RecvBufferPtr = RecvBufPtr;
+
+		InstancePtr->RequestedBytes = ByteCount;
+		InstancePtr->RemainingBytes = ByteCount;
+
+		/*
+		 * If manual chip select mode, initialize the slave select value.
+		 */
+	     if (XSpiPs_IsManualChipSelect(InstancePtr) == TRUE) {
+			ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
+						 XSPIPS_CR_OFFSET);
+			/*
+			 * Set the slave select value.
+			 */
+			ConfigReg &= (u32)(~XSPIPS_CR_SSCTRL_MASK);
+			ConfigReg |= InstancePtr->SlaveSelect;
 			XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
 					 XSPIPS_CR_OFFSET, ConfigReg);
 		}
 
 		/*
-		 * Wait for the transfer to finish by polling Tx fifo status.
+		 * Enable the device.
 		 */
-		do {
-			StatusReg = XSpiPs_ReadReg(
-					InstancePtr->Config.BaseAddress,
-					XSPIPS_SR_OFFSET);
-			if ( StatusReg & XSPIPS_IXR_MODF_MASK )
-			{
-				/*
-				 * Clear the mode fail bit
-				 */
-				XSpiPs_WriteReg(
-					InstancePtr->Config.BaseAddress,
-					XSPIPS_SR_OFFSET,
-					XSPIPS_IXR_MODF_MASK);
-				return XST_SEND_ERROR;
+		XSpiPs_Enable(InstancePtr);
+
+		while((InstancePtr->RemainingBytes > (u32)0U) ||
+			(InstancePtr->RequestedBytes > (u32)0U)) {
+			TransCount = 0U;
+			/*
+			 * Fill the TXFIFO with as many bytes as it will take (or as
+			 * many as we have to send).
+			 */
+			while ((InstancePtr->RemainingBytes > (u32)0U) &&
+				((u32)TransCount < (u32)XSPIPS_FIFO_DEPTH)) {
+				XSpiPs_SendByte(InstancePtr->Config.BaseAddress,
+						*InstancePtr->SendBufferPtr);
+				InstancePtr->SendBufferPtr += 1;
+				InstancePtr->RemainingBytes--;
+				++TransCount;
 			}
-		} while ((StatusReg & XSPIPS_IXR_TXOW_MASK) == 0);
+
+			/*
+			 * If master mode and manual start mode, issue manual start
+			 * command to start the transfer.
+			 */
+			if ((XSpiPs_IsManualStart(InstancePtr) == TRUE)
+				&& (XSpiPs_IsMaster(InstancePtr) == TRUE)) {
+				ConfigReg = XSpiPs_ReadReg(
+						InstancePtr->Config.BaseAddress,
+						 XSPIPS_CR_OFFSET);
+				ConfigReg |= XSPIPS_CR_MANSTRT_MASK;
+				XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
+						 XSPIPS_CR_OFFSET, ConfigReg);
+			}
+
+			/*
+			 * Wait for the transfer to finish by polling Tx fifo status.
+			 */
+	        CheckTransfer = (u32)0U;
+	        while (CheckTransfer == 0U){
+			StatusReg = XSpiPs_ReadReg(
+					        InstancePtr->Config.BaseAddress,
+						        XSPIPS_SR_OFFSET);
+				if ( (StatusReg & XSPIPS_IXR_MODF_MASK) != 0U) {
+					/*
+					 * Clear the mode fail bit
+					 */
+					XSpiPs_WriteReg(
+						InstancePtr->Config.BaseAddress,
+						XSPIPS_SR_OFFSET,
+						XSPIPS_IXR_MODF_MASK);
+					return (s32)XST_SEND_ERROR;
+				}
+		        CheckTransfer = (StatusReg &
+							XSPIPS_IXR_TXOW_MASK);
+		    }
+
+			/*
+			 * A transmit has just completed. Process received data and
+			 * check for more data to transmit.
+			 * First get the data received as a result of the transmit
+			 * that just completed. Receive data based on the
+			 * count obtained while filling tx fifo. Always get the
+			 * received data, but only fill the receive buffer if it
+			 * points to something (the upper layer software may not
+			 * care to receive data).
+			 */
+			while (TransCount != (u32)0U) {
+				TempData = (u8)XSpiPs_RecvByte(
+					InstancePtr->Config.BaseAddress);
+				if (InstancePtr->RecvBufferPtr != NULL) {
+					*(InstancePtr->RecvBufferPtr) = TempData;
+					InstancePtr->RecvBufferPtr += 1;
+				}
+				InstancePtr->RequestedBytes--;
+				--TransCount;
+			}
+		}
 
 		/*
-		 * A transmit has just completed. Process received data and
-		 * check for more data to transmit.
-		 * First get the data received as a result of the transmit
-		 * that just completed. Receive data based on the
-		 * count obtained while filling tx fifo. Always get the
-		 * received data, but only fill the receive buffer if it
-		 * points to something (the upper layer software may not
-		 * care to receive data).
+		 * Clear the slave selects now, before terminating the transfer.
 		 */
-		while (TransCount) {
-			u8 TempData;
-			TempData = XSpiPs_RecvByte(
-				InstancePtr->Config.BaseAddress);
-			if (InstancePtr->RecvBufferPtr != NULL) {
-				*InstancePtr->RecvBufferPtr++ = (u8) TempData;
-			}
-			InstancePtr->RequestedBytes--;
-			--TransCount;
+		if (XSpiPs_IsManualChipSelect(InstancePtr) == TRUE) {
+			ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
+						XSPIPS_CR_OFFSET);
+			ConfigReg |= XSPIPS_CR_SSCTRL_MASK;
+			XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
+					 XSPIPS_CR_OFFSET, ConfigReg);
 		}
+
+		/*
+		 * Clear the busy flag.
+		 */
+		InstancePtr->IsBusy = FALSE;
+
+		/*
+		 * Disable the device.
+		 */
+		XSpiPs_Disable(InstancePtr);
+		Status_Polled = (s32)XST_SUCCESS;
 	}
-
-	/*
-	 * Clear the slave selects now, before terminating the transfer.
-	 */
-	if (XSpiPs_IsManualChipSelect(InstancePtr)) {
-		ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
-					XSPIPS_CR_OFFSET);
-		ConfigReg |= XSPIPS_CR_SSCTRL_MASK;
-		XSpiPs_WriteReg(InstancePtr->Config.BaseAddress,
-				 XSPIPS_CR_OFFSET, ConfigReg);
-	}
-
-	/*
-	 * Clear the busy flag.
-	 */
-	InstancePtr->IsBusy = FALSE;
-
-	/*
-	 * Disable the device.
-	 */
-	XSpiPs_Disable(InstancePtr);
-
-	return XST_SUCCESS;
+	return Status_Polled;
 }
 
 /*****************************************************************************/
@@ -641,10 +652,10 @@ int XSpiPs_PolledTransfer(XSpiPs *InstancePtr, u8 *SendBufPtr,
 * has no affect when the device is configured as a slave.
 *
 ******************************************************************************/
-int XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel)
+s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel)
 {
 	u32 ConfigReg;
-
+	s32 Status_Slave;
 	Xil_AssertNonvoid(InstancePtr != NULL);
 	Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
 	Xil_AssertNonvoid(SlaveSel <= XSPIPS_CR_SSCTRL_MAXIMUM);
@@ -653,38 +664,39 @@ int XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel)
 	 * Do not allow the slave select to change while a transfer is in
 	 * progress. Not thread-safe.
 	 */
-	if (InstancePtr->IsBusy) {
-		return XST_DEVICE_BUSY;
-	}
-	/*
-	 * If decode slave select option is set,
-	 * then set slave select value directly.
-	 * Update the Instance structure member.
-	 */
-	if ( XSpiPs_IsDecodeSSelect( InstancePtr ) ) {
-		InstancePtr->SlaveSelect = SlaveSel << XSPIPS_CR_SSCTRL_SHIFT;
-	}
-	else {
-	/*
-	 * Set the bit position to low using SlaveSel. Update the Instance
-	 * structure member.
-	 */
-		InstancePtr->SlaveSelect = ((~(1 << SlaveSel)) & \
-			XSPIPS_CR_SSCTRL_MAXIMUM) << XSPIPS_CR_SSCTRL_SHIFT;
-	}
+	if (InstancePtr->IsBusy == TRUE) {
+		Status_Slave = (s32)XST_DEVICE_BUSY;
+	} else {
+		/*
+		 * If decode slave select option is set,
+		 * then set slave select value directly.
+		 * Update the Instance structure member.
+		 */
+		if ( XSpiPs_IsDecodeSSelect( InstancePtr ) == TRUE) {
+			InstancePtr->SlaveSelect = ((u32)SlaveSel) << XSPIPS_CR_SSCTRL_SHIFT;
+		}
+		else {
+		/*
+		 * Set the bit position to low using SlaveSel. Update the Instance
+		 * structure member.
+		 */
+			InstancePtr->SlaveSelect = ((~(1U << SlaveSel)) & \
+				XSPIPS_CR_SSCTRL_MAXIMUM) << XSPIPS_CR_SSCTRL_SHIFT;
+		}
 
-	/*
-	 * Read the config register, update the slave select value and write
-	 * back to config register.
-	 */
-	ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
-			 XSPIPS_CR_OFFSET);
-	ConfigReg &= (~XSPIPS_CR_SSCTRL_MASK);
-	ConfigReg |= InstancePtr->SlaveSelect;
-	XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, XSPIPS_CR_OFFSET,
-			 ConfigReg);
-
-	return XST_SUCCESS;
+		/*
+		 * Read the config register, update the slave select value and write
+		 * back to config register.
+		 */
+		ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
+				 XSPIPS_CR_OFFSET);
+		ConfigReg &= (u32)(~XSPIPS_CR_SSCTRL_MASK);
+		ConfigReg |= InstancePtr->SlaveSelect;
+		XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, XSPIPS_CR_OFFSET,
+				 ConfigReg);
+	    Status_Slave = (s32)XST_SUCCESS;
+	}
+	return Status_Slave;
 }
 
 /*****************************************************************************/
@@ -702,7 +714,7 @@ int XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel)
 u8 XSpiPs_GetSlaveSelect(XSpiPs *InstancePtr)
 {
 	u32 ConfigReg;
-	u8 SlaveSel;
+	u32 SlaveSel;
 
 	Xil_AssertNonvoid(InstancePtr != NULL);
 	Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
@@ -715,7 +727,7 @@ u8 XSpiPs_GetSlaveSelect(XSpiPs *InstancePtr)
 	/*
 	 * If decode slave select option is set, then read value directly.
 	 */
-	if ( XSpiPs_IsDecodeSSelect( InstancePtr ) ) {
+	if ( XSpiPs_IsDecodeSSelect( InstancePtr ) == TRUE) {
 		SlaveSel = ConfigReg;
 	}
 	else {
@@ -723,11 +735,11 @@ u8 XSpiPs_GetSlaveSelect(XSpiPs *InstancePtr)
 		/*
 		 * Get the slave select value
 		 */
-		if(ConfigReg == 0x0F) {
+		if(ConfigReg == 0x0FU) {
 			/*
 			 * No slave selected
 			 */
-			SlaveSel = 0xF;
+			SlaveSel = 0xFU;
 		}else {
 			/*
 			 * Get selected slave number (0,1 or 2)
@@ -735,7 +747,7 @@ u8 XSpiPs_GetSlaveSelect(XSpiPs *InstancePtr)
 			SlaveSel = ((~ConfigReg) & XSPIPS_CR_SSCTRL_MAXIMUM)/2;
 		}
 	}
-	return SlaveSel;
+	return (u8)SlaveSel;
 }
 
 /*****************************************************************************/
@@ -772,7 +784,7 @@ u8 XSpiPs_GetSlaveSelect(XSpiPs *InstancePtr)
 * @param	InstancePtr is a pointer to the XSpiPs instance.
 * @param	CallBackRef is the upper layer callback reference passed back
 *		when the callback function is invoked.
-* @param	FuncPtr is the pointer to the callback function.
+* @param	FunctionPtr is the pointer to the callback function.
 *
 * @return	None.
 *
@@ -783,13 +795,13 @@ u8 XSpiPs_GetSlaveSelect(XSpiPs *InstancePtr)
 *
 ******************************************************************************/
 void XSpiPs_SetStatusHandler(XSpiPs *InstancePtr, void *CallBackRef,
-				XSpiPs_StatusHandler FuncPtr)
+				XSpiPs_StatusHandler FunctionPtr)
 {
 	Xil_AssertVoid(InstancePtr != NULL);
-	Xil_AssertVoid(FuncPtr != NULL);
+	Xil_AssertVoid(FunctionPtr != NULL);
 	Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
 
-	InstancePtr->StatusHandler = FuncPtr;
+	InstancePtr->StatusHandler = FunctionPtr;
 	InstancePtr->StatusRef = CallBackRef;
 }
 
@@ -810,7 +822,7 @@ void XSpiPs_SetStatusHandler(XSpiPs *InstancePtr, void *CallBackRef,
 *
 ******************************************************************************/
 static void StubStatusHandler(void *CallBackRef, u32 StatusEvent,
-				unsigned ByteCount)
+				u32 ByteCount)
 {
 	(void) CallBackRef;
 	(void) StatusEvent;
@@ -863,12 +875,12 @@ static void StubStatusHandler(void *CallBackRef, u32 StatusEvent,
 * master since the hardware does not drive the slave select as a slave.
 *
 ******************************************************************************/
-void XSpiPs_InterruptHandler(void *InstancePtr)
+void XSpiPs_InterruptHandler(XSpiPs *InstancePtr)
 {
-	XSpiPs *SpiPtr = (XSpiPs *)InstancePtr;
+	XSpiPs *SpiPtr = InstancePtr;
 	u32 IntrStatus;
 	u32 ConfigReg;
-	unsigned BytesDone; /* Number of bytes done so far. */
+	u32 BytesDone; /* Number of bytes done so far. */
 
 	Xil_AssertVoid(InstancePtr != NULL);
 	Xil_AssertVoid(SpiPtr->IsReady == XIL_COMPONENT_IS_READY);
@@ -892,7 +904,7 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 	 * before checking for progress of a transfer, since this error needs
 	 * to abort any operation in progress.
 	 */
-	if (XSPIPS_IXR_MODF_MASK == (IntrStatus & XSPIPS_IXR_MODF_MASK)) {
+	if ((u32)XSPIPS_IXR_MODF_MASK == (u32)(IntrStatus & XSPIPS_IXR_MODF_MASK)) {
 		BytesDone = SpiPtr->RequestedBytes - SpiPtr->RemainingBytes;
 
 		/*
@@ -912,7 +924,7 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 	}
 
 
-	if (IntrStatus & XSPIPS_IXR_TXOW_MASK) {
+	if ((IntrStatus & XSPIPS_IXR_TXOW_MASK) != 0U) {
 		u8 TempData;
 		u32 TransCount;
 		/*
@@ -927,10 +939,11 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 		 */
 		TransCount = SpiPtr->RequestedBytes - SpiPtr->RemainingBytes;
 
-		while (TransCount) {
-			TempData = XSpiPs_RecvByte(SpiPtr->Config.BaseAddress);
+		while (TransCount != 0U) {
+			TempData = (u8)XSpiPs_RecvByte(SpiPtr->Config.BaseAddress);
 			if (SpiPtr->RecvBufferPtr != NULL) {
-				*SpiPtr->RecvBufferPtr++ = (u8) TempData;
+				*SpiPtr->RecvBufferPtr = TempData;
+				SpiPtr->RecvBufferPtr += 1;
 			}
 			SpiPtr->RequestedBytes--;
 			--TransCount;
@@ -940,17 +953,17 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 		 * Fill the TXFIFO until data exists, otherwise fill upto
 		 * FIFO depth.
 		 */
-		while ((SpiPtr->RemainingBytes > 0) &&
+		while ((SpiPtr->RemainingBytes > 0U) &&
 			(TransCount < XSPIPS_FIFO_DEPTH)) {
 			XSpiPs_SendByte(SpiPtr->Config.BaseAddress,
 					 *SpiPtr->SendBufferPtr);
-			SpiPtr->SendBufferPtr++;
+			SpiPtr->SendBufferPtr += 1;
 			SpiPtr->RemainingBytes--;
 			++TransCount;
 		}
 
-		if ((SpiPtr->RemainingBytes == 0) &&
-			(SpiPtr->RequestedBytes == 0)) {
+		if ((SpiPtr->RemainingBytes == 0U) &&
+			(SpiPtr->RequestedBytes == 0U)) {
 			/*
 			 * No more data to send. Disable the interrupt and
 			 * inform the upper layer software that the transfer
@@ -964,7 +977,7 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 			 * Disable slave select lines as the transfer
 			 * is complete.
 			 */
-			if (XSpiPs_IsManualChipSelect(InstancePtr)) {
+			if (XSpiPs_IsManualChipSelect(InstancePtr) == TRUE) {
 				ConfigReg = XSpiPs_ReadReg(
 					SpiPtr->Config.BaseAddress,
 					 XSPIPS_CR_OFFSET);
@@ -1000,8 +1013,8 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 			 * Start the transfer by not inhibiting the transmitter
 			 * any longer.
 			 */
-			if (XSpiPs_IsManualStart(SpiPtr)
-				&& XSpiPs_IsMaster(SpiPtr)) {
+			if ((XSpiPs_IsManualStart(SpiPtr) == TRUE)
+				&& (XSpiPs_IsMaster(SpiPtr) == TRUE)) {
 				ConfigReg = XSpiPs_ReadReg(
 					SpiPtr->Config.BaseAddress,
 					 XSPIPS_CR_OFFSET);
@@ -1016,7 +1029,7 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 	/*
 	 * Check for overflow and underflow errors.
 	 */
-	if (IntrStatus & XSPIPS_IXR_RXOVR_MASK) {
+	if ((IntrStatus & XSPIPS_IXR_RXOVR_MASK) != 0U) {
 		BytesDone = SpiPtr->RequestedBytes - SpiPtr->RemainingBytes;
 		SpiPtr->IsBusy = FALSE;
 
@@ -1024,7 +1037,7 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 		 * The Slave select lines are being manually controlled.
 		 * Disable them because the transfer is complete.
 		 */
-		if (XSpiPs_IsManualChipSelect(SpiPtr)) {
+		if (XSpiPs_IsManualChipSelect(SpiPtr) == TRUE) {
 			ConfigReg = XSpiPs_ReadReg(
 				SpiPtr->Config.BaseAddress,
 				 XSPIPS_CR_OFFSET);
@@ -1038,7 +1051,7 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 			XST_SPI_RECEIVE_OVERRUN, BytesDone);
 	}
 
-	if (IntrStatus & XSPIPS_IXR_TXUF_MASK) {
+	if ((IntrStatus & XSPIPS_IXR_TXUF_MASK) != 0U) {
 		BytesDone = SpiPtr->RequestedBytes - SpiPtr->RemainingBytes;
 
 		SpiPtr->IsBusy = FALSE;
@@ -1046,7 +1059,7 @@ void XSpiPs_InterruptHandler(void *InstancePtr)
 		 * The Slave select lines are being manually controlled.
 		 * Disable them because the transfer is complete.
 		 */
-		if (XSpiPs_IsManualChipSelect(SpiPtr)) {
+		if (XSpiPs_IsManualChipSelect(SpiPtr) == TRUE) {
 			ConfigReg = XSpiPs_ReadReg(
 				SpiPtr->Config.BaseAddress,
 				 XSPIPS_CR_OFFSET);
@@ -1083,14 +1096,20 @@ void XSpiPs_Abort(XSpiPs *InstancePtr)
 {
 
 	XSpiPs_Disable(InstancePtr);
+	u8 Temp;
+	u32 Check;
 
 	/*
 	 * Clear the RX FIFO and drop any data.
 	 */
-	while ((XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
-		 XSPIPS_SR_OFFSET) & XSPIPS_IXR_RXNEMPTY_MASK) ==
-		XSPIPS_IXR_RXNEMPTY_MASK) {
-		(void) XSpiPs_RecvByte(InstancePtr->Config.BaseAddress);
+	Check = (XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
+		XSPIPS_SR_OFFSET) & XSPIPS_IXR_RXNEMPTY_MASK);
+	while (Check != (u32)0U) {
+		Temp = (u8)XSpiPs_RecvByte(InstancePtr->Config.BaseAddress);
+		if(Temp != (u8)0U){
+		}
+		Check = (XSpiPs_ReadReg(InstancePtr->Config.BaseAddress,
+		XSPIPS_SR_OFFSET) & XSPIPS_IXR_RXNEMPTY_MASK);
 	}
 
 	/*
@@ -1100,7 +1119,8 @@ void XSpiPs_Abort(XSpiPs *InstancePtr)
 			XSPIPS_SR_OFFSET,
 			XSPIPS_IXR_MODF_MASK);
 
-	InstancePtr->RemainingBytes = 0;
-	InstancePtr->RequestedBytes = 0;
+	InstancePtr->RemainingBytes = 0U;
+	InstancePtr->RequestedBytes = 0U;
 	InstancePtr->IsBusy = FALSE;
 }
+
diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips.h b/XilinxProcessorIPLib/drivers/spips/src/xspips.h
index 37a16702..d3090357 100755
--- a/XilinxProcessorIPLib/drivers/spips/src/xspips.h
+++ b/XilinxProcessorIPLib/drivers/spips/src/xspips.h
@@ -238,6 +238,8 @@
 *                       Added prototypes of reset API and related constant
 *                       definitions.
 *                       Added check for MODF in polled transfer function.
+* 3.0   vm    12/09/14	Modified driver source code for MISRA-C:2012 compliance.
+*			Support for Zynq Ultrascale Mp added.
 *
 * 
* @@ -314,12 +316,12 @@ extern "C" { * * @{ */ -#define XSPIPS_MASTER_OPTION 0x1 /**< Master mode option */ -#define XSPIPS_CLK_ACTIVE_LOW_OPTION 0x2 /**< Active Low Clock option */ -#define XSPIPS_CLK_PHASE_1_OPTION 0x4 /**< Clock Phase one option */ -#define XSPIPS_DECODE_SSELECT_OPTION 0x8 /**< Select 16 slaves Option */ -#define XSPIPS_FORCE_SSELECT_OPTION 0x10 /**< Force Slave Select */ -#define XSPIPS_MANUAL_START_OPTION 0x20 /**< Manual Start mode option */ +#define XSPIPS_MASTER_OPTION 0x00000001U /**< Master mode option */ +#define XSPIPS_CLK_ACTIVE_LOW_OPTION 0x00000002U /**< Active Low Clock option */ +#define XSPIPS_CLK_PHASE_1_OPTION 0x00000004U /**< Clock Phase one option */ +#define XSPIPS_DECODE_SSELECT_OPTION 0x00000008U /**< Select 16 slaves Option */ +#define XSPIPS_FORCE_SSELECT_OPTION 0x00000010U /**< Force Slave Select */ +#define XSPIPS_MANUAL_START_OPTION 0x00000020U /**< Manual Start mode option */ /*@}*/ @@ -331,13 +333,13 @@ extern "C" { * @{ */ -#define XSPIPS_CLK_PRESCALE_4 0x01 /**< PCLK/4 Prescaler */ -#define XSPIPS_CLK_PRESCALE_8 0x02 /**< PCLK/8 Prescaler */ -#define XSPIPS_CLK_PRESCALE_16 0x03 /**< PCLK/16 Prescaler */ -#define XSPIPS_CLK_PRESCALE_32 0x04 /**< PCLK/32 Prescaler */ -#define XSPIPS_CLK_PRESCALE_64 0x05 /**< PCLK/64 Prescaler */ -#define XSPIPS_CLK_PRESCALE_128 0x06 /**< PCLK/128 Prescaler */ -#define XSPIPS_CLK_PRESCALE_256 0x07 /**< PCLK/256 Prescaler */ +#define XSPIPS_CLK_PRESCALE_4 0x01U /**< PCLK/4 Prescaler */ +#define XSPIPS_CLK_PRESCALE_8 0x02U /**< PCLK/8 Prescaler */ +#define XSPIPS_CLK_PRESCALE_16 0x03U /**< PCLK/16 Prescaler */ +#define XSPIPS_CLK_PRESCALE_32 0x04U /**< PCLK/32 Prescaler */ +#define XSPIPS_CLK_PRESCALE_64 0x05U /**< PCLK/64 Prescaler */ +#define XSPIPS_CLK_PRESCALE_128 0x06U /**< PCLK/128 Prescaler */ +#define XSPIPS_CLK_PRESCALE_256 0x07U /**< PCLK/256 Prescaler */ /*@}*/ @@ -349,10 +351,10 @@ extern "C" { * * @{ */ -#define XSPIPS_EVENT_MODE_FAULT 1 /**< Mode fault error */ -#define XSPIPS_EVENT_TRANSFER_DONE 2 /**< Transfer done */ -#define XSPIPS_EVENT_TRANSMIT_UNDERRUN 3 /**< TX FIFO empty */ -#define XSPIPS_EVENT_RECEIVE_OVERRUN 4 /**< Receive data loss because +#define XSPIPS_EVENT_MODE_FAULT 1U /**< Mode fault error */ +#define XSPIPS_EVENT_TRANSFER_DONE 2U /**< Transfer done */ +#define XSPIPS_EVENT_TRANSMIT_UNDERRUN 3U /**< TX FIFO empty */ +#define XSPIPS_EVENT_RECEIVE_OVERRUN 4U /**< Receive data loss because RX FIFO full */ /*@}*/ @@ -377,7 +379,7 @@ extern "C" { * requested if the status event indicates an error. */ typedef void (*XSpiPs_StatusHandler) (void *CallBackRef, u32 StatusEvent, - unsigned ByteCount); + u32 ByteCount); /** * This typedef contains configuration information for the device. @@ -399,8 +401,8 @@ typedef struct { u8 *SendBufferPtr; /**< Buffer to send (state) */ u8 *RecvBufferPtr; /**< Buffer to receive (state) */ - unsigned RequestedBytes; /**< Number of bytes to transfer (state) */ - unsigned RemainingBytes; /**< Number of bytes left to transfer(state) */ + u32 RequestedBytes; /**< Number of bytes to transfer (state) */ + u32 RemainingBytes; /**< Number of bytes left to transfer(state) */ u32 IsBusy; /**< A transfer is in progress (state) */ u32 SlaveSelect; /**< The slave select value when XSPIPS_FORCE_SSELECT_OPTION is set */ @@ -427,8 +429,8 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_IsManualStart(InstancePtr) \ - ((XSpiPs_GetOptions(InstancePtr) & \ - XSPIPS_MANUAL_START_OPTION) ? TRUE : FALSE) + (((XSpiPs_GetOptions(InstancePtr) & \ + XSPIPS_MANUAL_START_OPTION) != (u32)0U) ? TRUE : FALSE) /****************************************************************************/ /* @@ -446,8 +448,8 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_IsManualChipSelect(InstancePtr) \ - ((XSpiPs_GetOptions(InstancePtr) & \ - XSPIPS_FORCE_SSELECT_OPTION) ? TRUE : FALSE) + (((XSpiPs_GetOptions(InstancePtr) & \ + XSPIPS_FORCE_SSELECT_OPTION) != (u32)0U) ? TRUE : FALSE) /****************************************************************************/ /* @@ -465,8 +467,8 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_IsDecodeSSelect(InstancePtr) \ - ((XSpiPs_GetOptions(InstancePtr) & \ - XSPIPS_DECODE_SSELECT_OPTION) ? TRUE : FALSE) + (((XSpiPs_GetOptions(InstancePtr) & \ + XSPIPS_DECODE_SSELECT_OPTION) != (u32)0U) ? TRUE : FALSE) /****************************************************************************/ /* @@ -484,8 +486,8 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_IsMaster(InstancePtr) \ - ((XSpiPs_GetOptions(InstancePtr) & \ - XSPIPS_MASTER_OPTION) ? TRUE : FALSE) + (((XSpiPs_GetOptions(InstancePtr) & \ + XSPIPS_MASTER_OPTION) != (u32)0U) ? TRUE : FALSE) /****************************************************************************/ /** @@ -561,7 +563,7 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_GetTXWatermark(InstancePtr) \ - XSpiPs_In32((InstancePtr->Config.BaseAddress) + XSPIPS_TXWR_OFFSET) + XSpiPs_In32(((InstancePtr)->Config.BaseAddress) + XSPIPS_TXWR_OFFSET) /****************************************************************************/ /** @@ -599,7 +601,7 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_GetRXWatermark(InstancePtr) \ - XSpiPs_In32((InstancePtr->Config.BaseAddress) + XSPIPS_RXWR_OFFSET) + XSpiPs_In32(((InstancePtr)->Config.BaseAddress) + XSPIPS_RXWR_OFFSET) /****************************************************************************/ /** @@ -615,7 +617,7 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_Enable(InstancePtr) \ - XSpiPs_Out32((InstancePtr->Config.BaseAddress) + XSPIPS_ER_OFFSET, \ + XSpiPs_Out32(((InstancePtr)->Config.BaseAddress) + XSPIPS_ER_OFFSET, \ XSPIPS_ER_ENABLE_MASK) /****************************************************************************/ @@ -632,7 +634,7 @@ typedef struct { * *****************************************************************************/ #define XSpiPs_Disable(InstancePtr) \ - XSpiPs_Out32((InstancePtr->Config.BaseAddress) + XSPIPS_ER_OFFSET, 0) + XSpiPs_Out32(((InstancePtr)->Config.BaseAddress) + XSPIPS_ER_OFFSET, 0U) /************************** Function Prototypes ******************************/ @@ -644,41 +646,41 @@ XSpiPs_Config *XSpiPs_LookupConfig(u16 DeviceId); /* * Functions implemented in xspips.c */ -int XSpiPs_CfgInitialize(XSpiPs *InstancePtr, XSpiPs_Config * Config, +s32 XSpiPs_CfgInitialize(XSpiPs *InstancePtr, XSpiPs_Config * ConfigPtr, u32 EffectiveAddr); void XSpiPs_Reset(XSpiPs *InstancePtr); -int XSpiPs_Transfer(XSpiPs *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, - unsigned ByteCount); +s32 XSpiPs_Transfer(XSpiPs *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, + u32 ByteCount); -int XSpiPs_PolledTransfer(XSpiPs *InstancePtr, u8 *SendBufPtr, - u8 *RecvBufPtr, unsigned ByteCount); +s32 XSpiPs_PolledTransfer(XSpiPs *InstancePtr, u8 *SendBufPtr, + u8 *RecvBufPtr, u32 ByteCount); void XSpiPs_SetStatusHandler(XSpiPs *InstancePtr, void *CallBackRef, - XSpiPs_StatusHandler FuncPtr); -void XSpiPs_InterruptHandler(void *InstancePtr); + XSpiPs_StatusHandler FunctionPtr); +void XSpiPs_InterruptHandler(XSpiPs *InstancePtr); void XSpiPs_Abort(XSpiPs *InstancePtr); -int XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SelectValue); +s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel); u8 XSpiPs_GetSlaveSelect(XSpiPs *InstancePtr); /* * Functions for selftest, in xspips_selftest.c */ -int XSpiPs_SelfTest(XSpiPs *InstancePtr); +s32 XSpiPs_SelfTest(XSpiPs *InstancePtr); /* * Functions for options, in xspips_options.c */ -int XSpiPs_SetOptions(XSpiPs *InstancePtr, u32 Options); +s32 XSpiPs_SetOptions(XSpiPs *InstancePtr, u32 Options); u32 XSpiPs_GetOptions(XSpiPs *InstancePtr); -int XSpiPs_SetClkPrescaler(XSpiPs *InstancePtr, u8 Prescaler); +s32 XSpiPs_SetClkPrescaler(XSpiPs *InstancePtr, u8 Prescaler); u8 XSpiPs_GetClkPrescaler(XSpiPs *InstancePtr); -int XSpiPs_SetDelays(XSpiPs *InstancePtr, u8 DelayNss, u8 DelayBtwn, +s32 XSpiPs_SetDelays(XSpiPs *InstancePtr, u8 DelayNss, u8 DelayBtwn, u8 DelayAfter, u8 DelayInit); void XSpiPs_GetDelays(XSpiPs *InstancePtr, u8 *DelayNss, u8 *DelayBtwn, u8 *DelayAfter, u8 *DelayInit); diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips_g.c b/XilinxProcessorIPLib/drivers/spips/src/xspips_g.c index 4a44e973..ca459c53 100755 --- a/XilinxProcessorIPLib/drivers/spips/src/xspips_g.c +++ b/XilinxProcessorIPLib/drivers/spips/src/xspips_g.c @@ -72,15 +72,15 @@ */ XSpiPs_Config XSpiPs_ConfigTable[XPAR_XSPIPS_NUM_INSTANCES] = { { - XPAR_XSPIPS_0_DEVICE_ID, /* Device ID for instance */ - XPAR_XSPIPS_0_BASEADDR, /* Device base address */ - XPAR_XSPIPS_0_CLOCK_HZ + (u16)XPAR_XSPIPS_0_DEVICE_ID, /* Device ID for instance */ + (u32)XPAR_XSPIPS_0_BASEADDR, /* Device base address */ + (u32)XPAR_XSPIPS_0_SPI_CLK_FREQ_HZ }, #ifdef XPAR_XSPIPS_1_DEVICE_ID { - XPAR_XSPIPS_1_DEVICE_ID, /* Device ID for instance */ - XPAR_XSPIPS_1_BASEADDR, /* Device base address */ - XPAR_XSPIPS_1_CLOCK_HZ + (u16)XPAR_XSPIPS_1_DEVICE_ID, /* Device ID for instance */ + (u32)XPAR_XSPIPS_1_BASEADDR, /* Device base address */ + (u32)XPAR_XSPIPS_1_SPI_CLK_FREQ_HZ } #endif }; diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.c b/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.c index 4503f161..4bf8a37d 100755 --- a/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.c +++ b/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.c @@ -69,7 +69,7 @@ * * Resets the spi module * -* @param None +* @param BaseAddress is the base address of the device. * * @return None * @@ -78,7 +78,7 @@ ******************************************************************************/ void XSpiPs_ResetHw(u32 BaseAddress) { - + u32 Check; /* * Disable Interrupts */ @@ -89,7 +89,7 @@ void XSpiPs_ResetHw(u32 BaseAddress) * Disable device */ XSpiPs_WriteReg(BaseAddress, XSPIPS_ER_OFFSET, - 0); + 0U); /* * Write default value to RX and TX threshold registers * RX threshold should be set to 1 here as the corresponding @@ -103,9 +103,12 @@ void XSpiPs_ResetHw(u32 BaseAddress) /* * Clear RXFIFO */ - while ((XSpiPs_ReadReg(BaseAddress,XSPIPS_SR_OFFSET) & - XSPIPS_IXR_RXNEMPTY_MASK) != 0) { - XSpiPs_ReadReg(BaseAddress, XSPIPS_RXD_OFFSET); + Check = (XSpiPs_ReadReg(BaseAddress,XSPIPS_SR_OFFSET) & + XSPIPS_IXR_RXNEMPTY_MASK); + while (Check != 0U) { + (void)XSpiPs_ReadReg(BaseAddress, XSPIPS_RXD_OFFSET); + Check = (XSpiPs_ReadReg(BaseAddress,XSPIPS_SR_OFFSET) & + XSPIPS_IXR_RXNEMPTY_MASK); } /* diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.h b/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.h index d2dbbd27..f2ff75a9 100755 --- a/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.h +++ b/XilinxProcessorIPLib/drivers/spips/src/xspips_hw.h @@ -78,18 +78,18 @@ extern "C" { * Register offsets from the base address of an SPI device. * @{ */ -#define XSPIPS_CR_OFFSET 0x00 /**< Configuration */ -#define XSPIPS_SR_OFFSET 0x04 /**< Interrupt Status */ -#define XSPIPS_IER_OFFSET 0x08 /**< Interrupt Enable */ -#define XSPIPS_IDR_OFFSET 0x0c /**< Interrupt Disable */ -#define XSPIPS_IMR_OFFSET 0x10 /**< Interrupt Enabled Mask */ -#define XSPIPS_ER_OFFSET 0x14 /**< Enable/Disable Register */ -#define XSPIPS_DR_OFFSET 0x18 /**< Delay Register */ -#define XSPIPS_TXD_OFFSET 0x1C /**< Data Transmit Register */ -#define XSPIPS_RXD_OFFSET 0x20 /**< Data Receive Register */ -#define XSPIPS_SICR_OFFSET 0x24 /**< Slave Idle Count */ -#define XSPIPS_TXWR_OFFSET 0x28 /**< Transmit FIFO Watermark */ -#define XSPIPS_RXWR_OFFSET 0x2C /**< Receive FIFO Watermark */ +#define XSPIPS_CR_OFFSET 0x00U /**< Configuration */ +#define XSPIPS_SR_OFFSET 0x04U /**< Interrupt Status */ +#define XSPIPS_IER_OFFSET 0x08U /**< Interrupt Enable */ +#define XSPIPS_IDR_OFFSET 0x0CU /**< Interrupt Disable */ +#define XSPIPS_IMR_OFFSET 0x10U /**< Interrupt Enabled Mask */ +#define XSPIPS_ER_OFFSET 0x14U /**< Enable/Disable Register */ +#define XSPIPS_DR_OFFSET 0x18U /**< Delay Register */ +#define XSPIPS_TXD_OFFSET 0x1CU /**< Data Transmit Register */ +#define XSPIPS_RXD_OFFSET 0x20U /**< Data Receive Register */ +#define XSPIPS_SICR_OFFSET 0x24U /**< Slave Idle Count */ +#define XSPIPS_TXWR_OFFSET 0x28U /**< Transmit FIFO Watermark */ +#define XSPIPS_RXWR_OFFSET 0x2CU /**< Receive FIFO Watermark */ /* @} */ /** @name Configuration Register @@ -98,26 +98,26 @@ extern "C" { * affects the operation of an SPI device. Read/Write. * @{ */ -#define XSPIPS_CR_MODF_GEN_EN_MASK 0x00020000 /**< Modefail Generation +#define XSPIPS_CR_MODF_GEN_EN_MASK 0x00020000U /**< Modefail Generation Enable */ -#define XSPIPS_CR_MANSTRT_MASK 0x00010000 /**< Manual Transmission Start */ -#define XSPIPS_CR_MANSTRTEN_MASK 0x00008000 /**< Manual Transmission Start +#define XSPIPS_CR_MANSTRT_MASK 0x00010000U /**< Manual Transmission Start */ +#define XSPIPS_CR_MANSTRTEN_MASK 0x00008000U /**< Manual Transmission Start Enable */ -#define XSPIPS_CR_SSFORCE_MASK 0x00004000 /**< Force Slave Select */ -#define XSPIPS_CR_SSCTRL_MASK 0x00003C00 /**< Slave Select Decode */ -#define XSPIPS_CR_SSCTRL_SHIFT 10 /**< Slave Select Decode shift */ -#define XSPIPS_CR_SSCTRL_MAXIMUM 0xF /**< Slave Select maximum value */ -#define XSPIPS_CR_SSDECEN_MASK 0x00000200 /**< Slave Select Decode Enable */ +#define XSPIPS_CR_SSFORCE_MASK 0x00004000U /**< Force Slave Select */ +#define XSPIPS_CR_SSCTRL_MASK 0x00003C00U /**< Slave Select Decode */ +#define XSPIPS_CR_SSCTRL_SHIFT 10U /**< Slave Select Decode shift */ +#define XSPIPS_CR_SSCTRL_MAXIMUM 0xFU /**< Slave Select maximum value */ +#define XSPIPS_CR_SSDECEN_MASK 0x00000200U /**< Slave Select Decode Enable */ -#define XSPIPS_CR_PRESC_MASK 0x00000038 /**< Prescaler Setting */ -#define XSPIPS_CR_PRESC_SHIFT 3 /**< Prescaler shift */ -#define XSPIPS_CR_PRESC_MAXIMUM 0x07 /**< Prescaler maximum value */ +#define XSPIPS_CR_PRESC_MASK 0x00000038U /**< Prescaler Setting */ +#define XSPIPS_CR_PRESC_SHIFT 3U /**< Prescaler shift */ +#define XSPIPS_CR_PRESC_MAXIMUM 0x07U /**< Prescaler maximum value */ -#define XSPIPS_CR_CPHA_MASK 0x00000004 /**< Phase Configuration */ -#define XSPIPS_CR_CPOL_MASK 0x00000002 /**< Polarity Configuration */ +#define XSPIPS_CR_CPHA_MASK 0x00000004U /**< Phase Configuration */ +#define XSPIPS_CR_CPOL_MASK 0x00000002U /**< Polarity Configuration */ -#define XSPIPS_CR_MSTREN_MASK 0x00000001 /**< Master Mode Enable */ -#define XSPIPS_CR_RESET_STATE 0x00020000 /**< Mode Fail Generation Enable */ +#define XSPIPS_CR_MSTREN_MASK 0x00000001U /**< Master Mode Enable */ +#define XSPIPS_CR_RESET_STATE 0x00020000U /**< Mode Fail Generation Enable */ /* @} */ @@ -156,20 +156,20 @@ extern "C" { * @{ */ -#define XSPIPS_IXR_TXUF_MASK 0x00000040 /**< Tx FIFO Underflow */ -#define XSPIPS_IXR_RXFULL_MASK 0x00000020 /**< Rx FIFO Full */ -#define XSPIPS_IXR_RXNEMPTY_MASK 0x00000010 /**< Rx FIFO Not Empty */ -#define XSPIPS_IXR_TXFULL_MASK 0x00000008 /**< Tx FIFO Full */ -#define XSPIPS_IXR_TXOW_MASK 0x00000004 /**< Tx FIFO Overwater */ -#define XSPIPS_IXR_MODF_MASK 0x00000002 /**< Mode Fault */ -#define XSPIPS_IXR_RXOVR_MASK 0x00000001 /**< Rx FIFO Overrun */ -#define XSPIPS_IXR_DFLT_MASK 0x00000027 /**< Default interrupts +#define XSPIPS_IXR_TXUF_MASK 0x00000040U /**< Tx FIFO Underflow */ +#define XSPIPS_IXR_RXFULL_MASK 0x00000020U /**< Rx FIFO Full */ +#define XSPIPS_IXR_RXNEMPTY_MASK 0x00000010U /**< Rx FIFO Not Empty */ +#define XSPIPS_IXR_TXFULL_MASK 0x00000008U /**< Tx FIFO Full */ +#define XSPIPS_IXR_TXOW_MASK 0x00000004U /**< Tx FIFO Overwater */ +#define XSPIPS_IXR_MODF_MASK 0x00000002U /**< Mode Fault */ +#define XSPIPS_IXR_RXOVR_MASK 0x00000001U /**< Rx FIFO Overrun */ +#define XSPIPS_IXR_DFLT_MASK 0x00000027U /**< Default interrupts mask */ -#define XSPIPS_IXR_WR_TO_CLR_MASK 0x00000043 /**< Interrupts which +#define XSPIPS_IXR_WR_TO_CLR_MASK 0x00000043U /**< Interrupts which need write to clear */ -#define XSPIPS_ISR_RESET_STATE 0x04 /**< Default to tx/rx +#define XSPIPS_ISR_RESET_STATE 0x04U /**< Default to tx/rx * reg empty */ -#define XSPIPS_IXR_DISABLE_ALL_MASK 0x00000043 /**< Disable all +#define XSPIPS_IXR_DISABLE_ALL_MASK 0x00000043U /**< Disable all * interrupts */ /* @} */ @@ -180,7 +180,7 @@ extern "C" { * Read/Write * @{ */ -#define XSPIPS_ER_ENABLE_MASK 0x00000001 /**< SPI Enable Bit Mask */ +#define XSPIPS_ER_ENABLE_MASK 0x00000001U /**< SPI Enable Bit Mask */ /* @} */ @@ -190,17 +190,17 @@ extern "C" { * slave mode. Read/Write * @{ */ -#define XSPIPS_DR_NSS_MASK 0xFF000000 /**< Delay for slave select +#define XSPIPS_DR_NSS_MASK 0xFF000000U /**< Delay for slave select * de-assertion between * word transfers mask */ -#define XSPIPS_DR_NSS_SHIFT 24 /**< Delay for slave select +#define XSPIPS_DR_NSS_SHIFT 24U /**< Delay for slave select * de-assertion between * word transfers shift */ -#define XSPIPS_DR_BTWN_MASK 0x00FF0000 /**< Delay Between Transfers mask */ -#define XSPIPS_DR_BTWN_SHIFT 16 /**< Delay Between Transfers shift */ -#define XSPIPS_DR_AFTER_MASK 0x0000FF00 /**< Delay After Transfers mask */ -#define XSPIPS_DR_AFTER_SHIFT 8 /**< Delay After Transfers shift */ -#define XSPIPS_DR_INIT_MASK 0x000000FF /**< Delay Initially mask */ +#define XSPIPS_DR_BTWN_MASK 0x00FF0000U /**< Delay Between Transfers mask */ +#define XSPIPS_DR_BTWN_SHIFT 16U /**< Delay Between Transfers shift */ +#define XSPIPS_DR_AFTER_MASK 0x0000FF00U /**< Delay After Transfers mask */ +#define XSPIPS_DR_AFTER_SHIFT 8U /**< Delay After Transfers shift */ +#define XSPIPS_DR_INIT_MASK 0x000000FFU /**< Delay Initially mask */ /* @} */ @@ -213,7 +213,7 @@ extern "C" { * * @{ */ -#define XSPIPS_SICR_MASK 0x000000FF /**< Slave Idle Count Mask */ +#define XSPIPS_SICR_MASK 0x000000FFU /**< Slave Idle Count Mask */ /* @} */ @@ -226,8 +226,8 @@ extern "C" { * * @{ */ -#define XSPIPS_TXWR_MASK 0x0000007F /**< Transmit Watermark Mask */ -#define XSPIPS_TXWR_RESET_VALUE 0x00000001 /**< Transmit Watermark +#define XSPIPS_TXWR_MASK 0x0000007FU /**< Transmit Watermark Mask */ +#define XSPIPS_TXWR_RESET_VALUE 0x00000001U /**< Transmit Watermark * register reset value */ /* @} */ @@ -239,8 +239,8 @@ extern "C" { * * @{ */ -#define XSPIPS_RXWR_MASK 0x0000007F /**< Receive Watermark Mask */ -#define XSPIPS_RXWR_RESET_VALUE 0x00000001 /**< Receive Watermark +#define XSPIPS_RXWR_MASK 0x0000007FU /**< Receive Watermark Mask */ +#define XSPIPS_RXWR_RESET_VALUE 0x00000001U /**< Receive Watermark * register reset value */ /* @} */ @@ -250,7 +250,7 @@ extern "C" { * * @{ */ -#define XSPIPS_FIFO_DEPTH 128 /**< FIFO depth of Tx and Rx */ +#define XSPIPS_FIFO_DEPTH 128U /**< FIFO depth of Tx and Rx */ /* @} */ /**************************** Type Definitions *******************************/ diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips_options.c b/XilinxProcessorIPLib/drivers/spips/src/xspips_options.c index 0c13a047..1e4d3a61 100755 --- a/XilinxProcessorIPLib/drivers/spips/src/xspips_options.c +++ b/XilinxProcessorIPLib/drivers/spips/src/xspips_options.c @@ -115,11 +115,12 @@ static OptionsMap OptionsTable[] = { * This function is not thread-safe. * ******************************************************************************/ -int XSpiPs_SetOptions(XSpiPs *InstancePtr, u32 Options) +s32 XSpiPs_SetOptions(XSpiPs *InstancePtr, u32 Options) { u32 ConfigReg; - unsigned int Index; + u32 Index; u32 CurrentConfigReg; + s32 Status; Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); @@ -128,60 +129,62 @@ int XSpiPs_SetOptions(XSpiPs *InstancePtr, u32 Options) * Do not allow the slave select to change while a transfer is in * progress. Not thread-safe. */ - if (InstancePtr->IsBusy) { - return XST_DEVICE_BUSY; + if (InstancePtr->IsBusy == TRUE) { + Status = (s32)XST_DEVICE_BUSY; + } else { + + ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress, + XSPIPS_CR_OFFSET); + + CurrentConfigReg = ConfigReg; + + /* + * Loop through the options table, turning the option on or off + * depending on whether the bit is set in the incoming options flag. + */ + for (Index = 0U; Index < XSPIPS_NUM_OPTIONS; Index++) { + if ((Options & OptionsTable[Index].Option) != (u32)0U) { + /* Turn it on */ + ConfigReg |= OptionsTable[Index].Mask; + } + else { + /* Turn it off */ + ConfigReg &= ~(OptionsTable[Index].Mask); + } + } + + + /* + * If CPOL-CPHA bits are toggled from previous state, + * disable before writing the configuration register and then enable. + */ + if( ((CurrentConfigReg & XSPIPS_CR_CPOL_MASK) != + (ConfigReg & XSPIPS_CR_CPOL_MASK)) || + ((CurrentConfigReg & XSPIPS_CR_CPHA_MASK) != + (ConfigReg & XSPIPS_CR_CPHA_MASK)) ) { + XSpiPs_Disable(InstancePtr); + } + + /* + * Now write the Config register. Leave it to the upper layers + * to restart the device. + */ + XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, + XSPIPS_CR_OFFSET, ConfigReg); + + /* + * Enable + */ + if( ((CurrentConfigReg & XSPIPS_CR_CPOL_MASK) != + (ConfigReg & XSPIPS_CR_CPOL_MASK)) || + ((CurrentConfigReg & XSPIPS_CR_CPHA_MASK) != + (ConfigReg & XSPIPS_CR_CPHA_MASK)) ) { + XSpiPs_Enable(InstancePtr); + } + + Status = (s32)XST_SUCCESS; } - - ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress, - XSPIPS_CR_OFFSET); - - CurrentConfigReg = ConfigReg; - - /* - * Loop through the options table, turning the option on or off - * depending on whether the bit is set in the incoming options flag. - */ - for (Index = 0; Index < XSPIPS_NUM_OPTIONS; Index++) { - if (Options & OptionsTable[Index].Option) { - /* Turn it on */ - ConfigReg |= OptionsTable[Index].Mask; - } - else { - /* Turn it off */ - ConfigReg &= ~(OptionsTable[Index].Mask); - } - } - - - /* - * If CPOL-CPHA bits are toggled from previous state, - * disable before writing the configuration register and then enable. - */ - if( ((CurrentConfigReg & XSPIPS_CR_CPOL_MASK) != - (ConfigReg & XSPIPS_CR_CPOL_MASK)) || - ((CurrentConfigReg & XSPIPS_CR_CPHA_MASK) != - (ConfigReg & XSPIPS_CR_CPHA_MASK)) ) { - XSpiPs_Disable(InstancePtr); - } - - /* - * Now write the Config register. Leave it to the upper layers - * to restart the device. - */ - XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, - XSPIPS_CR_OFFSET, ConfigReg); - - /* - * Enable - */ - if( ((CurrentConfigReg & XSPIPS_CR_CPOL_MASK) != - (ConfigReg & XSPIPS_CR_CPOL_MASK)) || - ((CurrentConfigReg & XSPIPS_CR_CPHA_MASK) != - (ConfigReg & XSPIPS_CR_CPHA_MASK)) ) { - XSpiPs_Enable(InstancePtr); - } - - return XST_SUCCESS; + return Status; } /*****************************************************************************/ @@ -203,9 +206,9 @@ int XSpiPs_SetOptions(XSpiPs *InstancePtr, u32 Options) ******************************************************************************/ u32 XSpiPs_GetOptions(XSpiPs *InstancePtr) { - u32 OptionsFlag = 0; + u32 OptionsFlag = 0U; u32 ConfigReg; - unsigned int Index; + u32 Index; Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); @@ -250,39 +253,42 @@ u32 XSpiPs_GetOptions(XSpiPs *InstancePtr) * This function is not thread-safe. * ******************************************************************************/ -int XSpiPs_SetClkPrescaler(XSpiPs *InstancePtr, u8 Prescaler) +s32 XSpiPs_SetClkPrescaler(XSpiPs *InstancePtr, u8 Prescaler) { u32 ConfigReg; + s32 Status; Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); - Xil_AssertNonvoid((Prescaler > 0) && (Prescaler <= XSPIPS_CR_PRESC_MAXIMUM)); + Xil_AssertNonvoid((Prescaler > 0U) && (Prescaler <= XSPIPS_CR_PRESC_MAXIMUM)); /* * Do not allow the prescaler to be changed while a transfer is in * progress. Not thread-safe. */ - if (InstancePtr->IsBusy) { - return XST_DEVICE_BUSY; + if (InstancePtr->IsBusy == TRUE) { + Status = (s32)XST_DEVICE_BUSY; + } else { + + /* + * Read the Config register, mask out the interesting bits, and set + * them with the shifted value passed into the function. Write the + * results back to the Config register. + */ + ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress, + XSPIPS_CR_OFFSET); + + ConfigReg &= (u32)(~XSPIPS_CR_PRESC_MASK); + ConfigReg |= (u32) ((u32)Prescaler & (u32)XSPIPS_CR_PRESC_MAXIMUM) << + XSPIPS_CR_PRESC_SHIFT; + + XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, + XSPIPS_CR_OFFSET, + ConfigReg); + + Status = (s32)XST_SUCCESS; } - - /* - * Read the Config register, mask out the interesting bits, and set - * them with the shifted value passed into the function. Write the - * results back to the Config register. - */ - ConfigReg = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress, - XSPIPS_CR_OFFSET); - - ConfigReg &= ~XSPIPS_CR_PRESC_MASK; - ConfigReg |= (u32) (Prescaler & XSPIPS_CR_PRESC_MAXIMUM) << - XSPIPS_CR_PRESC_SHIFT; - - XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, - XSPIPS_CR_OFFSET, - ConfigReg); - - return XST_SUCCESS; + return Status; } /*****************************************************************************/ @@ -345,10 +351,11 @@ u8 XSpiPs_GetClkPrescaler(XSpiPs *InstancePtr) * @note None. * ******************************************************************************/ -int XSpiPs_SetDelays(XSpiPs *InstancePtr, u8 DelayNss, u8 DelayBtwn, +s32 XSpiPs_SetDelays(XSpiPs *InstancePtr, u8 DelayNss, u8 DelayBtwn, u8 DelayAfter, u8 DelayInit) { u32 DelayRegister; + s32 Status; Xil_AssertNonvoid(InstancePtr != NULL); Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); @@ -357,20 +364,22 @@ int XSpiPs_SetDelays(XSpiPs *InstancePtr, u8 DelayNss, u8 DelayBtwn, * Do not allow the delays to change while a transfer is in * progress. Not thread-safe. */ - if (InstancePtr->IsBusy) { - return XST_DEVICE_BUSY; + if (InstancePtr->IsBusy == TRUE) { + Status = (s32)XST_DEVICE_BUSY; + } else { + + /* Shift, Mask and OR the values to build the register settings */ + DelayRegister = (u32) DelayNss << XSPIPS_DR_NSS_SHIFT; + DelayRegister |= (u32) DelayBtwn << XSPIPS_DR_BTWN_SHIFT; + DelayRegister |= (u32) DelayAfter << XSPIPS_DR_AFTER_SHIFT; + DelayRegister |= (u32) DelayInit; + + XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, + XSPIPS_DR_OFFSET, DelayRegister); + + Status = (s32)XST_SUCCESS; } - - /* Shift, Mask and OR the values to build the register settings */ - DelayRegister = (u32) DelayNss << XSPIPS_DR_NSS_SHIFT; - DelayRegister |= (u32) DelayBtwn << XSPIPS_DR_BTWN_SHIFT; - DelayRegister |= (u32) DelayAfter << XSPIPS_DR_AFTER_SHIFT; - DelayRegister |= (u32) DelayInit; - - XSpiPs_WriteReg(InstancePtr->Config.BaseAddress, - XSPIPS_DR_OFFSET, DelayRegister); - - return XST_SUCCESS; + return Status; } /*****************************************************************************/ diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips_selftest.c b/XilinxProcessorIPLib/drivers/spips/src/xspips_selftest.c index dbd9a042..4da2c660 100755 --- a/XilinxProcessorIPLib/drivers/spips/src/xspips_selftest.c +++ b/XilinxProcessorIPLib/drivers/spips/src/xspips_selftest.c @@ -87,9 +87,9 @@ * @note None. * ******************************************************************************/ -int XSpiPs_SelfTest(XSpiPs *InstancePtr) +s32 XSpiPs_SelfTest(XSpiPs *InstancePtr) { - int Status; + s32 Status; u32 Register; u8 DelayTestNss; u8 DelayTestBtwn; @@ -110,19 +110,19 @@ int XSpiPs_SelfTest(XSpiPs *InstancePtr) Register = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress, XSPIPS_CR_OFFSET); if (Register != XSPIPS_CR_RESET_STATE) { - return XST_REGISTER_ERROR; + return (s32)XST_REGISTER_ERROR; } Register = XSpiPs_ReadReg(InstancePtr->Config.BaseAddress, XSPIPS_SR_OFFSET); if (Register != XSPIPS_ISR_RESET_STATE) { - return XST_REGISTER_ERROR; + return (s32)XST_REGISTER_ERROR; } - DelayTestNss = 0x5A; - DelayTestBtwn = 0xA5; - DelayTestAfter = 0xAA; - DelayTestInit = 0x55; + DelayTestNss = 0x5AU; + DelayTestBtwn = 0xA5U; + DelayTestAfter = 0xAAU; + DelayTestInit = 0x55U; /* * Write and read the delay register, just to be sure there is some @@ -130,19 +130,19 @@ int XSpiPs_SelfTest(XSpiPs *InstancePtr) */ Status = XSpiPs_SetDelays(InstancePtr, DelayTestNss, DelayTestBtwn, DelayTestAfter, DelayTestInit); - if (Status != XST_SUCCESS) { + if (Status != (s32)XST_SUCCESS) { return Status; } XSpiPs_GetDelays(InstancePtr, &DelayTestNss, &DelayTestBtwn, &DelayTestAfter, &DelayTestInit); - if ((0x5A != DelayTestNss) || (0xA5 != DelayTestBtwn) || - (0xAA != DelayTestAfter) || (0x55 != DelayTestInit)) { - return XST_REGISTER_ERROR; + if ((0x5AU != DelayTestNss) || (0xA5U != DelayTestBtwn) || + (0xAAU != DelayTestAfter) || (0x55U != DelayTestInit)) { + return (s32)XST_REGISTER_ERROR; } - Status = XSpiPs_SetDelays(InstancePtr, 0, 0, 0, 0); - if (Status != XST_SUCCESS) { + Status = XSpiPs_SetDelays(InstancePtr, 0U, 0U, 0U, 0U); + if (Status != (s32)XST_SUCCESS) { return Status; } @@ -151,5 +151,5 @@ int XSpiPs_SelfTest(XSpiPs *InstancePtr) */ XSpiPs_Reset(InstancePtr); - return XST_SUCCESS; + return (s32)XST_SUCCESS; } diff --git a/XilinxProcessorIPLib/drivers/spips/src/xspips_sinit.c b/XilinxProcessorIPLib/drivers/spips/src/xspips_sinit.c index 94d35b62..74d74097 100755 --- a/XilinxProcessorIPLib/drivers/spips/src/xspips_sinit.c +++ b/XilinxProcessorIPLib/drivers/spips/src/xspips_sinit.c @@ -62,7 +62,7 @@ /************************** Function Prototypes ******************************/ /************************** Variable Definitions *****************************/ -extern XSpiPs_Config XSpiPs_ConfigTable[]; +extern XSpiPs_Config XSpiPs_ConfigTable[XPAR_XSPIPS_NUM_INSTANCES]; /*****************************************************************************/ /** @@ -84,13 +84,13 @@ extern XSpiPs_Config XSpiPs_ConfigTable[]; XSpiPs_Config *XSpiPs_LookupConfig(u16 DeviceId) { XSpiPs_Config *CfgPtr = NULL; - int Index; + u32 Index; - for (Index = 0; Index < XPAR_XSPIPS_NUM_INSTANCES; Index++) { + for (Index = 0U; Index < (u32)XPAR_XSPIPS_NUM_INSTANCES; Index++) { if (XSpiPs_ConfigTable[Index].DeviceId == DeviceId) { CfgPtr = &XSpiPs_ConfigTable[Index]; break; } } - return CfgPtr; + return (XSpiPs_Config *)CfgPtr; }