infineon,slb9670 on beaglebone black

Hi All

I have to following problem. I’m trying to setup a custom cape with and SPI TPM based on SLB9670VQ2.0 chip.

What I’ve done so far is:
1 - building and deploying a custom kernel with SPI TPM 2.0 support enabled.
2 - Writing a dtbo to configure the right pins in their right modes for the TPM and to instruct the u-boot to load the specific kernel objects.

After many problems and a lot of research, I managed to to build the DTBO activate it by including uboot_overlay_addr5=/lib/firmware/TPM-SLB9670-00A0.dtbo in the /boot/uEnv.txt and making sure the DTBO is loaded and does it’s thing.

Now, the DTBO IS loading and causes the respective modules to be loaded:

ivan@beaglebone:~$ lsmod
Module Size Used by
8021q 32768 0
garp 16384 1 8021q
stp 16384 1 garp
mrp 20480 1 8021q
llc 16384 2 garp,stp
usb_f_acm 16384 2
u_serial 20480 3 usb_f_acm
usb_f_ecm 20480 2
usb_f_rndis 32768 4
u_ether 20480 2 usb_f_ecm,usb_f_rndis
libcomposite 61440 16 usb_f_ecm,usb_f_acm,usb_f_rndis
iptable_nat 16384 0
nf_nat_ipv4 16384 1 iptable_nat
nf_nat 36864 1 nf_nat_ipv4
nf_conntrack 155648 2 nf_nat_ipv4,nf_nat
nf_defrag_ipv6 20480 1 nf_conntrack
nf_defrag_ipv4 16384 1 nf_conntrack
iptable_mangle 16384 0
iptable_filter 16384 0
tpm_tis_spi 16384 0
tpm_tis_core 24576 1 tpm_tis_spi
tpm 57344 2 tpm_tis_spi,tpm_tis_core
uio_pdrv_genirq 16384 0
uio 20480 1 uio_pdrv_genirq
ip_tables 24576 3 iptable_mangle,iptable_filter,iptable_nat
x_tables 32768 3 iptable_mangle,ip_tables,iptable_filter

While researching, I was led to believe that the modules would create the “all-important” device file in the /dev directory, i.e. /dev/tpm0
But that doesn’t happen?!
I tried modifying the dts file for my dtbo in every way I could imagine. It doesn’t work.

This is the complete dts file for my TPM dtbo:

/*

  • Device Tree overlay for Infineon SLx 9670
    */

#include <dt-bindings/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/am33xx.h>
#include <dt-bindings/gpio/gpio.h>

/dts-v1/;
/plugin/;

/ {
compatible = “ti,beaglebone”, “ti,beaglebone-black”;

/* Identification */
part-number = “TPM-SLB9670”;
version = “00A0”;

exclusive-use = “P9.21”, // Used as SPI0 MISO and is the Default +/
“P9.18”, // Used as SPI0 MOSI and is the Default +/
“P9.22”, // Used as SPI0 SCKL and is the Default +/
“P9.17”, // Used as SPI0 CS0 +/

“P9.15”, // GPIO1_16 aka GPIO_48 used as input to handle the IRQ from the TPM.
“P9.13”, // GPIO0_31 aka GPIO_31 used as output to drive the reset pin of the TPM

“spi0”,
“i2c0”,
“i2c2”;

fragment@0 // Releasing the spi0 pins from their current assignments. (Tried without this fragment no difference)
{
target = <&ocp>;

overlay
{
// P9_21_pinmux { status = “disabled”; };
// P9_18_pinmux { status = “disabled”; };
// P9_22_pinmux { status = “disabled”; };
// P9_17_pinmux { status = “disabled”; };

P9_15_pinmux { status = “disabled”; };
P9_13_pinmux { status = “disabled”; };
};
};

fragment@1 // Disabling both i2c interfaces since there are some pin conflicts, in the off chance they moght interfere (Tried without those two fragments - No difference)
{
target = <&i2c0>;

overlay
{
status = “disabled”;
};
};

fragment@2
{
target = <&i2c2>;

overlay
{
status = “disabled”;
};
};

fragment@3
{
target = <&am33xx_pinmux>;

overlay
{
pb_spi0_pins: pinmux_pb_spi0_pins // I checked if a got the right pins several times, tried with or without pullups no difference
{ // My only doubt is did I get the inputs anoutputs right?
pinctrl-single,pins = < BONE_P9_21 (PIN_INPUT_PULLUP | MUX_MODE0) // Used as SPI0 MISO +/
BONE_P9_18 (PIN_OUTPUT_PULLUP | MUX_MODE0) // Used as SPI0 MOSI +/
BONE_P9_22 (PIN_OUTPUT_PULLUP | MUX_MODE0) // Used as SPI0 SCKL +/
BONE_P9_17 (PIN_OUTPUT | MUX_MODE0)>; // Used as SPI0 CS0 (This pin has a physical pullup resistor) +/

// BONE_P9_15 (PIN_INPUT_PULLUP | MUX_MODE7) // Used as GPIO_48 for IRQ to TPM
// BONE_P9_13 (PIN_OUTPUT_PULLUP | MUX_MODE7)>; // Used as GPIO_31 for RST to TPM
};
};
};

fragment@4 // Every example I looked at has the spi configuring fragmet as separate form the actual TPM config fragmet even though they can be one…
{ // Here I assign the actual pins to the SPI interface and disable both channels since I want the TPM to be the active device rther than having spidev in /dev
target = <&spi0>;

overlay
{
pinctrl-names = “default”;
pinctrl-0 = <&pb_spi0_pins>;
status = “okay”;

#address-cells = <1>;
#size-cells = <0>;

channel@0
{
compatible = “spidev”;
reg = <0x0>;
status = “disabled”;

spi-max-frequency = <32000000>;
};

channel@1
{
compatible = “spidev”;
reg = <0x1>;
status = “disabled”;

spi-max-frequency = <32000000>;
};
};
};

fragment@5 // The main fragment. Configuring the TPM. I did it as per the example given by those who wrote the SPI kernel modules.
{ // That’s how I managed to get the dtbo to load the actual modules. All my previous versions of this fragment failed to do that.
target = <&spi0>; // I did try wtihout the gpio interupt stuf but it didn’t work either.

overlay
{
#address-cells = <1>;
#size-cells = <0>;

tpm_tis@0
{
compatible = “tcg,tpm_tis-spi”; // tcg,tpm_spi_tis,infineon,slb9670
status = “okay”;

#gpio-cells = <2>;
#interrupt-cells = <2>;

reg = <0x0>;
spi-max-frequency = <32000000>;
num-cs = <1>;
interrupt-parent = <&gpio1>;
interrupts = < 16 2>;
gpios = <&gpio1 16 GPIO_ACTIVE_LOW>, <&gpio0 31 GPIO_ACTIVE_LOW>;
};
};
};
};

