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.

TMDSIDK437X: PRU Ethernet driver crashes

Part Number: TMDSIDK437X

Hi, 

I am trying to run single emac mode on my TMDSIDK437X board but the PRU ethernet kernel driver (ti-prueth.ko) crashes when loaded. 

I am using:

ti-processor-sdk-linux-rt-am437x-evm-06.01.00.08

Single emac configuration is based on example found in:

Documentation/devicetree/bindings/net/ti-prueth.txt

relevant parts of device tree:

	aliases {
	/*	ethernet2 = &pruss1_emac0; */
		ethernet3 = &pruss1_emac1;
	};


	/* Single-MAC Ethernet application node on PRU-ICSS1 */
	pruss1_eth: pruss1_eth {
		compatible = "ti,am4376-prueth";
		prus = <&pru1_0>, <&pru1_1>;
		firmware-name = "",
				"ti-pruss/am437x-pru1-prueth-fw.elf";
		sram = <&ocmcram>;
		interrupt-parent = <&pruss1_intc>;
		mii-rt = <&pruss1_mii_rt>;

		pinctrl-0 = <&pruss1_eth_default>;
		pinctrl-names = "default";
		interrupts = <20>, <21>;
		interrupt-names = "rx_red_hp", "rx_red_lp";

		pruss1_emac1: ethernet-mii1 {
			phy-handle = <&pruss1_eth1_phy>;
			phy-mode = "mii";
			interrupts = <21>, <23>, <24>, <27>;
			interrupt-names = "rx", "tx", "hsrprp_ptp_tx",
					  "emac_ptp_tx";
			/* Filled in by bootloader */
			local-mac-address = [00 00 00 00 00 00];
		};
	};

crash dump:

