blob: ec9cfd85376e3f62a836b677b3ac1818559da2de [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Simon Glass06811952014-02-26 15:59:22 -07002/*
3 * Copyright (c) 2013 Google, Inc
4 *
5 * (C) Copyright 2012
6 * Marek Vasut <marex@denx.de>
Simon Glass06811952014-02-26 15:59:22 -07007 */
8
Tom Rinicbb2df22015-12-07 08:23:29 -05009#include <command.h>
Simon Glass2cb4ddb2022-05-08 04:39:26 -060010#include <dm/root.h>
Simon Glass304fbef2015-06-23 15:38:35 -060011#include <dm/util.h>
Simon Glass06811952014-02-26 15:59:22 -070012
Simon Glassdee2f5a2022-05-08 04:39:20 -060013static int do_dm_dump_driver_compat(struct cmd_tbl *cmdtp, int flag, int argc,
14 char * const argv[])
Simon Glass06811952014-02-26 15:59:22 -070015{
Simon Glassdee2f5a2022-05-08 04:39:20 -060016 dm_dump_driver_compat();
Simon Glass06811952014-02-26 15:59:22 -070017
18 return 0;
19}
20
Simon Glass09140112020-05-10 11:40:03 -060021static int do_dm_dump_devres(struct cmd_tbl *cmdtp, int flag, int argc,
22 char *const argv[])
Masahiro Yamada40b6f2d2015-07-25 21:52:38 +090023{
24 dm_dump_devres();
25
26 return 0;
27}
28
Simon Glass09140112020-05-10 11:40:03 -060029static int do_dm_dump_drivers(struct cmd_tbl *cmdtp, int flag, int argc,
30 char *const argv[])
Sean Anderson7b9d60f2020-01-17 14:48:09 -050031{
32 dm_dump_drivers();
33
34 return 0;
35}
36
Simon Glass2cb4ddb2022-05-08 04:39:26 -060037#if CONFIG_IS_ENABLED(DM_STATS)
38static int do_dm_dump_mem(struct cmd_tbl *cmdtp, int flag, int argc,
39 char *const argv[])
40{
41 struct dm_stats mem;
42
43 dm_get_mem(&mem);
44 dm_dump_mem(&mem);
45
46 return 0;
47}
48#endif /* DM_STATS */
49
Simon Glassdee2f5a2022-05-08 04:39:20 -060050static int do_dm_dump_static_driver_info(struct cmd_tbl *cmdtp, int flag,
51 int argc, char * const argv[])
Niel Fourie2e488362020-03-24 16:17:05 +010052{
53 dm_dump_static_driver_info();
54
55 return 0;
56}
57
Simon Glassdee2f5a2022-05-08 04:39:20 -060058static int do_dm_dump_tree(struct cmd_tbl *cmdtp, int flag, int argc,
59 char *const argv[])
60{
AKASHI Takahiro36e45f62023-08-23 10:49:47 +090061 bool extended = false, sort = false;
62 char *device = NULL;
Simon Glass3d012542023-01-17 10:47:12 -070063
AKASHI Takahiro36e45f62023-08-23 10:49:47 +090064 for (; argc > 1; argc--, argv++) {
65 if (argv[1][0] != '-')
66 break;
Simon Glass3d012542023-01-17 10:47:12 -070067
AKASHI Takahiro36e45f62023-08-23 10:49:47 +090068 if (!strcmp(argv[1], "-e")) {
69 extended = true;
70 } else if (!strcmp(argv[1], "-s")) {
71 sort = true;
72 } else {
73 printf("Unknown parameter: %s\n", argv[1]);
74 return 0;
75 }
76 }
77 if (argc > 1)
78 device = argv[1];
79
80 dm_dump_tree(device, extended, sort);
Simon Glassdee2f5a2022-05-08 04:39:20 -060081
82 return 0;
83}
84
85static int do_dm_dump_uclass(struct cmd_tbl *cmdtp, int flag, int argc,
86 char *const argv[])
87{
AKASHI Takahiro36e45f62023-08-23 10:49:47 +090088 bool extended = false;
89 char *uclass = NULL;
90
91 if (argc > 1) {
92 if (!strcmp(argv[1], "-e")) {
93 extended = true;
94 argc--;
95 argv++;
96 }
97 if (argc > 1)
98 uclass = argv[1];
99 }
100
101 dm_dump_uclass(uclass, extended);
Simon Glassdee2f5a2022-05-08 04:39:20 -0600102
103 return 0;
104}
105
Simon Glass2cb4ddb2022-05-08 04:39:26 -0600106#if CONFIG_IS_ENABLED(DM_STATS)
107#define DM_MEM_HELP "dm mem Provide a summary of memory usage\n"
108#define DM_MEM U_BOOT_SUBCMD_MKENT(mem, 1, 1, do_dm_dump_mem),
109#else
110#define DM_MEM_HELP
111#define DM_MEM
112#endif
113
Tom Rini36162182023-10-07 15:13:08 -0400114U_BOOT_LONGHELP(dm,
Simon Glassdee2f5a2022-05-08 04:39:20 -0600115 "compat Dump list of drivers with compatibility strings\n"
Sean Anderson7b9d60f2020-01-17 14:48:09 -0500116 "dm devres Dump list of device resources for each device\n"
Niel Fourie2e488362020-03-24 16:17:05 +0100117 "dm drivers Dump list of drivers with uclass and instances\n"
Simon Glass2cb4ddb2022-05-08 04:39:26 -0600118 DM_MEM_HELP
Simon Glassdee2f5a2022-05-08 04:39:20 -0600119 "dm static Dump list of drivers with static platform data\n"
AKASHI Takahiro36e45f62023-08-23 10:49:47 +0900120 "dm tree [-s][-e][name] Dump tree of driver model devices (-s=sort)\n"
Tom Rini36162182023-10-07 15:13:08 -0400121 "dm uclass [-e][name] Dump list of instances for each uclass");
Ovidiu Panait7f0836a2022-05-08 13:01:42 +0300122
123U_BOOT_CMD_WITH_SUBCMDS(dm, "Driver model low level access", dm_help_text,
Simon Glassdee2f5a2022-05-08 04:39:20 -0600124 U_BOOT_SUBCMD_MKENT(compat, 1, 1, do_dm_dump_driver_compat),
Ovidiu Panait7f0836a2022-05-08 13:01:42 +0300125 U_BOOT_SUBCMD_MKENT(devres, 1, 1, do_dm_dump_devres),
126 U_BOOT_SUBCMD_MKENT(drivers, 1, 1, do_dm_dump_drivers),
Simon Glass2cb4ddb2022-05-08 04:39:26 -0600127 DM_MEM
Simon Glassdee2f5a2022-05-08 04:39:20 -0600128 U_BOOT_SUBCMD_MKENT(static, 1, 1, do_dm_dump_static_driver_info),
AKASHI Takahiro36e45f62023-08-23 10:49:47 +0900129 U_BOOT_SUBCMD_MKENT(tree, 4, 1, do_dm_dump_tree),
130 U_BOOT_SUBCMD_MKENT(uclass, 3, 1, do_dm_dump_uclass));