dmesg gives no relevant information.

Thanks in advance and sorsy for long post :slight_smile:

Hi All

I have to following problem. I’m trying to setup a custom cape with and SPI TPM based on SLB9670VQ2.0 chip.

What I’ve done so far is:
1 - building and deploying a custom kernel with SPI TPM 2.0 support enabled.
2 - Writing a dtbo to configure the right pins in their right modes for the TPM and to instruct the u-boot to load the specific kernel objects.

After many problems and a lot of research, I managed to to build the DTBO activate it by including uboot_overlay_addr5=/lib/firmware/TPM-SLB9670-00A0.dtbo in the /boot/uEnv.txt and making sure the DTBO is loaded and does it’s thing.

Now, the DTBO IS loading and causes the respective modules to be loaded:

ivan@beaglebone:~$ lsmod
Module Size Used by
8021q 32768 0
garp 16384 1 8021q
stp 16384 1 garp
mrp 20480 1 8021q
llc 16384 2 garp,stp
usb_f_acm 16384 2
u_serial 20480 3 usb_f_acm
usb_f_ecm 20480 2
usb_f_rndis 32768 4
u_ether 20480 2 usb_f_ecm,usb_f_rndis
libcomposite 61440 16 usb_f_ecm,usb_f_acm,usb_f_rndis
iptable_nat 16384 0
nf_nat_ipv4 16384 1 iptable_nat
nf_nat 36864 1 nf_nat_ipv4
nf_conntrack 155648 2 nf_nat_ipv4,nf_nat
nf_defrag_ipv6 20480 1 nf_conntrack
nf_defrag_ipv4 16384 1 nf_conntrack
iptable_mangle 16384 0
iptable_filter 16384 0
tpm_tis_spi 16384 0
tpm_tis_core 24576 1 tpm_tis_spi
tpm 57344 2 tpm_tis_spi,tpm_tis_core
uio_pdrv_genirq 16384 0
uio 20480 1 uio_pdrv_genirq
ip_tables 24576 3 iptable_mangle,iptable_filter,iptable_nat
x_tables 32768 3 iptable_mangle,ip_tables,iptable_filter

While researching, I was led to believe that the modules would create the “all-important” device file in the /dev directory, i.e. /dev/tpm0
But that doesn’t happen?!

Can you also provide the dmesg log output? Since the module is loaded, I’d be inclined to think it would create whatever interfaces it would provide…if the probe was successful.

I tried modifying the dts file for my dtbo in every way I could imagine. It doesn’t work.

This is the complete dts file for my TPM dtbo:

/*

  • Device Tree overlay for Infineon SLx 9670
    */

#include <dt-bindings/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/am33xx.h>
#include <dt-bindings/gpio/gpio.h>

/dts-v1/;
/plugin/;

/ {
compatible = “ti,beaglebone”, “ti,beaglebone-black”;

/* Identification */
part-number = “TPM-SLB9670”;
version = “00A0”;

exclusive-use = “P9.21”, // Used as SPI0 MISO and is the Default +/
“P9.18”, // Used as SPI0 MOSI and is the Default +/
“P9.22”, // Used as SPI0 SCKL and is the Default +/
“P9.17”, // Used as SPI0 CS0 +/

“P9.15”, // GPIO1_16 aka GPIO_48 used as input to handle the IRQ from the TPM.
“P9.13”, // GPIO0_31 aka GPIO_31 used as output to drive the reset pin of the TPM

“spi0”,
“i2c0”,
“i2c2”;

fragment@0 // Releasing the spi0 pins from their current assignments. (Tried without this fragment no difference)
{
target = <&ocp>;

overlay
{
// P9_21_pinmux { status = “disabled”; };
// P9_18_pinmux { status = “disabled”; };
// P9_22_pinmux { status = “disabled”; };
// P9_17_pinmux { status = “disabled”; };

Odd. I’d think you’d need to disable the pinmuxes if you want the default to be SPI mode.

Check with ‘sudo /opt/scripts/device/bone/show-pins.pl’. I really need to create a flag that removes the color printing on that utility and put it in the standard path. Anyway, strip the color info and provide the output for all the relevant pins.

P9_15_pinmux { status = “disabled”; };
P9_13_pinmux { status = “disabled”; };
};
};

fragment@1 // Disabling both i2c interfaces since there are some pin conflicts, in the off chance they moght interfere (Tried without those two fragments - No difference)
{
target = <&i2c0>;

overlay
{
status = “disabled”;

Isn’t this the on-board i2c? Disabling that would be bad.

};
};

fragment@2
{
target = <&i2c2>;

overlay
{
status = “disabled”;
};
};

fragment@3
{
target = <&am33xx_pinmux>;

overlay
{
pb_spi0_pins: pinmux_pb_spi0_pins // I checked if a got the right pins several times, tried with or without pullups no difference
{ // My only doubt is did I get the inputs anoutputs right?
pinctrl-single,pins = < BONE_P9_21 (PIN_INPUT_PULLUP | MUX_MODE0) // Used as SPI0 MISO +/
BONE_P9_18 (PIN_OUTPUT_PULLUP | MUX_MODE0) // Used as SPI0 MOSI +/
BONE_P9_22 (PIN_OUTPUT_PULLUP | MUX_MODE0) // Used as SPI0 SCKL +/
BONE_P9_17 (PIN_OUTPUT | MUX_MODE0)>; // Used as SPI0 CS0 (This pin has a physical pullup resistor) +/

// BONE_P9_15 (PIN_INPUT_PULLUP | MUX_MODE7) // Used as GPIO_48 for IRQ to TPM
// BONE_P9_13 (PIN_OUTPUT_PULLUP | MUX_MODE7)>; // Used as GPIO_31 for RST to TPM

};
};
};

fragment@4 // Every example I looked at has the spi configuring fragmet as separate form the actual TPM config fragmet even though they can be one…
{ // Here I assign the actual pins to the SPI interface and disable both channels since I want the TPM to be the active device rther than having spidev in /dev

Just remember that there are 2 drivers, one for the SPI controller and one for the TPM.

target = <&spi0>;

overlay
{
pinctrl-names = “default”;
pinctrl-0 = <&pb_spi0_pins>;
status = “okay”;

#address-cells = <1>;
#size-cells = <0>;

channel@0
{
compatible = “spidev”;
reg = <0x0>;
status = “disabled”;

spi-max-frequency = <32000000>;
};

channel@1
{
compatible = “spidev”;
reg = <0x1>;
status = “disabled”;

spi-max-frequency = <32000000>;
};

disabling the spidev drivers shouldn’t need any of the other arguments. Also, I think you’d want to be targeting the spidev symbols to overwrite those values. Can you confirm the spidev drivers aren’t being loaded?

};
};

fragment@5 // The main fragment. Configuring the TPM. I did it as per the example given by those who wrote the SPI kernel modules.
{ // That’s how I managed to get the dtbo to load the actual modules. All my previous versions of this fragment failed to do that.
target = <&spi0>; // I did try wtihout the gpio interupt stuf but it didn’t work either.

overlay
{
#address-cells = <1>;
#size-cells = <0>;

tpm_tis@0
{
compatible = “tcg,tpm_tis-spi”; // tcg,tpm_spi_tis,infineon,slb9670
status = “okay”;

#gpio-cells = <2>;
#interrupt-cells = <2>;

why?

reg = <0x0>;
spi-max-frequency = <32000000>;
num-cs = <1>;

Is this needed?

interrupt-parent = <&gpio1>;
interrupts = < 16 2>;

I don’t see this in the bindings: https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/security/tpm/tpm_tis_spi.txt

gpios = <&gpio1 16 GPIO_ACTIVE_LOW>, <&gpio0 31 GPIO_ACTIVE_LOW>;

I don’t see this in the bindings either. Where are you pulling the instructions from?

};
};
};
};

