SPI0 Overlay for Debian 3.8.13

I found a DTS file that was included as part of an example of the use of the ADAFruit Python library. I compiled it and placed in /lib/firmware:

$ ls /lib/firmware 3.8.13-bone62 ADA-SPI0-01-00A0.dtbo BB-SPI0-01-00A0.dtbo

I attempt to enable this overlay in uEnv.txt.

uname_r=3.8.13-bone62 optargs=quiet drm.debug=7 cape_enable=bone_capemgr.enable_partno=ADA-SPI0-01

I can see that it is passed to the kernel.

$ cat /proc/cmdline console=tty0 console=ttyO0,115200n8 quiet drm.debug=7 bone_capemgr.enable_partno=ADA-SPI0-01 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait

However the device nodes are not created and I do not see the overlay listed.

$ cat /sys/devices/bone_capemgr.*/slots 0: 54:PF--- 1: 55:PF--- 2: 56:PF--- 3: 57:PF--- 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI 7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-UART4 8: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-UART1

dmesg information:

[ 0.552308] bone-capemgr bone_capemgr.9: Baseboard: 'A335BNLT,00C0,0816BBBK0B26' [ 0.552332] bone-capemgr bone_capemgr.9: compatible-baseboard=ti,beaglebone-black [ 0.583227] bone-capemgr bone_capemgr.9: slot #0: No cape found [ 0.620334] bone-capemgr bone_capemgr.9: slot #1: No cape found [ 0.657443] bone-capemgr bone_capemgr.9: slot #2: No cape found [ 0.694551] bone-capemgr bone_capemgr.9: slot #3: No cape found [ 0.700772] bone-capemgr bone_capemgr.9: slot #4: specific override [ 0.700795] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 4 [ 0.700811] bone-capemgr bone_capemgr.9: slot #4: 'Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G' [ 0.700893] bone-capemgr bone_capemgr.9: slot #5: specific override [ 0.700911] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 5 [ 0.700925] bone-capemgr bone_capemgr.9: slot #5: 'Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI' [ 0.700994] bone-capemgr bone_capemgr.9: slot #6: specific override [ 0.701011] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 6 [ 0.701025] bone-capemgr bone_capemgr.9: slot #6: 'Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN' [ 0.701356] bone-capemgr bone_capemgr.9: loader: before slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) [ 0.701371] bone-capemgr bone_capemgr.9: loader: check slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) [ 0.701446] bone-capemgr bone_capemgr.9: loader: before slot-5 BB-BONELT-HDMI:00A0 (prio 1) [ 0.701459] bone-capemgr bone_capemgr.9: loader: check slot-5 BB-BONELT-HDMI:00A0 (prio 1) [ 0.701494] bone-capemgr bone_capemgr.9: initialized OK. [ 0.701950] bone-capemgr bone_capemgr.9: loader: after slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) [ 0.701974] bone-capemgr bone_capemgr.9: slot #4: Requesting firmware 'cape-bone-2g-emmc1.dtbo' for board-name 'Bone-LT-eMMC-2G', version '00A0' [ 0.701999] bone-capemgr bone_capemgr.9: slot #4: dtbo 'cape-bone-2g-emmc1.dtbo' loaded; converting to live tree [ 0.702186] bone-capemgr bone_capemgr.9: slot #4: #2 overlays [ 0.702778] bone-capemgr bone_capemgr.9: slot #4: Applied #2 overlays. [ 0.702796] bone-capemgr bone_capemgr.9: loader: done slot-4 BB-BONE-EMMC-2G:00A0 (prio 1) [ 0.704413] bone-capemgr bone_capemgr.9: loader: after slot-5 BB-BONELT-HDMI:00A0 (prio 1) [ 0.704439] bone-capemgr bone_capemgr.9: slot #5: Requesting firmware 'cape-boneblack-hdmi-00A0.dtbo' for board-name 'Bone-Black-HDMI', version '00A0' [ 0.704468] bone-capemgr bone_capemgr.9: slot #5: dtbo 'cape-boneblack-hdmi-00A0.dtbo' loaded; converting to live tree [ 0.705075] bone-capemgr bone_capemgr.9: slot #5: #4 overlays [ 0.709778] bone-capemgr bone_capemgr.9: slot #5: Applied #4 overlays. [ 0.709795] bone-capemgr bone_capemgr.9: loader: done slot-5 BB-BONELT-HDMI:00A0 (prio 1) [ 0.709908] bone-capemgr bone_capemgr.9: loader: before slot-6 BB-BONELT-HDMIN:00A0 (prio 2) [ 0.709923] bone-capemgr bone_capemgr.9: loader: check slot-6 BB-BONELT-HDMIN:00A0 (prio 2) [ 0.709939] bone-capemgr bone_capemgr.9: loader: after slot-6 BB-BONELT-HDMIN:00A0 (prio 2) [ 0.709963] bone-capemgr bone_capemgr.9: slot #6: Requesting firmware 'cape-boneblack-hdmin-00A0.dtbo' for board-name 'Bone-Black-HDMIN', version '00A0' [ 0.709990] bone-capemgr bone_capemgr.9: slot #6: dtbo 'cape-boneblack-hdmin-00A0.dtbo' loaded; converting to live tree [ 0.710292] bone-capemgr bone_capemgr.9: slot #6: BB-BONELT-HDMIN conflict P8.45 (#5:BB-BONELT-HDMI) [ 0.719882] bone-capemgr bone_capemgr.9: slot #6: Failed verification [ 0.726634] bone-capemgr bone_capemgr.9: loader: failed to load slot-6 BB-BONELT-HDMIN:00A0 (prio 2) [ 16.416103] bone-capemgr bone_capemgr.9: part_number 'BB-UART4', version 'N/A' [ 16.416179] bone-capemgr bone_capemgr.9: slot #7: generic override [ 16.416196] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 7 [ 16.416213] bone-capemgr bone_capemgr.9: slot #7: 'Override Board Name,00A0,Override Manuf,BB-UART4' [ 16.416298] bone-capemgr bone_capemgr.9: slot #7: Requesting part number/version based 'BB-UART4-00A0.dtbo [ 16.416315] bone-capemgr bone_capemgr.9: slot #7: Requesting firmware 'BB-UART4-00A0.dtbo' for board-name 'Override Board Name', version '00A0' [ 16.416345] bone-capemgr bone_capemgr.9: slot #7: dtbo 'BB-UART4-00A0.dtbo' loaded; converting to live tree [ 16.416641] bone-capemgr bone_capemgr.9: slot #7: #2 overlays [ 16.428466] bone-capemgr bone_capemgr.9: part_number 'BB-UART1', version 'N/A' [ 16.428540] bone-capemgr bone_capemgr.9: slot #8: generic override [ 16.428558] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 8 [ 16.428574] bone-capemgr bone_capemgr.9: slot #8: 'Override Board Name,00A0,Override Manuf,BB-UART1' [ 16.431366] bone-capemgr bone_capemgr.9: slot #7: Applied #2 overlays. [ 16.435302] bone-capemgr bone_capemgr.9: slot #8: Requesting part number/version based 'BB-UART1-00A0.dtbo [ 16.435331] bone-capemgr bone_capemgr.9: slot #8: Requesting firmware 'BB-UART1-00A0.dtbo' for board-name 'Override Board Name', version '00A0' [ 16.435362] bone-capemgr bone_capemgr.9: slot #8: dtbo 'BB-UART1-00A0.dtbo' loaded; converting to live tree [ 16.435689] bone-capemgr bone_capemgr.9: slot #8: #2 overlays [ 16.447759] bone-capemgr bone_capemgr.9: slot #8: Applied #2 overlays.

