@yipingwang I tried configuring reg property for FlexSPI Region #2 in device tree as below.
reg = <0x00 0x20c0000 0x00 0x10000>,
<0x04 0x10000000 0x00 0x00080000>; //512KB
I could see memory region listed in /proc/iomem after adding following code in the kenrel "drivers/spi/spi-nxp-fspi.c"
----------------------------------------------------
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "fspi_mmap");
...
+ if (!devm_request_mem_region(dev, res->start, resource_size(res),res->name)) {
+ dev_err(dev, "fspi can't request region for resource %pR\n", res);
+ ret = -EBUSY;
+ goto err_put_ctrl;
+ }
----------------------------------------------------
$cat /proc/iomem
....
020c0000-020cffff : 20c0000.spi fspi_base
410000000-41007ffff : fspi_mmap
....
Question:
I could use ioremap in a custom driver to map physical memory at base address 0x410000000.
However, when I get the kernel panic when I try to use the virtual address (from ioremap).
[ 636.001611] Internal error: synchronous external abort: 96000210 [#1] PREEMPT SMP
Am I missing any configuration here? Does nxp-fspi driver supports memory mapped access of FlexSPI Region #2 from below system memory map ?
System memory map
0x0000_2000_0000 0x0000_2FFF_FFFF 256MB FlexSPI Region #1
0x0004_0000_0000 0x0004_0FFF_FFFF 256MB SPI Hole
Collapsed away by remapping logic to merge FlexSPI Region #1
0x0004_1000_0000 0x0004_FFFF_FFFF 3.75GB FlexSPI Region #2(256MB-4GB) 3.75GB