dmesg gives no relevant information.

are you sure?

Hi Jason :slight_smile:

Thanks for your reply!

Let me answer your questions:
“Can you also provide the dmesg log output? Since the module is loaded, I’d be inclined to think it would create whatever interfaces it would provide…if the probe was successful.”

The dmesg log did not include any mentioning of “spi”, “spidev” or “tpm”. I included some debug messages in the linux kernel. Specifically the modules in question and rebuilt the kernel. Now when the modules are loaded they print those messages in the dmesg log. I’m not sure if it will be appropriate to dumo the entire dmesg log … but here it is:

**** DMESG LOG *****
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.19.73+ (ivan@tinkerboard) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #3 SMP PREEMPT Thu Nov 7 11:33:44 UTC 2019
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: TI AM335x BeagleBone Black
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 48 MiB at 0x9c800000
[ 0.000000] On node 0 totalpages: 130560
[ 0.000000] Normal zone: 1148 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 130560 pages, LIFO batch:31
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] AM335X ES2.1 (sgx neon)
[ 0.000000] random: get_random_bytes called from start_kernel+0xa0/0x510 with crng_init=0
[ 0.000000] percpu: Embedded 18 pages/cpu s43724 r8192 d21812 u73728
[ 0.000000] pcpu-alloc: s43724 r8192 d21812 u73728 alloc=18*4096
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129412
[ 0.000000] Kernel command line: console=ttyO0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 rng_core.default_quality=100 quiet
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.000000] Memory: 437628K/522240K available (13312K kernel code, 1152K rwdata, 4420K rodata, 1024K init, 355K bss, 35460K reserved, 49152K cma-reserved, 0K highmem)
[ 0.000000] Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0xe0000000 - 0xff800000 ( 504 MB)
lowmem : 0xc0000000 - 0xdfe00000 ( 510 MB)
pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
.text : 0x(ptrval) - 0x(ptrval) (14304 kB)
.init : 0x(ptrval) - 0x(ptrval) (1024 kB)
.data : 0x(ptrval) - 0x(ptrval) (1153 kB)
.bss : 0x(ptrval) - 0x(ptrval) ( 356 kB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] ftrace: allocating 42332 entries in 125 pages
[ 0.000000] rcu: Preemptible hierarchical RCU implementation.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
[ 0.000000] Tasks RCU enabled.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts
[ 0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[ 0.000017] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.000036] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000046] OMAP clocksource: timer1 at 24000000 Hz
[ 0.000743] timer_probe: no matching timers found
[ 0.000987] Console: colour dummy device 80x30
[ 0.001015] WARNING: Your ‘console=ttyO0’ has been replaced by ‘ttyS0’
[ 0.001020] This ensures that you still see kernel messages. Please
[ 0.001024] update your kernel commandline.
[ 0.001083] Calibrating delay loop… 995.32 BogoMIPS (lpj=1990656)
[ 0.046902] pid_max: default: 32768 minimum: 301
[ 0.047197] Security Framework initialized
[ 0.047211] Yama: becoming mindful.
[ 0.047357] AppArmor: AppArmor initialized
[ 0.047469] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.047482] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.048580] CPU: Testing write buffer coherency: ok
[ 0.048646] CPU0: Spectre v2: using BPIALL workaround
[ 0.049138] CPU0: thread -1, cpu 0, socket -1, mpidr 0
[ 0.071012] Setting up static identity map for 0x80100000 - 0x80100060
[ 0.078924] rcu: Hierarchical SRCU implementation.
[ 0.090154] EFI services will not be available.
[ 0.094931] smp: Bringing up secondary CPUs …
[ 0.094946] smp: Brought up 1 node, 1 CPU
[ 0.094958] SMP: Total of 1 processors activated (995.32 BogoMIPS).
[ 0.094964] CPU: All CPU(s) started in SVC mode.
[ 0.096698] devtmpfs: initialized
[ 0.111359] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[ 0.112019] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.112044] futex hash table entries: 256 (order: 2, 16384 bytes)
[ 0.116031] xor: measuring software checksum speed
[ 0.154906] arm4regs : 1212.000 MB/sec
[ 0.194894] 8regs : 1090.000 MB/sec
[ 0.234893] 32regs : 1087.000 MB/sec
[ 0.274894] neon : 1668.000 MB/sec
[ 0.274902] xor: using function: neon (1668.000 MB/sec)
[ 0.274919] pinctrl core: initialized pinctrl subsystem
[ 0.276322] NET: Registered protocol family 16
[ 0.282465] DMA: preallocated 1024 KiB pool for atomic coherent allocations
[ 0.315538] l4_wkup_cm:clk:0010:0: failed to disable
[ 0.355700] audit: initializing netlink subsys (disabled)
[ 0.357041] cpuidle: using governor menu
[ 0.363013] audit: type=2000 audit(0.352:1): state=initialized audit_enabled=0 res=1
[ 0.365229] OMAP GPIO hardware version 0.1
[ 0.377915] No ATAGs?
[ 0.377935] hw-breakpoint: debug architecture 0x4 unsupported.
[ 0.378464] omap4_sram_init:Unable to allocate sram needed to handle errata I688
[ 0.378474] omap4_sram_init:Unable to get sram pool needed to handle errata I688
[ 0.407078] raid6: using algorithm neonx8 gen() 0 MB/s
[ 0.407090] raid6: … xor() 0 MB/s, rmw enabled
[ 0.407098] raid6: using neon recovery algorithm
[ 0.414670] edma 49000000.edma: TI EDMA DMA engine driver
[ 0.418116] SCSI subsystem initialized
[ 0.419081] libata version 3.00 loaded.
[ 0.419401] usbcore: registered new interface driver usbfs
[ 0.419462] usbcore: registered new interface driver hub
[ 0.419595] usbcore: registered new device driver usb
[ 0.420272] media: Linux media interface: v0.10
[ 0.420322] videodev: Linux video capture interface: v2.00
[ 0.420454] pps_core: LinuxPPS API ver. 1 registered

