1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-24 16:10:11 +00:00

[ig4] Do not wait until interrupts are enabled at attach stage

as the driver is fully functional on a cold boot through utilization of
polled mode.

As a side effect, ig4 children probe and attach methods can be called
earlier in the boot sequence, so now it is up to the child drivers
to wait for a kernel initialization completion if it is required.
This commit is contained in:
Vladimir Kondratyev 2019-11-03 20:54:17 +00:00
parent 41b24e0917
commit 6777ccd98b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=354303
2 changed files with 3 additions and 29 deletions

View File

@ -74,7 +74,6 @@ __FBSDID("$FreeBSD$");
#define DO_POLL(sc) (cold || kdb_active || SCHEDULER_STOPPED() || sc->poll)
static void ig4iic_start(void *xdev);
static void ig4iic_intr(void *cookie);
static void ig4iic_dump(ig4iic_softc_t *sc);
@ -664,38 +663,14 @@ ig4iic_attach(ig4iic_softc_t *sc)
"Unable to setup irq: error %d\n", error);
}
sc->enum_hook.ich_func = ig4iic_start;
sc->enum_hook.ich_arg = sc->dev;
/*
* We have to wait until interrupts are enabled. I2C read and write
* only works if the interrupts are available.
*/
if (config_intrhook_establish(&sc->enum_hook) != 0)
error = ENOMEM;
else
error = 0;
done:
return (error);
}
void
ig4iic_start(void *xdev)
{
int error;
ig4iic_softc_t *sc;
device_t dev = (device_t)xdev;
sc = device_get_softc(dev);
config_intrhook_disestablish(&sc->enum_hook);
error = bus_generic_attach(sc->dev);
if (error) {
device_printf(sc->dev,
"failed to attach child: error %d\n", error);
}
done:
return (error);
}
int

View File

@ -48,7 +48,6 @@ enum ig4_vers { IG4_HASWELL, IG4_ATOM, IG4_SKYLAKE, IG4_APL };
struct ig4iic_softc {
device_t dev;
struct intr_config_hook enum_hook;
device_t iicbus;
struct resource *regs_res;
int regs_rid;