Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Nov 2006 18:23:12 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 109692 for review
Message-ID:  <200611101823.kAAINCUj086089@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=109692

Change 109692 by sam@sam_ebb on 2006/11/10 18:22:20

	o correct CS1 configuration
	o disable interrupts until we sort out ata device reset; otherwise
	  ata storms ('cuz reset has done something to generate an
	  interrupt but then no devices are presumed to exist so the
	  interrupt is not processed)

Affected files ...

.. //depot/projects/arm/src/sys/arm/xscale/ixp425/avila_ata.c#3 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/xscale/ixp425/avila_ata.c#3 (text+ko) ====

@@ -81,7 +81,9 @@
 	} sc_intr[1];			/* NB: 1/channel */
 };
 
+#if 0
 static void ata_avila_intr(void *);
+#endif
 bs_protos(ata);
 
 static int
@@ -142,20 +144,21 @@
 	/* clear ISR */
 	GPIO_CONF_WRITE_4(sa, IXP425_GPIO_GPISR, (1<<AVILA_IDE_GPIN));
 
-	/* configure CS1 window */
+	/* configure CS1 window, leaving timing unchanged */
 	EXP_BUS_WRITE_4(sc, EXP_TIMING_CS1_OFFSET,
 	    EXP_BUS_READ_4(sc, EXP_TIMING_CS1_OFFSET) |
-	        EXP_MUX_EN | EXP_WR_EN | EXP_BYTE_EN);
+	        EXP_BYTE_EN | EXP_WR_EN | EXP_BYTE_RD16 | EXP_CS_EN);
 
 	/* setup interrupt */
 	sc->sc_irq = bus_alloc_resource(dev, SYS_RES_IRQ, &sc->sc_rid,
 	    AVILA_IDE_IRQ, AVILA_IDE_IRQ, 1, RF_ACTIVE);
 	if (!sc->sc_irq)
 		panic("Unable to allocate irq %u.\n", AVILA_IDE_IRQ);
+#if 0
 	bus_setup_intr(dev, sc->sc_irq,
 	    INTR_TYPE_BIO | INTR_MPSAFE | INTR_ENTROPY,
 	    ata_avila_intr, sc, &sc->sc_ih);
-
+#endif
 bootverbose=1;
 	/* attach channel on this controller */
 	device_add_child(dev, "ata", devclass_find_free_unit(ata_devclass, 0));
@@ -186,15 +189,19 @@
 	return 0;
 }
 
+#if 0
 static void
 ata_avila_intr(void *xsc)
 {
 	struct ata_avila_softc *sc = xsc;
 
+#if 0
 printf("%s: cb %p arg %p\n", __func__, sc->sc_intr[0].cb, sc->sc_intr[0].arg);/*XXX*/
+#endif
 	if (sc->sc_intr[0].cb != NULL)
 		sc->sc_intr[0].cb(sc->sc_intr[0].arg);
 }
+#endif
 
 static struct resource *
 ata_avila_alloc_resource(device_t dev, device_t child, int type, int *rid,
@@ -412,7 +419,9 @@
 	}
 	ch->r_io[ATA_CONTROL].res = &sc->sc_ata;
 	ch->r_io[ATA_CONTROL].offset = AVILA_IDE_CTRL;
+	/* NB: by convention this points at the base of registers */
 	ch->r_io[ATA_IDX_ADDR].res = &sc->sc_ata;
+	ch->r_io[ATA_IDX_ADDR].offset = 0;
 	ata_default_registers(dev);
 
 	ata_generic_hw(dev);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611101823.kAAINCUj086089>