NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/40531 (5.0_BETA/i386 doesn't power off on Dell Latitude X1 with CF card plugged in)
The following reply was made to PR kern/40531; it has been noted by GNATS.
From: "Valeriy E. Ushakov" <uwe%stderr.spb.ru@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc:
Subject: Re: kern/40531 (5.0_BETA/i386 doesn't power off on Dell Latitude X1
with CF card plugged in)
Date: Sat, 7 Mar 2009 02:23:37 +0300
On Fri, Mar 06, 2009 at 23:04:32 +0000, uwe%NetBSD.org@localhost wrote:
> State-Changed-From-To: feedback->open
> State-Changed-By: uwe%NetBSD.org@localhost
> State-Changed-Why:
> The change introduces regression for platforms with their primary disk
> on wdc@pcmcia (at least all hpc* platforms, I guess). See
> http://mail-index.netbsd.org/port-hpcsh/2009/02/26/msg000834.html
The following patch makes my hpcsh properly attach CF at boot time.
Please, review and test.
--- wdc_pcmcia.c 21 Feb 2009 03:29:25 +0300 1.113
+++ wdc_pcmcia.c 07 Mar 2009 02:16:09 +0300
@@ -86,6 +86,7 @@
static int wdc_pcmcia_validate_config_io(struct pcmcia_config_entry *);
static int wdc_pcmcia_validate_config_memory(struct pcmcia_config_entry *);
static void wdc_pcmcia_attach(device_t, device_t, void *);
+static void wdc_pcmcia_interrupts(device_t);
static int wdc_pcmcia_detach(device_t, int);
CFATTACH_DECL_NEW(wdc_pcmcia, sizeof(struct wdc_pcmcia_softc),
@@ -302,15 +303,28 @@
sc->ata_channel.ch_ndrive = wdcp ? wdcp->wdc_ndrive : 2;
wdc_init_shadow_regs(&sc->ata_channel);
- error = wdc_pcmcia_enable(self, 1);
- if (error)
- goto fail;
-
/* We can enable and disable the controller. */
sc->sc_wdcdev.sc_atac.atac_atapi_adapter._generic.adapt_enable =
wdc_pcmcia_enable;
sc->sc_wdcdev.sc_atac.atac_atapi_adapter._generic.adapt_refcnt = 1;
+ config_interrupts(self, wdc_pcmcia_interrupts);
+ return;
+
+fail:
+ pcmcia_function_unconfigure(pa->pf);
+}
+
+static void
+wdc_pcmcia_interrupts(device_t self)
+{
+ struct wdc_pcmcia_softc *sc = device_private(self);
+ int error;
+
+ error = wdc_pcmcia_enable(self, 1);
+ if (error)
+ goto fail;
+
/*
* Some devices needs some more delay after power up to stabilize
* and probe properly, so give them half a second.
@@ -318,15 +332,15 @@
*/
config_pending_incr();
tsleep(wdc_pcmcia_attach, PWAIT, "wdcattach", hz / 2);
-
wdcattach(&sc->ata_channel);
config_pending_decr();
+
ata_delref(&sc->ata_channel);
sc->sc_state = WDC_PCMCIA_ATTACHED;
return;
fail:
- pcmcia_function_unconfigure(pa->pf);
+ pcmcia_function_unconfigure(sc->sc_pf);
}
static int
-uwe
Home |
Main Index |
Thread Index |
Old Index