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.

AM62P-Q1: CPSW3G Driver crashed when rx

Part Number: AM62P-Q1
Other Parts Discussed in Thread: AM62P5, AM62P

Hello 

 

We got following error when do ping test for long time. Could you pls help analyze the log below?

Thanks!

 

64 bytes from 192.168.2.129: seq=436 ttl=64 time=0.590 ms [ 456.901603] Unable to handle kernel paging request at virtual address ffff0640035a8a48 [ 456.909555] Mem abort info: [ 456.912355] ESR = 0x0000000096000004 [ 456.916100] EC = 0x25: DABT (current EL), IL = 32 bits [ 456.921402] SET = 0, FnV = 0 [ 456.924447] EA = 0, S1PTW = 0 [ 456.927581] FSC = 0x04: level 0 translation fault [ 456.932447] Data abort info: [ 456.935317] ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000 [ 456.940790] CM = 0, WnR = 0, TnD = 0, TagAccess = 0 [ 456.945830] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 [ 456.951131] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000080b2f000 [ 456.957828] [ffff0640035a8a48] pgd=0000000000000000, p4d=0000000000000000 [ 456.964617] Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP [ 456.970875] Modules linked in: [ 456.973926] CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Tainted: G O 6.12.43-g3a3f87d0bf70-dirty #29 [ 456.983823] Tainted: [O]=OOT_MODULE [ 456.987301] Hardware name: Texas Instruments AM62P5 SK (DT) [ 456.992858] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 456.999805] pc : am65_cpsw_nuss_rx_poll+0x1d8/0x9c0 [ 457.004681] lr : am65_cpsw_nuss_rx_poll+0x1a8/0x9c0 [ 457.009546] sp : ffff800080003d10 [ 457.012849] x29: ffff800080003dc0 x28: ffff0640035a8a40 x27: ffff00005c0de000 [ 457.019976] x26: 0000000000000040 x25: 0000000000000000 x24: fffffdffc0207240 [ 457.027101] x23: ffff0000035a1608 x22: ffff0000035a1630 x21: 0000000000000001 [ 457.034226] x20: ffff0000035a1480 x19: ffff0000035a0080 x18: 0000000000000000 [ 457.041351] x17: ffff7fffdafe4000 x16: ffff800080000000 x15: 0000000000000000 [ 457.048477] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 457.055602] x11: 000000000000df80 x10: 0000000000000000 x9 : ffff00000359f688 [ 457.062728] x8 : 0000000000000001 x7 : ffff0000035a9080 x6 : 000f0000dc0de000 [ 457.069853] x5 : 0000000000000640 x4 : ffff00005c0de040 x3 : ffff00005c0de030 [ 457.076978] x2 : 00000000000007e8 x1 : 0000000061000000 x0 : 0000063ffffff9c0 [ 457.084103] Call trace: [ 457.086540] am65_cpsw_nuss_rx_poll+0x1d8/0x9c0 [ 457.091061] __napi_poll+0x38/0x17c [ 457.094544] net_rx_action+0x148/0x2a0 [ 457.098285] handle_softirqs+0xf4/0x228 [ 457.102114] __do_softirq+0x14/0x20 [ 457.105594] ____do_softirq+0x10/0x1c [ 457.109248] call_on_irq_stack+0x30/0x64 [ 457.113160] do_softirq_own_stack+0x1c/0x28 [ 457.117334] __irq_exit_rcu+0xcc/0x104 [ 457.121074] irq_exit_rcu+0x10/0x1c [ 457.124553] el1_interrupt+0x38/0x68 [ 457.128122] el1h_64_irq_handler+0x18/0x24 [ 457.132209] el1h_64_irq+0x64/0x68 [ 457.135600] default_idle_call+0x28/0x3c [ 457.139516] do_idle+0xa0/0xec [ 457.142564] cpu_startup_entry+0x38/0x3c [ 457.146476] kernel_init+0x0/0x1d4 [ 457.149870] start_kernel+0x534/0x67c [ 457.153526] __primary_switched+0x80/0x88 [ 457.157532] Code: b90013e2 9a9f1000 b94023e2 8b0000fc (f9400797) [ 457.163610] ---[ end trace 0000000000000000 ]--- [ 457.168214] Kernel panic - not syncing: Oops: Fatal exception in interrupt [ 457.175072] SMP: stopping secondary CPUs [ 457.178989] Kernel Offset: 0x80000 from 0xffff800080000000 [ 457.184460] PHYS_OFFSET: 0x80000000 [ 457.187936] CPU features: 0x00,00000000,00200000,4200420b [ 457.193321] Memory Limit: none [ 457.196366] ---[ end Kernel panic - not syncing: Oops: Fatal exception in interrupt

  • Our pre analysis is that, the descriptor is overwriten unexpectedly after we add our own classifier which will remap flow from port2 to Linux flow id = 19.

    Why the linux driver cannot accept this settings? Could you pls check the effect of our change on the current cpsw driver at Linux side.

  •     if(index == 14)
        {
         hCpswAleRegs->POLICECFG0 = 0;  

         hCpswAleRegs->POLICECFG3 =  (1 << 31)|( 6 << 16 );
         pPolCfg->thread          = 0x13;
        }
        else if(index == 15)
        {
          hCpswAleRegs->POLICECFG0 = 0;  
          hCpswAleRegs->POLICECFG3 =  (1 << 31)|( 7 << 16 );
          pPolCfg->thread          = 0x13;
        }

  • Hello, 

    What Linux SDK version are you using?

    What is your test topology?

    Are you testing on a custom board or TI AM62P EVM?

    After how long does the crash occur and is it consistently reproducible?

    What specific steps did you take to add your own classifier to remap flow from port 2 to flow id = 19? Are they related to the changes you responded with in your latest response? Can you instead share a patch file what changes you made on the Linux driver (including information on what file you made those changes on?)

    -Daolin