defer vchiq initialization with config_mountroot, works around a timing issue that caused problems during sdhc init on some boards

This commit is contained in:
jmcneill 2013-03-25 22:59:25 +00:00
parent ad80650833
commit 54e2c2ba0a
1 changed files with 13 additions and 12 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: vchiq_kmod_netbsd.c,v 1.1 2013/03/08 12:32:31 jmcneill Exp $ */ /* $NetBSD: vchiq_kmod_netbsd.c,v 1.2 2013/03/25 22:59:25 jmcneill Exp $ */
/*- /*-
* Copyright (c) 2013 The NetBSD Foundation, Inc. * Copyright (c) 2013 The NetBSD Foundation, Inc.
@ -30,7 +30,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: vchiq_kmod_netbsd.c,v 1.1 2013/03/08 12:32:31 jmcneill Exp $"); __KERNEL_RCSID(0, "$NetBSD: vchiq_kmod_netbsd.c,v 1.2 2013/03/25 22:59:25 jmcneill Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -104,10 +104,19 @@ vchiq_attach(device_t parent, device_t self, void *aux)
return; return;
} }
vchiq_core_initialize();
vchiq_softc = sc; vchiq_softc = sc;
config_mountroot(self, vchiq_defer);
}
static void
vchiq_defer(device_t self)
{
struct vchiq_attach_args vaa;
struct vchiq_softc *sc = device_private(self);
vchiq_core_initialize();
sc->sc_ih = bcm2835_intr_establish(sc->sc_intr, IPL_VM, sc->sc_ih = bcm2835_intr_establish(sc->sc_intr, IPL_VM,
vchiq_intr, sc); vchiq_intr, sc);
if (sc->sc_ih == NULL) { if (sc->sc_ih == NULL) {
@ -118,14 +127,6 @@ vchiq_attach(device_t parent, device_t self, void *aux)
vchiq_init(); vchiq_init();
config_mountroot(self, vchiq_defer);
}
static void
vchiq_defer(device_t self)
{
struct vchiq_attach_args vaa;
vaa.vaa_name = "AUDS"; vaa.vaa_name = "AUDS";
config_found_ia(self, "vchiqbus", &vaa, vchiq_print); config_found_ia(self, "vchiqbus", &vaa, vchiq_print);
} }