am437x-evm login: root
root@am437x-evm:~# uname -r
4.19.59-rt24-g4203cb8c96
root@am437x-evm:~# modprobe ti_prueth
[   98.708136] prueth pruss1_eth: port 2: using random MAC addr: 9e:d6:47:8d:ce:b0
[   98.817469] prueth pruss1_eth: pruss_fw_drop_untagged_vlan 0
[   98.823174] prueth pruss1_eth: pruss MC Mask (Port 1) ff:ff:ff:ff:ff:ff
[   98.840233] prueth pruss1_eth: TI PRU ethernet (type 0) driver initialized
root@am437x-evm:~# [   98.978590] iep ptp bc clkid -1
[   98.981824] Unable to handle kernel NULL pointer dereference at virtual address 000000f0
[   99.016953] pgd = 30aa048a
[   99.019680] [000000f0] *pgd=00000000
[   99.023279] Internal error: Oops: 805 [#1] PREEMPT ARM
[   99.023283] Modules linked in: ti_prueth pru_rproc irq_pruss_intc pruss pm33xx pvrsrvkm(O) omap_des des_generic omap_aes_driver pruss_soc_bus crypto_engine omap_crypto omap_sham ti_emif_sram dwc3_omap gpio_pisosr gpio_tpic2810 at24 wk)
[   99.023356] CPU: 0 PID: 129 Comm: systemd-network Tainted: G           O      4.19.59-rt24-g4203cb8c96 #1
[   99.023360] Hardware name: Generic AM43 (Flattened Device Tree)
[   99.023389] PC is at memcpy+0x270/0x330
[   99.023393] LR is at   (null)
[   99.023397] pc : [<c08b4210>]    lr : [<00000000>]    psr: 60060013
[   99.023401] sp : ee7d3a7c  ip : 00000000  fp : ee7d3aec
[   99.023404] r10: 00000002  r9 : ecdbe000  r8 : 00000000
[   99.023408] r7 : bf24d234  r6 : edd3ca62  r5 : edd3c840  r4 : edd3c840
[   99.023412] r3 : 00000000  r2 : ffffffe4  r1 : edd3ca68  r0 : 000000f0
[   99.023418] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[   99.023422] Control: 10c53c7d  Table: ae7e4059  DAC: 00000051
[   99.023428] Process systemd-network (pid: 129, stack limit = 0x3d3b4840)
[   99.023432] Stack: (0xee7d3a7c to 0xee7d4000)
[   99.023437] 3a60:                                                                000000f0
[   99.023444] 3a80: edd3c840 bf245f28 00000000 00000000 00000000 ee7d3afc bf24bb28 c0d05888
[   99.023452] 3aa0: 00001002 edc86810 00000000 00000000 edd3c9a6 edd3ca70 40302000 ecdbe540
[   99.023459] 3ac0: ee7d3aec ecdbe000 c0d05888 bf24bb28 c0d05888 00001002 edc86810 00000000
[   99.023466] 3ae0: ee7d3b24 ee7d3af0 c077e5a0 bf244978 ee7d3b0c ee7d3b00 c012fd98 ecdbe000
[   99.023473] 3b00: 00000000 ef5dfce0 c077e4b8 ecdbe000 00000001 00001003 ee7d3b64 ee7d3b28
[   99.023480] 3b20: c077e998 c077e4c8 00000000 00000000 00000000 00000000 00000000 ef5dfce0
[   99.023487] 3b40: ecdbe000 00001002 00000000 ecdbe144 ee7d3cfc edc86810 ee7d3b8c ee7d3b68
[   99.023494] 3b60: c077ea18 c077e838 ecdbe000 c0d05888 ee7d3c2c ee7bb480 ee7d3cfc edc86810
[   99.023501] 3b80: ee7d3c14 ee7d3b90 c0794eac c077ea04 ede7dc00 c0d05888 ee7d3d9c bf24bb28
[   99.023508] 3ba0: ee7d3c0c ee7d3bb0 c08caaec c0150574 c0152318 c0157f94 ede7dc00 c0d05888
[   99.023515] 3bc0: ee7d3c0c 00000010 00000033 edc86828 ee7d3c2c 0000001a 00000000 edc86800
[   99.023522] 3be0: ee7d3c14 ef5dfce0 c04289d4 c0d05888 edc86800 ee7d3d9c ee7bb480 c0d49138
[   99.023529] 3c00: edc86810 edc86800 ee7d3d34 ee7d3c18 c07956e8 c0794bbc ee7d3c2c ee7d3cfc
[   99.023536] 3c20: 00000000 ee7d3c30 c0223bc0 00000000 00000000 00000000 00000000 00000000
[   99.023543] 3c40: 00000000 00000000 00000000 00000000 00000000 edc86820 00000000 00000000
[   99.023549] 3c60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   99.023556] 3c80: 00000000 00000000 00000000 00000000 00000000 edc86828 00000000 00000000
[   99.023562] 3ca0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   99.023568] 3cc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   99.023575] 3ce0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 c0134800
[   99.023582] 3d00: ee7d3d24 ee7d3d10 c07ba194 ef5dfce0 c07955f4 c0d05888 c0d8de58 ee7bb480
[   99.023589] 3d20: 00000000 00000000 ee7d3d94 ee7d3d38 c0791690 c0795600 c07809cc c0d8de44
[   99.023596] 3d40: c0d8de44 ee7d3d9c c0d05888 c0b4444c c013492c ee7d3d54 ee7d3d54 ee1220f4
[   99.023604] 3d60: ee1220f4 ef5dfce0 c0d05888 ee7bb480 c0d05888 c0791554 edc86800 00000038
[   99.023611] 3d80: c0d05888 00000000 ee7d3de4 ee7d3d98 c07be39c c0791560 edc97300 00000000
[   99.023617] 3da0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ef5dfce0
[   99.023624] 3dc0: ef159c00 ef159c00 ee69ec00 00000038 ee7bb480 00000000 ee7d3df4 ee7d3de8
[   99.023631] 3de0: c0791550 c07be2e8 ee7d3e24 ee7d3df8 c07bdafc c0791544 7fffffff ef5dfce0
[   99.023638] 3e00: 00000008 ee7d3eb4 c0d05888 ee69ec00 ee7bb480 006000c0 ee7d3e84 ee7d3e28
[   99.023645] 3e20: c07bddf4 c07bd974 c08cecb4 c014f684 ee7d3e54 ee7d3e40 00000000 00000038
[   99.023652] 3e40: eeb6eb00 00000000 00000081 000003e1 000003de ef5dfce0 00000051 00000000
[   99.023660] 3e60: c0d05888 eee15a00 00000000 bee1695c ee7d2000 00000122 ee7d3e94 ee7d3e88
[   99.023667] 3e80: c075b4ac c07bdc4c ee7d3f8c ee7d3e98 c075c66c c075b49c ee7d3ebc c014f684
[   99.023674] 3ea0: ee7d3ecc 00000000 00000000 005427c0 00000038 ee7d3ee4 00000010 00000001
[   99.023680] 3ec0: 00000000 00000000 ee7d3eb4 00000000 ee7d3f0c 00000000 00000000 00000000
[   99.023687] 3ee0: ee7d3f0c 00000010 00000000 00000000 00000000 ee359418 ee7d3f64 ee7d3f08
[   99.023694] 3f00: c01899bc c011a20c 00000062 00000000 a6aaaaab 00000000 03380185 00000000
[   99.023701] 3f20: 00000000 35c7811e a254cbc7 00000051 00000000 00000107 c0101204 bee16984
[   99.023708] 3f40: 00000008 00000000 c0d05888 c0184680 ee7d2000 00000062 38ff82a3 ef5dfce0
[   99.023715] 3f60: c0d05888 ef5dfce0 ee7d3fa4 bee1695c 00000010 0052e5c8 00000122 c0101204
[   99.023722] 3f80: ee7d3fa4 ee7d3f90 c075c6d0 c075c5ac bee1695c 00000010 00000000 ee7d3fa8
[   99.023729] 3fa0: c0101000 c075c6b8 bee1695c 00000010 00000003 005427c0 00000038 00000000
[   99.023736] 3fc0: bee1695c 00000010 0052e5c8 00000122 004de215 00540fd0 00000000 00542800
[   99.023743] 3fe0: 00000000 bee16938 b6ec759d b6dd3168 60000010 00000003 00000000 00000000
[   99.023745] Backtrace: 
[   99.023876] [<bf24496c>] (emac_ndo_open [ti_prueth]) from [<c077e5a0>] (__dev_open+0xe4/0x168)
[   99.023886]  r10:00000000 r9:edc86810 r8:00001002 r7:c0d05888 r6:bf24bb28 r5:c0d05888
[   99.023889]  r4:ecdbe000
[   99.023899] [<c077e4bc>] (__dev_open) from [<c077e998>] (__dev_change_flags+0x16c/0x1cc)
[   99.023905]  r6:00001003 r5:00000001 r4:ecdbe000
[   99.023913] [<c077e82c>] (__dev_change_flags) from [<c077ea18>] (dev_change_flags+0x20/0x50)
[   99.023920]  r9:edc86810 r8:ee7d3cfc r7:ecdbe144 r6:00000000 r5:00001002 r4:ecdbe000
[   99.023939] [<c077e9f8>] (dev_change_flags) from [<c0794eac>] (do_setlink+0x2fc/0xa44)
[   99.023946]  r9:edc86810 r8:ee7d3cfc r7:ee7bb480 r6:ee7d3c2c r5:c0d05888 r4:ecdbe000
[   99.023955] [<c0794bb0>] (do_setlink) from [<c07956e8>] (rtnl_setlink+0xf4/0x140)
[   99.023962]  r10:edc86800 r9:edc86810 r8:c0d49138 r7:ee7bb480 r6:ee7d3d9c r5:edc86800
[   99.023964]  r4:c0d05888
[   99.023974] [<c07955f4>] (rtnl_setlink) from [<c0791690>] (rtnetlink_rcv_msg+0x13c/0x308)
[   99.023981]  r9:00000000 r8:00000000 r7:ee7bb480 r6:c0d8de58 r5:c0d05888 r4:c07955f4
[   99.023998] [<c0791554>] (rtnetlink_rcv_msg) from [<c07be39c>] (netlink_rcv_skb+0xc0/0x118)
[   99.024005]  r10:00000000 r9:c0d05888 r8:00000038 r7:edc86800 r6:c0791554 r5:c0d05888
[   99.024008]  r4:ee7bb480
[   99.024016] [<c07be2dc>] (netlink_rcv_skb) from [<c0791550>] (rtnetlink_rcv+0x18/0x1c)
[   99.024023]  r8:00000000 r7:ee7bb480 r6:00000038 r5:ee69ec00 r4:ef159c00
[   99.024031] [<c0791538>] (rtnetlink_rcv) from [<c07bdafc>] (netlink_unicast+0x194/0x210)
[   99.024039] [<c07bd968>] (netlink_unicast) from [<c07bddf4>] (netlink_sendmsg+0x1b4/0x3a0)
[   99.024046]  r9:006000c0 r8:ee7bb480 r7:ee69ec00 r6:c0d05888 r5:ee7d3eb4 r4:00000008
[   99.024058] [<c07bdc40>] (netlink_sendmsg) from [<c075b4ac>] (sock_sendmsg+0x1c/0x2c)
[   99.024065]  r10:00000122 r9:ee7d2000 r8:bee1695c r7:00000000 r6:eee15a00 r5:c0d05888
[   99.024067]  r4:00000000
[   99.024077] [<c075b490>] (sock_sendmsg) from [<c075c66c>] (__sys_sendto+0xcc/0x10c)
[   99.024084] [<c075c5a0>] (__sys_sendto) from [<c075c6d0>] (sys_sendto+0x24/0x2c)
[   99.024091]  r8:c0101204 r7:00000122 r6:0052e5c8 r5:00000010 r4:bee1695c
[   99.024102] [<c075c6ac>] (sys_sendto) from [<c0101000>] (ret_fast_syscall+0x0/0x5c)
[   99.024106] Exception stack(0xee7d3fa8 to 0xee7d3ff0)
[   99.024112] 3fa0:                   bee1695c 00000010 00000003 005427c0 00000038 00000000
[   99.024119] 3fc0: bee1695c 00000010 0052e5c8 00000122 004de215 00540fd0 00000000 00542800
[   99.024124] 3fe0: 00000000 bee16938 b6ec759d b6dd3168
[   99.024131] Code: e1a0382e e491e004 e25cc004 e183380e (e4803004) 
[   99.773427] ---[ end trace 0000000000000002 ]---