Hi Jason :slight_smile:

Thanks for your reply!

Let me answer your questions:
"Can you also provide the dmesg log output? Since the module is loaded, I'd be inclined to think it would create whatever interfaces it would provide...if the probe was successful."

The dmesg log did not include any mentioning of "spi", "spidev" or "tpm". I included some debug messages in the linux kernel. Specifically the modules in question and rebuilt the kernel. Now when the modules are loaded they print those messages in the dmesg log. I'm not sure if it will be appropriate to dumo the entire dmesg log ... but here it is:

**** DMESG LOG *****
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.19.73+ (ivan@tinkerboard) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #3 SMP PREEMPT Thu Nov 7 11:33:44 UTC 2019
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: TI AM335x BeagleBone Black
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 48 MiB at 0x9c800000
[ 0.000000] On node 0 totalpages: 130560
[ 0.000000] Normal zone: 1148 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 130560 pages, LIFO batch:31
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] AM335X ES2.1 (sgx neon)
[ 0.000000] random: get_random_bytes called from start_kernel+0xa0/0x510 with crng_init=0
[ 0.000000] percpu: Embedded 18 pages/cpu s43724 r8192 d21812 u73728
[ 0.000000] pcpu-alloc: s43724 r8192 d21812 u73728 alloc=18*4096
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129412
[ 0.000000] Kernel command line: console=ttyO0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 rng_core.default_quality=100 quiet
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.000000] Memory: 437628K/522240K available (13312K kernel code, 1152K rwdata, 4420K rodata, 1024K init, 355K bss, 35460K reserved, 49152K cma-reserved, 0K highmem)
[ 0.000000] Virtual kernel memory layout:
                   vector : 0xffff0000 - 0xffff1000 ( 4 kB)
                   fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
                   vmalloc : 0xe0000000 - 0xff800000 ( 504 MB)
                   lowmem : 0xc0000000 - 0xdfe00000 ( 510 MB)
                   pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
                   modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
                     .text : 0x(ptrval) - 0x(ptrval) (14304 kB)
                     .init : 0x(ptrval) - 0x(ptrval) (1024 kB)
                     .data : 0x(ptrval) - 0x(ptrval) (1153 kB)
                      .bss : 0x(ptrval) - 0x(ptrval) ( 356 kB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] ftrace: allocating 42332 entries in 125 pages
