Fri Oct 30 16:08:45 2020 UTC ()
Add a "show fdt" ddb command


(skrll)
diff -r1.173 -r1.174 src/sys/ddb/db_command.c
diff -r0 -r1.1 src/sys/dev/fdt/fdt_ddb.c
diff -r0 -r1.1 src/sys/dev/fdt/fdt_ddb.h
diff -r1.55 -r1.56 src/sys/dev/fdt/files.fdt

cvs diff -r1.173 -r1.174 src/sys/ddb/db_command.c (expand / switch to unified diff)

--- src/sys/ddb/db_command.c 2020/10/30 07:17:29 1.173
+++ src/sys/ddb/db_command.c 2020/10/30 16:08:44 1.174
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: db_command.c,v 1.173 2020/10/30 07:17:29 skrll Exp $ */ 1/* $NetBSD: db_command.c,v 1.174 2020/10/30 16:08:44 skrll Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1996, 1997, 1998, 1999, 2002, 2009, 2019 4 * Copyright (c) 1996, 1997, 1998, 1999, 2002, 2009, 2019
5 * The NetBSD Foundation, Inc. 5 * The NetBSD Foundation, Inc.
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
8 * This code is derived from software contributed to The NetBSD Foundation 8 * This code is derived from software contributed to The NetBSD Foundation
9 * by Adam Hamsik, and by Andrew Doran. 9 * by Adam Hamsik, and by Andrew Doran.
10 * 10 *
11 * Redistribution and use in source and binary forms, with or without 11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions 12 * modification, are permitted provided that the following conditions
13 * are met: 13 * are met:
14 * 1. Redistributions of source code must retain the above copyright 14 * 1. Redistributions of source code must retain the above copyright
@@ -51,31 +51,32 @@ @@ -51,31 +51,32 @@
51 * School of Computer Science 51 * School of Computer Science
52 * Carnegie Mellon University 52 * Carnegie Mellon University
53 * Pittsburgh PA 15213-3890 53 * Pittsburgh PA 15213-3890
54 * 54 *
55 * any improvements or extensions that they make and grant Carnegie the 55 * any improvements or extensions that they make and grant Carnegie the
56 * rights to redistribute these changes. 56 * rights to redistribute these changes.
57 */ 57 */
58 58
59/* 59/*
60 * Command dispatcher. 60 * Command dispatcher.
61 */ 61 */
62 62
63#include <sys/cdefs.h> 63#include <sys/cdefs.h>
64__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.173 2020/10/30 07:17:29 skrll Exp $"); 64__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.174 2020/10/30 16:08:44 skrll Exp $");
65 65
66#ifdef _KERNEL_OPT 66#ifdef _KERNEL_OPT
67#include "opt_aio.h" 67#include "opt_aio.h"
68#include "opt_ddb.h" 68#include "opt_ddb.h"
 69#include "opt_fdt.h"
