Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Nov 2019 20:54:18 +0000 (UTC)
From:      Vladimir Kondratyev <wulf@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r354303 - head/sys/dev/ichiic
Message-ID:  <201911032054.xA3KsImx065137@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911032054.xA3KsImx065137>