Author: wulf
Date: Sun Nov  3 20:54:17 2019
New Revision: 354303
URL: https://svnweb.freebsd.org/changeset/base/354303

Log:
  [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.

Modified:
  head/sys/dev/ichiic/ig4_iic.c
  head/sys/dev/ichiic/ig4_var.h

Modified: head/sys/dev/ichiic/ig4_iic.c
==============================================================================
--- head/sys/dev/ichiic/ig4_iic.c       Sun Nov  3 20:53:13 2019        
(r354302)
+++ head/sys/dev/ichiic/ig4_iic.c       Sun Nov  3 20:54:17 2019        
(r354303)
@@ -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

Modified: head/sys/dev/ichiic/ig4_var.h
==============================================================================
--- head/sys/dev/ichiic/ig4_var.h       Sun Nov  3 20:53:13 2019        
(r354302)
+++ head/sys/dev/ichiic/ig4_var.h       Sun Nov  3 20:54:17 2019        
(r354303)
@@ -48,7 +48,6 @@ enum ig4_vers { IG4_HASWELL, IG4_ATOM, IG4_SKYLAKE, IG
 
 struct ig4iic_softc {
        device_t        dev;
-       struct          intr_config_hook enum_hook;
        device_t        iicbus;
        struct resource *regs_res;
        int             regs_rid;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to