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

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

Pull devicetree updates from Rob Herring:
"DT Bindings:

- Add Bindings for QCom QCS615 UFS, QCom IPQ5424 DWC3 USB, NXP imx7d
MIPI DSI, QCom SM8750 PDC, QCom MSM8976 SRAM, QCom ipq6018 temp
sensor, QCom QCS8300 Power Domain Controller, QCom QCS615 Power
Domain Controller, QCom QCS615 APSS, QCom QCS615 qfprom, QCom
QCS8300 remoteproc, Mediatek MT6328 PMIC, Allwinner A100 OPP, and
NXP iMX35 GPT

- Convert Altera socfpga-system, raspberrypi,bcm2835-power to DT
schema

- Add Siflower vendor prefix

- Cleanup display, interrupt-controller, and UFS binding examples'
indentation

- Document preferred line wrapping (the same as the rest of the
kernel)

DT Core:

- Add warning when of_property_read_bool() is used on non-boolean
properties

- Restore keeping bootloader DTB when booting with ACPI. Turns out
some x86 platforms relied on that. Shrug.

- Fix of_find_node_opts_by_path() handling of alias+path+options

- Fix resource bounds checking for empty resources

- A bunch of small fixes/cleanups all over from Zijun Hu

- Cleanups in bin_attribute handling"

* tag 'devicetree-for-6.14' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (50 commits)
of: address: Fix empty resource handling in __of_address_resource_bounds()
of/fdt: Restore possibility to use both ACPI and FDT from bootloader
docs: dt-bindings: Document preferred line wrapping
dt-bindings: ufs: Correct indentation and style in DTS example
of: Correct element count for two arrays in API of_parse_phandle_with_args_map()
of: reserved-memory: Warn for missing static reserved memory regions
of: Do not expose of_alias_scan() and correct its comments
dt-bindings: ufs: qcom: Add UFS Host Controller for QCS615
dt-bindings: usb: qcom,dwc3: Add IPQ5424 to USB DWC3 bindings
dt-bindings: arm: coresight: Update the pattern of ete node name
of: Warn when of_property_read_bool() is used on non-boolean properties
device property: Split property reading bool and presence test ops
of/fdt: Check fdt_get_mem_rsv() error in early_init_fdt_scan_reserved_mem()
of: reserved-memory: Move an assignment to effective place in __reserved_mem_alloc_size()
of: reserved-memory: Do not make kmemleak ignore freed address
of: reserved-memory: Fix using wrong number of cells to get property 'alignment'
of: Remove a duplicated code block
of: property: Avoiding using uninitialized variable @imaplen in parse_interrupt_map()
of: Correct child specifier used as input of the 2nd nexus node
dt-bindings: interrupt-controller: ti,omap4-wugen-mpu: Add file extension
...

