Module Name: src Committed By: jmcneill Date: Wed Apr 26 01:51:53 UTC 2017
Modified Files: src/sys/arch/evbarm/conf: TEGRA src/sys/dev/fdt: fdtbus.c fdtvar.h files.fdt Log Message: Allow for specifying (optional) pass number locator for devices at fdt. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/arch/evbarm/conf/TEGRA cvs rdiff -u -r1.8 -r1.9 src/sys/dev/fdt/fdtbus.c cvs rdiff -u -r1.12 -r1.13 src/sys/dev/fdt/fdtvar.h cvs rdiff -u -r1.10 -r1.11 src/sys/dev/fdt/files.fdt Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/evbarm/conf/TEGRA diff -u src/sys/arch/evbarm/conf/TEGRA:1.17 src/sys/arch/evbarm/conf/TEGRA:1.18 --- src/sys/arch/evbarm/conf/TEGRA:1.17 Sat Apr 22 23:53:24 2017 +++ src/sys/arch/evbarm/conf/TEGRA Wed Apr 26 01:51:52 2017 @@ -1,5 +1,5 @@ # -# $NetBSD: TEGRA,v 1.17 2017/04/22 23:53:24 jmcneill Exp $ +# $NetBSD: TEGRA,v 1.18 2017/04/26 01:51:52 jmcneill Exp $ # # NVIDIA Tegra K1 (T124) # @@ -42,28 +42,28 @@ fdt* at fdtbus? # CPU frequency scaling tegra124cpu* at fdt? -fclock* at fdt? -fregulator* at fdt? +fclock* at fdt? pass 4 +fregulator* at fdt? pass 4 gpiokeys* at fdt? # Interrupt controller -tegralic* at fdt? # LIC -gic* at fdt? # GIC +tegralic* at fdt? pass 1 # LIC +gic* at fdt? pass 1 # GIC # Memory controller -tegramc* at fdt? # MC +tegramc* at fdt? pass 4 # MC # FUSE controller -tegrafuse* at fdt? # FUSE +tegrafuse* at fdt? pass 4 # FUSE # Power management controller -tegrapmc* at fdt? # PMC +tegrapmc* at fdt? pass 4 # PMC # Clock and Reset controller -tegra124car* at fdt? # CAR +tegra124car* at fdt? pass 3 # CAR # GPIO controller -tegragpio* at fdt? # GPIO +tegragpio* at fdt? pass 2 # GPIO gpio* at gpiobus? # Timers Index: src/sys/dev/fdt/fdtbus.c diff -u src/sys/dev/fdt/fdtbus.c:1.8 src/sys/dev/fdt/fdtbus.c:1.9 --- src/sys/dev/fdt/fdtbus.c:1.8 Sun Apr 16 12:24:57 2017 +++ src/sys/dev/fdt/fdtbus.c Wed Apr 26 01:51:52 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: fdtbus.c,v 1.8 2017/04/16 12:24:57 jmcneill Exp $ */ +/* $NetBSD: fdtbus.c,v 1.9 2017/04/26 01:51:52 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.8 2017/04/16 12:24:57 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.9 2017/04/26 01:51:52 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -40,6 +40,8 @@ __KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1 #include <dev/fdt/fdtvar.h> +#include "locators.h" + #define FDT_MAX_PATH 256 struct fdt_node { @@ -64,8 +66,9 @@ struct fdt_softc { static int fdt_match(device_t, cfdata_t, void *); static void fdt_attach(device_t, device_t, void *); +static int fdt_scan_submatch(device_t, cfdata_t, const int *, void *); static void fdt_scan_bus(struct fdt_softc *); -static void fdt_scan(struct fdt_softc *); +static void fdt_scan(struct fdt_softc *, int); static void fdt_add_node(struct fdt_node *); static u_int fdt_get_order(int); @@ -159,17 +162,31 @@ fdt_attach(device_t parent, device_t sel if (OF_finddevice("/") != faa->faa_phandle) return; + aprint_debug_dev(sc->sc_dev, " order phandle bus path\n"); + aprint_debug_dev(sc->sc_dev, " ===== ======= === ====\n"); + TAILQ_FOREACH(node, &fdt_nodes, n_nodes) { + char buf[FDT_MAX_PATH]; + const char *path = buf; + if (!fdtbus_get_path(node->n_phandle, buf, sizeof(buf))) + path = node->n_name; + aprint_debug_dev(sc->sc_dev, " %04x 0x%04x %s %s\n", + node->n_order & 0xffff, node->n_phandle, + device_xname(node->n_bus), path); + } + /* Scan devices */ - fdt_scan(sc); + for (int pass = 1; pass <= FDTCF_PASS_DEFAULT; pass++) + fdt_scan(sc, pass); } static void fdt_init_attach_args(struct fdt_softc *sc, struct fdt_node *node, - struct fdt_attach_args *faa) + bool quiet, struct fdt_attach_args *faa) { *faa = sc->sc_faa; faa->faa_phandle = node->n_phandle; faa->faa_name = node->n_name; + faa->faa_quiet = quiet; } static void @@ -185,7 +202,7 @@ fdt_scan_bus(struct fdt_softc *sc) if (node->n_dev != NULL) continue; - fdt_init_attach_args(sc, node, &faa); + fdt_init_attach_args(sc, node, true, &faa); /* * Only attach busses to nodes where this driver is the best @@ -202,22 +219,37 @@ fdt_scan_bus(struct fdt_softc *sc) } } +static int +fdt_scan_submatch(device_t parent, cfdata_t cf, const int *locs, void *aux) +{ + if (locs[FDTCF_PASS] != FDTCF_PASS_DEFAULT && + locs[FDTCF_PASS] != cf->cf_loc[FDTCF_PASS]) + return 0; + + return config_stdsubmatch(parent, cf, locs, aux); +} + static void -fdt_scan(struct fdt_softc *sc) +fdt_scan(struct fdt_softc *sc, int pass) { struct fdt_node *node; struct fdt_attach_args faa; + const int locs[FDTCF_NLOCS] = { + [FDTCF_PASS] = pass + }; + bool quiet = pass != FDTCF_PASS_DEFAULT; TAILQ_FOREACH(node, &fdt_nodes, n_nodes) { if (node->n_dev != NULL) continue; - fdt_init_attach_args(sc, node, &faa); + fdt_init_attach_args(sc, node, quiet, &faa); /* * Attach the device. */ - node->n_dev = config_found(node->n_bus, &faa, fdt_print); + node->n_dev = config_found_sm_loc(node->n_bus, "fdt", locs, + &faa, fdt_print, fdt_scan_submatch); } } @@ -258,6 +290,9 @@ fdt_print(void *aux, const char *pnp) char buf[FDT_MAX_PATH]; const char *name = buf; + if (faa->faa_quiet) + return QUIET; + /* Skip "not configured" for nodes w/o compatible property */ if (OF_getproplen(faa->faa_phandle, "compatible") <= 0) return QUIET; Index: src/sys/dev/fdt/fdtvar.h diff -u src/sys/dev/fdt/fdtvar.h:1.12 src/sys/dev/fdt/fdtvar.h:1.13 --- src/sys/dev/fdt/fdtvar.h:1.12 Sat Apr 22 21:47:41 2017 +++ src/sys/dev/fdt/fdtvar.h Wed Apr 26 01:51:52 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: fdtvar.h,v 1.12 2017/04/22 21:47:41 jmcneill Exp $ */ +/* $NetBSD: fdtvar.h,v 1.13 2017/04/26 01:51:52 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -45,6 +45,7 @@ struct fdt_attach_args { bus_space_tag_t faa_a4x_bst; bus_dma_tag_t faa_dmat; int faa_phandle; + int faa_quiet; }; /* flags for fdtbus_intr_establish */ Index: src/sys/dev/fdt/files.fdt diff -u src/sys/dev/fdt/files.fdt:1.10 src/sys/dev/fdt/files.fdt:1.11 --- src/sys/dev/fdt/files.fdt:1.10 Sat Apr 22 13:24:20 2017 +++ src/sys/dev/fdt/files.fdt Wed Apr 26 01:51:52 2017 @@ -1,4 +1,4 @@ -# $NetBSD: files.fdt,v 1.10 2017/04/22 13:24:20 jmcneill Exp $ +# $NetBSD: files.fdt,v 1.11 2017/04/26 01:51:52 jmcneill Exp $ include "external/bsd/libfdt/conf/files.libfdt" @@ -6,7 +6,7 @@ defflag opt_fdt.h FDT: libfdt, ofw_su define fdtbus { } : clk -device fdt { } : fdtbus +device fdt { [pass = 10] } : fdtbus attach fdt at fdtbus file dev/fdt/fdtbus.c fdt