1 .. SPDX-License-Identifier: GPL-2.0 1 .. SPDX-License-Identifier: GPL-2.0 2 2 3 ============================================== 3 ============================================================ 4 DOs and DON'Ts for designing and writing Devic 4 DOs and DON'Ts for designing and writing Devicetree bindings 5 ============================================== 5 ============================================================ 6 6 7 This is a list of common review feedback items 7 This is a list of common review feedback items focused on binding design. With 8 every rule, there are exceptions and bindings 8 every rule, there are exceptions and bindings have many gray areas. 9 9 10 For guidelines related to patches, see 10 For guidelines related to patches, see 11 Documentation/devicetree/bindings/submitting-p 11 Documentation/devicetree/bindings/submitting-patches.rst 12 12 13 13 14 Overall design 14 Overall design 15 ============== 15 ============== 16 16 17 - DO attempt to make bindings complete even if 17 - DO attempt to make bindings complete even if a driver doesn't support some 18 features. For example, if a device has an in 18 features. For example, if a device has an interrupt, then include the 19 'interrupts' property even if the driver is 19 'interrupts' property even if the driver is only polled mode. 20 20 21 - DON'T refer to Linux or "device driver" in b 21 - DON'T refer to Linux or "device driver" in bindings. Bindings should be 22 based on what the hardware has, not what an 22 based on what the hardware has, not what an OS and driver currently support. 23 23 24 - DO use node names matching the class of the 24 - DO use node names matching the class of the device. Many standard names are 25 defined in the DT Spec. If there isn't one, 25 defined in the DT Spec. If there isn't one, consider adding it. 26 26 27 - DO check that the example matches the docume 27 - DO check that the example matches the documentation especially after making 28 review changes. 28 review changes. 29 29 30 - DON'T create nodes just for the sake of inst 30 - DON'T create nodes just for the sake of instantiating drivers. Multi-function 31 devices only need child nodes when the child 31 devices only need child nodes when the child nodes have their own DT 32 resources. A single node can be multiple pro 32 resources. A single node can be multiple providers (e.g. clocks and resets). 33 33 34 - DON'T use 'syscon' alone without a specific 34 - DON'T use 'syscon' alone without a specific compatible string. A 'syscon' 35 hardware block should have a compatible stri 35 hardware block should have a compatible string unique enough to infer the 36 register layout of the entire block (at a mi 36 register layout of the entire block (at a minimum). 37 37 38 38 39 Properties 39 Properties 40 ========== 40 ========== 41 41 42 - DO make 'compatible' properties specific. DO 42 - DO make 'compatible' properties specific. DON'T use wildcards in compatible 43 strings. DO use fallback compatibles when de 43 strings. DO use fallback compatibles when devices are the same as or a subset 44 of prior implementations. DO add new compati 44 of prior implementations. DO add new compatibles in case there are new 45 features or bugs. 45 features or bugs. 46 46 47 - DO use a vendor prefix on device-specific pr 47 - DO use a vendor prefix on device-specific property names. Consider if 48 properties could be common among devices of 48 properties could be common among devices of the same class. Check other 49 existing bindings for similar devices. 49 existing bindings for similar devices. 50 50 51 - DON'T redefine common properties. Just refer 51 - DON'T redefine common properties. Just reference the definition and define 52 constraints specific to the device. 52 constraints specific to the device. 53 53 54 - DO use common property unit suffixes for pro 54 - DO use common property unit suffixes for properties with scientific units. 55 Recommended suffixes are listed at 55 Recommended suffixes are listed at 56 https://github.com/devicetree-org/dt-schema/ !! 56 https://github.com/devicetree-org/dt-schema/blob/master/schemas/property-units.yaml 57 57 58 - DO define properties in terms of constraints 58 - DO define properties in terms of constraints. How many entries? What are 59 possible values? What is the order? 59 possible values? What is the order? 60 60 61 Typical cases and caveats << 62 ========================= << 63 << 64 - Phandle entries, like clocks/dmas/interrupts << 65 explicitly ordered. Include the {clock,dma,i << 66 more than one phandle. When used, both of th << 67 constraints (e.g. list of items). << 68 << 69 - For names used in {clock,dma,interrupt,reset << 70 e.g.: "tx" instead of "txirq" (for interrupt << 71 << 72 - Properties without schema types (e.g. withou << 73 by schema) need the type, even if this is an << 74 << 75 - If schema includes other schema (e.g. /schem << 76 "unevaluatedProperties:false". In other case << 77 "additionalProperties:false". << 78 << 79 - For sub-blocks/components of bigger device ( << 80 device-based compatible (e.g. SoC-based comp << 81 versioning of that component. << 82 For example use "vendor,soc1234-i2c" instead << 83 << 84 - "syscon" is not a generic property. Use vend << 85 "vendor,power-manager-syscon". << 86 61 87 Board/SoC .dts Files 62 Board/SoC .dts Files 88 ==================== 63 ==================== 89 64 90 - DO put all MMIO devices under a bus node and 65 - DO put all MMIO devices under a bus node and not at the top-level. 91 66 92 - DO use non-empty 'ranges' to limit the size 67 - DO use non-empty 'ranges' to limit the size of child buses/devices. 64-bit 93 platforms don't need all devices to have 64- 68 platforms don't need all devices to have 64-bit address and size.
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.