Also I don’t understand where the cape manager is finding these .dtbo files. I’ve searched the filesystem and the only files with this extension are the two I’ve created and placed in /lib/firmware.

I mounted the eMMC card (/dev/mmcblk1) partitions and the root filesystem there has many .dtbo under lib/firmware but none of them are the ones lists from dmesg. They look to be the overlays to support the ADAFruit Python library. I’m not sure if those shipped with the Beaglebone distribution or were added by my predecessors.

For posterity (or extry posterity since this is for 3.8.13):

bone_capemgr should have been capemgr. A working uEnv.txt:

`
uname_r=3.8.13-bone62

optargs=quiet drm.debug=7

cape_enable=capemgr.enable_partno=BB-SPIDEV0

cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN

`

Next use compatible device tree source.

Clone git@github.com:beagleboard/linux.git and checkout tag 3.8.13-bone62.

`
$ find . -name “*.dts” | grep SPI
./firmware/capes/BB-SPIDEV0-00A0.dts
./firmware/capes/BB-SPIDEV1-00A0.dts
./firmware/capes/BB-SPIDEV1A1-00A0.dts

`

Compile:

`
$ dtc -W no-unit_address_vs_reg -O dtb -o BB-SPIDEV0-00A0.dtbo -b 0 -@ BB-SPIDEV0-00A0.dts
$ dtc --version
Version: DTC 1.4.5

`

Place the .dtbo in /lib/firmware. Reboot. The SPI loopback test works:

`
./spidev_test -D /dev/spidev1.1
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

`