Other Parts Discussed in Thread: TMDSICE3359
Hey everyone,
I'm currently upgrading our Yocto-based distribution from version 3.0/Zeus to 3.1/Dunfell.
Within this process i've found a possible bug in the PRUETH firmware, kernel driver or further software.
When initializing and deinitializing the two interfaces of a PRUETH based system, the system will
lock up depending on the sequence of ip or ifconfig - commands.
I've not yet tested this behaviour on the current arago distribution, as our system is plain yocto.
How to provoke the lockup
This is a crosscheck to check wether the fault is in our system or in the default meta-ti configuration.
The following was tested on a default yocto/poky with meta-ti layer, both on dunfell tag.
No further configuration was done.
When running
ifconfig eth 1 up ifconfig eth 0 up
the system locks up:
root@am335x-evm:~# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) root@am335x-evm:~# ifconfig eth1 up [ 70.616033] remoteproc remoteproc2: powering up 4a338000.pru [ 70.629768] remoteproc remoteproc2: Booting fw image ti-pruss/am335x-pru1-prueth-fw.elf, size 7344 [ 70.639210] pru-rproc 4a338000.pru: configured system_events[63-0] = 00600000,08a00000 [ 70.647791] pru-rproc 4a338000.pru: configured intr_channels = 0x0000032a host_intr = 0x000002aa [ 70.656907] remoteproc remoteproc2: remote processor 4a338000.pru is now up [ 70.664452] net eth1: started root@am335x-evm:~# ifconfig eth0 up [ 75.325870] remoteproc remoteproc1: powering up 4a334000.pru [ 75.334979] remoteproc remoteproc1: Booting fw image ti-pruss/am335x-pru0-prueth-fw.elf, size 7432 [ 75.344725] pru-rproc 4a334000.pru: configured system_events[63-0] = 00000600,04500080 [ 75.352688] pru-rproc 4a334000.pru: configured intr_channels = 0x000000d5 host_intr = 0x00000155
When running the commands the other way arround, the system will not lock up.
The error was found on our system, where the interfaces are initialized by our software, and, in order to reconfigure them,
are deinitialized and reinitialized by the software.
This leads to the following effect:
eth0 up ⇒ eth1 up ⇒ eth0 down ⇒ eth1 down ⇒ eth0 up → LOCK eth0 up ⇒ eth1 up ⇒ eth1 down ⇒ eth0 down ⇒ eth0 up → OK
Is this a known behaviour in the firmware or its drivers, are there any reference materials which state the
correct way to do this initializing an deinitializing, or am i doing something wrong here?
Tested software configuration
The problem was initially found on a system with the kernel from meta-ti/5.4.91
I've tested it with 5.4.93 and various earlier versions, always by checking out the whole repo commit, such that
surrounding software like the pru firmware will be in a compatible state.
On an older commit of the meta-ti layer (zeus, Kernel 5.4.20) the error is not reproducable.
Thanks in advance
Dave