[ 0.000000] rcu: Preemptible hierarchical RCU implementation.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
[ 0.000000] Tasks RCU enabled.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts
[ 0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[ 0.000017] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.000036] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000046] OMAP clocksource: timer1 at 24000000 Hz
[ 0.000743] timer_probe: no matching timers found
[ 0.000987] Console: colour dummy device 80x30
[ 0.001015] WARNING: Your 'console=ttyO0' has been replaced by 'ttyS0'
[ 0.001020] This ensures that you still see kernel messages. Please
[ 0.001024] update your kernel commandline.
[ 0.001083] Calibrating delay loop... 995.32 BogoMIPS (lpj=1990656)
[ 0.046902] pid_max: default: 32768 minimum: 301
[ 0.047197] Security Framework initialized
[ 0.047211] Yama: becoming mindful.
[ 0.047357] AppArmor: AppArmor initialized
[ 0.047469] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.047482] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.048580] CPU: Testing write buffer coherency: ok
[ 0.048646] CPU0: Spectre v2: using BPIALL workaround
[ 0.049138] CPU0: thread -1, cpu 0, socket -1, mpidr 0
[ 0.071012] Setting up static identity map for 0x80100000 - 0x80100060
[ 0.078924] rcu: Hierarchical SRCU implementation.
[ 0.090154] EFI services will not be available.
[ 0.094931] smp: Bringing up secondary CPUs ...
[ 0.094946] smp: Brought up 1 node, 1 CPU
[ 0.094958] SMP: Total of 1 processors activated (995.32 BogoMIPS).
[ 0.094964] CPU: All CPU(s) started in SVC mode.
[ 0.096698] devtmpfs: initialized
[ 0.111359] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[ 0.112019] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.112044] futex hash table entries: 256 (order: 2, 16384 bytes)
[ 0.116031] xor: measuring software checksum speed
[ 0.154906] arm4regs : 1212.000 MB/sec
[ 0.194894] 8regs : 1090.000 MB/sec
[ 0.234893] 32regs : 1087.000 MB/sec
[ 0.274894] neon : 1668.000 MB/sec
[ 0.274902] xor: using function: neon (1668.000 MB/sec)
[ 0.274919] pinctrl core: initialized pinctrl subsystem
[ 0.276322] NET: Registered protocol family 16
[ 0.282465] DMA: preallocated 1024 KiB pool for atomic coherent allocations
[ 0.315538] l4_wkup_cm:clk:0010:0: failed to disable
[ 0.355700] audit: initializing netlink subsys (disabled)
[ 0.357041] cpuidle: using governor menu
[ 0.363013] audit: type=2000 audit(0.352:1): state=initialized audit_enabled=0 res=1
[ 0.365229] OMAP GPIO hardware version 0.1
[ 0.377915] No ATAGs?
[ 0.377935] hw-breakpoint: debug architecture 0x4 unsupported.
[ 0.378464] omap4_sram_init:Unable to allocate sram needed to handle errata I688
[ 0.378474] omap4_sram_init:Unable to get sram pool needed to handle errata I688
[ 0.407078] raid6: using algorithm neonx8 gen() 0 MB/s
[ 0.407090] raid6: .... xor() 0 MB/s, rmw enabled
[ 0.407098] raid6: using neon recovery algorithm
[ 0.414670] edma 49000000.edma: TI EDMA DMA engine driver
[ 0.418116] SCSI subsystem initialized
[ 0.419081] libata version 3.00 loaded.
[ 0.419401] usbcore: registered new interface driver usbfs
[ 0.419462] usbcore: registered new interface driver hub
[ 0.419595] usbcore: registered new device driver usb
[ 0.420272] media: Linux media interface: v0.10
[ 0.420322] videodev: Linux video capture interface: v2.00
[ 0.420454] pps_core: LinuxPPS API ver. 1 registered
[ 0.420483] PTP clock support registered
[ 0.421078] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
[ 0.423293] Advanced Linux Sound Architecture Driver Initialized.
[ 0.424113] NetLabel: Initializing
[ 0.424126] NetLabel: domain hash size = 128
[ 0.424131] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
[ 0.424230] NetLabel: unlabeled traffic allowed by default
[ 0.425331] clocksource: Switched to clocksource timer1
[ 0.588124] VFS: Disk quotas dquot_6.6.0
[ 0.588237] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 0.589161] AppArmor: AppArmor Filesystem Enabled
[ 0.601771] NET: Registered protocol family 2
[ 0.602873] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes)
[ 0.602909] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.602951] TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
[ 0.603010] TCP: Hash tables configured (established 4096 bind 4096)
[ 0.603140] UDP hash table entries: 256 (order: 1, 8192 bytes)
[ 0.603164] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[ 0.603366] NET: Registered protocol family 1
[ 0.616601] RPC: Registered named UNIX socket transport module.
[ 0.616613] RPC: Registered udp transport module.
[ 0.616618] RPC: Registered tcp transport module.
[ 0.616623] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.617270] Unpacking initramfs...
[ 1.013375] random: fast init done
[ 1.048798] Freeing initrd memory: 7624K
[ 1.049861] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
[ 1.052495] Initialise system trusted keyrings
[ 1.052915] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[ 1.060670] zbud: loaded
[ 1.068280] NFS: Registering the id_resolver key type
[ 1.068325] Key type id_resolver registered
[ 1.068331] Key type id_legacy registered
[ 1.068348] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 1.068713] fuse init (API version 7.27)
[ 1.079438] Key type asymmetric registered
[ 1.079454] Asymmetric key parser 'x509' registered
[ 1.079549] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
[ 1.083914] io scheduler noop registered
[ 1.083927] io scheduler deadline registered
[ 1.084244] io scheduler cfq registered (default)
[ 1.084254] io scheduler mq-deadline registered
[ 1.086977] pinctrl-single 44e10800.pinmux: 142 pins, size 568
[ 1.088417] gpio-of-helper ocp:gpio_helper: ready
[ 1.089052] gpio-of-helper ocp:cape-universal: ready
[ 1.091812] wkup_m3_ipc 44e11324.wkup_m3_ipc: could not get rproc handle
[ 1.093653] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[ 1.097170] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 30, base_baud = 3000000) is a 8250
[ 1.114117] console [ttyS0] enabled
[ 1.116978] omap_rng 48310000.rng: Random Number Generator ver. 20
[ 1.121746] random: crng init done
[ 1.126641] omap2_mcspi 48030000.spi: chipselect 0 already in use
[ 1.132882] spi_master spi0: spi_device register error /ocp/spi@48030000/channel@0
[ 1.140531] spi_master spi0: Failed to create SPI device for /ocp/spi@48030000/channel@0

I'm confused why this is here. Was this in the device tree you are
using without being disabled? Seems like it is still here.

It should be possible to extract the running device tree using dtc,
but I'm not sure of the exact command. 'dtc -I fs -O dts -o
./extracted.dts /proc/device-tree' seg faults for me, which I find
really odd.

Anyway, it sure seems like something is up with a conflicting device
on spi 0 cs 0.

