Hello, I want to apply an overlay to a device tree that is compiled without -@ because that's how dtbs are shipped by the Debian kernel package. I'm using dtc 1.6.1-1 as provided by Debian. The machine dtb is bcm2836-rpi-2-b.dtb[1]. The source for the dtbo looks as follows: uwe@taurus:~/tmp$ cat dht11-overlay.dts /* * Overlay for the DHT11/21/22 humidity/temperature sensor modules. */ /dts-v1/; /plugin/; / { compatible = "brcm,bcm2708"; fragment@0 { target-path = "/"; __overlay__ { dht11: dht11@0 { compatible = "dht11"; pinctrl-names = "default"; pinctrl-0 = <&dht11_pins>; gpios = <&gpio 4 0>; status = "okay"; }; }; }; fragment@1 { target-path = "/soc/"; __overlay__ { gpio: gpio@7e200000 { dht11_pins: dht11_pins { brcm,pins = <4>; brcm,function = <0>; // in brcm,pull = <0>; // off }; }; }; }; __overrides__ { gpiopin = <&dht11_pins>,"brcm,pins:0", <&dht11>,"gpios:4"; }; }; which is more or less the overlay with the same name provided by the RaspberryPi Foundation[2]. I can compile and apply the overlay just fine (well there are warnings, but ...): uwe@taurus:~/tmp$ dtc -I dts -O dtb dht11-overlay.dts > dht11-overlay.dtbo dht11-overlay.dts:14.19-20.6: Warning (unit_address_vs_reg): /fragment@0/__overlay__/dht11@0: node has a unit name, but no reg or ranges property dht11-overlay.dts:27.24-33.6: Warning (unit_address_vs_reg): /fragment@1/__overlay__/gpio@7e200000: node has a unit name, but no reg or ranges property dht11-overlay.dts:14.19-20.6: Warning (gpios_property): /fragment@0/__overlay__/dht11@0: Missing property '#gpio-cells' in node /fragment@1/__overlay__/gpio@7e200000 or bad phandle (referred from gpios[0]) uwe@taurus:~/tmp$ fdtoverlay -i bcm2836-rpi-2-b.dtb -o bcm2836-rpi-2-b+dht11.dtb dht11-overlay.dtbo However there is a problem: The original bcm2836-rpi-2-b.dtb has: uwe@taurus:~/tmp$ fdtdump bcm2836-rpi-2-b.dtb ... gpio@7e200000 { .... phandle = <0x00000006>; .... hdmi@7e902000 { ... hpd-gpios = <0x00000006 0x0000002e 0x00000001>; ... the patched dtb has: ... dht11@0 { phandle = <0x0000001d>; status = "okay"; gpios = <0x0000001c 0x00000004 0x00000000>; pinctrl-0 = <0x0000001b>; pinctrl-names = "default"; compatible = "dht11"; }; ... gpio@7e200000 { phandle = <0x0000001c>; .... hdmi@7e902000 { ... hpd-gpios = <0x00000006 0x0000002e 0x00000001>; ... So the gpios property of the dht11 node points to the gpio node as expected, however the hpd-gpios property of the hdmi node is broken because the phandle of gpio@7e200000 changed. I think it should be possible to not overwrite the phandle of gpio@7e200000 and just reuse the value 6. Is this a bug, or did I miss a feature that allows me to create a dtbo that does the right thing? @Corsac: Maybe it's worth to test if the rpi firmware does a better job at applying the dtbo? If you test this, please report here. Best regards Uwe [1] https://www.kleine-koenig.org/tmp/bcm2836-rpi-2-b.dtb [2] https://raw.githubusercontent.com/raspberrypi/linux/5cc390759ed0461bd35744e817470869e99e0484/arch/arm/boot/dts/overlays/dht11-overlay.dts -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |
Attachment:
signature.asc
Description: PGP signature