Devicetree updates for v5.3:
- DT binding schema examples are now validated against the schemas. Various examples are fixed due to that. - Sync dtc with upstream version v1.5.0-30-g702c1b6c0e73 - Initial schemas for networking bindings. This includes ethernet, phy and mdio common bindings with several Allwinner and stmmac converted to the schema. - Conversion of more Arm top-level SoC/board bindings to DT schema - Conversion of PSCI binding to DT schema - Rework Arm CPU schema to coexist with other CPU schemas - Add a bunch of missing vendor prefixes and new ones for SoChip, Sipeed, Kontron, B&R Industrial Automation GmbH, and Espressif - Add Mediatek UART RX wakeup support to binding - Add reset to ST UART binding - Remove some Linuxisms from the endianness common-properties.txt binding - Make the flattened DT read-only after init - Ignore disabled reserved memory nodes - Clean-up some dead code in FDT functions -----BEGIN PGP SIGNATURE----- iQJEBAABCgAuFiEEktVUI4SxYhzZyEuo+vtdtY28YcMFAl0mAxQQHHJvYmhAa2Vy bmVsLm9yZwAKCRD6+121jbxhw68aEACDEx7SBgpWhv0EJkIk/94bK6MxTMZQGIw2 OZZQmOJJ0VncfQ3E1emc9zN5xsW1uQlicwh4AwAYbL+Bj3aaG+ANIYyolOLCKybB AJD28XAMeZjahf4XtVsieMgdu4OmaLKqUS3BTCcuxY0/gGhTbsLjhUaJLS6GFXK+ rc/q+BFLBynG5QMmyQXLSTfwqYyHKB9BUY3Jf6VW5o5IvnJQa40dqkrcdn17MJM/ Ui1bnjrl9Jw78m/JJSkfp/ix6PMEYx1ynQq5cUX0KgroW4z5wcTzDepnttYCG8eh zxlZSCnZ/qqgdtff0zofGdNSsMMpnuNJIIo+R3wVqyGe1uwad5NzQglKH0BAYcqd NayZ3r9cT6i1iwcrbIU4+HF3leBhS2zuKc3HwdXgBNn47xHMLTPvQnedE4pkAA1A ZjM23G7JtX3APIjz1cYe7/QCtBEibkr4u26DAibGklXrwfv96XD4v0k4AumD24hK oEyIRN9/H2hBWEVfrAejJjh4WBdj1dBAbjTp+IH7xKNa4+FHinBv/gPFZE2lzi7r qB//+fpZi9usi6v4iAqnP1wAKhD7zE8uVfhcWsmRSFsCpaQlp9sIuQ8ZU7+/t3VS 2IZB1V7ZPCIAeBigY8zi6D8mOMmDbpmzs30tAB9Kh101VlEF0bFmOSrWoa0YdmFq M7AfUwnhmg== =Qpuw -----END PGP SIGNATURE----- Merge tag 'devicetree-for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux Pull Devicetree updates from Rob Herring: - DT binding schema examples are now validated against the schemas. Various examples are fixed due to that. - Sync dtc with upstream version v1.5.0-30-g702c1b6c0e73 - Initial schemas for networking bindings. This includes ethernet, phy and mdio common bindings with several Allwinner and stmmac converted to the schema. - Conversion of more Arm top-level SoC/board bindings to DT schema - Conversion of PSCI binding to DT schema - Rework Arm CPU schema to coexist with other CPU schemas - Add a bunch of missing vendor prefixes and new ones for SoChip, Sipeed, Kontron, B&R Industrial Automation GmbH, and Espressif - Add Mediatek UART RX wakeup support to binding - Add reset to ST UART binding - Remove some Linuxisms from the endianness common-properties.txt binding - Make the flattened DT read-only after init - Ignore disabled reserved memory nodes - Clean-up some dead code in FDT functions * tag 'devicetree-for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (56 commits) dt-bindings: vendor-prefixes: add Sipeed dt-bindings: vendor-prefixes: add SoChip dt-bindings: 83xx-512x-pci: Drop cell-index property dt-bindings: serial: add documentation for Rx in-band wakeup support dt-bindings: arm: Convert RDA Micro board/soc bindings to json-schema of: unittest: simplify getting the adapter of a client of/fdt: pass early_init_dt_reserve_memory_arch() with bool type nomap of/platform: Drop superfluous cast in of_device_make_bus_id() dt-bindings: usb: ehci: Fix example warnings dt-bindings: net: Use phy-mode instead of phy-connection-type dt-bindings: simple-framebuffer: Add requirement for pipelines dt-bindings: display: Fix simple-framebuffer example dt-bindings: net: mdio: Add child nodes dt-bindings: net: mdio: Add address and size cells dt-bindings: net: mdio: Add a nodename pattern dt-bindings: mtd: sunxi-nand: Drop 'maxItems' from child 'reg' property dt-bindings: arm: Limit cpus schema to only check Arm 'cpu' nodes dt-bindings: backlight: lm3630a: correct schema validation dt-bindings: net: dwmac: Deprecate the PHY reset properties dt-bindings: net: sun8i-emac: Convert the binding to a schemas ...
This commit is contained in:
commit
d06e415643
|
@ -284,7 +284,7 @@ following manner:
|
||||||
processors") to bring CPUs into the kernel.
|
processors") to bring CPUs into the kernel.
|
||||||
|
|
||||||
The device tree should contain a 'psci' node, as described in
|
The device tree should contain a 'psci' node, as described in
|
||||||
Documentation/devicetree/bindings/arm/psci.txt.
|
Documentation/devicetree/bindings/arm/psci.yaml.
|
||||||
|
|
||||||
- Secondary CPU general-purpose register settings
|
- Secondary CPU general-purpose register settings
|
||||||
x0 = 0 (reserved for future use)
|
x0 = 0 (reserved for future use)
|
||||||
|
|
|
@ -25,7 +25,7 @@ DT_DOCS = $(shell \
|
||||||
DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
|
DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
|
||||||
|
|
||||||
extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
|
extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
|
||||||
extra-y += $(patsubst $(src)/%.yaml,%.example.dtb, $(DT_SCHEMA_FILES))
|
extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
|
||||||
|
|
||||||
$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
|
$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
|
||||||
$(call if_changed,mk_schema)
|
$(call if_changed,mk_schema)
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
Annapurna Labs Alpine Platform Device Tree Bindings
|
|
||||||
---------------------------------------------------------------
|
|
||||||
|
|
||||||
Boards in the Alpine family shall have the following properties:
|
|
||||||
|
|
||||||
* Required root node properties:
|
|
||||||
compatible: must contain "al,alpine"
|
|
||||||
|
|
||||||
* Example:
|
|
||||||
|
|
||||||
/ {
|
|
||||||
model = "Annapurna Labs Alpine Dev Board";
|
|
||||||
compatible = "al,alpine";
|
|
||||||
|
|
||||||
...
|
|
||||||
}
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/al,alpine.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Annapurna Labs Alpine Platform Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Tsahee Zidenberg <tsahee@annapurnalabs.com>
|
||||||
|
- Antoine Tenart <antoine.tenart@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
items:
|
||||||
|
- const: al,alpine
|
||||||
|
model:
|
||||||
|
items:
|
||||||
|
- const: "Annapurna Labs Alpine Dev Board"
|
||||||
|
|
||||||
|
...
|
|
@ -197,7 +197,7 @@ Required nodes:
|
||||||
The description for the board must include:
|
The description for the board must include:
|
||||||
- a "psci" node describing the boot method used for the secondary CPUs.
|
- a "psci" node describing the boot method used for the secondary CPUs.
|
||||||
A detailed description of the bindings used for "psci" nodes is present
|
A detailed description of the bindings used for "psci" nodes is present
|
||||||
in the psci.txt file.
|
in the psci.yaml file.
|
||||||
- a "cpus" node describing the available cores and their associated
|
- a "cpus" node describing the available cores and their associated
|
||||||
"enable-method"s. For more details see cpus.txt file.
|
"enable-method"s. For more details see cpus.txt file.
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
Axxia AXM55xx device tree bindings
|
|
||||||
|
|
||||||
Boards using the AXM55xx SoC need to have the following properties:
|
|
||||||
|
|
||||||
Required root node property:
|
|
||||||
|
|
||||||
- compatible = "lsi,axm5516"
|
|
||||||
|
|
||||||
Boards:
|
|
||||||
|
|
||||||
LSI AXM5516 Validation board (Amarillo)
|
|
||||||
compatible = "lsi,axm5516-amarillo", "lsi,axm5516"
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/axxia.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Axxia AXM55xx device tree bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Anders Berg <anders.berg@lsi.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
description: LSI AXM5516 Validation board (Amarillo)
|
||||||
|
items:
|
||||||
|
- const: lsi,axm5516-amarillo
|
||||||
|
- const: lsi,axm5516
|
||||||
|
|
||||||
|
...
|
|
@ -39,281 +39,242 @@ description: |+
|
||||||
described below.
|
described below.
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
$nodename:
|
reg:
|
||||||
const: cpus
|
maxItems: 1
|
||||||
description: Container of cpu nodes
|
|
||||||
|
|
||||||
'#address-cells':
|
|
||||||
enum: [1, 2]
|
|
||||||
description: |
|
description: |
|
||||||
Definition depends on ARM architecture version and configuration:
|
Usage and definition depend on ARM architecture version and
|
||||||
|
configuration:
|
||||||
|
|
||||||
On uniprocessor ARM architectures previous to v7
|
On uniprocessor ARM architectures previous to v7
|
||||||
value must be 1, to enable a simple enumeration
|
this property is required and must be set to 0.
|
||||||
scheme for processors that do not have a HW CPU
|
|
||||||
identification register.
|
|
||||||
On 32-bit ARM 11 MPcore, ARM v7 or later systems
|
|
||||||
value must be 1, that corresponds to CPUID/MPIDR
|
|
||||||
registers sizes.
|
|
||||||
On ARM v8 64-bit systems value should be set to 2,
|
|
||||||
that corresponds to the MPIDR_EL1 register size.
|
|
||||||
If MPIDR_EL1[63:32] value is equal to 0 on all CPUs
|
|
||||||
in the system, #address-cells can be set to 1, since
|
|
||||||
MPIDR_EL1[63:32] bits are not used for CPUs
|
|
||||||
identification.
|
|
||||||
|
|
||||||
'#size-cells':
|
On ARM 11 MPcore based systems this property is
|
||||||
const: 0
|
required and matches the CPUID[11:0] register bits.
|
||||||
|
|
||||||
patternProperties:
|
Bits [11:0] in the reg cell must be set to
|
||||||
'^cpu@[0-9a-f]+$':
|
bits [11:0] in CPU ID register.
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
device_type:
|
|
||||||
const: cpu
|
|
||||||
|
|
||||||
reg:
|
All other bits in the reg cell must be set to 0.
|
||||||
maxItems: 1
|
|
||||||
description: |
|
|
||||||
Usage and definition depend on ARM architecture version and
|
|
||||||
configuration:
|
|
||||||
|
|
||||||
On uniprocessor ARM architectures previous to v7
|
On 32-bit ARM v7 or later systems this property is
|
||||||
this property is required and must be set to 0.
|
required and matches the CPU MPIDR[23:0] register
|
||||||
|
bits.
|
||||||
|
|
||||||
On ARM 11 MPcore based systems this property is
|
Bits [23:0] in the reg cell must be set to
|
||||||
required and matches the CPUID[11:0] register bits.
|
bits [23:0] in MPIDR.
|
||||||
|
|
||||||
Bits [11:0] in the reg cell must be set to
|
All other bits in the reg cell must be set to 0.
|
||||||
bits [11:0] in CPU ID register.
|
|
||||||
|
|
||||||
All other bits in the reg cell must be set to 0.
|
On ARM v8 64-bit systems this property is required
|
||||||
|
and matches the MPIDR_EL1 register affinity bits.
|
||||||
|
|
||||||
On 32-bit ARM v7 or later systems this property is
|
* If cpus node's #address-cells property is set to 2
|
||||||
required and matches the CPU MPIDR[23:0] register
|
|
||||||
bits.
|
|
||||||
|
|
||||||
Bits [23:0] in the reg cell must be set to
|
The first reg cell bits [7:0] must be set to
|
||||||
bits [23:0] in MPIDR.
|
bits [39:32] of MPIDR_EL1.
|
||||||
|
|
||||||
All other bits in the reg cell must be set to 0.
|
The second reg cell bits [23:0] must be set to
|
||||||
|
bits [23:0] of MPIDR_EL1.
|
||||||
|
|
||||||
On ARM v8 64-bit systems this property is required
|
* If cpus node's #address-cells property is set to 1
|
||||||
and matches the MPIDR_EL1 register affinity bits.
|
|
||||||
|
|
||||||
* If cpus node's #address-cells property is set to 2
|
The reg cell bits [23:0] must be set to bits [23:0]
|
||||||
|
of MPIDR_EL1.
|
||||||
|
|
||||||
The first reg cell bits [7:0] must be set to
|
All other bits in the reg cells must be set to 0.
|
||||||
bits [39:32] of MPIDR_EL1.
|
|
||||||
|
|
||||||
The second reg cell bits [23:0] must be set to
|
compatible:
|
||||||
bits [23:0] of MPIDR_EL1.
|
enum:
|
||||||
|
- arm,arm710t
|
||||||
|
- arm,arm720t
|
||||||
|
- arm,arm740t
|
||||||
|
- arm,arm7ej-s
|
||||||
|
- arm,arm7tdmi
|
||||||
|
- arm,arm7tdmi-s
|
||||||
|
- arm,arm9es
|
||||||
|
- arm,arm9ej-s
|
||||||
|
- arm,arm920t
|
||||||
|
- arm,arm922t
|
||||||
|
- arm,arm925
|
||||||
|
- arm,arm926e-s
|
||||||
|
- arm,arm926ej-s
|
||||||
|
- arm,arm940t
|
||||||
|
- arm,arm946e-s
|
||||||
|
- arm,arm966e-s
|
||||||
|
- arm,arm968e-s
|
||||||
|
- arm,arm9tdmi
|
||||||
|
- arm,arm1020e
|
||||||
|
- arm,arm1020t
|
||||||
|
- arm,arm1022e
|
||||||
|
- arm,arm1026ej-s
|
||||||
|
- arm,arm1136j-s
|
||||||
|
- arm,arm1136jf-s
|
||||||
|
- arm,arm1156t2-s
|
||||||
|
- arm,arm1156t2f-s
|
||||||
|
- arm,arm1176jzf
|
||||||
|
- arm,arm1176jz-s
|
||||||
|
- arm,arm1176jzf-s
|
||||||
|
- arm,arm11mpcore
|
||||||
|
- arm,armv8 # Only for s/w models
|
||||||
|
- arm,cortex-a5
|
||||||
|
- arm,cortex-a7
|
||||||
|
- arm,cortex-a8
|
||||||
|
- arm,cortex-a9
|
||||||
|
- arm,cortex-a12
|
||||||
|
- arm,cortex-a15
|
||||||
|
- arm,cortex-a17
|
||||||
|
- arm,cortex-a53
|
||||||
|
- arm,cortex-a57
|
||||||
|
- arm,cortex-a72
|
||||||
|
- arm,cortex-a73
|
||||||
|
- arm,cortex-m0
|
||||||
|
- arm,cortex-m0+
|
||||||
|
- arm,cortex-m1
|
||||||
|
- arm,cortex-m3
|
||||||
|
- arm,cortex-m4
|
||||||
|
- arm,cortex-r4
|
||||||
|
- arm,cortex-r5
|
||||||
|
- arm,cortex-r7
|
||||||
|
- brcm,brahma-b15
|
||||||
|
- brcm,brahma-b53
|
||||||
|
- brcm,vulcan
|
||||||
|
- cavium,thunder
|
||||||
|
- cavium,thunder2
|
||||||
|
- faraday,fa526
|
||||||
|
- intel,sa110
|
||||||
|
- intel,sa1100
|
||||||
|
- marvell,feroceon
|
||||||
|
- marvell,mohawk
|
||||||
|
- marvell,pj4a
|
||||||
|
- marvell,pj4b
|
||||||
|
- marvell,sheeva-v5
|
||||||
|
- marvell,sheeva-v7
|
||||||
|
- nvidia,tegra132-denver
|
||||||
|
- nvidia,tegra186-denver
|
||||||
|
- nvidia,tegra194-carmel
|
||||||
|
- qcom,krait
|
||||||
|
- qcom,kryo
|
||||||
|
- qcom,kryo385
|
||||||
|
- qcom,scorpion
|
||||||
|
|
||||||
* If cpus node's #address-cells property is set to 1
|
enable-method:
|
||||||
|
allOf:
|
||||||
The reg cell bits [23:0] must be set to bits [23:0]
|
- $ref: '/schemas/types.yaml#/definitions/string'
|
||||||
of MPIDR_EL1.
|
- oneOf:
|
||||||
|
# On ARM v8 64-bit this property is required
|
||||||
All other bits in the reg cells must be set to 0.
|
|
||||||
|
|
||||||
compatible:
|
|
||||||
items:
|
|
||||||
- enum:
|
- enum:
|
||||||
- arm,arm710t
|
- psci
|
||||||
- arm,arm720t
|
- spin-table
|
||||||
- arm,arm740t
|
# On ARM 32-bit systems this property is optional
|
||||||
- arm,arm7ej-s
|
- enum:
|
||||||
- arm,arm7tdmi
|
- actions,s500-smp
|
||||||
- arm,arm7tdmi-s
|
- allwinner,sun6i-a31
|
||||||
- arm,arm9es
|
- allwinner,sun8i-a23
|
||||||
- arm,arm9ej-s
|
- allwinner,sun9i-a80-smp
|
||||||
- arm,arm920t
|
- allwinner,sun8i-a83t-smp
|
||||||
- arm,arm922t
|
- amlogic,meson8-smp
|
||||||
- arm,arm925
|
- amlogic,meson8b-smp
|
||||||
- arm,arm926e-s
|
- arm,realview-smp
|
||||||
- arm,arm926ej-s
|
- brcm,bcm11351-cpu-method
|
||||||
- arm,arm940t
|
- brcm,bcm23550
|
||||||
- arm,arm946e-s
|
- brcm,bcm2836-smp
|
||||||
- arm,arm966e-s
|
- brcm,bcm63138
|
||||||
- arm,arm968e-s
|
- brcm,bcm-nsp-smp
|
||||||
- arm,arm9tdmi
|
|
||||||
- arm,arm1020e
|
|
||||||
- arm,arm1020t
|
|
||||||
- arm,arm1022e
|
|
||||||
- arm,arm1026ej-s
|
|
||||||
- arm,arm1136j-s
|
|
||||||
- arm,arm1136jf-s
|
|
||||||
- arm,arm1156t2-s
|
|
||||||
- arm,arm1156t2f-s
|
|
||||||
- arm,arm1176jzf
|
|
||||||
- arm,arm1176jz-s
|
|
||||||
- arm,arm1176jzf-s
|
|
||||||
- arm,arm11mpcore
|
|
||||||
- arm,armv8 # Only for s/w models
|
|
||||||
- arm,cortex-a5
|
|
||||||
- arm,cortex-a7
|
|
||||||
- arm,cortex-a8
|
|
||||||
- arm,cortex-a9
|
|
||||||
- arm,cortex-a12
|
|
||||||
- arm,cortex-a15
|
|
||||||
- arm,cortex-a17
|
|
||||||
- arm,cortex-a53
|
|
||||||
- arm,cortex-a57
|
|
||||||
- arm,cortex-a72
|
|
||||||
- arm,cortex-a73
|
|
||||||
- arm,cortex-m0
|
|
||||||
- arm,cortex-m0+
|
|
||||||
- arm,cortex-m1
|
|
||||||
- arm,cortex-m3
|
|
||||||
- arm,cortex-m4
|
|
||||||
- arm,cortex-r4
|
|
||||||
- arm,cortex-r5
|
|
||||||
- arm,cortex-r7
|
|
||||||
- brcm,brahma-b15
|
- brcm,brahma-b15
|
||||||
- brcm,brahma-b53
|
- marvell,armada-375-smp
|
||||||
- brcm,vulcan
|
- marvell,armada-380-smp
|
||||||
- cavium,thunder
|
- marvell,armada-390-smp
|
||||||
- cavium,thunder2
|
- marvell,armada-xp-smp
|
||||||
- faraday,fa526
|
- marvell,98dx3236-smp
|
||||||
- intel,sa110
|
- mediatek,mt6589-smp
|
||||||
- intel,sa1100
|
- mediatek,mt81xx-tz-smp
|
||||||
- marvell,feroceon
|
- qcom,gcc-msm8660
|
||||||
- marvell,mohawk
|
- qcom,kpss-acc-v1
|
||||||
- marvell,pj4a
|
- qcom,kpss-acc-v2
|
||||||
- marvell,pj4b
|
- renesas,apmu
|
||||||
- marvell,sheeva-v5
|
- renesas,r9a06g032-smp
|
||||||
- marvell,sheeva-v7
|
- rockchip,rk3036-smp
|
||||||
- nvidia,tegra132-denver
|
- rockchip,rk3066-smp
|
||||||
- nvidia,tegra186-denver
|
- socionext,milbeaut-m10v-smp
|
||||||
- nvidia,tegra194-carmel
|
- ste,dbx500-smp
|
||||||
- qcom,krait
|
|
||||||
- qcom,kryo
|
|
||||||
- qcom,kryo385
|
|
||||||
- qcom,scorpion
|
|
||||||
|
|
||||||
enable-method:
|
cpu-release-addr:
|
||||||
allOf:
|
$ref: '/schemas/types.yaml#/definitions/uint64'
|
||||||
- $ref: '/schemas/types.yaml#/definitions/string'
|
|
||||||
- oneOf:
|
|
||||||
# On ARM v8 64-bit this property is required
|
|
||||||
- enum:
|
|
||||||
- psci
|
|
||||||
- spin-table
|
|
||||||
# On ARM 32-bit systems this property is optional
|
|
||||||
- enum:
|
|
||||||
- actions,s500-smp
|
|
||||||
- allwinner,sun6i-a31
|
|
||||||
- allwinner,sun8i-a23
|
|
||||||
- allwinner,sun9i-a80-smp
|
|
||||||
- allwinner,sun8i-a83t-smp
|
|
||||||
- amlogic,meson8-smp
|
|
||||||
- amlogic,meson8b-smp
|
|
||||||
- arm,realview-smp
|
|
||||||
- brcm,bcm11351-cpu-method
|
|
||||||
- brcm,bcm23550
|
|
||||||
- brcm,bcm2836-smp
|
|
||||||
- brcm,bcm63138
|
|
||||||
- brcm,bcm-nsp-smp
|
|
||||||
- brcm,brahma-b15
|
|
||||||
- marvell,armada-375-smp
|
|
||||||
- marvell,armada-380-smp
|
|
||||||
- marvell,armada-390-smp
|
|
||||||
- marvell,armada-xp-smp
|
|
||||||
- marvell,98dx3236-smp
|
|
||||||
- mediatek,mt6589-smp
|
|
||||||
- mediatek,mt81xx-tz-smp
|
|
||||||
- qcom,gcc-msm8660
|
|
||||||
- qcom,kpss-acc-v1
|
|
||||||
- qcom,kpss-acc-v2
|
|
||||||
- renesas,apmu
|
|
||||||
- renesas,r9a06g032-smp
|
|
||||||
- rockchip,rk3036-smp
|
|
||||||
- rockchip,rk3066-smp
|
|
||||||
- socionext,milbeaut-m10v-smp
|
|
||||||
- ste,dbx500-smp
|
|
||||||
|
|
||||||
cpu-release-addr:
|
description:
|
||||||
$ref: '/schemas/types.yaml#/definitions/uint64'
|
Required for systems that have an "enable-method"
|
||||||
|
property value of "spin-table".
|
||||||
|
On ARM v8 64-bit systems must be a two cell
|
||||||
|
property identifying a 64-bit zero-initialised
|
||||||
|
memory location.
|
||||||
|
|
||||||
description:
|
cpu-idle-states:
|
||||||
Required for systems that have an "enable-method"
|
$ref: '/schemas/types.yaml#/definitions/phandle-array'
|
||||||
property value of "spin-table".
|
description: |
|
||||||
On ARM v8 64-bit systems must be a two cell
|
List of phandles to idle state nodes supported
|
||||||
property identifying a 64-bit zero-initialised
|
by this cpu (see ./idle-states.txt).
|
||||||
memory location.
|
|
||||||
|
|
||||||
cpu-idle-states:
|
capacity-dmips-mhz:
|
||||||
$ref: '/schemas/types.yaml#/definitions/phandle-array'
|
$ref: '/schemas/types.yaml#/definitions/uint32'
|
||||||
description: |
|
description:
|
||||||
List of phandles to idle state nodes supported
|
u32 value representing CPU capacity (see ./cpu-capacity.txt) in
|
||||||
by this cpu (see ./idle-states.txt).
|
DMIPS/MHz, relative to highest capacity-dmips-mhz
|
||||||
|
in the system.
|
||||||
|
|
||||||
capacity-dmips-mhz:
|
dynamic-power-coefficient:
|
||||||
$ref: '/schemas/types.yaml#/definitions/uint32'
|
$ref: '/schemas/types.yaml#/definitions/uint32'
|
||||||
description:
|
description:
|
||||||
u32 value representing CPU capacity (see ./cpu-capacity.txt) in
|
A u32 value that represents the running time dynamic
|
||||||
DMIPS/MHz, relative to highest capacity-dmips-mhz
|
power coefficient in units of uW/MHz/V^2. The
|
||||||
in the system.
|
coefficient can either be calculated from power
|
||||||
|
measurements or derived by analysis.
|
||||||
|
|
||||||
dynamic-power-coefficient:
|
The dynamic power consumption of the CPU is
|
||||||
$ref: '/schemas/types.yaml#/definitions/uint32'
|
proportional to the square of the Voltage (V) and
|
||||||
description:
|
the clock frequency (f). The coefficient is used to
|
||||||
A u32 value that represents the running time dynamic
|
calculate the dynamic power as below -
|
||||||
power coefficient in units of uW/MHz/V^2. The
|
|
||||||
coefficient can either be calculated from power
|
|
||||||
measurements or derived by analysis.
|
|
||||||
|
|
||||||
The dynamic power consumption of the CPU is
|
Pdyn = dynamic-power-coefficient * V^2 * f
|
||||||
proportional to the square of the Voltage (V) and
|
|
||||||
the clock frequency (f). The coefficient is used to
|
|
||||||
calculate the dynamic power as below -
|
|
||||||
|
|
||||||
Pdyn = dynamic-power-coefficient * V^2 * f
|
where voltage is in V, frequency is in MHz.
|
||||||
|
|
||||||
where voltage is in V, frequency is in MHz.
|
qcom,saw:
|
||||||
|
$ref: '/schemas/types.yaml#/definitions/phandle'
|
||||||
|
description: |
|
||||||
|
Specifies the SAW* node associated with this CPU.
|
||||||
|
|
||||||
qcom,saw:
|
Required for systems that have an "enable-method" property
|
||||||
$ref: '/schemas/types.yaml#/definitions/phandle'
|
value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
|
||||||
description: |
|
|
||||||
Specifies the SAW* node associated with this CPU.
|
|
||||||
|
|
||||||
Required for systems that have an "enable-method" property
|
* arm/msm/qcom,saw2.txt
|
||||||
value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
|
|
||||||
|
|
||||||
* arm/msm/qcom,saw2.txt
|
qcom,acc:
|
||||||
|
$ref: '/schemas/types.yaml#/definitions/phandle'
|
||||||
|
description: |
|
||||||
|
Specifies the ACC* node associated with this CPU.
|
||||||
|
|
||||||
qcom,acc:
|
Required for systems that have an "enable-method" property
|
||||||
$ref: '/schemas/types.yaml#/definitions/phandle'
|
value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
|
||||||
description: |
|
|
||||||
Specifies the ACC* node associated with this CPU.
|
|
||||||
|
|
||||||
Required for systems that have an "enable-method" property
|
* arm/msm/qcom,kpss-acc.txt
|
||||||
value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
|
|
||||||
|
|
||||||
* arm/msm/qcom,kpss-acc.txt
|
rockchip,pmu:
|
||||||
|
$ref: '/schemas/types.yaml#/definitions/phandle'
|
||||||
|
description: |
|
||||||
|
Specifies the syscon node controlling the cpu core power domains.
|
||||||
|
|
||||||
rockchip,pmu:
|
Optional for systems that have an "enable-method"
|
||||||
$ref: '/schemas/types.yaml#/definitions/phandle'
|
property value of "rockchip,rk3066-smp"
|
||||||
description: |
|
While optional, it is the preferred way to get access to
|
||||||
Specifies the syscon node controlling the cpu core power domains.
|
the cpu-core power-domains.
|
||||||
|
|
||||||
Optional for systems that have an "enable-method"
|
|
||||||
property value of "rockchip,rk3066-smp"
|
|
||||||
While optional, it is the preferred way to get access to
|
|
||||||
the cpu-core power-domains.
|
|
||||||
|
|
||||||
required:
|
|
||||||
- device_type
|
|
||||||
- reg
|
|
||||||
- compatible
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
cpu-release-addr: [enable-method]
|
|
||||||
rockchip,pmu: [enable-method]
|
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- '#address-cells'
|
- device_type
|
||||||
- '#size-cells'
|
- reg
|
||||||
|
- compatible
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
rockchip,pmu: [enable-method]
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
- |
|
- |
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
Conexant Digicolor Platforms Device Tree Bindings
|
|
||||||
|
|
||||||
Each device tree must specify which Conexant Digicolor SoC it uses.
|
|
||||||
Must be the following compatible string:
|
|
||||||
|
|
||||||
cnxt,cx92755
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/digicolor.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Conexant Digicolor Platforms Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Baruch Siach <baruch@tkos.co.il>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: cnxt,cx92755
|
||||||
|
|
||||||
|
...
|
|
@ -241,9 +241,13 @@ processor idle states, defined as device tree nodes, are listed.
|
||||||
- "psci"
|
- "psci"
|
||||||
# On ARM 32-bit systems this property is optional
|
# On ARM 32-bit systems this property is optional
|
||||||
|
|
||||||
The nodes describing the idle states (state) can only be defined within the
|
This assumes that the "enable-method" property is set to "psci" in the cpu
|
||||||
idle-states node, any other configuration is considered invalid and therefore
|
node[6] that is responsible for setting up CPU idle management in the OS
|
||||||
must be ignored.
|
implementation.
|
||||||
|
|
||||||
|
The nodes describing the idle states (state) can only be defined
|
||||||
|
within the idle-states node, any other configuration is considered invalid
|
||||||
|
and therefore must be ignored.
|
||||||
|
|
||||||
===========================================
|
===========================================
|
||||||
4 - state node
|
4 - state node
|
||||||
|
@ -687,7 +691,7 @@ cpus {
|
||||||
Documentation/devicetree/bindings/arm/cpus.yaml
|
Documentation/devicetree/bindings/arm/cpus.yaml
|
||||||
|
|
||||||
[2] ARM Linux Kernel documentation - PSCI bindings
|
[2] ARM Linux Kernel documentation - PSCI bindings
|
||||||
Documentation/devicetree/bindings/arm/psci.txt
|
Documentation/devicetree/bindings/arm/psci.yaml
|
||||||
|
|
||||||
[3] ARM Server Base System Architecture (SBSA)
|
[3] ARM Server Base System Architecture (SBSA)
|
||||||
http://infocenter.arm.com/help/index.jsp
|
http://infocenter.arm.com/help/index.jsp
|
||||||
|
@ -697,3 +701,6 @@ cpus {
|
||||||
|
|
||||||
[5] Devicetree Specification
|
[5] Devicetree Specification
|
||||||
https://www.devicetree.org/specifications/
|
https://www.devicetree.org/specifications/
|
||||||
|
|
||||||
|
[6] ARM Linux Kernel documentation - Booting AArch64 Linux
|
||||||
|
Documentation/arm64/booting.txt
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
MOXA ART device tree bindings
|
|
||||||
|
|
||||||
Boards with the MOXA ART SoC shall have the following properties:
|
|
||||||
|
|
||||||
Required root node property:
|
|
||||||
|
|
||||||
compatible = "moxa,moxart";
|
|
||||||
|
|
||||||
Boards:
|
|
||||||
|
|
||||||
- UC-7112-LX: embedded computer
|
|
||||||
compatible = "moxa,moxart-uc-7112-lx", "moxa,moxart"
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/moxart.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: MOXA ART device tree bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Jonas Jensen <jonas.jensen@gmail.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
description: UC-7112-LX embedded computer
|
||||||
|
items:
|
||||||
|
- const: moxa,moxart-uc-7112-lx
|
||||||
|
- const: moxa,moxart
|
||||||
|
|
||||||
|
...
|
|
@ -1,8 +0,0 @@
|
||||||
NXP LPC32xx Platforms Device Tree Bindings
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
Boards with the NXP LPC32xx SoC shall have the following properties:
|
|
||||||
|
|
||||||
Required root node property:
|
|
||||||
|
|
||||||
compatible: must be "nxp,lpc3220", "nxp,lpc3230", "nxp,lpc3240" or "nxp,lpc3250"
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/nxp/lpc32xx.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: NXP LPC32xx Platforms Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Roland Stigge <stigge@antcom.de>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
oneOf:
|
||||||
|
- enum:
|
||||||
|
- nxp,lpc3220
|
||||||
|
- nxp,lpc3230
|
||||||
|
- nxp,lpc3240
|
||||||
|
- items:
|
||||||
|
- enum:
|
||||||
|
- ea,ea3250
|
||||||
|
- phytec,phy3250
|
||||||
|
- const: nxp,lpc3250
|
||||||
|
|
||||||
|
...
|
|
@ -1,111 +0,0 @@
|
||||||
* Power State Coordination Interface (PSCI)
|
|
||||||
|
|
||||||
Firmware implementing the PSCI functions described in ARM document number
|
|
||||||
ARM DEN 0022A ("Power State Coordination Interface System Software on ARM
|
|
||||||
processors") can be used by Linux to initiate various CPU-centric power
|
|
||||||
operations.
|
|
||||||
|
|
||||||
Issue A of the specification describes functions for CPU suspend, hotplug
|
|
||||||
and migration of secure software.
|
|
||||||
|
|
||||||
Functions are invoked by trapping to the privilege level of the PSCI
|
|
||||||
firmware (specified as part of the binding below) and passing arguments
|
|
||||||
in a manner similar to that specified by AAPCS:
|
|
||||||
|
|
||||||
r0 => 32-bit Function ID / return value
|
|
||||||
{r1 - r3} => Parameters
|
|
||||||
|
|
||||||
Note that the immediate field of the trapping instruction must be set
|
|
||||||
to #0.
|
|
||||||
|
|
||||||
|
|
||||||
Main node required properties:
|
|
||||||
|
|
||||||
- compatible : should contain at least one of:
|
|
||||||
|
|
||||||
* "arm,psci" : For implementations complying to PSCI versions prior
|
|
||||||
to 0.2.
|
|
||||||
For these cases function IDs must be provided.
|
|
||||||
|
|
||||||
* "arm,psci-0.2" : For implementations complying to PSCI 0.2.
|
|
||||||
Function IDs are not required and should be ignored by
|
|
||||||
an OS with PSCI 0.2 support, but are permitted to be
|
|
||||||
present for compatibility with existing software when
|
|
||||||
"arm,psci" is later in the compatible list.
|
|
||||||
|
|
||||||
* "arm,psci-1.0" : For implementations complying to PSCI 1.0.
|
|
||||||
PSCI 1.0 is backward compatible with PSCI 0.2 with
|
|
||||||
minor specification updates, as defined in the PSCI
|
|
||||||
specification[2].
|
|
||||||
|
|
||||||
- method : The method of calling the PSCI firmware. Permitted
|
|
||||||
values are:
|
|
||||||
|
|
||||||
"smc" : SMC #0, with the register assignments specified
|
|
||||||
in this binding.
|
|
||||||
|
|
||||||
"hvc" : HVC #0, with the register assignments specified
|
|
||||||
in this binding.
|
|
||||||
|
|
||||||
Main node optional properties:
|
|
||||||
|
|
||||||
- cpu_suspend : Function ID for CPU_SUSPEND operation
|
|
||||||
|
|
||||||
- cpu_off : Function ID for CPU_OFF operation
|
|
||||||
|
|
||||||
- cpu_on : Function ID for CPU_ON operation
|
|
||||||
|
|
||||||
- migrate : Function ID for MIGRATE operation
|
|
||||||
|
|
||||||
Device tree nodes that require usage of PSCI CPU_SUSPEND function (ie idle
|
|
||||||
state nodes, as per bindings in [1]) must specify the following properties:
|
|
||||||
|
|
||||||
- arm,psci-suspend-param
|
|
||||||
Usage: Required for state nodes[1] if the corresponding
|
|
||||||
idle-states node entry-method property is set
|
|
||||||
to "psci".
|
|
||||||
Value type: <u32>
|
|
||||||
Definition: power_state parameter to pass to the PSCI
|
|
||||||
suspend call.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
Case 1: PSCI v0.1 only.
|
|
||||||
|
|
||||||
psci {
|
|
||||||
compatible = "arm,psci";
|
|
||||||
method = "smc";
|
|
||||||
cpu_suspend = <0x95c10000>;
|
|
||||||
cpu_off = <0x95c10001>;
|
|
||||||
cpu_on = <0x95c10002>;
|
|
||||||
migrate = <0x95c10003>;
|
|
||||||
};
|
|
||||||
|
|
||||||
Case 2: PSCI v0.2 only
|
|
||||||
|
|
||||||
psci {
|
|
||||||
compatible = "arm,psci-0.2";
|
|
||||||
method = "smc";
|
|
||||||
};
|
|
||||||
|
|
||||||
Case 3: PSCI v0.2 and PSCI v0.1.
|
|
||||||
|
|
||||||
A DTB may provide IDs for use by kernels without PSCI 0.2 support,
|
|
||||||
enabling firmware and hypervisors to support existing and new kernels.
|
|
||||||
These IDs will be ignored by kernels with PSCI 0.2 support, which will
|
|
||||||
use the standard PSCI 0.2 IDs exclusively.
|
|
||||||
|
|
||||||
psci {
|
|
||||||
compatible = "arm,psci-0.2", "arm,psci";
|
|
||||||
method = "hvc";
|
|
||||||
|
|
||||||
cpu_on = < arbitrary value >;
|
|
||||||
cpu_off = < arbitrary value >;
|
|
||||||
|
|
||||||
...
|
|
||||||
};
|
|
||||||
|
|
||||||
[1] Kernel documentation - ARM idle states bindings
|
|
||||||
Documentation/devicetree/bindings/arm/idle-states.txt
|
|
||||||
[2] Power State Coordination Interface (PSCI) specification
|
|
||||||
http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
|
|
|
@ -0,0 +1,163 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/psci.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Power State Coordination Interface (PSCI)
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||||
|
|
||||||
|
description: |+
|
||||||
|
Firmware implementing the PSCI functions described in ARM document number
|
||||||
|
ARM DEN 0022A ("Power State Coordination Interface System Software on ARM
|
||||||
|
processors") can be used by Linux to initiate various CPU-centric power
|
||||||
|
operations.
|
||||||
|
|
||||||
|
Issue A of the specification describes functions for CPU suspend, hotplug
|
||||||
|
and migration of secure software.
|
||||||
|
|
||||||
|
Functions are invoked by trapping to the privilege level of the PSCI
|
||||||
|
firmware (specified as part of the binding below) and passing arguments
|
||||||
|
in a manner similar to that specified by AAPCS:
|
||||||
|
|
||||||
|
r0 => 32-bit Function ID / return value
|
||||||
|
{r1 - r3} => Parameters
|
||||||
|
|
||||||
|
Note that the immediate field of the trapping instruction must be set
|
||||||
|
to #0.
|
||||||
|
|
||||||
|
[2] Power State Coordination Interface (PSCI) specification
|
||||||
|
http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
oneOf:
|
||||||
|
- description:
|
||||||
|
For implementations complying to PSCI versions prior to 0.2.
|
||||||
|
const: arm,psci
|
||||||
|
|
||||||
|
- description:
|
||||||
|
For implementations complying to PSCI 0.2.
|
||||||
|
const: arm,psci-0.2
|
||||||
|
|
||||||
|
- description:
|
||||||
|
For implementations complying to PSCI 0.2.
|
||||||
|
Function IDs are not required and should be ignored by an OS with
|
||||||
|
PSCI 0.2 support, but are permitted to be present for compatibility
|
||||||
|
with existing software when "arm,psci" is later in the compatible
|
||||||
|
list.
|
||||||
|
items:
|
||||||
|
- const: arm,psci-0.2
|
||||||
|
- const: arm,psci
|
||||||
|
|
||||||
|
- description:
|
||||||
|
For implementations complying to PSCI 1.0.
|
||||||
|
const: arm,psci-1.0
|
||||||
|
|
||||||
|
- description:
|
||||||
|
For implementations complying to PSCI 1.0.
|
||||||
|
PSCI 1.0 is backward compatible with PSCI 0.2 with minor
|
||||||
|
specification updates, as defined in the PSCI specification[2].
|
||||||
|
items:
|
||||||
|
- const: arm,psci-1.0
|
||||||
|
- const: arm,psci-0.2
|
||||||
|
|
||||||
|
method:
|
||||||
|
description: The method of calling the PSCI firmware.
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#/definitions/string-array
|
||||||
|
- enum:
|
||||||
|
# SMC #0, with the register assignments specified in this binding.
|
||||||
|
- smc
|
||||||
|
# HVC #0, with the register assignments specified in this binding.
|
||||||
|
- hvc
|
||||||
|
|
||||||
|
cpu_suspend:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: Function ID for CPU_SUSPEND operation
|
||||||
|
|
||||||
|
cpu_off:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: Function ID for CPU_OFF operation
|
||||||
|
|
||||||
|
cpu_on:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: Function ID for CPU_ON operation
|
||||||
|
|
||||||
|
migrate:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: Function ID for MIGRATE operation
|
||||||
|
|
||||||
|
arm,psci-suspend-param:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: |
|
||||||
|
power_state parameter to pass to the PSCI suspend call.
|
||||||
|
|
||||||
|
Device tree nodes that require usage of PSCI CPU_SUSPEND function (ie
|
||||||
|
idle state nodes with entry-method property is set to "psci", as per
|
||||||
|
bindings in [1]) must specify this property.
|
||||||
|
|
||||||
|
[1] Kernel documentation - ARM idle states bindings
|
||||||
|
Documentation/devicetree/bindings/arm/idle-states.txt
|
||||||
|
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- method
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: arm,psci
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- cpu_off
|
||||||
|
- cpu_on
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |+
|
||||||
|
|
||||||
|
// Case 1: PSCI v0.1 only.
|
||||||
|
|
||||||
|
psci {
|
||||||
|
compatible = "arm,psci";
|
||||||
|
method = "smc";
|
||||||
|
cpu_suspend = <0x95c10000>;
|
||||||
|
cpu_off = <0x95c10001>;
|
||||||
|
cpu_on = <0x95c10002>;
|
||||||
|
migrate = <0x95c10003>;
|
||||||
|
};
|
||||||
|
|
||||||
|
- |+
|
||||||
|
|
||||||
|
// Case 2: PSCI v0.2 only
|
||||||
|
|
||||||
|
psci {
|
||||||
|
compatible = "arm,psci-0.2";
|
||||||
|
method = "smc";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
- |+
|
||||||
|
|
||||||
|
// Case 3: PSCI v0.2 and PSCI v0.1.
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A DTB may provide IDs for use by kernels without PSCI 0.2 support,
|
||||||
|
* enabling firmware and hypervisors to support existing and new kernels.
|
||||||
|
* These IDs will be ignored by kernels with PSCI 0.2 support, which will
|
||||||
|
* use the standard PSCI 0.2 IDs exclusively.
|
||||||
|
*/
|
||||||
|
|
||||||
|
psci {
|
||||||
|
compatible = "arm,psci-0.2", "arm,psci";
|
||||||
|
method = "hvc";
|
||||||
|
|
||||||
|
cpu_on = <0x95c10002>;
|
||||||
|
cpu_off = <0x95c10001>;
|
||||||
|
};
|
||||||
|
...
|
|
@ -101,6 +101,15 @@ properties:
|
||||||
- qcom,msm8960-cdp
|
- qcom,msm8960-cdp
|
||||||
- const: qcom,msm8960
|
- const: qcom,msm8960
|
||||||
|
|
||||||
|
- items:
|
||||||
|
- enum:
|
||||||
|
- fairphone,fp2
|
||||||
|
- lge,hammerhead
|
||||||
|
- sony,xperia-amami
|
||||||
|
- sony,xperia-castor
|
||||||
|
- sony,xperia-honami
|
||||||
|
- const: qcom,msm8974
|
||||||
|
|
||||||
- items:
|
- items:
|
||||||
- const: qcom,msm8916-mtp/1
|
- const: qcom,msm8916-mtp/1
|
||||||
- const: qcom,msm8916-mtp
|
- const: qcom,msm8916-mtp
|
||||||
|
@ -110,6 +119,11 @@ properties:
|
||||||
- const: qcom,msm8996-mtp
|
- const: qcom,msm8996-mtp
|
||||||
|
|
||||||
- items:
|
- items:
|
||||||
|
- enum:
|
||||||
|
- qcom,ipq4019-ap-dk04.1-c3
|
||||||
|
- qcom,ipq4019-ap-dk07.1-c1
|
||||||
|
- qcom,ipq4019-ap-dk07.1-c2
|
||||||
|
- qcom,ipq4019-dk04.1-c1
|
||||||
- const: qcom,ipq4019
|
- const: qcom,ipq4019
|
||||||
|
|
||||||
- items:
|
- items:
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
RDA Micro platforms device tree bindings
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
RDA8810PL SoC
|
|
||||||
=============
|
|
||||||
|
|
||||||
Required root node properties:
|
|
||||||
|
|
||||||
- compatible : must contain "rda,8810pl"
|
|
||||||
|
|
||||||
|
|
||||||
Boards:
|
|
||||||
|
|
||||||
Root node property compatible must contain, depending on board:
|
|
||||||
|
|
||||||
- Orange Pi 2G-IoT: "xunlong,orangepi-2g-iot"
|
|
||||||
- Orange Pi i96: "xunlong,orangepi-i96"
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/rda.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: RDA Micro platforms device tree bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
items:
|
||||||
|
- enum:
|
||||||
|
- xunlong,orangepi-2g-iot # Orange Pi 2G-IoT
|
||||||
|
- xunlong,orangepi-i96 # Orange Pi i96
|
||||||
|
- const: rda,8810pl
|
||||||
|
|
||||||
|
...
|
|
@ -5,30 +5,29 @@ Endianness
|
||||||
----------
|
----------
|
||||||
|
|
||||||
The Devicetree Specification does not define any properties related to hardware
|
The Devicetree Specification does not define any properties related to hardware
|
||||||
byteswapping, but endianness issues show up frequently in porting Linux to
|
byte swapping, but endianness issues show up frequently in porting drivers to
|
||||||
different machine types. This document attempts to provide a consistent
|
different machine types. This document attempts to provide a consistent
|
||||||
way of handling byteswapping across drivers.
|
way of handling byte swapping across drivers.
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- big-endian: Boolean; force big endian register accesses
|
- big-endian: Boolean; force big endian register accesses
|
||||||
unconditionally (e.g. ioread32be/iowrite32be). Use this if you
|
unconditionally (e.g. ioread32be/iowrite32be). Use this if you
|
||||||
know the peripheral always needs to be accessed in BE mode.
|
know the peripheral always needs to be accessed in big endian (BE) mode.
|
||||||
- little-endian: Boolean; force little endian register accesses
|
- little-endian: Boolean; force little endian register accesses
|
||||||
unconditionally (e.g. readl/writel). Use this if you know the
|
unconditionally (e.g. readl/writel). Use this if you know the
|
||||||
peripheral always needs to be accessed in LE mode.
|
peripheral always needs to be accessed in little endian (LE) mode.
|
||||||
- native-endian: Boolean; always use register accesses matched to the
|
- native-endian: Boolean; always use register accesses matched to the
|
||||||
endianness of the kernel binary (e.g. LE vmlinux -> readl/writel,
|
endianness of the kernel binary (e.g. LE vmlinux -> readl/writel,
|
||||||
BE vmlinux -> ioread32be/iowrite32be). In this case no byteswaps
|
BE vmlinux -> ioread32be/iowrite32be). In this case no byte swaps
|
||||||
will ever be performed. Use this if the hardware "self-adjusts"
|
will ever be performed. Use this if the hardware "self-adjusts"
|
||||||
register endianness based on the CPU's configured endianness.
|
register endianness based on the CPU's configured endianness.
|
||||||
|
|
||||||
If a binding supports these properties, then the binding should also
|
If a binding supports these properties, then the binding should also
|
||||||
specify the default behavior if none of these properties are present.
|
specify the default behavior if none of these properties are present.
|
||||||
In such cases, little-endian is the preferred default, but it is not
|
In such cases, little-endian is the preferred default, but it is not
|
||||||
a requirement. The of_device_is_big_endian() and of_fdt_is_big_endian()
|
a requirement. Some implementations assume that little-endian is
|
||||||
helper functions do assume that little-endian is the default, because
|
the default, because most existing (PCI-based) drivers implicitly
|
||||||
most existing (PCI-based) drivers implicitly default to LE by using
|
default to LE for their MMIO accesses.
|
||||||
readl/writel for MMIO accesses.
|
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
Scenario 1 : CPU in LE mode & device in LE mode.
|
Scenario 1 : CPU in LE mode & device in LE mode.
|
||||||
|
|
|
@ -126,6 +126,28 @@ required:
|
||||||
# but usually they will be filled by the bootloader.
|
# but usually they will be filled by the bootloader.
|
||||||
- compatible
|
- compatible
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: allwinner,simple-framebuffer
|
||||||
|
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- allwinner,pipeline
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: amlogic,simple-framebuffer
|
||||||
|
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- amlogic,pipeline
|
||||||
|
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
|
@ -139,7 +161,8 @@ examples:
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
stdout-path = "display0";
|
stdout-path = "display0";
|
||||||
framebuffer0: framebuffer@1d385000 {
|
framebuffer0: framebuffer@1d385000 {
|
||||||
compatible = "simple-framebuffer";
|
compatible = "allwinner,simple-framebuffer", "simple-framebuffer";
|
||||||
|
allwinner,pipeline = "de_be0-lcd0";
|
||||||
reg = <0x1d385000 3840000>;
|
reg = <0x1d385000 3840000>;
|
||||||
width = <1600>;
|
width = <1600>;
|
||||||
height = <1200>;
|
height = <1200>;
|
||||||
|
|
|
@ -36,4 +36,4 @@ Example:
|
||||||
kcs_chan = <2>;
|
kcs_chan = <2>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,16 +23,17 @@ properties:
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
ti,linear-mapping-mode:
|
'#address-cells':
|
||||||
description: |
|
const: 1
|
||||||
Enable linear mapping mode. If disabled, then it will use exponential
|
|
||||||
mapping mode in which the ramp up/down appears to have a more uniform
|
'#size-cells':
|
||||||
transition to the human eye.
|
const: 0
|
||||||
type: boolean
|
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
|
- '#address-cells'
|
||||||
|
- '#size-cells'
|
||||||
|
|
||||||
patternProperties:
|
patternProperties:
|
||||||
"^led@[01]$":
|
"^led@[01]$":
|
||||||
|
@ -48,7 +49,6 @@ patternProperties:
|
||||||
in this property. The two current sinks can be controlled
|
in this property. The two current sinks can be controlled
|
||||||
independently with both banks, or bank A can be configured to control
|
independently with both banks, or bank A can be configured to control
|
||||||
both sinks with the led-sources property.
|
both sinks with the led-sources property.
|
||||||
maxItems: 1
|
|
||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 1
|
maximum: 1
|
||||||
|
|
||||||
|
@ -73,6 +73,13 @@ patternProperties:
|
||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 255
|
maximum: 255
|
||||||
|
|
||||||
|
ti,linear-mapping-mode:
|
||||||
|
description: |
|
||||||
|
Enable linear mapping mode. If disabled, then it will use exponential
|
||||||
|
mapping mode in which the ramp up/down appears to have a more uniform
|
||||||
|
transition to the human eye.
|
||||||
|
type: boolean
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- reg
|
- reg
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,6 @@ patternProperties:
|
||||||
"^nand@[a-f0-9]+$":
|
"^nand@[a-f0-9]+$":
|
||||||
properties:
|
properties:
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
|
||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 7
|
maximum: 7
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/allwinner,sun4i-a10-emac.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A10 EMAC Ethernet Controller Device Tree Bindings
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: "ethernet-controller.yaml#"
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun4i-a10-emac
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
allwinner,sram:
|
||||||
|
description: Phandle to the device SRAM
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- phy-handle
|
||||||
|
- allwinner,sram
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
emac: ethernet@1c0b000 {
|
||||||
|
compatible = "allwinner,sun4i-a10-emac";
|
||||||
|
reg = <0x01c0b000 0x1000>;
|
||||||
|
interrupts = <55>;
|
||||||
|
clocks = <&ahb_gates 17>;
|
||||||
|
phy-handle = <&phy0>;
|
||||||
|
allwinner,sram = <&emac_sram 1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
# FIXME: We should set it, but it would report all the generic
|
||||||
|
# properties as additional properties.
|
||||||
|
# additionalProperties: false
|
||||||
|
|
||||||
|
...
|
|
@ -0,0 +1,70 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/allwinner,sun4i-a10-mdio.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A10 MDIO Controller Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: "mdio.yaml#"
|
||||||
|
|
||||||
|
# Select every compatible, including the deprecated ones. This way, we
|
||||||
|
# will be able to report a warning when we have that compatible, since
|
||||||
|
# we will validate the node thanks to the select, but won't report it
|
||||||
|
# as a valid value in the compatible property description
|
||||||
|
select:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- allwinner,sun4i-a10-mdio
|
||||||
|
|
||||||
|
# Deprecated
|
||||||
|
- allwinner,sun4i-mdio
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
|
||||||
|
properties:
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
"#size-cells":
|
||||||
|
const: 0
|
||||||
|
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun4i-a10-mdio
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
phy-supply:
|
||||||
|
description: PHY regulator
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
mdio@1c0b080 {
|
||||||
|
compatible = "allwinner,sun4i-a10-mdio";
|
||||||
|
reg = <0x01c0b080 0x14>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
phy-supply = <®_emac_3v3>;
|
||||||
|
|
||||||
|
phy0: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# FIXME: We should set it, but it would report all the generic
|
||||||
|
# properties as additional properties.
|
||||||
|
# additionalProperties: false
|
||||||
|
|
||||||
|
...
|
|
@ -1,19 +0,0 @@
|
||||||
* Allwinner EMAC ethernet controller
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: should be "allwinner,sun4i-a10-emac" (Deprecated:
|
|
||||||
"allwinner,sun4i-emac")
|
|
||||||
- reg: address and length of the register set for the device.
|
|
||||||
- interrupts: interrupt for the device
|
|
||||||
- phy: see ethernet.txt file in the same directory.
|
|
||||||
- clocks: A phandle to the reference clock for this device
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
emac: ethernet@1c0b000 {
|
|
||||||
compatible = "allwinner,sun4i-a10-emac";
|
|
||||||
reg = <0x01c0b000 0x1000>;
|
|
||||||
interrupts = <55>;
|
|
||||||
clocks = <&ahb_gates 17>;
|
|
||||||
phy = <&phy0>;
|
|
||||||
};
|
|
|
@ -1,27 +0,0 @@
|
||||||
* Allwinner A10 MDIO Ethernet Controller interface
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: should be "allwinner,sun4i-a10-mdio"
|
|
||||||
(Deprecated: "allwinner,sun4i-mdio").
|
|
||||||
- reg: address and length of the register set for the device.
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- phy-supply: phandle to a regulator if the PHY needs one
|
|
||||||
|
|
||||||
Example at the SoC level:
|
|
||||||
mdio@1c0b080 {
|
|
||||||
compatible = "allwinner,sun4i-a10-mdio";
|
|
||||||
reg = <0x01c0b080 0x14>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
};
|
|
||||||
|
|
||||||
And at the board level:
|
|
||||||
|
|
||||||
mdio@1c0b080 {
|
|
||||||
phy-supply = <®_emac_3v3>;
|
|
||||||
|
|
||||||
phy0: ethernet-phy@0 {
|
|
||||||
reg = <0>;
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -1,27 +0,0 @@
|
||||||
* Allwinner GMAC ethernet controller
|
|
||||||
|
|
||||||
This device is a platform glue layer for stmmac.
|
|
||||||
Please see stmmac.txt for the other unchanged properties.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: Should be "allwinner,sun7i-a20-gmac"
|
|
||||||
- clocks: Should contain the GMAC main clock, and tx clock
|
|
||||||
The tx clock type should be "allwinner,sun7i-a20-gmac-clk"
|
|
||||||
- clock-names: Should contain the clock names "stmmaceth",
|
|
||||||
and "allwinner_gmac_tx"
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- phy-supply: phandle to a regulator if the PHY needs one
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
gmac: ethernet@1c50000 {
|
|
||||||
compatible = "allwinner,sun7i-a20-gmac";
|
|
||||||
reg = <0x01c50000 0x10000>,
|
|
||||||
<0x01c20164 0x4>;
|
|
||||||
interrupts = <0 85 1>;
|
|
||||||
interrupt-names = "macirq";
|
|
||||||
clocks = <&ahb_gates 49>, <&gmac_tx>;
|
|
||||||
clock-names = "stmmaceth", "allwinner_gmac_tx";
|
|
||||||
phy-mode = "mii";
|
|
||||||
};
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/allwinner,sun7i-a20-gmac.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A20 GMAC Device Tree Bindings
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: "snps,dwmac.yaml#"
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun7i-a20-gmac
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupt-names:
|
||||||
|
const: macirq
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: GMAC main clock
|
||||||
|
- description: TX clock
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: stmmaceth
|
||||||
|
- const: allwinner_gmac_tx
|
||||||
|
|
||||||
|
phy-supply:
|
||||||
|
description:
|
||||||
|
PHY regulator
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- interrupt-names
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- phy-mode
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
gmac: ethernet@1c50000 {
|
||||||
|
compatible = "allwinner,sun7i-a20-gmac";
|
||||||
|
reg = <0x01c50000 0x10000>;
|
||||||
|
interrupts = <0 85 1>;
|
||||||
|
interrupt-names = "macirq";
|
||||||
|
clocks = <&ahb_gates 49>, <&gmac_tx>;
|
||||||
|
clock-names = "stmmaceth", "allwinner_gmac_tx";
|
||||||
|
phy-mode = "mii";
|
||||||
|
};
|
||||||
|
|
||||||
|
# FIXME: We should set it, but it would report all the generic
|
||||||
|
# properties as additional properties.
|
||||||
|
# additionalProperties: false
|
||||||
|
|
||||||
|
...
|
|
@ -0,0 +1,321 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/allwinner,sun8i-a83t-gmac.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A83t EMAC Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
oneOf:
|
||||||
|
- const: allwinner,sun8i-a83t-emac
|
||||||
|
- const: allwinner,sun8i-h3-emac
|
||||||
|
- const: allwinner,sun8i-r40-emac
|
||||||
|
- const: allwinner,sun8i-v3s-emac
|
||||||
|
- const: allwinner,sun50i-a64-emac
|
||||||
|
- items:
|
||||||
|
- const: allwinner,sun50i-h6-emac
|
||||||
|
- const: allwinner,sun50i-a64-emac
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupt-names:
|
||||||
|
const: macirq
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
const: stmmaceth
|
||||||
|
|
||||||
|
syscon:
|
||||||
|
$ref: /schemas/types.yaml#definitions/phandle
|
||||||
|
description:
|
||||||
|
Phandle to the device containing the EMAC or GMAC clock
|
||||||
|
register
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- interrupt-names
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- resets
|
||||||
|
- reset-names
|
||||||
|
- phy-handle
|
||||||
|
- phy-mode
|
||||||
|
- syscon
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: "snps,dwmac.yaml#"
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- allwinner,sun8i-a83t-emac
|
||||||
|
- allwinner,sun8i-h3-emac
|
||||||
|
- allwinner,sun8i-v3s-emac
|
||||||
|
- allwinner,sun50i-a64-emac
|
||||||
|
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
allwinner,tx-delay-ps:
|
||||||
|
default: 0
|
||||||
|
minimum: 0
|
||||||
|
maximum: 700
|
||||||
|
multipleOf: 100
|
||||||
|
description:
|
||||||
|
External RGMII PHY TX clock delay chain value in ps.
|
||||||
|
|
||||||
|
allwinner,rx-delay-ps:
|
||||||
|
default: 0
|
||||||
|
minimum: 0
|
||||||
|
maximum: 3100
|
||||||
|
multipleOf: 100
|
||||||
|
description:
|
||||||
|
External RGMII PHY TX clock delay chain value in ps.
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- allwinner,sun8i-r40-emac
|
||||||
|
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
allwinner,rx-delay-ps:
|
||||||
|
default: 0
|
||||||
|
minimum: 0
|
||||||
|
maximum: 700
|
||||||
|
multipleOf: 100
|
||||||
|
description:
|
||||||
|
External RGMII PHY TX clock delay chain value in ps.
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- allwinner,sun8i-h3-emac
|
||||||
|
- allwinner,sun8i-v3s-emac
|
||||||
|
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
allwinner,leds-active-low:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
EPHY LEDs are active low.
|
||||||
|
|
||||||
|
mdio-mux:
|
||||||
|
type: object
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun8i-h3-mdio-mux
|
||||||
|
|
||||||
|
mdio-parent-bus:
|
||||||
|
$ref: /schemas/types.yaml#definitions/phandle
|
||||||
|
description:
|
||||||
|
Phandle to EMAC MDIO.
|
||||||
|
|
||||||
|
mdio@1:
|
||||||
|
type: object
|
||||||
|
description: Internal MDIO Bus
|
||||||
|
|
||||||
|
properties:
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
"#size-cells":
|
||||||
|
const: 0
|
||||||
|
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun8i-h3-mdio-internal
|
||||||
|
|
||||||
|
reg:
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
patternProperties:
|
||||||
|
"^ethernet-phy@[0-9a-f]$":
|
||||||
|
type: object
|
||||||
|
description:
|
||||||
|
Integrated PHY node
|
||||||
|
|
||||||
|
properties:
|
||||||
|
clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
resets:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clocks
|
||||||
|
- resets
|
||||||
|
|
||||||
|
|
||||||
|
mdio@2:
|
||||||
|
type: object
|
||||||
|
description: External MDIO Bus (H3 only)
|
||||||
|
|
||||||
|
properties:
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
"#size-cells":
|
||||||
|
const: 0
|
||||||
|
|
||||||
|
reg:
|
||||||
|
const: 2
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- mdio-parent-bus
|
||||||
|
- mdio@1
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
ethernet@1c0b000 {
|
||||||
|
compatible = "allwinner,sun8i-h3-emac";
|
||||||
|
syscon = <&syscon>;
|
||||||
|
reg = <0x01c0b000 0x104>;
|
||||||
|
interrupts = <0 82 1>;
|
||||||
|
interrupt-names = "macirq";
|
||||||
|
resets = <&ccu 12>;
|
||||||
|
reset-names = "stmmaceth";
|
||||||
|
clocks = <&ccu 27>;
|
||||||
|
clock-names = "stmmaceth";
|
||||||
|
|
||||||
|
phy-handle = <&int_mii_phy>;
|
||||||
|
phy-mode = "mii";
|
||||||
|
allwinner,leds-active-low;
|
||||||
|
|
||||||
|
mdio1: mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "snps,dwmac-mdio";
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio-mux {
|
||||||
|
compatible = "allwinner,sun8i-h3-mdio-mux";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
mdio-parent-bus = <&mdio1>;
|
||||||
|
|
||||||
|
int_mii_phy: mdio@1 {
|
||||||
|
compatible = "allwinner,sun8i-h3-mdio-internal";
|
||||||
|
reg = <1>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ethernet-phy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
clocks = <&ccu 67>;
|
||||||
|
resets = <&ccu 39>;
|
||||||
|
phy-is-integrated;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio@2 {
|
||||||
|
reg = <2>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- |
|
||||||
|
ethernet@1c0b000 {
|
||||||
|
compatible = "allwinner,sun8i-h3-emac";
|
||||||
|
syscon = <&syscon>;
|
||||||
|
reg = <0x01c0b000 0x104>;
|
||||||
|
interrupts = <0 82 1>;
|
||||||
|
interrupt-names = "macirq";
|
||||||
|
resets = <&ccu 12>;
|
||||||
|
reset-names = "stmmaceth";
|
||||||
|
clocks = <&ccu 27>;
|
||||||
|
clock-names = "stmmaceth";
|
||||||
|
|
||||||
|
phy-handle = <&ext_rgmii_phy>;
|
||||||
|
phy-mode = "rgmii";
|
||||||
|
allwinner,leds-active-low;
|
||||||
|
|
||||||
|
mdio2: mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "snps,dwmac-mdio";
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio-mux {
|
||||||
|
compatible = "allwinner,sun8i-h3-mdio-mux";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
mdio-parent-bus = <&mdio2>;
|
||||||
|
|
||||||
|
mdio@1 {
|
||||||
|
compatible = "allwinner,sun8i-h3-mdio-internal";
|
||||||
|
reg = <1>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ethernet-phy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
clocks = <&ccu 67>;
|
||||||
|
resets = <&ccu 39>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio@2 {
|
||||||
|
reg = <2>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ext_rgmii_phy: ethernet-phy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
- |
|
||||||
|
ethernet@1c0b000 {
|
||||||
|
compatible = "allwinner,sun8i-a83t-emac";
|
||||||
|
syscon = <&syscon>;
|
||||||
|
reg = <0x01c0b000 0x104>;
|
||||||
|
interrupts = <0 82 1>;
|
||||||
|
interrupt-names = "macirq";
|
||||||
|
resets = <&ccu 13>;
|
||||||
|
reset-names = "stmmaceth";
|
||||||
|
clocks = <&ccu 27>;
|
||||||
|
clock-names = "stmmaceth";
|
||||||
|
phy-handle = <&ext_rgmii_phy1>;
|
||||||
|
phy-mode = "rgmii";
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
compatible = "snps,dwmac-mdio";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ext_rgmii_phy1: ethernet-phy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# FIXME: We should set it, but it would report all the generic
|
||||||
|
# properties as additional properties.
|
||||||
|
# additionalProperties: false
|
||||||
|
|
||||||
|
...
|
|
@ -1,201 +0,0 @@
|
||||||
* Allwinner sun8i GMAC ethernet controller
|
|
||||||
|
|
||||||
This device is a platform glue layer for stmmac.
|
|
||||||
Please see stmmac.txt for the other unchanged properties.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: must be one of the following string:
|
|
||||||
"allwinner,sun8i-a83t-emac"
|
|
||||||
"allwinner,sun8i-h3-emac"
|
|
||||||
"allwinner,sun8i-r40-gmac"
|
|
||||||
"allwinner,sun8i-v3s-emac"
|
|
||||||
"allwinner,sun50i-a64-emac"
|
|
||||||
"allwinner,sun50i-h6-emac", "allwinner-sun50i-a64-emac"
|
|
||||||
- reg: address and length of the register for the device.
|
|
||||||
- interrupts: interrupt for the device
|
|
||||||
- interrupt-names: must be "macirq"
|
|
||||||
- clocks: A phandle to the reference clock for this device
|
|
||||||
- clock-names: must be "stmmaceth"
|
|
||||||
- resets: A phandle to the reset control for this device
|
|
||||||
- reset-names: must be "stmmaceth"
|
|
||||||
- phy-mode: See ethernet.txt
|
|
||||||
- phy-handle: See ethernet.txt
|
|
||||||
- syscon: A phandle to the device containing the EMAC or GMAC clock register
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- allwinner,tx-delay-ps: TX clock delay chain value in ps.
|
|
||||||
Range is 0-700. Default is 0.
|
|
||||||
Unavailable for allwinner,sun8i-r40-gmac
|
|
||||||
- allwinner,rx-delay-ps: RX clock delay chain value in ps.
|
|
||||||
Range is 0-3100. Default is 0.
|
|
||||||
Range is 0-700 for allwinner,sun8i-r40-gmac
|
|
||||||
Both delay properties need to be a multiple of 100. They control the
|
|
||||||
clock delay for external RGMII PHY. They do not apply to the internal
|
|
||||||
PHY or external non-RGMII PHYs.
|
|
||||||
|
|
||||||
Optional properties for the following compatibles:
|
|
||||||
- "allwinner,sun8i-h3-emac",
|
|
||||||
- "allwinner,sun8i-v3s-emac":
|
|
||||||
- allwinner,leds-active-low: EPHY LEDs are active low
|
|
||||||
|
|
||||||
Required child node of emac:
|
|
||||||
- mdio bus node: should be named mdio with compatible "snps,dwmac-mdio"
|
|
||||||
|
|
||||||
Required properties of the mdio node:
|
|
||||||
- #address-cells: shall be 1
|
|
||||||
- #size-cells: shall be 0
|
|
||||||
|
|
||||||
The device node referenced by "phy" or "phy-handle" must be a child node
|
|
||||||
of the mdio node. See phy.txt for the generic PHY bindings.
|
|
||||||
|
|
||||||
The following compatibles require that the emac node have a mdio-mux child
|
|
||||||
node called "mdio-mux":
|
|
||||||
- "allwinner,sun8i-h3-emac"
|
|
||||||
- "allwinner,sun8i-v3s-emac":
|
|
||||||
Required properties for the mdio-mux node:
|
|
||||||
- compatible = "allwinner,sun8i-h3-mdio-mux"
|
|
||||||
- mdio-parent-bus: a phandle to EMAC mdio
|
|
||||||
- one child mdio for the integrated mdio with the compatible
|
|
||||||
"allwinner,sun8i-h3-mdio-internal"
|
|
||||||
- one child mdio for the external mdio if present (V3s have none)
|
|
||||||
Required properties for the mdio-mux children node:
|
|
||||||
- reg: 1 for internal MDIO bus, 2 for external MDIO bus
|
|
||||||
|
|
||||||
The following compatibles require a PHY node representing the integrated
|
|
||||||
PHY, under the integrated MDIO bus node if an mdio-mux node is used:
|
|
||||||
- "allwinner,sun8i-h3-emac",
|
|
||||||
- "allwinner,sun8i-v3s-emac":
|
|
||||||
|
|
||||||
Additional information regarding generic multiplexer properties can be found
|
|
||||||
at Documentation/devicetree/bindings/net/mdio-mux.txt
|
|
||||||
|
|
||||||
Required properties of the integrated phy node:
|
|
||||||
- clocks: a phandle to the reference clock for the EPHY
|
|
||||||
- resets: a phandle to the reset control for the EPHY
|
|
||||||
- Must be a child of the integrated mdio
|
|
||||||
|
|
||||||
Example with integrated PHY:
|
|
||||||
emac: ethernet@1c0b000 {
|
|
||||||
compatible = "allwinner,sun8i-h3-emac";
|
|
||||||
syscon = <&syscon>;
|
|
||||||
reg = <0x01c0b000 0x104>;
|
|
||||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
interrupt-names = "macirq";
|
|
||||||
resets = <&ccu RST_BUS_EMAC>;
|
|
||||||
reset-names = "stmmaceth";
|
|
||||||
clocks = <&ccu CLK_BUS_EMAC>;
|
|
||||||
clock-names = "stmmaceth";
|
|
||||||
|
|
||||||
phy-handle = <&int_mii_phy>;
|
|
||||||
phy-mode = "mii";
|
|
||||||
allwinner,leds-active-low;
|
|
||||||
|
|
||||||
mdio: mdio {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
compatible = "snps,dwmac-mdio";
|
|
||||||
};
|
|
||||||
|
|
||||||
mdio-mux {
|
|
||||||
compatible = "mdio-mux", "allwinner,sun8i-h3-mdio-mux";
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
mdio-parent-bus = <&mdio>;
|
|
||||||
|
|
||||||
int_mdio: mdio@1 {
|
|
||||||
compatible = "allwinner,sun8i-h3-mdio-internal";
|
|
||||||
reg = <1>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
int_mii_phy: ethernet-phy@1 {
|
|
||||||
reg = <1>;
|
|
||||||
clocks = <&ccu CLK_BUS_EPHY>;
|
|
||||||
resets = <&ccu RST_BUS_EPHY>;
|
|
||||||
phy-is-integrated;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
ext_mdio: mdio@2 {
|
|
||||||
reg = <2>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
Example with external PHY:
|
|
||||||
emac: ethernet@1c0b000 {
|
|
||||||
compatible = "allwinner,sun8i-h3-emac";
|
|
||||||
syscon = <&syscon>;
|
|
||||||
reg = <0x01c0b000 0x104>;
|
|
||||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
interrupt-names = "macirq";
|
|
||||||
resets = <&ccu RST_BUS_EMAC>;
|
|
||||||
reset-names = "stmmaceth";
|
|
||||||
clocks = <&ccu CLK_BUS_EMAC>;
|
|
||||||
clock-names = "stmmaceth";
|
|
||||||
|
|
||||||
phy-handle = <&ext_rgmii_phy>;
|
|
||||||
phy-mode = "rgmii";
|
|
||||||
allwinner,leds-active-low;
|
|
||||||
|
|
||||||
mdio: mdio {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
compatible = "snps,dwmac-mdio";
|
|
||||||
};
|
|
||||||
|
|
||||||
mdio-mux {
|
|
||||||
compatible = "allwinner,sun8i-h3-mdio-mux";
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
mdio-parent-bus = <&mdio>;
|
|
||||||
|
|
||||||
int_mdio: mdio@1 {
|
|
||||||
compatible = "allwinner,sun8i-h3-mdio-internal";
|
|
||||||
reg = <1>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
int_mii_phy: ethernet-phy@1 {
|
|
||||||
reg = <1>;
|
|
||||||
clocks = <&ccu CLK_BUS_EPHY>;
|
|
||||||
resets = <&ccu RST_BUS_EPHY>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
ext_mdio: mdio@2 {
|
|
||||||
reg = <2>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
ext_rgmii_phy: ethernet-phy@1 {
|
|
||||||
reg = <1>;
|
|
||||||
};
|
|
||||||
}:
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
Example with SoC without integrated PHY
|
|
||||||
|
|
||||||
emac: ethernet@1c0b000 {
|
|
||||||
compatible = "allwinner,sun8i-a83t-emac";
|
|
||||||
syscon = <&syscon>;
|
|
||||||
reg = <0x01c0b000 0x104>;
|
|
||||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
interrupt-names = "macirq";
|
|
||||||
resets = <&ccu RST_BUS_EMAC>;
|
|
||||||
reset-names = "stmmaceth";
|
|
||||||
clocks = <&ccu CLK_BUS_EMAC>;
|
|
||||||
clock-names = "stmmaceth";
|
|
||||||
|
|
||||||
phy-handle = <&ext_rgmii_phy>;
|
|
||||||
phy-mode = "rgmii";
|
|
||||||
|
|
||||||
mdio: mdio {
|
|
||||||
compatible = "snps,dwmac-mdio";
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
ext_rgmii_phy: ethernet-phy@1 {
|
|
||||||
reg = <1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -0,0 +1,206 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/ethernet-controller.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Ethernet Controller Generic Binding
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
$nodename:
|
||||||
|
pattern: "^ethernet(@.*)?$"
|
||||||
|
|
||||||
|
local-mac-address:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/uint8-array
|
||||||
|
- items:
|
||||||
|
- minItems: 6
|
||||||
|
maxItems: 6
|
||||||
|
description:
|
||||||
|
Specifies the MAC address that was assigned to the network device.
|
||||||
|
|
||||||
|
mac-address:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/uint8-array
|
||||||
|
- items:
|
||||||
|
- minItems: 6
|
||||||
|
maxItems: 6
|
||||||
|
description:
|
||||||
|
Specifies the MAC address that was last used by the boot
|
||||||
|
program; should be used in cases where the MAC address assigned
|
||||||
|
to the device by the boot program is different from the
|
||||||
|
local-mac-address property.
|
||||||
|
|
||||||
|
max-frame-size:
|
||||||
|
$ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
description:
|
||||||
|
Maximum transfer unit (IEEE defined MTU), rather than the
|
||||||
|
maximum frame size (there\'s contradiction in the Devicetree
|
||||||
|
Specification).
|
||||||
|
|
||||||
|
max-speed:
|
||||||
|
$ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
description:
|
||||||
|
Specifies maximum speed in Mbit/s supported by the device.
|
||||||
|
|
||||||
|
nvmem-cells:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
Reference to an nvmem node for the MAC address
|
||||||
|
|
||||||
|
nvmem-cells-names:
|
||||||
|
const: mac-address
|
||||||
|
|
||||||
|
phy-connection-type:
|
||||||
|
description:
|
||||||
|
Operation mode of the PHY interface
|
||||||
|
enum:
|
||||||
|
# There is not a standard bus between the MAC and the PHY,
|
||||||
|
# something proprietary is being used to embed the PHY in the
|
||||||
|
# MAC.
|
||||||
|
- internal
|
||||||
|
- mii
|
||||||
|
- gmii
|
||||||
|
- sgmii
|
||||||
|
- qsgmii
|
||||||
|
- tbi
|
||||||
|
- rev-mii
|
||||||
|
- rmii
|
||||||
|
|
||||||
|
# RX and TX delays are added by the MAC when required
|
||||||
|
- rgmii
|
||||||
|
|
||||||
|
# RGMII with internal RX and TX delays provided by the PHY,
|
||||||
|
# the MAC should not add the RX or TX delays in this case
|
||||||
|
- rgmii-id
|
||||||
|
|
||||||
|
# RGMII with internal RX delay provided by the PHY, the MAC
|
||||||
|
# should not add an RX delay in this case
|
||||||
|
- rgmii-rxid
|
||||||
|
|
||||||
|
# RGMII with internal TX delay provided by the PHY, the MAC
|
||||||
|
# should not add an TX delay in this case
|
||||||
|
- rgmii-txid
|
||||||
|
- rtbi
|
||||||
|
- smii
|
||||||
|
- xgmii
|
||||||
|
- trgmii
|
||||||
|
- 1000base-x
|
||||||
|
- 2500base-x
|
||||||
|
- rxaui
|
||||||
|
- xaui
|
||||||
|
|
||||||
|
# 10GBASE-KR, XFI, SFI
|
||||||
|
- 10gbase-kr
|
||||||
|
- usxgmii
|
||||||
|
|
||||||
|
phy-mode:
|
||||||
|
$ref: "#/properties/phy-connection-type"
|
||||||
|
|
||||||
|
phy-handle:
|
||||||
|
$ref: /schemas/types.yaml#definitions/phandle
|
||||||
|
description:
|
||||||
|
Specifies a reference to a node representing a PHY device.
|
||||||
|
|
||||||
|
phy:
|
||||||
|
$ref: "#/properties/phy-handle"
|
||||||
|
deprecated: true
|
||||||
|
|
||||||
|
phy-device:
|
||||||
|
$ref: "#/properties/phy-handle"
|
||||||
|
deprecated: true
|
||||||
|
|
||||||
|
rx-fifo-depth:
|
||||||
|
$ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
description:
|
||||||
|
The size of the controller\'s receive fifo in bytes. This is used
|
||||||
|
for components that can have configurable receive fifo sizes,
|
||||||
|
and is useful for determining certain configuration settings
|
||||||
|
such as flow control thresholds.
|
||||||
|
|
||||||
|
tx-fifo-depth:
|
||||||
|
$ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
description:
|
||||||
|
The size of the controller\'s transmit fifo in bytes. This
|
||||||
|
is used for components that can have configurable fifo sizes.
|
||||||
|
|
||||||
|
managed:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/string
|
||||||
|
- default: auto
|
||||||
|
enum:
|
||||||
|
- auto
|
||||||
|
- in-band-status
|
||||||
|
description:
|
||||||
|
Specifies the PHY management type. If auto is set and fixed-link
|
||||||
|
is not specified, it uses MDIO for management.
|
||||||
|
|
||||||
|
fixed-link:
|
||||||
|
allOf:
|
||||||
|
- if:
|
||||||
|
type: array
|
||||||
|
then:
|
||||||
|
deprecated: true
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 1
|
||||||
|
items:
|
||||||
|
items:
|
||||||
|
- minimum: 0
|
||||||
|
maximum: 31
|
||||||
|
description:
|
||||||
|
Emulated PHY ID, choose any but unique to the all
|
||||||
|
specified fixed-links
|
||||||
|
|
||||||
|
- enum: [0, 1]
|
||||||
|
description:
|
||||||
|
Duplex configuration. 0 for half duplex or 1 for
|
||||||
|
full duplex
|
||||||
|
|
||||||
|
- enum: [10, 100, 1000]
|
||||||
|
description:
|
||||||
|
Link speed in Mbits/sec.
|
||||||
|
|
||||||
|
- enum: [0, 1]
|
||||||
|
description:
|
||||||
|
Pause configuration. 0 for no pause, 1 for pause
|
||||||
|
|
||||||
|
- enum: [0, 1]
|
||||||
|
description:
|
||||||
|
Asymmetric pause configuration. 0 for no asymmetric
|
||||||
|
pause, 1 for asymmetric pause
|
||||||
|
|
||||||
|
|
||||||
|
- if:
|
||||||
|
type: object
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
speed:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
- enum: [10, 100, 1000]
|
||||||
|
description:
|
||||||
|
Link speed.
|
||||||
|
|
||||||
|
full-duplex:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Indicates that full-duplex is used. When absent, half
|
||||||
|
duplex is assumed.
|
||||||
|
|
||||||
|
asym-pause:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Indicates that asym_pause should be enabled.
|
||||||
|
|
||||||
|
link-gpios:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
GPIO to determine if the link is up
|
||||||
|
|
||||||
|
required:
|
||||||
|
- speed
|
||||||
|
|
||||||
|
...
|
|
@ -0,0 +1,177 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/ethernet-phy.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Ethernet PHY Generic Binding
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Andrew Lunn <andrew@lunn.ch>
|
||||||
|
- Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
- Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
|
|
||||||
|
# The dt-schema tools will generate a select statement first by using
|
||||||
|
# the compatible, and second by using the node name if any. In our
|
||||||
|
# case, the node name is the one we want to match on, while the
|
||||||
|
# compatible is optional.
|
||||||
|
select:
|
||||||
|
properties:
|
||||||
|
$nodename:
|
||||||
|
pattern: "^ethernet-phy(@[a-f0-9]+)?$"
|
||||||
|
|
||||||
|
required:
|
||||||
|
- $nodename
|
||||||
|
|
||||||
|
properties:
|
||||||
|
$nodename:
|
||||||
|
pattern: "^ethernet-phy(@[a-f0-9]+)?$"
|
||||||
|
|
||||||
|
compatible:
|
||||||
|
oneOf:
|
||||||
|
- const: ethernet-phy-ieee802.3-c22
|
||||||
|
description: PHYs that implement IEEE802.3 clause 22
|
||||||
|
- const: ethernet-phy-ieee802.3-c45
|
||||||
|
description: PHYs that implement IEEE802.3 clause 45
|
||||||
|
- pattern: "^ethernet-phy-id[a-f0-9]{4}\\.[a-f0-9]{4}$"
|
||||||
|
description:
|
||||||
|
If the PHY reports an incorrect ID (or none at all) then the
|
||||||
|
compatible list may contain an entry with the correct PHY ID
|
||||||
|
in the above form.
|
||||||
|
The first group of digits is the 16 bit Phy Identifier 1
|
||||||
|
register, this is the chip vendor OUI bits 3:18. The
|
||||||
|
second group of digits is the Phy Identifier 2 register,
|
||||||
|
this is the chip vendor OUI bits 19:24, followed by 10
|
||||||
|
bits of a vendor specific ID.
|
||||||
|
- items:
|
||||||
|
- pattern: "^ethernet-phy-id[a-f0-9]{4}\\.[a-f0-9]{4}$"
|
||||||
|
- const: ethernet-phy-ieee802.3-c45
|
||||||
|
|
||||||
|
reg:
|
||||||
|
minimum: 0
|
||||||
|
maximum: 31
|
||||||
|
description:
|
||||||
|
The ID number for the PHY.
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
max-speed:
|
||||||
|
enum:
|
||||||
|
- 10
|
||||||
|
- 100
|
||||||
|
- 1000
|
||||||
|
- 2500
|
||||||
|
- 5000
|
||||||
|
- 10000
|
||||||
|
- 20000
|
||||||
|
- 25000
|
||||||
|
- 40000
|
||||||
|
- 50000
|
||||||
|
- 56000
|
||||||
|
- 100000
|
||||||
|
- 200000
|
||||||
|
description:
|
||||||
|
Maximum PHY supported speed in Mbits / seconds.
|
||||||
|
|
||||||
|
broken-turn-around:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
If set, indicates the PHY device does not correctly release
|
||||||
|
the turn around line low at the end of a MDIO transaction.
|
||||||
|
|
||||||
|
enet-phy-lane-swap:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
If set, indicates the PHY will swap the TX/RX lanes to
|
||||||
|
compensate for the board being designed with the lanes
|
||||||
|
swapped.
|
||||||
|
|
||||||
|
eee-broken-100tx:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Mark the corresponding energy efficient ethernet mode as
|
||||||
|
broken and request the ethernet to stop advertising it.
|
||||||
|
|
||||||
|
eee-broken-1000t:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Mark the corresponding energy efficient ethernet mode as
|
||||||
|
broken and request the ethernet to stop advertising it.
|
||||||
|
|
||||||
|
eee-broken-10gt:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Mark the corresponding energy efficient ethernet mode as
|
||||||
|
broken and request the ethernet to stop advertising it.
|
||||||
|
|
||||||
|
eee-broken-1000kx:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Mark the corresponding energy efficient ethernet mode as
|
||||||
|
broken and request the ethernet to stop advertising it.
|
||||||
|
|
||||||
|
eee-broken-10gkx4:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Mark the corresponding energy efficient ethernet mode as
|
||||||
|
broken and request the ethernet to stop advertising it.
|
||||||
|
|
||||||
|
eee-broken-10gkr:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Mark the corresponding energy efficient ethernet mode as
|
||||||
|
broken and request the ethernet to stop advertising it.
|
||||||
|
|
||||||
|
phy-is-integrated:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
If set, indicates that the PHY is integrated into the same
|
||||||
|
physical package as the Ethernet MAC. If needed, muxers
|
||||||
|
should be configured to ensure the integrated PHY is
|
||||||
|
used. The absence of this property indicates the muxers
|
||||||
|
should be configured so that the external PHY is used.
|
||||||
|
|
||||||
|
resets:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
reset-names:
|
||||||
|
const: phy
|
||||||
|
|
||||||
|
reset-gpios:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
The GPIO phandle and specifier for the PHY reset signal.
|
||||||
|
|
||||||
|
reset-assert-us:
|
||||||
|
description:
|
||||||
|
Delay after the reset was asserted in microseconds. If this
|
||||||
|
property is missing the delay will be skipped.
|
||||||
|
|
||||||
|
reset-deassert-us:
|
||||||
|
description:
|
||||||
|
Delay after the reset was deasserted in microseconds. If
|
||||||
|
this property is missing the delay will be skipped.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- reg
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
ethernet {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ethernet-phy@0 {
|
||||||
|
compatible = "ethernet-phy-id0141.0e90", "ethernet-phy-ieee802.3-c45";
|
||||||
|
interrupt-parent = <&PIC>;
|
||||||
|
interrupts = <35 1>;
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
resets = <&rst 8>;
|
||||||
|
reset-names = "phy";
|
||||||
|
reset-gpios = <&gpio1 4 1>;
|
||||||
|
reset-assert-us = <1000>;
|
||||||
|
reset-deassert-us = <2000>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,68 +1 @@
|
||||||
The following properties are common to the Ethernet controllers:
|
This file has moved to ethernet-controller.yaml.
|
||||||
|
|
||||||
NOTE: All 'phy*' properties documented below are Ethernet specific. For the
|
|
||||||
generic PHY 'phys' property, see
|
|
||||||
Documentation/devicetree/bindings/phy/phy-bindings.txt.
|
|
||||||
|
|
||||||
- mac-address: array of 6 bytes, specifies the MAC address that was last used by
|
|
||||||
the boot program; should be used in cases where the MAC address assigned to
|
|
||||||
the device by the boot program is different from the "local-mac-address"
|
|
||||||
property;
|
|
||||||
- local-mac-address: array of 6 bytes, specifies the MAC address that was
|
|
||||||
assigned to the network device;
|
|
||||||
- nvmem-cells: phandle, reference to an nvmem node for the MAC address
|
|
||||||
- nvmem-cell-names: string, should be "mac-address" if nvmem is to be used
|
|
||||||
- max-speed: number, specifies maximum speed in Mbit/s supported by the device;
|
|
||||||
- max-frame-size: number, maximum transfer unit (IEEE defined MTU), rather than
|
|
||||||
the maximum frame size (there's contradiction in the Devicetree
|
|
||||||
Specification).
|
|
||||||
- phy-mode: string, operation mode of the PHY interface. This is now a de-facto
|
|
||||||
standard property; supported values are:
|
|
||||||
* "internal" (Internal means there is not a standard bus between the MAC and
|
|
||||||
the PHY, something proprietary is being used to embed the PHY in the MAC.)
|
|
||||||
* "mii"
|
|
||||||
* "gmii"
|
|
||||||
* "sgmii"
|
|
||||||
* "qsgmii"
|
|
||||||
* "tbi"
|
|
||||||
* "rev-mii"
|
|
||||||
* "rmii"
|
|
||||||
* "rgmii" (RX and TX delays are added by the MAC when required)
|
|
||||||
* "rgmii-id" (RGMII with internal RX and TX delays provided by the PHY, the
|
|
||||||
MAC should not add the RX or TX delays in this case)
|
|
||||||
* "rgmii-rxid" (RGMII with internal RX delay provided by the PHY, the MAC
|
|
||||||
should not add an RX delay in this case)
|
|
||||||
* "rgmii-txid" (RGMII with internal TX delay provided by the PHY, the MAC
|
|
||||||
should not add an TX delay in this case)
|
|
||||||
* "rtbi"
|
|
||||||
* "smii"
|
|
||||||
* "xgmii"
|
|
||||||
* "trgmii"
|
|
||||||
* "1000base-x",
|
|
||||||
* "2500base-x",
|
|
||||||
* "rxaui"
|
|
||||||
* "xaui"
|
|
||||||
* "10gbase-kr" (10GBASE-KR, XFI, SFI)
|
|
||||||
* "usxgmii"
|
|
||||||
- phy-connection-type: the same as "phy-mode" property but described in the
|
|
||||||
Devicetree Specification;
|
|
||||||
- phy-handle: phandle, specifies a reference to a node representing a PHY
|
|
||||||
device; this property is described in the Devicetree Specification and so
|
|
||||||
preferred;
|
|
||||||
- phy: the same as "phy-handle" property, not recommended for new bindings.
|
|
||||||
- phy-device: the same as "phy-handle" property, not recommended for new
|
|
||||||
bindings.
|
|
||||||
- rx-fifo-depth: the size of the controller's receive fifo in bytes. This
|
|
||||||
is used for components that can have configurable receive fifo sizes,
|
|
||||||
and is useful for determining certain configuration settings such as
|
|
||||||
flow control thresholds.
|
|
||||||
- tx-fifo-depth: the size of the controller's transmit fifo in bytes. This
|
|
||||||
is used for components that can have configurable fifo sizes.
|
|
||||||
- managed: string, specifies the PHY management type. Supported values are:
|
|
||||||
"auto", "in-band-status". "auto" is the default, it usess MDIO for
|
|
||||||
management if fixed-link is not specified.
|
|
||||||
|
|
||||||
Child nodes of the Ethernet controller are typically the individual PHY devices
|
|
||||||
connected via the MDIO bus (sometimes the MDIO bus controller is separate).
|
|
||||||
They are described in the phy.txt file in this same directory.
|
|
||||||
For non-MDIO PHY management see fixed-link.txt.
|
|
||||||
|
|
|
@ -1,54 +1 @@
|
||||||
Fixed link Device Tree binding
|
This file has moved to ethernet-controller.yaml.
|
||||||
------------------------------
|
|
||||||
|
|
||||||
Some Ethernet MACs have a "fixed link", and are not connected to a
|
|
||||||
normal MDIO-managed PHY device. For those situations, a Device Tree
|
|
||||||
binding allows to describe a "fixed link".
|
|
||||||
|
|
||||||
Such a fixed link situation is described by creating a 'fixed-link'
|
|
||||||
sub-node of the Ethernet MAC device node, with the following
|
|
||||||
properties:
|
|
||||||
|
|
||||||
* 'speed' (integer, mandatory), to indicate the link speed. Accepted
|
|
||||||
values are 10, 100 and 1000
|
|
||||||
* 'full-duplex' (boolean, optional), to indicate that full duplex is
|
|
||||||
used. When absent, half duplex is assumed.
|
|
||||||
* 'pause' (boolean, optional), to indicate that pause should be
|
|
||||||
enabled.
|
|
||||||
* 'asym-pause' (boolean, optional), to indicate that asym_pause should
|
|
||||||
be enabled.
|
|
||||||
* 'link-gpios' ('gpio-list', optional), to indicate if a gpio can be read
|
|
||||||
to determine if the link is up.
|
|
||||||
|
|
||||||
Old, deprecated 'fixed-link' binding:
|
|
||||||
|
|
||||||
* A 'fixed-link' property in the Ethernet MAC node, with 5 cells, of the
|
|
||||||
form <a b c d e> with the following accepted values:
|
|
||||||
- a: emulated PHY ID, choose any but but unique to the all specified
|
|
||||||
fixed-links, from 0 to 31
|
|
||||||
- b: duplex configuration: 0 for half duplex, 1 for full duplex
|
|
||||||
- c: link speed in Mbits/sec, accepted values are: 10, 100 and 1000
|
|
||||||
- d: pause configuration: 0 for no pause, 1 for pause
|
|
||||||
- e: asymmetric pause configuration: 0 for no asymmetric pause, 1 for
|
|
||||||
asymmetric pause
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
ethernet@0 {
|
|
||||||
...
|
|
||||||
fixed-link {
|
|
||||||
speed = <1000>;
|
|
||||||
full-duplex;
|
|
||||||
};
|
|
||||||
...
|
|
||||||
};
|
|
||||||
|
|
||||||
ethernet@1 {
|
|
||||||
...
|
|
||||||
fixed-link {
|
|
||||||
speed = <1000>;
|
|
||||||
pause;
|
|
||||||
link-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
|
|
||||||
};
|
|
||||||
...
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,37 +1 @@
|
||||||
Common MDIO bus properties.
|
This file has moved to mdio.yaml.
|
||||||
|
|
||||||
These are generic properties that can apply to any MDIO bus.
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- reset-gpios: One GPIO that control the RESET lines of all PHYs on that MDIO
|
|
||||||
bus.
|
|
||||||
- reset-delay-us: RESET pulse width in microseconds.
|
|
||||||
|
|
||||||
A list of child nodes, one per device on the bus is expected. These
|
|
||||||
should follow the generic phy.txt, or a device specific binding document.
|
|
||||||
|
|
||||||
The 'reset-delay-us' indicates the RESET signal pulse width in microseconds and
|
|
||||||
applies to all PHY devices. It must therefore be appropriately determined based
|
|
||||||
on all PHY requirements (maximum value of all per-PHY RESET pulse widths).
|
|
||||||
|
|
||||||
Example :
|
|
||||||
This example shows these optional properties, plus other properties
|
|
||||||
required for the TI Davinci MDIO driver.
|
|
||||||
|
|
||||||
davinci_mdio: ethernet@5c030000 {
|
|
||||||
compatible = "ti,davinci_mdio";
|
|
||||||
reg = <0x5c030000 0x1000>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
reset-gpios = <&gpio2 5 GPIO_ACTIVE_LOW>;
|
|
||||||
reset-delay-us = <2>;
|
|
||||||
|
|
||||||
ethphy0: ethernet-phy@1 {
|
|
||||||
reg = <1>;
|
|
||||||
};
|
|
||||||
|
|
||||||
ethphy1: ethernet-phy@3 {
|
|
||||||
reg = <3>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/mdio.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: MDIO Bus Generic Binding
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Andrew Lunn <andrew@lunn.ch>
|
||||||
|
- Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
- Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
|
|
||||||
|
description:
|
||||||
|
These are generic properties that can apply to any MDIO bus. Any
|
||||||
|
MDIO bus must have a list of child nodes, one per device on the
|
||||||
|
bus. These should follow the generic ethernet-phy.yaml document, or
|
||||||
|
a device specific binding document.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
$nodename:
|
||||||
|
pattern: "^mdio(@.*)?"
|
||||||
|
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
"#size-cells":
|
||||||
|
const: 0
|
||||||
|
|
||||||
|
reset-gpios:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
The phandle and specifier for the GPIO that controls the RESET
|
||||||
|
lines of all PHYs on that MDIO bus.
|
||||||
|
|
||||||
|
reset-delay-us:
|
||||||
|
description:
|
||||||
|
RESET pulse width in microseconds. It applies to all PHY devices
|
||||||
|
and must therefore be appropriately determined based on all PHY
|
||||||
|
requirements (maximum value of all per-PHY RESET pulse widths).
|
||||||
|
|
||||||
|
patternProperties:
|
||||||
|
"^ethernet-phy@[0-9a-f]+$":
|
||||||
|
type: object
|
||||||
|
|
||||||
|
properties:
|
||||||
|
reg:
|
||||||
|
minimum: 0
|
||||||
|
maximum: 31
|
||||||
|
description:
|
||||||
|
The ID number for the PHY.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- reg
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
davinci_mdio: mdio@5c030000 {
|
||||||
|
compatible = "ti,davinci_mdio";
|
||||||
|
reg = <0x5c030000 0x1000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
reset-gpios = <&gpio2 5 1>;
|
||||||
|
reset-delay-us = <2>;
|
||||||
|
|
||||||
|
ethphy0: ethernet-phy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethphy1: ethernet-phy@3 {
|
||||||
|
reg = <3>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,79 +1 @@
|
||||||
PHY nodes
|
This file has moved to ethernet-phy.yaml.
|
||||||
|
|
||||||
Required properties:
|
|
||||||
|
|
||||||
- interrupts : interrupt specifier for the sole interrupt.
|
|
||||||
- reg : The ID number for the phy, usually a small integer
|
|
||||||
|
|
||||||
Optional Properties:
|
|
||||||
|
|
||||||
- compatible: Compatible list, may contain
|
|
||||||
"ethernet-phy-ieee802.3-c22" or "ethernet-phy-ieee802.3-c45" for
|
|
||||||
PHYs that implement IEEE802.3 clause 22 or IEEE802.3 clause 45
|
|
||||||
specifications. If neither of these are specified, the default is to
|
|
||||||
assume clause 22.
|
|
||||||
|
|
||||||
If the PHY reports an incorrect ID (or none at all) then the
|
|
||||||
"compatible" list may contain an entry with the correct PHY ID in the
|
|
||||||
form: "ethernet-phy-idAAAA.BBBB" where
|
|
||||||
AAAA - The value of the 16 bit Phy Identifier 1 register as
|
|
||||||
4 hex digits. This is the chip vendor OUI bits 3:18
|
|
||||||
BBBB - The value of the 16 bit Phy Identifier 2 register as
|
|
||||||
4 hex digits. This is the chip vendor OUI bits 19:24,
|
|
||||||
followed by 10 bits of a vendor specific ID.
|
|
||||||
|
|
||||||
The compatible list should not contain other values than those
|
|
||||||
listed here.
|
|
||||||
|
|
||||||
- max-speed: Maximum PHY supported speed (10, 100, 1000...)
|
|
||||||
|
|
||||||
- broken-turn-around: If set, indicates the PHY device does not correctly
|
|
||||||
release the turn around line low at the end of a MDIO transaction.
|
|
||||||
|
|
||||||
- enet-phy-lane-swap: If set, indicates the PHY will swap the TX/RX lanes to
|
|
||||||
compensate for the board being designed with the lanes swapped.
|
|
||||||
|
|
||||||
- enet-phy-lane-no-swap: If set, indicates that PHY will disable swap of the
|
|
||||||
TX/RX lanes. This property allows the PHY to work correcly after e.g. wrong
|
|
||||||
bootstrap configuration caused by issues in PCB layout design.
|
|
||||||
|
|
||||||
- eee-broken-100tx:
|
|
||||||
- eee-broken-1000t:
|
|
||||||
- eee-broken-10gt:
|
|
||||||
- eee-broken-1000kx:
|
|
||||||
- eee-broken-10gkx4:
|
|
||||||
- eee-broken-10gkr:
|
|
||||||
Mark the corresponding energy efficient ethernet mode as broken and
|
|
||||||
request the ethernet to stop advertising it.
|
|
||||||
|
|
||||||
- phy-is-integrated: If set, indicates that the PHY is integrated into the same
|
|
||||||
physical package as the Ethernet MAC. If needed, muxers should be configured
|
|
||||||
to ensure the integrated PHY is used. The absence of this property indicates
|
|
||||||
the muxers should be configured so that the external PHY is used.
|
|
||||||
|
|
||||||
- resets: The reset-controller phandle and specifier for the PHY reset signal.
|
|
||||||
|
|
||||||
- reset-names: Must be "phy" for the PHY reset signal.
|
|
||||||
|
|
||||||
- reset-gpios: The GPIO phandle and specifier for the PHY reset signal.
|
|
||||||
|
|
||||||
- reset-assert-us: Delay after the reset was asserted in microseconds.
|
|
||||||
If this property is missing the delay will be skipped.
|
|
||||||
|
|
||||||
- reset-deassert-us: Delay after the reset was deasserted in microseconds.
|
|
||||||
If this property is missing the delay will be skipped.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
ethernet-phy@0 {
|
|
||||||
compatible = "ethernet-phy-id0141.0e90", "ethernet-phy-ieee802.3-c22";
|
|
||||||
interrupt-parent = <&PIC>;
|
|
||||||
interrupts = <35 IRQ_TYPE_EDGE_RISING>;
|
|
||||||
reg = <0>;
|
|
||||||
|
|
||||||
resets = <&rst 8>;
|
|
||||||
reset-names = "phy";
|
|
||||||
reset-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
|
|
||||||
reset-assert-us = <1000>;
|
|
||||||
reset-deassert-us = <2000>;
|
|
||||||
};
|
|
||||||
|
|
|
@ -0,0 +1,411 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/snps,dwmac.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Synopsys DesignWare MAC Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Alexandre Torgue <alexandre.torgue@st.com>
|
||||||
|
- Giuseppe Cavallaro <peppe.cavallaro@st.com>
|
||||||
|
- Jose Abreu <joabreu@synopsys.com>
|
||||||
|
|
||||||
|
# Select every compatible, including the deprecated ones. This way, we
|
||||||
|
# will be able to report a warning when we have that compatible, since
|
||||||
|
# we will validate the node thanks to the select, but won't report it
|
||||||
|
# as a valid value in the compatible property description
|
||||||
|
select:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- snps,dwmac
|
||||||
|
- snps,dwmac-3.50a
|
||||||
|
- snps,dwmac-3.610
|
||||||
|
- snps,dwmac-3.70a
|
||||||
|
- snps,dwmac-3.710
|
||||||
|
- snps,dwmac-4.00
|
||||||
|
- snps,dwmac-4.10a
|
||||||
|
- snps,dwxgmac
|
||||||
|
- snps,dwxgmac-2.10
|
||||||
|
|
||||||
|
# Deprecated
|
||||||
|
- st,spear600-gmac
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
|
||||||
|
properties:
|
||||||
|
|
||||||
|
# We need to include all the compatibles from schemas that will
|
||||||
|
# include that schemas, otherwise compatible won't validate for
|
||||||
|
# those.
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- allwinner,sun7i-a20-gmac
|
||||||
|
- allwinner,sun8i-a83t-emac
|
||||||
|
- allwinner,sun8i-h3-emac
|
||||||
|
- allwinner,sun8i-r40-emac
|
||||||
|
- allwinner,sun8i-v3s-emac
|
||||||
|
- allwinner,sun50i-a64-emac
|
||||||
|
- snps,dwmac
|
||||||
|
- snps,dwmac-3.50a
|
||||||
|
- snps,dwmac-3.610
|
||||||
|
- snps,dwmac-3.70a
|
||||||
|
- snps,dwmac-3.710
|
||||||
|
- snps,dwmac-4.00
|
||||||
|
- snps,dwmac-4.10a
|
||||||
|
- snps,dwxgmac
|
||||||
|
- snps,dwxgmac-2.10
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 3
|
||||||
|
items:
|
||||||
|
- description: Combined signal for various interrupt events
|
||||||
|
- description: The interrupt to manage the remote wake-up packet detection
|
||||||
|
- description: The interrupt that occurs when Rx exits the LPI state
|
||||||
|
|
||||||
|
interrupt-names:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 3
|
||||||
|
items:
|
||||||
|
- const: macirq
|
||||||
|
- const: eth_wake_irq
|
||||||
|
- const: eth_lpi
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 3
|
||||||
|
items:
|
||||||
|
- description: GMAC main clock
|
||||||
|
- description: Peripheral registers interface clock
|
||||||
|
- description:
|
||||||
|
PTP reference clock. This clock is used for programming the
|
||||||
|
Timestamp Addend Register. If not passed then the system
|
||||||
|
clock will be used and this is fine on some platforms.
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
additionalItems: true
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- stmmaceth
|
||||||
|
- pclk
|
||||||
|
- ptp_ref
|
||||||
|
|
||||||
|
resets:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
MAC Reset signal.
|
||||||
|
|
||||||
|
reset-names:
|
||||||
|
const: stmmaceth
|
||||||
|
|
||||||
|
snps,axi-config:
|
||||||
|
$ref: /schemas/types.yaml#definitions/phandle
|
||||||
|
description:
|
||||||
|
AXI BUS Mode parameters. Phandle to a node that can contain the
|
||||||
|
following properties
|
||||||
|
* snps,lpi_en, enable Low Power Interface
|
||||||
|
* snps,xit_frm, unlock on WoL
|
||||||
|
* snps,wr_osr_lmt, max write outstanding req. limit
|
||||||
|
* snps,rd_osr_lmt, max read outstanding req. limit
|
||||||
|
* snps,kbbe, do not cross 1KiB boundary.
|
||||||
|
* snps,blen, this is a vector of supported burst length.
|
||||||
|
* snps,fb, fixed-burst
|
||||||
|
* snps,mb, mixed-burst
|
||||||
|
* snps,rb, rebuild INCRx Burst
|
||||||
|
|
||||||
|
snps,mtl-rx-config:
|
||||||
|
$ref: /schemas/types.yaml#definitions/phandle
|
||||||
|
description:
|
||||||
|
Multiple RX Queues parameters. Phandle to a node that can
|
||||||
|
contain the following properties
|
||||||
|
* snps,rx-queues-to-use, number of RX queues to be used in the
|
||||||
|
driver
|
||||||
|
* Choose one of these RX scheduling algorithms
|
||||||
|
* snps,rx-sched-sp, Strict priority
|
||||||
|
* snps,rx-sched-wsp, Weighted Strict priority
|
||||||
|
* For each RX queue
|
||||||
|
* Choose one of these modes
|
||||||
|
* snps,dcb-algorithm, Queue to be enabled as DCB
|
||||||
|
* snps,avb-algorithm, Queue to be enabled as AVB
|
||||||
|
* snps,map-to-dma-channel, Channel to map
|
||||||
|
* Specifiy specific packet routing
|
||||||
|
* snps,route-avcp, AV Untagged Control packets
|
||||||
|
* snps,route-ptp, PTP Packets
|
||||||
|
* snps,route-dcbcp, DCB Control Packets
|
||||||
|
* snps,route-up, Untagged Packets
|
||||||
|
* snps,route-multi-broad, Multicast & Broadcast Packets
|
||||||
|
* snps,priority, RX queue priority (Range 0x0 to 0xF)
|
||||||
|
|
||||||
|
snps,mtl-tx-config:
|
||||||
|
$ref: /schemas/types.yaml#definitions/phandle
|
||||||
|
description:
|
||||||
|
Multiple TX Queues parameters. Phandle to a node that can
|
||||||
|
contain the following properties
|
||||||
|
* snps,tx-queues-to-use, number of TX queues to be used in the
|
||||||
|
driver
|
||||||
|
* Choose one of these TX scheduling algorithms
|
||||||
|
* snps,tx-sched-wrr, Weighted Round Robin
|
||||||
|
* snps,tx-sched-wfq, Weighted Fair Queuing
|
||||||
|
* snps,tx-sched-dwrr, Deficit Weighted Round Robin
|
||||||
|
* snps,tx-sched-sp, Strict priority
|
||||||
|
* For each TX queue
|
||||||
|
* snps,weight, TX queue weight (if using a DCB weight
|
||||||
|
algorithm)
|
||||||
|
* Choose one of these modes
|
||||||
|
* snps,dcb-algorithm, TX queue will be working in DCB
|
||||||
|
* snps,avb-algorithm, TX queue will be working in AVB
|
||||||
|
[Attention] Queue 0 is reserved for legacy traffic
|
||||||
|
and so no AVB is available in this queue.
|
||||||
|
* Configure Credit Base Shaper (if AVB Mode selected)
|
||||||
|
* snps,send_slope, enable Low Power Interface
|
||||||
|
* snps,idle_slope, unlock on WoL
|
||||||
|
* snps,high_credit, max write outstanding req. limit
|
||||||
|
* snps,low_credit, max read outstanding req. limit
|
||||||
|
* snps,priority, TX queue priority (Range 0x0 to 0xF)
|
||||||
|
|
||||||
|
snps,reset-gpio:
|
||||||
|
deprecated: true
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
PHY Reset GPIO
|
||||||
|
|
||||||
|
snps,reset-active-low:
|
||||||
|
deprecated: true
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Indicates that the PHY Reset is active low
|
||||||
|
|
||||||
|
snps,reset-delays-us:
|
||||||
|
deprecated: true
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/uint32-array
|
||||||
|
- minItems: 3
|
||||||
|
maxItems: 3
|
||||||
|
description:
|
||||||
|
Triplet of delays. The 1st cell is reset pre-delay in micro
|
||||||
|
seconds. The 2nd cell is reset pulse in micro seconds. The 3rd
|
||||||
|
cell is reset post-delay in micro seconds.
|
||||||
|
|
||||||
|
snps,aal:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Use Address-Aligned Beats
|
||||||
|
|
||||||
|
snps,fixed-burst:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Program the DMA to use the fixed burst mode
|
||||||
|
|
||||||
|
snps,mixed-burst:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Program the DMA to use the mixed burst mode
|
||||||
|
|
||||||
|
snps,force_thresh_dma_mode:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Force DMA to use the threshold mode for both tx and rx
|
||||||
|
|
||||||
|
snps,force_sf_dma_mode:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Force DMA to use the Store and Forward mode for both tx and
|
||||||
|
rx. This flag is ignored if force_thresh_dma_mode is set.
|
||||||
|
|
||||||
|
snps,en-tx-lpi-clockgating:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Enable gating of the MAC TX clock during TX low-power mode
|
||||||
|
|
||||||
|
snps,multicast-filter-bins:
|
||||||
|
$ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
description:
|
||||||
|
Number of multicast filter hash bins supported by this device
|
||||||
|
instance
|
||||||
|
|
||||||
|
snps,perfect-filter-entries:
|
||||||
|
$ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
description:
|
||||||
|
Number of perfect filter entries supported by this device
|
||||||
|
instance
|
||||||
|
|
||||||
|
snps,ps-speed:
|
||||||
|
$ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
description:
|
||||||
|
Port selection speed that can be passed to the core when PCS
|
||||||
|
is supported. For example, this is used in case of SGMII and
|
||||||
|
MAC2MAC connection.
|
||||||
|
|
||||||
|
mdio:
|
||||||
|
type: object
|
||||||
|
description:
|
||||||
|
Creates and registers an MDIO bus.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: snps,dwmac-mdio
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- interrupt-names
|
||||||
|
- phy-mode
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
snps,reset-active-low: ["snps,reset-gpio"]
|
||||||
|
snps,reset-delay-us: ["snps,reset-gpio"]
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: "ethernet-controller.yaml#"
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- allwinner,sun7i-a20-gmac
|
||||||
|
- allwinner,sun8i-a83t-emac
|
||||||
|
- allwinner,sun8i-h3-emac
|
||||||
|
- allwinner,sun8i-r40-emac
|
||||||
|
- allwinner,sun8i-v3s-emac
|
||||||
|
- allwinner,sun50i-a64-emac
|
||||||
|
- snps,dwxgmac
|
||||||
|
- snps,dwxgmac-2.10
|
||||||
|
- st,spear600-gmac
|
||||||
|
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
snps,pbl:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
- enum: [2, 4, 8]
|
||||||
|
description:
|
||||||
|
Programmable Burst Length (tx and rx)
|
||||||
|
|
||||||
|
snps,txpbl:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
- enum: [2, 4, 8]
|
||||||
|
description:
|
||||||
|
Tx Programmable Burst Length. If set, DMA tx will use this
|
||||||
|
value rather than snps,pbl.
|
||||||
|
|
||||||
|
snps,rxpbl:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#definitions/uint32
|
||||||
|
- enum: [2, 4, 8]
|
||||||
|
description:
|
||||||
|
Rx Programmable Burst Length. If set, DMA rx will use this
|
||||||
|
value rather than snps,pbl.
|
||||||
|
|
||||||
|
snps,no-pbl-x8:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Don\'t multiply the pbl/txpbl/rxpbl values by 8. For core
|
||||||
|
rev < 3.50, don\'t multiply the values by 4.
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- allwinner,sun7i-a20-gmac
|
||||||
|
- allwinner,sun8i-a83t-emac
|
||||||
|
- allwinner,sun8i-h3-emac
|
||||||
|
- allwinner,sun8i-r40-emac
|
||||||
|
- allwinner,sun8i-v3s-emac
|
||||||
|
- allwinner,sun50i-a64-emac
|
||||||
|
- snps,dwmac-4.00
|
||||||
|
- snps,dwmac-4.10a
|
||||||
|
- snps,dwxgmac
|
||||||
|
- snps,dwxgmac-2.10
|
||||||
|
- st,spear600-gmac
|
||||||
|
|
||||||
|
then:
|
||||||
|
snps,tso:
|
||||||
|
$ref: /schemas/types.yaml#definitions/flag
|
||||||
|
description:
|
||||||
|
Enables the TSO feature otherwise it will be managed by
|
||||||
|
MAC HW capability register.
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
stmmac_axi_setup: stmmac-axi-config {
|
||||||
|
snps,wr_osr_lmt = <0xf>;
|
||||||
|
snps,rd_osr_lmt = <0xf>;
|
||||||
|
snps,blen = <256 128 64 32 0 0 0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
mtl_rx_setup: rx-queues-config {
|
||||||
|
snps,rx-queues-to-use = <1>;
|
||||||
|
snps,rx-sched-sp;
|
||||||
|
queue0 {
|
||||||
|
snps,dcb-algorithm;
|
||||||
|
snps,map-to-dma-channel = <0x0>;
|
||||||
|
snps,priority = <0x0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mtl_tx_setup: tx-queues-config {
|
||||||
|
snps,tx-queues-to-use = <2>;
|
||||||
|
snps,tx-sched-wrr;
|
||||||
|
queue0 {
|
||||||
|
snps,weight = <0x10>;
|
||||||
|
snps,dcb-algorithm;
|
||||||
|
snps,priority = <0x0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
queue1 {
|
||||||
|
snps,avb-algorithm;
|
||||||
|
snps,send_slope = <0x1000>;
|
||||||
|
snps,idle_slope = <0x1000>;
|
||||||
|
snps,high_credit = <0x3E800>;
|
||||||
|
snps,low_credit = <0xFFC18000>;
|
||||||
|
snps,priority = <0x1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gmac0: ethernet@e0800000 {
|
||||||
|
compatible = "snps,dwxgmac-2.10", "snps,dwxgmac";
|
||||||
|
reg = <0xe0800000 0x8000>;
|
||||||
|
interrupt-parent = <&vic1>;
|
||||||
|
interrupts = <24 23 22>;
|
||||||
|
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
||||||
|
mac-address = [000000000000]; /* Filled in by U-Boot */
|
||||||
|
max-frame-size = <3800>;
|
||||||
|
phy-mode = "gmii";
|
||||||
|
snps,multicast-filter-bins = <256>;
|
||||||
|
snps,perfect-filter-entries = <128>;
|
||||||
|
rx-fifo-depth = <16384>;
|
||||||
|
tx-fifo-depth = <16384>;
|
||||||
|
clocks = <&clock>;
|
||||||
|
clock-names = "stmmaceth";
|
||||||
|
snps,axi-config = <&stmmac_axi_setup>;
|
||||||
|
snps,mtl-rx-config = <&mtl_rx_setup>;
|
||||||
|
snps,mtl-tx-config = <&mtl_tx_setup>;
|
||||||
|
mdio0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "snps,dwmac-mdio";
|
||||||
|
phy1: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# FIXME: We should set it, but it would report all the generic
|
||||||
|
# properties as additional properties.
|
||||||
|
# additionalProperties: false
|
||||||
|
|
||||||
|
...
|
|
@ -1,178 +1 @@
|
||||||
* STMicroelectronics 10/100/1000/2500/10000 Ethernet (GMAC/XGMAC)
|
This file has moved to snps,dwmac.yaml.
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: Should be "snps,dwmac-<ip_version>", "snps,dwmac" or
|
|
||||||
"snps,dwxgmac-<ip_version>", "snps,dwxgmac".
|
|
||||||
For backwards compatibility: "st,spear600-gmac" is also supported.
|
|
||||||
- reg: Address and length of the register set for the device
|
|
||||||
- interrupts: Should contain the STMMAC interrupts
|
|
||||||
- interrupt-names: Should contain a list of interrupt names corresponding to
|
|
||||||
the interrupts in the interrupts property, if available.
|
|
||||||
Valid interrupt names are:
|
|
||||||
- "macirq" (combined signal for various interrupt events)
|
|
||||||
- "eth_wake_irq" (the interrupt to manage the remote wake-up packet detection)
|
|
||||||
- "eth_lpi" (the interrupt that occurs when Rx exits the LPI state)
|
|
||||||
- phy-mode: See ethernet.txt file in the same directory.
|
|
||||||
- snps,reset-gpio gpio number for phy reset.
|
|
||||||
- snps,reset-active-low boolean flag to indicate if phy reset is active low.
|
|
||||||
- snps,reset-delays-us is triplet of delays
|
|
||||||
The 1st cell is reset pre-delay in micro seconds.
|
|
||||||
The 2nd cell is reset pulse in micro seconds.
|
|
||||||
The 3rd cell is reset post-delay in micro seconds.
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- resets: Should contain a phandle to the STMMAC reset signal, if any
|
|
||||||
- reset-names: Should contain the reset signal name "stmmaceth", if a
|
|
||||||
reset phandle is given
|
|
||||||
- max-frame-size: See ethernet.txt file in the same directory
|
|
||||||
- clocks: If present, the first clock should be the GMAC main clock and
|
|
||||||
the second clock should be peripheral's register interface clock. Further
|
|
||||||
clocks may be specified in derived bindings.
|
|
||||||
- clock-names: One name for each entry in the clocks property, the
|
|
||||||
first one should be "stmmaceth" and the second one should be "pclk".
|
|
||||||
- ptp_ref: this is the PTP reference clock; in case of the PTP is available
|
|
||||||
this clock is used for programming the Timestamp Addend Register. If not
|
|
||||||
passed then the system clock will be used and this is fine on some
|
|
||||||
platforms.
|
|
||||||
- tx-fifo-depth: See ethernet.txt file in the same directory
|
|
||||||
- rx-fifo-depth: See ethernet.txt file in the same directory
|
|
||||||
- snps,pbl Programmable Burst Length (tx and rx)
|
|
||||||
- snps,txpbl Tx Programmable Burst Length. Only for GMAC and newer.
|
|
||||||
If set, DMA tx will use this value rather than snps,pbl.
|
|
||||||
- snps,rxpbl Rx Programmable Burst Length. Only for GMAC and newer.
|
|
||||||
If set, DMA rx will use this value rather than snps,pbl.
|
|
||||||
- snps,no-pbl-x8 Don't multiply the pbl/txpbl/rxpbl values by 8.
|
|
||||||
For core rev < 3.50, don't multiply the values by 4.
|
|
||||||
- snps,aal Address-Aligned Beats
|
|
||||||
- snps,fixed-burst Program the DMA to use the fixed burst mode
|
|
||||||
- snps,mixed-burst Program the DMA to use the mixed burst mode
|
|
||||||
- snps,force_thresh_dma_mode Force DMA to use the threshold mode for
|
|
||||||
both tx and rx
|
|
||||||
- snps,force_sf_dma_mode Force DMA to use the Store and Forward
|
|
||||||
mode for both tx and rx. This flag is
|
|
||||||
ignored if force_thresh_dma_mode is set.
|
|
||||||
- snps,en-tx-lpi-clockgating Enable gating of the MAC TX clock during
|
|
||||||
TX low-power mode
|
|
||||||
- snps,multicast-filter-bins: Number of multicast filter hash bins
|
|
||||||
supported by this device instance
|
|
||||||
- snps,perfect-filter-entries: Number of perfect filter entries supported
|
|
||||||
by this device instance
|
|
||||||
- snps,ps-speed: port selection speed that can be passed to the core when
|
|
||||||
PCS is supported. For example, this is used in case of SGMII
|
|
||||||
and MAC2MAC connection.
|
|
||||||
- snps,tso: this enables the TSO feature otherwise it will be managed by
|
|
||||||
MAC HW capability register. Only for GMAC4 and newer.
|
|
||||||
- AXI BUS Mode parameters: below the list of all the parameters to program the
|
|
||||||
AXI register inside the DMA module:
|
|
||||||
- snps,lpi_en: enable Low Power Interface
|
|
||||||
- snps,xit_frm: unlock on WoL
|
|
||||||
- snps,wr_osr_lmt: max write outstanding req. limit
|
|
||||||
- snps,rd_osr_lmt: max read outstanding req. limit
|
|
||||||
- snps,kbbe: do not cross 1KiB boundary.
|
|
||||||
- snps,blen: this is a vector of supported burst length.
|
|
||||||
- snps,fb: fixed-burst
|
|
||||||
- snps,mb: mixed-burst
|
|
||||||
- snps,rb: rebuild INCRx Burst
|
|
||||||
- mdio: with compatible = "snps,dwmac-mdio", create and register mdio bus.
|
|
||||||
- Multiple RX Queues parameters: below the list of all the parameters to
|
|
||||||
configure the multiple RX queues:
|
|
||||||
- snps,rx-queues-to-use: number of RX queues to be used in the driver
|
|
||||||
- Choose one of these RX scheduling algorithms:
|
|
||||||
- snps,rx-sched-sp: Strict priority
|
|
||||||
- snps,rx-sched-wsp: Weighted Strict priority
|
|
||||||
- For each RX queue
|
|
||||||
- Choose one of these modes:
|
|
||||||
- snps,dcb-algorithm: Queue to be enabled as DCB
|
|
||||||
- snps,avb-algorithm: Queue to be enabled as AVB
|
|
||||||
- snps,map-to-dma-channel: Channel to map
|
|
||||||
- Specifiy specific packet routing:
|
|
||||||
- snps,route-avcp: AV Untagged Control packets
|
|
||||||
- snps,route-ptp: PTP Packets
|
|
||||||
- snps,route-dcbcp: DCB Control Packets
|
|
||||||
- snps,route-up: Untagged Packets
|
|
||||||
- snps,route-multi-broad: Multicast & Broadcast Packets
|
|
||||||
- snps,priority: RX queue priority (Range: 0x0 to 0xF)
|
|
||||||
- Multiple TX Queues parameters: below the list of all the parameters to
|
|
||||||
configure the multiple TX queues:
|
|
||||||
- snps,tx-queues-to-use: number of TX queues to be used in the driver
|
|
||||||
- Choose one of these TX scheduling algorithms:
|
|
||||||
- snps,tx-sched-wrr: Weighted Round Robin
|
|
||||||
- snps,tx-sched-wfq: Weighted Fair Queuing
|
|
||||||
- snps,tx-sched-dwrr: Deficit Weighted Round Robin
|
|
||||||
- snps,tx-sched-sp: Strict priority
|
|
||||||
- For each TX queue
|
|
||||||
- snps,weight: TX queue weight (if using a DCB weight algorithm)
|
|
||||||
- Choose one of these modes:
|
|
||||||
- snps,dcb-algorithm: TX queue will be working in DCB
|
|
||||||
- snps,avb-algorithm: TX queue will be working in AVB
|
|
||||||
[Attention] Queue 0 is reserved for legacy traffic
|
|
||||||
and so no AVB is available in this queue.
|
|
||||||
- Configure Credit Base Shaper (if AVB Mode selected):
|
|
||||||
- snps,send_slope: enable Low Power Interface
|
|
||||||
- snps,idle_slope: unlock on WoL
|
|
||||||
- snps,high_credit: max write outstanding req. limit
|
|
||||||
- snps,low_credit: max read outstanding req. limit
|
|
||||||
- snps,priority: TX queue priority (Range: 0x0 to 0xF)
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
stmmac_axi_setup: stmmac-axi-config {
|
|
||||||
snps,wr_osr_lmt = <0xf>;
|
|
||||||
snps,rd_osr_lmt = <0xf>;
|
|
||||||
snps,blen = <256 128 64 32 0 0 0>;
|
|
||||||
};
|
|
||||||
|
|
||||||
mtl_rx_setup: rx-queues-config {
|
|
||||||
snps,rx-queues-to-use = <1>;
|
|
||||||
snps,rx-sched-sp;
|
|
||||||
queue0 {
|
|
||||||
snps,dcb-algorithm;
|
|
||||||
snps,map-to-dma-channel = <0x0>;
|
|
||||||
snps,priority = <0x0>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
mtl_tx_setup: tx-queues-config {
|
|
||||||
snps,tx-queues-to-use = <2>;
|
|
||||||
snps,tx-sched-wrr;
|
|
||||||
queue0 {
|
|
||||||
snps,weight = <0x10>;
|
|
||||||
snps,dcb-algorithm;
|
|
||||||
snps,priority = <0x0>;
|
|
||||||
};
|
|
||||||
|
|
||||||
queue1 {
|
|
||||||
snps,avb-algorithm;
|
|
||||||
snps,send_slope = <0x1000>;
|
|
||||||
snps,idle_slope = <0x1000>;
|
|
||||||
snps,high_credit = <0x3E800>;
|
|
||||||
snps,low_credit = <0xFFC18000>;
|
|
||||||
snps,priority = <0x1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
gmac0: ethernet@e0800000 {
|
|
||||||
compatible = "st,spear600-gmac";
|
|
||||||
reg = <0xe0800000 0x8000>;
|
|
||||||
interrupt-parent = <&vic1>;
|
|
||||||
interrupts = <24 23 22>;
|
|
||||||
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
|
||||||
mac-address = [000000000000]; /* Filled in by U-Boot */
|
|
||||||
max-frame-size = <3800>;
|
|
||||||
phy-mode = "gmii";
|
|
||||||
snps,multicast-filter-bins = <256>;
|
|
||||||
snps,perfect-filter-entries = <128>;
|
|
||||||
rx-fifo-depth = <16384>;
|
|
||||||
tx-fifo-depth = <16384>;
|
|
||||||
clocks = <&clock>;
|
|
||||||
clock-names = "stmmaceth";
|
|
||||||
snps,axi-config = <&stmmac_axi_setup>;
|
|
||||||
mdio0 {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
compatible = "snps,dwmac-mdio";
|
|
||||||
phy1: ethernet-phy@0 {
|
|
||||||
};
|
|
||||||
};
|
|
||||||
snps,mtl-rx-config = <&mtl_rx_setup>;
|
|
||||||
snps,mtl-tx-config = <&mtl_tx_setup>;
|
|
||||||
};
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ Freescale 83xx and 512x SOCs include the same PCI bridge core.
|
||||||
|
|
||||||
Example (MPC8313ERDB)
|
Example (MPC8313ERDB)
|
||||||
pci0: pci@e0008500 {
|
pci0: pci@e0008500 {
|
||||||
cell-index = <1>;
|
|
||||||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||||
interrupt-map = <
|
interrupt-map = <
|
||||||
/* IDSEL 0x0E -mini PCI */
|
/* IDSEL 0x0E -mini PCI */
|
||||||
|
|
|
@ -213,4 +213,4 @@ pinctrl: pinctrl@f0800000 {
|
||||||
groups = "clkreq";
|
groups = "clkreq";
|
||||||
function = "clkreq";
|
function = "clkreq";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,32 +12,32 @@ unit prefixes.
|
||||||
Time/Frequency
|
Time/Frequency
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
-mhz : megahertz
|
-mhz : megahertz
|
||||||
-hz : Hertz (preferred)
|
-hz : hertz (preferred)
|
||||||
-sec : seconds
|
-sec : second
|
||||||
-ms : milliseconds
|
-ms : millisecond
|
||||||
-us : microseconds
|
-us : microsecond
|
||||||
-ns : nanoseconds
|
-ns : nanosecond
|
||||||
|
|
||||||
Distance
|
Distance
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
-mm : millimeters
|
-mm : millimeter
|
||||||
|
|
||||||
Electricity
|
Electricity
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
-microamp : micro amps
|
-microamp : microampere
|
||||||
-microamp-hours : micro amp-hours
|
-microamp-hours : microampere hour
|
||||||
-ohms : Ohms
|
-ohms : ohm
|
||||||
-micro-ohms : micro Ohms
|
-micro-ohms : microohm
|
||||||
-microwatt-hours: micro Watt-hours
|
-microwatt-hours: microwatt hour
|
||||||
-microvolt : micro volts
|
-microvolt : microvolt
|
||||||
-picofarads : picofarads
|
-picofarads : picofarad
|
||||||
-femtofarads : femtofarads
|
-femtofarads : femtofarad
|
||||||
|
|
||||||
Temperature
|
Temperature
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
-celsius : Degrees Celsius
|
-celsius : degree Celsius
|
||||||
-millicelsius : Degreee milli-Celsius
|
-millicelsius : millidegree Celsius
|
||||||
|
|
||||||
Pressure
|
Pressure
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
-kpascal : kiloPascal
|
-kpascal : kilopascal
|
||||||
|
|
|
@ -121,4 +121,4 @@ Example
|
||||||
regulator-max-microvolt = <5000000>;
|
regulator-max-microvolt = <5000000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,7 +23,12 @@ Required properties:
|
||||||
|
|
||||||
- reg: The base address of the UART register bank.
|
- reg: The base address of the UART register bank.
|
||||||
|
|
||||||
- interrupts: A single interrupt specifier.
|
- interrupts:
|
||||||
|
index 0: an interrupt specifier for the UART controller itself
|
||||||
|
index 1: optional, an interrupt specifier with edge sensitivity on Rx pin to
|
||||||
|
support Rx in-band wake up. If one would like to use this feature,
|
||||||
|
one must create an addtional pinctrl to reconfigure Rx pin to normal
|
||||||
|
GPIO before suspend.
|
||||||
|
|
||||||
- clocks : Must contain an entry for each entry in clock-names.
|
- clocks : Must contain an entry for each entry in clock-names.
|
||||||
See ../clocks/clock-bindings.txt for details.
|
See ../clocks/clock-bindings.txt for details.
|
||||||
|
@ -39,7 +44,11 @@ Example:
|
||||||
uart0: serial@11006000 {
|
uart0: serial@11006000 {
|
||||||
compatible = "mediatek,mt6589-uart", "mediatek,mt6577-uart";
|
compatible = "mediatek,mt6589-uart", "mediatek,mt6577-uart";
|
||||||
reg = <0x11006000 0x400>;
|
reg = <0x11006000 0x400>;
|
||||||
interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_LOW>,
|
||||||
|
<GIC_SPI 52 IRQ_TYPE_EDGE_FALLING>;
|
||||||
clocks = <&uart_clk>, <&bus_clk>;
|
clocks = <&uart_clk>, <&bus_clk>;
|
||||||
clock-names = "baud", "bus";
|
clock-names = "baud", "bus";
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&uart_pin>;
|
||||||
|
pinctrl-1 = <&uart_pin_sleep>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,6 +13,7 @@ Required properties:
|
||||||
- clocks: The input clock of the USART instance
|
- clocks: The input clock of the USART instance
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
- resets: Must contain the phandle to the reset controller.
|
||||||
- pinctrl: The reference on the pins configuration
|
- pinctrl: The reference on the pins configuration
|
||||||
- st,hw-flow-ctrl: bool flag to enable hardware flow control.
|
- st,hw-flow-ctrl: bool flag to enable hardware flow control.
|
||||||
- rs485-rts-delay, rs485-rx-during-tx, rs485-rts-active-low,
|
- rs485-rts-delay, rs485-rx-during-tx, rs485-rts-active-low,
|
||||||
|
|
|
@ -19,4 +19,4 @@ codec: cs42l73@4a {
|
||||||
reg = <0x4a>;
|
reg = <0x4a>;
|
||||||
reset_gpio = <&gpio 10 0>;
|
reset_gpio = <&gpio 10 0>;
|
||||||
chgfreq = <0x05>;
|
chgfreq = <0x05>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,7 +74,7 @@ additionalProperties: false
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
- |
|
- |
|
||||||
ehci@e0000300 {
|
usb@e0000300 {
|
||||||
compatible = "ibm,usb-ehci-440epx", "generic-ehci";
|
compatible = "ibm,usb-ehci-440epx", "generic-ehci";
|
||||||
interrupt-parent = <&UIC0>;
|
interrupt-parent = <&UIC0>;
|
||||||
interrupts = <0x1a 4>;
|
interrupts = <0x1a 4>;
|
||||||
|
@ -89,7 +89,6 @@ examples:
|
||||||
interrupts = <39>;
|
interrupts = <39>;
|
||||||
clocks = <&ahb_gates 1>;
|
clocks = <&ahb_gates 1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
phy-names = "usb";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
|
@ -149,6 +149,8 @@ patternProperties:
|
||||||
description: Broadcom Corporation
|
description: Broadcom Corporation
|
||||||
"^buffalo,.*":
|
"^buffalo,.*":
|
||||||
description: Buffalo, Inc.
|
description: Buffalo, Inc.
|
||||||
|
"^bur,.*":
|
||||||
|
description: B&R Industrial Automation GmbH
|
||||||
"^bticino,.*":
|
"^bticino,.*":
|
||||||
description: Bticino International
|
description: Bticino International
|
||||||
"^calxeda,.*":
|
"^calxeda,.*":
|
||||||
|
@ -177,6 +179,8 @@ patternProperties:
|
||||||
description: Common Hardware Reference Platform
|
description: Common Hardware Reference Platform
|
||||||
"^chunghwa,.*":
|
"^chunghwa,.*":
|
||||||
description: Chunghwa Picture Tubes Ltd.
|
description: Chunghwa Picture Tubes Ltd.
|
||||||
|
"^chuwi,.*":
|
||||||
|
description: Chuwi Innovation Ltd.
|
||||||
"^ciaa,.*":
|
"^ciaa,.*":
|
||||||
description: Computadora Industrial Abierta Argentina
|
description: Computadora Industrial Abierta Argentina
|
||||||
"^cirrus,.*":
|
"^cirrus,.*":
|
||||||
|
@ -187,8 +191,12 @@ patternProperties:
|
||||||
description: Chips&Media, Inc.
|
description: Chips&Media, Inc.
|
||||||
"^cnxt,.*":
|
"^cnxt,.*":
|
||||||
description: Conexant Systems, Inc.
|
description: Conexant Systems, Inc.
|
||||||
|
"^colorfly,.*":
|
||||||
|
description: Colorful GRP, Shenzhen Xueyushi Technology Ltd.
|
||||||
"^compulab,.*":
|
"^compulab,.*":
|
||||||
description: CompuLab Ltd.
|
description: CompuLab Ltd.
|
||||||
|
"^corpro,.*":
|
||||||
|
description: Chengdu Corpro Technology Co., Ltd.
|
||||||
"^cortina,.*":
|
"^cortina,.*":
|
||||||
description: Cortina Systems, Inc.
|
description: Cortina Systems, Inc.
|
||||||
"^cosmic,.*":
|
"^cosmic,.*":
|
||||||
|
@ -201,6 +209,8 @@ patternProperties:
|
||||||
description: Crystalfontz America, Inc.
|
description: Crystalfontz America, Inc.
|
||||||
"^csky,.*":
|
"^csky,.*":
|
||||||
description: Hangzhou C-SKY Microsystems Co., Ltd
|
description: Hangzhou C-SKY Microsystems Co., Ltd
|
||||||
|
"^csq,.*":
|
||||||
|
description: Shenzen Chuangsiqi Technology Co.,Ltd.
|
||||||
"^cubietech,.*":
|
"^cubietech,.*":
|
||||||
description: Cubietech, Ltd.
|
description: Cubietech, Ltd.
|
||||||
"^cypress,.*":
|
"^cypress,.*":
|
||||||
|
@ -221,6 +231,8 @@ patternProperties:
|
||||||
description: Devantech, Ltd.
|
description: Devantech, Ltd.
|
||||||
"^dh,.*":
|
"^dh,.*":
|
||||||
description: DH electronics GmbH
|
description: DH electronics GmbH
|
||||||
|
"^difrnce,.*":
|
||||||
|
description: Shenzhen Yagu Electronic Technology Co., Ltd.
|
||||||
"^digi,.*":
|
"^digi,.*":
|
||||||
description: Digi International Inc.
|
description: Digi International Inc.
|
||||||
"^digilent,.*":
|
"^digilent,.*":
|
||||||
|
@ -243,6 +255,8 @@ patternProperties:
|
||||||
description: DPTechnics
|
description: DPTechnics
|
||||||
"^dragino,.*":
|
"^dragino,.*":
|
||||||
description: Dragino Technology Co., Limited
|
description: Dragino Technology Co., Limited
|
||||||
|
"^dserve,.*":
|
||||||
|
description: dServe Technology B.V.
|
||||||
"^ea,.*":
|
"^ea,.*":
|
||||||
description: Embedded Artists AB
|
description: Embedded Artists AB
|
||||||
"^ebs-systart,.*":
|
"^ebs-systart,.*":
|
||||||
|
@ -265,6 +279,8 @@ patternProperties:
|
||||||
description: Emlid, Ltd.
|
description: Emlid, Ltd.
|
||||||
"^emmicro,.*":
|
"^emmicro,.*":
|
||||||
description: EM Microelectronic
|
description: EM Microelectronic
|
||||||
|
"^empire-electronix,.*":
|
||||||
|
description: Empire Electronix
|
||||||
"^emtrion,.*":
|
"^emtrion,.*":
|
||||||
description: emtrion GmbH
|
description: emtrion GmbH
|
||||||
"^endless,.*":
|
"^endless,.*":
|
||||||
|
@ -279,6 +295,8 @@ patternProperties:
|
||||||
description: Ecole Polytechnique Fédérale de Lausanne
|
description: Ecole Polytechnique Fédérale de Lausanne
|
||||||
"^epson,.*":
|
"^epson,.*":
|
||||||
description: Seiko Epson Corp.
|
description: Seiko Epson Corp.
|
||||||
|
"^esp,.*":
|
||||||
|
description: Espressif Systems Co. Ltd.
|
||||||
"^est,.*":
|
"^est,.*":
|
||||||
description: ESTeem Wireless Modems
|
description: ESTeem Wireless Modems
|
||||||
"^ettus,.*":
|
"^ettus,.*":
|
||||||
|
@ -329,6 +347,8 @@ patternProperties:
|
||||||
description: GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
description: GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
||||||
"^GEFanuc,.*":
|
"^GEFanuc,.*":
|
||||||
description: GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
description: GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
||||||
|
"^gemei,.*":
|
||||||
|
description: Gemei Digital Technology Co., Ltd.
|
||||||
"^geniatech,.*":
|
"^geniatech,.*":
|
||||||
description: Geniatech, Inc.
|
description: Geniatech, Inc.
|
||||||
"^giantec,.*":
|
"^giantec,.*":
|
||||||
|
@ -375,10 +395,14 @@ patternProperties:
|
||||||
description: Honeywell
|
description: Honeywell
|
||||||
"^hp,.*":
|
"^hp,.*":
|
||||||
description: Hewlett Packard
|
description: Hewlett Packard
|
||||||
|
"^hsg,.*":
|
||||||
|
description: HannStar Display Co.
|
||||||
"^holtek,.*":
|
"^holtek,.*":
|
||||||
description: Holtek Semiconductor, Inc.
|
description: Holtek Semiconductor, Inc.
|
||||||
"^hwacom,.*":
|
"^hwacom,.*":
|
||||||
description: HwaCom Systems Inc.
|
description: HwaCom Systems Inc.
|
||||||
|
"^hyundai,.*":
|
||||||
|
description: Hyundai Technology
|
||||||
"^i2se,.*":
|
"^i2se,.*":
|
||||||
description: I2SE GmbH
|
description: I2SE GmbH
|
||||||
"^ibm,.*":
|
"^ibm,.*":
|
||||||
|
@ -393,6 +417,10 @@ patternProperties:
|
||||||
description: ILI Technology Corporation (ILITEK)
|
description: ILI Technology Corporation (ILITEK)
|
||||||
"^img,.*":
|
"^img,.*":
|
||||||
description: Imagination Technologies Ltd.
|
description: Imagination Technologies Ltd.
|
||||||
|
"^incircuit,.*":
|
||||||
|
description: In-Circuit GmbH
|
||||||
|
"^inet-tek,.*":
|
||||||
|
description: Shenzhen iNet Mobile Internet Technology Co., Ltd
|
||||||
"^infineon,.*":
|
"^infineon,.*":
|
||||||
description: Infineon Technologies
|
description: Infineon Technologies
|
||||||
"^inforce,.*":
|
"^inforce,.*":
|
||||||
|
@ -427,6 +455,8 @@ patternProperties:
|
||||||
description: Japan Display Inc.
|
description: Japan Display Inc.
|
||||||
"^jedec,.*":
|
"^jedec,.*":
|
||||||
description: JEDEC Solid State Technology Association
|
description: JEDEC Solid State Technology Association
|
||||||
|
"^jesurun,.*":
|
||||||
|
description: Shenzhen Jesurun Electronics Business Dept.
|
||||||
"^jianda,.*":
|
"^jianda,.*":
|
||||||
description: Jiandangjing Technology Co., Ltd.
|
description: Jiandangjing Technology Co., Ltd.
|
||||||
"^karo,.*":
|
"^karo,.*":
|
||||||
|
@ -451,6 +481,8 @@ patternProperties:
|
||||||
description: Rakuten Kobo Inc.
|
description: Rakuten Kobo Inc.
|
||||||
"^koe,.*":
|
"^koe,.*":
|
||||||
description: Kaohsiung Opto-Electronics Inc.
|
description: Kaohsiung Opto-Electronics Inc.
|
||||||
|
"^kontron,.*":
|
||||||
|
description: Kontron S&T AG
|
||||||
"^kosagi,.*":
|
"^kosagi,.*":
|
||||||
description: Sutajio Ko-Usagi PTE Ltd.
|
description: Sutajio Ko-Usagi PTE Ltd.
|
||||||
"^kyo,.*":
|
"^kyo,.*":
|
||||||
|
@ -459,6 +491,8 @@ patternProperties:
|
||||||
description: LaCie
|
description: LaCie
|
||||||
"^laird,.*":
|
"^laird,.*":
|
||||||
description: Laird PLC
|
description: Laird PLC
|
||||||
|
"^lamobo,.*":
|
||||||
|
description: Ketai Huajie Technology Co., Ltd.
|
||||||
"^lantiq,.*":
|
"^lantiq,.*":
|
||||||
description: Lantiq Semiconductor
|
description: Lantiq Semiconductor
|
||||||
"^lattice,.*":
|
"^lattice,.*":
|
||||||
|
@ -477,6 +511,8 @@ patternProperties:
|
||||||
description: Lichee Pi
|
description: Lichee Pi
|
||||||
"^linaro,.*":
|
"^linaro,.*":
|
||||||
description: Linaro Limited
|
description: Linaro Limited
|
||||||
|
"^linksprite,.*":
|
||||||
|
description: LinkSprite Technologies, Inc.
|
||||||
"^linksys,.*":
|
"^linksys,.*":
|
||||||
description: Belkin International, Inc. (Linksys)
|
description: Belkin International, Inc. (Linksys)
|
||||||
"^linux,.*":
|
"^linux,.*":
|
||||||
|
@ -493,6 +529,8 @@ patternProperties:
|
||||||
description: Liebherr-Werk Nenzing GmbH
|
description: Liebherr-Werk Nenzing GmbH
|
||||||
"^macnica,.*":
|
"^macnica,.*":
|
||||||
description: Macnica Americas
|
description: Macnica Americas
|
||||||
|
"^mapleboard,.*":
|
||||||
|
description: Mapleboard.org
|
||||||
"^marvell,.*":
|
"^marvell,.*":
|
||||||
description: Marvell Technology Group Ltd.
|
description: Marvell Technology Group Ltd.
|
||||||
"^maxbotix,.*":
|
"^maxbotix,.*":
|
||||||
|
@ -533,6 +571,8 @@ patternProperties:
|
||||||
description: Micron Technology Inc.
|
description: Micron Technology Inc.
|
||||||
"^mikroe,.*":
|
"^mikroe,.*":
|
||||||
description: MikroElektronika d.o.o.
|
description: MikroElektronika d.o.o.
|
||||||
|
"^miniand,.*":
|
||||||
|
description: Miniand Tech
|
||||||
"^minix,.*":
|
"^minix,.*":
|
||||||
description: MINIX Technology Ltd.
|
description: MINIX Technology Ltd.
|
||||||
"^miramems,.*":
|
"^miramems,.*":
|
||||||
|
@ -663,24 +703,32 @@ patternProperties:
|
||||||
description: Picochip Ltd
|
description: Picochip Ltd
|
||||||
"^pine64,.*":
|
"^pine64,.*":
|
||||||
description: Pine64
|
description: Pine64
|
||||||
|
"^pineriver,.*":
|
||||||
|
description: Shenzhen PineRiver Designs Co., Ltd.
|
||||||
"^pixcir,.*":
|
"^pixcir,.*":
|
||||||
description: PIXCIR MICROELECTRONICS Co., Ltd
|
description: PIXCIR MICROELECTRONICS Co., Ltd
|
||||||
"^plantower,.*":
|
"^plantower,.*":
|
||||||
description: Plantower Co., Ltd
|
description: Plantower Co., Ltd
|
||||||
"^plathome,.*":
|
"^plathome,.*":
|
||||||
description: Plat'Home Co., Ltd.
|
description: Plat\'Home Co., Ltd.
|
||||||
"^plda,.*":
|
"^plda,.*":
|
||||||
description: PLDA
|
description: PLDA
|
||||||
"^plx,.*":
|
"^plx,.*":
|
||||||
description: Broadcom Corporation (formerly PLX Technology)
|
description: Broadcom Corporation (formerly PLX Technology)
|
||||||
"^pni,.*":
|
"^pni,.*":
|
||||||
description: PNI Sensor Corporation
|
description: PNI Sensor Corporation
|
||||||
|
"^polaroid,.*":
|
||||||
|
description: Polaroid Corporation
|
||||||
"^portwell,.*":
|
"^portwell,.*":
|
||||||
description: Portwell Inc.
|
description: Portwell Inc.
|
||||||
"^poslab,.*":
|
"^poslab,.*":
|
||||||
description: Poslab Technology Co., Ltd.
|
description: Poslab Technology Co., Ltd.
|
||||||
|
"^pov,.*":
|
||||||
|
description: Point of View International B.V.
|
||||||
"^powervr,.*":
|
"^powervr,.*":
|
||||||
description: PowerVR (deprecated, use img)
|
description: PowerVR (deprecated, use img)
|
||||||
|
"^primux,.*":
|
||||||
|
description: Primux Trading, S.L.
|
||||||
"^probox2,.*":
|
"^probox2,.*":
|
||||||
description: PROBOX2 (by W2COMP Co., Ltd.)
|
description: PROBOX2 (by W2COMP Co., Ltd.)
|
||||||
"^pulsedlight,.*":
|
"^pulsedlight,.*":
|
||||||
|
@ -693,6 +741,8 @@ patternProperties:
|
||||||
description: QEMU, a generic and open source machine emulator and virtualizer
|
description: QEMU, a generic and open source machine emulator and virtualizer
|
||||||
"^qi,.*":
|
"^qi,.*":
|
||||||
description: Qi Hardware
|
description: Qi Hardware
|
||||||
|
"^qihua,.*":
|
||||||
|
description: Chengdu Kaixuan Information Technology Co., Ltd.
|
||||||
"^qiaodian,.*":
|
"^qiaodian,.*":
|
||||||
description: QiaoDian XianShi Corporation
|
description: QiaoDian XianShi Corporation
|
||||||
"^qnap,.*":
|
"^qnap,.*":
|
||||||
|
@ -715,6 +765,8 @@ patternProperties:
|
||||||
description: Realtek Semiconductor Corp.
|
description: Realtek Semiconductor Corp.
|
||||||
"^renesas,.*":
|
"^renesas,.*":
|
||||||
description: Renesas Electronics Corporation
|
description: Renesas Electronics Corporation
|
||||||
|
"^rervision,.*":
|
||||||
|
description: Shenzhen Rervision Technology Co., Ltd.
|
||||||
"^richtek,.*":
|
"^richtek,.*":
|
||||||
description: Richtek Technology Corporation
|
description: Richtek Technology Corporation
|
||||||
"^ricoh,.*":
|
"^ricoh,.*":
|
||||||
|
@ -783,8 +835,14 @@ patternProperties:
|
||||||
description: Silergy Corp.
|
description: Silergy Corp.
|
||||||
"^siliconmitus,.*":
|
"^siliconmitus,.*":
|
||||||
description: Silicon Mitus, Inc.
|
description: Silicon Mitus, Inc.
|
||||||
"^simte,.*":
|
"^simtek,.*":
|
||||||
description: k
|
description: Cypress Semiconductor Corporation (Simtek Corporation)
|
||||||
|
"^sinlinx,.*":
|
||||||
|
description: Sinlinx Electronics Technology Co., LTD
|
||||||
|
"^sinovoip,.*":
|
||||||
|
description: SinoVoip Co., Ltd
|
||||||
|
"^sipeed,.*":
|
||||||
|
description: Shenzhen Sipeed Technology Co., Ltd.
|
||||||
"^sirf,.*":
|
"^sirf,.*":
|
||||||
description: SiRF Technology, Inc.
|
description: SiRF Technology, Inc.
|
||||||
"^sis,.*":
|
"^sis,.*":
|
||||||
|
@ -797,6 +855,8 @@ patternProperties:
|
||||||
description: Standard Microsystems Corporation
|
description: Standard Microsystems Corporation
|
||||||
"^snps,.*":
|
"^snps,.*":
|
||||||
description: Synopsys, Inc.
|
description: Synopsys, Inc.
|
||||||
|
"^sochip,.*":
|
||||||
|
description: Shenzhen SoChip Technology Co., Ltd.
|
||||||
"^socionext,.*":
|
"^socionext,.*":
|
||||||
description: Socionext Inc.
|
description: Socionext Inc.
|
||||||
"^solidrun,.*":
|
"^solidrun,.*":
|
||||||
|
@ -903,6 +963,8 @@ patternProperties:
|
||||||
description: United Radiant Technology Corporation
|
description: United Radiant Technology Corporation
|
||||||
"^usi,.*":
|
"^usi,.*":
|
||||||
description: Universal Scientific Industrial Co., Ltd.
|
description: Universal Scientific Industrial Co., Ltd.
|
||||||
|
"^utoo,.*":
|
||||||
|
description: Aigo Digital Technology Co., Ltd.
|
||||||
"^v3,.*":
|
"^v3,.*":
|
||||||
description: V3 Semiconductor
|
description: V3 Semiconductor
|
||||||
"^vamrs,.*":
|
"^vamrs,.*":
|
||||||
|
@ -939,10 +1001,14 @@ patternProperties:
|
||||||
description: Winbond Electronics corp.
|
description: Winbond Electronics corp.
|
||||||
"^winstar,.*":
|
"^winstar,.*":
|
||||||
description: Winstar Display Corp.
|
description: Winstar Display Corp.
|
||||||
|
"^wits,.*":
|
||||||
|
description: Shenzhen Merrii Technology Co., Ltd. (WITS)
|
||||||
"^wlf,.*":
|
"^wlf,.*":
|
||||||
description: Wolfson Microelectronics
|
description: Wolfson Microelectronics
|
||||||
"^wm,.*":
|
"^wm,.*":
|
||||||
description: Wondermedia Technologies, Inc.
|
description: Wondermedia Technologies, Inc.
|
||||||
|
"^wobo,.*":
|
||||||
|
description: Wobo
|
||||||
"^x-powers,.*":
|
"^x-powers,.*":
|
||||||
description: X-Powers
|
description: X-Powers
|
||||||
"^xes,.*":
|
"^xes,.*":
|
||||||
|
@ -953,6 +1019,8 @@ patternProperties:
|
||||||
description: Xilinx
|
description: Xilinx
|
||||||
"^xunlong,.*":
|
"^xunlong,.*":
|
||||||
description: Shenzhen Xunlong Software CO.,Limited
|
description: Shenzhen Xunlong Software CO.,Limited
|
||||||
|
"^yones-toptech,.*":
|
||||||
|
description: Yones Toptech Co., Ltd.
|
||||||
"^ysoft,.*":
|
"^ysoft,.*":
|
||||||
description: Y Soft Corporation a.s.
|
description: Y Soft Corporation a.s.
|
||||||
"^zarlink,.*":
|
"^zarlink,.*":
|
||||||
|
@ -970,7 +1038,7 @@ patternProperties:
|
||||||
|
|
||||||
# Normal property name match without a comma
|
# Normal property name match without a comma
|
||||||
# These should catch all node/property names without a prefix
|
# These should catch all node/property names without a prefix
|
||||||
"^[a-zA-Z0-9#][a-zA-Z0-9+\\-._@]{0,63}$": true
|
"^[a-zA-Z0-9#_][a-zA-Z0-9+\\-._@]{0,63}$": true
|
||||||
"^[a-zA-Z0-9+\\-._]*@[0-9a-zA-Z,]*$": true
|
"^[a-zA-Z0-9+\\-._]*@[0-9a-zA-Z,]*$": true
|
||||||
"^#.*": true
|
"^#.*": true
|
||||||
|
|
||||||
|
|
|
@ -236,7 +236,7 @@ AArch64 内核当前没有提供自解压代码,因此如果使用了压缩内
|
||||||
*译者注: ARM DEN 0022A 已更新到 ARM DEN 0022C。
|
*译者注: ARM DEN 0022A 已更新到 ARM DEN 0022C。
|
||||||
|
|
||||||
设备树必须包含一个 ‘psci’ 节点,请参考以下文档:
|
设备树必须包含一个 ‘psci’ 节点,请参考以下文档:
|
||||||
Documentation/devicetree/bindings/arm/psci.txt
|
Documentation/devicetree/bindings/arm/psci.yaml
|
||||||
|
|
||||||
|
|
||||||
- 辅助 CPU 通用寄存器设置
|
- 辅助 CPU 通用寄存器设置
|
||||||
|
|
|
@ -2140,7 +2140,7 @@ F: arch/arm/boot/dts/rda8810pl-*
|
||||||
F: drivers/clocksource/timer-rda.c
|
F: drivers/clocksource/timer-rda.c
|
||||||
F: drivers/irqchip/irq-rda-intc.c
|
F: drivers/irqchip/irq-rda-intc.c
|
||||||
F: drivers/tty/serial/rda-uart.c
|
F: drivers/tty/serial/rda-uart.c
|
||||||
F: Documentation/devicetree/bindings/arm/rda.txt
|
F: Documentation/devicetree/bindings/arm/rda.yaml
|
||||||
F: Documentation/devicetree/bindings/interrupt-controller/rda,8810pl-intc.txt
|
F: Documentation/devicetree/bindings/interrupt-controller/rda,8810pl-intc.txt
|
||||||
F: Documentation/devicetree/bindings/serial/rda,8810pl-uart.txt
|
F: Documentation/devicetree/bindings/serial/rda,8810pl-uart.txt
|
||||||
F: Documentation/devicetree/bindings/timer/rda,8810pl-timer.txt
|
F: Documentation/devicetree/bindings/timer/rda,8810pl-timer.txt
|
||||||
|
@ -6025,6 +6025,7 @@ M: Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/ABI/testing/sysfs-bus-mdio
|
F: Documentation/ABI/testing/sysfs-bus-mdio
|
||||||
|
F: Documentation/devicetree/bindings/net/ethernet-phy.yaml
|
||||||
F: Documentation/devicetree/bindings/net/mdio*
|
F: Documentation/devicetree/bindings/net/mdio*
|
||||||
F: Documentation/networking/phy.rst
|
F: Documentation/networking/phy.rst
|
||||||
F: drivers/net/phy/
|
F: drivers/net/phy/
|
||||||
|
|
141
drivers/of/fdt.c
141
drivers/of/fdt.c
|
@ -38,7 +38,7 @@
|
||||||
* memory entries in the /memory node. This function may be called
|
* memory entries in the /memory node. This function may be called
|
||||||
* any time after initial_boot_param is set.
|
* any time after initial_boot_param is set.
|
||||||
*/
|
*/
|
||||||
void of_fdt_limit_memory(int limit)
|
void __init of_fdt_limit_memory(int limit)
|
||||||
{
|
{
|
||||||
int memory;
|
int memory;
|
||||||
int len;
|
int len;
|
||||||
|
@ -78,57 +78,6 @@ void of_fdt_limit_memory(int limit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* of_fdt_is_compatible - Return true if given node from the given blob has
|
|
||||||
* compat in its compatible list
|
|
||||||
* @blob: A device tree blob
|
|
||||||
* @node: node to test
|
|
||||||
* @compat: compatible string to compare with compatible list.
|
|
||||||
*
|
|
||||||
* On match, returns a non-zero value with smaller values returned for more
|
|
||||||
* specific compatible values.
|
|
||||||
*/
|
|
||||||
static int of_fdt_is_compatible(const void *blob,
|
|
||||||
unsigned long node, const char *compat)
|
|
||||||
{
|
|
||||||
const char *cp;
|
|
||||||
int cplen;
|
|
||||||
unsigned long l, score = 0;
|
|
||||||
|
|
||||||
cp = fdt_getprop(blob, node, "compatible", &cplen);
|
|
||||||
if (cp == NULL)
|
|
||||||
return 0;
|
|
||||||
while (cplen > 0) {
|
|
||||||
score++;
|
|
||||||
if (of_compat_cmp(cp, compat, strlen(compat)) == 0)
|
|
||||||
return score;
|
|
||||||
l = strlen(cp) + 1;
|
|
||||||
cp += l;
|
|
||||||
cplen -= l;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* of_fdt_is_big_endian - Return true if given node needs BE MMIO accesses
|
|
||||||
* @blob: A device tree blob
|
|
||||||
* @node: node to test
|
|
||||||
*
|
|
||||||
* Returns true if the node has a "big-endian" property, or if the kernel
|
|
||||||
* was compiled for BE *and* the node has a "native-endian" property.
|
|
||||||
* Returns false otherwise.
|
|
||||||
*/
|
|
||||||
bool of_fdt_is_big_endian(const void *blob, unsigned long node)
|
|
||||||
{
|
|
||||||
if (fdt_getprop(blob, node, "big-endian", NULL))
|
|
||||||
return true;
|
|
||||||
if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) &&
|
|
||||||
fdt_getprop(blob, node, "native-endian", NULL))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool of_fdt_device_is_available(const void *blob, unsigned long node)
|
static bool of_fdt_device_is_available(const void *blob, unsigned long node)
|
||||||
{
|
{
|
||||||
const char *status = fdt_getprop(blob, node, "status", NULL);
|
const char *status = fdt_getprop(blob, node, "status", NULL);
|
||||||
|
@ -142,27 +91,6 @@ static bool of_fdt_device_is_available(const void *blob, unsigned long node)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* of_fdt_match - Return true if node matches a list of compatible values
|
|
||||||
*/
|
|
||||||
int of_fdt_match(const void *blob, unsigned long node,
|
|
||||||
const char *const *compat)
|
|
||||||
{
|
|
||||||
unsigned int tmp, score = 0;
|
|
||||||
|
|
||||||
if (!compat)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
while (*compat) {
|
|
||||||
tmp = of_fdt_is_compatible(blob, node, *compat);
|
|
||||||
if (tmp && (score == 0 || (tmp < score)))
|
|
||||||
score = tmp;
|
|
||||||
compat++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return score;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *unflatten_dt_alloc(void **mem, unsigned long size,
|
static void *unflatten_dt_alloc(void **mem, unsigned long size,
|
||||||
unsigned long align)
|
unsigned long align)
|
||||||
{
|
{
|
||||||
|
@ -535,7 +463,7 @@ EXPORT_SYMBOL_GPL(of_fdt_unflatten_tree);
|
||||||
int __initdata dt_root_addr_cells;
|
int __initdata dt_root_addr_cells;
|
||||||
int __initdata dt_root_size_cells;
|
int __initdata dt_root_size_cells;
|
||||||
|
|
||||||
void *initial_boot_params;
|
void *initial_boot_params __ro_after_init;
|
||||||
|
|
||||||
#ifdef CONFIG_OF_EARLY_FLATTREE
|
#ifdef CONFIG_OF_EARLY_FLATTREE
|
||||||
|
|
||||||
|
@ -551,7 +479,8 @@ static int __init __reserved_mem_reserve_reg(unsigned long node,
|
||||||
phys_addr_t base, size;
|
phys_addr_t base, size;
|
||||||
int len;
|
int len;
|
||||||
const __be32 *prop;
|
const __be32 *prop;
|
||||||
int nomap, first = 1;
|
int first = 1;
|
||||||
|
bool nomap;
|
||||||
|
|
||||||
prop = of_get_flat_dt_prop(node, "reg", &len);
|
prop = of_get_flat_dt_prop(node, "reg", &len);
|
||||||
if (!prop)
|
if (!prop)
|
||||||
|
@ -666,7 +595,7 @@ void __init early_init_fdt_scan_reserved_mem(void)
|
||||||
fdt_get_mem_rsv(initial_boot_params, n, &base, &size);
|
fdt_get_mem_rsv(initial_boot_params, n, &base, &size);
|
||||||
if (!size)
|
if (!size)
|
||||||
break;
|
break;
|
||||||
early_init_dt_reserve_memory_arch(base, size, 0);
|
early_init_dt_reserve_memory_arch(base, size, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
of_scan_flat_dt(__fdt_scan_reserved_mem, NULL);
|
of_scan_flat_dt(__fdt_scan_reserved_mem, NULL);
|
||||||
|
@ -684,7 +613,7 @@ void __init early_init_fdt_reserve_self(void)
|
||||||
/* Reserve the dtb region */
|
/* Reserve the dtb region */
|
||||||
early_init_dt_reserve_memory_arch(__pa(initial_boot_params),
|
early_init_dt_reserve_memory_arch(__pa(initial_boot_params),
|
||||||
fdt_totalsize(initial_boot_params),
|
fdt_totalsize(initial_boot_params),
|
||||||
0);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -758,7 +687,7 @@ int __init of_scan_flat_dt_subnodes(unsigned long parent,
|
||||||
* @return offset of the subnode, or -FDT_ERR_NOTFOUND if there is none
|
* @return offset of the subnode, or -FDT_ERR_NOTFOUND if there is none
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int of_get_flat_dt_subnode_by_name(unsigned long node, const char *uname)
|
int __init of_get_flat_dt_subnode_by_name(unsigned long node, const char *uname)
|
||||||
{
|
{
|
||||||
return fdt_subnode_offset(initial_boot_params, node, uname);
|
return fdt_subnode_offset(initial_boot_params, node, uname);
|
||||||
}
|
}
|
||||||
|
@ -771,14 +700,6 @@ unsigned long __init of_get_flat_dt_root(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* of_get_flat_dt_size - Return the total size of the FDT
|
|
||||||
*/
|
|
||||||
int __init of_get_flat_dt_size(void)
|
|
||||||
{
|
|
||||||
return fdt_totalsize(initial_boot_params);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_get_flat_dt_prop - Given a node in the flat blob, return the property ptr
|
* of_get_flat_dt_prop - Given a node in the flat blob, return the property ptr
|
||||||
*
|
*
|
||||||
|
@ -791,6 +712,38 @@ const void *__init of_get_flat_dt_prop(unsigned long node, const char *name,
|
||||||
return fdt_getprop(initial_boot_params, node, name, size);
|
return fdt_getprop(initial_boot_params, node, name, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* of_fdt_is_compatible - Return true if given node from the given blob has
|
||||||
|
* compat in its compatible list
|
||||||
|
* @blob: A device tree blob
|
||||||
|
* @node: node to test
|
||||||
|
* @compat: compatible string to compare with compatible list.
|
||||||
|
*
|
||||||
|
* On match, returns a non-zero value with smaller values returned for more
|
||||||
|
* specific compatible values.
|
||||||
|
*/
|
||||||
|
static int of_fdt_is_compatible(const void *blob,
|
||||||
|
unsigned long node, const char *compat)
|
||||||
|
{
|
||||||
|
const char *cp;
|
||||||
|
int cplen;
|
||||||
|
unsigned long l, score = 0;
|
||||||
|
|
||||||
|
cp = fdt_getprop(blob, node, "compatible", &cplen);
|
||||||
|
if (cp == NULL)
|
||||||
|
return 0;
|
||||||
|
while (cplen > 0) {
|
||||||
|
score++;
|
||||||
|
if (of_compat_cmp(cp, compat, strlen(compat)) == 0)
|
||||||
|
return score;
|
||||||
|
l = strlen(cp) + 1;
|
||||||
|
cp += l;
|
||||||
|
cplen -= l;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_flat_dt_is_compatible - Return true if given node has compat in compatible list
|
* of_flat_dt_is_compatible - Return true if given node has compat in compatible list
|
||||||
* @node: node to test
|
* @node: node to test
|
||||||
|
@ -804,9 +757,21 @@ int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
||||||
/**
|
/**
|
||||||
* of_flat_dt_match - Return true if node matches a list of compatible values
|
* of_flat_dt_match - Return true if node matches a list of compatible values
|
||||||
*/
|
*/
|
||||||
int __init of_flat_dt_match(unsigned long node, const char *const *compat)
|
static int __init of_flat_dt_match(unsigned long node, const char *const *compat)
|
||||||
{
|
{
|
||||||
return of_fdt_match(initial_boot_params, node, compat);
|
unsigned int tmp, score = 0;
|
||||||
|
|
||||||
|
if (!compat)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
while (*compat) {
|
||||||
|
tmp = of_fdt_is_compatible(initial_boot_params, node, *compat);
|
||||||
|
if (tmp && (score == 0 || (tmp < score)))
|
||||||
|
score = tmp;
|
||||||
|
compat++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -324,6 +324,9 @@ int of_reserved_mem_device_init_by_idx(struct device *dev,
|
||||||
if (!target)
|
if (!target)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!of_device_is_available(target))
|
||||||
|
return 0;
|
||||||
|
|
||||||
rmem = __find_rmem(target);
|
rmem = __find_rmem(target);
|
||||||
of_node_put(target);
|
of_node_put(target);
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,7 @@ static void of_device_make_bus_id(struct device *dev)
|
||||||
reg = of_get_property(node, "reg", NULL);
|
reg = of_get_property(node, "reg", NULL);
|
||||||
if (reg && (addr = of_translate_address(node, reg)) != OF_BAD_ADDR) {
|
if (reg && (addr = of_translate_address(node, reg)) != OF_BAD_ADDR) {
|
||||||
dev_set_name(dev, dev_name(dev) ? "%llx.%pOFn:%s" : "%llx.%pOFn",
|
dev_set_name(dev, dev_name(dev) ? "%llx.%pOFn:%s" : "%llx.%pOFn",
|
||||||
(unsigned long long)addr, node,
|
addr, node, dev_name(dev));
|
||||||
dev_name(dev));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1946,7 +1946,7 @@ static int unittest_i2c_mux_probe(struct i2c_client *client,
|
||||||
{
|
{
|
||||||
int i, nchans;
|
int i, nchans;
|
||||||
struct device *dev = &client->dev;
|
struct device *dev = &client->dev;
|
||||||
struct i2c_adapter *adap = to_i2c_adapter(dev->parent);
|
struct i2c_adapter *adap = client->adapter;
|
||||||
struct device_node *np = client->dev.of_node, *child;
|
struct device_node *np = client->dev.of_node, *child;
|
||||||
struct i2c_mux_core *muxc;
|
struct i2c_mux_core *muxc;
|
||||||
u32 reg, max_reg;
|
u32 reg, max_reg;
|
||||||
|
|
|
@ -23,15 +23,6 @@
|
||||||
struct device_node;
|
struct device_node;
|
||||||
|
|
||||||
/* For scanning an arbitrary device-tree at any time */
|
/* For scanning an arbitrary device-tree at any time */
|
||||||
extern char *of_fdt_get_string(const void *blob, u32 offset);
|
|
||||||
extern void *of_fdt_get_property(const void *blob,
|
|
||||||
unsigned long node,
|
|
||||||
const char *name,
|
|
||||||
int *size);
|
|
||||||
extern bool of_fdt_is_big_endian(const void *blob,
|
|
||||||
unsigned long node);
|
|
||||||
extern int of_fdt_match(const void *blob, unsigned long node,
|
|
||||||
const char *const *compat);
|
|
||||||
extern void *of_fdt_unflatten_tree(const unsigned long *blob,
|
extern void *of_fdt_unflatten_tree(const unsigned long *blob,
|
||||||
struct device_node *dad,
|
struct device_node *dad,
|
||||||
struct device_node **mynodes);
|
struct device_node **mynodes);
|
||||||
|
@ -64,9 +55,7 @@ extern int of_get_flat_dt_subnode_by_name(unsigned long node,
|
||||||
extern const void *of_get_flat_dt_prop(unsigned long node, const char *name,
|
extern const void *of_get_flat_dt_prop(unsigned long node, const char *name,
|
||||||
int *size);
|
int *size);
|
||||||
extern int of_flat_dt_is_compatible(unsigned long node, const char *name);
|
extern int of_flat_dt_is_compatible(unsigned long node, const char *name);
|
||||||
extern int of_flat_dt_match(unsigned long node, const char *const *matches);
|
|
||||||
extern unsigned long of_get_flat_dt_root(void);
|
extern unsigned long of_get_flat_dt_root(void);
|
||||||
extern int of_get_flat_dt_size(void);
|
|
||||||
extern uint32_t of_get_flat_dt_phandle(unsigned long node);
|
extern uint32_t of_get_flat_dt_phandle(unsigned long node);
|
||||||
|
|
||||||
extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
|
extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
# Makefile.dtc
|
# Makefile.dtc
|
||||||
#
|
#
|
||||||
# This is not a complete Makefile of itself. Instead, it is designed to
|
# This is not a complete Makefile of itself. Instead, it is designed to
|
||||||
|
|
|
@ -645,6 +645,8 @@ ERROR(path_references, fixup_path_references, NULL, &duplicate_node_names);
|
||||||
static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti,
|
static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti,
|
||||||
struct node *node)
|
struct node *node)
|
||||||
{
|
{
|
||||||
|
if (generate_symbols && node->labels)
|
||||||
|
return;
|
||||||
if (node->omit_if_unused && !node->is_referenced)
|
if (node->omit_if_unused && !node->is_referenced)
|
||||||
delete_node(node);
|
delete_node(node);
|
||||||
}
|
}
|
||||||
|
@ -1197,8 +1199,24 @@ static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *d
|
||||||
}
|
}
|
||||||
WARNING(avoid_unnecessary_addr_size, check_avoid_unnecessary_addr_size, NULL, &avoid_default_addr_size);
|
WARNING(avoid_unnecessary_addr_size, check_avoid_unnecessary_addr_size, NULL, &avoid_default_addr_size);
|
||||||
|
|
||||||
static void check_unique_unit_address(struct check *c, struct dt_info *dti,
|
static bool node_is_disabled(struct node *node)
|
||||||
struct node *node)
|
{
|
||||||
|
struct property *prop;
|
||||||
|
|
||||||
|
prop = get_property(node, "status");
|
||||||
|
if (prop) {
|
||||||
|
char *str = prop->val.val;
|
||||||
|
if (streq("disabled", str))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_unique_unit_address_common(struct check *c,
|
||||||
|
struct dt_info *dti,
|
||||||
|
struct node *node,
|
||||||
|
bool disable_check)
|
||||||
{
|
{
|
||||||
struct node *childa;
|
struct node *childa;
|
||||||
|
|
||||||
|
@ -1215,18 +1233,38 @@ static void check_unique_unit_address(struct check *c, struct dt_info *dti,
|
||||||
if (!strlen(addr_a))
|
if (!strlen(addr_a))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (disable_check && node_is_disabled(childa))
|
||||||
|
continue;
|
||||||
|
|
||||||
for_each_child(node, childb) {
|
for_each_child(node, childb) {
|
||||||
const char *addr_b = get_unitname(childb);
|
const char *addr_b = get_unitname(childb);
|
||||||
if (childa == childb)
|
if (childa == childb)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (disable_check && node_is_disabled(childb))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (streq(addr_a, addr_b))
|
if (streq(addr_a, addr_b))
|
||||||
FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath);
|
FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check_unique_unit_address(struct check *c, struct dt_info *dti,
|
||||||
|
struct node *node)
|
||||||
|
{
|
||||||
|
check_unique_unit_address_common(c, dti, node, false);
|
||||||
|
}
|
||||||
WARNING(unique_unit_address, check_unique_unit_address, NULL, &avoid_default_addr_size);
|
WARNING(unique_unit_address, check_unique_unit_address, NULL, &avoid_default_addr_size);
|
||||||
|
|
||||||
|
static void check_unique_unit_address_if_enabled(struct check *c, struct dt_info *dti,
|
||||||
|
struct node *node)
|
||||||
|
{
|
||||||
|
check_unique_unit_address_common(c, dti, node, true);
|
||||||
|
}
|
||||||
|
CHECK_ENTRY(unique_unit_address_if_enabled, check_unique_unit_address_if_enabled,
|
||||||
|
NULL, false, false, &avoid_default_addr_size);
|
||||||
|
|
||||||
static void check_obsolete_chosen_interrupt_controller(struct check *c,
|
static void check_obsolete_chosen_interrupt_controller(struct check *c,
|
||||||
struct dt_info *dti,
|
struct dt_info *dti,
|
||||||
struct node *node)
|
struct node *node)
|
||||||
|
@ -1527,10 +1565,14 @@ static void check_interrupts_property(struct check *c,
|
||||||
prop = get_property(parent, "interrupt-parent");
|
prop = get_property(parent, "interrupt-parent");
|
||||||
if (prop) {
|
if (prop) {
|
||||||
phandle = propval_cell(prop);
|
phandle = propval_cell(prop);
|
||||||
/* Give up if this is an overlay with external references */
|
if ((phandle == 0) || (phandle == -1)) {
|
||||||
if ((phandle == 0 || phandle == -1) &&
|
/* Give up if this is an overlay with
|
||||||
(dti->dtsflags & DTSF_PLUGIN))
|
* external references */
|
||||||
|
if (dti->dtsflags & DTSF_PLUGIN)
|
||||||
return;
|
return;
|
||||||
|
FAIL_PROP(c, dti, parent, prop, "Invalid phandle");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
irq_node = get_node_by_phandle(root, phandle);
|
irq_node = get_node_by_phandle(root, phandle);
|
||||||
if (!irq_node) {
|
if (!irq_node) {
|
||||||
|
@ -1699,7 +1741,7 @@ static void check_graph_endpoint(struct check *c, struct dt_info *dti,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!strprefixeq(node->name, node->basenamelen, "endpoint"))
|
if (!strprefixeq(node->name, node->basenamelen, "endpoint"))
|
||||||
FAIL(c, dti, node, "graph endpont node name should be 'endpoint'");
|
FAIL(c, dti, node, "graph endpoint node name should be 'endpoint'");
|
||||||
|
|
||||||
check_graph_reg(c, dti, node);
|
check_graph_reg(c, dti, node);
|
||||||
|
|
||||||
|
@ -1754,6 +1796,7 @@ static struct check *check_table[] = {
|
||||||
&avoid_default_addr_size,
|
&avoid_default_addr_size,
|
||||||
&avoid_unnecessary_addr_size,
|
&avoid_unnecessary_addr_size,
|
||||||
&unique_unit_address,
|
&unique_unit_address,
|
||||||
|
&unique_unit_address_if_enabled,
|
||||||
&obsolete_chosen_interrupt_controller,
|
&obsolete_chosen_interrupt_controller,
|
||||||
&chosen_node_is_root, &chosen_node_bootargs, &chosen_node_stdout_path,
|
&chosen_node_is_root, &chosen_node_bootargs, &chosen_node_stdout_path,
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,6 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
/*
|
/*
|
||||||
* (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
|
* (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
|
||||||
*
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
||||||
* USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
%option noyywrap nounput noinput never-interactive
|
%option noyywrap nounput noinput never-interactive
|
||||||
|
|
|
@ -1,21 +1,6 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
/*
|
/*
|
||||||
* (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
|
* (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
|
||||||
*
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
||||||
* USA
|
|
||||||
*/
|
*/
|
||||||
%{
|
%{
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -216,7 +216,8 @@ void add_child(struct node *parent, struct node *child);
|
||||||
void delete_node_by_name(struct node *parent, char *name);
|
void delete_node_by_name(struct node *parent, char *name);
|
||||||
void delete_node(struct node *node);
|
void delete_node(struct node *node);
|
||||||
void append_to_property(struct node *node,
|
void append_to_property(struct node *node,
|
||||||
char *name, const void *data, int len);
|
char *name, const void *data, int len,
|
||||||
|
enum markertype type);
|
||||||
|
|
||||||
const char *get_unitname(struct node *node);
|
const char *get_unitname(struct node *node);
|
||||||
struct property *get_property(struct node *node, const char *propname);
|
struct property *get_property(struct node *node, const char *propname);
|
||||||
|
|
|
@ -510,7 +510,7 @@ void dt_to_asm(FILE *f, struct dt_info *dti, int version)
|
||||||
fprintf(f, "/* Memory reserve map from source file */\n");
|
fprintf(f, "/* Memory reserve map from source file */\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use .long on high and low halfs of u64s to avoid .quad
|
* Use .long on high and low halves of u64s to avoid .quad
|
||||||
* as it appears .quad isn't available in some assemblers.
|
* as it appears .quad isn't available in some assemblers.
|
||||||
*/
|
*/
|
||||||
for (re = dti->reservelist; re; re = re->next) {
|
for (re = dti->reservelist; re; re = re->next) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
# Makefile.libfdt
|
# Makefile.libfdt
|
||||||
#
|
#
|
||||||
# This is not a complete Makefile of itself. Instead, it is designed to
|
# This is not a complete Makefile of itself. Instead, it is designed to
|
||||||
|
@ -10,7 +10,9 @@ LIBFDT_VERSION = version.lds
|
||||||
LIBFDT_SRCS = fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c fdt_empty_tree.c \
|
LIBFDT_SRCS = fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c fdt_empty_tree.c \
|
||||||
fdt_addresses.c fdt_overlay.c
|
fdt_addresses.c fdt_overlay.c
|
||||||
LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o)
|
LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o)
|
||||||
|
LIBFDT_LIB = libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT)
|
||||||
|
|
||||||
libfdt_clean:
|
libfdt_clean:
|
||||||
@$(VECHO) CLEAN "(libfdt)"
|
@$(VECHO) CLEAN "(libfdt)"
|
||||||
rm -f $(STD_CLEANFILES:%=$(LIBFDT_dir)/%)
|
rm -f $(STD_CLEANFILES:%=$(LIBFDT_dir)/%)
|
||||||
|
rm -f $(LIBFDT_dir)/$(LIBFDT_soname)
|
||||||
|
|
|
@ -1,52 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
|
|
@ -1,55 +1,10 @@
|
||||||
|
/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
|
||||||
#ifndef FDT_H
|
#ifndef FDT_H
|
||||||
#define FDT_H
|
#define FDT_H
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
* Copyright 2012 Kim Phillips, Freescale Semiconductor.
|
* Copyright 2012 Kim Phillips, Freescale Semiconductor.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
|
@ -1,53 +1,8 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au>
|
* Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au>
|
||||||
* Copyright (C) 2018 embedded brains GmbH
|
* Copyright (C) 2018 embedded brains GmbH
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
@ -95,3 +50,50 @@ int fdt_size_cells(const void *fdt, int nodeoffset)
|
||||||
return 1;
|
return 1;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This function assumes that [address|size]_cells is 1 or 2 */
|
||||||
|
int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset,
|
||||||
|
const char *name, uint64_t addr, uint64_t size)
|
||||||
|
{
|
||||||
|
int addr_cells, size_cells, ret;
|
||||||
|
uint8_t data[sizeof(fdt64_t) * 2], *prop;
|
||||||
|
|
||||||
|
ret = fdt_address_cells(fdt, parent);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
addr_cells = ret;
|
||||||
|
|
||||||
|
ret = fdt_size_cells(fdt, parent);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
size_cells = ret;
|
||||||
|
|
||||||
|
/* check validity of address */
|
||||||
|
prop = data;
|
||||||
|
if (addr_cells == 1) {
|
||||||
|
if ((addr > UINT32_MAX) || ((UINT32_MAX + 1 - addr) < size))
|
||||||
|
return -FDT_ERR_BADVALUE;
|
||||||
|
|
||||||
|
fdt32_st(prop, (uint32_t)addr);
|
||||||
|
} else if (addr_cells == 2) {
|
||||||
|
fdt64_st(prop, addr);
|
||||||
|
} else {
|
||||||
|
return -FDT_ERR_BADNCELLS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check validity of size */
|
||||||
|
prop += addr_cells * sizeof(fdt32_t);
|
||||||
|
if (size_cells == 1) {
|
||||||
|
if (size > UINT32_MAX)
|
||||||
|
return -FDT_ERR_BADVALUE;
|
||||||
|
|
||||||
|
fdt32_st(prop, (uint32_t)size);
|
||||||
|
} else if (size_cells == 2) {
|
||||||
|
fdt64_st(prop, size);
|
||||||
|
} else {
|
||||||
|
return -FDT_ERR_BADNCELLS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fdt_appendprop(fdt, nodeoffset, name, data,
|
||||||
|
(addr_cells + size_cells) * sizeof(fdt32_t));
|
||||||
|
}
|
||||||
|
|
|
@ -1,52 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2012 David Gibson, IBM Corporation.
|
* Copyright (C) 2012 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
|
|
@ -1,53 +1,8 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2016 Free Electrons
|
* Copyright (C) 2016 Free Electrons
|
||||||
* Copyright (C) 2016 NextThing Co.
|
* Copyright (C) 2016 NextThing Co.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
@ -93,11 +48,11 @@ static uint32_t overlay_get_target_phandle(const void *fdto, int fragment)
|
||||||
* @pathp: pointer which receives the path of the target (or NULL)
|
* @pathp: pointer which receives the path of the target (or NULL)
|
||||||
*
|
*
|
||||||
* overlay_get_target() retrieves the target offset in the base
|
* overlay_get_target() retrieves the target offset in the base
|
||||||
* device tree of a fragment, no matter how the actual targetting is
|
* device tree of a fragment, no matter how the actual targeting is
|
||||||
* done (through a phandle or a path)
|
* done (through a phandle or a path)
|
||||||
*
|
*
|
||||||
* returns:
|
* returns:
|
||||||
* the targetted node offset in the base device tree
|
* the targeted node offset in the base device tree
|
||||||
* Negative error code on error
|
* Negative error code on error
|
||||||
*/
|
*/
|
||||||
static int overlay_get_target(const void *fdt, const void *fdto,
|
static int overlay_get_target(const void *fdt, const void *fdto,
|
||||||
|
@ -863,12 +818,16 @@ static int overlay_symbol_update(void *fdt, void *fdto)
|
||||||
|
|
||||||
int fdt_overlay_apply(void *fdt, void *fdto)
|
int fdt_overlay_apply(void *fdt, void *fdto)
|
||||||
{
|
{
|
||||||
uint32_t delta = fdt_get_max_phandle(fdt);
|
uint32_t delta;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
FDT_RO_PROBE(fdt);
|
FDT_RO_PROBE(fdt);
|
||||||
FDT_RO_PROBE(fdto);
|
FDT_RO_PROBE(fdto);
|
||||||
|
|
||||||
|
ret = fdt_find_max_phandle(fdt, &delta);
|
||||||
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
|
||||||
ret = overlay_adjust_local_phandles(fdto, delta);
|
ret = overlay_adjust_local_phandles(fdto, delta);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
|
@ -1,52 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
@ -144,29 +99,49 @@ static int fdt_string_eq_(const void *fdt, int stroffset,
|
||||||
return p && (slen == len) && (memcmp(p, s, len) == 0);
|
return p && (slen == len) && (memcmp(p, s, len) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t fdt_get_max_phandle(const void *fdt)
|
int fdt_find_max_phandle(const void *fdt, uint32_t *phandle)
|
||||||
{
|
{
|
||||||
uint32_t max_phandle = 0;
|
uint32_t max = 0;
|
||||||
int offset;
|
int offset = -1;
|
||||||
|
|
||||||
for (offset = fdt_next_node(fdt, -1, NULL);;
|
while (true) {
|
||||||
offset = fdt_next_node(fdt, offset, NULL)) {
|
uint32_t value;
|
||||||
uint32_t phandle;
|
|
||||||
|
|
||||||
if (offset == -FDT_ERR_NOTFOUND)
|
offset = fdt_next_node(fdt, offset, NULL);
|
||||||
return max_phandle;
|
if (offset < 0) {
|
||||||
|
if (offset == -FDT_ERR_NOTFOUND)
|
||||||
|
break;
|
||||||
|
|
||||||
if (offset < 0)
|
return offset;
|
||||||
return (uint32_t)-1;
|
}
|
||||||
|
|
||||||
phandle = fdt_get_phandle(fdt, offset);
|
value = fdt_get_phandle(fdt, offset);
|
||||||
if (phandle == (uint32_t)-1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (phandle > max_phandle)
|
if (value > max)
|
||||||
max_phandle = phandle;
|
max = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (phandle)
|
||||||
|
*phandle = max;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fdt_generate_phandle(const void *fdt, uint32_t *phandle)
|
||||||
|
{
|
||||||
|
uint32_t max;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = fdt_find_max_phandle(fdt, &max);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if (max == FDT_MAX_PHANDLE)
|
||||||
|
return -FDT_ERR_NOPHANDLES;
|
||||||
|
|
||||||
|
if (phandle)
|
||||||
|
*phandle = max + 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,52 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
@ -136,6 +91,14 @@ static int fdt_splice_struct_(void *fdt, void *p,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Must only be used to roll back in case of error */
|
||||||
|
static void fdt_del_last_string_(void *fdt, const char *s)
|
||||||
|
{
|
||||||
|
int newlen = strlen(s) + 1;
|
||||||
|
|
||||||
|
fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) - newlen);
|
||||||
|
}
|
||||||
|
|
||||||
static int fdt_splice_string_(void *fdt, int newlen)
|
static int fdt_splice_string_(void *fdt, int newlen)
|
||||||
{
|
{
|
||||||
void *p = (char *)fdt
|
void *p = (char *)fdt
|
||||||
|
@ -149,7 +112,7 @@ static int fdt_splice_string_(void *fdt, int newlen)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fdt_find_add_string_(void *fdt, const char *s)
|
static int fdt_find_add_string_(void *fdt, const char *s, int *allocated)
|
||||||
{
|
{
|
||||||
char *strtab = (char *)fdt + fdt_off_dt_strings(fdt);
|
char *strtab = (char *)fdt + fdt_off_dt_strings(fdt);
|
||||||
const char *p;
|
const char *p;
|
||||||
|
@ -157,6 +120,8 @@ static int fdt_find_add_string_(void *fdt, const char *s)
|
||||||
int len = strlen(s) + 1;
|
int len = strlen(s) + 1;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
*allocated = 0;
|
||||||
|
|
||||||
p = fdt_find_string_(strtab, fdt_size_dt_strings(fdt), s);
|
p = fdt_find_string_(strtab, fdt_size_dt_strings(fdt), s);
|
||||||
if (p)
|
if (p)
|
||||||
/* found it */
|
/* found it */
|
||||||
|
@ -167,6 +132,8 @@ static int fdt_find_add_string_(void *fdt, const char *s)
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
*allocated = 1;
|
||||||
|
|
||||||
memcpy(new, s, len);
|
memcpy(new, s, len);
|
||||||
return (new - strtab);
|
return (new - strtab);
|
||||||
}
|
}
|
||||||
|
@ -225,11 +192,12 @@ static int fdt_add_property_(void *fdt, int nodeoffset, const char *name,
|
||||||
int nextoffset;
|
int nextoffset;
|
||||||
int namestroff;
|
int namestroff;
|
||||||
int err;
|
int err;
|
||||||
|
int allocated;
|
||||||
|
|
||||||
if ((nextoffset = fdt_check_node_offset_(fdt, nodeoffset)) < 0)
|
if ((nextoffset = fdt_check_node_offset_(fdt, nodeoffset)) < 0)
|
||||||
return nextoffset;
|
return nextoffset;
|
||||||
|
|
||||||
namestroff = fdt_find_add_string_(fdt, name);
|
namestroff = fdt_find_add_string_(fdt, name, &allocated);
|
||||||
if (namestroff < 0)
|
if (namestroff < 0)
|
||||||
return namestroff;
|
return namestroff;
|
||||||
|
|
||||||
|
@ -237,8 +205,11 @@ static int fdt_add_property_(void *fdt, int nodeoffset, const char *name,
|
||||||
proplen = sizeof(**prop) + FDT_TAGALIGN(len);
|
proplen = sizeof(**prop) + FDT_TAGALIGN(len);
|
||||||
|
|
||||||
err = fdt_splice_struct_(fdt, *prop, 0, proplen);
|
err = fdt_splice_struct_(fdt, *prop, 0, proplen);
|
||||||
if (err)
|
if (err) {
|
||||||
|
if (allocated)
|
||||||
|
fdt_del_last_string_(fdt, name);
|
||||||
return err;
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
(*prop)->tag = cpu_to_fdt32(FDT_PROP);
|
(*prop)->tag = cpu_to_fdt32(FDT_PROP);
|
||||||
(*prop)->nameoff = cpu_to_fdt32(namestroff);
|
(*prop)->nameoff = cpu_to_fdt32(namestroff);
|
||||||
|
|
|
@ -1,51 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
@ -82,6 +38,7 @@ static struct fdt_errtabent fdt_errtable[] = {
|
||||||
FDT_ERRTABENT(FDT_ERR_BADVALUE),
|
FDT_ERRTABENT(FDT_ERR_BADVALUE),
|
||||||
FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
|
FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
|
||||||
FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
|
FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
|
||||||
|
FDT_ERRTABENT(FDT_ERR_BADFLAGS),
|
||||||
};
|
};
|
||||||
#define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
|
#define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
|
||||||
|
|
||||||
|
|
|
@ -1,52 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
@ -121,6 +76,12 @@ static int fdt_sw_probe_struct_(void *fdt)
|
||||||
return err; \
|
return err; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint32_t sw_flags(void *fdt)
|
||||||
|
{
|
||||||
|
/* assert: (fdt_magic(fdt) == FDT_SW_MAGIC) */
|
||||||
|
return fdt_last_comp_version(fdt);
|
||||||
|
}
|
||||||
|
|
||||||
/* 'complete' state: Enter this state after fdt_finish()
|
/* 'complete' state: Enter this state after fdt_finish()
|
||||||
*
|
*
|
||||||
* Allowed functions: none
|
* Allowed functions: none
|
||||||
|
@ -141,7 +102,7 @@ static void *fdt_grab_space_(void *fdt, size_t len)
|
||||||
return fdt_offset_ptr_w_(fdt, offset);
|
return fdt_offset_ptr_w_(fdt, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
int fdt_create(void *buf, int bufsize)
|
int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags)
|
||||||
{
|
{
|
||||||
const size_t hdrsize = FDT_ALIGN(sizeof(struct fdt_header),
|
const size_t hdrsize = FDT_ALIGN(sizeof(struct fdt_header),
|
||||||
sizeof(struct fdt_reserve_entry));
|
sizeof(struct fdt_reserve_entry));
|
||||||
|
@ -150,11 +111,22 @@ int fdt_create(void *buf, int bufsize)
|
||||||
if (bufsize < hdrsize)
|
if (bufsize < hdrsize)
|
||||||
return -FDT_ERR_NOSPACE;
|
return -FDT_ERR_NOSPACE;
|
||||||
|
|
||||||
|
if (flags & ~FDT_CREATE_FLAGS_ALL)
|
||||||
|
return -FDT_ERR_BADFLAGS;
|
||||||
|
|
||||||
memset(buf, 0, bufsize);
|
memset(buf, 0, bufsize);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* magic and last_comp_version keep intermediate state during the fdt
|
||||||
|
* creation process, which is replaced with the proper FDT format by
|
||||||
|
* fdt_finish().
|
||||||
|
*
|
||||||
|
* flags should be accessed with sw_flags().
|
||||||
|
*/
|
||||||
fdt_set_magic(fdt, FDT_SW_MAGIC);
|
fdt_set_magic(fdt, FDT_SW_MAGIC);
|
||||||
fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);
|
fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);
|
||||||
fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION);
|
fdt_set_last_comp_version(fdt, flags);
|
||||||
|
|
||||||
fdt_set_totalsize(fdt, bufsize);
|
fdt_set_totalsize(fdt, bufsize);
|
||||||
|
|
||||||
fdt_set_off_mem_rsvmap(fdt, hdrsize);
|
fdt_set_off_mem_rsvmap(fdt, hdrsize);
|
||||||
|
@ -164,6 +136,11 @@ int fdt_create(void *buf, int bufsize)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fdt_create(void *buf, int bufsize)
|
||||||
|
{
|
||||||
|
return fdt_create_with_flags(buf, bufsize, 0);
|
||||||
|
}
|
||||||
|
|
||||||
int fdt_resize(void *fdt, void *buf, int bufsize)
|
int fdt_resize(void *fdt, void *buf, int bufsize)
|
||||||
{
|
{
|
||||||
size_t headsize, tailsize;
|
size_t headsize, tailsize;
|
||||||
|
@ -262,19 +239,13 @@ int fdt_end_node(void *fdt)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fdt_find_add_string_(void *fdt, const char *s)
|
static int fdt_add_string_(void *fdt, const char *s)
|
||||||
{
|
{
|
||||||
char *strtab = (char *)fdt + fdt_totalsize(fdt);
|
char *strtab = (char *)fdt + fdt_totalsize(fdt);
|
||||||
const char *p;
|
|
||||||
int strtabsize = fdt_size_dt_strings(fdt);
|
int strtabsize = fdt_size_dt_strings(fdt);
|
||||||
int len = strlen(s) + 1;
|
int len = strlen(s) + 1;
|
||||||
int struct_top, offset;
|
int struct_top, offset;
|
||||||
|
|
||||||
p = fdt_find_string_(strtab - strtabsize, strtabsize, s);
|
|
||||||
if (p)
|
|
||||||
return p - strtab;
|
|
||||||
|
|
||||||
/* Add it */
|
|
||||||
offset = -strtabsize - len;
|
offset = -strtabsize - len;
|
||||||
struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
|
struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
|
||||||
if (fdt_totalsize(fdt) + offset < struct_top)
|
if (fdt_totalsize(fdt) + offset < struct_top)
|
||||||
|
@ -285,20 +256,56 @@ static int fdt_find_add_string_(void *fdt, const char *s)
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Must only be used to roll back in case of error */
|
||||||
|
static void fdt_del_last_string_(void *fdt, const char *s)
|
||||||
|
{
|
||||||
|
int strtabsize = fdt_size_dt_strings(fdt);
|
||||||
|
int len = strlen(s) + 1;
|
||||||
|
|
||||||
|
fdt_set_size_dt_strings(fdt, strtabsize - len);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int fdt_find_add_string_(void *fdt, const char *s, int *allocated)
|
||||||
|
{
|
||||||
|
char *strtab = (char *)fdt + fdt_totalsize(fdt);
|
||||||
|
int strtabsize = fdt_size_dt_strings(fdt);
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
*allocated = 0;
|
||||||
|
|
||||||
|
p = fdt_find_string_(strtab - strtabsize, strtabsize, s);
|
||||||
|
if (p)
|
||||||
|
return p - strtab;
|
||||||
|
|
||||||
|
*allocated = 1;
|
||||||
|
|
||||||
|
return fdt_add_string_(fdt, s);
|
||||||
|
}
|
||||||
|
|
||||||
int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp)
|
int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp)
|
||||||
{
|
{
|
||||||
struct fdt_property *prop;
|
struct fdt_property *prop;
|
||||||
int nameoff;
|
int nameoff;
|
||||||
|
int allocated;
|
||||||
|
|
||||||
FDT_SW_PROBE_STRUCT(fdt);
|
FDT_SW_PROBE_STRUCT(fdt);
|
||||||
|
|
||||||
nameoff = fdt_find_add_string_(fdt, name);
|
/* String de-duplication can be slow, _NO_NAME_DEDUP skips it */
|
||||||
|
if (sw_flags(fdt) & FDT_CREATE_FLAG_NO_NAME_DEDUP) {
|
||||||
|
allocated = 1;
|
||||||
|
nameoff = fdt_add_string_(fdt, name);
|
||||||
|
} else {
|
||||||
|
nameoff = fdt_find_add_string_(fdt, name, &allocated);
|
||||||
|
}
|
||||||
if (nameoff == 0)
|
if (nameoff == 0)
|
||||||
return -FDT_ERR_NOSPACE;
|
return -FDT_ERR_NOSPACE;
|
||||||
|
|
||||||
prop = fdt_grab_space_(fdt, sizeof(*prop) + FDT_TAGALIGN(len));
|
prop = fdt_grab_space_(fdt, sizeof(*prop) + FDT_TAGALIGN(len));
|
||||||
if (! prop)
|
if (! prop) {
|
||||||
|
if (allocated)
|
||||||
|
fdt_del_last_string_(fdt, name);
|
||||||
return -FDT_ERR_NOSPACE;
|
return -FDT_ERR_NOSPACE;
|
||||||
|
}
|
||||||
|
|
||||||
prop->tag = cpu_to_fdt32(FDT_PROP);
|
prop->tag = cpu_to_fdt32(FDT_PROP);
|
||||||
prop->nameoff = cpu_to_fdt32(nameoff);
|
prop->nameoff = cpu_to_fdt32(nameoff);
|
||||||
|
@ -360,6 +367,10 @@ int fdt_finish(void *fdt)
|
||||||
|
|
||||||
/* Finally, adjust the header */
|
/* Finally, adjust the header */
|
||||||
fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));
|
fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));
|
||||||
|
|
||||||
|
/* And fix up fields that were keeping intermediate state. */
|
||||||
|
fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION);
|
||||||
fdt_set_magic(fdt, FDT_MAGIC);
|
fdt_set_magic(fdt, FDT_MAGIC);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,52 +1,7 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
|
||||||
|
|
|
@ -1,54 +1,9 @@
|
||||||
|
/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
|
||||||
#ifndef LIBFDT_H
|
#ifndef LIBFDT_H
|
||||||
#define LIBFDT_H
|
#define LIBFDT_H
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libfdt_env.h"
|
#include "libfdt_env.h"
|
||||||
|
@ -138,7 +93,15 @@
|
||||||
/* FDT_ERR_NOPHANDLES: The device tree doesn't have any
|
/* FDT_ERR_NOPHANDLES: The device tree doesn't have any
|
||||||
* phandle available anymore without causing an overflow */
|
* phandle available anymore without causing an overflow */
|
||||||
|
|
||||||
#define FDT_ERR_MAX 17
|
#define FDT_ERR_BADFLAGS 18
|
||||||
|
/* FDT_ERR_BADFLAGS: The function was passed a flags field that
|
||||||
|
* contains invalid flags or an invalid combination of flags. */
|
||||||
|
|
||||||
|
#define FDT_ERR_MAX 18
|
||||||
|
|
||||||
|
/* constants */
|
||||||
|
#define FDT_MAX_PHANDLE 0xfffffffe
|
||||||
|
/* Valid values for phandles range from 1 to 2^32-2. */
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
/* Low-level functions (you probably don't need these) */
|
/* Low-level functions (you probably don't need these) */
|
||||||
|
@ -171,6 +134,16 @@ static inline uint32_t fdt32_ld(const fdt32_t *p)
|
||||||
| bp[3];
|
| bp[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void fdt32_st(void *property, uint32_t value)
|
||||||
|
{
|
||||||
|
uint8_t *bp = property;
|
||||||
|
|
||||||
|
bp[0] = value >> 24;
|
||||||
|
bp[1] = (value >> 16) & 0xff;
|
||||||
|
bp[2] = (value >> 8) & 0xff;
|
||||||
|
bp[3] = value & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
static inline uint64_t fdt64_ld(const fdt64_t *p)
|
static inline uint64_t fdt64_ld(const fdt64_t *p)
|
||||||
{
|
{
|
||||||
const uint8_t *bp = (const uint8_t *)p;
|
const uint8_t *bp = (const uint8_t *)p;
|
||||||
|
@ -185,6 +158,20 @@ static inline uint64_t fdt64_ld(const fdt64_t *p)
|
||||||
| bp[7];
|
| bp[7];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void fdt64_st(void *property, uint64_t value)
|
||||||
|
{
|
||||||
|
uint8_t *bp = property;
|
||||||
|
|
||||||
|
bp[0] = value >> 56;
|
||||||
|
bp[1] = (value >> 48) & 0xff;
|
||||||
|
bp[2] = (value >> 40) & 0xff;
|
||||||
|
bp[3] = (value >> 32) & 0xff;
|
||||||
|
bp[4] = (value >> 24) & 0xff;
|
||||||
|
bp[5] = (value >> 16) & 0xff;
|
||||||
|
bp[6] = (value >> 8) & 0xff;
|
||||||
|
bp[7] = value & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
/* Traversal functions */
|
/* Traversal functions */
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
@ -227,7 +214,7 @@ int fdt_next_subnode(const void *fdt, int offset);
|
||||||
* ...
|
* ...
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* if ((node < 0) && (node != -FDT_ERR_NOT_FOUND)) {
|
* if ((node < 0) && (node != -FDT_ERR_NOTFOUND)) {
|
||||||
* Error handling
|
* Error handling
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
|
@ -361,6 +348,20 @@ const char *fdt_get_string(const void *fdt, int stroffset, int *lenp);
|
||||||
*/
|
*/
|
||||||
const char *fdt_string(const void *fdt, int stroffset);
|
const char *fdt_string(const void *fdt, int stroffset);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_find_max_phandle - find and return the highest phandle in a tree
|
||||||
|
* @fdt: pointer to the device tree blob
|
||||||
|
* @phandle: return location for the highest phandle value found in the tree
|
||||||
|
*
|
||||||
|
* fdt_find_max_phandle() finds the highest phandle value in the given device
|
||||||
|
* tree. The value returned in @phandle is only valid if the function returns
|
||||||
|
* success.
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* 0 on success or a negative error code on failure
|
||||||
|
*/
|
||||||
|
int fdt_find_max_phandle(const void *fdt, uint32_t *phandle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fdt_get_max_phandle - retrieves the highest phandle in a tree
|
* fdt_get_max_phandle - retrieves the highest phandle in a tree
|
||||||
* @fdt: pointer to the device tree blob
|
* @fdt: pointer to the device tree blob
|
||||||
|
@ -369,12 +370,39 @@ const char *fdt_string(const void *fdt, int stroffset);
|
||||||
* device tree. This will ignore badly formatted phandles, or phandles
|
* device tree. This will ignore badly formatted phandles, or phandles
|
||||||
* with a value of 0 or -1.
|
* with a value of 0 or -1.
|
||||||
*
|
*
|
||||||
|
* This function is deprecated in favour of fdt_find_max_phandle().
|
||||||
|
*
|
||||||
* returns:
|
* returns:
|
||||||
* the highest phandle on success
|
* the highest phandle on success
|
||||||
* 0, if no phandle was found in the device tree
|
* 0, if no phandle was found in the device tree
|
||||||
* -1, if an error occurred
|
* -1, if an error occurred
|
||||||
*/
|
*/
|
||||||
uint32_t fdt_get_max_phandle(const void *fdt);
|
static inline uint32_t fdt_get_max_phandle(const void *fdt)
|
||||||
|
{
|
||||||
|
uint32_t phandle;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = fdt_find_max_phandle(fdt, &phandle);
|
||||||
|
if (err < 0)
|
||||||
|
return (uint32_t)-1;
|
||||||
|
|
||||||
|
return phandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_generate_phandle - return a new, unused phandle for a device tree blob
|
||||||
|
* @fdt: pointer to the device tree blob
|
||||||
|
* @phandle: return location for the new phandle
|
||||||
|
*
|
||||||
|
* Walks the device tree blob and looks for the highest phandle value. On
|
||||||
|
* success, the new, unused phandle value (one higher than the previously
|
||||||
|
* highest phandle value in the device tree blob) will be returned in the
|
||||||
|
* @phandle parameter.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success or a negative error-code on failure
|
||||||
|
*/
|
||||||
|
int fdt_generate_phandle(const void *fdt, uint32_t *phandle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fdt_num_mem_rsv - retrieve the number of memory reserve map entries
|
* fdt_num_mem_rsv - retrieve the number of memory reserve map entries
|
||||||
|
@ -566,7 +594,7 @@ int fdt_next_property_offset(const void *fdt, int offset);
|
||||||
* ...
|
* ...
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* if ((property < 0) && (property != -FDT_ERR_NOT_FOUND)) {
|
* if ((property < 0) && (property != -FDT_ERR_NOTFOUND)) {
|
||||||
* Error handling
|
* Error handling
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
|
@ -669,7 +697,7 @@ static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset,
|
||||||
/**
|
/**
|
||||||
* fdt_getprop_by_offset - retrieve the value of a property at a given offset
|
* fdt_getprop_by_offset - retrieve the value of a property at a given offset
|
||||||
* @fdt: pointer to the device tree blob
|
* @fdt: pointer to the device tree blob
|
||||||
* @ffset: offset of the property to read
|
* @offset: offset of the property to read
|
||||||
* @namep: pointer to a string variable (will be overwritten) or NULL
|
* @namep: pointer to a string variable (will be overwritten) or NULL
|
||||||
* @lenp: pointer to an integer variable (will be overwritten) or NULL
|
* @lenp: pointer to an integer variable (will be overwritten) or NULL
|
||||||
*
|
*
|
||||||
|
@ -1360,7 +1388,45 @@ int fdt_nop_node(void *fdt, int nodeoffset);
|
||||||
/* Sequential write functions */
|
/* Sequential write functions */
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
|
/* fdt_create_with_flags flags */
|
||||||
|
#define FDT_CREATE_FLAG_NO_NAME_DEDUP 0x1
|
||||||
|
/* FDT_CREATE_FLAG_NO_NAME_DEDUP: Do not try to de-duplicate property
|
||||||
|
* names in the fdt. This can result in faster creation times, but
|
||||||
|
* a larger fdt. */
|
||||||
|
|
||||||
|
#define FDT_CREATE_FLAGS_ALL (FDT_CREATE_FLAG_NO_NAME_DEDUP)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_create_with_flags - begin creation of a new fdt
|
||||||
|
* @fdt: pointer to memory allocated where fdt will be created
|
||||||
|
* @bufsize: size of the memory space at fdt
|
||||||
|
* @flags: a valid combination of FDT_CREATE_FLAG_ flags, or 0.
|
||||||
|
*
|
||||||
|
* fdt_create_with_flags() begins the process of creating a new fdt with
|
||||||
|
* the sequential write interface.
|
||||||
|
*
|
||||||
|
* fdt creation process must end with fdt_finished() to produce a valid fdt.
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* 0, on success
|
||||||
|
* -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt
|
||||||
|
* -FDT_ERR_BADFLAGS, flags is not valid
|
||||||
|
*/
|
||||||
|
int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_create - begin creation of a new fdt
|
||||||
|
* @fdt: pointer to memory allocated where fdt will be created
|
||||||
|
* @bufsize: size of the memory space at fdt
|
||||||
|
*
|
||||||
|
* fdt_create() is equivalent to fdt_create_with_flags() with flags=0.
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* 0, on success
|
||||||
|
* -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt
|
||||||
|
*/
|
||||||
int fdt_create(void *buf, int bufsize);
|
int fdt_create(void *buf, int bufsize);
|
||||||
|
|
||||||
int fdt_resize(void *fdt, void *buf, int bufsize);
|
int fdt_resize(void *fdt, void *buf, int bufsize);
|
||||||
int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);
|
int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);
|
||||||
int fdt_finish_reservemap(void *fdt);
|
int fdt_finish_reservemap(void *fdt);
|
||||||
|
@ -1831,6 +1897,43 @@ static inline int fdt_appendprop_cell(void *fdt, int nodeoffset,
|
||||||
#define fdt_appendprop_string(fdt, nodeoffset, name, str) \
|
#define fdt_appendprop_string(fdt, nodeoffset, name, str) \
|
||||||
fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
|
fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_appendprop_addrrange - append a address range property
|
||||||
|
* @fdt: pointer to the device tree blob
|
||||||
|
* @parent: offset of the parent node
|
||||||
|
* @nodeoffset: offset of the node to add a property at
|
||||||
|
* @name: name of property
|
||||||
|
* @addr: start address of a given range
|
||||||
|
* @size: size of a given range
|
||||||
|
*
|
||||||
|
* fdt_appendprop_addrrange() appends an address range value (start
|
||||||
|
* address and size) to the value of the named property in the given
|
||||||
|
* node, or creates a new property with that value if it does not
|
||||||
|
* already exist.
|
||||||
|
* If "name" is not specified, a default "reg" is used.
|
||||||
|
* Cell sizes are determined by parent's #address-cells and #size-cells.
|
||||||
|
*
|
||||||
|
* This function may insert data into the blob, and will therefore
|
||||||
|
* change the offsets of some existing nodes.
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* 0, on success
|
||||||
|
* -FDT_ERR_BADLAYOUT,
|
||||||
|
* -FDT_ERR_BADMAGIC,
|
||||||
|
* -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid
|
||||||
|
* #address-cells property
|
||||||
|
* -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
|
||||||
|
* -FDT_ERR_BADSTATE,
|
||||||
|
* -FDT_ERR_BADSTRUCTURE,
|
||||||
|
* -FDT_ERR_BADVERSION,
|
||||||
|
* -FDT_ERR_BADVALUE, addr or size doesn't fit to respective cells size
|
||||||
|
* -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
|
||||||
|
* contain a new property
|
||||||
|
* -FDT_ERR_TRUNCATED, standard meanings
|
||||||
|
*/
|
||||||
|
int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset,
|
||||||
|
const char *name, uint64_t addr, uint64_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fdt_delprop - delete a property
|
* fdt_delprop - delete a property
|
||||||
* @fdt: pointer to the device tree blob
|
* @fdt: pointer to the device tree blob
|
||||||
|
|
|
@ -1,57 +1,13 @@
|
||||||
|
/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
|
||||||
#ifndef LIBFDT_ENV_H
|
#ifndef LIBFDT_ENV_H
|
||||||
#define LIBFDT_ENV_H
|
#define LIBFDT_ENV_H
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
* Copyright 2012 Kim Phillips, Freescale Semiconductor.
|
* Copyright 2012 Kim Phillips, Freescale Semiconductor.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -1,54 +1,9 @@
|
||||||
|
/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
|
||||||
#ifndef LIBFDT_INTERNAL_H
|
#ifndef LIBFDT_INTERNAL_H
|
||||||
#define LIBFDT_INTERNAL_H
|
#define LIBFDT_INTERNAL_H
|
||||||
/*
|
/*
|
||||||
* libfdt - Flat Device Tree manipulation
|
* libfdt - Flat Device Tree manipulation
|
||||||
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
* Copyright (C) 2006 David Gibson, IBM Corporation.
|
||||||
*
|
|
||||||
* libfdt is dual licensed: you can use it either under the terms of
|
|
||||||
* the GPL, or the BSD license, at your option.
|
|
||||||
*
|
|
||||||
* a) This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this library; if not, write to the Free
|
|
||||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
||||||
* MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Alternatively,
|
|
||||||
*
|
|
||||||
* b) Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
#include <fdt.h>
|
#include <fdt.h>
|
||||||
|
|
||||||
|
|
|
@ -234,6 +234,7 @@ struct node * add_orphan_node(struct node *dt, struct node *new_node, char *ref)
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
if (ref[0] == '/') {
|
if (ref[0] == '/') {
|
||||||
|
d = data_add_marker(d, TYPE_STRING, ref);
|
||||||
d = data_append_data(d, ref, strlen(ref) + 1);
|
d = data_append_data(d, ref, strlen(ref) + 1);
|
||||||
|
|
||||||
p = build_property("target-path", d, NULL);
|
p = build_property("target-path", d, NULL);
|
||||||
|
@ -335,17 +336,20 @@ void delete_node(struct node *node)
|
||||||
}
|
}
|
||||||
|
|
||||||
void append_to_property(struct node *node,
|
void append_to_property(struct node *node,
|
||||||
char *name, const void *data, int len)
|
char *name, const void *data, int len,
|
||||||
|
enum markertype type)
|
||||||
{
|
{
|
||||||
struct data d;
|
struct data d;
|
||||||
struct property *p;
|
struct property *p;
|
||||||
|
|
||||||
p = get_property(node, name);
|
p = get_property(node, name);
|
||||||
if (p) {
|
if (p) {
|
||||||
d = data_append_data(p->val, data, len);
|
d = data_add_marker(p->val, type, name);
|
||||||
|
d = data_append_data(d, data, len);
|
||||||
p->val = d;
|
p->val = d;
|
||||||
} else {
|
} else {
|
||||||
d = data_append_data(empty_data, data, len);
|
d = data_add_marker(empty_data, type, name);
|
||||||
|
d = data_append_data(d, data, len);
|
||||||
p = build_property(name, d, NULL);
|
p = build_property(name, d, NULL);
|
||||||
add_property(node, p);
|
add_property(node, p);
|
||||||
}
|
}
|
||||||
|
@ -843,8 +847,8 @@ static void generate_label_tree_internal(struct dt_info *dti,
|
||||||
|
|
||||||
/* insert it */
|
/* insert it */
|
||||||
p = build_property(l->label,
|
p = build_property(l->label,
|
||||||
data_copy_mem(node->fullpath,
|
data_copy_escape_string(node->fullpath,
|
||||||
strlen(node->fullpath) + 1),
|
strlen(node->fullpath)),
|
||||||
NULL);
|
NULL);
|
||||||
add_property(an, p);
|
add_property(an, p);
|
||||||
}
|
}
|
||||||
|
@ -895,7 +899,7 @@ static void add_fixup_entry(struct dt_info *dti, struct node *fn,
|
||||||
|
|
||||||
xasprintf(&entry, "%s:%s:%u",
|
xasprintf(&entry, "%s:%s:%u",
|
||||||
node->fullpath, prop->name, m->offset);
|
node->fullpath, prop->name, m->offset);
|
||||||
append_to_property(fn, m->ref, entry, strlen(entry) + 1);
|
append_to_property(fn, m->ref, entry, strlen(entry) + 1, TYPE_STRING);
|
||||||
|
|
||||||
free(entry);
|
free(entry);
|
||||||
}
|
}
|
||||||
|
@ -955,7 +959,7 @@ static void add_local_fixup_entry(struct dt_info *dti,
|
||||||
char **compp;
|
char **compp;
|
||||||
int i, depth;
|
int i, depth;
|
||||||
|
|
||||||
/* walk back retreiving depth */
|
/* walk back retrieving depth */
|
||||||
depth = 0;
|
depth = 0;
|
||||||
for (wn = node; wn; wn = wn->parent)
|
for (wn = node; wn; wn = wn->parent)
|
||||||
depth++;
|
depth++;
|
||||||
|
@ -978,7 +982,7 @@ static void add_local_fixup_entry(struct dt_info *dti,
|
||||||
free(compp);
|
free(compp);
|
||||||
|
|
||||||
value_32 = cpu_to_fdt32(m->offset);
|
value_32 = cpu_to_fdt32(m->offset);
|
||||||
append_to_property(wn, prop->name, &value_32, sizeof(value_32));
|
append_to_property(wn, prop->name, &value_32, sizeof(value_32), TYPE_UINT32);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void generate_local_fixups_tree_internal(struct dt_info *dti,
|
static void generate_local_fixups_tree_internal(struct dt_info *dti,
|
||||||
|
|
|
@ -108,7 +108,7 @@ int utilfdt_read_err(const char *filename, char **buffp, size_t *len);
|
||||||
* stderr.
|
* stderr.
|
||||||
*
|
*
|
||||||
* @param filename The filename to write, or - for stdout
|
* @param filename The filename to write, or - for stdout
|
||||||
* @param blob Poiner to buffer containing fdt
|
* @param blob Pointer to buffer containing fdt
|
||||||
* @return 0 if ok, -1 on error
|
* @return 0 if ok, -1 on error
|
||||||
*/
|
*/
|
||||||
int utilfdt_write(const char *filename, const void *blob);
|
int utilfdt_write(const char *filename, const void *blob);
|
||||||
|
@ -119,7 +119,7 @@ int utilfdt_write(const char *filename, const void *blob);
|
||||||
* an error message for the user.
|
* an error message for the user.
|
||||||
*
|
*
|
||||||
* @param filename The filename to write, or - for stdout
|
* @param filename The filename to write, or - for stdout
|
||||||
* @param blob Poiner to buffer containing fdt
|
* @param blob Pointer to buffer containing fdt
|
||||||
* @return 0 if ok, else an errno value representing the error
|
* @return 0 if ok, else an errno value representing the error
|
||||||
*/
|
*/
|
||||||
int utilfdt_write_err(const char *filename, const void *blob);
|
int utilfdt_write_err(const char *filename, const void *blob);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#define DTC_VERSION "DTC 1.4.7-gf267e674"
|
#define DTC_VERSION "DTC 1.5.0-g702c1b6c"
|
||||||
|
|
Loading…
Reference in New Issue