+607 -511
-25
Documentation/devicetree/bindings/arm/altera/socfpga-system.txt
··· 1 - Altera SOCFPGA System Manager 2 - 3 - Required properties: 4 - - compatible : "altr,sys-mgr" 5 - - reg : Should contain 1 register ranges(address and length) 6 - - cpu1-start-addr : CPU1 start address in hex. 7 - 8 - Example: 9 - sysmgr@ffd08000 { 10 - compatible = "altr,sys-mgr"; 11 - reg = <0xffd08000 0x1000>; 12 - cpu1-start-addr = <0xffd080c4>; 13 - }; 14 - 15 - ARM64 - Stratix10 16 - Required properties: 17 - - compatible : "altr,sys-mgr-s10" 18 - - reg : Should contain 1 register range(address and length) 19 - for system manager register. 20 - 21 - Example: 22 - sysmgr@ffd12000 { 23 - compatible = "altr,sys-mgr-s10"; 24 - reg = <0xffd12000 0x228>; 25 - };
+3 -3
Documentation/devicetree/bindings/arm/arm,embedded-trace-extension.yaml
··· 23 23 24 24 properties: 25 25 $nodename: 26 - pattern: "^ete([0-9a-f]+)$" 26 + pattern: "^ete(-[0-9]+)?$" 27 27 compatible: 28 28 items: 29 29 - const: arm,embedded-trace-extension ··· 55 55 56 56 # An ETE node without legacy CoreSight connections 57 57 - | 58 - ete0 { 58 + ete-0 { 59 59 compatible = "arm,embedded-trace-extension"; 60 60 cpu = <&cpu_0>; 61 61 }; 62 62 # An ETE node with legacy CoreSight connections 63 63 - | 64 - ete1 { 64 + ete-1 { 65 65 compatible = "arm,embedded-trace-extension"; 66 66 cpu = <&cpu_1>; 67 67
+4 -4
Documentation/devicetree/bindings/display/amlogic,meson-dw-hdmi.yaml
··· 148 148 149 149 /* TMDS Output */ 150 150 hdmi_tx_tmds_port: port@1 { 151 - reg = <1>; 151 + reg = <1>; 152 152 153 - hdmi_tx_tmds_out: endpoint { 154 - remote-endpoint = <&hdmi_connector_in>; 155 - }; 153 + hdmi_tx_tmds_out: endpoint { 154 + remote-endpoint = <&hdmi_connector_in>; 155 + }; 156 156 }; 157 157 };
+14 -14
Documentation/devicetree/bindings/display/bridge/fsl,imx8mp-hdmi-tx.yaml
··· 82 82 power-domains = <&hdmi_blk_ctrl IMX8MP_HDMIBLK_PD_HDMI_TX>; 83 83 reg-io-width = <1>; 84 84 ports { 85 - #address-cells = <1>; 86 - #size-cells = <0>; 87 - port@0 { 88 - reg = <0>; 85 + #address-cells = <1>; 86 + #size-cells = <0>; 87 + port@0 { 88 + reg = <0>; 89 89 90 - hdmi_tx_from_pvi: endpoint { 91 - remote-endpoint = <&pvi_to_hdmi_tx>; 92 - }; 93 - }; 90 + endpoint { 91 + remote-endpoint = <&pvi_to_hdmi_tx>; 92 + }; 93 + }; 94 94 95 - port@1 { 96 - reg = <1>; 97 - hdmi_tx_out: endpoint { 98 - remote-endpoint = <&hdmi0_con>; 99 - }; 100 - }; 95 + port@1 { 96 + reg = <1>; 97 + endpoint { 98 + remote-endpoint = <&hdmi0_con>; 99 + }; 100 + }; 101 101 }; 102 102 };
+36 -34
Documentation/devicetree/bindings/display/bridge/samsung,mipi-dsim.yaml
··· 27 27 - fsl,imx8mm-mipi-dsim 28 28 - fsl,imx8mp-mipi-dsim 29 29 - items: 30 - - const: fsl,imx8mn-mipi-dsim 30 + - enum: 31 + - fsl,imx7d-mipi-dsim 32 + - fsl,imx8mn-mipi-dsim 31 33 - const: fsl,imx8mm-mipi-dsim 32 34 33 35 reg: ··· 243 241 #include <dt-bindings/interrupt-controller/arm-gic.h> 244 242 245 243 dsi@13900000 { 246 - compatible = "samsung,exynos5433-mipi-dsi"; 247 - reg = <0x13900000 0xC0>; 248 - interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>; 249 - phys = <&mipi_phy 1>; 250 - phy-names = "dsim"; 251 - clocks = <&cmu_disp CLK_PCLK_DSIM0>, 252 - <&cmu_disp CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8>, 253 - <&cmu_disp CLK_PHYCLK_MIPIDPHY0_RXCLKESC0>, 254 - <&cmu_disp CLK_SCLK_RGB_VCLK_TO_DSIM0>, 255 - <&cmu_disp CLK_SCLK_DSIM0>; 256 - clock-names = "bus_clk", 257 - "phyclk_mipidphy0_bitclkdiv8", 258 - "phyclk_mipidphy0_rxclkesc0", 259 - "sclk_rgb_vclk_to_dsim0", 260 - "sclk_mipi"; 261 - power-domains = <&pd_disp>; 262 - vddcore-supply = <&ldo6_reg>; 263 - vddio-supply = <&ldo7_reg>; 264 - samsung,burst-clock-frequency = <512000000>; 265 - samsung,esc-clock-frequency = <16000000>; 266 - samsung,pll-clock-frequency = <24000000>; 267 - pinctrl-names = "default"; 268 - pinctrl-0 = <&te_irq>; 244 + compatible = "samsung,exynos5433-mipi-dsi"; 245 + reg = <0x13900000 0xC0>; 246 + interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>; 247 + phys = <&mipi_phy 1>; 248 + phy-names = "dsim"; 249 + clocks = <&cmu_disp CLK_PCLK_DSIM0>, 250 + <&cmu_disp CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8>, 251 + <&cmu_disp CLK_PHYCLK_MIPIDPHY0_RXCLKESC0>, 252 + <&cmu_disp CLK_SCLK_RGB_VCLK_TO_DSIM0>, 253 + <&cmu_disp CLK_SCLK_DSIM0>; 254 + clock-names = "bus_clk", 255 + "phyclk_mipidphy0_bitclkdiv8", 256 + "phyclk_mipidphy0_rxclkesc0", 257 + "sclk_rgb_vclk_to_dsim0", 258 + "sclk_mipi"; 259 + power-domains = <&pd_disp>; 260 + vddcore-supply = <&ldo6_reg>; 261 + vddio-supply = <&ldo7_reg>; 262 + samsung,burst-clock-frequency = <512000000>; 263 + samsung,esc-clock-frequency = <16000000>; 264 + samsung,pll-clock-frequency = <24000000>; 265 + pinctrl-names = "default"; 266 + pinctrl-0 = <&te_irq>; 269 267 270 - ports { 271 - #address-cells = <1>; 272 - #size-cells = <0>; 268 + ports { 269 + #address-cells = <1>; 270 + #size-cells = <0>; 273 271 274 - port@0 { 275 - reg = <0>; 272 + port@0 { 273 + reg = <0>; 276 274 277 - dsi_to_mic: endpoint { 278 - remote-endpoint = <&mic_to_dsi>; 279 - }; 280 - }; 281 - }; 275 + dsi_to_mic: endpoint { 276 + remote-endpoint = <&mic_to_dsi>; 277 + }; 278 + }; 279 + }; 282 280 };
+23 -23
Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
··· 104 104 #size-cells = <2>; 105 105 106 106 aal@14015000 { 107 - compatible = "mediatek,mt8173-disp-aal"; 108 - reg = <0 0x14015000 0 0x1000>; 109 - interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_LOW>; 110 - power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>; 111 - clocks = <&mmsys CLK_MM_DISP_AAL>; 112 - mediatek,gce-client-reg = <&gce SUBSYS_1401XXXX 0x5000 0x1000>; 107 + compatible = "mediatek,mt8173-disp-aal"; 108 + reg = <0 0x14015000 0 0x1000>; 109 + interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_LOW>; 110 + power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>; 111 + clocks = <&mmsys CLK_MM_DISP_AAL>; 112 + mediatek,gce-client-reg = <&gce SUBSYS_1401XXXX 0x5000 0x1000>; 113 113 114 - ports { 115 - #address-cells = <1>; 116 - #size-cells = <0>; 114 + ports { 115 + #address-cells = <1>; 116 + #size-cells = <0>; 117 117 118 - port@0 { 119 - reg = <0>; 120 - aal0_in: endpoint { 121 - remote-endpoint = <&ccorr0_out>; 122 - }; 123 - }; 118 + port@0 { 119 + reg = <0>; 120 + endpoint { 121 + remote-endpoint = <&ccorr0_out>; 122 + }; 123 + }; 124 124 125 - port@1 { 126 - reg = <1>; 127 - aal0_out: endpoint { 128 - remote-endpoint = <&gamma0_in>; 129 - }; 130 - }; 131 - }; 132 - }; 125 + port@1 { 126 + reg = <1>; 127 + endpoint { 128 + remote-endpoint = <&gamma0_in>; 129 + }; 130 + }; 131 + }; 132 + }; 133 133 };
+49 -49
Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
··· 418 418 419 419 examples: 420 420 - | 421 - #include <dt-bindings/interrupt-controller/arm-gic.h> 422 - #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 423 - #include <dt-bindings/clock/qcom,gcc-sdm845.h> 424 - #include <dt-bindings/power/qcom-rpmpd.h> 421 + #include <dt-bindings/interrupt-controller/arm-gic.h> 422 + #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 423 + #include <dt-bindings/clock/qcom,gcc-sdm845.h> 424 + #include <dt-bindings/power/qcom-rpmpd.h> 425 425 426 - dsi@ae94000 { 427 - compatible = "qcom,sc7180-dsi-ctrl", "qcom,mdss-dsi-ctrl"; 428 - reg = <0x0ae94000 0x400>; 429 - reg-names = "dsi_ctrl"; 426 + dsi@ae94000 { 427 + compatible = "qcom,sc7180-dsi-ctrl", "qcom,mdss-dsi-ctrl"; 428 + reg = <0x0ae94000 0x400>; 429 + reg-names = "dsi_ctrl"; 430 430 431 - #address-cells = <1>; 432 - #size-cells = <0>; 431 + #address-cells = <1>; 432 + #size-cells = <0>; 433 433 434 - interrupt-parent = <&mdss>; 435 - interrupts = <4>; 434 + interrupt-parent = <&mdss>; 435 + interrupts = <4>; 436 436 437 - clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>, 438 - <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>, 439 - <&dispcc DISP_CC_MDSS_PCLK0_CLK>, 440 - <&dispcc DISP_CC_MDSS_ESC0_CLK>, 441 - <&dispcc DISP_CC_MDSS_AHB_CLK>, 442 - <&dispcc DISP_CC_MDSS_AXI_CLK>; 443 - clock-names = "byte", 444 - "byte_intf", 445 - "pixel", 446 - "core", 447 - "iface", 448 - "bus"; 437 + clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>, 438 + <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>, 439 + <&dispcc DISP_CC_MDSS_PCLK0_CLK>, 440 + <&dispcc DISP_CC_MDSS_ESC0_CLK>, 441 + <&dispcc DISP_CC_MDSS_AHB_CLK>, 442 + <&dispcc DISP_CC_MDSS_AXI_CLK>; 443 + clock-names = "byte", 444 + "byte_intf", 445 + "pixel", 446 + "core", 447 + "iface", 448 + "bus"; 449 449 450 - phys = <&dsi0_phy>; 451 - phy-names = "dsi"; 450 + phys = <&dsi0_phy>; 451 + phy-names = "dsi"; 452 452 453 - assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>, <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>; 454 - assigned-clock-parents = <&dsi_phy 0>, <&dsi_phy 1>; 453 + assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>, <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>; 454 + assigned-clock-parents = <&dsi_phy 0>, <&dsi_phy 1>; 455 455 456 - power-domains = <&rpmhpd SC7180_CX>; 457 - operating-points-v2 = <&dsi_opp_table>; 456 + power-domains = <&rpmhpd SC7180_CX>; 457 + operating-points-v2 = <&dsi_opp_table>; 458 458 459 - ports { 460 - #address-cells = <1>; 461 - #size-cells = <0>; 459 + ports { 460 + #address-cells = <1>; 461 + #size-cells = <0>; 462 462 463 - port@0 { 464 - reg = <0>; 465 - dsi0_in: endpoint { 466 - remote-endpoint = <&dpu_intf1_out>; 467 - }; 468 - }; 463 + port@0 { 464 + reg = <0>; 465 + endpoint { 466 + remote-endpoint = <&dpu_intf1_out>; 467 + }; 468 + }; 469 469 470 - port@1 { 471 - reg = <1>; 472 - dsi0_out: endpoint { 473 - remote-endpoint = <&sn65dsi86_in>; 474 - data-lanes = <0 1 2 3>; 475 - qcom,te-source = "mdp_vsync_e"; 476 - }; 477 - }; 478 - }; 479 - }; 470 + port@1 { 471 + reg = <1>; 472 + endpoint { 473 + remote-endpoint = <&sn65dsi86_in>; 474 + data-lanes = <0 1 2 3>; 475 + qcom,te-source = "mdp_vsync_e"; 476 + }; 477 + }; 478 + }; 479 + }; 480 480 ...
+20 -20
Documentation/devicetree/bindings/display/msm/dsi-phy-10nm.yaml
··· 74 74 75 75 examples: 76 76 - | 77 - #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 78 - #include <dt-bindings/clock/qcom,rpmh.h> 77 + #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 78 + #include <dt-bindings/clock/qcom,rpmh.h> 79 79 80 - dsi-phy@ae94400 { 81 - compatible = "qcom,dsi-phy-10nm"; 82 - reg = <0x0ae94400 0x200>, 83 - <0x0ae94600 0x280>, 84 - <0x0ae94a00 0x1e0>; 85 - reg-names = "dsi_phy", 86 - "dsi_phy_lane", 87 - "dsi_pll"; 80 + dsi-phy@ae94400 { 81 + compatible = "qcom,dsi-phy-10nm"; 82 + reg = <0x0ae94400 0x200>, 83 + <0x0ae94600 0x280>, 84 + <0x0ae94a00 0x1e0>; 85 + reg-names = "dsi_phy", 86 + "dsi_phy_lane", 87 + "dsi_pll"; 88 88 89 - #clock-cells = <1>; 90 - #phy-cells = <0>; 89 + #clock-cells = <1>; 90 + #phy-cells = <0>; 91 91 92 - vdds-supply = <&vdda_mipi_dsi0_pll>; 93 - clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 94 - <&rpmhcc RPMH_CXO_CLK>; 95 - clock-names = "iface", "ref"; 92 + vdds-supply = <&vdda_mipi_dsi0_pll>; 93 + clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 94 + <&rpmhcc RPMH_CXO_CLK>; 95 + clock-names = "iface", "ref"; 96 96 97 - qcom,phy-rescode-offset-top = /bits/ 8 <0 0 0 0 0>; 98 - qcom,phy-rescode-offset-bot = /bits/ 8 <0 0 0 0 0>; 99 - qcom,phy-drive-ldo-level = <400>; 100 - }; 97 + qcom,phy-rescode-offset-top = /bits/ 8 <0 0 0 0 0>; 98 + qcom,phy-rescode-offset-bot = /bits/ 8 <0 0 0 0 0>; 99 + qcom,phy-drive-ldo-level = <400>; 100 + }; 101 101 ...
+17 -17
Documentation/devicetree/bindings/display/msm/dsi-phy-14nm.yaml
··· 56 56 57 57 examples: 58 58 - | 59 - #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 60 - #include <dt-bindings/clock/qcom,rpmh.h> 59 + #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 60 + #include <dt-bindings/clock/qcom,rpmh.h> 61 61 62 - dsi-phy@ae94400 { 63 - compatible = "qcom,dsi-phy-14nm"; 64 - reg = <0x0ae94400 0x200>, 65 - <0x0ae94600 0x280>, 66 - <0x0ae94a00 0x1e0>; 67 - reg-names = "dsi_phy", 68 - "dsi_phy_lane", 69 - "dsi_pll"; 62 + dsi-phy@ae94400 { 63 + compatible = "qcom,dsi-phy-14nm"; 64 + reg = <0x0ae94400 0x200>, 65 + <0x0ae94600 0x280>, 66 + <0x0ae94a00 0x1e0>; 67 + reg-names = "dsi_phy", 68 + "dsi_phy_lane", 69 + "dsi_pll"; 70 70 71 - #clock-cells = <1>; 72 - #phy-cells = <0>; 71 + #clock-cells = <1>; 72 + #phy-cells = <0>; 73 73 74 - vcca-supply = <&vcca_reg>; 75 - clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 76 - <&rpmhcc RPMH_CXO_CLK>; 77 - clock-names = "iface", "ref"; 78 - }; 74 + vcca-supply = <&vcca_reg>; 75 + clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 76 + <&rpmhcc RPMH_CXO_CLK>; 77 + clock-names = "iface", "ref"; 78 + }; 79 79 ...
+18 -18
Documentation/devicetree/bindings/display/msm/dsi-phy-20nm.yaml
··· 45 45 46 46 examples: 47 47 - | 48 - #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 49 - #include <dt-bindings/clock/qcom,rpmh.h> 48 + #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 49 + #include <dt-bindings/clock/qcom,rpmh.h> 50 50 51 - dsi-phy@fd922a00 { 52 - compatible = "qcom,dsi-phy-20nm"; 53 - reg = <0xfd922a00 0xd4>, 54 - <0xfd922b00 0x2b0>, 55 - <0xfd922d80 0x7b>; 56 - reg-names = "dsi_pll", 57 - "dsi_phy", 58 - "dsi_phy_regulator"; 51 + dsi-phy@fd922a00 { 52 + compatible = "qcom,dsi-phy-20nm"; 53 + reg = <0xfd922a00 0xd4>, 54 + <0xfd922b00 0x2b0>, 55 + <0xfd922d80 0x7b>; 56 + reg-names = "dsi_pll", 57 + "dsi_phy", 58 + "dsi_phy_regulator"; 59 59 60 - #clock-cells = <1>; 61 - #phy-cells = <0>; 60 + #clock-cells = <1>; 61 + #phy-cells = <0>; 62 62 63 - vcca-supply = <&vcca_reg>; 64 - vddio-supply = <&vddio_reg>; 63 + vcca-supply = <&vcca_reg>; 64 + vddio-supply = <&vddio_reg>; 65 65 66 - clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 67 - <&rpmhcc RPMH_CXO_CLK>; 68 - clock-names = "iface", "ref"; 69 - }; 66 + clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 67 + <&rpmhcc RPMH_CXO_CLK>; 68 + clock-names = "iface", "ref"; 69 + }; 70 70 ...
+17 -17
Documentation/devicetree/bindings/display/msm/dsi-phy-28nm.yaml
··· 51 51 52 52 examples: 53 53 - | 54 - #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 55 - #include <dt-bindings/clock/qcom,rpmh.h> 54 + #include <dt-bindings/clock/qcom,dispcc-sdm845.h> 55 + #include <dt-bindings/clock/qcom,rpmh.h> 56 56 57 - dsi-phy@fd922a00 { 58 - compatible = "qcom,dsi-phy-28nm-lp"; 59 - reg = <0xfd922a00 0xd4>, 60 - <0xfd922b00 0x2b0>, 61 - <0xfd922d80 0x7b>; 62 - reg-names = "dsi_pll", 63 - "dsi_phy", 64 - "dsi_phy_regulator"; 57 + dsi-phy@fd922a00 { 58 + compatible = "qcom,dsi-phy-28nm-lp"; 59 + reg = <0xfd922a00 0xd4>, 60 + <0xfd922b00 0x2b0>, 61 + <0xfd922d80 0x7b>; 62 + reg-names = "dsi_pll", 63 + "dsi_phy", 64 + "dsi_phy_regulator"; 65 65 66 - #clock-cells = <1>; 67 - #phy-cells = <0>; 66 + #clock-cells = <1>; 67 + #phy-cells = <0>; 68 68 69 - vddio-supply = <&vddio_reg>; 69 + vddio-supply = <&vddio_reg>; 70 70 71 - clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 72 - <&rpmhcc RPMH_CXO_CLK>; 73 - clock-names = "iface", "ref"; 74 - }; 71 + clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 72 + <&rpmhcc RPMH_CXO_CLK>; 73 + clock-names = "iface", "ref"; 74 + }; 75 75 ...
+17 -17
Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
··· 54 54 55 55 examples: 56 56 - | 57 - #include <dt-bindings/clock/qcom,dispcc-sm8250.h> 58 - #include <dt-bindings/clock/qcom,rpmh.h> 57 + #include <dt-bindings/clock/qcom,dispcc-sm8250.h> 58 + #include <dt-bindings/clock/qcom,rpmh.h> 59 59 60 - dsi-phy@ae94400 { 61 - compatible = "qcom,dsi-phy-7nm"; 62 - reg = <0x0ae94400 0x200>, 63 - <0x0ae94600 0x280>, 64 - <0x0ae94900 0x260>; 65 - reg-names = "dsi_phy", 66 - "dsi_phy_lane", 67 - "dsi_pll"; 60 + dsi-phy@ae94400 { 61 + compatible = "qcom,dsi-phy-7nm"; 62 + reg = <0x0ae94400 0x200>, 63 + <0x0ae94600 0x280>, 64 + <0x0ae94900 0x260>; 65 + reg-names = "dsi_phy", 66 + "dsi_phy_lane", 67 + "dsi_pll"; 68 68 69 - #clock-cells = <1>; 70 - #phy-cells = <0>; 69 + #clock-cells = <1>; 70 + #phy-cells = <0>; 71 71 72 - vdds-supply = <&vreg_l5a_0p88>; 73 - clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 74 - <&rpmhcc RPMH_CXO_CLK>; 75 - clock-names = "iface", "ref"; 76 - }; 72 + vdds-supply = <&vreg_l5a_0p88>; 73 + clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 74 + <&rpmhcc RPMH_CXO_CLK>; 75 + clock-names = "iface", "ref"; 76 + };
+3 -4
Documentation/devicetree/bindings/display/msm/qcom,sa8775p-mdss.yaml
··· 78 78 "mdp1-mem", 79 79 "cpu-cfg"; 80 80 81 - 82 81 resets = <&dispcc_core_bcr>; 83 82 power-domains = <&dispcc_gdsc>; 84 83 ··· 128 129 port@0 { 129 130 reg = <0>; 130 131 dpu_intf0_out: endpoint { 131 - remote-endpoint = <&mdss0_dp0_in>; 132 + remote-endpoint = <&mdss0_dp0_in>; 132 133 }; 133 134 }; 134 135 }; ··· 208 209 }; 209 210 210 211 port@1 { 211 - reg = <1>; 212 - mdss0_dp_out: endpoint { }; 212 + reg = <1>; 213 + mdss0_dp_out: endpoint { }; 213 214 }; 214 215 }; 215 216
+6 -6
Documentation/devicetree/bindings/display/renesas,cmm.yaml
··· 58 58 #include <dt-bindings/power/r8a7796-sysc.h> 59 59 60 60 cmm0: cmm@fea40000 { 61 - compatible = "renesas,r8a7796-cmm", 62 - "renesas,rcar-gen3-cmm"; 63 - reg = <0xfea40000 0x1000>; 64 - power-domains = <&sysc R8A7796_PD_ALWAYS_ON>; 65 - clocks = <&cpg CPG_MOD 711>; 66 - resets = <&cpg 711>; 61 + compatible = "renesas,r8a7796-cmm", 62 + "renesas,rcar-gen3-cmm"; 63 + reg = <0xfea40000 0x1000>; 64 + power-domains = <&sysc R8A7796_PD_ALWAYS_ON>; 65 + clocks = <&cpg CPG_MOD 711>; 66 + resets = <&cpg 711>; 67 67 };
+11 -5
Documentation/devicetree/bindings/dts-coding-style.rst
··· 162 162 status = "okay"; 163 163 } 164 164 165 - Indentation 166 - ----------- 165 + Indentation and wrapping 166 + ------------------------ 167 167 168 - 1. Use indentation according to Documentation/process/coding-style.rst. 168 + 1. Use indentation and wrap lines according to 169 + Documentation/process/coding-style.rst. 169 170 2. Each entry in arrays with multiple cells, e.g. "reg" with two IO addresses, 170 171 shall be enclosed in <>. 171 - 3. For arrays spanning across lines, it is preferred to align the continued 172 - entries with opening < from the first line. 172 + 3. For arrays spanning across lines, it is preferred to split on item boundary 173 + and align the continued entries with opening < from the first line. 174 + Usually avoid splitting individual items unless they significantly exceed 175 + line wrap limit. 173 176 174 177 Example:: 175 178 ··· 180 177 compatible = "qcom,sm8550-tsens", "qcom,tsens-v2"; 181 178 reg = <0x0 0x0c271000 0x0 0x1000>, 182 179 <0x0 0x0c222000 0x0 0x1000>; 180 + /* Lines exceeding coding style line wrap limit: */ 181 + interconnects = <&aggre1_noc MASTER_USB3_0 0 &mc_virt SLAVE_EBI1 0>, 182 + <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_USB3_0 0>; 183 183 }; 184 184 185 185 Organizing DTSI and DTS
+1
Documentation/devicetree/bindings/input/mediatek,pmic-keys.yaml
··· 25 25 compatible: 26 26 enum: 27 27 - mediatek,mt6323-keys 28 + - mediatek,mt6328-keys 28 29 - mediatek,mt6331-keys 29 30 - mediatek,mt6357-keys 30 31 - mediatek,mt6358-keys
+2 -2
Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml
··· 110 110 111 111 interrupts: 112 112 description: Interrupt source of the parent interrupt controller on 113 - secondary GICs, or VGIC maintenance interrupt on primary GIC (see 114 - below). 113 + secondary GICs, or VGIC maintenance interrupt on primary GIC (see "GICv2 114 + with virtualization extensions" paragraph in the "reg" property). 115 115 maxItems: 1 116 116 117 117 cpu-offset:
+5 -5
Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2400-vic.yaml
··· 52 52 examples: 53 53 - | 54 54 interrupt-controller@1e6c0080 { 55 - compatible = "aspeed,ast2400-vic"; 56 - reg = <0x1e6c0080 0x80>; 57 - interrupt-controller; 58 - #interrupt-cells = <1>; 59 - valid-sources = <0xffffffff 0x0007ffff>; 55 + compatible = "aspeed,ast2400-vic"; 56 + reg = <0x1e6c0080 0x80>; 57 + interrupt-controller; 58 + #interrupt-cells = <1>; 59 + valid-sources = <0xffffffff 0x0007ffff>; 60 60 }; 61 61 62 62 ...
+15 -15
Documentation/devicetree/bindings/interrupt-controller/brcm,bcm7120-l2-intc.yaml
··· 130 130 examples: 131 131 - | 132 132 irq0_intc: interrupt-controller@f0406800 { 133 - compatible = "brcm,bcm7120-l2-intc"; 134 - interrupt-parent = <&intc>; 135 - #interrupt-cells = <1>; 136 - reg = <0xf0406800 0x8>; 137 - interrupt-controller; 138 - interrupts = <0x0 0x42 0x0>, <0x0 0x40 0x0>; 139 - brcm,int-map-mask = <0xeb8>, <0x140>; 140 - brcm,int-fwd-mask = <0x7>; 133 + compatible = "brcm,bcm7120-l2-intc"; 134 + interrupt-parent = <&intc>; 135 + #interrupt-cells = <1>; 136 + reg = <0xf0406800 0x8>; 137 + interrupt-controller; 138 + interrupts = <0x0 0x42 0x0>, <0x0 0x40 0x0>; 139 + brcm,int-map-mask = <0xeb8>, <0x140>; 140 + brcm,int-fwd-mask = <0x7>; 141 141 }; 142 142 143 143 - | 144 144 irq1_intc: interrupt-controller@10000020 { 145 - compatible = "brcm,bcm3380-l2-intc"; 146 - reg = <0x10000024 0x4>, <0x1000002c 0x4>, 147 - <0x10000020 0x4>, <0x10000028 0x4>; 148 - interrupt-controller; 149 - #interrupt-cells = <1>; 150 - interrupt-parent = <&cpu_intc>; 151 - interrupts = <2>; 145 + compatible = "brcm,bcm3380-l2-intc"; 146 + reg = <0x10000024 0x4>, <0x1000002c 0x4>, 147 + <0x10000020 0x4>, <0x10000028 0x4>; 148 + interrupt-controller; 149 + #interrupt-cells = <1>; 150 + interrupt-parent = <&cpu_intc>; 151 + interrupts = <2>; 152 152 };
+3
Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.yaml
··· 26 26 compatible: 27 27 items: 28 28 - enum: 29 + - qcom,qcs615-pdc 30 + - qcom,qcs8300-pdc 29 31 - qcom,qdu1000-pdc 30 32 - qcom,sa8255p-pdc 31 33 - qcom,sa8775p-pdc ··· 49 47 - qcom,sm8450-pdc 50 48 - qcom,sm8550-pdc 51 49 - qcom,sm8650-pdc 50 + - qcom,sm8750-pdc 52 51 - qcom,x1e80100-pdc 53 52 - const: qcom,pdc 54 53
+1 -1
Documentation/devicetree/bindings/interrupt-controller/riscv,imsics.yaml
··· 142 142 <&cpu2_intc 11>, 143 143 <&cpu3_intc 11>, 144 144 <&cpu4_intc 11>; 145 - reg = <0x28000000 0x4000>; 145 + reg = <0x24000000 0x4000>; 146 146 interrupt-controller; 147 147 #interrupt-cells = <0>; 148 148 msi-controller;
Documentation/devicetree/bindings/interrupt-controller/ti,omap4-wugen-mpu Documentation/devicetree/bindings/interrupt-controller/ti,omap4-wugen-mpu.txt
+1
Documentation/devicetree/bindings/mailbox/qcom,apcs-kpss-global.yaml
··· 44 44 - const: qcom,msm8994-apcs-kpss-global 45 45 - items: 46 46 - enum: 47 + - qcom,qcs615-apss-shared 47 48 - qcom,sc7180-apss-shared 48 49 - qcom,sc8180x-apss-shared 49 50 - qcom,sm8150-apss-shared
-7
Documentation/devicetree/bindings/memory-controllers/qca,ath79-ddr-controller.yaml
··· 52 52 53 53 #qca,ddr-wb-channel-cells = <1>; 54 54 }; 55 - 56 - interrupt-controller { 57 - // ... 58 - qca,ddr-wb-channel-interrupts = <2>, <3>, <4>, <5>; 59 - qca,ddr-wb-channels = <&ddr_ctrl 3>, <&ddr_ctrl 2>, 60 - <&ddr_ctrl 0>, <&ddr_ctrl 1>; 61 - };
+2
Documentation/devicetree/bindings/mfd/mediatek,mt6397.yaml
··· 36 36 - enum: 37 37 - mediatek,mt6323 38 38 - mediatek,mt6331 # "mediatek,mt6331" for PMIC MT6331 and MT6332. 39 + - mediatek,mt6328 39 40 - mediatek,mt6358 40 41 - mediatek,mt6359 41 42 - mediatek,mt6397 ··· 89 88 oneOf: 90 89 - enum: 91 90 - mediatek,mt6323-regulator 91 + - mediatek,mt6328-regulator 92 92 - mediatek,mt6358-regulator 93 93 - mediatek,mt6359-regulator 94 94 - mediatek,mt6397-regulator
+1
Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml
··· 32 32 - qcom,msm8998-qfprom 33 33 - qcom,qcm2290-qfprom 34 34 - qcom,qcs404-qfprom 35 + - qcom,qcs615-qfprom 35 36 - qcom,sc7180-qfprom 36 37 - qcom,sc7280-qfprom 37 38 - qcom,sc8280xp-qfprom
+1
Documentation/devicetree/bindings/opp/allwinner,sun50i-h6-operating-points.yaml
··· 22 22 properties: 23 23 compatible: 24 24 enum: 25 + - allwinner,sun50i-a100-operating-points 25 26 - allwinner,sun50i-h6-operating-points 26 27 - allwinner,sun50i-h616-operating-points 27 28
+42
Documentation/devicetree/bindings/power/raspberrypi,bcm2835-power.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/power/raspberrypi,bcm2835-power.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Broadcom BCM2835 power domain 8 + 9 + maintainers: 10 + - Alexander Aring <alex.aring@gmail.com> 11 + - Florian Fainelli <florian.fainelli@broadcom.com> 12 + 13 + description: 14 + The Raspberry Pi power domain manages power for various subsystems 15 + in the Raspberry Pi BCM2835 SoC. 16 + 17 + properties: 18 + compatible: 19 + enum: 20 + - raspberrypi,bcm2835-power 21 + 22 + firmware: 23 + $ref: /schemas/types.yaml#/definitions/phandle 24 + description: Reference to the RPi firmware device node 25 + 26 + "#power-domain-cells": 27 + const: 1 28 + 29 + required: 30 + - compatible 31 + - firmware 32 + - "#power-domain-cells" 33 + 34 + unevaluatedProperties: false 35 + 36 + examples: 37 + - | 38 + power-controller { 39 + compatible = "raspberrypi,bcm2835-power"; 40 + firmware = <&firmware>; 41 + #power-domain-cells = <1>; 42 + };
+30 -14
Documentation/devicetree/bindings/remoteproc/qcom,sa8775p-pas.yaml
··· 15 15 16 16 properties: 17 17 compatible: 18 - enum: 19 - - qcom,sa8775p-adsp-pas 20 - - qcom,sa8775p-cdsp0-pas 21 - - qcom,sa8775p-cdsp1-pas 22 - - qcom,sa8775p-gpdsp0-pas 23 - - qcom,sa8775p-gpdsp1-pas 18 + oneOf: 19 + - items: 20 + - enum: 21 + - qcom,qcs8300-adsp-pas 22 + - const: qcom,sa8775p-adsp-pas 23 + - items: 24 + - enum: 25 + - qcom,qcs8300-cdsp-pas 26 + - const: qcom,sa8775p-cdsp0-pas 27 + - items: 28 + - enum: 29 + - qcom,qcs8300-gpdsp-pas 30 + - const: qcom,sa8775p-gpdsp0-pas 31 + - enum: 32 + - qcom,sa8775p-adsp-pas 33 + - qcom,sa8775p-cdsp0-pas 34 + - qcom,sa8775p-cdsp1-pas 35 + - qcom,sa8775p-gpdsp0-pas 36 + - qcom,sa8775p-gpdsp1-pas 24 37 25 38 reg: 26 39 maxItems: 1 ··· 76 63 - if: 77 64 properties: 78 65 compatible: 79 - enum: 80 - - qcom,sa8775p-adsp-pas 66 + contains: 67 + enum: 68 + - qcom,sa8775p-adsp-pas 81 69 then: 82 70 properties: 83 71 power-domains: ··· 93 79 - if: 94 80 properties: 95 81 compatible: 96 - enum: 97 - - qcom,sa8775p-cdsp0-pas 98 - - qcom,sa8775p-cdsp1-pas 82 + contains: 83 + enum: 84 + - qcom,sa8775p-cdsp0-pas 85 + - qcom,sa8775p-cdsp1-pas 99 86 then: 100 87 properties: 101 88 power-domains: ··· 113 98 - if: 114 99 properties: 115 100 compatible: 116 - enum: 117 - - qcom,sa8775p-gpdsp0-pas 118 - - qcom,sa8775p-gpdsp1-pas 101 + contains: 102 + enum: 103 + - qcom,sa8775p-gpdsp0-pas 104 + - qcom,sa8775p-gpdsp1-pas 119 105 then: 120 106 properties: 121 107 power-domains:
+51
Documentation/devicetree/bindings/soc/altera/altr,sys-mgr.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/soc/altera/altr,sys-mgr.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Altera SOCFPGA System Manager 8 + 9 + maintainers: 10 + - Dinh Nguyen <dinguyen@kernel.org> 11 + 12 + properties: 13 + compatible: 14 + oneOf: 15 + - description: Cyclone5/Arria5/Arria10 16 + const: altr,sys-mgr 17 + - description: Stratix10 SoC 18 + items: 19 + - const: altr,sys-mgr-s10 20 + - const: altr,sys-mgr 21 + 22 + reg: 23 + maxItems: 1 24 + 25 + cpu1-start-addr: 26 + $ref: /schemas/types.yaml#/definitions/uint32 27 + description: CPU1 start address in hex 28 + 29 + required: 30 + - compatible 31 + - reg 32 + 33 + allOf: 34 + - if: 35 + properties: 36 + compatible: 37 + contains: 38 + const: altr,sys-mgr-s10 39 + then: 40 + properties: 41 + cpu1-start-addr: false 42 + 43 + additionalProperties: false 44 + 45 + examples: 46 + - | 47 + sysmgr@ffd08000 { 48 + compatible = "altr,sys-mgr"; 49 + reg = <0xffd08000 0x1000>; 50 + cpu1-start-addr = <0xffd080c4>; 51 + };
-47
Documentation/devicetree/bindings/soc/bcm/raspberrypi,bcm2835-power.txt
··· 1 - Raspberry Pi power domain driver 2 - 3 - Required properties: 4 - 5 - - compatible: Should be "raspberrypi,bcm2835-power". 6 - - firmware: Reference to the RPi firmware device node. 7 - - #power-domain-cells: Should be <1>, we providing multiple power domains. 8 - 9 - The valid defines for power domain are: 10 - 11 - RPI_POWER_DOMAIN_I2C0 12 - RPI_POWER_DOMAIN_I2C1 13 - RPI_POWER_DOMAIN_I2C2 14 - RPI_POWER_DOMAIN_VIDEO_SCALER 15 - RPI_POWER_DOMAIN_VPU1 16 - RPI_POWER_DOMAIN_HDMI 17 - RPI_POWER_DOMAIN_USB 18 - RPI_POWER_DOMAIN_VEC 19 - RPI_POWER_DOMAIN_JPEG 20 - RPI_POWER_DOMAIN_H264 21 - RPI_POWER_DOMAIN_V3D 22 - RPI_POWER_DOMAIN_ISP 23 - RPI_POWER_DOMAIN_UNICAM0 24 - RPI_POWER_DOMAIN_UNICAM1 25 - RPI_POWER_DOMAIN_CCP2RX 26 - RPI_POWER_DOMAIN_CSI2 27 - RPI_POWER_DOMAIN_CPI 28 - RPI_POWER_DOMAIN_DSI0 29 - RPI_POWER_DOMAIN_DSI1 30 - RPI_POWER_DOMAIN_TRANSPOSER 31 - RPI_POWER_DOMAIN_CCP2TX 32 - RPI_POWER_DOMAIN_CDP 33 - RPI_POWER_DOMAIN_ARM 34 - 35 - Example: 36 - 37 - power: power { 38 - compatible = "raspberrypi,bcm2835-power"; 39 - firmware = <&firmware>; 40 - #power-domain-cells = <1>; 41 - }; 42 - 43 - Example for using power domain: 44 - 45 - &usb { 46 - power-domains = <&power RPI_POWER_DOMAIN_USB>; 47 - };
+1
Documentation/devicetree/bindings/sram/qcom,imem.yaml
··· 20 20 - qcom,apq8064-imem 21 21 - qcom,msm8226-imem 22 22 - qcom,msm8974-imem 23 + - qcom,msm8976-imem 23 24 - qcom,qcs404-imem 24 25 - qcom,qcs8300-imem 25 26 - qcom,qdu1000-imem
+1
Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
··· 80 80 - description: v2 of TSENS with combined interrupt 81 81 items: 82 82 - enum: 83 + - qcom,ipq6018-tsens 83 84 - qcom,ipq9574-tsens 84 85 - const: qcom,ipq8074-tsens 85 86
+2 -1
Documentation/devicetree/bindings/timer/fsl,imxgpt.yaml
··· 21 21 - items: 22 22 - enum: 23 23 - fsl,imx25-gpt 24 + - fsl,imx35-gpt 24 25 - fsl,imx50-gpt 25 26 - fsl,imx51-gpt 26 27 - fsl,imx53-gpt ··· 32 31 - enum: 33 32 - fsl,imx6sl-gpt 34 33 - fsl,imx6sx-gpt 34 + - fsl,imx7d-gpt 35 35 - fsl,imx8mp-gpt 36 36 - fsl,imxrt1050-gpt 37 37 - fsl,imxrt1170-gpt ··· 40 38 - items: 41 39 - enum: 42 40 - fsl,imx6ul-gpt 43 - - fsl,imx7d-gpt 44 41 - const: fsl,imx6sx-gpt 45 42 46 43 reg:
+2
Documentation/devicetree/bindings/ufs/qcom,ufs.yaml
··· 26 26 - qcom,msm8994-ufshc 27 27 - qcom,msm8996-ufshc 28 28 - qcom,msm8998-ufshc 29 + - qcom,qcs615-ufshc 29 30 - qcom,qcs8300-ufshc 30 31 - qcom,sa8775p-ufshc 31 32 - qcom,sc7180-ufshc ··· 244 243 compatible: 245 244 contains: 246 245 enum: 246 + - qcom,qcs615-ufshc 247 247 - qcom,sm6115-ufshc 248 248 - qcom,sm6125-ufshc 249 249 then:
+8 -8
Documentation/devicetree/bindings/ufs/renesas,ufs.yaml
··· 50 50 #include <dt-bindings/power/r8a779f0-sysc.h> 51 51 52 52 ufs: ufs@e686000 { 53 - compatible = "renesas,r8a779f0-ufs"; 54 - reg = <0xe6860000 0x100>; 55 - interrupts = <GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>; 56 - clocks = <&cpg CPG_MOD 1514>, <&ufs30_clk>; 57 - clock-names = "fck", "ref_clk"; 58 - freq-table-hz = <200000000 200000000>, <38400000 38400000>; 59 - power-domains = <&sysc R8A779F0_PD_ALWAYS_ON>; 60 - resets = <&cpg 1514>; 53 + compatible = "renesas,r8a779f0-ufs"; 54 + reg = <0xe6860000 0x100>; 55 + interrupts = <GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>; 56 + clocks = <&cpg CPG_MOD 1514>, <&ufs30_clk>; 57 + clock-names = "fck", "ref_clk"; 58 + freq-table-hz = <200000000 200000000>, <38400000 38400000>; 59 + power-domains = <&sysc R8A779F0_PD_ALWAYS_ON>; 60 + resets = <&cpg 1514>; 61 61 };
+14 -14
Documentation/devicetree/bindings/ufs/samsung,exynos-ufs.yaml
··· 112 112 #include <dt-bindings/clock/exynos7-clk.h> 113 113 114 114 ufs: ufs@15570000 { 115 - compatible = "samsung,exynos7-ufs"; 116 - reg = <0x15570000 0x100>, 117 - <0x15570100 0x100>, 118 - <0x15571000 0x200>, 119 - <0x15572000 0x300>; 120 - reg-names = "hci", "vs_hci", "unipro", "ufsp"; 121 - interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>; 122 - clocks = <&clock_fsys1 ACLK_UFS20_LINK>, 123 - <&clock_fsys1 SCLK_UFSUNIPRO20_USER>; 124 - clock-names = "core_clk", "sclk_unipro_main"; 125 - pinctrl-names = "default"; 126 - pinctrl-0 = <&ufs_rst_n &ufs_refclk_out>; 127 - phys = <&ufs_phy>; 128 - phy-names = "ufs-phy"; 115 + compatible = "samsung,exynos7-ufs"; 116 + reg = <0x15570000 0x100>, 117 + <0x15570100 0x100>, 118 + <0x15571000 0x200>, 119 + <0x15572000 0x300>; 120 + reg-names = "hci", "vs_hci", "unipro", "ufsp"; 121 + interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>; 122 + clocks = <&clock_fsys1 ACLK_UFS20_LINK>, 123 + <&clock_fsys1 SCLK_UFSUNIPRO20_USER>; 124 + clock-names = "core_clk", "sclk_unipro_main"; 125 + pinctrl-names = "default"; 126 + pinctrl-0 = <&ufs_rst_n &ufs_refclk_out>; 127 + phys = <&ufs_phy>; 128 + phy-names = "ufs-phy"; 129 129 }; 130 130 ...
+1
Documentation/devicetree/bindings/usb/qcom,dwc3.yaml
··· 16 16 - qcom,ipq4019-dwc3 17 17 - qcom,ipq5018-dwc3 18 18 - qcom,ipq5332-dwc3 19 + - qcom,ipq5424-dwc3 19 20 - qcom,ipq6018-dwc3 20 21 - qcom,ipq8064-dwc3 21 22 - qcom,ipq8074-dwc3
+2
Documentation/devicetree/bindings/vendor-prefixes.yaml
··· 1342 1342 description: Siemens AG 1343 1343 "^sifive,.*": 1344 1344 description: SiFive, Inc. 1345 + "^siflower,.*": 1346 + description: Shanghai Siflower Communication Co. 1345 1347 "^sigma,.*": 1346 1348 description: Sigma Designs, Inc. 1347 1349 "^sii,.*":
+5 -7
Documentation/devicetree/of_unittest.rst
··· 50 50 51 51 The Device Tree Source file (drivers/of/unittest-data/testcases.dts) contains 52 52 the test data required for executing the unit tests automated in 53 - drivers/of/unittest.c. Currently, following Device Tree Source Include files 54 - (.dtsi) are included in testcases.dts:: 53 + drivers/of/unittest.c. See the content of the folder:: 55 54 56 - drivers/of/unittest-data/tests-interrupts.dtsi 57 - drivers/of/unittest-data/tests-platform.dtsi 58 - drivers/of/unittest-data/tests-phandle.dtsi 59 - drivers/of/unittest-data/tests-match.dtsi 55 + drivers/of/unittest-data/tests-*.dtsi 60 56 61 - When the kernel is build with OF_SELFTEST enabled, then the following make 57 + for the Device Tree Source Include files (.dtsi) included in testcases.dts. 58 + 59 + When the kernel is build with CONFIG_OF_UNITTEST enabled, then the following make 62 60 rule:: 63 61 64 62 $(obj)/%.dtb: $(src)/%.dts FORCE
+1 -1
Documentation/translations/zh_CN/devicetree/of_unittest.rst
··· 40 40 drivers/of/unittest-data/tests-phandle.dtsi 41 41 drivers/of/unittest-data/tests-match.dtsi 42 42 43 - 当内核在启用OF_SELFTEST的情况下被构建时,那么下面的make规则:: 43 + 当内核在启用CONFIG_OF_UNITTEST的情况下被构建时,那么下面的make规则:: 44 44 45 45 $(obj)/%.dtb: $(src)/%.dts FORCE 46 46 $(call if_changed_dep, dtc)
+1
drivers/acpi/property.c
··· 1656 1656 acpi_fwnode_device_dma_supported, \ 1657 1657 .device_get_dma_attr = acpi_fwnode_device_get_dma_attr, \ 1658 1658 .property_present = acpi_fwnode_property_present, \ 1659 + .property_read_bool = acpi_fwnode_property_present, \ 1659 1660 .property_read_int_array = \ 1660 1661 acpi_fwnode_property_read_int_array, \ 1661 1662 .property_read_string_array = \
+38
drivers/base/property.c
··· 71 71 EXPORT_SYMBOL_GPL(fwnode_property_present); 72 72 73 73 /** 74 + * device_property_read_bool - Return the value for a boolean property of a device 75 + * @dev: Device whose property is being checked 76 + * @propname: Name of the property 77 + * 78 + * Return if property @propname is true or false in the device firmware description. 79 + * 80 + * Return: true if property @propname is present. Otherwise, returns false. 81 + */ 82 + bool device_property_read_bool(const struct device *dev, const char *propname) 83 + { 84 + return fwnode_property_read_bool(dev_fwnode(dev), propname); 85 + } 86 + EXPORT_SYMBOL_GPL(device_property_read_bool); 87 + 88 + /** 89 + * fwnode_property_read_bool - Return the value for a boolean property of a firmware node 90 + * @fwnode: Firmware node whose property to check 91 + * @propname: Name of the property 92 + * 93 + * Return if property @propname is true or false in the firmware description. 94 + */ 95 + bool fwnode_property_read_bool(const struct fwnode_handle *fwnode, 96 + const char *propname) 97 + { 98 + bool ret; 99 + 100 + if (IS_ERR_OR_NULL(fwnode)) 101 + return false; 102 + 103 + ret = fwnode_call_bool_op(fwnode, property_read_bool, propname); 104 + if (ret) 105 + return ret; 106 + 107 + return fwnode_call_bool_op(fwnode->secondary, property_read_bool, propname); 108 + } 109 + EXPORT_SYMBOL_GPL(fwnode_property_read_bool); 110 + 111 + /** 74 112 * device_property_read_u8_array - return a u8 array property of a device 75 113 * @dev: Device to get the property of 76 114 * @propname: Name of the property
+1
drivers/base/swnode.c
··· 677 677 .get = software_node_get, 678 678 .put = software_node_put, 679 679 .property_present = software_node_property_present, 680 + .property_read_bool = software_node_property_present, 680 681 .property_read_int_array = software_node_read_int_array, 681 682 .property_read_string_array = software_node_read_string_array, 682 683 .get_name = software_node_get_name,
+8 -25
drivers/of/address.c
··· 16 16 #include <linux/string.h> 17 17 #include <linux/dma-direct.h> /* for bus_dma_region */ 18 18 19 + /* Uncomment me to enable of_dump_addr() debugging output */ 20 + // #define DEBUG 21 + 19 22 #include "of_private.h" 20 - 21 - /* Max address size we deal with */ 22 - #define OF_MAX_ADDR_CELLS 4 23 - #define OF_CHECK_ADDR_COUNT(na) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS) 24 - #define OF_CHECK_COUNTS(na, ns) (OF_CHECK_ADDR_COUNT(na) && (ns) > 0) 25 - 26 - /* Debug utility */ 27 - #ifdef DEBUG 28 - static void of_dump_addr(const char *s, const __be32 *addr, int na) 29 - { 30 - pr_debug("%s", s); 31 - while (na--) 32 - pr_cont(" %08x", be32_to_cpu(*(addr++))); 33 - pr_cont("\n"); 34 - } 35 - #else 36 - static void of_dump_addr(const char *s, const __be32 *addr, int na) { } 37 - #endif 38 23 39 24 /* Callbacks for bus specific translators */ 40 25 struct of_bus { ··· 185 200 186 201 static int __of_address_resource_bounds(struct resource *r, u64 start, u64 size) 187 202 { 188 - u64 end = start; 189 - 190 203 if (overflows_type(start, r->start)) 191 - return -EOVERFLOW; 192 - if (size && check_add_overflow(end, size - 1, &end)) 193 - return -EOVERFLOW; 194 - if (overflows_type(end, r->end)) 195 204 return -EOVERFLOW; 196 205 197 206 r->start = start; 198 - r->end = end; 207 + 208 + if (!size) 209 + r->end = wrapping_sub(typeof(r->end), r->start, 1); 210 + else if (size && check_add_overflow(r->start, size - 1, &r->end)) 211 + return -EOVERFLOW; 199 212 200 213 return 0; 201 214 }
+10 -15
drivers/of/base.c
··· 894 894 /* The path could begin with an alias */ 895 895 if (*path != '/') { 896 896 int len; 897 - const char *p = separator; 897 + const char *p = strchrnul(path, '/'); 898 898 899 - if (!p) 900 - p = strchrnul(path, '/'); 899 + if (separator && separator < p) 900 + p = separator; 901 901 len = p - path; 902 902 903 903 /* of_aliases must not be NULL */ ··· 1027 1027 const char *prop_name) 1028 1028 { 1029 1029 struct device_node *np; 1030 - const struct property *pp; 1031 1030 unsigned long flags; 1032 1031 1033 1032 raw_spin_lock_irqsave(&devtree_lock, flags); 1034 1033 for_each_of_allnodes_from(from, np) { 1035 - for (pp = np->properties; pp; pp = pp->next) { 1036 - if (of_prop_cmp(pp->name, prop_name) == 0) { 1037 - of_node_get(np); 1038 - goto out; 1039 - } 1034 + if (__of_find_property(np, prop_name, NULL)) { 1035 + of_node_get(np); 1036 + break; 1040 1037 } 1041 1038 } 1042 - out: 1043 1039 of_node_put(from); 1044 1040 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1045 1041 return np; ··· 1449 1453 char *pass_name __free(kfree) = kasprintf(GFP_KERNEL, "%s-map-pass-thru", stem_name); 1450 1454 struct device_node *cur, *new = NULL; 1451 1455 const __be32 *map, *mask, *pass; 1452 - static const __be32 dummy_mask[] = { [0 ... MAX_PHANDLE_ARGS] = cpu_to_be32(~0) }; 1453 - static const __be32 dummy_pass[] = { [0 ... MAX_PHANDLE_ARGS] = cpu_to_be32(0) }; 1456 + static const __be32 dummy_mask[] = { [0 ... (MAX_PHANDLE_ARGS - 1)] = cpu_to_be32(~0) }; 1457 + static const __be32 dummy_pass[] = { [0 ... (MAX_PHANDLE_ARGS - 1)] = cpu_to_be32(0) }; 1454 1458 __be32 initial_match_array[MAX_PHANDLE_ARGS]; 1455 1459 const __be32 *match_array = initial_match_array; 1456 1460 int i, ret, map_len, match; ··· 1542 1546 * specifier into the out_args structure, keeping the 1543 1547 * bits specified in <list>-map-pass-thru. 1544 1548 */ 1545 - match_array = map - new_size; 1546 1549 for (i = 0; i < new_size; i++) { 1547 1550 __be32 val = *(map - new_size + i); 1548 1551 ··· 1550 1555 val |= cpu_to_be32(out_args->args[i]) & pass[i]; 1551 1556 } 1552 1557 1558 + initial_match_array[i] = val; 1553 1559 out_args->args[i] = be32_to_cpu(val); 1554 1560 } 1555 1561 out_args->args_count = list_size = new_size; ··· 1818 1822 * for storing the resulting tree 1819 1823 * 1820 1824 * The function scans all the properties of the 'aliases' node and populates 1821 - * the global lookup table with the properties. It returns the 1822 - * number of alias properties found, or an error code in case of failure. 1825 + * the global lookup table with the properties. 1823 1826 */ 1824 1827 void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) 1825 1828 {
+11 -22
drivers/of/fdt.c
··· 8 8 9 9 #define pr_fmt(fmt) "OF: fdt: " fmt 10 10 11 - #include <linux/acpi.h> 12 11 #include <linux/crash_dump.h> 13 12 #include <linux/crc32.h> 14 13 #include <linux/kernel.h> ··· 496 497 void __init early_init_fdt_scan_reserved_mem(void) 497 498 { 498 499 int n; 500 + int res; 499 501 u64 base, size; 500 502 501 503 if (!initial_boot_params) ··· 507 507 508 508 /* Process header /memreserve/ fields */ 509 509 for (n = 0; ; n++) { 510 - fdt_get_mem_rsv(initial_boot_params, n, &base, &size); 510 + res = fdt_get_mem_rsv(initial_boot_params, n, &base, &size); 511 + if (res) { 512 + pr_err("Invalid memory reservation block index %d\n", n); 513 + break; 514 + } 511 515 if (!size) 512 516 break; 513 517 memblock_reserve(base, size); ··· 1219 1215 /* Save the statically-placed regions in the reserved_mem array */ 1220 1216 fdt_scan_reserved_mem_reg_nodes(); 1221 1217 1222 - /* Don't use the bootloader provided DTB if ACPI is enabled */ 1223 - if (!acpi_disabled) 1224 - fdt = NULL; 1225 - 1226 - /* 1227 - * Populate an empty root node when ACPI is enabled or bootloader 1228 - * doesn't provide one. 1229 - */ 1218 + /* Populate an empty root node when bootloader doesn't provide one */ 1230 1219 if (!fdt) { 1231 1220 fdt = (void *) __dtb_empty_root_begin; 1232 1221 /* fdt_totalsize() will be used for copy size */ ··· 1261 1264 } 1262 1265 1263 1266 #ifdef CONFIG_SYSFS 1264 - static ssize_t of_fdt_raw_read(struct file *filp, struct kobject *kobj, 1265 - struct bin_attribute *bin_attr, 1266 - char *buf, loff_t off, size_t count) 1267 - { 1268 - memcpy(buf, initial_boot_params + off, count); 1269 - return count; 1270 - } 1271 - 1272 1267 static int __init of_fdt_raw_init(void) 1273 1268 { 1274 - static struct bin_attribute of_fdt_raw_attr = 1275 - __BIN_ATTR(fdt, S_IRUSR, of_fdt_raw_read, NULL, 0); 1269 + static __ro_after_init BIN_ATTR_SIMPLE_ADMIN_RO(fdt); 1276 1270 1277 1271 if (!initial_boot_params) 1278 1272 return 0; ··· 1273 1285 pr_warn("not creating '/sys/firmware/fdt': CRC check failed\n"); 1274 1286 return 0; 1275 1287 } 1276 - of_fdt_raw_attr.size = fdt_totalsize(initial_boot_params); 1277 - return sysfs_create_bin_file(firmware_kobj, &of_fdt_raw_attr); 1288 + bin_attr_fdt.private = initial_boot_params; 1289 + bin_attr_fdt.size = fdt_totalsize(initial_boot_params); 1290 + return sysfs_create_bin_file(firmware_kobj, &bin_attr_fdt); 1278 1291 } 1279 1292 late_initcall(of_fdt_raw_init); 1280 1293 #endif
+3 -16
drivers/of/fdt_address.c
··· 17 17 #include <linux/of_fdt.h> 18 18 #include <linux/sizes.h> 19 19 20 - /* Max address size we deal with */ 21 - #define OF_MAX_ADDR_CELLS 4 22 - #define OF_CHECK_COUNTS(na, ns) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS && \ 23 - (ns) > 0) 20 + /* Uncomment me to enable of_dump_addr() debugging output */ 21 + // #define DEBUG 24 22 25 - /* Debug utility */ 26 - #ifdef DEBUG 27 - static void __init of_dump_addr(const char *s, const __be32 *addr, int na) 28 - { 29 - pr_debug("%s", s); 30 - while(na--) 31 - pr_cont(" %08x", *(addr++)); 32 - pr_cont("\n"); 33 - } 34 - #else 35 - static void __init of_dump_addr(const char *s, const __be32 *addr, int na) { } 36 - #endif 23 + #include "of_private.h" 37 24 38 25 /* Callbacks for bus specific translators */ 39 26 struct of_bus {
+1 -1
drivers/of/irq.c
··· 171 171 struct device_node *ipar, *tnode, *old = NULL; 172 172 __be32 initial_match_array[MAX_PHANDLE_ARGS]; 173 173 const __be32 *match_array = initial_match_array; 174 - const __be32 *tmp, dummy_imask[] = { [0 ... MAX_PHANDLE_ARGS] = cpu_to_be32(~0) }; 174 + const __be32 *tmp, dummy_imask[] = { [0 ... (MAX_PHANDLE_ARGS - 1)] = cpu_to_be32(~0) }; 175 175 u32 intsize = 1, addrsize; 176 176 int i, rc = -EINVAL; 177 177
+2 -2
drivers/of/kobj.c
··· 29 29 }; 30 30 31 31 static ssize_t of_node_property_read(struct file *filp, struct kobject *kobj, 32 - struct bin_attribute *bin_attr, char *buf, 32 + const struct bin_attribute *bin_attr, char *buf, 33 33 loff_t offset, size_t count) 34 34 { 35 35 struct property *pp = container_of(bin_attr, struct property, attr); ··· 77 77 pp->attr.attr.name = safe_name(&np->kobj, pp->name); 78 78 pp->attr.attr.mode = secure ? 0400 : 0444; 79 79 pp->attr.size = secure ? 0 : pp->length; 80 - pp->attr.read = of_node_property_read; 80 + pp->attr.read_new = of_node_property_read; 81 81 82 82 rc = sysfs_create_bin_file(&np->kobj, &pp->attr); 83 83 WARN(rc, "error adding attribute %s to node %pOF\n", pp->name, np);
+20
drivers/of/of_private.h
··· 119 119 void *(*dt_alloc)(u64 size, u64 align), 120 120 bool detached); 121 121 122 + void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)); 123 + 122 124 /** 123 125 * General utilities for working with live trees. 124 126 * ··· 189 187 void __init fdt_scan_reserved_mem_reg_nodes(void); 190 188 191 189 bool of_fdt_device_is_available(const void *blob, unsigned long node); 190 + 191 + /* Max address size we deal with */ 192 + #define OF_MAX_ADDR_CELLS 4 193 + #define OF_CHECK_ADDR_COUNT(na) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS) 194 + #define OF_CHECK_COUNTS(na, ns) (OF_CHECK_ADDR_COUNT(na) && (ns) > 0) 195 + 196 + /* Debug utility */ 197 + #ifdef DEBUG 198 + static void __maybe_unused of_dump_addr(const char *s, const __be32 *addr, int na) 199 + { 200 + pr_debug("%s", s); 201 + while (na--) 202 + pr_cont(" %08x", be32_to_cpu(*(addr++))); 203 + pr_cont("\n"); 204 + } 205 + #else 206 + static void __maybe_unused of_dump_addr(const char *s, const __be32 *addr, int na) { } 207 + #endif 192 208 193 209 #endif /* _LINUX_OF_PRIVATE_H */
+10 -5
drivers/of/of_reserved_mem.c
··· 52 52 memblock_phys_free(base, size); 53 53 } 54 54 55 - kmemleak_ignore_phys(base); 55 + if (!err) 56 + kmemleak_ignore_phys(base); 56 57 57 58 return err; 58 59 } ··· 263 262 uname); 264 263 continue; 265 264 } 265 + 266 + if (len > t_len) 267 + pr_warn("%s() ignores %d regions in node '%s'\n", 268 + __func__, len / t_len - 1, uname); 269 + 266 270 base = dt_mem_next_cell(dt_root_addr_cells, &prop); 267 271 size = dt_mem_next_cell(dt_root_size_cells, &prop); 268 272 ··· 415 409 416 410 prop = of_get_flat_dt_prop(node, "alignment", &len); 417 411 if (prop) { 418 - if (len != dt_root_addr_cells * sizeof(__be32)) { 412 + if (len != dt_root_size_cells * sizeof(__be32)) { 419 413 pr_err("invalid alignment property in '%s' node.\n", 420 414 uname); 421 415 return -EINVAL; 422 416 } 423 - align = dt_mem_next_cell(dt_root_addr_cells, &prop); 417 + align = dt_mem_next_cell(dt_root_size_cells, &prop); 424 418 } 425 419 426 420 nomap = of_get_flat_dt_prop(node, "no-map", NULL) != NULL; ··· 441 435 return -EINVAL; 442 436 } 443 437 444 - base = 0; 445 - 446 438 while (len > 0) { 447 439 start = dt_mem_next_cell(dt_root_addr_cells, &prop); 448 440 end = start + dt_mem_next_cell(dt_root_size_cells, 449 441 &prop); 450 442 443 + base = 0; 451 444 ret = __reserved_mem_alloc_in_range(size, align, 452 445 start, end, nomap, &base); 453 446 if (ret == 0) {
+2
drivers/of/pdt.c
··· 19 19 #include <linux/of.h> 20 20 #include <linux/of_pdt.h> 21 21 22 + #include "of_private.h" 23 + 22 24 static struct of_pdt_ops *of_pdt_prom_ops __initdata; 23 25 24 26 #if defined(CONFIG_SPARC)
+11 -12
drivers/of/platform.c
··· 24 24 25 25 #include "of_private.h" 26 26 27 - const struct of_device_id of_default_bus_match_table[] = { 28 - { .compatible = "simple-bus", }, 29 - { .compatible = "simple-mfd", }, 30 - { .compatible = "isa", }, 31 - #ifdef CONFIG_ARM_AMBA 32 - { .compatible = "arm,amba-bus", }, 33 - #endif /* CONFIG_ARM_AMBA */ 34 - {} /* Empty terminated list */ 35 - }; 36 - 37 27 /** 38 28 * of_find_device_by_node - Find the platform_device associated with a node 39 29 * @np: Pointer to device tree node ··· 474 484 const struct of_dev_auxdata *lookup, 475 485 struct device *parent) 476 486 { 477 - return of_platform_populate(root, of_default_bus_match_table, lookup, 478 - parent); 487 + static const struct of_device_id match_table[] = { 488 + { .compatible = "simple-bus", }, 489 + { .compatible = "simple-mfd", }, 490 + { .compatible = "isa", }, 491 + #ifdef CONFIG_ARM_AMBA 492 + { .compatible = "arm,amba-bus", }, 493 + #endif /* CONFIG_ARM_AMBA */ 494 + {} /* Empty terminated list */ 495 + }; 496 + 497 + return of_platform_populate(root, match_table, lookup, parent); 479 498 } 480 499 EXPORT_SYMBOL_GPL(of_platform_default_populate); 481 500
+34 -1
drivers/of/property.c
··· 32 32 #include "of_private.h" 33 33 34 34 /** 35 + * of_property_read_bool - Find a property 36 + * @np: device node from which the property value is to be read. 37 + * @propname: name of the property to be searched. 38 + * 39 + * Search for a boolean property in a device node. Usage on non-boolean 40 + * property types is deprecated. 41 + * 42 + * Return: true if the property exists false otherwise. 43 + */ 44 + bool of_property_read_bool(const struct device_node *np, const char *propname) 45 + { 46 + struct property *prop = of_find_property(np, propname, NULL); 47 + 48 + /* 49 + * Boolean properties should not have a value. Testing for property 50 + * presence should either use of_property_present() or just read the 51 + * property value and check the returned error code. 52 + */ 53 + if (prop && prop->length) 54 + pr_warn("%pOF: Read of boolean property '%s' with a value.\n", np, propname); 55 + 56 + return prop ? true : false; 57 + } 58 + EXPORT_SYMBOL(of_property_read_bool); 59 + 60 + /** 35 61 * of_graph_is_present() - check graph's presence 36 62 * @node: pointer to device_node containing graph port 37 63 * ··· 992 966 static bool of_fwnode_property_present(const struct fwnode_handle *fwnode, 993 967 const char *propname) 994 968 { 969 + return of_property_present(to_of_node(fwnode), propname); 970 + } 971 + 972 + static bool of_fwnode_property_read_bool(const struct fwnode_handle *fwnode, 973 + const char *propname) 974 + { 995 975 return of_property_read_bool(to_of_node(fwnode), propname); 996 976 } 997 977 ··· 1422 1390 addrcells = of_bus_n_addr_cells(np); 1423 1391 1424 1392 imap = of_get_property(np, "interrupt-map", &imaplen); 1425 - imaplen /= sizeof(*imap); 1426 1393 if (!imap) 1427 1394 return NULL; 1395 + imaplen /= sizeof(*imap); 1428 1396 1429 1397 imap_end = imap + imaplen; 1430 1398 ··· 1592 1560 .device_dma_supported = of_fwnode_device_dma_supported, 1593 1561 .device_get_dma_attr = of_fwnode_device_get_dma_attr, 1594 1562 .property_present = of_fwnode_property_present, 1563 + .property_read_bool = of_fwnode_property_read_bool, 1595 1564 .property_read_int_array = of_fwnode_property_read_int_array, 1596 1565 .property_read_string_array = of_fwnode_property_read_string_array, 1597 1566 .get_name = of_fwnode_get_name,
+9
drivers/of/unittest.c
··· 161 161 "option alias path test, subcase #1 failed\n"); 162 162 of_node_put(np); 163 163 164 + np = of_find_node_opts_by_path("testcase-alias/phandle-tests/consumer-a:testaliasoption", 165 + &options); 166 + name = kasprintf(GFP_KERNEL, "%pOF", np); 167 + unittest(np && name && !strcmp("/testcase-data/phandle-tests/consumer-a", name) && 168 + !strcmp("testaliasoption", options), 169 + "option alias path test, subcase #2 failed\n"); 170 + of_node_put(np); 171 + kfree(name); 172 + 164 173 np = of_find_node_opts_by_path("testcase-alias:testaliasoption", NULL); 165 174 unittest(np, "NULL option alias path test failed\n"); 166 175 of_node_put(np);
+3
include/linux/fwnode.h
··· 112 112 * @device_is_available: Return true if the device is available. 113 113 * @device_get_match_data: Return the device driver match data. 114 114 * @property_present: Return true if a property is present. 115 + * @property_read_bool: Return a boolean property value. 115 116 * @property_read_int_array: Read an array of integer properties. Return zero on 116 117 * success, a negative error code otherwise. 117 118 * @property_read_string_array: Read an array of string properties. Return zero ··· 142 141 (*device_get_dma_attr)(const struct fwnode_handle *fwnode); 143 142 bool (*property_present)(const struct fwnode_handle *fwnode, 144 143 const char *propname); 144 + bool (*property_read_bool)(const struct fwnode_handle *fwnode, 145 + const char *propname); 145 146 int (*property_read_int_array)(const struct fwnode_handle *fwnode, 146 147 const char *propname, 147 148 unsigned int elem_size, void *val,
+10 -20
include/linux/of.h
··· 311 311 extern struct property *of_find_property(const struct device_node *np, 312 312 const char *name, 313 313 int *lenp); 314 + extern bool of_property_read_bool(const struct device_node *np, const char *propname); 314 315 extern int of_property_count_elems_of_size(const struct device_node *np, 315 316 const char *propname, int elem_size); 316 317 extern int of_property_read_u32_index(const struct device_node *np, ··· 398 397 uint32_t *args, 399 398 int size); 400 399 401 - extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)); 402 400 extern int of_alias_get_id(const struct device_node *np, const char *stem); 403 401 extern int of_alias_get_highest_id(const char *stem); 404 402 ··· 613 613 const char *compat) 614 614 { 615 615 return NULL; 616 + } 617 + 618 + static inline bool of_property_read_bool(const struct device_node *np, 619 + const char *propname) 620 + { 621 + return false; 616 622 } 617 623 618 624 static inline int of_property_count_elems_of_size(const struct device_node *np, ··· 1249 1243 } 1250 1244 1251 1245 /** 1252 - * of_property_read_bool - Find a property 1253 - * @np: device node from which the property value is to be read. 1254 - * @propname: name of the property to be searched. 1255 - * 1256 - * Search for a boolean property in a device node. Usage on non-boolean 1257 - * property types is deprecated. 1258 - * 1259 - * Return: true if the property exists false otherwise. 1260 - */ 1261 - static inline bool of_property_read_bool(const struct device_node *np, 1262 - const char *propname) 1263 - { 1264 - const struct property *prop = of_find_property(np, propname, NULL); 1265 - 1266 - return prop ? true : false; 1267 - } 1268 - 1269 - /** 1270 1246 * of_property_present - Test if a property is present in a node 1271 1247 * @np: device node to search for the property. 1272 1248 * @propname: name of the property to be searched. ··· 1259 1271 */ 1260 1272 static inline bool of_property_present(const struct device_node *np, const char *propname) 1261 1273 { 1262 - return of_property_read_bool(np, propname); 1274 + struct property *prop = of_find_property(np, propname, NULL); 1275 + 1276 + return prop ? true : false; 1263 1277 } 1264 1278 1265 1279 /**
-2
include/linux/of_platform.h
··· 47 47 { .compatible = _compat, .phys_addr = _phys, .name = _name, \ 48 48 .platform_data = _pdata } 49 49 50 - extern const struct of_device_id of_default_bus_match_table[]; 51 - 52 50 /* Platform drivers register/unregister */ 53 51 extern struct platform_device *of_device_alloc(struct device_node *np, 54 52 const char *bus_id,
+3 -12
include/linux/property.h
··· 37 37 struct device *: __dev_fwnode)(dev) 38 38 39 39 bool device_property_present(const struct device *dev, const char *propname); 40 + bool device_property_read_bool(const struct device *dev, const char *propname); 40 41 int device_property_read_u8_array(const struct device *dev, const char *propname, 41 42 u8 *val, size_t nval); 42 43 int device_property_read_u16_array(const struct device *dev, const char *propname, ··· 54 53 const char *propname, const char *string); 55 54 56 55 bool fwnode_property_present(const struct fwnode_handle *fwnode, 56 + const char *propname); 57 + bool fwnode_property_read_bool(const struct fwnode_handle *fwnode, 57 58 const char *propname); 58 59 int fwnode_property_read_u8_array(const struct fwnode_handle *fwnode, 59 60 const char *propname, u8 *val, ··· 210 207 211 208 unsigned int device_get_child_node_count(const struct device *dev); 212 209 213 - static inline bool device_property_read_bool(const struct device *dev, 214 - const char *propname) 215 - { 216 - return device_property_present(dev, propname); 217 - } 218 - 219 210 static inline int device_property_read_u8(const struct device *dev, 220 211 const char *propname, u8 *val) 221 212 { ··· 258 261 const char *propname) 259 262 { 260 263 return device_property_read_string_array(dev, propname, NULL, 0); 261 - } 262 - 263 - static inline bool fwnode_property_read_bool(const struct fwnode_handle *fwnode, 264 - const char *propname) 265 - { 266 - return fwnode_property_present(fwnode, propname); 267 264 } 268 265 269 266 static inline int fwnode_property_read_u8(const struct fwnode_handle *fwnode,