BBB Ubuntu 3.8.13-bone28 cross compiled from Robert Nelson’s source
I have been trying to use P9-25 as a GPIO output (gpio3_21), but couldn’t change it’s mode. I tried to do this with an overlay file and got the error message (in dmesg)
[177534.038798] bone-capemgr bone_capemgr.9: slot #10: generic override
[177534.038816] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 10
[177534.038834] bone-capemgr bone_capemgr.9: slot #10: ‘Override Board Name,00A0,Override Manuf,cape-bone-pru’
[177534.040746] bone-capemgr bone_capemgr.9: slot #10: Requesting part number/version based 'cape-bone-pru-00A0.dtbo
[177534.040775] bone-capemgr bone_capemgr.9: slot #10: Requesting firmware ‘cape-bone-pru-00A0.dtbo’ for board-name ‘Override Board Name’, version ‘00A0’
[177534.041685] bone-capemgr bone_capemgr.9: slot #10: dtbo ‘cape-bone-pru-00A0.dtbo’ loaded; converting to live tree
[177534.041964] bone-capemgr bone_capemgr.9: slot #10: cape-bone-pru conflict P9.25 (#5:BB-BONELT-HDMI)
[177534.051650] bone-capemgr bone_capemgr.9: slot #10: Failed verification
But from the BBB technical reference P9.25 is not one of the HDMI reserved pins. My guess (after lots of looking around etc.) is the HDMI is loaded by the following lines in
am335x-boneblack.dts (after uncompiling from *.dtb) in /boot/dtbs:
slot@101 {
ti,cape-override;
priority = <0x1>;
compatible = “ti,beaglebone-black”;
board-name = “Bone-Black-HDMI”;
version = “00A0”;
manufacturer = “Texas Instruments”;
part-number = “BB-BONELT-HDMI”;
};
My guess? is this loads an appropriate *.dtbo /lib/firmware that has a line:
part-number = “BB-BONELT-HDMI”;
in the header section of it’s */dts file; could someone confirm my understanding here?
Going to /lib/firmware I ran >grep -i BB-BONELT-HDMI *
and found the canditates:
Binary file cape-boneblack-hdmi-00A0.dtbo matches
Binary file cape-boneblack-hdmin-00A0.dtbo matches
In the file cape-boneblack-hdmi-00A0.dts (after un-compiling) are the lines:
exclusive-use = “P9.25”, “P9.28”, “P9.29”, “P9.31”, “P8.45”, “P8.46”, “P8.43”, “P8.44”, “P8.41”, “P8.42”, “P8.39”, “P8.40”, “P8.37”, “P8.38”, “P8.36”, “P8.34”, “P8.35”, “P8.33”, “P8.31”, “P8.32”, “P8.27”, “P8.29”, “P8.28”, “P8.30”, “gpio1_27”, “mcasp0”, “lcd”;
fragment@0 {
target = <0xdeadbeef>;
overlay {
nxp_hdmi_bonelt_pins {
pinctrl-single,pins = <0x1b0 0x3 0xa0 0x8 0xa4 0x8 0xa8 0x8 0xac 0x8 0xb0 0x8 0xb4 0x8 0xb8 0x8 0xbc 0x8 0xc0 0x8 0xc4 0x8 0xc8 0x8 0xcc 0x8 0xd0 0x8 0xd4 0x8 0xd8 0x8 0xdc 0x8 0xe0 0x0 0xe4 0x0 0xe8 0x0 0xec 0x0>;
linux,phandle = <0x1>;
phandle = <0x1>;
};
It appears to me that the pinctrl-single,pins do correspond to Table 13 in section 7.10.1 of the BeagleBone Black System Reference Manual, but there appears to be too many
values for exclusive-use, and that these values do not correspond to the pinctrl-single,pins values. In particular there should not be any header pins from P9, and I also do understand why
“gpio1_27”, “mcasp0”, “lcd” are included. Indeed, gpio1_27 is not even a possibility for the headers. (I’m also wondering why pinctrl-single,pins appear to be a random order?).
After backing up cape-boneblack-hdmi-00A0.dts, I edited it take out “P9.25”, “P9.28”, “P9.29”, “P9.31” from exclusive-use, and then re-compiled using:
sudo sh -c “dtc -@ -O dtb -o cape-boneblack-hdmi-00A0.dtbo cape-boneblack-hdmi-00A0.dts”
After re-booting (and waiting 5 minutes before I could ssh in - I sure wish I could fix this and/or get the usb-ether working), I then loaded the overlay again, but I still had the conflict
/lib/firmware> dmesg | tail -2
[ 196.851263] bone-capemgr bone_capemgr.9: slot #7: cape-bone-pru conflict P9.25 (#5:BB-BONELT-HDMI)
[ 196.860761] bone-capemgr bone_capemgr.9: slot #7: Failed verification
/lib/firmware>
It looks like my guess on where the exclusive-use is loaded from is incorrect. Any suggestions on what to try next? Is it necessary to recompile the kernel to change the exclusive-use
pins determined at boot? If so, any links to help with this? Thanks.
Bit_Pusher