[ 1.141495] libphy: Fixed MDIO Bus: probed
[ 1.197371] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6, bus freq 1000000
[ 1.197388] davinci_mdio 4a101000.mdio: detected phy mask fffffffe
[ 1.197781] MDIO: davinci_mdio: dt: updated phy_id[0] from phy_mask[fffffffe]
[ 1.215408] libphy: 4a101000.mdio: probed
[ 1.215436] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720
[ 1.216548] cpsw 4a100000.ethernet: Detected MACID = 04:a3:16:e2:e6:83
[ 1.216684] cpsw 4a100000.ethernet: initialized cpsw ale version 1.4
[ 1.216694] cpsw 4a100000.ethernet: ALE Table size 1024
[ 1.216735] cpsw 4a100000.ethernet: cpts: overflow check period 1250 (jiffies)
[ 1.219775] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 1.219845] ehci-platform: EHCI generic platform driver
[ 1.220047] ehci-omap: OMAP-EHCI Host Controller driver
[ 1.220615] usbcore: registered new interface driver usb-storage
[ 1.223530] am335x-phy-driver 47401300.usb-phy: 47401300.usb-phy supply vcc not found, using dummy regulator
[ 1.223685] am335x-phy-driver 47401300.usb-phy: Linked as a consumer to regulator.0
[ 1.226861] am335x-phy-driver 47401b00.usb-phy: 47401b00.usb-phy supply vcc not found, using dummy regulator
[ 1.227052] am335x-phy-driver 47401b00.usb-phy: Linked as a consumer to regulator.0
[ 1.230548] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
[ 1.230590] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 1
[ 1.230904] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
[ 1.230914] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.230923] usb usb1: Product: MUSB HDRC host driver
[ 1.230930] usb usb1: Manufacturer: Linux 4.19.73+ musb-hcd
[ 1.230937] usb usb1: SerialNumber: musb-hdrc.1
[ 1.231793] hub 1-0:1.0: USB hub found
[ 1.231854] hub 1-0:1.0: 1 port detected
[ 1.243115] omap_rtc 44e3e000.rtc: already running
[ 1.243806] omap_rtc 44e3e000.rtc: registered as rtc0
[ 1.244932] i2c /dev entries driver
[ 1.245271] Driver for 1-wire Dallas network protocol.
[ 1.247604] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[ 1.248073] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0)
[ 1.249568] cpuidle: enable-method property 'ti,am3352' found operations
[ 1.250183] sdhci: Secure Digital Host Controller Interface driver
[ 1.250190] sdhci: Copyright(c) Pierre Ossman
[ 1.250690] omap_gpio 44e07000.gpio: Could not set line 6 debounce to 200000 microseconds (-22)
[ 1.250701] omap_hsmmc 48060000.mmc: Got CD GPIO
[ 1.251307] omap_hsmmc 48060000.mmc: Linked as a consumer to regulator.1
[ 1.278053] sdhci-pltfm: SDHCI platform and OF driver helper
[ 1.279787] ledtrig-cpu: registered to indicate activity on CPUs
[ 1.280294] omap-aes 53500000.aes: OMAP AES hw accel rev: 3.2
[ 1.280604] omap-aes 53500000.aes: will run requests pump with realtime priority
[ 1.283161] omap-sham 53100000.sham: hw accel on OMAP rev 4.3
[ 1.287243] hidraw: raw HID events driver (C) Jiri Kosina
[ 1.287956] usbcore: registered new interface driver usbhid
[ 1.287966] usbhid: USB HID core driver
[ 1.289066] remoteproc remoteproc0: wkup_m3 is available
[ 1.292492] gnss: GNSS driver registered with major 240
[ 1.295881] wireguard: WireGuard 0.0.20190913 loaded. See www.wireguard.com for information.
[ 1.295893] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[ 1.297003] NET: Registered protocol family 10
[ 1.313279] mmc0: host does not support reading read-only switch, assuming write-enable
[ 1.315487] mmc0: new high speed SDHC card at address 59b4
[ 1.326383] mmcblk0: mmc0:59b4 USDU1 14.9 GiB
[ 1.332949] mmcblk0: p1 p2
[ 1.374224] Segment Routing with IPv6
[ 1.374380] mip6: Mobile IPv6
[ 1.374401] NET: Registered protocol family 17
[ 1.374549] Key type dns_resolver registered
[ 1.374557] mpls_gso: MPLS GSO support
[ 1.374894] ThumbEE CPU extension supported.
[ 1.374911] Registering SWP/SWPB emulation handler
[ 1.374922] omap_voltage_late_init: Voltage driver support not added
[ 1.382033] PM: Cannot get wkup_m3_ipc handle
[ 1.387903] registered taskstats version 1
[ 1.387914] Loading compiled-in X.509 certificates
[ 1.388055] zswap: loaded using pool lzo/zbud
[ 1.391408] Btrfs loaded, crc32c=crc32c-generic
[ 1.391522] AppArmor: AppArmor sha1 policy hashing enabled
[ 1.410283] PM: Cannot get wkup_m3_ipc handle
[ 1.414888] remoteproc remoteproc0: powering up wkup_m3
[ 1.414909] remoteproc remoteproc0: Booting fw image am335x-pm-firmware.elf, size 217168
[ 1.415201] remoteproc remoteproc0: remote processor wkup_m3 is now up
[ 1.415223] wkup_m3_ipc 44e11324.wkup_m3_ipc: CM3 Firmware Version = 0x193
[ 1.417029] PM: bootloader does not support rtc-only!
[ 1.419348] omap_rtc 44e3e000.rtc: setting system clock to 2019-11-22 10:39:38 UTC (1574419178)
[ 1.420108] ALSA device list:
[ 1.420117] No soundcards found.
[ 1.427235] Freeing unused kernel memory: 1024K
[ 1.427965] Run /init as init process
[ 5.582671] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
[ 6.610953] systemd[1]: systemd 241 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
[ 6.611694] systemd[1]: Detected architecture arm.
[ 6.639435] systemd[1]: Set hostname to <beaglebone>.
[ 6.642911] systemd[1]: Failed to bump fs.file-max, ignoring: Invalid argument
[ 8.042232] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[ 8.049928] systemd[1]: Created slice system-serial\x2dgetty.slice.
[ 8.051138] systemd[1]: Listening on fsck to fsckd communication Socket.
[ 8.051326] systemd[1]: Reached target Swap.
[ 8.051971] systemd[1]: Listening on initctl Compatibility Named Pipe.
[ 8.053871] systemd[1]: Listening on Journal Audit Socket.
[ 8.768535] EXT4-fs (mmcblk0p1): re-mounted. Opts: errors=remount-ro
[ 9.711198] systemd-journald[245]: Received request to flush runtime journal from PID 1
[ 13.605928] *** FUNCTION CALLED: int __init tpm_init(void): major = 0, minor = 0;
[ 13.709981] *** FUNCTION CALLED: class_create(THIS_MODULE, "tpm") success.
[ 13.857163] *** FUNCTION CALLED: class_create(THIS_MODULE, "tpmrm") success.
[ 13.908264] *** FUNCTION CALLED: alloc_chrdev_region(&tpm_devt, 0, 2 * TPM_NUM_DEVICES, "tpmrm") success.
[ 14.310132] *** FUNCTION CALLED: struct tpm_chip *tpm_chip_alloc(struct device *pdev, const struct tpm_class_ops *ops);

It could be that the TPM initialization was called later. Can you test
if it succeeds in any accesses to the TPM over SPI?

