Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'devicetree-for-6.15' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux

Pull devicetree updates from Rob Herring:
"DT core:

- Fix ref counting errors in interrupt parsing code

- Allow "nonposted-mmio" property per device and on non-Apple h/w

- Use typed accessors in platform driver code

- Fix mismatch between DT MAX_PHANDLE_ARGS and
NR_FWNODE_REFERENCE_ARGS and increase the maximum number args

- Rework of_resolve_phandles() to use __free() cleanup and fix ref
count error

- Use of_prop_cmp() in a few more places

- Improve make_fit.py script error handling

DT bindings:

- Update DT property ordering rules for properties within groups
(i.e. common suffix)

- Update DT submitting-patches doc to cover sending .dts patches and
SoC maintainer rules on being warning free against linux-next

- Add ti,tps53681, ti,tps53681, Maxim max15301, max15303, and
max20751 to trivial devices

- Add Renesas RZ/V2H(P) and Allwinner H616 support to Arm Mali
Bifrost GPU. Add Samsung exynos7870 support to Arm Mail Midgard.

- Rework qcom,ebi2 and samsung,exynos4210-sram memory controller
bindings to split child node properties. Fix the LAN9115 binding to
use the child node schema so all properties are documented.

- Convert nxp,lpc3220-mic and Altera ECC manager bindings to schema

- Fix some issues with LVDS display panels causing validation
warnings

- Drop some obsolete parts of Xilinx bindings"

* tag 'devicetree-for-6.15' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (48 commits)
scripts/make_fit: Print DT name before libfdt errors
dt-bindings: edac: altera: socfpga: Convert to YAML
dt-bindings: pps: gpio: Correct indentation and style in DTS example
media: dt-bindings: mediatek,vcodec-encoder: Drop assigned-clock properties
of: address: Allow to specify nonposted-mmio per-device
of: address: Expand nonposted-mmio to non-Apple Silicon platforms
docs: dt-bindings: Specify ordering for properties within groups
dt-bindings: gpu: arm,mali-midgard: add exynos7870-mali compatible
of: Move of_prop_val_eq() next to the single user
of/platform: Use typed accessors rather than of_get_property()
dt-bindings: trivial-devices: Add Maxim max15301, max15303, and max20751
dt-bindings: fsi: ibm,p9-scom: Add "ibm,fsi2pib" compatible
dt-bindings: memory-controllers: qcom,ebi2: Enforce child props
dt-bindings: memory-controllers: samsung,exynos4210-srom: Enforce child props
dt-bindings: display: mitsubishi,aa104xd12: Adjust allowed and required properties
dt-bindings: display: mitsubishi,aa104xd12: Allow jeida-18 for data-mapping
dt-bindings: interrupt-controller: Convert nxp,lpc3220-mic.txt to yaml format
docs: process: maintainer-soc-clean-dts: linux-next is decisive
docs: dt: submitting-patches: Document sending DTS patches
of: Align macro MAX_PHANDLE_ARGS with NR_FWNODE_REFERENCE_ARGS
...

