Issue with Micron QSPI flash in 4.14-rc1
Andras Szemzo
szemzo.andras at gmail.com
Mon Sep 25 07:28:56 PDT 2017
Hi,
I try to use Micron QSPI flash (n25q512ax3) on my Atmel SAMV7 armv7m SoC, with the atmel-quadspi driver.
With 4.13.x kernel, everything was working, but after the mtd: spi-nor: parse Serial Flash Discoverable Parameters (SFDP) tables
patch this is not working, with the error:
ubi0 error: ubi_read_volume_table: the layout volume was not found
ubi0 error: ubi_attach_mtd_dev: failed to attach mtd2, error -22
After adding SPI_NOR_SKIP_SFDP to n25q512ax3 flags it works again with 4.14-rc1 kernel.
This flash has only JESD216 compatible SFDP table.
(For me it seems the flash reports supporting dual/quad read modes,
but with Micron flashes, the QUAD enable procedure isn’t supported by the spi-nor driver, and this can be the problem, but
it’s absolutely possible that I overlooked something and I’m completly wrong :)
Here are the flash parameteres with SFDP tables:
bfpt.dwords[0]: 0xfffb20e5
bfpt.dwords[1]: 0x1fffffff
bfpt.dwords[2]: 0x6b27eb29
bfpt.dwords[3]: 0xbb273b27
bfpt.dwords[4]: 0xffffffff
bfpt.dwords[5]: 0xbb27ffff
bfpt.dwords[6]: 0xeb29ffff
bfpt.dwords[7]: 0xd810200c
bfpt.dwords[8]: 0x00000000
bfpt.dwords[9]: 0x00000000
bfpt.dwords[10]: 0x00000000
bfpt.dwords[11]: 0x00000000
bfpt.dwords[12]: 0x00000000
bfpt.dwords[13]: 0x00000000
bfpt.dwords[14]: 0x00000000
bfpt.dwords[15]: 0x00000000
flash_parameter (size): 67108864
flash_parameter (page_size): 256
flash_parameter (hw_caps): 0x103bb
flash_parameter reads #0
num_mode_clocks: 0
num_wait_states: 0
opcode: 3
proto: 65793
flash_parameter reads #1
num_mode_clocks: 0
num_wait_states: 8
opcode: 11
proto: 65793
flash_parameter reads #2
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #3
num_mode_clocks: 1
num_wait_states: 7
opcode: 59
proto: 65794
flash_parameter reads #4
num_mode_clocks: 1
num_wait_states: 7
opcode: 187
proto: 66050
flash_parameter reads #5
num_mode_clocks: 1
num_wait_states: 7
opcode: 187
proto: 131586
flash_parameter reads #6
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #7
num_mode_clocks: 1
num_wait_states: 7
opcode: 107
proto: 65796
flash_parameter reads #8
num_mode_clocks: 1
num_wait_states: 9
opcode: 235
proto: 66564
flash_parameter reads #9
num_mode_clocks: 1
num_wait_states: 9
opcode: 235
proto: 263172
flash_parameter reads #10
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #11
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #12
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #13
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #14
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter page_programs #0
opcode: 2
proto: 65793
flash_parameter page_programs #1
opcode: 0
proto: 0
flash_parameter page_programs #2
opcode: 0
proto: 0
flash_parameter page_programs #3
opcode: 0
proto: 0
flash_parameter page_programs #4
opcode: 0
proto: 0
flash_parameter page_programs #5
opcode: 0
proto: 0
flash_parameter page_programs #6
opcode: 0
proto: 0
atmel_qspi 4007c000.qspi: n25q512ax3 (65536 Kbytes)
And here with the SPI_NOR_SKIP_SFDP added flag, using static parameters:
flash_parameter (size): 67108864
flash_parameter (page_size): 256
flash_parameter (hw_caps): 0x10083
flash_parameter reads #0
num_mode_clocks: 0
num_wait_states: 0
opcode: 3
proto: 65793
flash_parameter reads #1
num_mode_clocks: 0
num_wait_states: 8
opcode: 11
proto: 65793
flash_parameter reads #2
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #3
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #4
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #5
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #6
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #7
num_mode_clocks: 0
num_wait_states: 8
opcode: 107
proto: 65796
flash_parameter reads #8
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #9
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #10
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #11
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #12
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #13
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter reads #14
num_mode_clocks: 0
num_wait_states: 0
opcode: 0
proto: 0
flash_parameter page_programs #0
opcode: 2
proto: 65793
flash_parameter page_programs #1
opcode: 0
proto: 0
flash_parameter page_programs #2
opcode: 0
proto: 0
flash_parameter page_programs #3
opcode: 0
proto: 0
flash_parameter page_programs #4
opcode: 0
proto: 0
flash_parameter page_programs #5
opcode: 0
proto: 0
flash_parameter page_programs #6
opcode: 0
proto: 0
atmel_qspi 4007c000.qspi: n25q512ax3 (65536 Kbytes)
Here is the full bootlog with using SFDP tables:
xboot v1.0
QSPI boot selected
Trying protocol 0 opcode 0x9f
Found memory with JEDEC ID 0x0020ba20.
Found supported memory with JEDEC ID 0x0020ba20 (N25Q512Ax3).
QSPI Flash: Micron Quad mode disabled, will enable it
QSPI: dt blob: Read from 0x400000 to 0x71000000 size: 24572 bytes
QSPI: Image: Read from 0x00 to 0x70007FC0, size: 3252864 bytes
QSPI Flash: Micron Quad mode enabled, will disable it
starting kernel 0x70008001
Booting Linux on physical CPU 0x0
Linux version 4.14.0-rc1 (root at devel) (gcc version 4.9.2 ( 4.9.2-10)) #39 Mon Sep 25 15:30:07 CEST 2017
CPU: ARMv7-M [410fc271] revision 1 (ARMv7M), cr=00000000
CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
OF: fdt: Machine model: SAME70-sampione board
debug: ignoring loglevel setting.
Reserved memory: created DMA memory pool at 0x73e00000, size 2 MiB
OF: reserved mem: initialized node linux,dma, compatible id shared-dma-pool
Using ARMv7 PMSA Compliant MPU. Region independence: No, Used 4 of 16 regions
On node 0 totalpages: 15872
free_area_init_node: node 0, pgdat 70317be0, node_mem_map 73d80000
Normal zone: 124 pages used for memmap
Normal zone: 0 pages reserved
Normal zone: 15872 pages, LIFO batch:0
random: fast init done
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0
Built 1 zonelists, mobility grouping off. Total pages: 15748
Kernel command line: console=ttyS1,115200 rootfstype=ubifs rw ubi.mtd=2 root=ubi0:rootfs ignore_loglevel
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 59452K/63488K available (1780K kernel code, 143K rwdata, 1056K rodata, 80K init, 143K bss, 4036K reserved, 0K cma-reserved)
Virtual kernel memory layout:
vector : 0x00000000 - 0x00001000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0x00000000 - 0xffffffff (4095 MB)
lowmem : 0x70000000 - 0x73e00000 ( 62 MB)
modules : 0x70000000 - 0x74000000 ( 64 MB)
.text : 0x70008000 - 0x701c5368 (1781 kB)
.init : 0x702e8000 - 0x702fc000 ( 80 kB)
.data : 0x702fc000 - 0x7031fc28 ( 144 kB)
.bss : 0x70322280 - 0x70345edc ( 144 kB)
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
clocksource: timer at 4000c000:0,1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 101933890472 ns
sched_clock: 32 bits at 18MHz, resolution 53ns, wraps every 114532461029ns
Calibrating delay loop... 580.40 BogoMIPS (lpj=2902016)
pid_max: default: 4096 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
devtmpfs: initialized
DMA-API: preallocated 4096 debug entries
DMA-API: debugging enabled by kernel config
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
pinctrl core: initialized pinctrl subsystem
DMA: default coherent area is set
NET: Registered protocol family 16
gpio-at91 400e0e00.gpio: at address 400e0e00
gpio-at91 400e1000.gpio: at address 400e1000
gpio-at91 400e1200.gpio: at address 400e1200
gpio-at91 400e1400.gpio: at address 400e1400
gpio-at91 400e1600.gpio: at address 400e1600
pinctrl-at91 soc:pinctrl at 400e0e00: initialized AT91 pinctrl driver
at_xdmac 40078000.dma-controller: 24 channels, mapped at 0x40078000
AT91: Detected SoC family: same7
AT91: Detected SoC: same70q20, revision 0
at91_i2c 40018000.i2c: using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers
at91_i2c 40018000.i2c: AT91 i2c bus driver (hw version: 0x610).
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti at linux.it>
PTP clock support registered
clocksource: Switched to clocksource timer at 4000c000:0,1
NET: Registered protocol family 2
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
workingset: timestamp_bits=30 max_order=14 bucket_order=0
io scheduler noop registered
io scheduler deadline registered (default)
40024000.serial: ttyS0 at MMIO 0x40024000 (irq = 40, base_baud = 9375000) is a ATMEL_SERIAL
40028000.serial: ttyS1 at MMIO 0x40028000 (irq = 41, base_baud = 9375000) is a ATMEL_SERIAL
console [ttyS1] enabled
400e0800.serial: ttyS3 at MMIO 0x400e0800 (irq = 42, base_baud = 9375000) is a ATMEL_SERIAL
400e0a00.serial: ttyS4 at MMIO 0x400e0a00 (irq = 43, base_baud = 9375000) is a ATMEL_SERIAL
400e1a00.serial: ttyS5 at MMIO 0x400e1a00 (irq = 44, base_baud = 9375000) is a ATMEL_SERIAL
400e1e00.serial: ttyS7 at MMIO 0x400e1e00 (irq = 45, base_baud = 9375000) is a ATMEL_SERIAL
atmel_qspi 4007c000.qspi: n25q512ax3 (65536 Kbytes)
3 ofpart partitions found on MTD device 4007c000.qspi
Creating 3 MTD partitions on "4007c000.qspi":
0x000000000000-0x000000400000 : "qspi-linux-kernel"
0x000000400000-0x000000420000 : "qspi-device-tree"
0x000000420000-0x000004000000 : "qspi-rootfs"
atmel_spi 40008000.spi: Using dma0chan2 (tx) and dma0chan3 (rx) for DMA transfers
atmel_spi 40008000.spi: Using FIFO (0 data)
atmel_spi 40008000.spi: Atmel SPI Controller version 0x232 at 0x40008000 (irq 37)
libphy: Fixed MDIO Bus: probed
CAN device driver interface
m_can 40034000.can: m_can device registered (irq=25, version=30)
libphy: MACB_mii_bus: probed
NS DP83848C 10/100 Mbps PHY 40050000.ethernet-ffffffff:01: attached PHY driver [NS DP83848C 10/100 Mbps PHY] (mii_bus:phy_addr=40050000.ethernet-ffffffff:01, irq=52)
macb 40050000.ethernet eth0: Cadence GEM rev 0x00020203 at 0x40050000 irq 49 (02:97:2d:60:64:39)
rtc rtc0: invalid alarm value: 1900-1-1 0:0:0
at91_rtc 400e1860.rtc: registered as rtc0
at91_rtc 400e1860.rtc: AT91 Real Time Clock driver.
rtc-at91sam9 400e1830.rtt: rtc core: registered 400e1830.rtt as rtc1
rtc-at91sam9 400e1830.rtt: rtc1: SET TIME!
i2c /dev entries driver
AT91: Starting after software reset
at91sam9_wdt: enabled (heartbeat=8 sec, nowayout=0)
atmel_mci 40000000.mmc: version: 0x600
atmel_mci 40000000.mmc: using dma0chan4 for DMA transfers
atmel_mci 40000000.mmc: Atmel MCI controller at 0x40000000 irq 36, 1 slots
atmel_aes 4006c000.aes: version: 0x201
atmel_aes 4006c000.aes: Atmel AES - Using dma0chan5, dma0chan6 for DMA transfers
iio iio:device0: freq: 200000, startup: 3, prescal: 32
samv7_adc 4003c000.adc: version: 0x213
iio iio:device1: freq: 200000, startup: 3, prescal: 32
samv7_adc 40064000.adc: version: 0x213
samv7_dac 40040000.dac: f_per: 150000000, prescal: 11, MR: 0xb000000, ACR: 0x8
samv7_dac 40040000.dac: version: 0x306
NET: Registered protocol family 17
can: controller area network core (rev 20170425 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20170425)
can: broadcast manager protocol (rev 20170425 t)
can: netlink gateway (rev 20170425) max_hops=1
ubi0: default fastmap pool size: 45
ubi0: default fastmap WL pool size: 22
ubi0: attaching mtd2
mmc0: host does not support reading read-only switch, assuming write-enable
mmc0: new high speed SDHC card at address aaaa
mmcblk0: mmc0:aaaa SL08G 7.40 GiB
mmcblk0: p1 p2
ubi0: scanning is finished
ubi0 error: ubi_read_volume_table: the layout volume was not found
ubi0 error: ubi_attach_mtd_dev: failed to attach mtd2, error -22
UBI error: cannot attach mtd2
at91_rtc 400e1860.rtc: setting system clock to 2012-01-01 00:02:11 UTC (1325376131)
atmel_usart 40028000.serial: using dma0chan7 for rx DMA transfers
atmel_usart 40028000.serial: using dma0chan8 for tx DMA transfers
VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error -19
Please append a correct "root=" boot option; here are the available partitions:
b300 7761920 mmcblk0
driver: mmcblk
b301 131072 mmcblk0p1 3e7fd08e-01
b302 7629824 mmcblk0p2 3e7fd08e-02
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper Not tainted 4.14.0-rc1 #39
Hardware name: Generic DT based system
[<7000c9ad>] (unwind_backtrace) from [<7000b59f>] (show_stack+0xb/0xc)
[<7000b59f>] (show_stack) from [<7000ee71>] (panic+0x71/0x180)
[<7000ee71>] (panic) from [<702e8997>] (mount_block_root+0x187/0x1ec)
[<702e8997>] (mount_block_root) from [<702e8a9d>] (prepare_namespace+0x4d/0xf0)
[<702e8a9d>] (prepare_namespace) from [<702e871d>] (kernel_init_freeable+0x101/0x144)
[<702e871d>] (kernel_init_freeable) from [<701c28bb>] (kernel_init+0x7/0x98)
[<701c28bb>] (kernel_init) from [<70009d51>] (ret_from_fork+0x11/0x20)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
More information about the linux-mtd
mailing list