Re: GPMI iMX6ull timeout on DMA

Greg Ungerer
2019-08-13T00:51:09Z

Hi Boris,

On 12/8/19 5:31 pm, Boris Brezillon wrote:
> On Mon, 12 Aug 2019 12:50:36 +1000
[snip]
> Hm, CTRL1 is identical. Can you dump all regs at the beginning and at
> the end of those funcs?

Here is a more complete dump of registers. Trace points are at
entry and exit of the respective functions in the different
kernel versions. Register dumping code is identical for both.

Linux version 4.16.0 (gerg@goober) (gcc version 4.8.3 (GCC)) #10 Tue Aug 13 10:24:28 AEST 2019
...
drivers/mtd/nand/gpmi-nand/gpmi-lib.c(1073): gpmi_begin(): ENTRY
HW_GPMI_CTRL0=0x00000000
HW_GPMI_CTRL1=0x01c4000c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000400
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00010203
HW_GPMI_TIMING1=0x00000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x00000000
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000000
r->clock[0]=22000000
nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
nand: Micron MT29F2G08ABAEAWP
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
gpmi-nand 1806000.gpmi-nand: enable the asynchronous EDO mode 5
drivers/mtd/nand/gpmi-nand/gpmi-lib.c(1073): gpmi_begin(): ENTRY
HW_GPMI_CTRL0=0x01800001
HW_GPMI_CTRL1=0x0104000c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000000
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00010203
HW_GPMI_TIMING1=0x05000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x00000000
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000101
r->clock[0]=99000000
drivers/mtd/nand/gpmi-nand/gpmi-lib.c(1136): gpmi_begin(): EXIT
HW_GPMI_CTRL0=0x01800001
HW_GPMI_CTRL1=0x01c6800c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000000
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00010101
HW_GPMI_TIMING1=0x90000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x00000000
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000101
r->clock[0]=99000000
Scanning device for bad blocks
5 ofpart partitions found on MTD device gpmi-nand
Creating 5 MTD partitions on "gpmi-nand":
0x000000000000-0x000000500000 : "u-boot"
0x000000500000-0x000000600000 : "u-boot-env"
0x000000600000-0x000000800000 : "log"
0x000000800000-0x000010000000 : "flash"
0x000000000000-0x000010000000 : "all"
gpmi-nand 1806000.gpmi-nand: driver registered.
...

Note that the first ENTRY dump has no matching EXIT dump. From the
code I assume it is returning from gpmi_begin() at the
"if (!hw.sample_delay_factor)" check.

And for the 5.1.14 kernel:

Linux version 5.1.14 (gerg@goober) (gcc version 4.8.3 (GCC)) #27 Tue Aug 13 10:20:32 AEST 2019
...
drivers/mtd/nand/raw/gpmi-nand/gpmi-lib.c(512): gpmi_nfc_apply_timings(): ENTRY
HW_GPMI_CTRL0=0x00000000
HW_GPMI_CTRL1=0x01c4000c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000400
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00010203
HW_GPMI_TIMING1=0x00000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x00000000
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000000
r->clock[0]=22000000
drivers/mtd/nand/raw/gpmi-nand/gpmi-lib.c(536): gpmi_nfc_apply_timings(): EXIT
HW_GPMI_CTRL0=0x00000000
HW_GPMI_CTRL1=0x0104000c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000400
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00020101
HW_GPMI_TIMING1=0x60000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x00000000
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000000
r->clock[0]=22000000
random: fast init done
nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
nand: Micron MT29F2G08ABAEAWP
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
drivers/mtd/nand/raw/gpmi-nand/gpmi-lib.c(512): gpmi_nfc_apply_timings(): ENTRY
HW_GPMI_CTRL0=0x01800001
HW_GPMI_CTRL1=0x0104000c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000000
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00020101
HW_GPMI_TIMING1=0x60000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x0000003f
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000101
r->clock[0]=22000000
drivers/mtd/nand/raw/gpmi-nand/gpmi-lib.c(536): gpmi_nfc_apply_timings(): EXIT
HW_GPMI_CTRL0=0x01800001
HW_GPMI_CTRL1=0x0104000c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000000
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00020101
HW_GPMI_TIMING1=0xb0000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x0000003f
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000101
r->clock[0]=22000000
drivers/mtd/nand/raw/gpmi-nand/gpmi-lib.c(512): gpmi_nfc_apply_timings(): ENTRY
HW_GPMI_CTRL0=0x01800001
HW_GPMI_CTRL1=0x0104000c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000000
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00020101
HW_GPMI_TIMING1=0xb0000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x000000e0
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000000
r->clock[0]=22000000
drivers/mtd/nand/raw/gpmi-nand/gpmi-lib.c(536): gpmi_nfc_apply_timings(): EXIT
HW_GPMI_CTRL0=0x01800001
HW_GPMI_CTRL1=0x01c6800c
HW_GPMI_COMPARE=0x00000000
HW_GPMI_ECCCTRL=0x00000000
HW_GPMI_ECCCOUNT=0x00000000
HW_GPMI_PAYLOAD=0x00000000
HW_GPMI_AUXILIARY=0x00000000
HW_GPMI_TIMING0=0x00010101
HW_GPMI_TIMING1=0xe0000000
HW_GPMI_TIMING2=0x23023336
HW_GPMI_DATA=0x000000e0
HW_GPMI_STAT=0xff000005
HW_GPMI_DEBUG=0x00000000
r->clock[0]=99000000
Scanning device for bad blocks
5 fixed-partitions partitions found on MTD device gpmi-nand
Creating 5 MTD partitions on "gpmi-nand":
0x000000000000-0x000000500000 : "u-boot"
0x000000500000-0x000000600000 : "u-boot-env"
0x000000600000-0x000000800000 : "log"
0x000000800000-0x000010000000 : "flash"
0x000000000000-0x000010000000 : "all"
gpmi-nand 1806000.gpmi-nand: driver registered.
...

Regards
Greg