[ 15.774425] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 20.595432] net eth0: initializing cpsw version 1.12 (0)
[ 20.690889] SMSC LAN8710/LAN8720 4a101000.mdio:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=4a101000.mdio:00, irq=POLL)
[ 20.708209] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.439148] using random self ethernet address
[ 21.439168] using random host ethernet address
[ 21.987725] using random self ethernet address
[ 21.987744] using random host ethernet address
[ 22.726736] cpsw 4a100000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 22.726831] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 23.030818] 8021q: 802.1Q VLAN Support v1.8
[ 23.030931] 8021q: adding VLAN 0 to HW filter on device eth0

**** END OF DMESG ***

My debug messages start with "*** FUNCTION CALLED:". They aren't very useful. They just show that certain functions were called. The most useful information they show is the fact that the major and minor numbers are both 0. I'm not sure if that's supposed to be the case in this stage of the loading process, but the code as much as I could understand it, sugessted that those shold be the vaild numbers. I.e. Those aren't some uninitialized variables that would be changed later.

"Odd. I'd think you'd need to disable the pinmuxes if you want the default to be SPI mode."

- It made no difference ... The latest version of the DTBO has those lines uncommented. It's all the same. I actually commented those lines as part of my experimenting process. Again those lines are currently active, but nothing different happens.

This is the output of show-pins.pl

P8.25 / eMMC d0 0 U7 fast rx up 1 mmc 1 d0
P8.24 / eMMC d1 1 V7 fast rx up 1 mmc 1 d1
P8.05 / eMMC d2 2 R8 fast rx up 1 mmc 1 d2
P8.06 / eMMC d3 3 T8 fast rx up 1 mmc 1 d3
P8.23 / eMMC d4 4 U8 fast rx up 1 mmc 1 d4
P8.22 / eMMC d5 5 V8 fast rx up 1 mmc 1 d5
P8.03 / eMMC d6 6 R9 fast rx up 1 mmc 1 d6
P8.04 / eMMC d7 7 T9 fast rx up 1 mmc 1 d7
P8.19 8 U10 fast rx down 7 gpio 0.22
P8.13 9 T10 fast rx down 7 gpio 0.23
P8.14 10 T11 fast rx down 7 gpio 0.26
P8.17 11 U12 fast rx down 7 gpio 0.27
P8.12 12 T12 fast rx down 7 gpio 1.12
P8.11 13 R12 fast rx down 7 gpio 1.13
P8.16 14 V13 fast rx down 7 gpio 1.14
P8.15 15 U13 fast rx down 7 gpio 1.15
P9.15 16 R13 fast rx down 7 gpio 1.16
P9.23 17 V14 fast rx down 7 gpio 1.17
P9.14 18 U14 fast rx down 7 gpio 1.18
P9.16 19 T14 fast rx down 7 gpio 1.19
P9.11 28 T17 fast rx up 7 gpio 0.30
P9.13 29 U17 fast rx up 7 gpio 0.31
P9.12 30 U18 fast up 7 gpio 1.28 ocp/gpio_helper (pinmux_gpio_helper_pins)
P8.26 31 V6 fast rx up 7 gpio 1.29
P8.21 / eMMC clk 32 U9 fast rx up 2 mmc 1 clk
P8.20 / eMMC cmd 33 V9 fast rx up 2 mmc 1 cmd
P9.15 34 T13 fast rx up 7 gpio 2.00
P8.18 35 V12 fast rx down 7 gpio 2.01
P8.07 36 R7 fast rx up 7 gpio 2.02
P8.08 37 T7 fast rx up 7 gpio 2.03
P8.10 38 U6 fast rx up 7 gpio 2.04
P8.09 39 T6 fast rx up 7 gpio 2.05
P8.45 / hdmi / sysboot 0 40 R1 fast rx 7 gpio 2.06
P8.46 / hdmi / sysboot 1 41 R2 fast rx 7 gpio 2.07
P8.43 / hdmi / sysboot 2 42 R3 fast rx 7 gpio 2.08
P8.44 / hdmi / sysboot 3 43 R4 fast rx 7 gpio 2.09
P8.41 / hdmi / sysboot 4 44 T1 fast rx 7 gpio 2.10
P8.42 / hdmi / sysboot 5 45 T2 fast rx 7 gpio 2.11
P8.39 / hdmi / sysboot 6 46 T3 fast rx 7 gpio 2.12
P8.40 / hdmi / sysboot 7 47 T4 fast rx 7 gpio 2.13
P8.37 / hdmi / sysboot 8 48 U1 fast rx 7 gpio 2.14
P8.38 / hdmi / sysboot 9 49 U2 fast rx 7 gpio 2.15
P8.36 / hdmi / sysboot 10 50 U3 fast rx 7 gpio 2.16
P8.34 / hdmi / sysboot 11 51 U4 fast rx 7 gpio 2.17
P8.35 / hdmi / sysboot 12 52 V2 fast rx 7 gpio 0.08
P8.33 / hdmi / sysboot 13 53 V3 fast rx 7 gpio 0.09
P8.31 / hdmi / sysboot 14 54 V4 fast rx 7 gpio 0.10
P8.32 / hdmi / sysboot 15 55 T5 fast rx 7 gpio 0.11
P8.27 / hdmi 56 U5 fast rx down 7 gpio 2.22
P8.29 / hdmi 57 R5 fast rx down 7 gpio 2.23
P8.28 / hdmi 58 V5 fast rx down 7 gpio 2.24
P8.30 / hdmi 59 R6 fast rx down 7 gpio 2.25
P9.22 / spi boot clk 84 A17 fast up 0 spi 0 clk spi@48030000 (pinmux_pb_spi0_pins)
P9.21 / spi boot in 85 B17 fast rx up 0 spi 0 data 0 spi@48030000 (pinmux_pb_spi0_pins)
P9.18 / spi boot out 86 B16 fast up 0 spi 0 data 1 spi@48030000 (pinmux_pb_spi0_pins)
P9.17 / spi boot cs 87 A16 fast 0 spi 0 cs 0 spi@48030000 (pinmux_pb_spi0_pins)
P9.42a 89 C18 fast rx down 7 gpio 0.07
P9.20 / cape i²c sda 94 D18 fast rx up 3 i²c 2 sda ocp/P9_20_pinmux (pinmux_P9_20_default_pin)
P9.19 / cape i²c scl 95 D17 fast rx up 3 i²c 2 scl ocp/P9_19_pinmux (pinmux_P9_19_default_pin)
P9.26 96 D16 fast rx up 7 gpio 0.14
P9.24 97 D15 fast rx up 7 gpio 0.15
P9.31 / hdmi audio clk 100 A13 fast rx down 7 gpio 3.14
P9.29 / hdmi audio fs 101 B13 fast rx down 7 gpio 3.15
P9.30 102 D12 fast rx down 7 gpio 3.16
P9.28 / hdmi audio data 103 C12 fast rx down 7 gpio 3.17
P9.42b 104 B12 fast rx down 7 gpio 3.18
P9.27 105 C13 fast rx down 7 gpio 3.19
P9.41 106 D13 fast rx down 7 gpio 3.20
P9.25 / audio osc 107 A14 fast rx down 7 gpio 3.21
P9.41 / jtag emu3 109 D14 fast rx down 7 gpio 0.20

