続々々々々 wd(4)

てな訳で src/sys/arch/arm/xscale/pxa2x0_pcic.c で attach 時のカードの probe/attach 処理をイベントスレッドの先頭に移動させてあげる事で解決。

Index: pxa2x0_pcic.c
===================================================================
RCS file: /cvsroot/src/sys/arch/arm/xscale/pxa2x0_pcic.c,v
retrieving revision 1.5
diff -u -r1.5 pxa2x0_pcic.c
--- pxa2x0_pcic.c	29 Jan 2009 12:28:15 -0000	1.5
+++ pxa2x0_pcic.c	12 Feb 2009 15:16:19 -0000
@@ -335,7 +335,6 @@
 	struct pcmciabus_attach_args paa;
 	struct pxapcic_socket *so;
 	int s[PXAPCIC_NSLOT];
-	u_int cs;
 	int i;
 
 	printf(": %d slot%s\n", sc->sc_nslots, sc->sc_nslots < 2 ? "" : "s");
@@ -392,11 +391,6 @@
 		/* GPIO pin for interrupt */
 		so->irqpin = sc->sc_irqpin[s[i]];
 
-		/* If there's a card there, attach it. */
-		cs = (*so->pcictag->read)(so, PXAPCIC_CARD_STATUS);
-		if (cs == PXAPCIC_CARD_VALID)
-			pxapcic_attach_card(so);
-
 		if (kthread_create(PRI_NONE, 0, NULL, pxapcic_event_thread,
 		    so, &so->event_thread, "%s,%d", device_xname(sc->sc_dev),
 		    so->socket)) {
@@ -428,6 +422,11 @@
 	u_int cs;
 	int present;
 
+	/* If there's a card there, attach it. */
+	cs = (*sock->pcictag->read)(sock, PXAPCIC_CARD_STATUS);
+	if (cs == PXAPCIC_CARD_VALID)
+		pxapcic_attach_card(sock);
+
 	while (sock->sc->sc_shutdown == 0) {
 		(void) tsleep(sock, PWAIT, "pxapcicev", 0);