| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- .. SPDX-License-Identifier: GPL-2.0+:
- dm command
- ==========
- Synopis
- -------
- ::
- dm compat
- dm devres
- dm drivers
- dm static
- dm tree [-s]
- dm uclass
- Description
- -----------
- The *dm* command allows viewing information about driver model, including the
- tree of devices and list of available uclasses.
- dm compat
- ~~~~~~~~~
- This shows the compatible strings associated with each driver. Often there
- is only one, but multiple strings are shown on their own line. These strings
- can be looked up in the device tree files for each board, to see which driver is
- used for each node.
- dm devres
- ~~~~~~~~~
- This shows a list of a `devres` (device resource) records for a device. Some
- drivers use the devres API to allocate memory, so that it can be freed
- automatically (without any code needed in the driver's remove() method) when the
- device is removed.
- This feature is controlled by CONFIG_DEVRES so no useful output is obtained if
- this option is disabled.
- dm drivers
- ~~~~~~~~~~
- This shows all the available drivers, their uclass and a list of devices that
- use that driver, each on its own line. Drivers with no devices are shown with
- `<none>` as the driver name.
- dm mem
- ~~~~~~
- This subcommand is really just for debugging and exploration. It can be enabled
- with the `CONFIG_DM_STATS` option.
- All output is in hex except that in brackets which is decimal.
- The output consists of a header shows the size of the main device model
- structures (struct udevice, struct driver, struct uclass and struct uc_driver)
- and the count and memory used by each (number of devices, memory used by
- devices, memory used by device names, number of uclasses, memory used by
- uclasses).
- After that is a table of information about each type of data that can be
- attached to a device, showing the number that have non-null data for that type,
- the total size of all that data, the amount of memory used in total, the
- amount that would be used if this type uses tags instead and the amount that
- would be thus saved.
- The `driver_data` line shows the number of devices which have non-NULL driver
- data.
- The `tags` line shows the number of tags and the memory used by those.
- At the bottom is an indication of the total memory usage obtained by undertaking
- various changes, none of which is currently implemented in U-Boot:
- With tags
- Using tags instead of all attached types
- Singly linked
- Using a singly linked list
- driver index
- Using a driver index instead of a pointer
- uclass index
- Using a uclass index instead of a pointer
- Drop device name
- Using empty device names
- dm static
- ~~~~~~~~~
- This shows devices bound by platform data, i.e. not from the device tree. There
- are normally none of these, but some boards may use static devices for space
- reasons.
- dm tree
- ~~~~~~~
- This shows the full tree of devices including the following fields:
- uclass
- Shows the name of the uclass for the device
- Index
- Shows the index number of the device, within the uclass. This shows the
- ordering within the uclass, but not the sequence number.
- Probed
- Shows `+` if the device is active
- Driver
- Shows the name of the driver that this device uses
- Name
- Shows the device name as well as the tree structure, since child devices are
- shown attached to their parent.
- If -s is given, the top-level devices (those which are children of the root
- device) are shown sorted in order of uclass ID, so it is easier to find a
- particular device type.
- dm uclass
- ~~~~~~~~~
- This shows each uclass along with a list of devices in that uclass. The uclass
- ID is shown (e.g. uclass 7) and its name.
- For each device, the format is::
- n name @ a, seq s
- where `n` is the index within the uclass, `a` is the address of the device in
- memory and `s` is the sequence number of the device.
- Examples
- --------
- dm compat
- ~~~~~~~~~
- This example shows an abridged version of the sandbox output::
- => dm compat
- Driver Compatible
- --------------------------------
- act8846_reg
- sandbox_adder sandbox,adder
- axi_sandbox_bus sandbox,axi
- blk_partition
- bootcount-rtc u-boot,bootcount-rtc
- ...
- rockchip_rk805 rockchip,rk805
- rockchip,rk808
- rockchip,rk809
- rockchip,rk816
- rockchip,rk817
- rockchip,rk818
- root_driver
- rtc-rv8803 microcrystal,rv8803
- epson,rx8803
- epson,rx8900
- ...
- wdt_gpio linux,wdt-gpio
- wdt_sandbox sandbox,wdt
- dm devres
- ~~~~~~~~~
- This example shows an abridged version of the sandbox test output (running
- U-Boot with the -T flag)::
- => dm devres
- - root_driver
- - demo_shape_drv
- - demo_simple_drv
- - demo_shape_drv
- ...
- - h-test
- - devres-test
- 00000000130194e0 (100 byte) devm_kmalloc_release BIND
- - another-test
- ...
- - syscon@3
- - a-mux-controller
- 0000000013025e60 (96 byte) devm_kmalloc_release PROBE
- 0000000013025f00 (24 byte) devm_kmalloc_release PROBE
- 0000000013026010 (24 byte) devm_kmalloc_release PROBE
- 0000000013026070 (24 byte) devm_kmalloc_release PROBE
- 00000000130260d0 (24 byte) devm_kmalloc_release PROBE
- - syscon@3
- - a-mux-controller
- 0000000013026150 (96 byte) devm_kmalloc_release PROBE
- 00000000130261f0 (24 byte) devm_kmalloc_release PROBE
- 0000000013026300 (24 byte) devm_kmalloc_release PROBE
- 0000000013026360 (24 byte) devm_kmalloc_release PROBE
- 00000000130263c0 (24 byte) devm_kmalloc_release PROBE
- - emul-mux-controller
- 0000000013025fa0 (32 byte) devm_kmalloc_release PROBE
- - testfdtm0
- - testfdtm1
- ...
- - pinmux_spi0_pins
- - pinmux_uart0_pins
- - pinctrl-single-bits
- 0000000013229180 (320 byte) devm_kmalloc_release PROBE
- 0000000013229300 (40 byte) devm_kmalloc_release PROBE
- 0000000013229370 (160 byte) devm_kmalloc_release PROBE
- 000000001322c190 (40 byte) devm_kmalloc_release PROBE
- 000000001322c200 (32 byte) devm_kmalloc_release PROBE
- - pinmux_i2c0_pins
- ...
- - reg@0
- - reg@1
- dm drivers
- ~~~~~~~~~~
- This example shows an abridged version of the sandbox output::
- => dm drivers
- Driver uid uclass Devices
- ----------------------------------------------------------
- act8846_reg 087 regulator <none>
- sandbox_adder 021 axi adder
- adder
- axi_sandbox_bus 021 axi axi@0
- ...
- da7219 061 misc <none>
- demo_shape_drv 001 demo demo_shape_drv
- demo_shape_drv
- demo_shape_drv
- demo_simple_drv 001 demo demo_simple_drv
- demo_simple_drv
- testfdt_drv 003 testfdt a-test
- b-test
- d-test
- e-test
- f-test
- g-test
- another-test
- chosen-test
- testbus_drv 005 testbus some-bus
- mmio-bus@0
- mmio-bus@1
- dsa-port 039 ethernet lan0
- lan1
- dsa_sandbox 035 dsa dsa-test
- eep_sandbox 121 w1_eeprom <none>
- ...
- pfuze100_regulator 087 regulator <none>
- phy_sandbox 077 phy bind-test-child1
- gen_phy@0
- gen_phy@1
- gen_phy@2
- pinconfig 078 pinconfig gpios
- gpio0
- gpio1
- gpio2
- gpio3
- i2c
- groups
- pins
- i2s
- spi
- cs
- pinmux_pwm_pins
- pinmux_spi0_pins
- pinmux_uart0_pins
- pinmux_i2c0_pins
- pinmux_lcd_pins
- pmc_sandbox 017 power-mgr pci@1e,0
- act8846 pmic 080 pmic <none>
- max77686_pmic 080 pmic <none>
- mc34708_pmic 080 pmic pmic@41
- ...
- wdt_gpio 122 watchdog gpio-wdt
- wdt_sandbox 122 watchdog wdt@0
- =>
- dm mem
- ~~~~~~
- This example shows the sandbox output::
- > dm mem
- Struct sizes: udevice b0, driver 80, uclass 30, uc_driver 78
- Memory: device fe:aea0, device names a16, uclass 5e:11a0
- Attached type Count Size Cur Tags Save
- --------------- ----- ----- ----- ----- -----
- plat 45 a8f aea0 a7c4 6dc (1756)
- parent_plat 1a 3b8 aea0 a718 788 (1928)
- uclass_plat 3d 6b4 aea0 a7a4 6fc (1788)
- priv 8a 68f3 aea0 a8d8 5c8 (1480)
- parent_priv 8 38a0 aea0 a6d0 7d0 (2000)
- uclass_priv 4e 14a6 aea0 a7e8 6b8 (1720)
- driver_data f 0 aea0 a6ec 7b4 (1972)
- uclass 6 20
- Attached total 191 cb54 3164 (12644)
- tags 0 0
- Total size: 18b94 (101268)
- With tags: 15a30 (88624)
- - singly-linked: 14260 (82528)
- - driver index: 13b6e (80750)
- - uclass index: 1347c (78972)
- Drop device name (not SRAM): a16 (2582)
- =>
- dm static
- ~~~~~~~~~
- This example shows the sandbox output::
- => dm static
- Driver Address
- ---------------------------------
- demo_shape_drv 0000562edab8dca0
- demo_simple_drv 0000562edab8dca0
- demo_shape_drv 0000562edab8dc90
- demo_simple_drv 0000562edab8dc80
- demo_shape_drv 0000562edab8dc80
- test_drv 0000562edaae8840
- test_drv 0000562edaae8848
- test_drv 0000562edaae8850
- sandbox_gpio 0000000000000000
- mod_exp_sw 0000000000000000
- sandbox_test_proc 0000562edabb5330
- qfw_sandbox 0000000000000000
- sandbox_timer 0000000000000000
- sandbox_serial 0000562edaa8ed00
- sysreset_sandbox 0000000000000000
- dm tree
- -------
- This example shows the abridged sandbox output::
- => dm tree
- Class Index Probed Driver Name
- -----------------------------------------------------------
- root 0 [ + ] root_driver root_driver
- demo 0 [ ] demo_shape_drv |-- demo_shape_drv
- demo 1 [ ] demo_simple_drv |-- demo_simple_drv
- demo 2 [ ] demo_shape_drv |-- demo_shape_drv
- demo 3 [ ] demo_simple_drv |-- demo_simple_drv
- demo 4 [ ] demo_shape_drv |-- demo_shape_drv
- test 0 [ ] test_drv |-- test_drv
- test 1 [ ] test_drv |-- test_drv
- test 2 [ ] test_drv |-- test_drv
- ..
- sysreset 0 [ ] sysreset_sandbox |-- sysreset_sandbox
- bootstd 0 [ ] bootstd_drv |-- bootstd
- bootmeth 0 [ ] bootmeth_extlinux | |-- extlinux
- bootmeth 1 [ ] bootmeth_efi | `-- efi
- reboot-mod 0 [ ] reboot-mode-gpio |-- reboot-mode0
- reboot-mod 1 [ ] reboot-mode-rtc |-- reboot-mode@14
- ...
- ethernet 7 [ + ] dsa-port | `-- lan1
- pinctrl 0 [ + ] sandbox_pinctrl_gpio |-- pinctrl-gpio
- gpio 1 [ + ] sandbox_gpio | |-- base-gpios
- nop 0 [ + ] gpio_hog | | |-- hog_input_active_low
- nop 1 [ + ] gpio_hog | | |-- hog_input_active_high
- nop 2 [ + ] gpio_hog | | |-- hog_output_low
- nop 3 [ + ] gpio_hog | | `-- hog_output_high
- gpio 2 [ ] sandbox_gpio | |-- extra-gpios
- gpio 3 [ ] sandbox_gpio | `-- pinmux-gpios
- i2c 0 [ + ] sandbox_i2c |-- i2c@0
- i2c_eeprom 0 [ ] i2c_eeprom | |-- eeprom@2c
- i2c_eeprom 1 [ ] i2c_eeprom_partition | | `-- bootcount@10
- rtc 0 [ ] sandbox_rtc | |-- rtc@43
- rtc 1 [ + ] sandbox_rtc | |-- rtc@61
- i2c_emul_p 0 [ + ] sandbox_i2c_emul_par | |-- emul
- i2c_emul 0 [ ] sandbox_i2c_eeprom_e | | |-- emul-eeprom
- i2c_emul 1 [ ] sandbox_i2c_rtc_emul | | |-- emul0
- i2c_emul 2 [ + ] sandbox_i2c_rtc_emul | | |-- emull
- i2c_emul 3 [ ] sandbox_i2c_pmic_emu | | |-- pmic-emul0
- i2c_emul 4 [ ] sandbox_i2c_pmic_emu | | `-- pmic-emul1
- pmic 0 [ ] sandbox_pmic | |-- sandbox_pmic
- regulator 0 [ ] sandbox_buck | | |-- buck1
- regulator 1 [ ] sandbox_buck | | |-- buck2
- regulator 2 [ ] sandbox_ldo | | |-- ldo1
- regulator 3 [ ] sandbox_ldo | | |-- ldo2
- regulator 4 [ ] sandbox_buck | | `-- no_match_by_nodename
- pmic 1 [ ] mc34708_pmic | `-- pmic@41
- bootcount 0 [ + ] bootcount-rtc |-- bootcount@0
- bootcount 1 [ ] bootcount-i2c-eeprom |-- bootcount
- ...
- clk 4 [ ] fixed_clock |-- osc
- firmware 0 [ ] sandbox_firmware |-- sandbox-firmware
- scmi_agent 0 [ ] sandbox-scmi_agent `-- scmi
- clk 5 [ ] scmi_clk |-- protocol@14
- reset 2 [ ] scmi_reset_domain |-- protocol@16
- nop 8 [ ] scmi_voltage_domain `-- regulators
- regulator 5 [ ] scmi_regulator |-- reg@0
- regulator 6 [ ] scmi_regulator `-- reg@1
- =>
- dm uclass
- ~~~~~~~~~
- This example shows the abridged sandbox output::
- => dm uclass
- uclass 0: root
- 0 * root_driver @ 03015460, seq 0
- uclass 1: demo
- 0 demo_shape_drv @ 03015560, seq 0
- 1 demo_simple_drv @ 03015620, seq 1
- 2 demo_shape_drv @ 030156e0, seq 2
- 3 demo_simple_drv @ 030157a0, seq 3
- 4 demo_shape_drv @ 03015860, seq 4
- uclass 2: test
- 0 test_drv @ 03015980, seq 0
- 1 test_drv @ 03015a60, seq 1
- 2 test_drv @ 03015b40, seq 2
- ...
- uclass 20: audio-codec
- 0 audio-codec @ 030168e0, seq 0
- uclass 21: axi
- 0 adder @ 0301db60, seq 1
- 1 adder @ 0301dc40, seq 2
- 2 axi@0 @ 030217d0, seq 0
- uclass 22: blk
- 0 mmc2.blk @ 0301ca00, seq 0
- 1 mmc1.blk @ 0301cee0, seq 1
- 2 mmc0.blk @ 0301d380, seq 2
- uclass 23: bootcount
- 0 * bootcount@0 @ 0301b3f0, seq 0
- 1 bootcount @ 0301b4b0, seq 1
- 2 bootcount_4@0 @ 0301b570, seq 2
- 3 bootcount_2@0 @ 0301b630, seq 3
- uclass 24: bootdev
- 0 mmc2.bootdev @ 0301cbb0, seq 0
- 1 mmc1.bootdev @ 0301d050, seq 1
- 2 mmc0.bootdev @ 0301d4f0, seq 2
- ...
- uclass 78: pinconfig
- 0 gpios @ 03022410, seq 0
- 1 gpio0 @ 030224d0, seq 1
- 2 gpio1 @ 03022590, seq 2
- 3 gpio2 @ 03022650, seq 3
- 4 gpio3 @ 03022710, seq 4
- 5 i2c @ 030227d0, seq 5
- 6 groups @ 03022890, seq 6
- 7 pins @ 03022950, seq 7
- 8 i2s @ 03022a10, seq 8
- 9 spi @ 03022ad0, seq 9
- 10 cs @ 03022b90, seq 10
- 11 pinmux_pwm_pins @ 03022e10, seq 11
- 12 pinmux_spi0_pins @ 03022ed0, seq 12
- 13 pinmux_uart0_pins @ 03022f90, seq 13
- 14 * pinmux_i2c0_pins @ 03023130, seq 14
- 15 * pinmux_lcd_pins @ 030231f0, seq 15
- ...
- uclass 119: virtio
- 0 sandbox_virtio1 @ 030220d0, seq 0
- 1 sandbox_virtio2 @ 03022190, seq 1
- uclass 120: w1
- uclass 121: w1_eeprom
- uclass 122: watchdog
- 0 * gpio-wdt @ 0301c070, seq 0
- 1 * wdt@0 @ 03021710, seq 1
- =>
|