Post Go back to editing

Adrv kernel driver crashes at the hw open api

Category: Software
Product Number: adrv9002
Software Version: 9001

after initialising the adrv in the kernel module while performing the adi_adrv9001_HwReset im getting the error so i modified that api to adi_adrv9001_HwOpen still getting the same error what is cause and how to resolve it

[ 88.379086] Unable to handle kernel NULL pointer dereference at virtual address 00000000000002f1
[ 88.387880] Mem abort info:
[ 88.390670] ESR = 0x96000006
[ 88.393716] EC = 0x25: DABT (current EL), IL = 32 bits
[ 88.399032] SET = 0, FnV = 0
[ 88.402083] EA = 0, S1PTW = 0
[ 88.405212] FSC = 0x06: level 2 translation fault
[ 88.410087] Data abort info:
[ 88.412955] ISV = 0, ISS = 0x00000006
[ 88.416814] CM = 0, WnR = 0
[ 88.419775] user pgtable: 4k pages, 39-bit VAs, pgdp=00000000098ef000
[ 88.426215] [00000000000002f1] pgd=08000000098f5003, p4d=08000000098f5003, pud=08000000098f5003, pmd=0000000000000000
[ 88.436845] Internal error: Oops: 96000006 [#1] SMP
[ 88.441714] Modules linked in: adrvmodule(O+) navasa(O) spi_xilinx(O) clk_ena(O) xilinx_ams uio_pdrv_genirq
[ 88.451467] CPU: 0 PID: 2562 Comm: insmod Tainted: G O 5.15.36-NGRM-T2T3-Linux-5.01 #1
[ 88.460681] Hardware name: NGRM RevD (DT)
[ 88.464682] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 88.471642] pc : spi_sync+0x18/0x54
[ 88.475138] lr : spi_sync_transfer.constprop.0+0x60/0x84 [navasa]
[ 88.481286] sp : ffffffc00c2db7b0
[ 88.484591] x29: ffffffc00c2db7b0 x28: 0000000000000013 x27: 0000000000000100
[ 88.491727] x26: ffffffc000dbd580 x25: ffffffc00815a450 x24: ffffffc00c2db9a5
[ 88.498862] x23: 0000000000000003 x22: ffffff80099d3900 x21: 0000000000000003
[ 88.505997] x20: ffffffc00c2db7f0 x19: 0000000000000001 x18: 0000000000000000
[ 88.513132] x17: 0000000000000000 x16: 0000000000000000 x15: 0000007f73ffe790
[ 88.520267] x14: 0000000000000000 x13: 0000000000000000 x12: 00000000000002a8
[ 88.527402] x11: 0000000000000001 x10: 00000000000008f0 x9 : ffffffc00c2db860
[ 88.534537] x8 : ffffff80067e4000 x7 : 0000000000000001 x6 : 0000000000000000
[ 88.541672] x5 : 0000000000000080 x4 : 0000000000000001 x3 : ffffffc00c2db848
[ 88.548807] x2 : ffffffc00c2db900 x1 : ffffffc00c2db7f0 x0 : 0000000000000001
[ 88.555943] Call trace:
[ 88.558380] spi_sync+0x18/0x54
[ 88.561513] spi_sync_transfer.constprop.0+0x60/0x84 [navasa]
[ 88.567278] spi_write+0x58/0x80 [navasa]
[ 88.571305] linux_spi_write+0x60/0x90 [navasa]
[ 88.575853] adi_adrv9001_spi_Byte_Write+0xb4/0x17c [navasa]
[ 88.581530] adi_adrv9001_spi_Configure+0x5c/0x1e4 [navasa]
[ 88.587121] adi_adrv9001_HwReset+0x164/0x20c [navasa]
[ 88.592276] start+0xcc/0x254 [adrvmodule]
[ 88.596372] hello_init+0x1b0/0x1000 [adrvmodule]
[ 88.601077] do_one_initcall+0x54/0x1bc
[ 88.604913] do_init_module+0x44/0x230
[ 88.608663] load_module+0x2110/0x27ec
[ 88.612404] __do_sys_finit_module+0xd0/0x130
[ 88.616753] __arm64_sys_finit_module+0x24/0x30
[ 88.621276] invoke_syscall+0x54/0x124
[ 88.625025] el0_svc_common.constprop.0+0x44/0xec
[ 88.629721] do_el0_svc+0x44/0xb0
[ 88.633027] el0_svc+0x20/0x60
[ 88.636074] el0t_64_sync_handler+0x1a4/0x1b0
[ 88.640423] el0t_64_sync+0x1a0/0x1a4
[ 88.644082] Code: 910003fd a90153f3 aa0003f3 aa0103f4 (f9417800)
[ 88.650166] ---[ end trace 226db3d5564c9b9a ]---

  • Hi

    I'll need way more context on what are you trying to do... Are you building adrv9002 as a module and it crashes? What branch are you using?

    Thanks!

    - Nuno Sá

  • I'm already using adrv with the TES generated code then, I come across that the tes code internally calling the navasa code api so, I tried to build the kernel module with the same procedure as the TES generated code like 

    adi_adrv9001_HwClose(adrv9001Device_0);
    adi_adrv9001_HwOpen(adrv9001Device_0, &spiSettings_5);
    adi_adrv9001_HwReset(adrv9001Device_0);
    after initialising the adrv device im getting the above error.And in the different case like if i avoid these 3 api and then go with the flow of the TES code the In all the api I'm getting -2 as error code which is (invalid param).Now My question is wether I'm doing correct for the kernel module,and what is the error and how to resolve this.
  • As seen in the other thread, that's not the procedure for running adrv9002 as a kernel module. You need to use the one we provide in our kernel tree.

    - Nuno Sá