PERFORCE change 96070 for review

Warner Losh imp at FreeBSD.org
Tue Apr 25 17:09:56 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=96070

Change 96070 by imp at imp_hammer on 2006/04/25 17:09:22

	Hmmm, seems to be the printf that made it work :-(

Affected files ...

.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/spi_flash.c#6 edit

Differences ...

==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/spi_flash.c#6 (text+ko) ====

@@ -32,6 +32,20 @@
 static char		tx_commandBuffer[8], rx_commandBuffer[8];
 
 
+static void
+Delay(void)
+{
+#if 0
+	unsigned later;
+
+	later = (AT91C_BASE_ST->ST_CRTR + 10) & AT91C_ST_CRTV;
+	while (later != AT91C_BASE_ST->ST_CRTR)
+		continue;
+#else
+	printf("V--------");
+#endif
+}
+
 /*
  * .KB_C_FN_DEFINITION_START
  * void SendCommand(spiCommand_t *pCommand)
@@ -42,31 +56,26 @@
 static void
 SendCommand(spiCommand_t *pCommand)
 {
-	unsigned	i, v;
+	unsigned	v;
+	AT91PS_SPI	pSPI = AT91C_BASE_SPI;
 
-	AT91C_BASE_SPI->SPI_PTCR = AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS;
+	pSPI->SPI_PTCR = AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS;
 
-	AT91C_BASE_SPI->SPI_RPR = (unsigned)pCommand->rx_cmd;
-	AT91C_BASE_SPI->SPI_RCR = pCommand->rx_cmd_size;
-	AT91C_BASE_SPI->SPI_TPR = (unsigned)pCommand->tx_cmd;
-	AT91C_BASE_SPI->SPI_TCR = pCommand->tx_cmd_size;
+	pSPI->SPI_RPR = (unsigned)pCommand->rx_cmd;
+	pSPI->SPI_RCR = pCommand->rx_cmd_size;
+	pSPI->SPI_TPR = (unsigned)pCommand->tx_cmd;
+	pSPI->SPI_TCR = pCommand->tx_cmd_size;
 
-	AT91C_BASE_SPI->SPI_TNPR = (unsigned)pCommand->tx_data;
-	AT91C_BASE_SPI->SPI_TNCR = pCommand->tx_data_size;
-	AT91C_BASE_SPI->SPI_RNPR = (unsigned)pCommand->rx_data;
-	AT91C_BASE_SPI->SPI_RNCR = pCommand->rx_data_size;
+	pSPI->SPI_TNPR = (unsigned)pCommand->tx_data;
+	pSPI->SPI_TNCR = pCommand->tx_data_size;
+	pSPI->SPI_RNPR = (unsigned)pCommand->rx_data;
+	pSPI->SPI_RNCR = pCommand->rx_data_size;
 
-	AT91C_BASE_SPI->SPI_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;
+	pSPI->SPI_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;
 
 	// wait for completion
-	i = 100000;
-	while (!((v = AT91C_BASE_SPI->SPI_SR) & AT91C_SPI_SPENDRX) && --i > 0) {
-		if ((v & 0xffff) != 0)
-			printf("V is 0x%x\r\n", v);
-		continue;
-	}
-	if (i == 0)
-		printf("STALLED! %x\r\n", AT91C_BASE_SPI->SPI_SR);
+	while (!((v = pSPI->SPI_SR) & AT91C_SPI_SPENDRX))
+		Delay();
 }
 
 
@@ -299,4 +308,6 @@
 
 	if (((initStatus = GetFlashStatus()) & 0xFC) != 0xBC)
 		printf(" Unexpected SPI flash status: 0x%x\r\n", initStatus);
+	// Increment real time counter every SLCK
+	AT91C_BASE_ST->ST_RTMR = 1;
 }


More information about the p4-projects mailing list