From 0769a0f4945f8aaf8c475dbcbdb0e6951fa360e2 Mon Sep 17 00:00:00 2001 From: andreast Date: Tue, 15 Oct 2013 18:59:32 +0000 Subject: Move the resource allocation from the ata_*_probe section to the ata_*_attach section. This prevents a boot crash on nearly all iMacs and PowerMacs/Books. The allocation in the probe section was working before because ata_probe was returning 0 which did not invoke a second DEVICE_PROBE. Now it returns a BUS_PROBE_DEFAULT which can invoke a second DEVICE_PROBE which results in a "failed to reserve resource" exit. PR: powerpc/182978 Discussed with: grehan@ MFC after: 1 Week --- sys/powerpc/powermac/ata_macio.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'sys/powerpc/powermac/ata_macio.c') diff --git a/sys/powerpc/powermac/ata_macio.c b/sys/powerpc/powermac/ata_macio.c index e15ab00..8505664 100644 --- a/sys/powerpc/powermac/ata_macio.c +++ b/sys/powerpc/powermac/ata_macio.c @@ -152,8 +152,6 @@ ata_macio_probe(device_t dev) const char *type = ofw_bus_get_type(dev); const char *name = ofw_bus_get_name(dev); struct ata_macio_softc *sc; - struct ata_channel *ch; - int rid, i; if (strcmp(type, "ata") != 0 && strcmp(type, "ide") != 0) @@ -161,7 +159,6 @@ ata_macio_probe(device_t dev) sc = device_get_softc(dev); bzero(sc, sizeof(struct ata_macio_softc)); - ch = &sc->sc_ch.sc_ch; if (strcmp(name,"ata-4") == 0) { device_set_desc(dev,"Apple MacIO Ultra ATA Controller"); @@ -173,7 +170,23 @@ ata_macio_probe(device_t dev) sc->max_mode = ATA_WDMA2; } + return (ata_probe(dev)); +} + +static int +ata_macio_attach(device_t dev) +{ + struct ata_macio_softc *sc = device_get_softc(dev); + uint32_t timingreg; + struct ata_channel *ch; + int rid, i; + + /* + * Allocate resources + */ + rid = 0; + ch = &sc->sc_ch.sc_ch; sc->sc_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); if (sc->sc_mem == NULL) { @@ -196,15 +209,6 @@ ata_macio_probe(device_t dev) ch->flags |= ATA_USE_16BIT | ATA_NO_ATAPI_DMA; ata_generic_hw(dev); - return (ata_probe(dev)); -} - -static int -ata_macio_attach(device_t dev) -{ - struct ata_macio_softc *sc = device_get_softc(dev); - uint32_t timingreg; - #if USE_DBDMA_IRQ int dbdma_irq_rid = 1; struct resource *dbdma_irq; -- cgit v1.1