"Isn't this the on-board i2c? Disabling that would be bad."

Yes it is, and one of the i2c interfaces interferes with the spi. I think that pin on mode 3 is a part of the i2c and on mode 0 is part of SPI0 so I disabled them both more to see if I could. BTW some of the lines you see are leftovers form test I conducted...

"Just remember that there are 2 drivers, one for the SPI controller and one for the TPM."

Does that mean the relevant channel of the SPI0 shouldn't be disabled?

The stuff for the channel is the 'spidev' driver, which is a device
driver that sits above the SPI bus device driver. You do want it
disabled.

While researching I got the impresson that the spi-tpm driver handles the spi communcation... All the spi tpm dts examples I examined do disable both channels of the spi.

Yes, you should disable them.

"disabling the spidev drivers shouldn't need any of the other arguments."

- Yup. But the additioanl arguments don't hurt anything ether. :slight_smile: This way I can easily re-enamble each channel.

"Also, I think you'd want to be targeting the spidev symbols to overwrite those values."

- You mean symbols in the /sys/ dir?

No, I mean symbols within the spi. Nevermind anyway, as they don't
seem to have any symbol references directly:
https://github.com/beagleboard/BeagleBoard-DeviceTrees/blob/v4.19.x-ti/src/arm/am335x-bone-common-univ.dtsi#L1342

Did you disable the universal cape? Might be best if you do.

See https://www.digikey.com/eewiki/display/linuxonarm/BeagleBone+Black

Disable the setting of enable_uboot_cape_universal=1.

"Can you confirm the spidev drivers aren't being loaded?"

- Yes. When status = "disabled"; the spidev0.x device file for the respective channel is gone. When status = "okay"; it is present.

Interesting. Any idea what the other spi messages above are then?

The interrupt related stuff you're seeing, is there because that TPM can implement an interupt driven communication and also can be reset by pulling a pin low. Both those pins (interrupt and reset) are connected to GPIOs on the beaglebone. Our hardwere division designed the board.

But, does the driver actually implement it? It is odd the driver
writer didn't put in the binding information, or did I just miss it?

Those elements about the intrrupt I've put there with the assumption that the driver can utilize them. Of course there is very low probability that's true. And with your: "I don't see this in the bindings" now I'm sure that assumption was wrong. But nothing changes with or without them. I don't think they can mess things up. I've certainly tried wthiout them.

k

Hi Jason

Sorry for the huge delay, but I had to take a week off and saw your replay just today.

Let me answer some of your questions.

"I’m confused why this is here. Was this in the device tree you are using without being disabled? Seems like it is still here. "

  • Well I’m confused about that too. The PPS is part of the linux image I’ve installed and I should remove it. It’s some sort of bloatware if I understand correctly. The PTP clock thing, is preinstalled in the Linux image I’m using as well, it should be removed along with the PPS.

"It should be possible to extract the running device tree using dtc,

but I’m not sure of the exact command. 'dtc -I fs -O dts -o

./extracted.dts /proc/device-tree’ seg faults for me, which I find really odd."

  • I have the source of the main DTB. It’s really long and hard to read. Also I’m not sure what to look for there.

“Anyway, it sure seems like something is up with a conflicting device on spi 0 cs 0.”

  • Now that you say that… There are two devices connected to SPI0 a 4 digit 7 segment display and the TPM. How ever wheter I’m addressing /dev/spydev0.0 or /dev/spidev0.1 the display activates and works it is the addressed device.

"Did you disable the universal cape? Might be best if you do. See https://www.digikey.com/eewiki/display/linuxonarm/BeagleBone+Black

Disable the setting of enable_uboot_cape_universal=1."

  • Yes. I disabled it by commenting the entire line in /boot/uEnv.txt. Do you think it’s better to have the line active but equal to 0 Like: enable_uboot_cape_universal=0?

“Interesting. Any idea what the other spi messages above are then?”

I’m not sure if you refer to these:

[ 13.605928] *** FUNCTION CALLED: int __init tpm_init(void): major = 0, minor = 0;
[ 13.709981] *** FUNCTION CALLED: class_create(THIS_MODULE, “tpm”) success.
[ 13.857163] *** FUNCTION CALLED: class_create(THIS_MODULE, “tpmrm”) success.
[ 13.908264] *** FUNCTION CALLED: alloc_chrdev_region(&tpm_devt, 0, 2 * TPM_NUM_DEVICES, “tpmrm”) success.
[ 14.310132] *** FUNCTION CALLED: struct tpm_chip *tpm_chip_alloc(struct device *pdev, const struct tpm_class_ops *ops);

, but they are debug messages I put in some of the functions of the TPM driver. To see if they are being called.

“But, does the driver actually implement it? It is odd the driver writer didn’t put in the binding information, or did I just miss it?”

  • Not really. I’m not sure how the driver would expect to be configured to use those pins, but it probably doesn’t support interrupt based communication at all.

Currently we work on two scenarios.

  1. Since udev is responsible for giving the MAJOR and MINOR numbers needed for the driver, and creating the device file. We have to work out why the maj and min numbers are both 0. You input about a conflict is valuable in this regard.

  2. Embarrassingly, we realized that the board we are testing which is designed in-house, was never properly tested to see if it works on hardware level. There could be a bad soldering joint or even an error in the very design of the PCB, although that’s unlikely.

Anyway thanks again for your reply. Feel free to write back if you have an idea or like to know some additional info.
I’m going to write again when there’s an update.