| .. SPDX-License-Identifier: GPL-2.0+: | |
| .. index:: | |
| single: dm (command) | |
| dm command | |
| ========== | |
| Synopsis | |
| -------- | |
| :: | |
| dm compat | |
| dm devres | |
| dm drivers | |
| dm static | |
| dm tree [-s][-e] [uclass name] | |
| dm uclass [-e] [udevice name] | |
| 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 | |
| Seq | |
| Shows the sequence number of the device, within the uclass. | |
| 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. | |
| If -e is given, forward-matching against existing devices is | |
| made and only the matched devices are shown. | |
| If a device name is given, forward-matching against existing devices is | |
| made and only the matched devices are shown. | |
| 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. | |
| If -e is given, forward-matching against existing uclasses is | |
| made and only the matched uclasses are shown. | |
| If no uclass name is given, all the uclasses are shown. | |
| 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 Seq 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 tree pinc | |
| 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 | |
| => | |
| 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 | |
| => dm uclass blk | |
| uclass 22: blk | |
| 0 mmc2.blk @ 0301ca00, seq 0 | |
| 1 mmc1.blk @ 0301cee0, seq 1 | |
| 2 mmc0.blk @ 0301d380, seq 2 | |
| => |