Tool/software: Linux
Hi,
I am trying to connect a fpga to gpmc on cs0 in 16bit multiplexed mode, i have done the following changes for dts
gpmc_pins_default {
pinctrl-single,pins = <
0x000 0x30 /* gpmc_ad0.gpmc_ad0 MODE0 | INPUT | PULLUP */
0x004 0x30 /* gpmc_ad1.gpmc_ad1 MODE0 | INPUT | PULLUP */
0x008 0x30 /* gpmc_ad2.gpmc_ad2 MODE0 | INPUT | PULLUP */
0x00C 0x30 /* gpmc_ad3.gpmc_ad3 MODE0 | INPUT | PULLUP */
0x010 0x30 /* gpmc_ad4.gpmc_ad4 MODE0 | INPUT | PULLUP */
0x014 0x30 /* gpmc_ad5.gpmc_ad5 MODE0 | INPUT | PULLUP */
0x018 0x30 /* gpmc_ad6.gpmc_ad6 MODE0 | INPUT | PULLUP */
0x01C 0x30 /* gpmc_ad7.gpmc_ad7 MODE0 | INPUT | PULLUP */
0x020 0x30 /* gpmc_ad8.gpmc_ad8 MODE0 | INPUT | PULLUP */
0x024 0x30 /* gpmc_ad9.gpmc_ad9 MODE0 | INPUT | PULLUP */
0x028 0x30 /* gpmc_ad10.gpmc_ad10 MODE0 | INPUT | PULLUP */
0x02C 0x30 /* gpmc_ad11.gpmc_ad11 MODE0 | INPUT | PULLUP */
0x030 0x30 /* gpmc_ad12.gpmc_ad12 MODE0 | INPUT | PULLUP */
0x034 0x30 /* gpmc_ad13.gpmc_ad13 MODE0 | INPUT | PULLUP */
0x038 0x30 /* gpmc_ad14.gpmc_ad14 MODE0 | INPUT | PULLUP */
0x03C 0x30 /* gpmc_ad15.gpmc_ad15 MODE0 | INPUT | PULLUP */
0x0B4 0x08 /* gpmc_cscn0.gpmc_cscn0 MODE0 | OUTPUT */
0x0C0 0x28 /* gpmc_clk.gpmc_clk MODE0 | INPUT */
0x0C4 0x08 /* gpmc_advn_ale.gpmc_advn_ale MODE0 | OUTPUT */
0x0C8 0x08 /* gpmc_oen_ren.gpmc_oen_ren MODE0 | OUTPUT */
0x0CC 0x08 /* gpmc_wen.gpmc_wen MODE0 | OUTPUT */
0x0D0 0x08 /* gpmc_ben0_cle.gpmc_ben0_cle MODE0 | OUTPUT */
0x0D4 0x08 /* gpmc_ben1_cle.gpmc_ben1_cle MODE0 | OUTPUT */
0x0D8 0x30 /* gpmc_wait0.gpmc_wait0 MODE0 | INPUT | PULLUP */
>;
};
gpmc@50000000 {
compatible = "ti,am3352-gpmc";
ti,hwmods = "gpmc";
reg = <0x50000000 0x37c>;
interrupts = <0x0 0xf 0x4>;
dmas = <0xb2 0x4 0x0>;
dma-names = "rxtx";
gpmc,num-cs = <0x8>;
gpmc,num-waitpins = <0x2>;
#address-cells = <0x2>;
#size-cells = <0x1>;
interrupt-controller;
#interrupt-cells = <0x2>;
gpio-controller;
#gpio-cells = <0x2>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&gpmc_pins_default>;
ranges = <0 0 0x08000000 0x10000000>;
fpga {
reg = <0 0 0x01000000>;
bank-width = <2>;
gpmc,mux-add-data = <2>;
gpmc,sync-clk-ps = <0>;
gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off-ns = <44>;
gpmc,cs-wr-off-ns = <44>;
gpmc,adv-on-ns = <6>;
gpmc,adv-rd-off-ns = <34>;
gpmc,adv-wr-off-ns = <44>;
gpmc,we-off-ns = <40>;
gpmc,oe-off-ns = <54>;
gpmc,access-ns = <64>;
gpmc,rd-cycle-ns = <82>;
gpmc,wr-cycle-ns = <82>;
gpmc,wr-access-ns = <40>;
gpmc,wr-data-mux-bus-ns = <0>;
#address-cells = <1>;
#size-cells = <1>;
};
};
Now when I access the by mapping from userspace using the following code (I get a dump [1]):
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h>
#include <sys/mman.h>
int main(int argc, char** argv)
{
int fd = open("/dev/mem", O_RDWR | O_SYNC); //O_SYNC makes the memory uncacheable
#if 1
volatile uint8_t *extmem;
extmem = (uint8_t *) mmap(NULL,0x10000000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x10000000);
volatile uint32_t * p32 = (uint32_t *) &extmem[0x1000020];
*p32 = 0xdeadbeef;
uint32_t val = *p32;
*p32 = 0xcafebabe;
uint32_t val2 = *p32;
printf("val=%#x\n", val);
printf("val=%#x\n", val2);
//printf("size=%d\n", sizeof(buffer));
//memcpy(extmem, buffer, sizeof(buffer)-1);
#endif
return(0) ;
}
Is there something I am missing which I need to do here ?
Dmesg Output
============
[ 0.412145] omap-gpmc 50000000.gpmc: could not find pctldev for node /ocp/l4@4a000000/scm@2000/pinmux@1400/gpmc_pins_default, deferring probe
[ 2.293608] omap-gpmc 50000000.gpmc: GPMC revision 6.0
[ 2.298811] gpmc_mem_init: disabling cs 0 mapped at 0x0-0x1000000
[ 2.305044] gpiochip_add: registered GPIOs 510 to 511 on device: omap-gpmc
[1] Core Dump
[ 11.893705] ------------[ cut here ]------------
[ 11.898364] WARNING: CPU: 0 PID: 498 at drivers/bus/omap_l3_noc.c:147 l3_interrupt_handler+0x25c/0x368()
[ 11.907886] 44000000.ocp:L3 Custom Error: MASTER MPU TARGET GPMC (Idle): Data Access in User mode during Functional access
[ 11.918974] Modules linked in:
[ 11.922052] CPU: 0 PID: 498 Comm: a.out Not tainted 4.4.32-00004-gd9240c6-dirty #76
[ 11.929740] Hardware name: Generic DRA74X (Flattened Device Tree)
[ 11.935857] Backtrace:
[ 11.938330] [<c0013150>] (dump_backtrace) from [<c001334c>] (show_stack+0x18/0x1c)
[ 11.945930] r7:c03125c8 r6:20070193 r5:00000000 r4:c0b185f4
[ 11.951655] [<c0013334>] (show_stack) from [<c02e440c>] (dump_stack+0x8c/0xa0)
[ 11.958914] [<c02e4380>] (dump_stack) from [<c00336e4>] (warn_slowpath_common+0x88/0xb8)
[ 11.967037] r7:c03125c8 r6:00000093 r5:00000009 r4:ecc37df0
[ 11.972762] [<c003365c>] (warn_slowpath_common) from [<c003374c>] (warn_slowpath_fmt+0x38/0x40)
[ 11.981495] r8:00000017 r7:c09eaab0 r6:00000000 r5:c09eab70 r4:c09eac14
[ 11.988271] [<c0033718>] (warn_slowpath_fmt) from [<c03125c8>] (l3_interrupt_handler+0x25c/0x368)
[ 11.997179] r3:eea11b40 r2:c09eac14
[ 12.000782] r4:80080003
[ 12.003339] [<c031236c>] (l3_interrupt_handler) from [<c007ed28>] (handle_irq_event_percpu+0xb4/0x160)
[ 12.012683] r10:c0b4524a r9:eea0f840 r8:00000017 r7:00000000 r6:00000000 r5:eea0f8a0
[ 12.020587] r4:eea2a040
[ 12.023140] [<c007ec74>] (handle_irq_event_percpu) from [<c007ee14>] (handle_irq_event+0x40/0x64)
[ 12.032046] r10:b6fb5000 r9:00000000 r8:ee808000 r7:00000000 r6:c0af24c4 r5:eea0f8a0
[ 12.039949] r4:eea0f840
[ 12.042504] [<c007edd4>] (handle_irq_event) from [<c0082140>] (handle_fasteoi_irq+0xc0/0x194)
[ 12.051062] r7:00000000 r6:c0af24c4 r5:eea0f8a0 r4:eea0f840
[ 12.056781] [<c0082080>] (handle_fasteoi_irq) from [<c007e354>] (generic_handle_irq+0x2c/0x3c)
[ 12.065426] r7:00000000 r6:00000000 r5:00000017 r4:c0ae6424
[ 12.071146] [<c007e328>] (generic_handle_irq) from [<c007e62c>] (__handle_domain_irq+0x64/0xbc)
[ 12.079884] [<c007e5c8>] (__handle_domain_irq) from [<c000948c>] (gic_handle_irq+0x40/0x7c)
[ 12.088267] r9:00000000 r8:fa213000 r7:fa212000 r6:ecc37fb0 r5:fa21200c r4:c0aec8b8
[ 12.096083] [<c000944c>] (gic_handle_irq) from [<c0014128>] (__irq_usr+0x48/0x60)
[ 12.103597] Exception stack(0xecc37fb0 to 0xecc37ff8)
[ 12.108670] 7fa0: a6e49000 10000000 a7e49020 cafebabe
[ 12.116883] 7fc0: 00010548 00000000 00010354 00000000 00000000 00000000 b6fb5000 bea09bbc
[ 12.125096] 7fe0: 00000000 bea09b90 000104cc 0001050c 80070010 ffffffff
[ 12.131735] r9:00000000 r8:30c5387d r7:30c5387d r6:ffffffff r5:80070010 r4:0001050c
[ 12.139554] ---[ end trace ce705d0da4493420 ]---
[ 12.145663] Unhandled fault: asynchronous external abort (0x1211) at 0x00000000
[ 12.147481] Unhandled fault: asynchronous external abort (0x1211) at 0x00000000
[ 12.147485] pgd = ed884540
[ 12.147495] [00000000] *pgd=ad91c003, *pmd=ad8d2003, *pte=00000000
[ 12.169250] pgd = ed9907c0
[ 12.171965] [00000000] *pgd=ad840003, *pmd=fd0a3003
[ 12.176919] ------------[ cut here ]------------
[ 12.181564] WARNING: CPU: 0 PID: 344 at drivers/bus/omap_l3_noc.c:147 l3_interrupt_handler+0x25c/0x368()
[ 12.191084] 44000000.ocp:L3 Custom Error: MASTER MPU TARGET GPMC (Read): Data Access in User mode during Functional access
[ 12.202171] Modules linked in:
[ 12.205245] CPU: 0 PID: 344 Comm: klogd Tainted: G W 4.4.32-00004-gd9240c6-dirty #76
[ 12.214153] Hardware name: Generic DRA74X (Flattened Device Tree)
[ 12.220269] Backtrace:
[ 12.222739] [<c0013150>] (dump_backtrace) from [<c001334c>] (show_stack+0x18/0x1c)
[ 12.230338] r7:c03125c8 r6:200c0193 r5:00000000 r4:c0b185f4
[ 12.236062] [<c0013334>] (show_stack) from [<c02e440c>] (dump_stack+0x8c/0xa0)
[ 12.243320] [<c02e4380>] (dump_stack) from [<c00336e4>] (warn_slowpath_common+0x88/0xb8)
[ 12.251442] r7:c03125c8 r6:00000093 r5:00000009 r4:ed969c68
[ 12.257162] [<c003365c>] (warn_slowpath_common) from [<c003374c>] (warn_slowpath_fmt+0x38/0x40)
[ 12.265895] r8:00000017 r7:c09eaab0 r6:00000002 r5:c09eab70 r4:c09eac14
[ 12.272670] [<c0033718>] (warn_slowpath_fmt) from [<c03125c8>] (l3_interrupt_handler+0x25c/0x368)
[ 12.281578] r3:eea11b40 r2:c09eac14
[ 12.285180] r4:80080003
[ 12.287736] [<c031236c>] (l3_interrupt_handler) from [<c007ed28>] (handle_irq_event_percpu+0xb4/0x160)
[ 12.297080] r10:c0b4524a r9:eea0f840 r8:00000017 r7:00000000 r6:00000000 r5:eea0f8a0
[ 12.304981] r4:eea2a040
[ 12.307535] [<c007ec74>] (handle_irq_event_percpu) from [<c007ee14>] (handle_irq_event+0x40/0x64)
[ 12.316442] r10:00000000 r9:ed968000 r8:ee808000 r7:00000000 r6:c0af24c4 r5:eea0f8a0
[ 12.324343] r4:eea0f840
[ 12.326898] [<c007edd4>] (handle_irq_event) from [<c0082140>] (handle_fasteoi_irq+0xc0/0x194)
[ 12.335458] r7:00000000 r6:c0af24c4 r5:eea0f8a0 r4:eea0f840
[ 12.341176] [<c0082080>] (handle_fasteoi_irq) from [<c007e354>] (generic_handle_irq+0x2c/0x3c)
[ 12.349822] r7:00000000 r6:ed969f40 r5:00000017 r4:c0ae6424
[ 12.355543] [<c007e328>] (generic_handle_irq) from [<c007e62c>] (__handle_domain_irq+0x64/0xbc)
[ 12.364280] [<c007e5c8>] (__handle_domain_irq) from [<c000948c>] (gic_handle_irq+0x40/0x7c)
[ 12.372663] r9:ed968000 r8:fa213000 r7:fa212000 r6:ed969e28 r5:fa21200c r4:c0aec8b8
[ 12.380481] [<c000944c>] (gic_handle_irq) from [<c0013e40>] (__irq_svc+0x40/0x74)
[ 12.387996] Exception stack(0xed969e28 to 0xed969e70)
[ 12.393069] 9e20: 00000000 c0b492c0 00000000 00000000 00000202 00000012
[ 12.401282] 9e40: ed968000 00000000 ee808000 ed968000 00000000 ed969ed4 ed969ed8 ed969e78
[ 12.409494] 9e60: c003759c c0037108 600c0113 ffffffff
[ 12.414564] r9:ed968000 r8:ee808000 r7:ed969e5c r6:ffffffff r5:600c0113 r4:c0037108
[ 12.422384] [<c0037074>] (__do_softirq) from [<c003759c>] (irq_exit+0xbc/0x11c)
[ 12.429721] r10:00000000 r9:ed968000 r8:ee808000 r7:00000000 r6:00000000 r5:00000012
[ 12.437627] r4:ffffe000
[ 12.440180] [<c00374e0>] (irq_exit) from [<c007e630>] (__handle_domain_irq+0x68/0xbc)
[ 12.448040] r5:00000012 r4:c0ae6424
[ 12.451648] [<c007e5c8>] (__handle_domain_irq) from [<c000948c>] (gic_handle_irq+0x40/0x7c)
[ 12.460033] r9:ed968000 r8:fa213000 r7:fa212000 r6:ed969f40 r5:fa21200c r4:c0aec8b8
[ 12.467854] [<c000944c>] (gic_handle_irq) from [<c0013e40>] (__irq_svc+0x40/0x74)
[ 12.475367] Exception stack(0xed969f40 to 0xed969f88)
[ 12.480440] 9f40: ed969fb0 00000001 00000000 600c0010 ed968000 00000000 ed969fb0 30c5387d
[ 12.488652] 9f60: 00000000 ed968000 00000000 ed969fac ed969fb0 ed969f90 c000faec c0012cf8
[ 12.496863] 9f80: 600c0113 ffffffff
[ 12.500363] r9:ed968000 r8:00000000 r7:ed969f74 r6:ffffffff r5:600c0113 r4:c0012cf8
[ 12.508186] [<c0012ca8>] (do_work_pending) from [<c000faec>] (slow_work_pending+0xc/0x20)
[ 12.516395] r7:30c5387d r6:ffffffff r5:600c0010 r4:b6e8873c
[ 12.522108] ---[ end trace ce705d0da4493421 ]---
Thanks,
Mike