PERFORCE change 110700 for review
Warner Losh
imp at FreeBSD.org
Wed Nov 29 17:37:15 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=110700
Change 110700 by imp at imp_lighthouse on 2006/11/30 01:36:39
Interrupt driven doesn't work, but polling does. Go figure.
Affected files ...
.. //depot/projects/arm/src/sys/arm/at91/at91_spi.c#13 edit
.. //depot/projects/arm/src/sys/arm/at91/at91_spireg.h#7 edit
Differences ...
==== //depot/projects/arm/src/sys/arm/at91/at91_spi.c#13 (text+ko) ====
@@ -98,8 +98,8 @@
* Allocate DMA tags and maps
*/
err = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, 2058, 1, 2048, BUS_DMA_ALLOCNOW,
- NULL, NULL, &sc->dmatag);
+ BUS_SPACE_MAXADDR, NULL, NULL, 1024 * 10, 1, 1024 * 10,
+ BUS_DMA_ALLOCNOW, NULL, NULL, &sc->dmatag);
if (err != 0)
goto out;
for (i = 0; i < 4; i++) {
@@ -231,25 +231,32 @@
cmd->tx_cmd_sz, at91_getaddr, &addr, 0) != 0)
goto out;
WR4(sc, PDC_RPR, addr);
- WR4(sc, PDC_RCR, cmd->tx_cmd_sz);
+ WR4(sc, PDC_RCR, cmd->rx_cmd_sz);
bus_dmamap_sync(sc->dmatag, sc->map[i], BUS_DMASYNC_PREREAD);
mode[i++] = BUS_DMASYNC_POSTREAD;
if (cmd->rx_data_sz > 0) {
if (bus_dmamap_load(sc->dmatag, sc->map[i], cmd->rx_data,
- cmd->tx_data_sz, at91_getaddr, &addr, 0) != 0)
+ cmd->rx_data_sz, at91_getaddr, &addr, 0) != 0)
goto out;
WR4(sc, PDC_RNPR, addr);
WR4(sc, PDC_RNCR, cmd->rx_data_sz);
bus_dmamap_sync(sc->dmatag, sc->map[i], BUS_DMASYNC_PREREAD);
mode[i++] = BUS_DMASYNC_POSTREAD;
}
- WR4(sc, SPI_IER, SPI_SR_ENDRX);
+ rxdone = sc->rxdone;
+#if 0
+ WR4(sc, SPI_IER, SPI_SR_RXBUFF);
WR4(sc, PDC_PTCR, PDC_PTCR_TXTEN | PDC_PTCR_RXTEN);
- rxdone = sc->rxdone;
do {
err = msleep(&sc->rxdone, NULL, PCATCH | PZERO, "spi", hz);
} while (rxdone == sc->rxdone && err != EINTR);
+#else
+ WR4(sc, PDC_PTCR, PDC_PTCR_TXTEN | PDC_PTCR_RXTEN);
+ while (!(RD4(sc, SPI_SR) & SPI_SR_RXBUFF))
+ continue;
+ err = 0;
+#endif
WR4(sc, PDC_PTCR, PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS);
if (err == 0) {
for (j = 0; j < i; j++)
@@ -271,14 +278,14 @@
uint32_t sr;
sr = RD4(sc, SPI_SR) & RD4(sc, SPI_IMR);
- if (sr & SPI_SR_ENDRX) {
+ if (sr & SPI_SR_RXBUFF) {
sc->rxdone++;
- WR4(sc, SPI_IDR, SPI_SR_ENDRX);
+ WR4(sc, SPI_IDR, SPI_SR_RXBUFF);
wakeup(&sc->rxdone);
}
- if (sr & ~SPI_SR_ENDRX) {
+ if (sr & ~SPI_SR_RXBUFF) {
device_printf(sc->dev, "Unexpected ISR %#x\n", sr);
- WR4(sc, SPI_IDR, sr & ~SPI_SR_ENDRX);
+ WR4(sc, SPI_IDR, sr & ~SPI_SR_RXBUFF);
}
}
==== //depot/projects/arm/src/sys/arm/at91/at91_spireg.h#7 (text+ko) ====
@@ -51,7 +51,7 @@
#define SPI_SR_OVRES 0x00008
#define SPI_SR_ENDRX 0x00010
#define SPI_SR_ENDTX 0x00020
-#define SPI_SR_RXBUFE 0x00040
+#define SPI_SR_RXBUFF 0x00040
#define SPI_SR_TXBUFE 0x00080
#define SPI_SR_SPIENS 0x10000
#define SPI_IER 0x14 /* IER: Interrupt Enable Regsiter */
More information about the p4-projects
mailing list