Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Aug 2020 16:26:11 +0000 (UTC)
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r363799 - head/sys/dev/fdt
Message-ID:  <202008031626.073GQBB5089141@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andrew
Date: Mon Aug  3 16:26:10 2020
New Revision: 363799
URL: https://svnweb.freebsd.org/changeset/base/363799

Log:
  Allow child classes of simplebus to call attach directly
  
  Reduce code duplication when a bus is subclassed from simplebus by allowing
  them to call simplebus_attach directly. This is useful when the child bus
  will just implement the same calls.
  
  As not all children will expect to have a ranges property, e.g. the
  Raspberry Pi firmware, allow this property to be missing.
  
  Reviewed by:	manu
  Sponsored by:	Innovate UK
  Differential Revision:	https://reviews.freebsd.org/D25925

Modified:
  head/sys/dev/fdt/simplebus.c
  head/sys/dev/fdt/simplebus.h

Modified: head/sys/dev/fdt/simplebus.c
==============================================================================
--- head/sys/dev/fdt/simplebus.c	Mon Aug  3 13:12:07 2020	(r363798)
+++ head/sys/dev/fdt/simplebus.c	Mon Aug  3 16:26:10 2020	(r363799)
@@ -46,7 +46,6 @@ __FBSDID("$FreeBSD$");
  * Bus interface.
  */
 static int		simplebus_probe(device_t dev);
-static int		simplebus_attach(device_t dev);
 static struct resource *simplebus_alloc_resource(device_t, device_t, int,
     int *, rman_res_t, rman_res_t, rman_res_t, u_int);
 static void		simplebus_probe_nomatch(device_t bus, device_t child);
@@ -134,7 +133,7 @@ simplebus_probe(device_t dev)
 	return (BUS_PROBE_GENERIC);
 }
 
-static int
+int
 simplebus_attach(device_t dev)
 {
 	struct		simplebus_softc *sc;
@@ -142,7 +141,8 @@ simplebus_attach(device_t dev)
 
 	sc = device_get_softc(dev);
 	simplebus_init(dev, 0);
-	if (simplebus_fill_ranges(sc->node, sc) < 0) {
+	if ((sc->flags & SB_FLAG_NO_RANGES) == 0 &&
+	    simplebus_fill_ranges(sc->node, sc) < 0) {
 		device_printf(dev, "could not get ranges\n");
 		return (ENXIO);
 	}

Modified: head/sys/dev/fdt/simplebus.h
==============================================================================
--- head/sys/dev/fdt/simplebus.h	Mon Aug  3 13:12:07 2020	(r363798)
+++ head/sys/dev/fdt/simplebus.h	Mon Aug  3 16:26:10 2020	(r363799)
@@ -47,6 +47,8 @@ struct simplebus_softc {
 
 	struct simplebus_range *ranges;
 	int nranges;
+#define	SB_FLAG_NO_RANGES	(1 << 0) /* Bus doesn't have ranges property */
+	int flags;
 
 	pcell_t acells, scells;
 };
@@ -63,4 +65,7 @@ struct simplebus_devinfo *simplebus_setup_dinfo(device
     struct simplebus_devinfo *di);
 int simplebus_fill_ranges(phandle_t node,
     struct simplebus_softc *sc);
+
+int simplebus_attach(device_t dev);
+
 #endif	/* _FDT_SIMPLEBUS_H */



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