blob: 1aa86aab9c1ceed606d882002d455841d3ced073 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Simon Glassc267cf72014-02-26 15:59:22 -07002/*
3 * Copyright (c) 2013 Google, Inc
4 *
5 * (C) Copyright 2012
6 * Marek Vasut <marex@denx.de>
Simon Glassc267cf72014-02-26 15:59:22 -07007 */
8
9#include <common.h>
Tom Rini23415e52015-12-07 08:23:29 -050010#include <command.h>
Simon Glassc8b5e222022-05-08 04:39:26 -060011#include <dm/root.h>
Simon Glassd9f9a892015-06-23 15:38:35 -060012#include <dm/util.h>
Simon Glassc267cf72014-02-26 15:59:22 -070013
Simon Glasse9daa5d2022-05-08 04:39:20 -060014static int do_dm_dump_driver_compat(struct cmd_tbl *cmdtp, int flag, int argc,
15 char * const argv[])
Simon Glassc267cf72014-02-26 15:59:22 -070016{
Simon Glasse9daa5d2022-05-08 04:39:20 -060017 dm_dump_driver_compat();
Simon Glassc267cf72014-02-26 15:59:22 -070018
19 return 0;
20}
21
Simon Glassed38aef2020-05-10 11:40:03 -060022static int do_dm_dump_devres(struct cmd_tbl *cmdtp, int flag, int argc,
23 char *const argv[])
Masahiro Yamadaf929c0b2015-07-25 21:52:38 +090024{
25 dm_dump_devres();
26
27 return 0;
28}
29
Simon Glassed38aef2020-05-10 11:40:03 -060030static int do_dm_dump_drivers(struct cmd_tbl *cmdtp, int flag, int argc,
31 char *const argv[])
Sean Anderson02827572020-01-17 14:48:09 -050032{
33 dm_dump_drivers();
34
35 return 0;
36}
37
Simon Glassc8b5e222022-05-08 04:39:26 -060038#if CONFIG_IS_ENABLED(DM_STATS)
39static int do_dm_dump_mem(struct cmd_tbl *cmdtp, int flag, int argc,
40 char *const argv[])
41{
42 struct dm_stats mem;
43
44 dm_get_mem(&mem);
45 dm_dump_mem(&mem);
46
47 return 0;
48}
49#endif /* DM_STATS */
50
Simon Glasse9daa5d2022-05-08 04:39:20 -060051static int do_dm_dump_static_driver_info(struct cmd_tbl *cmdtp, int flag,
52 int argc, char * const argv[])
Niel Fourie39832fb2020-03-24 16:17:05 +010053{
Simon Glasse9daa5d2022-05-08 04:39:20 -060054 dm_dump_static_driver_info();
Niel Fourie39832fb2020-03-24 16:17:05 +010055
56 return 0;
57}
58
Simon Glasse9daa5d2022-05-08 04:39:20 -060059static int do_dm_dump_tree(struct cmd_tbl *cmdtp, int flag, int argc,
60 char *const argv[])
Niel Fourie39832fb2020-03-24 16:17:05 +010061{
AKASHI Takahirof06f0822023-08-23 10:49:47 +090062 bool extended = false, sort = false;
63 char *device = NULL;
Simon Glasse5314c12023-01-17 10:47:12 -070064
AKASHI Takahirof06f0822023-08-23 10:49:47 +090065 for (; argc > 1; argc--, argv++) {
66 if (argv[1][0] != '-')
67 break;
Simon Glasse5314c12023-01-17 10:47:12 -070068
AKASHI Takahirof06f0822023-08-23 10:49:47 +090069 if (!strcmp(argv[1], "-e")) {
70 extended = true;
71 } else if (!strcmp(argv[1], "-s")) {
72 sort = true;
73 } else {
74 printf("Unknown parameter: %s\n", argv[1]);
75 return 0;
76 }
77 }
78 if (argc > 1)
79 device = argv[1];
80
81 dm_dump_tree(device, extended, sort);
Niel Fourie39832fb2020-03-24 16:17:05 +010082
83 return 0;
84}
85
Simon Glasse9daa5d2022-05-08 04:39:20 -060086static int do_dm_dump_uclass(struct cmd_tbl *cmdtp, int flag, int argc,
87 char *const argv[])
88{
AKASHI Takahirof06f0822023-08-23 10:49:47 +090089 bool extended = false;
90 char *uclass = NULL;
91
92 if (argc > 1) {
93 if (!strcmp(argv[1], "-e")) {
94 extended = true;
95 argc--;
96 argv++;
97 }
98 if (argc > 1)
99 uclass = argv[1];
100 }
101
102 dm_dump_uclass(uclass, extended);
Simon Glasse9daa5d2022-05-08 04:39:20 -0600103
104 return 0;
105}
106
Simon Glassc8b5e222022-05-08 04:39:26 -0600107#if CONFIG_IS_ENABLED(DM_STATS)
108#define DM_MEM_HELP "dm mem Provide a summary of memory usage\n"
109#define DM_MEM U_BOOT_SUBCMD_MKENT(mem, 1, 1, do_dm_dump_mem),
110#else
111#define DM_MEM_HELP
112#define DM_MEM
113#endif
114
Simon Glass5d6ee9e2023-02-05 15:40:56 -0700115#if IS_ENABLED(CONFIG_SYS_LONGHELP)
Ovidiu Panaite4c5b792022-05-08 13:01:42 +0300116static char dm_help_text[] =
Simon Glasse9daa5d2022-05-08 04:39:20 -0600117 "compat Dump list of drivers with compatibility strings\n"
Sean Anderson02827572020-01-17 14:48:09 -0500118 "dm devres Dump list of device resources for each device\n"
Niel Fourie39832fb2020-03-24 16:17:05 +0100119 "dm drivers Dump list of drivers with uclass and instances\n"
Simon Glassc8b5e222022-05-08 04:39:26 -0600120 DM_MEM_HELP
Simon Glasse9daa5d2022-05-08 04:39:20 -0600121 "dm static Dump list of drivers with static platform data\n"
AKASHI Takahirof06f0822023-08-23 10:49:47 +0900122 "dm tree [-s][-e][name] Dump tree of driver model devices (-s=sort)\n"
123 "dm uclass [-e][name] Dump list of instances for each uclass"
Ovidiu Panaite4c5b792022-05-08 13:01:42 +0300124 ;
125#endif
126
127U_BOOT_CMD_WITH_SUBCMDS(dm, "Driver model low level access", dm_help_text,
Simon Glasse9daa5d2022-05-08 04:39:20 -0600128 U_BOOT_SUBCMD_MKENT(compat, 1, 1, do_dm_dump_driver_compat),
Ovidiu Panaite4c5b792022-05-08 13:01:42 +0300129 U_BOOT_SUBCMD_MKENT(devres, 1, 1, do_dm_dump_devres),
130 U_BOOT_SUBCMD_MKENT(drivers, 1, 1, do_dm_dump_drivers),
Simon Glassc8b5e222022-05-08 04:39:26 -0600131 DM_MEM
Simon Glasse9daa5d2022-05-08 04:39:20 -0600132 U_BOOT_SUBCMD_MKENT(static, 1, 1, do_dm_dump_static_driver_info),
AKASHI Takahirof06f0822023-08-23 10:49:47 +0900133 U_BOOT_SUBCMD_MKENT(tree, 4, 1, do_dm_dump_tree),
134 U_BOOT_SUBCMD_MKENT(uclass, 3, 1, do_dm_dump_uclass));