69#include "opt_kgdb.h" 70#include "opt_kgdb.h"
70#include "opt_mqueue.h" 71#include "opt_mqueue.h"
71#include "opt_inet.h" 72#include "opt_inet.h"
72#include "opt_kernhist.h" 73#include "opt_kernhist.h"
73#include "opt_ddbparam.h" 74#include "opt_ddbparam.h"
74#include "opt_multiprocessor.h" 75#include "opt_multiprocessor.h"
75#endif 76#endif
76 77
77#include <sys/param.h> 78#include <sys/param.h>
78#include <sys/systm.h> 79#include <sys/systm.h>
79#include <sys/reboot.h> 80#include <sys/reboot.h>
80#include <sys/device.h> 81#include <sys/device.h>
81#include <sys/lwp.h> 82#include <sys/lwp.h>
@@ -92,26 +93,31 @@ __KERNEL_RCSID(0, "$NetBSD: db_command.c @@ -92,26 +93,31 @@ __KERNEL_RCSID(0, "$NetBSD: db_command.c
92#include <sys/kernhist.h> 93#include <sys/kernhist.h>
93#include <sys/socketvar.h> 94#include <sys/socketvar.h>
94#include <sys/queue.h> 95#include <sys/queue.h>
95 96
96#include <dev/cons.h> 97#include <dev/cons.h>
97 98
98#include <ddb/ddb.h> 99#include <ddb/ddb.h>
99 100
100#include <uvm/uvm_extern.h> 101#include <uvm/uvm_extern.h>
101#include <uvm/uvm_ddb.h> 102#include <uvm/uvm_ddb.h>
102 103
103#include <net/route.h> 104#include <net/route.h>
104 105
 106#ifdef FDT
 107#include <dev/fdt/fdtvar.h>
 108#include <dev/fdt/fdt_ddb.h>
 109#endif
 110
105/* 111/*
106 * Results of command search. 112 * Results of command search.
107 */ 113 */
108#define CMD_EXACT 0 114#define CMD_EXACT 0
109#define CMD_PREFIX 1 115#define CMD_PREFIX 1
110#define CMD_NONE 2 116#define CMD_NONE 2
111#define CMD_AMBIGUOUS 3 117#define CMD_AMBIGUOUS 3
112 118
113/* 119/*
114 * Exported global variables 120 * Exported global variables
115 */ 121 */
116bool db_cmd_loop_done; 122bool db_cmd_loop_done;
117label_t *db_recover; 123label_t *db_recover;
@@ -209,46 +215,53 @@ static void db_reboot_cmd(db_expr_t, boo @@ -209,46 +215,53 @@ static void db_reboot_cmd(db_expr_t, boo
209static void db_sifting_cmd(db_expr_t, bool, db_expr_t, const char *); 215static void db_sifting_cmd(db_expr_t, bool, db_expr_t, const char *);
210static void db_socket_print_cmd(db_expr_t, bool, db_expr_t, const char *); 216static void db_socket_print_cmd(db_expr_t, bool, db_expr_t, const char *);
211static void db_stack_trace_cmd(db_expr_t, bool, db_expr_t, const char *); 217static void db_stack_trace_cmd(db_expr_t, bool, db_expr_t, const char *);
212static void db_sync_cmd(db_expr_t, bool, db_expr_t, const char *); 218static void db_sync_cmd(db_expr_t, bool, db_expr_t, const char *);
213static void db_whatis_cmd(db_expr_t, bool, db_expr_t, const char *); 219static void db_whatis_cmd(db_expr_t, bool, db_expr_t, const char *);
214static void db_uvmexp_print_cmd(db_expr_t, bool, db_expr_t, const char *); 220static void db_uvmexp_print_cmd(db_expr_t, bool, db_expr_t, const char *);
215#ifdef KERNHIST 221#ifdef KERNHIST
216static void db_kernhist_print_cmd(db_expr_t, bool, db_expr_t, const char *); 222static void db_kernhist_print_cmd(db_expr_t, bool, db_expr_t, const char *);
217#endif 223#endif
218static void db_vnode_print_cmd(db_expr_t, bool, db_expr_t, const char *); 224static void db_vnode_print_cmd(db_expr_t, bool, db_expr_t, const char *);
219static void db_vnode_lock_print_cmd(db_expr_t, bool, db_expr_t, 225static void db_vnode_lock_print_cmd(db_expr_t, bool, db_expr_t,
220 const char *); 226 const char *);
221static void db_vmem_print_cmd(db_expr_t, bool, db_expr_t, const char *); 227static void db_vmem_print_cmd(db_expr_t, bool, db_expr_t, const char *);
 228#ifdef FDT
 229static void db_fdt_print_cmd(db_expr_t, bool, db_expr_t, const char *);
 230#endif
222 231
223static const struct db_command db_show_cmds[] = { 232static const struct db_command db_show_cmds[] = {
224 { DDB_ADD_CMD("all", NULL, 233 { DDB_ADD_CMD("all", NULL,
225 CS_COMPAT, NULL,NULL,NULL) }, 234 CS_COMPAT, NULL,NULL,NULL) },
226#ifdef AIO 235#ifdef AIO
227 { DDB_ADD_CMD("aio_jobs", db_show_aio_jobs, 0, 236 { DDB_ADD_CMD("aio_jobs", db_show_aio_jobs, 0,
228 "Show aio jobs",NULL,NULL) }, 237 "Show aio jobs",NULL,NULL) },
229#endif 238#endif
230#ifdef _KERNEL 239#ifdef _KERNEL
231 { DDB_ADD_CMD("breaks", db_listbreak_cmd, 0, 240 { DDB_ADD_CMD("breaks", db_listbreak_cmd, 0,
232 "Display all breaks.",NULL,NULL) }, 241 "Display all breaks.",NULL,NULL) },
233#endif 242#endif
234 { DDB_ADD_CMD("buf", db_buf_print_cmd, 0, 243 { DDB_ADD_CMD("buf", db_buf_print_cmd, 0,
235 "Print the struct buf at address.", "[/f] address",NULL) }, 244 "Print the struct buf at address.", "[/f] address",NULL) },
236 /* added from all sub cmds */ 245 /* added from all sub cmds */
237 { DDB_ADD_CMD("callout", db_show_callout, 246 { DDB_ADD_CMD("callout", db_show_callout,
238 0 ,"List all used callout functions.",NULL,NULL) }, 247 0 ,"List all used callout functions.",NULL,NULL) },
239 { DDB_ADD_CMD("devices", db_show_all_devices, 0,NULL,NULL,NULL) }, 248 { DDB_ADD_CMD("devices", db_show_all_devices, 0,NULL,NULL,NULL) },
240 { DDB_ADD_CMD("event", db_event_print_cmd, 0, 249 { DDB_ADD_CMD("event", db_event_print_cmd, 0,
241 "Print all the non-zero evcnt(9) event counters.", "[/fitm]",NULL) }, 250 "Print all the non-zero evcnt(9) event counters.", "[/fitm]",NULL) },
 251#ifdef FDT
 252 { DDB_ADD_CMD("fdt", db_fdt_print_cmd, 0,
 253 "Show FDT information", NULL, NULL) },
 254#endif
242 { DDB_ADD_CMD("files", db_show_files_cmd, 0, 255 { DDB_ADD_CMD("files", db_show_files_cmd, 0,
243 "Print the files open by process at address", 256 "Print the files open by process at address",
244 "[/f] address", NULL) }, 257 "[/f] address", NULL) },
245 { DDB_ADD_CMD("freelists", db_show_all_freelists, 258 { DDB_ADD_CMD("freelists", db_show_all_freelists,
246 0 ,"Show all freelists", NULL, NULL) }, 259 0 ,"Show all freelists", NULL, NULL) },
247#ifdef KERNHIST 260#ifdef KERNHIST
248 { DDB_ADD_CMD("kernhist", db_kernhist_print_cmd, 0, 261 { DDB_ADD_CMD("kernhist", db_kernhist_print_cmd, 0,
249 "Print the UVM history logs.", 262 "Print the UVM history logs.",
250 NULL,NULL) }, 263 NULL,NULL) },
251#endif 264#endif
252 /* added from all sub cmds */ 265 /* added from all sub cmds */
253 { DDB_ADD_CMD("locks", db_show_all_locks, 266 { DDB_ADD_CMD("locks", db_show_all_locks,
254 0 ,"Show all held locks", "[/t]", NULL) }, 267 0 ,"Show all held locks", "[/t]", NULL) },
@@ -1336,26 +1349,47 @@ db_show_all_freelists(db_expr_t addr, bo @@ -1336,26 +1349,47 @@ db_show_all_freelists(db_expr_t addr, bo
1336 1349
1337static void 1350static void
1338db_show_lockstats(db_expr_t addr, bool have_addr, 1351db_show_lockstats(db_expr_t addr, bool have_addr,
1339 db_expr_t count, const char *modif) 1352 db_expr_t count, const char *modif)
1340{ 1353{
1341 1354
1342#ifdef _KERNEL /* XXX CRASH(8) */ 1355#ifdef _KERNEL /* XXX CRASH(8) */
1343 lockdebug_show_lockstats(db_printf); 1356 lockdebug_show_lockstats(db_printf);
1344#else 1357#else
1345 db_kernelonly(); 1358 db_kernelonly();
1346#endif 1359#endif
1347} 1360}
1348 1361
 1362#ifdef FDT
 1363/*ARGSUSED*/
 1364static void
 1365db_fdt_print_cmd(db_expr_t addr, bool have_addr,
 1366 db_expr_t count, const char *modif)
 1367{
 1368#ifdef _KERNEL /* XXX CRASH(8) */
 1369 bool full = false;
 1370
 1371 if (modif[0] == 'f')
 1372 full = true;
 1373
 1374 fdt_print(have_addr ? (void *)(uintptr_t)addr : fdtbus_get_data(),
 1375 full, db_printf);
 1376#else
 1377 also;
 1378 db_kernelonly();
 1379#endif
 1380}
 1381#endif
 1382
1349/* 1383/*
1350 * Call random function: 1384 * Call random function:
1351 * !expr(arg,arg,arg) 1385 * !expr(arg,arg,arg)
1352 */ 1386 */
1353/*ARGSUSED*/ 1387/*ARGSUSED*/
1354static void 1388static void
1355db_fncall(db_expr_t addr, bool have_addr, 1389db_fncall(db_expr_t addr, bool have_addr,
1356 db_expr_t count, const char *modif) 1390 db_expr_t count, const char *modif)
1357{ 1391{
1358#ifdef _KERNEL 1392#ifdef _KERNEL
1359 db_expr_t fn_addr; 1393 db_expr_t fn_addr;
1360#define MAXARGS 11 1394#define MAXARGS 11
1361 db_expr_t args[MAXARGS]; 1395 db_expr_t args[MAXARGS];

File Added: src/sys/dev/fdt/fdt_ddb.c
/*	$NetBSD: fdt_ddb.c,v 1.1 2020/10/30 16:08:45 skrll Exp $	*/

/*-
 * Copyright (c) 2020 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Nick Hudson
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */


#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: fdt_ddb.c,v 1.1 2020/10/30 16:08:45 skrll Exp $");

#include <sys/param.h>

#include <libfdt.h>
#include <dev/fdt/fdt_ddb.h>
#include <dev/fdt/fdtvar.h>

#define FDT_MAX_DEPTH	16

static bool
fdt_isprint(const void *data, int len)
{
	const uint8_t *c = (const uint8_t *)data;

	if (len == 0)
		return false;

	for (size_t j = 0; j < len; j++) {
		if (!(isprint(c[j]) || c[j] == '\0'))
			return false;
	}
	return true;
}

static void
fdt_print_properties(const void *fdt, int node,
    void (*pr)(const char *, ...) __printflike(1, 2))
{
	int property;

	fdt_for_each_property_offset(property, fdt, node) {
		int len;
		const struct fdt_property *prop =
		    fdt_get_property_by_offset(fdt, property, &len);
		const char *name = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));

		pr("    %s", name);
		if (len == 0) {
			pr("\n");
			continue;
		}
		if (fdt_isprint(prop->data, len)) {
			const uint8_t *c = (const uint8_t *)prop->data;

			pr(" = \"");
			for (size_t j = 0; j < len; j++) {
				if (c[j] == '\0') {
					if (j + 1 != len)
						pr("\", \"");
				} else
					pr("%c", c[j]);
			}
			pr("\"\n");
			continue;
		}
		if ((len % 4) == 0) {
			const uint32_t *cell = (const uint32_t *)prop->data;
			size_t count = len / sizeof(uint32_t);

			pr(" = <");
			for (size_t j = 0; j < count; j++) {
				pr("%#" PRIx32 "%s", fdt32_to_cpu(cell[j]),
				    (j != count - 1) ? " " : "");
			}
			pr(">\n");
		} else {
			const uint8_t *byte = (const uint8_t *)prop->data;

			pr(" = [");
			for (size_t j = 0; j < len; j++) {
				pr("%02x%s", byte[j],
				   (j != len - 1) ? " " : "");
			}
			pr("]\n");
		}
	}
}


void
fdt_print(const void *addr, bool full,
    void (*pr)(const char *, ...) __printflike(1, 2))
{
	const void *fdt = addr;
	const char *pname[FDT_MAX_DEPTH] = { NULL };

	int error = fdt_check_header(fdt);
	if (error) {
		pr("Invalid FDT at %p\n", fdt);
		return;
	}

	int depth = 0;
	for (int node = fdt_path_offset(fdt, "/");
	     node >= 0 && depth >= 0;
	     node = fdt_next_node(fdt, node, &depth)) {
		const char *name = fdt_get_name(fdt, node, NULL);

		if (depth > FDT_MAX_DEPTH) {
			pr("max depth exceeded: %d\n", depth);
			continue;
		}
		pname[depth] = name;
		/*
		 * change conditional for when alternative root nodes
		 * can be specified
		 */
		if (depth == 0)
			pr("/");
		for (size_t i = 1; i <= depth; i++) {
			if (pname[i] == NULL)
				break;
			pr("/%s", pname[i]);
		}
		pr("\n");
		if (!full)
			continue;
		fdt_print_properties(fdt, node, pr);
	}
}

File Added: src/sys/dev/fdt/fdt_ddb.h
/*	$NetBSD: fdt_ddb.h,v 1.1 2020/10/30 16:08:45 skrll Exp $	*/

/*-
 * Copyright (c) 2020 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Nick Hudson
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */


#ifndef _FDT_DDB_H
#define _FDT_DDB_H

void	fdt_print(const void *, bool, void (*)(const char *, ...) __printflike(1, 2));

#endif

cvs diff -r1.55 -r1.56 src/sys/dev/fdt/files.fdt (expand / switch to unified diff)

--- src/sys/dev/fdt/files.fdt 2020/10/27 08:57:11 1.55
+++ src/sys/dev/fdt/files.fdt 2020/10/30 16:08:45 1.56
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: files.fdt,v 1.55 2020/10/27 08:57:11 ryo Exp $ 1# $NetBSD: files.fdt,v 1.56 2020/10/30 16:08:45 skrll Exp $
2 2
3include "external/bsd/libfdt/conf/files.libfdt" 3include "external/bsd/libfdt/conf/files.libfdt"
4 4
5defflag opt_fdt.h FDTBASE : libfdt, ofw_subr 5defflag opt_fdt.h FDTBASE : libfdt, ofw_subr
6defflag opt_fdt.h FDT: FDTBASE 6defflag opt_fdt.h FDT: FDTBASE
7defparam opt_fdt.h FDT_DEFAULT_STDOUT_PATH 7defparam opt_fdt.h FDT_DEFAULT_STDOUT_PATH
8 8
9define fdt { [pass = 10] } : clk, pwm 9define fdt { [pass = 10] } : clk, pwm
10 10
11device simplebus { } : fdt 11device simplebus { } : fdt
12attach simplebus at fdt 12attach simplebus at fdt
13file dev/fdt/fdtbus.c fdt 13file dev/fdt/fdtbus.c fdt
14 14
@@ -48,26 +48,27 @@ file dev/fdt/panel_fdt.c fdt_panel @@ -48,26 +48,27 @@ file dev/fdt/panel_fdt.c fdt_panel
48 48
49attach panel at fdt with panel_fdt: drmkms 49attach panel at fdt with panel_fdt: drmkms
50file dev/fdt/fdt_panel.c panel_fdt 50file dev/fdt/fdt_panel.c panel_fdt
51 51
52device dispcon: fdt_port, drmkms, ddc_read_edid 52device dispcon: fdt_port, drmkms, ddc_read_edid
53attach dispcon at fdt with dispcon_hdmi 53attach dispcon at fdt with dispcon_hdmi
54file dev/fdt/hdmi_connector.c dispcon_hdmi 54file dev/fdt/hdmi_connector.c dispcon_hdmi
55 55
56file dev/fdt/fdt_openfirm.c fdtbase 56file dev/fdt/fdt_openfirm.c fdtbase
57file dev/fdt/fdt_subr.c fdtbase 57file dev/fdt/fdt_subr.c fdtbase
58file dev/fdt/fdt_clock.c fdt 58file dev/fdt/fdt_clock.c fdt
59file dev/fdt/fdt_dai.c fdt 59file dev/fdt/fdt_dai.c fdt
60file dev/fdt/fdt_dma.c fdt 60file dev/fdt/fdt_dma.c fdt
 61file dev/fdt/fdt_ddb.c fdt & ddb
61file dev/fdt/fdt_gpio.c fdt 62file dev/fdt/fdt_gpio.c fdt
62file dev/fdt/fdt_i2c.c fdt 63file dev/fdt/fdt_i2c.c fdt
63file dev/fdt/fdt_intr.c fdt 64file dev/fdt/fdt_intr.c fdt
64file dev/fdt/fdt_mmc_pwrseq.c fdt 65file dev/fdt/fdt_mmc_pwrseq.c fdt
65file dev/fdt/fdt_phy.c fdt 66file dev/fdt/fdt_phy.c fdt
66file dev/fdt/fdt_power.c fdt 67file dev/fdt/fdt_power.c fdt
67file dev/fdt/fdt_pwm.c fdt 68file dev/fdt/fdt_pwm.c fdt
68file dev/fdt/fdt_regulator.c fdt 69file dev/fdt/fdt_regulator.c fdt
69file dev/fdt/fdt_reset.c fdt 70file dev/fdt/fdt_reset.c fdt
70file dev/fdt/fdt_rtc.c fdt 71file dev/fdt/fdt_rtc.c fdt
71file dev/fdt/fdt_spi.c fdt 72file dev/fdt/fdt_spi.c fdt
72file dev/fdt/fdt_syscon.c fdt 73file dev/fdt/fdt_syscon.c fdt
73file dev/fdt/fdt_pinctrl.c fdt 74file dev/fdt/fdt_pinctrl.c fdt