This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PROCESSOR-SDK-AM335X: No receive interrupt generated by the PRU-ICSS

Part Number: PROCESSOR-SDK-AM335X
Other Parts Discussed in Thread: AM3357

Hello,

I have an issue with my custom board, based on BeagleBone and Sitara AM3357.
The problem concerns the PRU which is configured as a dual EMAC mode (2 additional Ethernet interfaces).

Til now, my board was working perfectly with this Linux Kernel 5.4:

branch: 5.4

The device tree, for the kernel 5.4, looks as follow:

#include "am33xx.dtsi"

	/* Dual mac ethernet application node on icss */
	pruss_eth {
		compatible = "ti,am3359-prueth";
		prus = <&pru0>, <&pru1>;
		firmware-name = "ti-pruss/am335x-pru0-prueth-fw.elf",
				"ti-pruss/am335x-pru1-prueth-fw.elf";
		sram = <&ocmcram>;
		interrupt-parent = <&pruss_intc>;
		syscon = <&scm_conf>;
		mii-rt = <&pruss_mii_rt>;
		iep = <&pruss_iep>;
		pinctrl-names = "default";
		pinctrl-0 = <&pruss_eth_default>;

		pruss_emac0: mii0 {
			phy-handle = <&pruss_eth0_phy>;
			phy-mode = "mii";
			interrupts = <20>, <22>;
			interrupt-names = "rx", "tx";
			// Filled in by cm macid
			local-mac-address = [00 00 00 00 00 00];
		};
		pruss_emac1: mii1 {
			phy-handle = <&pruss_eth1_phy>;
			phy-mode = "mii";
			interrupts = <21>, <23>;
			interrupt-names = "rx", "tx";
			// Filled in by cm macid
			local-mac-address = [00 00 00 00 00 00];
		};
	};

I have to upgrade the Linux kernel to the branch 5.10
So, I simply upgraded the kernel with the branch 5.10 instead of 5.4.
I also adapted the device tree as follow:

#include "am33xx.dtsi"

	/* Dual mac ethernet application node on icss */
	pruss_eth {
		compatible = "ti,am3359-prueth";
		ti,prus = <&pru0>, <&pru1>;
		sram = <&ocmcram>;
		interrupt-parent = <&pruss_intc>;
		syscon = <&scm_conf>;
		mii-rt = <&pruss_mii_rt>;
		iep = <&pruss_iep>;
		pinctrl-names = "default";
		pinctrl-0 = <&pruss_eth_default>;

		pruss_emac0: mii0 {
			phy-handle = <&pruss_eth0_phy>;
			phy-mode = "mii";
			interrupts = <20 2 2>;
			interrupt-names = "rx";
			// Filled in by cm macid
			local-mac-address = [00 00 00 00 00 00];
		};
		pruss_emac1: mii1 {
			phy-handle = <&pruss_eth1_phy>;
			phy-mode = "mii";
			interrupts = <21 3 3>;
			interrupt-names = "rx";
			// Filled in by cm macid
			local-mac-address = [00 00 00 00 00 00];
		};
	};

The board is now booting with this kernel 5.10 (5.10.109-ti-r45). The PRU seems to be loaded properly:

[    5.423003] remoteproc remoteproc0: 4a334000.pru is available
[    5.430454] remoteproc remoteproc1: 4a338000.pru is available
[    5.495547] davinci_mdio 4a332400.mdio: phy[1]: device 4a332400.mdio:01, driver TI DP83822
[    5.503927] davinci_mdio 4a332400.mdio: phy[3]: device 4a332400.mdio:03, driver TI DP83822
[    5.515831] prueth pruss_eth: could not get ptp tx irq. Skipping PTP support
[    5.522987] prueth pruss_eth: could not get hsr ptp tx irq. Skipping PTP support
[    5.530595] prueth pruss_eth: port 1: CM MAC addr: 0c:1c:57:f6:24:c1
[    5.571619] prueth pruss_eth: could not get ptp tx irq. Skipping PTP support
[    5.578758] prueth pruss_eth: could not get hsr ptp tx irq. Skipping PTP support
[    5.586404] prueth pruss_eth: port 2: CM MAC addr: 0c:1c:57:f6:24:c2
[    5.622686] prueth pruss_eth: TI PRU ethernet driver initialized: dual EMAC mode
[    8.365810] remoteproc remoteproc0: powering up 4a334000.pru
[    8.410743] remoteproc remoteproc0: Booting fw image ti-pruss/am335x-pru0-prueth-fw.elf, size 7432
[    8.480460] remoteproc remoteproc0: unsupported resource 5
[    8.535570] remoteproc remoteproc0: remote processor 4a334000.pru is now up
[    8.624477] net ethernet-mii0: started
[    9.051609] remoteproc remoteproc1: powering up 4a338000.pru
[    9.156561] remoteproc remoteproc1: Booting fw image ti-pruss/am335x-pru1-prueth-fw.elf, size 7344
[    9.221244] remoteproc remoteproc1: unsupported resource 5
[    9.285041] remoteproc remoteproc1: remote processor 4a338000.pru is now up
[    9.381515] net ethernet-mii1: started

When starting a dhcp client on one of these 2 ethernet interfaces, my dhcp server receives a DHCP discover request and send back a DHCP offer. It means that the sending is working as expected.
But I didn’t receive any interrupt from the PRU:
myname@myhost:~$ cat /proc/interrupts
CPU0

 63:          0  pruss-intc  20 Level     mii0
 64:          0  pruss-intc  21 Level     mii1

It means the IP traffic is not catched by the PRU.
The question is:
Does anybody already successfully configured the PRU in ethernet mode with a kernel 5.10 from the beaglebone
repository ?

Many thanks in advance

  • Fixed with the latest SDK!
    PROCESSOR-SDK-LINUX-AM335X
    Version: 08.02.00.24 Release date: 19 May 2022

  • Hello Laurent,

    Apologies for the delayed response. Glad to hear that the AM335x SDK 8.2 (built on Linux kernel 5.10 for future readers) addressed the issue! Thank you for responding with your solution as well.

    FYI, in general we can only support TI software releases on these forums. If there are questions about software releases from other groups (e.g., the beaglebone community does a lot of awesome work around the PRU), you will get better support from those groups.

    Regards,
    Nick