[RFC PATCH] dt: add a binding review checklist

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




From: Stephen Warren <swarren@xxxxxxxxxx>

I originally intended this to be a brief list of items to check when
reviewing a new DT binding. However, I appear to have become slightly
distracted and added in a bunch of background/justification verbiage
too!

Do people think this is going the right direction? Should I continue in
the current style and add more sections to the document, or strip it back
to be a much more plain list, perhaps something like:
https://fedoraproject.org/wiki/Packaging:ReviewGuidelines
(which is where I got the idea for this)

Signed-off-by: Stephen Warren <swarren@xxxxxxxxxx>
---
 .../bindings/binding-review-checklist.txt          | 179 +++++++++++++++++++++
 1 file changed, 179 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/binding-review-checklist.txt

diff --git a/Documentation/devicetree/bindings/binding-review-checklist.txt b/Documentation/devicetree/bindings/binding-review-checklist.txt
new file mode 100644
index 0000000..8c4b5bf
--- /dev/null
+++ b/Documentation/devicetree/bindings/binding-review-checklist.txt
@@ -0,0 +1,179 @@
+Reviewers' checklist for Device Tree bindings
+=============================================
+
+Introduction
+------------
+
+This document provides a set of guidelines for review of new Device Tree
+bindings. It is not (yet?) exhaustive. Good engineering judgement should be
+applied in addition to the requirements specified below.
+
+Much of this document is written from the perspective of defining bindings for
+individual chips, or hardware/IP blocks. However, many of the assertions here
+are valid when defining generic/super-class bindings for "subsystems" or
+device classes, such as "all I2C controllers", "all I2C clients", etc.
+
+What Device Tree Represents
+---------------------------
+
+Hardware Description
+~~~~~~~~~~~~~~~~~~~~
+
+Device Tree is a description of hardware, or firmware interfaces. It may
+describe device presence, type, location, associated configuration parameters
+that are purely derived from the hardware definition, and connectivity
+between components.
+
+The rest of this document uses the term "hardware" to refer to either a
+physical hardware device, or a firmware interface.
+
+For example, a DT might specify that a particular vendor's SHDCI controller is
+available, memory-mapped at address 0xc8000000, generates an interrupt that
+is routed to a specified active-low level-sensitive input on a specified IRQ
+controller, is fed by a specific clock generated by a specific clock source,
+and may detect card presence using a specific active-low GPIO hosted by a
+specific GPIO controller.
+
+No Representation of Policy
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Device tree is not a description of how to use the hardware, nor policy to
+be applied when using the hardware.
+
+For example, consider a system with two analog line-out audio jacks, where
+only one may be used at a time, with software control over which jack is
+active. The DT should describe the presence of both jacks, but should not
+specify the conditions under which to select when to use one jack or the
+other. That decision should be left up to the software running on the device.
+In this situation, however, it is reasonable for DT to identify which jack
+is which, so that software can usefully select between the two jacks.
+
+Equally, consider a system that is sold as two different products, one
+of which costs more because it allows the use of an SD card slot at a
+faster clock rate than the other, even though the hardware is actually
+identical. DT should not be used to impose the limit on the SD card
+clock rate purely for policy or differentiation reasons. However, if
+the PCB is physically different between the two products, and has been
+deliberately designed and qualified to support different maximum clock
+rates (e.g. differing trace width or impedance), it would be acceptable to
+represent this maximum supported clock rate in device tree.
+
+Operating System Agnostic
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Since Device tree is a pure description of hardware, the same bindings apply
+irrespective of the software running on the device. This implies that the same
+DT content should be passed to any software running on the device.
+
+Binding definitions should be self-contained, and not reference any particular
+operating system's documentation or code. Referencing OS-independent standards,
+such as USB or EHCI, is appropriate.
+
+Some exceptions are necessary, although these are generally limited to more
+system-level DT nodes such as /chosen. This is an area where engineering
+judgement may apply.
+
+Some bindings need to name or identify certain hardware properties. An example
+may be labels on keys in a matrix keyboard. Some numbering scheme is needed
+here, and in the absence of any OS-independent standard, it is reasonably to
+choose the numbering scheme of some particular operating system rather than
+inventing a new scheme. However, the full details of that scheme should be
+duplicated into the DT binding document (or associated header file) so that
+the binding definition remains stand-alone, and may be easily used by other
+operating systems.
+
+Vendor Prefix
+-------------
+
+A vendor prefix is simply a unique name for a (typically hardware-) vendor.
+This prefix is part of the entries in the compatible property, and names of
+binding-specific properties. The prefix serves to divide the name-space and
+avoid collisions between bindings from different vendors.
+
+All vendor prefix values must be documented in vendor-prefixes.txt.
+
+Valid values for a vendor prefix are:
+
+* A short, yet not obscure or obfuscated, representation of the vendor's name,
+  in lower-case. Stock tickers may be used in lower-case.
+* The vendor's stock ticker, in upper-case.
+
+Binding Structure
+-----------------
+
+A binding definition is currently a plain text file that contains:
+
+* A brief description of the hardware it describes, e.g. it's an I2C
+  controller, or an SPI controller, etc. Any unique or unusual features should
+  be explained in more depth.
+* Enough information to identify the hardware, and hence find the relevant
+  documentation for it to read alongside the binding definition (assuming such
+  documentation exists, and one has access to obtain it).
+* References any other generic/super-class bindings that this binding
+  "inherits" from, including their binding document filename.
+* For all properties the binding supports, defines:
+** The property name.
+** Whether the property is defined by, or is an instance of, some generic
+   binding, such as GPIO, IRQ, etc. If so, reference the binding document
+   filename that defines that binding.
+** Whether it is required or optional.
+** For optional properties, the implied value when the property is missing.
+** The type of the value.
+** The set or range of legal values for the property.
+** For properties that are lists, the order (if any) the entries must appear.
+* Typically contains a simple example to demonstrate the binding.
+
+Compatible Property
+-------------------
+
+A compatible value identifies a hardware module. It needs to identify the
+vendor (e.g. NVIDIA), type or name of device (e.g. I2C), and version of the
+device (e.g. an IP block version number or chip name). The following formats
+of compatible value are acceptable:
+
+* ${vendor},${device}-${version} (e.g. ti,omap4-i2c)
+* ${vendor},${version}-${device} (e.g. nvidia,tegra20-i2c)
+* ${vendor},${device}-${version} (e.g. synopsis,dwc3)
+
+Bindings for related hardware modules (e.g. all IP blocks in an SoC) should
+consistently use the same formatting option for their compatible values.
+
+A binding should enumerate all compatible values that it supports,
+both compatible values that imply a different software-visible programming interface, and
+compatible values that simply define device-specific instantiations of a
+common IP block. This provides a central database of all valid compatible
+values. This ensures that if a particular instance of an IP block is found
+to require a quirk to be activated, the binding document will authoritatively
+define the compatible value that software can use to identify it.
+
+Examples compatible values might be:
+
+* vendor,chip-i2c. First value defined.
+* vendor,chip2-i2c. 100% backwards-compatible with vendor,chip-i2c, yet
+  adds some optional new features.
+* vendor,chip3-i2c. Identical to vendor,chip2-i2c. This value exists only to
+  document the fact the IP block was instantiated into a different top-level
+  chip, to allow enabling any quirks required by that instantiation.
+
+Specifiers
+----------
+
+Many properties define a resource that is provided by one DT node and used by
+another. Any naming, formatting, and order of entry conventions for these
+properties should be defined by a "super-class" or "subsystem" binding.
+
+For example, some properties (such as reg, interrupts) are accessed by list
+index. Any reg-names or interrupt-names property is purely informational. The
+core definition of the regs or interrupts properties defines that these
+properties are accessed by index. Any binding that uses these properties must
+define how many entries these properties should contain (e.g. if multiple
+interrupts are generated by the hardware module or not), and which order
+the entries must appear.
+
+Other properties (such as clocks) have a mandatory associated names property
+(e.g. clock-names). In this case, the clock subsystem binding defines that
+clock names are first located in the clock-names property, then the index of
+the name is also used to index into the clocks property to find the actual
+clock definition. In this case, any binding that uses these properties must
+define the set of required and optional entries for the clock-names property.
+No specification of order of entries is possible.
-- 
1.8.1.5

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux