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.

Linux/PROCESSOR-SDK-AM335X: SDK upgrade to mainline kernel

Part Number: PROCESSOR-SDK-AM335X

Tool/software: Linux

Good morning,

I've upgraded my kernel to mainline version 4.9.13 while still using TI SDK 3.00.04. It seems to work very well for all functionality, except the custom eCAP driver that I created for 4.4.12 kernel in SDK 3.00.04 does not work with 4.9.13. I realize that this question may be a little out of scope of this forum but please let me know if you have any suggestions.

The driver fails when trying to read register values using ioread32. It seems to be able to map the memory and write to it properly, but always fails in the ioread32 command. Is there anything that I'm overlooking when pulling in mainline 4.9.13 kernel? (note that I've compiled my driver against 4.9.13 kernel sources)

Here's a snippet of my source code and kernel output.

Thanks!

Chris

if(request_mem_region(pwmss_phys_addr, ioremap_temp_size, "ecap") == NULL) {
printk(KERN_ALERT "eCAP: unable to request memory region\n");
return -1;
}

pwmss_addr = ioremap(pwmss_phys_addr, ioremap_temp_size);
if (pwmss_addr == NULL) {
printk(KERN_ALERT "eCAP: NULL pointer returned from ioremap\n");
return -1;
}
printk(KERN_INFO "eCAP: pwmss_addr mapped to %p\n", pwmss_addr); // Pointer initialized!

printk(KERN_INFO "eCAP: Preparing to write to register\n");

iowrite32(0x101, pwmss_addr + pwmss_clock_cfg_addr);

printk(KERN_INFO "eCAP: Preparing to read from register\n");

pwmss_clock_cfg = ioread32(pwmss_addr + pwmss_clock_cfg_addr);

printk(KERN_INFO "eCAP: Final pwmss clock configuration 0x%08x\n", pwmss_clock_cfg);

[ 44.088966] eCAP: device class registered correctly
[ 44.111539] eCAP: device class created correctly
[ 44.116367] eCAP: pwmss_addr mapped to fa300000
[ 44.143974] eCAP: Preparing to write to register
[ 44.155306] eCAP: Preparing to read from register
[ 44.166994] Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa300008
[ 44.174709] pgd = cbd20000
[ 44.177428] [fa300008] *pgd=48211452(bad)
[ 44.181478] Internal error: : 1028 [#1] PREEMPT ARM
[ 44.186377] Modules linked in: ecap_driver(O+) rtl8xxxu rtl8192cu rtl_usb rtl8192c_common rtlwifi musb_dsps musb_hdrc usbcore ti_am335x_adc omap_aes crypto_engine omap_sham omap_rng rng_core musb_am335x omap_wdt ti_am335x_tscadc sch_fq_codel
[ 44.208000] CPU: 0 PID: 573 Comm: modprobe Tainted: G O 4.9.13 #2
[ 44.215254] Hardware name: Generic AM33XX (Flattened Device Tree)
[ 44.221374] task: cbc08900 task.stack: cbcba000
[ 44.225950] PC is at ecap_init+0x240/0x260 [ecap_driver]
[ 44.231291] LR is at ecap_init+0x23c/0x260 [ecap_driver]
[ 44.236629] pc : [<bf11b240>] lr : [<bf11b23c>] psr: 600f0013
[ 44.236629] sp : cbcbbdd8 ip : 00000000 fp : 00000124
[ 44.248158] r10: 00000000 r9 : 00000001 r8 : cf7c9900
[ 44.253406] r7 : cf7c9908 r6 : fa300000 r5 : fa300000 r4 : bf119840
[ 44.259960] r3 : fa300000 r2 : 00000000 r1 : c0c0f440 r0 : 00000025
[ 44.266517] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
[ 44.273684] Control: 10c5387d Table: 8bd20019 DAC: 00000051
[ 44.279453] Process modprobe (pid: 573, stack limit = 0xcbcba210)
[ 44.285573] Stack: (0xcbcbbdd8 to 0xcbcbc000)
[ 44.289951] bdc0: 00000000 cbbf5380
[ 44.298171] bde0: ffffe000 bf11b000 cf7c98c0 c0101760 c0c38600 00000000 0040003f cf02f018
[ 44.306392] be00: 00000004 bf119688 00000000 cb855840 0040003e cff53e74 cbcba000 cf001e40
[ 44.314611] be20: cbbf5a40 c01dc910 00017530 cff53e74 cbcba000 cf001e40 cbbf5380 c0181638
[ 44.322831] be40: bf119640 00000001 cf7c98c0 cf7c9908 cf7c9900 00000001 3083671c c01a284c
[ 44.331050] be60: 00000001 bf119640 cbcbbf54 00000001 bf119640 c0181640 bf11964c 00007fff
[ 44.339269] be80: bf119640 c017eba8 ca306090 bf119688 00000000 bf1197fc 000004d8 bf11964c
[ 44.347488] bea0: c0803df8 00000000 c09a1b1c c09a1b80 c09a1b28 cbcbbf44 0000238c c01fe5a4
[ 44.355707] bec0: 0000238c 00000000 c01fec4c 00000000 00000000 00000000 00000000 00000000
[ 44.363925] bee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 44.372145] bf00: 00000000 00000000 7fffffff 00000000 00000003 0002925c 0000017b c0107924
[ 44.380363] bf20: cbcba000 00000000 0003b1f0 c0181c20 7fffffff 00000000 00000003 00000001
[ 44.388583] bf40: cb8550c0 d0ccb000 0000238c 00000000 00000002 d0ccb000 0000238c d0ccceb4
[ 44.396801] bf60: d0ccc06f d0ccc7e4 00000858 00000b78 00000000 00000000 00000000 00000b80
[ 44.405020] bf80: 0000001d 0000001e 00000015 00000012 00000010 00000000 00000000 0003a730
[ 44.413240] bfa0: 00000000 c0107760 00000000 0003a730 00000003 0002925c 00000000 00000000
[ 44.421458] bfc0: 00000000 0003a730 00000000 0000017b 0003b380 00000000 00000000 0003b1f0
[ 44.429678] bfe0: be88f8e0 be88f8d0 0001f5a4 b6f42df2 80080030 00000003 00000000 00000000
[ 44.437940] [<bf11b240>] (ecap_init [ecap_driver]) from [<c0101760>] (do_one_initcall+0x44/0x174)
[ 44.446865] [<c0101760>] (do_one_initcall) from [<c01a284c>] (do_init_module+0x60/0x394)
[ 44.455011] [<c01a284c>] (do_init_module) from [<c0181640>] (load_module+0x1d24/0x20f4)
[ 44.463062] [<c0181640>] (load_module) from [<c0181c20>] (SyS_finit_module+0xa8/0xb8)
[ 44.470940] [<c0181c20>] (SyS_finit_module) from [<c0107760>] (ret_fast_syscall+0x0/0x3c)
[ 44.479162] Code: e3090500 e34b0f11 eb421c88 e5943004 (e5931008)
[ 44.485285] ---[ end trace de281cb9e1708773 ]---