+764 -707
+2 -85
Documentation/devicetree/bindings/bus/qcom,ebi2.yaml Documentation/devicetree/bindings/memory-controllers/qcom,ebi2.yaml
··· 1 1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 2 %YAML 1.2 3 3 --- 4 - $id: http://devicetree.org/schemas/bus/qcom,ebi2.yaml# 4 + $id: http://devicetree.org/schemas/memory-controllers/qcom,ebi2.yaml# 5 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 6 6 7 7 title: Qualcomm External Bus Interface 2 (EBI2) ··· 104 104 patternProperties: 105 105 "^.*@[0-5],[0-9a-f]+$": 106 106 type: object 107 + $ref: mc-peripheral-props.yaml# 107 108 additionalProperties: true 108 - properties: 109 - reg: 110 - maxItems: 1 111 - 112 - # SLOW chip selects 113 - qcom,xmem-recovery-cycles: 114 - $ref: /schemas/types.yaml#/definitions/uint32 115 - description: > 116 - The time the memory continues to drive the data bus after OE 117 - is de-asserted, in order to avoid contention on the data bus. 118 - They are inserted when reading one CS and switching to another 119 - CS or read followed by write on the same CS. Minimum value is 120 - actually 1, so a value of 0 will still yield 1 recovery cycle. 121 - minimum: 0 122 - maximum: 15 123 - 124 - qcom,xmem-write-hold-cycles: 125 - $ref: /schemas/types.yaml#/definitions/uint32 126 - description: > 127 - The extra cycles inserted after every write minimum 1. The 128 - data out is driven from the time WE is asserted until CS is 129 - asserted. With a hold of 1 (value = 0), the CS stays active 130 - for 1 extra cycle, etc. 131 - minimum: 0 132 - maximum: 15 133 - 134 - qcom,xmem-write-delta-cycles: 135 - $ref: /schemas/types.yaml#/definitions/uint32 136 - description: > 137 - The initial latency for write cycles inserted for the first 138 - write to a page or burst memory. 139 - minimum: 0 140 - maximum: 255 141 - 142 - qcom,xmem-read-delta-cycles: 143 - $ref: /schemas/types.yaml#/definitions/uint32 144 - description: > 145 - The initial latency for read cycles inserted for the first 146 - read to a page or burst memory. 147 - minimum: 0 148 - maximum: 255 149 - 150 - qcom,xmem-write-wait-cycles: 151 - $ref: /schemas/types.yaml#/definitions/uint32 152 - description: > 153 - The number of wait cycles for every write access. 154 - minimum: 0 155 - maximum: 15 156 - 157 - qcom,xmem-read-wait-cycles: 158 - $ref: /schemas/types.yaml#/definitions/uint32 159 - description: > 160 - The number of wait cycles for every read access. 161 - minimum: 0 162 - maximum: 15 163 - 164 - 165 - # FAST chip selects 166 - qcom,xmem-address-hold-enable: 167 - $ref: /schemas/types.yaml#/definitions/uint32 168 - description: > 169 - Holds the address for an extra cycle to meet hold time 170 - requirements with ADV assertion, when set to 1. 171 - enum: [ 0, 1 ] 172 - 173 - qcom,xmem-adv-to-oe-recovery-cycles: 174 - $ref: /schemas/types.yaml#/definitions/uint32 175 - description: > 176 - The number of cycles elapsed before an OE assertion, with 177 - respect to the cycle where ADV (address valid) is asserted. 178 - minimum: 0 179 - maximum: 3 180 - 181 - qcom,xmem-read-hold-cycles: 182 - $ref: /schemas/types.yaml#/definitions/uint32 183 - description: > 184 - The length in cycles of the first segment of a read transfer. 185 - For a single read transfer this will be the time from CS 186 - assertion to OE assertion. 187 - minimum: 0 188 - maximum: 15 189 - 190 - required: 191 - - reg 192 109 193 110 additionalProperties: false 194 111
+1
Documentation/devicetree/bindings/display/bridge/lvds-codec.yaml
··· 41 41 - enum: 42 42 - ti,ds90cf364a # For the DS90CF364A FPD-Link LVDS Receiver 43 43 - ti,ds90cf384a # For the DS90CF384A FPD-Link LVDS Receiver 44 + - ti,sn65lvds822 # For the SN65LVDS822 FlatLink LVDS Receiver 44 45 - ti,sn65lvds94 # For the SN65DS94 LVDS serdes 45 46 - const: lvds-decoder # Generic LVDS decoders compatible fallback 46 47 - enum:
+4 -2
Documentation/devicetree/bindings/display/panel/mitsubishi,aa104xd12.yaml
··· 33 33 description: Reference to the regulator powering the panel VCC pins. 34 34 35 35 data-mapping: 36 - const: jeida-24 36 + enum: 37 + - jeida-18 38 + - jeida-24 37 39 38 40 width-mm: 39 41 const: 210 ··· 43 41 height-mm: 44 42 const: 158 45 43 44 + backlight: true 46 45 panel-timing: true 47 46 port: true 48 47 ··· 51 48 52 49 required: 53 50 - compatible 54 - - vcc-supply 55 51 - data-mapping 56 52 - width-mm 57 53 - height-mm
+7 -1
Documentation/devicetree/bindings/dts-coding-style.rst
··· 133 133 3. Status is the last information to annotate that device node is or is not 134 134 finished (board resources are needed). 135 135 136 + The individual properties inside each group shall use natural sort order by 137 + the property name. 138 + 136 139 Example:: 137 140 138 141 /* SoC DTSI */ ··· 161 158 /* Board DTS */ 162 159 163 160 &device_node { 164 - vdd-supply = <&board_vreg1>; 161 + vdd-0v9-supply = <&board_vreg1>; 162 + vdd-1v8-supply = <&board_vreg4>; 163 + vdd-3v3-supply = <&board_vreg2>; 164 + vdd-12v-supply = <&board_vreg3>; 165 165 status = "okay"; 166 166 } 167 167
+323
Documentation/devicetree/bindings/edac/altr,socfpga-ecc-manager.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + # Copyright (C) 2025 Altera Corporation 3 + %YAML 1.2 4 + --- 5 + $id: http://devicetree.org/schemas/edac/altr,socfpga-ecc-manager.yaml# 6 + $schema: http://devicetree.org/meta-schemas/core.yaml# 7 + 8 + title: Altera SoCFPGA ECC Manager 9 + 10 + maintainers: 11 + - Matthew Gerlach <matthew.gerlach@altera.com> 12 + 13 + description: 14 + This binding describes the device tree nodes required for the Altera SoCFPGA 15 + ECC Manager for the Cyclone5, Arria5, Arria10, Stratix10, and Agilex chip 16 + families. 17 + 18 + properties: 19 + 20 + compatible: 21 + oneOf: 22 + - items: 23 + - const: altr,socfpga-s10-ecc-manager 24 + - const: altr,socfpga-a10-ecc-manager 25 + - const: altr,socfpga-a10-ecc-manager 26 + - const: altr,socfpga-ecc-manager 27 + 28 + "#address-cells": 29 + const: 1 30 + 31 + "#size-cells": 32 + const: 1 33 + 34 + interrupts: 35 + minItems: 1 36 + maxItems: 2 37 + 38 + interrupt-controller: true 39 + 40 + "#interrupt-cells": 41 + const: 2 42 + 43 + ranges: true 44 + 45 + altr,sysmgr-syscon: 46 + $ref: /schemas/types.yaml#/definitions/phandle 47 + description: phandle to Stratix10 System Manager Block with the ECC manager registers 48 + 49 + sdramedac: 50 + type: object 51 + additionalProperties: false 52 + 53 + properties: 54 + compatible: 55 + enum: 56 + - altr,sdram-edac-a10 57 + - altr,sdram-edac-s10 58 + 59 + interrupts: 60 + minItems: 1 61 + maxItems: 2 62 + 63 + altr,sdr-syscon: 64 + $ref: /schemas/types.yaml#/definitions/phandle 65 + description: phandle to SDRAM parent 66 + 67 + required: 68 + - compatible 69 + - interrupts 70 + - altr,sdr-syscon 71 + 72 + patternProperties: 73 + "^ocram-ecc@[a-f0-9]+$": 74 + type: object 75 + additionalProperties: false 76 + 77 + properties: 78 + compatible: 79 + oneOf: 80 + - items: 81 + - const: altr,socfpga-s10-ocram-ecc 82 + - const: altr,socfpga-a10-ocram-ecc 83 + - const: altr,socfpga-a10-ocram-ecc 84 + - const: altr,socfpga-ocram-ecc 85 + 86 + reg: 87 + maxItems: 1 88 + 89 + interrupts: 90 + minItems: 1 91 + maxItems: 2 92 + 93 + iram: 94 + $ref: /schemas/types.yaml#/definitions/phandle 95 + description: phandle to OCRAM parent 96 + 97 + altr,ecc-parent: 98 + $ref: /schemas/types.yaml#/definitions/phandle 99 + description: phandle to OCRAM parent 100 + 101 + required: 102 + - compatible 103 + - reg 104 + - interrupts 105 + 106 + "^usb[0-9]-ecc@[a-f0-9]+$": 107 + type: object 108 + additionalProperties: false 109 + 110 + properties: 111 + compatible: 112 + oneOf: 113 + - items: 114 + - const: altr,socfpga-s10-usb-ecc 115 + - const: altr,socfpga-usb-ecc 116 + - const: altr,socfpga-usb-ecc 117 + 118 + reg: 119 + maxItems: 1 120 + 121 + interrupts: 122 + minItems: 1 123 + maxItems: 2 124 + 125 + altr,ecc-parent: 126 + $ref: /schemas/types.yaml#/definitions/phandle 127 + description: phandle to USB parent 128 + 129 + required: 130 + - compatible 131 + - reg 132 + - interrupts 133 + - altr,ecc-parent 134 + 135 + "^emac[0-9]-[t,r]x-ecc@[a-f0-9]+$": 136 + type: object 137 + additionalProperties: false 138 + 139 + properties: 140 + compatible: 141 + oneOf: 142 + - items: 143 + - const: altr,socfpga-s10-eth-mac-ecc 144 + - const: altr,socfpga-eth-mac-ecc 145 + - const: altr,socfpga-eth-mac-ecc 146 + 147 + reg: 148 + maxItems: 1 149 + 150 + interrupts: 151 + minItems: 1 152 + maxItems: 2 153 + 154 + altr,ecc-parent: 155 + $ref: /schemas/types.yaml#/definitions/phandle 156 + description: phandle to ethernet parent 157 + 158 + required: 159 + - compatible 160 + - reg 161 + - interrupts 162 + - altr,ecc-parent 163 + 164 + "^sdmmc[a-f]-ecc@[a-f0-9]+$": 165 + type: object 166 + additionalProperties: false 167 + 168 + properties: 169 + compatible: 170 + oneOf: 171 + - items: 172 + - const: altr,socfpga-s10-sdmmc-ecc 173 + - const: altr,socfpga-sdmmc-ecc 174 + - const: altr,socfpga-sdmmc-ecc 175 + 176 + reg: 177 + maxItems: 1 178 + 179 + interrupts: 180 + minItems: 2 181 + maxItems: 4 182 + 183 + altr,ecc-parent: 184 + $ref: /schemas/types.yaml#/definitions/phandle 185 + description: phandle to SD/MMC parent 186 + 187 + required: 188 + - compatible 189 + - reg 190 + - interrupts 191 + - altr,ecc-parent 192 + 193 + "^l2-ecc@[a-f0-9]+$": 194 + type: object 195 + additionalProperties: false 196 + 197 + properties: 198 + compatible: 199 + enum: 200 + - altr,socfpga-a10-l2-ecc 201 + - altr,socfpga-l2-ecc 202 + 203 + reg: 204 + maxItems: 1 205 + 206 + interrupts: 207 + maxItems: 2 208 + 209 + required: 210 + - compatible 211 + - reg 212 + - interrupts 213 + 214 + "^dma-ecc@[a-f0-9]+$": 215 + type: object 216 + additionalProperties: false 217 + 218 + properties: 219 + compatible: 220 + const: altr,socfpga-dma-ecc 221 + reg: 222 + maxItems: 1 223 + 224 + interrupts: 225 + maxItems: 2 226 + 227 + altr,ecc-parent: 228 + $ref: /schemas/types.yaml#/definitions/phandle 229 + description: phandle to SD/MMC parent 230 + 231 + required: 232 + - compatible 233 + - reg 234 + - interrupts 235 + - altr,ecc-parent 236 + 237 + if: 238 + properties: 239 + compatible: 240 + contains: 241 + const: altr,socfpga-ecc-manager 242 + then: 243 + required: 244 + - compatible 245 + - "#address-cells" 246 + - "#size-cells" 247 + - ranges 248 + 249 + else: 250 + required: 251 + - compatible 252 + - "#address-cells" 253 + - "#size-cells" 254 + - interrupts 255 + - interrupt-controller 256 + - "#interrupt-cells" 257 + - ranges 258 + - altr,sysmgr-syscon 259 + 260 + additionalProperties: false 261 + 262 + examples: 263 + - | 264 + #include <dt-bindings/interrupt-controller/arm-gic.h> 265 + #include <dt-bindings/interrupt-controller/irq.h> 266 + eccmgr { 267 + compatible = "altr,socfpga-s10-ecc-manager", 268 + "altr,socfpga-a10-ecc-manager"; 269 + altr,sysmgr-syscon = <&sysmgr>; 270 + #address-cells = <1>; 271 + #size-cells = <1>; 272 + interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; 273 + interrupt-controller; 274 + #interrupt-cells = <2>; 275 + ranges; 276 + 277 + sdramedac { 278 + compatible = "altr,sdram-edac-s10"; 279 + altr,sdr-syscon = <&sdr>; 280 + interrupts = <16 IRQ_TYPE_LEVEL_HIGH>; 281 + }; 282 + 283 + ocram-ecc@ff8cc000 { 284 + compatible = "altr,socfpga-s10-ocram-ecc", 285 + "altr,socfpga-a10-ocram-ecc"; 286 + reg = <0xff8cc000 0x100>; 287 + altr,ecc-parent = <&ocram>; 288 + interrupts = <1 IRQ_TYPE_LEVEL_HIGH>; 289 + }; 290 + 291 + usb0-ecc@ff8c4000 { 292 + compatible = "altr,socfpga-s10-usb-ecc", 293 + "altr,socfpga-usb-ecc"; 294 + reg = <0xff8c4000 0x100>; 295 + altr,ecc-parent = <&usb0>; 296 + interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; 297 + }; 298 + 299 + emac0-rx-ecc@ff8c0000 { 300 + compatible = "altr,socfpga-s10-eth-mac-ecc", 301 + "altr,socfpga-eth-mac-ecc"; 302 + reg = <0xff8c0000 0x100>; 303 + altr,ecc-parent = <&gmac0>; 304 + interrupts = <4 IRQ_TYPE_LEVEL_HIGH>; 305 + }; 306 + 307 + emac0-tx-ecc@ff8c0400 { 308 + compatible = "altr,socfpga-s10-eth-mac-ecc", 309 + "altr,socfpga-eth-mac-ecc"; 310 + reg = <0xff8c0400 0x100>; 311 + altr,ecc-parent = <&gmac0>; 312 + interrupts = <5 IRQ_TYPE_LEVEL_HIGH>; 313 + }; 314 + 315 + sdmmca-ecc@ff8c8c00 { 316 + compatible = "altr,socfpga-s10-sdmmc-ecc", 317 + "altr,socfpga-sdmmc-ecc"; 318 + reg = <0xff8c8c00 0x100>; 319 + altr,ecc-parent = <&mmc>; 320 + interrupts = <14 IRQ_TYPE_LEVEL_HIGH>, 321 + <15 IRQ_TYPE_LEVEL_HIGH>; 322 + }; 323 + };
-383
Documentation/devicetree/bindings/edac/socfpga-eccmgr.txt
··· 1 - Altera SoCFPGA ECC Manager 2 - This driver uses the EDAC framework to implement the SOCFPGA ECC Manager. 3 - The ECC Manager counts and corrects single bit errors and counts/handles 4 - double bit errors which are uncorrectable. 5 - 6 - Cyclone5 and Arria5 ECC Manager 7 - Required Properties: 8 - - compatible : Should be "altr,socfpga-ecc-manager" 9 - - #address-cells: must be 1 10 - - #size-cells: must be 1 11 - - ranges : standard definition, should translate from local addresses 12 - 13 - Subcomponents: 14 - 15 - L2 Cache ECC 16 - Required Properties: 17 - - compatible : Should be "altr,socfpga-l2-ecc" 18 - - reg : Address and size for ECC error interrupt clear registers. 19 - - interrupts : Should be single bit error interrupt, then double bit error 20 - interrupt. Note the rising edge type. 21 - 22 - On Chip RAM ECC 23 - Required Properties: 24 - - compatible : Should be "altr,socfpga-ocram-ecc" 25 - - reg : Address and size for ECC error interrupt clear registers. 26 - - iram : phandle to On-Chip RAM definition. 27 - - interrupts : Should be single bit error interrupt, then double bit error 28 - interrupt. Note the rising edge type. 29 - 30 - Example: 31 - 32 - eccmgr: eccmgr@ffd08140 { 33 - compatible = "altr,socfpga-ecc-manager"; 34 - #address-cells = <1>; 35 - #size-cells = <1>; 36 - ranges; 37 - 38 - l2-ecc@ffd08140 { 39 - compatible = "altr,socfpga-l2-ecc"; 40 - reg = <0xffd08140 0x4>; 41 - interrupts = <0 36 1>, <0 37 1>; 42 - }; 43 - 44 - ocram-ecc@ffd08144 { 45 - compatible = "altr,socfpga-ocram-ecc"; 46 - reg = <0xffd08144 0x4>; 47 - iram = <&ocram>; 48 - interrupts = <0 178 1>, <0 179 1>; 49 - }; 50 - }; 51 - 52 - Arria10 SoCFPGA ECC Manager 53 - The Arria10 SoC ECC Manager handles the IRQs for each peripheral 54 - in a shared register instead of individual IRQs like the Cyclone5 55 - and Arria5. Therefore the device tree is different as well. 56 - 57 - Required Properties: 58 - - compatible : Should be "altr,socfpga-a10-ecc-manager" 59 - - altr,sysgr-syscon : phandle to Arria10 System Manager Block 60 - containing the ECC manager registers. 61 - - #address-cells: must be 1 62 - - #size-cells: must be 1 63 - - interrupts : Should be single bit error interrupt, then double bit error 64 - interrupt. 65 - - interrupt-controller : boolean indicator that ECC Manager is an interrupt controller 66 - - #interrupt-cells : must be set to 2. 67 - - ranges : standard definition, should translate from local addresses 68 - 69 - Subcomponents: 70 - 71 - L2 Cache ECC 72 - Required Properties: 73 - - compatible : Should be "altr,socfpga-a10-l2-ecc" 74 - - reg : Address and size for ECC error interrupt clear registers. 75 - - interrupts : Should be single bit error interrupt, then double bit error 76 - interrupt, in this order. 77 - 78 - On-Chip RAM ECC 79 - Required Properties: 80 - - compatible : Should be "altr,socfpga-a10-ocram-ecc" 81 - - reg : Address and size for ECC block registers. 82 - - interrupts : Should be single bit error interrupt, then double bit error 83 - interrupt, in this order. 84 - 85 - Ethernet FIFO ECC 86 - Required Properties: 87 - - compatible : Should be "altr,socfpga-eth-mac-ecc" 88 - - reg : Address and size for ECC block registers. 89 - - altr,ecc-parent : phandle to parent Ethernet node. 90 - - interrupts : Should be single bit error interrupt, then double bit error 91 - interrupt, in this order. 92 - 93 - NAND FIFO ECC 94 - Required Properties: 95 - - compatible : Should be "altr,socfpga-nand-ecc" 96 - - reg : Address and size for ECC block registers. 97 - - altr,ecc-parent : phandle to parent NAND node. 98 - - interrupts : Should be single bit error interrupt, then double bit error 99 - interrupt, in this order. 100 - 101 - DMA FIFO ECC 102 - Required Properties: 103 - - compatible : Should be "altr,socfpga-dma-ecc" 104 - - reg : Address and size for ECC block registers. 105 - - altr,ecc-parent : phandle to parent DMA node. 106 - - interrupts : Should be single bit error interrupt, then double bit error 107 - interrupt, in this order. 108 - 109 - USB FIFO ECC 110 - Required Properties: 111 - - compatible : Should be "altr,socfpga-usb-ecc" 112 - - reg : Address and size for ECC block registers. 113 - - altr,ecc-parent : phandle to parent USB node. 114 - - interrupts : Should be single bit error interrupt, then double bit error 115 - interrupt, in this order. 116 - 117 - QSPI FIFO ECC 118 - Required Properties: 119 - - compatible : Should be "altr,socfpga-qspi-ecc" 120 - - reg : Address and size for ECC block registers. 121 - - altr,ecc-parent : phandle to parent QSPI node. 122 - - interrupts : Should be single bit error interrupt, then double bit error 123 - interrupt, in this order. 124 - 125 - SDMMC FIFO ECC 126 - Required Properties: 127 - - compatible : Should be "altr,socfpga-sdmmc-ecc" 128 - - reg : Address and size for ECC block registers. 129 - - altr,ecc-parent : phandle to parent SD/MMC node. 130 - - interrupts : Should be single bit error interrupt, then double bit error 131 - interrupt, in this order for port A, and then single bit error interrupt, 132 - then double bit error interrupt in this order for port B. 133 - 134 - Example: 135 - 136 - eccmgr: eccmgr@ffd06000 { 137 - compatible = "altr,socfpga-a10-ecc-manager"; 138 - altr,sysmgr-syscon = <&sysmgr>; 139 - #address-cells = <1>; 140 - #size-cells = <1>; 141 - interrupts = <0 2 IRQ_TYPE_LEVEL_HIGH>, 142 - <0 0 IRQ_TYPE_LEVEL_HIGH>; 143 - interrupt-controller; 144 - #interrupt-cells = <2>; 145 - ranges; 146 - 147 - l2-ecc@ffd06010 { 148 - compatible = "altr,socfpga-a10-l2-ecc"; 149 - reg = <0xffd06010 0x4>; 150 - interrupts = <0 IRQ_TYPE_LEVEL_HIGH>, 151 - <32 IRQ_TYPE_LEVEL_HIGH>; 152 - }; 153 - 154 - ocram-ecc@ff8c3000 { 155 - compatible = "altr,socfpga-a10-ocram-ecc"; 156 - reg = <0xff8c3000 0x90>; 157 - interrupts = <1 IRQ_TYPE_LEVEL_HIGH>, 158 - <33 IRQ_TYPE_LEVEL_HIGH> ; 159 - }; 160 - 161 - emac0-rx-ecc@ff8c0800 { 162 - compatible = "altr,socfpga-eth-mac-ecc"; 163 - reg = <0xff8c0800 0x400>; 164 - altr,ecc-parent = <&gmac0>; 165 - interrupts = <4 IRQ_TYPE_LEVEL_HIGH>, 166 - <36 IRQ_TYPE_LEVEL_HIGH>; 167 - }; 168 - 169 - emac0-tx-ecc@ff8c0c00 { 170 - compatible = "altr,socfpga-eth-mac-ecc"; 171 - reg = <0xff8c0c00 0x400>; 172 - altr,ecc-parent = <&gmac0>; 173 - interrupts = <5 IRQ_TYPE_LEVEL_HIGH>, 174 - <37 IRQ_TYPE_LEVEL_HIGH>; 175 - }; 176 - 177 - nand-buf-ecc@ff8c2000 { 178 - compatible = "altr,socfpga-nand-ecc"; 179 - reg = <0xff8c2000 0x400>; 180 - altr,ecc-parent = <&nand>; 181 - interrupts = <11 IRQ_TYPE_LEVEL_HIGH>, 182 - <43 IRQ_TYPE_LEVEL_HIGH>; 183 - }; 184 - 185 - nand-rd-ecc@ff8c2400 { 186 - compatible = "altr,socfpga-nand-ecc"; 187 - reg = <0xff8c2400 0x400>; 188 - altr,ecc-parent = <&nand>; 189 - interrupts = <13 IRQ_TYPE_LEVEL_HIGH>, 190 - <45 IRQ_TYPE_LEVEL_HIGH>; 191 - }; 192 - 193 - nand-wr-ecc@ff8c2800 { 194 - compatible = "altr,socfpga-nand-ecc"; 195 - reg = <0xff8c2800 0x400>; 196 - altr,ecc-parent = <&nand>; 197 - interrupts = <12 IRQ_TYPE_LEVEL_HIGH>, 198 - <44 IRQ_TYPE_LEVEL_HIGH>; 199 - }; 200 - 201 - dma-ecc@ff8c8000 { 202 - compatible = "altr,socfpga-dma-ecc"; 203 - reg = <0xff8c8000 0x400>; 204 - altr,ecc-parent = <&pdma>; 205 - interrupts = <10 IRQ_TYPE_LEVEL_HIGH>, 206 - <42 IRQ_TYPE_LEVEL_HIGH>; 207 - 208 - usb0-ecc@ff8c8800 { 209 - compatible = "altr,socfpga-usb-ecc"; 210 - reg = <0xff8c8800 0x400>; 211 - altr,ecc-parent = <&usb0>; 212 - interrupts = <2 IRQ_TYPE_LEVEL_HIGH>, 213 - <34 IRQ_TYPE_LEVEL_HIGH>; 214 - }; 215 - 216 - qspi-ecc@ff8c8400 { 217 - compatible = "altr,socfpga-qspi-ecc"; 218 - reg = <0xff8c8400 0x400>; 219 - altr,ecc-parent = <&qspi>; 220 - interrupts = <14 IRQ_TYPE_LEVEL_HIGH>, 221 - <46 IRQ_TYPE_LEVEL_HIGH>; 222 - }; 223 - 224 - sdmmc-ecc@ff8c2c00 { 225 - compatible = "altr,socfpga-sdmmc-ecc"; 226 - reg = <0xff8c2c00 0x400>; 227 - altr,ecc-parent = <&mmc>; 228 - interrupts = <15 IRQ_TYPE_LEVEL_HIGH>, 229 - <47 IRQ_TYPE_LEVEL_HIGH>, 230 - <16 IRQ_TYPE_LEVEL_HIGH>, 231 - <48 IRQ_TYPE_LEVEL_HIGH>; 232 - }; 233 - }; 234 - 235 - Stratix10 SoCFPGA ECC Manager (ARM64) 236 - The Stratix10 SoC ECC Manager handles the IRQs for each peripheral 237 - in a shared register similar to the Arria10. However, Stratix10 ECC 238 - requires access to registers that can only be read from Secure Monitor 239 - with SMC calls. Therefore the device tree is slightly different. Note 240 - that only 1 interrupt is sent in Stratix10 because the double bit errors 241 - are treated as SErrors in ARM64 instead of IRQs in ARM32. 242 - 243 - Required Properties: 244 - - compatible : Should be "altr,socfpga-s10-ecc-manager" 245 - - altr,sysgr-syscon : phandle to Stratix10 System Manager Block 246 - containing the ECC manager registers. 247 - - interrupts : Should be single bit error interrupt. 248 - - interrupt-controller : boolean indicator that ECC Manager is an interrupt controller 249 - - #interrupt-cells : must be set to 2. 250 - - #address-cells: must be 1 251 - - #size-cells: must be 1 252 - - ranges : standard definition, should translate from local addresses 253 - 254 - Subcomponents: 255 - 256 - SDRAM ECC 257 - Required Properties: 258 - - compatible : Should be "altr,sdram-edac-s10" 259 - - interrupts : Should be single bit error interrupt. 260 - 261 - On-Chip RAM ECC 262 - Required Properties: 263 - - compatible : Should be "altr,socfpga-s10-ocram-ecc" 264 - - reg : Address and size for ECC block registers. 265 - - altr,ecc-parent : phandle to parent OCRAM node. 266 - - interrupts : Should be single bit error interrupt. 267 - 268 - Ethernet FIFO ECC 269 - Required Properties: 270 - - compatible : Should be "altr,socfpga-s10-eth-mac-ecc" 271 - - reg : Address and size for ECC block registers. 272 - - altr,ecc-parent : phandle to parent Ethernet node. 273 - - interrupts : Should be single bit error interrupt. 274 - 275 - NAND FIFO ECC 276 - Required Properties: 277 - - compatible : Should be "altr,socfpga-s10-nand-ecc" 278 - - reg : Address and size for ECC block registers. 279 - - altr,ecc-parent : phandle to parent NAND node. 280 - - interrupts : Should be single bit error interrupt. 281 - 282 - DMA FIFO ECC 283 - Required Properties: 284 - - compatible : Should be "altr,socfpga-s10-dma-ecc" 285 - - reg : Address and size for ECC block registers. 286 - - altr,ecc-parent : phandle to parent DMA node. 287 - - interrupts : Should be single bit error interrupt. 288 - 289 - USB FIFO ECC 290 - Required Properties: 291 - - compatible : Should be "altr,socfpga-s10-usb-ecc" 292 - - reg : Address and size for ECC block registers. 293 - - altr,ecc-parent : phandle to parent USB node. 294 - - interrupts : Should be single bit error interrupt. 295 - 296 - SDMMC FIFO ECC 297 - Required Properties: 298 - - compatible : Should be "altr,socfpga-s10-sdmmc-ecc" 299 - - reg : Address and size for ECC block registers. 300 - - altr,ecc-parent : phandle to parent SD/MMC node. 301 - - interrupts : Should be single bit error interrupt for port A 302 - and then single bit error interrupt for port B. 303 - 304 - Example: 305 - 306 - eccmgr { 307 - compatible = "altr,socfpga-s10-ecc-manager"; 308 - altr,sysmgr-syscon = <&sysmgr>; 309 - #address-cells = <1>; 310 - #size-cells = <1>; 311 - interrupts = <0 15 4>; 312 - interrupt-controller; 313 - #interrupt-cells = <2>; 314 - ranges; 315 - 316 - sdramedac { 317 - compatible = "altr,sdram-edac-s10"; 318 - interrupts = <16 IRQ_TYPE_LEVEL_HIGH>; 319 - }; 320 - 321 - ocram-ecc@ff8cc000 { 322 - compatible = "altr,socfpga-s10-ocram-ecc"; 323 - reg = <ff8cc000 0x100>; 324 - altr,ecc-parent = <&ocram>; 325 - interrupts = <1 IRQ_TYPE_LEVEL_HIGH>; 326 - }; 327 - 328 - emac0-rx-ecc@ff8c0000 { 329 - compatible = "altr,socfpga-s10-eth-mac-ecc"; 330 - reg = <0xff8c0000 0x100>; 331 - altr,ecc-parent = <&gmac0>; 332 - interrupts = <4 IRQ_TYPE_LEVEL_HIGH>; 333 - }; 334 - 335 - emac0-tx-ecc@ff8c0400 { 336 - compatible = "altr,socfpga-s10-eth-mac-ecc"; 337 - reg = <0xff8c0400 0x100>; 338 - altr,ecc-parent = <&gmac0>; 339 - interrupts = <5 IRQ_TYPE_LEVEL_HIGH>' 340 - }; 341 - 342 - nand-buf-ecc@ff8c8000 { 343 - compatible = "altr,socfpga-s10-nand-ecc"; 344 - reg = <0xff8c8000 0x100>; 345 - altr,ecc-parent = <&nand>; 346 - interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; 347 - }; 348 - 349 - nand-rd-ecc@ff8c8400 { 350 - compatible = "altr,socfpga-s10-nand-ecc"; 351 - reg = <0xff8c8400 0x100>; 352 - altr,ecc-parent = <&nand>; 353 - interrupts = <13 IRQ_TYPE_LEVEL_HIGH>; 354 - }; 355 - 356 - nand-wr-ecc@ff8c8800 { 357 - compatible = "altr,socfpga-s10-nand-ecc"; 358 - reg = <0xff8c8800 0x100>; 359 - altr,ecc-parent = <&nand>; 360 - interrupts = <12 IRQ_TYPE_LEVEL_HIGH>; 361 - }; 362 - 363 - dma-ecc@ff8c9000 { 364 - compatible = "altr,socfpga-s10-dma-ecc"; 365 - reg = <0xff8c9000 0x100>; 366 - altr,ecc-parent = <&pdma>; 367 - interrupts = <10 IRQ_TYPE_LEVEL_HIGH>; 368 - 369 - usb0-ecc@ff8c4000 { 370 - compatible = "altr,socfpga-s10-usb-ecc"; 371 - reg = <0xff8c4000 0x100>; 372 - altr,ecc-parent = <&usb0>; 373 - interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; 374 - }; 375 - 376 - sdmmc-ecc@ff8c8c00 { 377 - compatible = "altr,socfpga-s10-sdmmc-ecc"; 378 - reg = <0xff8c8c00 0x100>; 379 - altr,ecc-parent = <&mmc>; 380 - interrupts = <14 IRQ_TYPE_LEVEL_HIGH>, 381 - <15 IRQ_TYPE_LEVEL_HIGH>; 382 - }; 383 - };
+1
Documentation/devicetree/bindings/fsi/ibm,p9-scom.yaml
··· 16 16 properties: 17 17 compatible: 18 18 enum: 19 + - ibm,fsi2pib 19 20 - ibm,p9-scom 20 21 - ibm,i2cr-scom 21 22
+3
Documentation/devicetree/bindings/gpu/arm,mali-bifrost.yaml
··· 17 17 oneOf: 18 18 - items: 19 19 - enum: 20 + - allwinner,sun50i-h616-mali 20 21 - amlogic,meson-g12a-mali 21 22 - mediatek,mt8183-mali 22 23 - mediatek,mt8183b-mali ··· 25 24 - realtek,rtd1619-mali 26 25 - renesas,r9a07g044-mali 27 26 - renesas,r9a07g054-mali 27 + - renesas,r9a09g057-mali 28 28 - rockchip,px30-mali 29 29 - rockchip,rk3562-mali 30 30 - rockchip,rk3568-mali ··· 145 143 enum: 146 144 - renesas,r9a07g044-mali 147 145 - renesas,r9a07g054-mali 146 + - renesas,r9a09g057-mali 148 147 then: 149 148 properties: 150 149 interrupts:
+4 -1
Documentation/devicetree/bindings/gpu/arm,mali-midgard.yaml
··· 47 47 - const: arm,mali-t760 48 48 - items: 49 49 - enum: 50 + - samsung,exynos7870-mali 51 + - const: arm,mali-t830 52 + - items: 53 + - enum: 50 54 - rockchip,rk3399-mali 51 55 - const: arm,mali-t860 52 56 53 - # "arm,mali-t830" 54 57 # "arm,mali-t880" 55 58 56 59 reg:
-58
Documentation/devicetree/bindings/interrupt-controller/nxp,lpc3220-mic.txt
··· 1 - * NXP LPC32xx MIC, SIC1 and SIC2 Interrupt Controllers 2 - 3 - Required properties: 4 - - compatible: "nxp,lpc3220-mic" or "nxp,lpc3220-sic". 5 - - reg: should contain IC registers location and length. 6 - - interrupt-controller: identifies the node as an interrupt controller. 7 - - #interrupt-cells: the number of cells to define an interrupt, should be 2. 8 - The first cell is the IRQ number, the second cell is used to specify 9 - one of the supported IRQ types: 10 - IRQ_TYPE_EDGE_RISING = low-to-high edge triggered, 11 - IRQ_TYPE_EDGE_FALLING = high-to-low edge triggered, 12 - IRQ_TYPE_LEVEL_HIGH = active high level-sensitive, 13 - IRQ_TYPE_LEVEL_LOW = active low level-sensitive. 14 - Reset value is IRQ_TYPE_LEVEL_LOW. 15 - 16 - Optional properties: 17 - - interrupts: empty for MIC interrupt controller, cascaded MIC 18 - hardware interrupts for SIC1 and SIC2 19 - 20 - Examples: 21 - 22 - /* LPC32xx MIC, SIC1 and SIC2 interrupt controllers */ 23 - mic: interrupt-controller@40008000 { 24 - compatible = "nxp,lpc3220-mic"; 25 - reg = <0x40008000 0x4000>; 26 - interrupt-controller; 27 - #interrupt-cells = <2>; 28 - }; 29 - 30 - sic1: interrupt-controller@4000c000 { 31 - compatible = "nxp,lpc3220-sic"; 32 - reg = <0x4000c000 0x4000>; 33 - interrupt-controller; 34 - #interrupt-cells = <2>; 35 - 36 - interrupt-parent = <&mic>; 37 - interrupts = <0 IRQ_TYPE_LEVEL_LOW>, 38 - <30 IRQ_TYPE_LEVEL_LOW>; 39 - }; 40 - 41 - sic2: interrupt-controller@40010000 { 42 - compatible = "nxp,lpc3220-sic"; 43 - reg = <0x40010000 0x4000>; 44 - interrupt-controller; 45 - #interrupt-cells = <2>; 46 - 47 - interrupt-parent = <&mic>; 48 - interrupts = <1 IRQ_TYPE_LEVEL_LOW>, 49 - <31 IRQ_TYPE_LEVEL_LOW>; 50 - }; 51 - 52 - /* ADC */ 53 - adc@40048000 { 54 - compatible = "nxp,lpc3220-adc"; 55 - reg = <0x40048000 0x1000>; 56 - interrupt-parent = <&sic1>; 57 - interrupts = <7 IRQ_TYPE_LEVEL_HIGH>; 58 - };
+68
Documentation/devicetree/bindings/interrupt-controller/nxp,lpc3220-mic.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/interrupt-controller/nxp,lpc3220-mic.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: NXP LPC32xx MIC, SIC1 and SIC2 Interrupt Controllers 8 + 9 + maintainers: 10 + - Vladimir Zapolskiy <vz@mleia.com> 11 + 12 + properties: 13 + compatible: 14 + enum: 15 + - nxp,lpc3220-mic 16 + - nxp,lpc3220-sic 17 + 18 + reg: 19 + maxItems: 1 20 + 21 + interrupt-controller: true 22 + 23 + '#interrupt-cells': 24 + const: 2 25 + 26 + interrupts: 27 + items: 28 + - description: Regular interrupt request 29 + - description: Fast interrupt request 30 + 31 + required: 32 + - compatible 33 + - reg 34 + - interrupt-controller 35 + - '#interrupt-cells' 36 + 37 + allOf: 38 + - if: 39 + properties: 40 + compatible: 41 + contains: 42 + const: nxp,lpc3220-sic 43 + then: 44 + required: 45 + - interrupts 46 + 47 + additionalProperties: false 48 + 49 + examples: 50 + - | 51 + #include <dt-bindings/interrupt-controller/irq.h> 52 + 53 + mic: interrupt-controller@40008000 { 54 + compatible = "nxp,lpc3220-mic"; 55 + reg = <0x40008000 0x4000>; 56 + interrupt-controller; 57 + #interrupt-cells = <2>; 58 + }; 59 + 60 + interrupt-controller@4000c000 { 61 + compatible = "nxp,lpc3220-sic"; 62 + reg = <0x4000c000 0x4000>; 63 + interrupt-controller; 64 + #interrupt-cells = <2>; 65 + interrupt-parent = <&mic>; 66 + interrupts = <0 IRQ_TYPE_LEVEL_LOW>, 67 + <30 IRQ_TYPE_LEVEL_LOW>; 68 + };
-6
Documentation/devicetree/bindings/media/mediatek,vcodec-encoder.yaml
··· 41 41 minItems: 1 42 42 maxItems: 5 43 43 44 - assigned-clocks: true 45 - 46 - assigned-clock-parents: true 47 - 48 44 iommus: 49 45 minItems: 1 50 46 maxItems: 32 ··· 74 78 - clocks 75 79 - clock-names 76 80 - iommus 77 - - assigned-clocks 78 - - assigned-clock-parents 79 81 80 82 allOf: 81 83 - if:
+1 -35
Documentation/devicetree/bindings/memory-controllers/exynos-srom.yaml
··· 38 38 patternProperties: 39 39 "^.*@[0-3],[a-f0-9]+$": 40 40 type: object 41 + $ref: mc-peripheral-props.yaml# 41 42 additionalProperties: true 42 - description: 43 - The actual device nodes should be added as subnodes to the SROMc node. 44 - These subnodes, in addition to regular device specification, should 45 - contain the following properties, describing configuration 46 - of the relevant SROM bank. 47 43 48 44 properties: 49 - reg: 50 - description: 51 - Bank number, base address (relative to start of the bank) and size 52 - of the memory mapped for the device. Note that base address will be 53 - typically 0 as this is the start of the bank. 54 - maxItems: 1 55 - 56 45 reg-io-width: 57 46 enum: [1, 2] 58 47 description: 59 48 Data width in bytes (1 or 2). If omitted, default of 1 is used. 60 49 61 - samsung,srom-page-mode: 62 - description: 63 - If page mode is set, 4 data page mode will be configured, 64 - else normal (1 data) page mode will be set. 65 - type: boolean 66 - 67 - samsung,srom-timing: 68 - $ref: /schemas/types.yaml#/definitions/uint32-array 69 - minItems: 6 70 - maxItems: 6 71 - description: | 72 - Array of 6 integers, specifying bank timings in the following order: 73 - Tacp, Tcah, Tcoh, Tacc, Tcos, Tacs. 74 - Each value is specified in cycles and has the following meaning 75 - and valid range: 76 - Tacp: Page mode access cycle at Page mode (0 - 15) 77 - Tcah: Address holding time after CSn (0 - 15) 78 - Tcoh: Chip selection hold on OEn (0 - 15) 79 - Tacc: Access cycle (0 - 31, the actual time is N + 1) 80 - Tcos: Chip selection set-up before OEn (0 - 15) 81 - Tacs: Address set-up before CSn (0 - 15) 82 - 83 50 required: 84 - - reg 85 51 - samsung,srom-timing 86 52 87 53 required:
+2
Documentation/devicetree/bindings/memory-controllers/mc-peripheral-props.yaml
··· 36 36 - $ref: st,stm32-fmc2-ebi-props.yaml# 37 37 - $ref: ingenic,nemc-peripherals.yaml# 38 38 - $ref: intel,ixp4xx-expansion-peripheral-props.yaml# 39 + - $ref: qcom,ebi2-peripheral-props.yaml# 40 + - $ref: samsung,exynos4210-srom-peripheral-props.yaml# 39 41 - $ref: ti,gpmc-child.yaml# 40 42 - $ref: fsl/fsl,imx-weim-peripherals.yaml 41 43
+91
Documentation/devicetree/bindings/memory-controllers/qcom,ebi2-peripheral-props.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/memory-controllers/qcom,ebi2-peripheral-props.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Peripheral Properties for Qualcomm External Bus Interface 2 (EBI2) 8 + 9 + maintainers: 10 + - Bjorn Andersson <andersson@kernel.org> 11 + 12 + properties: 13 + # SLOW chip selects 14 + qcom,xmem-recovery-cycles: 15 + $ref: /schemas/types.yaml#/definitions/uint32 16 + description: > 17 + The time the memory continues to drive the data bus after OE 18 + is de-asserted, in order to avoid contention on the data bus. 19 + They are inserted when reading one CS and switching to another 20 + CS or read followed by write on the same CS. Minimum value is 21 + actually 1, so a value of 0 will still yield 1 recovery cycle. 22 + minimum: 0 23 + maximum: 15 24 + 25 + qcom,xmem-write-hold-cycles: 26 + $ref: /schemas/types.yaml#/definitions/uint32 27 + description: > 28 + The extra cycles inserted after every write minimum 1. The 29 + data out is driven from the time WE is asserted until CS is 30 + asserted. With a hold of 1 (value = 0), the CS stays active 31 + for 1 extra cycle, etc. 32 + minimum: 0 33 + maximum: 15 34 + 35 + qcom,xmem-write-delta-cycles: 36 + $ref: /schemas/types.yaml#/definitions/uint32 37 + description: > 38 + The initial latency for write cycles inserted for the first 39 + write to a page or burst memory. 40 + minimum: 0 41 + maximum: 255 42 + 43 + qcom,xmem-read-delta-cycles: 44 + $ref: /schemas/types.yaml#/definitions/uint32 45 + description: > 46 + The initial latency for read cycles inserted for the first 47 + read to a page or burst memory. 48 + minimum: 0 49 + maximum: 255 50 + 51 + qcom,xmem-write-wait-cycles: 52 + $ref: /schemas/types.yaml#/definitions/uint32 53 + description: > 54 + The number of wait cycles for every write access. 55 + minimum: 0 56 + maximum: 15 57 + 58 + qcom,xmem-read-wait-cycles: 59 + $ref: /schemas/types.yaml#/definitions/uint32 60 + description: > 61 + The number of wait cycles for every read access. 62 + minimum: 0 63 + maximum: 15 64 + 65 + 66 + # FAST chip selects 67 + qcom,xmem-address-hold-enable: 68 + $ref: /schemas/types.yaml#/definitions/uint32 69 + description: > 70 + Holds the address for an extra cycle to meet hold time 71 + requirements with ADV assertion, when set to 1. 72 + enum: [ 0, 1 ] 73 + 74 + qcom,xmem-adv-to-oe-recovery-cycles: 75 + $ref: /schemas/types.yaml#/definitions/uint32 76 + description: > 77 + The number of cycles elapsed before an OE assertion, with 78 + respect to the cycle where ADV (address valid) is asserted. 79 + minimum: 0 80 + maximum: 3 81 + 82 + qcom,xmem-read-hold-cycles: 83 + $ref: /schemas/types.yaml#/definitions/uint32 84 + description: > 85 + The length in cycles of the first segment of a read transfer. 86 + For a single read transfer this will be the time from CS 87 + assertion to OE assertion. 88 + minimum: 0 89 + maximum: 15 90 + 91 + additionalProperties: true
+35
Documentation/devicetree/bindings/memory-controllers/samsung,exynos4210-srom-peripheral-props.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/memory-controllers/samsung,exynos4210-srom-peripheral-props.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Peripheral Properties for Samsung Exynos SoC SROM Controller 8 + 9 + maintainers: 10 + - Krzysztof Kozlowski <krzk@kernel.org> 11 + 12 + properties: 13 + samsung,srom-page-mode: 14 + description: 15 + If page mode is set, 4 data page mode will be configured, 16 + else normal (1 data) page mode will be set. 17 + type: boolean 18 + 19 + samsung,srom-timing: 20 + $ref: /schemas/types.yaml#/definitions/uint32-array 21 + minItems: 6 22 + maxItems: 6 23 + description: | 24 + Array of 6 integers, specifying bank timings in the following order: 25 + Tacp, Tcah, Tcoh, Tacc, Tcos, Tacs. 26 + Each value is specified in cycles and has the following meaning 27 + and valid range: 28 + Tacp: Page mode access cycle at Page mode (0 - 15) 29 + Tcah: Address holding time after CSn (0 - 15) 30 + Tcoh: Chip selection hold on OEn (0 - 15) 31 + Tacc: Access cycle (0 - 31, the actual time is N + 1) 32 + Tcos: Chip selection set-up before OEn (0 - 15) 33 + Tacs: Address set-up before CSn (0 - 15) 34 + 35 + additionalProperties: true
+2 -4
Documentation/devicetree/bindings/net/smsc,lan9115.yaml
··· 11 11 12 12 allOf: 13 13 - $ref: ethernet-controller.yaml# 14 + - $ref: /schemas/memory-controllers/mc-peripheral-props.yaml# 14 15 15 16 properties: 16 17 compatible: ··· 90 89 - reg 91 90 - interrupts 92 91 93 - # There are lots of bus-specific properties ("qcom,*", "samsung,*", "fsl,*", 94 - # "gpmc,*", ...) to be found, that actually depend on the compatible value of 95 - # the parent node. 96 - additionalProperties: true 92 + unevaluatedProperties: false 97 93 98 94 examples: 99 95 - |
+10 -10
Documentation/devicetree/bindings/pps/pps-gpio.yaml
··· 36 36 37 37 examples: 38 38 - | 39 - #include <dt-bindings/gpio/gpio.h> 39 + #include <dt-bindings/gpio/gpio.h> 40 40 41 - pps { 42 - compatible = "pps-gpio"; 43 - pinctrl-names = "default"; 44 - pinctrl-0 = <&pinctrl_pps>; 45 - gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>; 46 - assert-falling-edge; 47 - echo-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>; 48 - echo-active-ms = <100>; 49 - }; 41 + pps { 42 + compatible = "pps-gpio"; 43 + pinctrl-names = "default"; 44 + pinctrl-0 = <&pinctrl_pps>; 45 + gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>; 46 + assert-falling-edge; 47 + echo-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>; 48 + echo-active-ms = <100>; 49 + };
+4 -1
Documentation/devicetree/bindings/soc/imx/fsl,aips-bus.yaml
··· 22 22 required: 23 23 - compatible 24 24 25 + allOf: 26 + - $ref: /schemas/simple-bus.yaml# 27 + 25 28 properties: 26 29 compatible: 27 30 items: ··· 38 35 - compatible 39 36 - reg 40 37 41 - additionalProperties: true 38 + unevaluatedProperties: false 42 39 43 40 examples: 44 41 - |
+17 -2
Documentation/devicetree/bindings/submitting-patches.rst
··· 54 54 followed as of commit bff5da4335256513497cc8c79f9a9d1665e09864 55 55 ("checkpatch: add DT compatible string documentation checks"). ] 56 56 57 - 7) If a documented compatible string is not yet matched by the 57 + 7) DTS is treated in general as driver-independent hardware description, thus 58 + any DTS patches, regardless whether using existing or new bindings, should 59 + be placed at the end of patchset to indicate no dependency of drivers on 60 + the DTS. DTS will be anyway applied through separate tree or branch, so 61 + different order would indicate the serie is non-bisectable. 62 + 63 + If a driver subsystem maintainer prefers to apply entire set, instead of 64 + their relevant portion of patchset, please split the DTS patches into 65 + separate patchset with a reference in changelog or cover letter to the 66 + bindings submission on the mailing list. 67 + 68 + 8) If a documented compatible string is not yet matched by the 58 69 driver, the documentation should also include a compatible 59 70 string that is matched by the driver. 60 71 61 - 8) Bindings are actively used by multiple projects other than the Linux 72 + 9) Bindings are actively used by multiple projects other than the Linux 62 73 Kernel, extra care and consideration may need to be taken when making changes 63 74 to existing bindings. 64 75 ··· 89 78 90 79 3) For a series going though multiple trees, the binding patch should be 91 80 kept with the driver using the binding. 81 + 82 + 4) The DTS files should however never be applied via driver subsystem tree, 83 + but always via platform SoC trees on dedicated branches (see also 84 + Documentation/process/maintainer-soc.rst). 92 85 93 86 III. Notes 94 87 ==========
+9
Documentation/devicetree/bindings/trivial-devices.yaml
··· 185 185 - maxim,max5484 186 186 # PECI-to-I2C translator for PECI-to-SMBus/I2C protocol conversion 187 187 - maxim,max6621 188 + # InTune Automatically Compensated Digital PoL Controller with Driver and PMBus Telemetry 189 + - maxim,max15301 190 + # 6A InTune Automatically Compensated Converter with PMBus Telemetry 191 + - maxim,max15303 192 + # Multiphase Master with PMBus Interface and Internal Buck Converter 193 + - maxim,max20751 188 194 # mCube 3-axis 8-bit digital accelerometer 189 195 - mcube,mc3230 190 196 # Measurement Specialities I2C temperature and humidity sensor ··· 388 382 - ti,tps53676 389 383 # TI Dual channel DCAP+ multiphase controller TPS53679 390 384 - ti,tps53679 385 + # TI Dual channel DCAP+ multiphase controller TPS53681 386 + - ti,tps53681 391 387 # TI Dual channel DCAP+ multiphase controller TPS53688 392 388 - ti,tps53688 393 389 # TI DC-DC converters on PMBus ··· 397 389 - ti,tps544b25 398 390 - ti,tps544c20 399 391 - ti,tps544c25 392 + - ti,tps546b24 400 393 - ti,tps546d24 401 394 # I2C Touch-Screen Controller 402 395 - ti,tsc2003
-26
Documentation/devicetree/bindings/xilinx.txt
··· 102 102 Default is <d#1024 d#480>. 103 103 - rotate-display (empty) : rotate display 180 degrees. 104 104 105 - ii) Xilinx SystemACE 106 - 107 - The Xilinx SystemACE device is used to program FPGAs from an FPGA 108 - bitstream stored on a CF card. It can also be used as a generic CF 109 - interface device. 110 - 111 - Optional properties: 112 - - 8-bit (empty) : Set this property for SystemACE in 8 bit mode 113 - 114 105 iii) Xilinx EMAC and Xilinx TEMAC 115 106 116 107 Xilinx Ethernet devices. In addition to general xilinx properties 117 108 listed above, nodes for these devices should include a phy-handle 118 109 property, and may include other common network device properties 119 110 like local-mac-address. 120 - 121 - iv) Xilinx Uartlite 122 - 123 - Xilinx uartlite devices are simple fixed speed serial ports. 124 - 125 - Required properties: 126 - - current-speed : Baud rate of uartlite 127 111 128 112 v) Xilinx hwicap 129 113 ··· 124 140 'virtex2p', 'virtex4', or 'virtex5'. 125 141 - compatible : should contain "xlnx,xps-hwicap-1.00.a" or 126 142 "xlnx,opb-hwicap-1.00.b". 127 - 128 - vi) Xilinx Uart 16550 129 - 130 - Xilinx UART 16550 devices are very similar to the NS16550 but with 131 - different register spacing and an offset from the base address. 132 - 133 - Required properties: 134 - - clock-frequency : Frequency of the clock input 135 - - reg-offset : A value of 3 is required 136 - - reg-shift : A value of 2 is required 137 143 138 144 vii) Xilinx USB Host controller 139 145
+3 -2
Documentation/process/maintainer-soc-clean-dts.rst
··· 17 17 No changes to the SoC platform Devicetree sources (DTS files) should introduce 18 18 new ``make dtbs_check W=1`` warnings. Warnings in a new board DTS, which are 19 19 results of issues in an included DTSI file, are considered existing, not new 20 - warnings. The platform maintainers have automation in place which should point 21 - out any new warnings. 20 + warnings. For series split between different trees (DT bindings go via driver 21 + subsystem tree), warnings on linux-next are decisive. The platform maintainers 22 + have automation in place which should point out any new warnings. 22 23 23 24 If a commit introducing new warnings gets accepted somehow, the resulting 24 25 issues shall be fixed in reasonable time (e.g. within one release) or the
+5
MAINTAINERS
··· 3148 3148 S: Maintained 3149 3149 F: drivers/clk/socfpga/ 3150 3150 3151 + ARM/SOCFPGA EDAC BINDINGS 3152 + M: Matthew Gerlach <matthew.gerlach@altera.com> 3153 + S: Maintained 3154 + F: Documentation/devicetree/bindings/edac/altr,socfpga-ecc-manager.yaml 3155 + 3151 3156 ARM/SOCFPGA EDAC SUPPORT 3152 3157 M: Dinh Nguyen <dinguyen@kernel.org> 3153 3158 S: Maintained
+4 -9
drivers/of/address.c
··· 1031 1031 * 1032 1032 * Returns true if the "nonposted-mmio" property was found for 1033 1033 * the device's bus. 1034 - * 1035 - * This is currently only enabled on builds that support Apple ARM devices, as 1036 - * an optimization. 1037 1034 */ 1038 1035 static bool of_mmio_is_nonposted(const struct device_node *np) 1039 1036 { 1040 - if (!IS_ENABLED(CONFIG_ARCH_APPLE)) 1041 - return false; 1042 - 1043 1037 struct device_node *parent __free(device_node) = of_get_parent(np); 1044 - if (!parent) 1045 - return false; 1046 1038 1047 - return of_property_read_bool(parent, "nonposted-mmio"); 1039 + if (of_property_read_bool(np, "nonposted-mmio")) 1040 + return true; 1041 + 1042 + return parent && of_property_read_bool(parent, "nonposted-mmio"); 1048 1043 } 1049 1044 1050 1045 static int __of_address_to_resource(struct device_node *dev, int index, int bar_no,
+2 -4
drivers/of/base.c
··· 1678 1678 prop->next = NULL; 1679 1679 next = &np->properties; 1680 1680 while (*next) { 1681 - if (strcmp(prop->name, (*next)->name) == 0) { 1681 + if (of_prop_cmp(prop->name, (*next)->name) == 0) { 1682 1682 /* duplicate ! don't insert it */ 1683 1683 rc = -EEXIST; 1684 1684 goto out_unlock; ··· 1882 1882 int id, len; 1883 1883 1884 1884 /* Skip those we do not want to proceed */ 1885 - if (!strcmp(pp->name, "name") || 1886 - !strcmp(pp->name, "phandle") || 1887 - !strcmp(pp->name, "linux,phandle")) 1885 + if (is_pseudo_property(pp->name)) 1888 1886 continue; 1889 1887 1890 1888 np = of_find_node_by_path(pp->value);
+47 -35
drivers/of/irq.c
··· 16 16 17 17 #define pr_fmt(fmt) "OF: " fmt 18 18 19 + #include <linux/cleanup.h> 19 20 #include <linux/device.h> 20 21 #include <linux/errno.h> 21 22 #include <linux/list.h> ··· 39 38 unsigned int irq_of_parse_and_map(struct device_node *dev, int index) 40 39 { 41 40 struct of_phandle_args oirq; 41 + unsigned int ret; 42 42 43 43 if (of_irq_parse_one(dev, index, &oirq)) 44 44 return 0; 45 45 46 - return irq_create_of_mapping(&oirq); 46 + ret = irq_create_of_mapping(&oirq); 47 + of_node_put(oirq.np); 48 + 49 + return ret; 47 50 } 48 51 EXPORT_SYMBOL_GPL(irq_of_parse_and_map); 49 52 ··· 55 50 * of_irq_find_parent - Given a device node, find its interrupt parent node 56 51 * @child: pointer to device node 57 52 * 58 - * Return: A pointer to the interrupt parent node, or NULL if the interrupt 59 - * parent could not be determined. 53 + * Return: A pointer to the interrupt parent node with refcount increased 54 + * or NULL if the interrupt parent could not be determined. 60 55 */ 61 56 struct device_node *of_irq_find_parent(struct device_node *child) 62 57 { ··· 170 165 * the specifier for each map, and then returns the translated map. 171 166 * 172 167 * Return: 0 on success and a negative number on error 168 + * 169 + * Note: refcount of node @out_irq->np is increased by 1 on success. 173 170 */ 174 171 int of_irq_parse_raw(const __be32 *addr, struct of_phandle_args *out_irq) 175 172 { ··· 317 310 addrsize = (imap - match_array) - intsize; 318 311 319 312 if (ipar == newpar) { 313 + /* 314 + * We got @ipar's refcount, but the refcount was 315 + * gotten again by of_irq_parse_imap_parent() via its 316 + * alias @newpar. 317 + */ 318 + of_node_put(ipar); 320 319 pr_debug("%pOF interrupt-map entry to self\n", ipar); 321 320 return 0; 322 321 } ··· 352 339 * This function resolves an interrupt for a node by walking the interrupt tree, 353 340 * finding which interrupt controller node it is attached to, and returning the 354 341 * interrupt specifier that can be used to retrieve a Linux IRQ number. 342 + * 343 + * Note: refcount of node @out_irq->np is increased by 1 on success. 355 344 */ 356 345 int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_args *out_irq) 357 346 { 358 - struct device_node *p; 347 + struct device_node __free(device_node) *p = NULL; 359 348 const __be32 *addr; 360 349 u32 intsize; 361 350 int i, res, addr_len; ··· 382 367 /* Try the new-style interrupts-extended first */ 383 368 res = of_parse_phandle_with_args(device, "interrupts-extended", 384 369 "#interrupt-cells", index, out_irq); 385 - if (!res) 386 - return of_irq_parse_raw(addr_buf, out_irq); 370 + if (!res) { 371 + p = out_irq->np; 372 + } else { 373 + /* Look for the interrupt parent. */ 374 + p = of_irq_find_parent(device); 375 + /* Get size of interrupt specifier */ 376 + if (!p || of_property_read_u32(p, "#interrupt-cells", &intsize)) 377 + return -EINVAL; 387 378 388 - /* Look for the interrupt parent. */ 389 - p = of_irq_find_parent(device); 390 - if (p == NULL) 391 - return -EINVAL; 379 + pr_debug(" parent=%pOF, intsize=%d\n", p, intsize); 392 380 393 - /* Get size of interrupt specifier */ 394 - if (of_property_read_u32(p, "#interrupt-cells", &intsize)) { 395 - res = -EINVAL; 396 - goto out; 381 + /* Copy intspec into irq structure */ 382 + out_irq->np = p; 383 + out_irq->args_count = intsize; 384 + for (i = 0; i < intsize; i++) { 385 + res = of_property_read_u32_index(device, "interrupts", 386 + (index * intsize) + i, 387 + out_irq->args + i); 388 + if (res) 389 + return res; 390 + } 391 + 392 + pr_debug(" intspec=%d\n", *out_irq->args); 397 393 } 398 - 399 - pr_debug(" parent=%pOF, intsize=%d\n", p, intsize); 400 - 401 - /* Copy intspec into irq structure */ 402 - out_irq->np = p; 403 - out_irq->args_count = intsize; 404 - for (i = 0; i < intsize; i++) { 405 - res = of_property_read_u32_index(device, "interrupts", 406 - (index * intsize) + i, 407 - out_irq->args + i); 408 - if (res) 409 - goto out; 410 - } 411 - 412 - pr_debug(" intspec=%d\n", *out_irq->args); 413 - 414 394 415 395 /* Check if there are any interrupt-map translations to process */ 416 - res = of_irq_parse_raw(addr_buf, out_irq); 417 - out: 418 - of_node_put(p); 419 - return res; 396 + return of_irq_parse_raw(addr_buf, out_irq); 420 397 } 421 398 EXPORT_SYMBOL_GPL(of_irq_parse_one); 422 399 ··· 512 505 struct of_phandle_args irq; 513 506 int nr = 0; 514 507 515 - while (of_irq_parse_one(dev, nr, &irq) == 0) 508 + while (of_irq_parse_one(dev, nr, &irq) == 0) { 509 + of_node_put(irq.np); 516 510 nr++; 511 + } 517 512 518 513 return nr; 519 514 } ··· 632 623 __func__, desc->dev, desc->dev, 633 624 desc->interrupt_parent); 634 625 of_node_clear_flag(desc->dev, OF_POPULATED); 626 + of_node_put(desc->interrupt_parent); 627 + of_node_put(desc->dev); 635 628 kfree(desc); 636 629 continue; 637 630 } ··· 664 653 err: 665 654 list_for_each_entry_safe(desc, temp_desc, &intc_desc_list, list) { 666 655 list_del(&desc->list); 656 + of_node_put(desc->interrupt_parent); 667 657 of_node_put(desc->dev); 668 658 kfree(desc); 669 659 }
+7
drivers/of/of_private.h
··· 208 208 static void __maybe_unused of_dump_addr(const char *s, const __be32 *addr, int na) { } 209 209 #endif 210 210 211 + static inline bool is_pseudo_property(const char *prop_name) 212 + { 213 + return !of_prop_cmp(prop_name, "name") || 214 + !of_prop_cmp(prop_name, "phandle") || 215 + !of_prop_cmp(prop_name, "linux,phandle"); 216 + } 217 + 211 218 #if IS_ENABLED(CONFIG_KUNIT) 212 219 int __of_address_resource_bounds(struct resource *r, u64 start, u64 size); 213 220 #endif
+7 -3
drivers/of/overlay.c
··· 84 84 #define DTSF_APPLY_FAIL 0x01 85 85 #define DTSF_REVERT_FAIL 0x02 86 86 87 + static int of_prop_val_eq(const struct property *p1, const struct property *p2) 88 + { 89 + return p1->length == p2->length && 90 + !memcmp(p1->value, p2->value, (size_t)p1->length); 91 + } 92 + 87 93 /* 88 94 * If a changeset apply or revert encounters an error, an attempt will 89 95 * be made to undo partial changes, but may fail. If the undo fails ··· 310 304 int ret = 0; 311 305 312 306 if (target->in_livetree) 313 - if (!of_prop_cmp(overlay_prop->name, "name") || 314 - !of_prop_cmp(overlay_prop->name, "phandle") || 315 - !of_prop_cmp(overlay_prop->name, "linux,phandle")) 307 + if (is_pseudo_property(overlay_prop->name)) 316 308 return 0; 317 309 318 310 if (target->in_livetree)
+4 -4
drivers/of/platform.c
··· 334 334 int rc = 0; 335 335 336 336 /* Make sure it has a compatible property */ 337 - if (strict && (!of_get_property(bus, "compatible", NULL))) { 337 + if (strict && (!of_property_present(bus, "compatible"))) { 338 338 pr_debug("%s() - skipping %pOF, no compatible prop\n", 339 339 __func__, bus); 340 340 return 0; ··· 536 536 * ignore errors for the rest. 537 537 */ 538 538 for_each_node_by_type(node, "display") { 539 - if (!of_get_property(node, "linux,opened", NULL) || 540 - !of_get_property(node, "linux,boot-display", NULL)) 539 + if (!of_property_read_bool(node, "linux,opened") || 540 + !of_property_read_bool(node, "linux,boot-display")) 541 541 continue; 542 542 dev = of_platform_device_create(node, "of-display", NULL); 543 543 of_node_put(node); ··· 551 551 char buf[14]; 552 552 const char *of_display_format = "of-display.%d"; 553 553 554 - if (!of_get_property(node, "linux,opened", NULL) || node == boot_display) 554 + if (!of_property_read_bool(node, "linux,opened") || node == boot_display) 555 555 continue; 556 556 ret = snprintf(buf, sizeof(buf), of_display_format, display_number++); 557 557 if (ret < sizeof(buf))
+14 -27
drivers/of/resolver.c
··· 161 161 for_each_property_of_node(local_fixups, prop_fix) { 162 162 163 163 /* skip properties added automatically */ 164 - if (!of_prop_cmp(prop_fix->name, "name") || 165 - !of_prop_cmp(prop_fix->name, "phandle") || 166 - !of_prop_cmp(prop_fix->name, "linux,phandle")) 164 + if (is_pseudo_property(prop_fix->name)) 167 165 continue; 168 166 169 167 if ((prop_fix->length % 4) != 0 || prop_fix->length == 0) ··· 247 249 */ 248 250 int of_resolve_phandles(struct device_node *overlay) 249 251 { 250 - struct device_node *child, *local_fixups, *refnode; 251 - struct device_node *tree_symbols, *overlay_fixups; 252 + struct device_node *child, *refnode; 253 + struct device_node *overlay_fixups; 254 + struct device_node __free(device_node) *local_fixups = NULL; 252 255 struct property *prop; 253 256 const char *refpath; 254 257 phandle phandle, phandle_delta; 255 258 int err; 256 259 257 - tree_symbols = NULL; 258 - 259 260 if (!overlay) { 260 261 pr_err("null overlay\n"); 261 - err = -EINVAL; 262 - goto out; 262 + return -EINVAL; 263 263 } 264 264 265 265 if (!of_node_check_flag(overlay, OF_DETACHED)) { 266 266 pr_err("overlay not detached\n"); 267 - err = -EINVAL; 268 - goto out; 267 + return -EINVAL; 269 268 } 270 269 271 270 phandle_delta = live_tree_max_phandle() + 1; ··· 274 279 275 280 err = adjust_local_phandle_references(local_fixups, overlay, phandle_delta); 276 281 if (err) 277 - goto out; 282 + return err; 278 283 279 284 overlay_fixups = NULL; 280 285 ··· 283 288 overlay_fixups = child; 284 289 } 285 290 286 - if (!overlay_fixups) { 287 - err = 0; 288 - goto out; 289 - } 291 + if (!overlay_fixups) 292 + return 0; 290 293 291 - tree_symbols = of_find_node_by_path("/__symbols__"); 294 + struct device_node __free(device_node) *tree_symbols = of_find_node_by_path("/__symbols__"); 292 295 if (!tree_symbols) { 293 296 pr_err("no symbols in root of device tree.\n"); 294 - err = -EINVAL; 295 - goto out; 297 + return -EINVAL; 296 298 } 297 299 298 300 for_each_property_of_node(overlay_fixups, prop) { ··· 303 311 if (err) { 304 312 pr_err("node label '%s' not found in live devicetree symbols table\n", 305 313 prop->name); 306 - goto out; 314 + return err; 307 315 } 308 316 309 317 refnode = of_find_node_by_path(refpath); 310 - if (!refnode) { 311 - err = -ENOENT; 312 - goto out; 313 - } 318 + if (!refnode) 319 + return -ENOENT; 314 320 315 321 phandle = refnode->phandle; 316 322 of_node_put(refnode); ··· 318 328 break; 319 329 } 320 330 321 - out: 322 331 if (err) 323 332 pr_err("overlay phandle fixup failed: %d\n", err); 324 - of_node_put(tree_symbols); 325 - 326 333 return err; 327 334 } 328 335 EXPORT_SYMBOL_GPL(of_resolve_phandles);
+13
drivers/of/unittest-data/tests-interrupts.dtsi
··· 50 50 interrupt-map = <0x5000 1 2 &test_intc0 15>; 51 51 }; 52 52 53 + test_intc_intmap0: intc-intmap0 { 54 + #interrupt-cells = <1>; 55 + #address-cells = <1>; 56 + interrupt-controller; 57 + interrupt-map = <0x6000 1 &test_intc_intmap0 0x7000 2>; 58 + }; 59 + 53 60 interrupts0 { 54 61 interrupt-parent = <&test_intc0>; 55 62 interrupts = <1>, <2>, <3>, <4>; ··· 65 58 interrupts1 { 66 59 interrupt-parent = <&test_intmap0>; 67 60 interrupts = <1>, <2>, <3>, <4>; 61 + }; 62 + 63 + interrupts2 { 64 + reg = <0x6000 0x100>; 65 + interrupt-parent = <&test_intc_intmap0>; 66 + interrupts = <1>; 68 67 }; 69 68 70 69 interrupts-extended0 {
+67
drivers/of/unittest.c
··· 1654 1654 of_node_put(np); 1655 1655 } 1656 1656 1657 + #if IS_ENABLED(CONFIG_OF_DYNAMIC) 1658 + static void __init of_unittest_irq_refcount(void) 1659 + { 1660 + struct of_phandle_args args; 1661 + struct device_node *intc0, *int_ext0; 1662 + struct device_node *int2, *intc_intmap0; 1663 + unsigned int ref_c0, ref_c1, ref_c2; 1664 + int rc; 1665 + bool passed; 1666 + 1667 + if (of_irq_workarounds & OF_IMAP_OLDWORLD_MAC) 1668 + return; 1669 + 1670 + intc0 = of_find_node_by_path("/testcase-data/interrupts/intc0"); 1671 + int_ext0 = of_find_node_by_path("/testcase-data/interrupts/interrupts-extended0"); 1672 + intc_intmap0 = of_find_node_by_path("/testcase-data/interrupts/intc-intmap0"); 1673 + int2 = of_find_node_by_path("/testcase-data/interrupts/interrupts2"); 1674 + if (!intc0 || !int_ext0 || !intc_intmap0 || !int2) { 1675 + pr_err("missing testcase data\n"); 1676 + goto out; 1677 + } 1678 + 1679 + /* Test refcount for API of_irq_parse_one() */ 1680 + passed = true; 1681 + ref_c0 = OF_KREF_READ(intc0); 1682 + ref_c1 = ref_c0 + 1; 1683 + memset(&args, 0, sizeof(args)); 1684 + rc = of_irq_parse_one(int_ext0, 0, &args); 1685 + ref_c2 = OF_KREF_READ(intc0); 1686 + of_node_put(args.np); 1687 + 1688 + passed &= !rc; 1689 + passed &= (args.np == intc0); 1690 + passed &= (args.args_count == 1); 1691 + passed &= (args.args[0] == 1); 1692 + passed &= (ref_c1 == ref_c2); 1693 + unittest(passed, "IRQ refcount case #1 failed, original(%u) expected(%u) got(%u)\n", 1694 + ref_c0, ref_c1, ref_c2); 1695 + 1696 + /* Test refcount for API of_irq_parse_raw() */ 1697 + passed = true; 1698 + ref_c0 = OF_KREF_READ(intc_intmap0); 1699 + ref_c1 = ref_c0 + 1; 1700 + memset(&args, 0, sizeof(args)); 1701 + rc = of_irq_parse_one(int2, 0, &args); 1702 + ref_c2 = OF_KREF_READ(intc_intmap0); 1703 + of_node_put(args.np); 1704 + 1705 + passed &= !rc; 1706 + passed &= (args.np == intc_intmap0); 1707 + passed &= (args.args_count == 1); 1708 + passed &= (args.args[0] == 2); 1709 + passed &= (ref_c1 == ref_c2); 1710 + unittest(passed, "IRQ refcount case #2 failed, original(%u) expected(%u) got(%u)\n", 1711 + ref_c0, ref_c1, ref_c2); 1712 + 1713 + out: 1714 + of_node_put(int2); 1715 + of_node_put(intc_intmap0); 1716 + of_node_put(int_ext0); 1717 + of_node_put(intc0); 1718 + } 1719 + #else 1720 + static inline void __init of_unittest_irq_refcount(void) { } 1721 + #endif 1722 + 1657 1723 static const struct of_device_id match_node_table[] = { 1658 1724 { .data = "A", .name = "name0", }, /* Name alone is lowest priority */ 1659 1725 { .data = "B", .type = "type1", }, /* followed by type alone */ ··· 4390 4324 of_unittest_changeset_prop(); 4391 4325 of_unittest_parse_interrupts(); 4392 4326 of_unittest_parse_interrupts_extended(); 4327 + of_unittest_irq_refcount(); 4393 4328 of_unittest_dma_get_max_cpu_address(); 4394 4329 of_unittest_parse_dma_ranges(); 4395 4330 of_unittest_pci_dma_ranges();
+1 -1
include/linux/fwnode.h
··· 91 91 #define SWNODE_GRAPH_PORT_NAME_FMT "port@%u" 92 92 #define SWNODE_GRAPH_ENDPOINT_NAME_FMT "endpoint@%u" 93 93 94 - #define NR_FWNODE_REFERENCE_ARGS 8 94 + #define NR_FWNODE_REFERENCE_ARGS 16 95 95 96 96 /** 97 97 * struct fwnode_reference_args - Fwnode reference with additional arguments
+1 -7
include/linux/of.h
··· 67 67 #endif 68 68 }; 69 69 70 - #define MAX_PHANDLE_ARGS 16 70 + #define MAX_PHANDLE_ARGS NR_FWNODE_REFERENCE_ARGS 71 71 struct of_phandle_args { 72 72 struct device_node *np; 73 73 int args_count; ··· 925 925 #define of_prop_cmp(s1, s2) strcmp((s1), (s2)) 926 926 #define of_node_cmp(s1, s2) strcasecmp((s1), (s2)) 927 927 #endif 928 - 929 - static inline int of_prop_val_eq(const struct property *p1, const struct property *p2) 930 - { 931 - return p1->length == p2->length && 932 - !memcmp(p1->value, p2->value, (size_t)p1->length); 933 - } 934 928 935 929 #define for_each_property_of_node(dn, pp) \ 936 930 for (pp = dn->properties; pp != NULL; pp = pp->next)
+5 -1
scripts/make_fit.py
··· 279 279 if os.path.splitext(fname)[1] != '.dtb': 280 280 continue 281 281 282 - (model, compat, files) = process_dtb(fname, args) 282 + try: 283 + (model, compat, files) = process_dtb(fname, args) 284 + except Exception as e: 285 + sys.stderr.write(f"Error processing {fname}:\n") 286 + raise e 283 287 284 288 for fn in files: 285 289 if fn not in fdts: