Devicetree for 5.2:
- Fix possible memory leak in reserved-memory failure case - Support for DMA parent bus which are not a parent node - Clang -Wunsequenced fix - Remove some unnecessary prints on memory alloc failures - Various printk msg and comment fixes - Update DT schema tools repository location - Convert simple-framebuffer binding to DT schema - Bindings for isl68137 and ir38064 trivial devices - New documentation on binding do's and don't's for binding writers to ignore -----BEGIN PGP SIGNATURE----- iQJEBAABCgAuFiEEktVUI4SxYhzZyEuo+vtdtY28YcMFAlzR2jQQHHJvYmhAa2Vy bmVsLm9yZwAKCRD6+121jbxhw1+uD/92gu3NHyncELMu7TRHubuM1P5PCAC//BEH ZOG8lopp1v27cPA3aGiSoQu/Uy+JgCjLZWiF9ZiiCvKYaKEdYPB1r7vKWtQ/G2Mk iHJPAgm7uzq0jWTh3J9h6kZkQos1zx9Qh4R81RUdoCY9cGq613Q309Vtj+zluV4Q UVq7fGUL7kDN5LDQh+gTYkX/XBk7I5F5L50RnVcgTIVGCU2DLnRmaXdyrc71N55P w0S2d9eeUIO1N4p4aVnnL1NiY5TjVoh5T6FMWaRzRXr97/YFQVZRBFHKf5AdmUw6 oBbF2wglfWohs5kz30EpuMiqB87vHHy+VbVcybIbZxHHt5wZ7JFNQhGFV74WSt+I +YvmjtKmJZ78ZHjA8wbCno+/DUMkK8Hi5Ft6k7AICDYC6MmAbkBlSIpp10rb6Jfh c4N8Aj7uWv5MRw6dcXkUalE6FBdFq98diFrxSKOlRHwOgDFhoaDBHykAmQmKWvUl hgTjLIcl8FJbsEIyrG5mqlumo6I6/GImpmKqaZ7nD3pzfTKiWi/oVsF4vz5vulY3 Q2dAHLm+UIysI3owbOstnC6tCM+r870FQ8VOPu8Kz0NKoot4ZkUajPr9uVlu5TEM KZLWZ0j4/YnBg9DoPugjkT4YywOGl9VyqFK090pqzseYJ0Lgz7dAl6/QOWkH7C1C yvX2czRWSg== =zBKC -----END PGP SIGNATURE----- Merge tag 'devicetree-for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux Pull Devicetree updates from Rob Herring: - Fix possible memory leak in reserved-memory failure case - Support for DMA parent bus which are not a parent node - Clang -Wunsequenced fix - Remove some unnecessary prints on memory alloc failures - Various printk msg and comment fixes - Update DT schema tools repository location - Convert simple-framebuffer binding to DT schema - Bindings for isl68137 and ir38064 trivial devices - New documentation on binding do's and don't's for binding writers to ignore * tag 'devicetree-for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (22 commits) of: unittest: Remove error printing on OOM of: irq: Remove WARN_ON() for kzalloc() failure dt-bindings: pinctrl: fix bias-pull,up typo dt-bindings: Update schema project location to devicetree.org github group of: fix clang -Wunsequenced for be32_to_cpu() of/device.c: fix the wrong comments dt-bindings: Add isl68137 as a trivial device dt-bindings: Add ir38064 as a trivial device of: del redundant type conversion dt-bindings: mfd: axp20x: Add fallback for axp805 of: Improve of_phandle_iterator_next() error message dt-bindings: connector: Spelling mistake dt-bindings: Add schemas for simple-framebuffer of: address: Add support for the parent DMA bus of: address: Retrieve a parent through a callback in __of_translate_address dt-bindings: bus: Add binding for the Allwinner MBUS controller dt-bindings: interconnect: Add a dma interconnect name of: use correct function prototype for of_overlay_fdt_apply() of: reserved_mem: fix reserve memory leak of: property: Document that of_graph_get_endpoint_by_regs needs of_node_put ...
This commit is contained in:
commit
82efe43959
|
@ -67,6 +67,7 @@ properties:
|
|||
|
||||
patternProperties:
|
||||
'^cpu@[0-9a-f]+$':
|
||||
type: object
|
||||
properties:
|
||||
device_type:
|
||||
const: cpu
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
Allwinner Memory Bus (MBUS) controller
|
||||
|
||||
The MBUS controller drives the MBUS that other devices in the SoC will
|
||||
use to perform DMA. It also has a register interface that allows to
|
||||
monitor and control the bandwidth and priorities for masters on that
|
||||
bus.
|
||||
|
||||
Required properties:
|
||||
- compatible: Must be one of:
|
||||
- allwinner,sun5i-a13-mbus
|
||||
- reg: Offset and length of the register set for the controller
|
||||
- clocks: phandle to the clock driving the controller
|
||||
- dma-ranges: See section 2.3.9 of the DeviceTree Specification
|
||||
- #interconnect-cells: Must be one, with the argument being the MBUS
|
||||
port ID
|
||||
|
||||
Each device having to perform their DMA through the MBUS must have the
|
||||
interconnects and interconnect-names properties set to the MBUS
|
||||
controller and with "dma-mem" as the interconnect name.
|
||||
|
||||
Example:
|
||||
|
||||
mbus: dram-controller@1c01000 {
|
||||
compatible = "allwinner,sun5i-a13-mbus";
|
||||
reg = <0x01c01000 0x1000>;
|
||||
clocks = <&ccu CLK_MBUS>;
|
||||
dma-ranges = <0x00000000 0x40000000 0x20000000>;
|
||||
#interconnect-cells = <1>;
|
||||
};
|
||||
|
||||
fe0: display-frontend@1e00000 {
|
||||
compatible = "allwinner,sun5i-a13-display-frontend";
|
||||
...
|
||||
interconnects = <&mbus 19>;
|
||||
interconnect-names = "dma-mem";
|
||||
};
|
|
@ -47,7 +47,7 @@ Required properties for usb-c-connector with power delivery support:
|
|||
Required nodes:
|
||||
- any data bus to the connector should be modeled using the OF graph bindings
|
||||
specified in bindings/graph.txt, unless the bus is between parent node and
|
||||
the connector. Since single connector can have multpile data buses every bus
|
||||
the connector. Since single connector can have multiple data buses every bus
|
||||
has assigned OF graph port number as follows:
|
||||
0: High Speed (HS), present in all connectors,
|
||||
1: Super Speed (SS), present in SS capable connectors,
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
Meson specific Simple Framebuffer bindings
|
||||
|
||||
This binding documents meson specific extensions to the simple-framebuffer
|
||||
bindings. The meson simplefb u-boot code relies on the devicetree containing
|
||||
pre-populated simplefb nodes.
|
||||
|
||||
These extensions are intended so that u-boot can select the right node based
|
||||
on which pipeline is being used. As such they are solely intended for
|
||||
firmware / bootloader use, and the OS should ignore them.
|
||||
|
||||
Required properties:
|
||||
- compatible: "amlogic,simple-framebuffer", "simple-framebuffer"
|
||||
- amlogic,pipeline, one of:
|
||||
"vpu-cvbs"
|
||||
"vpu-hdmi"
|
||||
|
||||
Example:
|
||||
|
||||
chosen {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
simplefb_hdmi: framebuffer-hdmi {
|
||||
compatible = "amlogic,simple-framebuffer",
|
||||
"simple-framebuffer";
|
||||
amlogic,pipeline = "vpu-hdmi";
|
||||
clocks = <&clkc CLKID_HDMI_PCLK>,
|
||||
<&clkc CLKID_CLK81>,
|
||||
<&clkc CLKID_GCLK_VENCI_INT0>;
|
||||
power-domains = <&pwrc_vpu>;
|
||||
};
|
||||
};
|
|
@ -1,36 +0,0 @@
|
|||
Sunxi specific Simple Framebuffer bindings
|
||||
|
||||
This binding documents sunxi specific extensions to the simple-framebuffer
|
||||
bindings. The sunxi simplefb u-boot code relies on the devicetree containing
|
||||
pre-populated simplefb nodes.
|
||||
|
||||
These extensions are intended so that u-boot can select the right node based
|
||||
on which pipeline is being used. As such they are solely intended for
|
||||
firmware / bootloader use, and the OS should ignore them.
|
||||
|
||||
Required properties:
|
||||
- compatible: "allwinner,simple-framebuffer"
|
||||
- allwinner,pipeline, one of:
|
||||
"de_be0-lcd0"
|
||||
"de_be1-lcd1"
|
||||
"de_be0-lcd0-hdmi"
|
||||
"de_be1-lcd1-hdmi"
|
||||
"mixer0-lcd0"
|
||||
"mixer0-lcd0-hdmi"
|
||||
"mixer1-lcd1-hdmi"
|
||||
"mixer1-lcd1-tve"
|
||||
|
||||
Example:
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
framebuffer@0 {
|
||||
compatible = "allwinner,simple-framebuffer", "simple-framebuffer";
|
||||
allwinner,pipeline = "de_be0-lcd0-hdmi";
|
||||
clocks = <&pll5 1>, <&ahb_gates 36>, <&ahb_gates 43>,
|
||||
<&ahb_gates 44>;
|
||||
};
|
||||
};
|
|
@ -1,91 +0,0 @@
|
|||
Simple Framebuffer
|
||||
|
||||
A simple frame-buffer describes a frame-buffer setup by firmware or
|
||||
the bootloader, with the assumption that the display hardware has already
|
||||
been set up to scan out from the memory pointed to by the reg property.
|
||||
|
||||
Since simplefb nodes represent runtime information they must be sub-nodes of
|
||||
the chosen node (*). Simplefb nodes must be named "framebuffer@<address>".
|
||||
|
||||
If the devicetree contains nodes for the display hardware used by a simplefb,
|
||||
then the simplefb node must contain a property called "display", which
|
||||
contains a phandle pointing to the primary display hw node, so that the OS
|
||||
knows which simplefb to disable when handing over control to a driver for the
|
||||
real hardware. The bindings for the hw nodes must specify which node is
|
||||
considered the primary node.
|
||||
|
||||
It is advised to add display# aliases to help the OS determine how to number
|
||||
things. If display# aliases are used, then if the simplefb node contains a
|
||||
"display" property then the /aliases/display# path must point to the display
|
||||
hw node the "display" property points to, otherwise it must point directly
|
||||
to the simplefb node.
|
||||
|
||||
If a simplefb node represents the preferred console for user interaction,
|
||||
then the chosen node's stdout-path property should point to it, or to the
|
||||
primary display hw node, as with display# aliases. If display aliases are
|
||||
used then it should be set to the alias instead.
|
||||
|
||||
It is advised that devicetree files contain pre-filled, disabled framebuffer
|
||||
nodes, so that the firmware only needs to update the mode information and
|
||||
enable them. This way if e.g. later on support for more display clocks get
|
||||
added, the simplefb nodes will already contain this info and the firmware
|
||||
does not need to be updated.
|
||||
|
||||
If pre-filled framebuffer nodes are used, the firmware may need extra
|
||||
information to find the right node. In that case an extra platform specific
|
||||
compatible and platform specific properties should be used and documented,
|
||||
see e.g. simple-framebuffer-sunxi.txt .
|
||||
|
||||
Required properties:
|
||||
- compatible: "simple-framebuffer"
|
||||
- reg: Should contain the location and size of the framebuffer memory.
|
||||
- width: The width of the framebuffer in pixels.
|
||||
- height: The height of the framebuffer in pixels.
|
||||
- stride: The number of bytes in each line of the framebuffer.
|
||||
- format: The format of the framebuffer surface. Valid values are:
|
||||
- r5g6b5 (16-bit pixels, d[15:11]=r, d[10:5]=g, d[4:0]=b).
|
||||
- a8b8g8r8 (32-bit pixels, d[31:24]=a, d[23:16]=b, d[15:8]=g, d[7:0]=r).
|
||||
|
||||
Optional properties:
|
||||
- clocks : List of clocks used by the framebuffer.
|
||||
- *-supply : Any number of regulators used by the framebuffer. These should
|
||||
be named according to the names in the device's design.
|
||||
|
||||
The above resources are expected to already be configured correctly.
|
||||
The OS must ensure they are not modified or disabled while the simple
|
||||
framebuffer remains active.
|
||||
|
||||
- display : phandle pointing to the primary display hardware node
|
||||
|
||||
Example:
|
||||
|
||||
aliases {
|
||||
display0 = &lcdc0;
|
||||
}
|
||||
|
||||
chosen {
|
||||
framebuffer0: framebuffer@1d385000 {
|
||||
compatible = "simple-framebuffer";
|
||||
reg = <0x1d385000 (1600 * 1200 * 2)>;
|
||||
width = <1600>;
|
||||
height = <1200>;
|
||||
stride = <(1600 * 2)>;
|
||||
format = "r5g6b5";
|
||||
clocks = <&ahb_gates 36>, <&ahb_gates 43>, <&ahb_gates 44>;
|
||||
lcd-supply = <®_dc1sw>;
|
||||
display = <&lcdc0>;
|
||||
};
|
||||
stdout-path = "display0";
|
||||
};
|
||||
|
||||
soc@1c00000 {
|
||||
lcdc0: lcdc@1c0c000 {
|
||||
compatible = "allwinner,sun4i-a10-lcdc";
|
||||
...
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
*) Older devicetree files may have a compatible = "simple-framebuffer" node
|
||||
in a different place, operating systems must first enumerate any compatible
|
||||
nodes found under chosen and then check for other compatible nodes.
|
|
@ -0,0 +1,160 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/simple-framebuffer.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Simple Framebuffer Device Tree Bindings
|
||||
|
||||
maintainers:
|
||||
- Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||
- Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
description: |+
|
||||
A simple frame-buffer describes a frame-buffer setup by firmware or
|
||||
the bootloader, with the assumption that the display hardware has
|
||||
already been set up to scan out from the memory pointed to by the
|
||||
reg property.
|
||||
|
||||
Since simplefb nodes represent runtime information they must be
|
||||
sub-nodes of the chosen node (*). Simplefb nodes must be named
|
||||
framebuffer@<address>.
|
||||
|
||||
If the devicetree contains nodes for the display hardware used by a
|
||||
simplefb, then the simplefb node must contain a property called
|
||||
display, which contains a phandle pointing to the primary display
|
||||
hw node, so that the OS knows which simplefb to disable when handing
|
||||
over control to a driver for the real hardware. The bindings for the
|
||||
hw nodes must specify which node is considered the primary node.
|
||||
|
||||
It is advised to add display# aliases to help the OS determine how
|
||||
to number things. If display# aliases are used, then if the simplefb
|
||||
node contains a display property then the /aliases/display# path
|
||||
must point to the display hw node the display property points to,
|
||||
otherwise it must point directly to the simplefb node.
|
||||
|
||||
If a simplefb node represents the preferred console for user
|
||||
interaction, then the chosen node stdout-path property should point
|
||||
to it, or to the primary display hw node, as with display#
|
||||
aliases. If display aliases are used then it should be set to the
|
||||
alias instead.
|
||||
|
||||
It is advised that devicetree files contain pre-filled, disabled
|
||||
framebuffer nodes, so that the firmware only needs to update the
|
||||
mode information and enable them. This way if e.g. later on support
|
||||
for more display clocks get added, the simplefb nodes will already
|
||||
contain this info and the firmware does not need to be updated.
|
||||
|
||||
If pre-filled framebuffer nodes are used, the firmware may need
|
||||
extra information to find the right node. In that case an extra
|
||||
platform specific compatible and platform specific properties should
|
||||
be used and documented.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- allwinner,simple-framebuffer
|
||||
- amlogic,simple-framebuffer
|
||||
- const: simple-framebuffer
|
||||
|
||||
reg:
|
||||
description: Location and size of the framebuffer memory
|
||||
|
||||
clocks:
|
||||
description: List of clocks used by the framebuffer.
|
||||
|
||||
power-domains:
|
||||
description: List of power domains used by the framebuffer.
|
||||
|
||||
width:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: Width of the framebuffer in pixels
|
||||
|
||||
height:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: Height of the framebuffer in pixels
|
||||
|
||||
stride:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: Number of bytes of a line in the framebuffer
|
||||
|
||||
format:
|
||||
description: >
|
||||
Format of the framebuffer:
|
||||
* `a8b8g8r8` - 32-bit pixels, d[31:24]=a, d[23:16]=b, d[15:8]=g, d[7:0]=r
|
||||
* `r5g6b5` - 16-bit pixels, d[15:11]=r, d[10:5]=g, d[4:0]=b
|
||||
enum:
|
||||
- a8b8g8r8
|
||||
- r5g6b5
|
||||
|
||||
display:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
description: Primary display hardware node
|
||||
|
||||
allwinner,pipeline:
|
||||
description: Pipeline used by the framebuffer on Allwinner SoCs
|
||||
enum:
|
||||
- de_be0-lcd0
|
||||
- de_be0-lcd0-hdmi
|
||||
- de_be0-lcd0-tve0
|
||||
- de_be1-lcd0
|
||||
- de_be1-lcd1-hdmi
|
||||
- de_fe0-de_be0-lcd0
|
||||
- de_fe0-de_be0-lcd0-hdmi
|
||||
- de_fe0-de_be0-lcd0-tve0
|
||||
- mixer0-lcd0
|
||||
- mixer0-lcd0-hdmi
|
||||
- mixer1-lcd1-hdmi
|
||||
- mixer1-lcd1-tve
|
||||
|
||||
amlogic,pipeline:
|
||||
description: Pipeline used by the framebuffer on Amlogic SoCs
|
||||
enum:
|
||||
- vpu-cvbs
|
||||
- vpu-hdmi
|
||||
|
||||
patternProperties:
|
||||
"^[a-zA-Z0-9-]+-supply$":
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
description:
|
||||
Regulators used by the framebuffer. These should be named
|
||||
according to the names in the device design.
|
||||
|
||||
required:
|
||||
# The binding requires also reg, width, height, stride and format,
|
||||
# but usually they will be filled by the bootloader.
|
||||
- compatible
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
aliases {
|
||||
display0 = &lcdc0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
stdout-path = "display0";
|
||||
framebuffer0: framebuffer@1d385000 {
|
||||
compatible = "simple-framebuffer";
|
||||
reg = <0x1d385000 3840000>;
|
||||
width = <1600>;
|
||||
height = <1200>;
|
||||
stride = <3200>;
|
||||
format = "r5g6b5";
|
||||
clocks = <&ahb_gates 36>, <&ahb_gates 43>, <&ahb_gates 44>;
|
||||
lcd-supply = <®_dc1sw>;
|
||||
display = <&lcdc0>;
|
||||
};
|
||||
};
|
||||
|
||||
soc@1c00000 {
|
||||
lcdc0: lcdc@1c0c000 {
|
||||
compatible = "allwinner,sun4i-a10-lcdc";
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -51,6 +51,10 @@ interconnect-names : List of interconnect path name strings sorted in the same
|
|||
interconnect-names to match interconnect paths with interconnect
|
||||
specifier pairs.
|
||||
|
||||
Reserved interconnect names:
|
||||
* dma-mem: Path from the device to the main memory of
|
||||
the system
|
||||
|
||||
Example:
|
||||
|
||||
sdhci@7864000 {
|
||||
|
|
|
@ -129,6 +129,7 @@ required:
|
|||
|
||||
patternProperties:
|
||||
"^v2m@[0-9a-f]+$":
|
||||
type: object
|
||||
description: |
|
||||
* GICv2m extension for MSI/MSI-x support (Optional)
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ Required properties:
|
|||
* "x-powers,axp223"
|
||||
* "x-powers,axp803"
|
||||
* "x-powers,axp806"
|
||||
* "x-powers,axp805", "x-powers,axp806"
|
||||
* "x-powers,axp809"
|
||||
* "x-powers,axp813"
|
||||
- reg: The I2C slave address or RSB hardware address for the AXP chip
|
||||
|
|
|
@ -42,7 +42,7 @@ information about e.g. the mux function.
|
|||
The following generic properties as defined in pinctrl-bindings.txt are valid
|
||||
to specify in a pin configuration subnode:
|
||||
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull,up, drive-strength,
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull-up, drive-strength,
|
||||
output-low, output-high.
|
||||
|
||||
Non-empty subnodes must specify the 'pins' property.
|
||||
|
|
|
@ -44,7 +44,7 @@ information about e.g. the mux function.
|
|||
|
||||
The following generic properties as defined in pinctrl-bindings.txt are valid
|
||||
to specify in a pin configuration subnode:
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull,up, drive-strength.
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull-up, drive-strength.
|
||||
|
||||
Non-empty subnodes must specify the 'pins' property.
|
||||
Note that not all properties are valid for all pins.
|
||||
|
|
|
@ -42,7 +42,7 @@ information about e.g. the mux function.
|
|||
The following generic properties as defined in pinctrl-bindings.txt are valid
|
||||
to specify in a pin configuration subnode:
|
||||
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull,up, drive-strength,
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull-up, drive-strength,
|
||||
output-low, output-high.
|
||||
|
||||
Non-empty subnodes must specify the 'pins' property.
|
||||
|
|
|
@ -42,7 +42,7 @@ information about e.g. the mux function.
|
|||
The following generic properties as defined in pinctrl-bindings.txt are valid
|
||||
to specify in a pin configuration subnode:
|
||||
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull,up, drive-strength,
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull-up, drive-strength,
|
||||
output-low, output-high.
|
||||
|
||||
Non-empty subnodes must specify the 'pins' property.
|
||||
|
|
|
@ -41,7 +41,7 @@ information about e.g. the mux function.
|
|||
|
||||
The following generic properties as defined in pinctrl-bindings.txt are valid
|
||||
to specify in a pin configuration subnode:
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull,up, drive-strength.
|
||||
pins, function, bias-disable, bias-pull-down, bias-pull-up, drive-strength.
|
||||
|
||||
Non-empty subnodes must specify the 'pins' property.
|
||||
Note that not all properties are valid for all pins.
|
||||
|
|
|
@ -59,6 +59,7 @@ properties:
|
|||
|
||||
patternProperties:
|
||||
'^frame@[0-9a-z]*$':
|
||||
type: object
|
||||
description: A timer node has up to 8 frame sub-nodes, each with the following properties.
|
||||
properties:
|
||||
frame-number:
|
||||
|
|
|
@ -92,6 +92,8 @@ properties:
|
|||
- fsl,sgtl5000
|
||||
# G751: Digital Temperature Sensor and Thermal Watchdog with Two-Wire Interface
|
||||
- gmt,g751
|
||||
# Infineon IR38064 Voltage Regulator
|
||||
- infineon,ir38064
|
||||
# Infineon SLB9635 (Soft-) I2C TPM (old protocol, max 100khz)
|
||||
- infineon,slb9635tt
|
||||
# Infineon SLB9645 I2C TPM (new protocol, max 400khz)
|
||||
|
@ -102,6 +104,8 @@ properties:
|
|||
- isil,isl29028
|
||||
# Intersil ISL29030 Ambient Light and Proximity Sensor
|
||||
- isil,isl29030
|
||||
# Intersil ISL68137 Digital Output Configurable PWM Controller
|
||||
- isil,isl68137
|
||||
# 5 Bit Programmable, Pulse-Width Modulator
|
||||
- maxim,ds1050
|
||||
# Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
DOs and DON'Ts for designing and writing Devicetree bindings
|
||||
|
||||
This is a list of common review feedback items focused on binding design. With
|
||||
every rule, there are exceptions and bindings have many gray areas.
|
||||
|
||||
For guidelines related to patches, see
|
||||
Documentation/devicetree/bindings/submitting-patches.txt
|
||||
|
||||
|
||||
Overall design
|
||||
|
||||
- DO attempt to make bindings complete even if a driver doesn't support some
|
||||
features. For example, if a device has an interrupt, then include the
|
||||
'interrupts' property even if the driver is only polled mode.
|
||||
|
||||
- DON'T refer to Linux or "device driver" in bindings. Bindings should be
|
||||
based on what the hardware has, not what an OS and driver currently support.
|
||||
|
||||
- DO use node names matching the class of the device. Many standard names are
|
||||
defined in the DT Spec. If there isn't one, consider adding it.
|
||||
|
||||
- DO check that the example matches the documentation especially after making
|
||||
review changes.
|
||||
|
||||
- DON'T create nodes just for the sake of instantiating drivers. Multi-function
|
||||
devices only need child nodes when the child nodes have their own DT
|
||||
resources. A single node can be multiple providers (e.g. clocks and resets).
|
||||
|
||||
- DON'T use 'syscon' alone without a specific compatible string. A 'syscon'
|
||||
hardware block should have a compatible string unique enough to infer the
|
||||
register layout of the entire block (at a minimum).
|
||||
|
||||
|
||||
Properties
|
||||
|
||||
- DO make 'compatible' properties specific. DON'T use wildcards in compatible
|
||||
strings. DO use fallback compatibles when devices are the same as or a subset
|
||||
of prior implementations. DO add new compatibles in case there are new
|
||||
features or bugs.
|
||||
|
||||
- DO use a vendor prefix on device specific property names. Consider if
|
||||
properties could be common among devices of the same class. Check other
|
||||
existing bindings for similar devices.
|
||||
|
||||
- DON'T redefine common properties. Just reference the definition and define
|
||||
constraints specific to the device.
|
||||
|
||||
- DO use common property unit suffixes for properties with scientific units.
|
||||
See property-units.txt.
|
||||
|
||||
- DO define properties in terms of constraints. How many entries? What are
|
||||
possible values? What is the order?
|
||||
|
||||
|
||||
Board/SoC .dts Files
|
||||
|
||||
- DO put all MMIO devices under a bus node and not at the top-level.
|
||||
|
||||
- DO use non-empty 'ranges' to limit the size of child buses/devices. 64-bit
|
||||
platforms don't need all devices to have 64-bit address and size.
|
|
@ -97,7 +97,7 @@ The DT schema project must be installed in order to validate the DT schema
|
|||
binding documents and validate DTS files using the DT schema. The DT schema
|
||||
project can be installed with pip:
|
||||
|
||||
`pip3 install git+https://github.com/robherring/yaml-bindings.git@master`
|
||||
`pip3 install git+https://github.com/devicetree-org/dt-schema.git@master`
|
||||
|
||||
dtc must also be built with YAML output support enabled. This requires that
|
||||
libyaml and its headers be installed on the host system.
|
||||
|
|
|
@ -569,6 +569,7 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
|
|||
* relative to that node.
|
||||
*/
|
||||
static u64 __of_translate_address(struct device_node *dev,
|
||||
struct device_node *(*get_parent)(const struct device_node *),
|
||||
const __be32 *in_addr, const char *rprop,
|
||||
struct device_node **host)
|
||||
{
|
||||
|
@ -585,7 +586,7 @@ static u64 __of_translate_address(struct device_node *dev,
|
|||
|
||||
*host = NULL;
|
||||
/* Get parent & match bus type */
|
||||
parent = of_get_parent(dev);
|
||||
parent = get_parent(dev);
|
||||
if (parent == NULL)
|
||||
goto bail;
|
||||
bus = of_match_bus(parent);
|
||||
|
@ -609,7 +610,7 @@ static u64 __of_translate_address(struct device_node *dev,
|
|||
/* Switch to parent bus */
|
||||
of_node_put(dev);
|
||||
dev = parent;
|
||||
parent = of_get_parent(dev);
|
||||
parent = get_parent(dev);
|
||||
|
||||
/* If root, we have finished */
|
||||
if (parent == NULL) {
|
||||
|
@ -665,7 +666,8 @@ u64 of_translate_address(struct device_node *dev, const __be32 *in_addr)
|
|||
struct device_node *host;
|
||||
u64 ret;
|
||||
|
||||
ret = __of_translate_address(dev, in_addr, "ranges", &host);
|
||||
ret = __of_translate_address(dev, of_get_parent,
|
||||
in_addr, "ranges", &host);
|
||||
if (host) {
|
||||
of_node_put(host);
|
||||
return OF_BAD_ADDR;
|
||||
|
@ -675,12 +677,31 @@ u64 of_translate_address(struct device_node *dev, const __be32 *in_addr)
|
|||
}
|
||||
EXPORT_SYMBOL(of_translate_address);
|
||||
|
||||
static struct device_node *__of_get_dma_parent(const struct device_node *np)
|
||||
{
|
||||
struct of_phandle_args args;
|
||||
int ret, index;
|
||||
|
||||
index = of_property_match_string(np, "interconnect-names", "dma-mem");
|
||||
if (index < 0)
|
||||
return of_get_parent(np);
|
||||
|
||||
ret = of_parse_phandle_with_args(np, "interconnects",
|
||||
"#interconnect-cells",
|
||||
index, &args);
|
||||
if (ret < 0)
|
||||
return of_get_parent(np);
|
||||
|
||||
return of_node_get(args.np);
|
||||
}
|
||||
|
||||
u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr)
|
||||
{
|
||||
struct device_node *host;
|
||||
u64 ret;
|
||||
|
||||
ret = __of_translate_address(dev, in_addr, "dma-ranges", &host);
|
||||
ret = __of_translate_address(dev, __of_get_dma_parent,
|
||||
in_addr, "dma-ranges", &host);
|
||||
|
||||
if (host) {
|
||||
of_node_put(host);
|
||||
|
@ -736,7 +757,8 @@ static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr,
|
|||
unsigned long port;
|
||||
struct device_node *host;
|
||||
|
||||
taddr = __of_translate_address(dev, in_addr, "ranges", &host);
|
||||
taddr = __of_translate_address(dev, of_get_parent,
|
||||
in_addr, "ranges", &host);
|
||||
if (host) {
|
||||
/* host-specific port access */
|
||||
port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size);
|
||||
|
@ -908,9 +930,15 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
|
|||
return -EINVAL;
|
||||
|
||||
while (1) {
|
||||
struct device_node *parent;
|
||||
|
||||
naddr = of_n_addr_cells(node);
|
||||
nsize = of_n_size_cells(node);
|
||||
node = of_get_next_parent(node);
|
||||
|
||||
parent = __of_get_dma_parent(node);
|
||||
of_node_put(node);
|
||||
|
||||
node = parent;
|
||||
if (!node)
|
||||
break;
|
||||
|
||||
|
|
|
@ -1350,8 +1350,9 @@ int of_phandle_iterator_next(struct of_phandle_iterator *it)
|
|||
* property data length
|
||||
*/
|
||||
if (it->cur + count > it->list_end) {
|
||||
pr_err("%pOF: arguments longer than property\n",
|
||||
it->parent);
|
||||
pr_err("%pOF: %s = %d found %d\n",
|
||||
it->parent, it->cells_name,
|
||||
count, it->cell_count);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
/**
|
||||
* of_match_device - Tell if a struct device matches an of_device_id list
|
||||
* @ids: array of of device match structures to search in
|
||||
* @matches: array of of device match structures to search in
|
||||
* @dev: the of device structure to match against
|
||||
*
|
||||
* Used by a driver to check whether an platform_device present in the
|
||||
|
|
|
@ -1091,7 +1091,7 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
|
|||
/* Retrieve command line */
|
||||
p = of_get_flat_dt_prop(node, "bootargs", &l);
|
||||
if (p != NULL && l > 0)
|
||||
strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE));
|
||||
strlcpy(data, p, min(l, COMMAND_LINE_SIZE));
|
||||
|
||||
/*
|
||||
* CONFIG_CMDLINE is meant to be a default in case nothing else
|
||||
|
|
|
@ -500,7 +500,7 @@ void __init of_irq_init(const struct of_device_id *matches)
|
|||
* pointer, interrupt-parent device_node etc.
|
||||
*/
|
||||
desc = kzalloc(sizeof(*desc), GFP_KERNEL);
|
||||
if (WARN_ON(!desc)) {
|
||||
if (!desc) {
|
||||
of_node_put(np);
|
||||
goto err;
|
||||
}
|
||||
|
|
|
@ -171,6 +171,7 @@ static int __init __reserved_mem_init_node(struct reserved_mem *rmem)
|
|||
{
|
||||
extern const struct of_device_id __reservedmem_of_table[];
|
||||
const struct of_device_id *i;
|
||||
int ret = -ENOENT;
|
||||
|
||||
for (i = __reservedmem_of_table; i < &__rmem_of_table_sentinel; i++) {
|
||||
reservedmem_of_init_fn initfn = i->data;
|
||||
|
@ -179,13 +180,14 @@ static int __init __reserved_mem_init_node(struct reserved_mem *rmem)
|
|||
if (!of_flat_dt_is_compatible(rmem->fdt_node, compat))
|
||||
continue;
|
||||
|
||||
if (initfn(rmem) == 0) {
|
||||
ret = initfn(rmem);
|
||||
if (ret == 0) {
|
||||
pr_info("initialized node %s, compatible id %s\n",
|
||||
rmem->name, compat);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return -ENOENT;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init __rmem_cmp(const void *a, const void *b)
|
||||
|
@ -245,7 +247,9 @@ void __init fdt_init_reserved_mem(void)
|
|||
int len;
|
||||
const __be32 *prop;
|
||||
int err = 0;
|
||||
int nomap;
|
||||
|
||||
nomap = of_get_flat_dt_prop(node, "no-map", NULL) != NULL;
|
||||
prop = of_get_flat_dt_prop(node, "phandle", &len);
|
||||
if (!prop)
|
||||
prop = of_get_flat_dt_prop(node, "linux,phandle", &len);
|
||||
|
@ -255,8 +259,16 @@ void __init fdt_init_reserved_mem(void)
|
|||
if (rmem->size == 0)
|
||||
err = __reserved_mem_alloc_size(node, rmem->name,
|
||||
&rmem->base, &rmem->size);
|
||||
if (err == 0)
|
||||
__reserved_mem_init_node(rmem);
|
||||
if (err == 0) {
|
||||
err = __reserved_mem_init_node(rmem);
|
||||
if (err != 0 && err != -ENOENT) {
|
||||
pr_info("node %s compatible matching fail\n",
|
||||
rmem->name);
|
||||
memblock_free(rmem->base, rmem->size);
|
||||
if (nomap)
|
||||
memblock_add(rmem->base, rmem->size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -659,7 +659,7 @@ EXPORT_SYMBOL(of_graph_get_next_endpoint);
|
|||
*
|
||||
* Return: An 'endpoint' node pointer which is identified by reg and at the same
|
||||
* is the child of a port node identified by port_reg. reg and port_reg are
|
||||
* ignored when they are -1.
|
||||
* ignored when they are -1. Use of_node_put() on the pointer when done.
|
||||
*/
|
||||
struct device_node *of_graph_get_endpoint_by_regs(
|
||||
const struct device_node *parent, int port_reg, int reg)
|
||||
|
|
|
@ -344,7 +344,7 @@ static void __init of_unittest_check_phandles(void)
|
|||
}
|
||||
|
||||
nh = kzalloc(sizeof(*nh), GFP_KERNEL);
|
||||
if (WARN_ON(!nh))
|
||||
if (!nh)
|
||||
return;
|
||||
|
||||
nh->np = np;
|
||||
|
@ -1199,12 +1199,9 @@ static int __init unittest_data_add(void)
|
|||
|
||||
/* creating copy */
|
||||
unittest_data = kmemdup(__dtb_testcases_begin, size, GFP_KERNEL);
|
||||
|
||||
if (!unittest_data) {
|
||||
pr_warn("%s: Failed to allocate memory for unittest_data; "
|
||||
"not running tests\n", __func__);
|
||||
if (!unittest_data)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
of_fdt_unflatten_tree(unittest_data, NULL, &unittest_data_node);
|
||||
if (!unittest_data_node) {
|
||||
pr_warn("%s: No tree to attach; not running tests\n", __func__);
|
||||
|
@ -1845,10 +1842,8 @@ static int unittest_i2c_bus_probe(struct platform_device *pdev)
|
|||
dev_dbg(dev, "%s for node @%pOF\n", __func__, np);
|
||||
|
||||
std = devm_kzalloc(dev, sizeof(*std), GFP_KERNEL);
|
||||
if (!std) {
|
||||
dev_err(dev, "Failed to allocate unittest i2c data\n");
|
||||
if (!std)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* link them together */
|
||||
std->pdev = pdev;
|
||||
|
|
|
@ -234,8 +234,8 @@ extern struct device_node *of_find_all_nodes(struct device_node *prev);
|
|||
static inline u64 of_read_number(const __be32 *cell, int size)
|
||||
{
|
||||
u64 r = 0;
|
||||
while (size--)
|
||||
r = (r << 32) | be32_to_cpu(*(cell++));
|
||||
for (; size--; cell++)
|
||||
r = (r << 32) | be32_to_cpu(*cell);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -1449,7 +1449,8 @@ int of_overlay_notifier_unregister(struct notifier_block *nb);
|
|||
|
||||
#else
|
||||
|
||||
static inline int of_overlay_fdt_apply(void *overlay_fdt, int *ovcs_id)
|
||||
static inline int of_overlay_fdt_apply(void *overlay_fdt, u32 overlay_fdt_size,
|
||||
int *ovcs_id)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue