I'm seeing some strange persistent/erroneous behavior with a device tree overlay that I wanted to ask about.
Specifically, I'm seeing startup errors in 'dmesg' which reference symbols in a device tree overlay (.dtbo) that no longer exist.
[ 11.591461] pinctrl-single 44e10800.pinmux: bad data for mux MYOVERLAY_pru
[ 11.671379] pinctrl-single 44e10800.pinmux: no pins entries for MYOVERLAY_pru
I'm using image:
bone-debian-8.4-console-armhf-2016-04-07-2gb.img.xz
(With some packages removed)
I'm using kernel:
4.4.9-bone-rt-r10
The errors originated from an old *.dtc file that did indeed contain errors (no pins defined for a mux called MYOVERLAY_pru). So, I simplified it, created a 'good' version of the *dtc, which compiles and loads properly. The new overlay doesn't contain ANY references to MYOVERLAY_pru, and yet, I'm still seeing errors referencing it on reboot (when the part is enabled in /boot/uEnv.txt), when I type 'dmesg'
Also, if it is helpful, I've found that the directory below seems to appear with the error messages.
/sys/firmware/devicetree/base/ocp/l4_wkup@44c00000/scm@210000/pinmux@800/MYOVERLAY_pru
I've tried disabling the part in /boot/uEnv.txt, and rebooting.
I've tried doing a full halt, then disconnecting power for several minutes, then rebooting.
I can make the errors go away if I disable the part in /boot/uEnv.txt, but, I actually want the (correct) overlay to load (with no errors) upon startup.
Does anyone have any idea what is going on here? How can a symbol from a device tree overlay persist beyond its own deletion/de-install? Is something being saved, but then not cleared from persistent memory?
Thanks for any insights you might have,
ST
PS. I've attached the two *dtc files in question below
----------------------------------- BELOW IS THE ORIG DTC WHICH CAUSED THE ERROR
/dts-v1/;
/ {
compatible = "ti,beaglebone-black";
part-number = "MY_OVERLAY";
version = "00A0";
exclusive-use = "P8.12", "pruss", "pru0";
fragment@0 {
target = <0xdeadbeef>;
__overlay__ {
MY_OVERLAY_gpio {
pinctrl-single,pins = <0x30 0x7>;
linux,phandle = <0x2>;
phandle = <0x2>;
};
MY_OVERLAY_pru {
pinctrl-single,pins; // <----- NOTE, THE LACK OF PIN DEFS HERE CAUSES THE ERROR MESSAGE(I think)
linux,phandle = <0x1>;
phandle = <0x1>;
};
};
};
fragment@1 {
target = <0xdeadbeef>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x1>;
};
};
fragment@2 {
target = <0xdeadbeef>;
__overlay__ {
gpio_helper {
compatible = "gpio-of-helper";
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x2>;
};
};
};
__symbols__ {
my_overlay_gpio = "/fragment@0/__overlay__/MY_OVERLAY_gpio";
my_overlay_pru = "/fragment@0/__overlay__/MY_OVERLAY_pru";
};
__local_fixups__ {
fragment@1 {
__overlay__ {
pinctrl-0 = <0x0>;
};
};
fragment@2 {
__overlay__ {
gpio_helper {
pinctrl-0 = <0x0>;
};
};
};
};
__fixups__ {
am33xx_pinmux = "/fragment@0:target:0";
pruss = "/fragment@1:target:0";
ocp = "/fragment@2:target:0";
};
};
----------------------------------- BELOW IS THE FIXED DTC
/dts-v1/;
/ {
compatible = "ti,beaglebone-black";
part-number = "MY_OVERLAY";
version = "00A0";
exclusive-use = "P8.12";
fragment@0 {
target = <0xdeadbeef>;
__overlay__ {
MY_OVERLAY_gpio {
pinctrl-single,pins = <0x30 0x7>;
linux,phandle = <0x1>;
phandle = <0x1>;
};
};
};
fragment@1 {
target = <0xdeadbeef>;
__overlay__ {
gpio_helper {
compatible = "gpio-of-helper";
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x1>;
};
};
};
__symbols__ {
my_overlay_gpio = "/fragment@0/__overlay__/MY_OVERLAY_gpio";
};
__local_fixups__ {
fragment@1 {
__overlay__ {
gpio_helper {
pinctrl-0 = <0x0>;
};
};
};
};
__fixups__ {
am33xx_pinmux = "/fragment@0:target:0";
ocp = "/fragment@1:target:0";
};
};