As a side note. This configuration works when running kernel version 4.14. There seems to be a lot of changes between the 4.14 and 4.19 version of the PRU ethernet driver.

Any Ideas?

  • Hello Mathias,

    Give me a couple of days to test this.

    Regards,

    Nick

  • Hi Nick

    I was able to get the driver load without crashing.

    in:

    static int emac_set_boot_pru(struct prueth_emac *emac, struct net_device *ndev)

        pru_firmwares = &prueth->fw_data->fw_pru[emac->port_id - 1];
        fw_name = pru_firmwares->fw_name[prueth->eth_type];

        netdev_err(ndev, "emac_set_boot_pru 1\n");
        //emac_dualemac_set_stats(emac, &prueth->emac_stats); //fixmee

        netdev_err(ndev, "emac_set_boot_pru 2\n");
        switch (emac->port_id) {
        case PRUETH_PORT_MII0:

    in:

    static enum hrtimer_restart prueth_timer(struct hrtimer *timer)

        for (mac = PRUETH_MAC0; mac <= PRUETH_MAC1; mac++) {
            emac = prueth->emac[mac];
            if(emac){ //fixmee
            if (emac->port_id == PRUETH_PORT_MII0)
                dram = prueth->mem[PRUETH_MEM_DRAM0].va;
            else
                dram = prueth->mem[PRUETH_MEM_DRAM1].va;

            if ((prueth->emac_configured & BIT(emac->port_id)) &&
                (emac->nsp_credit & PRUETH_NSP_EN_MASK)) {
                if (!--emac->nsp_timer_count) {
                    writel(emac->nsp_credit,
                           dram + STORM_PREVENTION_OFFSET);
                    emac->nsp_timer_count =
                           PRUETH_DEFAULT_NSP_TIMER_COUNT;
                }
            }
            }
        }

    It seems that the driver "probe" function handles "single emac" config correctly but some of the other functions assumes dual emac.

    Best Regards

    Mathias

  • Hello Mathias,

    Apologies for no response. Your assessment looks spot on - some parts of the driver do not check for single emac. I have verified that SDK 6.3 has the same issue. We will get this fixed for the SDK 7.x series of software releases.

    I have limited Ethernet testing capabilities right now, but I am working with the developers to fix the driver. Have you found any additional single emac surprises since March?

    Regards,

    Nick

  • Hi Nick

    Thanks for the update.

    I have not noticed any other issues regarding the pru-ethernet driver.

    Best Regards

    Mathias