Is there a reason not to use -@ to compile devicetrees ?
Subsystems (2)
Hello,
Distro: https://raspi.debian.net/ (sid)
Hardware: Raspberry Pi Zero W
Kernel version: 5.9.11 (linux-image-5.9.0-4-rpi)
To access a device connected to my pi, I need the spi0 bus, and would like to not be doing GPIO bit-banging when there are perfectly good spi modules capable of using the SPI alternative mode of these pins.
spi0 is declared in the vanilla devicetree for this device:arch/arm/boot/dts/bcm2835-rpi-zero-w.dts ends up including arch/arm/boot/dts/bcm283x.dtsi which contains:
spi: spi@7e204000 {
compatible = "brcm,bcm2835-spi";
reg = <0x7e204000 0x200>;
interrupts = <2 22>;
clocks = <&clocks BCM2835_CLOCK_VPU>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};To my new-to-devicetree eye, this looks like this is intended to be overridden, at least with a
status = "okay";
property (although a bit more is needed).
As I believe is the correct way, I wrote a devicetree overlay doing this and a bit more in order to enable this bus and one of its device (the one matching the chip-select monitored by the board I connected).
To confirm that I had no typo in my symbol names I ran fdtoverlay with the packaged device tree binary, plus my overlay, but could not get it to work, until I took a closer look at the packaged device tree and realised it lacks a __symbols__ section.
So I pulled the source, added "-@" to the cmd_dtc rule in scripts/Makefile.lib, built the dtb, tested fdtoverlay against it and voila, it worked. I could then reboot with this devicetree, load my overlay and use spi0 with no further change.
So now I wonder why this option is not enabled while there are these sections which seem to not be usable without an overlay ? And further, why it does not seem to be possible to enable with a kernel config option ?
I must be missing something obvious, but I'm still failing to see it.
Regards,
Signature · 1 line
Vincent Pelletier
Ping ?
Quoted 43 lines · Vincent Pelletier
Distro: https://raspi.debian.net/ (sid)
Hardware: Raspberry Pi Zero W
Kernel version: 5.9.11 (linux-image-5.9.0-4-rpi)To access a device connected to my pi, I need the spi0 bus, and would like to not be doing GPIO bit-banging when there are perfectly good spi modules capable of using the SPI alternative mode of these pins.
spi0 is declared in the vanilla devicetree for this device:
arch/arm/boot/dts/bcm2835-rpi-zero-w.dtsends up includingarch/arm/boot/dts/bcm283x.dtsiwhich contains:spi: spi@7e204000 { compatible = "brcm,bcm2835-spi"; reg = <0x7e204000 0x200>; interrupts = <2 22>; clocks = <&clocks BCM2835_CLOCK_VPU>; #address-cells = <1>; #size-cells = <0>; status = "disabled"; };To my new-to-devicetree eye, this looks like this is intended to be overridden, at least with a
status = "okay";
property (although a bit more is needed).
As I believe is the correct way, I wrote a devicetree overlay doing this and a bit more in order to enable this bus and one of its device (the one matching the chip-select monitored by the board I connected).To confirm that I had no typo in my symbol names I ran fdtoverlay with the packaged device tree binary, plus my overlay, but could not get it to work, until I took a closer look at the packaged device tree and realised it lacks a
__symbols__section.
So I pulled the source, added "-@" to thecmd_dtcrule inscripts/Makefile.lib, built the dtb, tested fdtoverlay against it and voila, it worked. I could then reboot with this devicetree, load my overlay and use spi0 with no further change.So now I wonder why this option is not enabled while there are these sections which seem to not be usable without an overlay ? And further, why it does not seem to be possible to enable with a kernel config option ?
I must be missing something obvious, but I'm still failing to see it.
Signature · 1 line
Vincent Pelletier
Rob Herring
maintainerQuoted 40 lines · Vincent Pelletier
Hello,
Distro: https://raspi.debian.net/ (sid)
Hardware: Raspberry Pi Zero W
Kernel version: 5.9.11 (linux-image-5.9.0-4-rpi)To access a device connected to my pi, I need the spi0 bus, and would like to not be doing GPIO bit-banging when there are perfectly good spi modules capable of using the SPI alternative mode of these pins.
spi0 is declared in the vanilla devicetree for this device:
arch/arm/boot/dts/bcm2835-rpi-zero-w.dtsends up includingarch/arm/boot/dts/bcm283x.dtsiwhich contains:spi: spi@7e204000 { compatible = "brcm,bcm2835-spi"; reg = <0x7e204000 0x200>; interrupts = <2 22>; clocks = <&clocks BCM2835_CLOCK_VPU>; #address-cells = <1>; #size-cells = <0>; status = "disabled"; };To my new-to-devicetree eye, this looks like this is intended to be overridden, at least with a
status = "okay";
property (although a bit more is needed).
As I believe is the correct way, I wrote a devicetree overlay doing this and a bit more in order to enable this bus and one of its device (the one matching the chip-select monitored by the board I connected).To confirm that I had no typo in my symbol names I ran fdtoverlay with the packaged device tree binary, plus my overlay, but could not get it to work, until I took a closer look at the packaged device tree and realised it lacks a
__symbols__section.
So I pulled the source, added "-@" to thecmd_dtcrule inscripts/Makefile.lib, built the dtb, tested fdtoverlay against it and voila, it worked. I could then reboot with this devicetree, load my overlay and use spi0 with no further change.
Quoted 6 lines
So now I wonder why this option is not enabled while there are these sections which seem to not be usable without an overlay ? And further, why it does not seem to be possible to enable with a kernel config option ?
I must be missing something obvious, but I'm still failing to see it.
Read the last time this came up:
Hello,
Quoted 3 lines
Read the last time this came up:
Thanks a lot, this answers my question.
In my case, I do not expect the kernel to apply the overlay, so I believe I avoid 99% of the complexity mentionned in that thread.
Would the following patch (in reply) be acceptable ?
Especially:
- Is it fine to add such config option without selecting it anywhere ?
- DTC_FLAGS_overlay* and DTC_FLAGS_testcases can contain -@, should I try to figure a way out to make them select this option ?
Regards,
Vincent Pelletier
of: Add OF_SYMBOLS
Allows telling dtc to emit the __symbols__ section in produced Device Tree Blobs, which in turn allows using overlay Device Tree Blobs which reference nodes from the base Device Tree using such symbols.
This does not presume of what will apply the overlay (bootloader, kernel, fdtoverlay...).
--- drivers/of/Kconfig | 8 ++++++++ scripts/Makefile.lib | 4 ++++ 2 files changed, 12 insertions(+)
drivers/of/Kconfig +8 -0
@@ -93,6 +93,14 @@ config OF_OVERLAY While this option is selected automatically when needed, you can enable it manually to improve device tree unit test coverage. +config OF_SYMBOLS + bool "Include symbols in generated Device Tree Blobs" + help + This option tells the Device Tree compiler to generate __symbols__ + sections in all produced Device Tree Blobs. + Useful for Device Tree overlays, be they applied by the kernel or by + a bootloader, at a slight increase in file size. + config OF_NUMA bool
scripts/Makefile.lib +4 -0
@@ -299,6 +299,10 @@ endif DTC_FLAGS += $(DTC_FLAGS_$(basetarget)) +ifeq ($(CONFIG_OF_SYMBOLS),y) +DTC_FLAGS += -@ +endif + # Generate an assembly file to wrap the output of the device tree compiler quiet_cmd_dt_S_dtb= DTB $@ cmd_dt_S_dtb= \
Signature · 1 line
2.30.0
Rob Herring
maintainerRe: of: Add OF_SYMBOLS
Quoted 6 lines · Vincent Pelletier
Allows telling dtc to emit the
__symbols__section in produced Device Tree Blobs, which in turn allows using overlay Device Tree Blobs which reference nodes from the base Device Tree using such symbols.
This does not presume of what will apply the overlay (bootloader, kernel, fdtoverlay...).
A global option is not something we're going to accept. It needs to be per dtb or soc family at least.
IIRC, you can just set DTC_FLAGS on the make command line if you want to enable symbols globally.
Also, note that Viresh is working on adding overlay support[1].
Rob
[1] https://lore.kernel.org/linux-devicetree/[email protected]/