Hello all,
I'm trying to get NAND working on an a20-olinuxino-micro board and it
does not quite work for me yet. I know the support of NAND storage
supposed to be somewhat incomplete or unstable at the moment, but
actually I'd like to just properly install a reasonably new u-boot (with
ethernet support) to NAND so as to avoid having the opaque boot0 and
boot1, and I've read such configuration was proven possible, although on
some cubie device, not olinuxino.
Currently, I've got 2 ways of installing u-boot with subsequent
successfull OS boot from network:
1. Mainline U-boot on a micro-sd card. All is working fine, except I'd
prefer to avoid any removable parts and wiggling junctures as much as
possible.
2. Mainline U-boot without SPL stored into a special partition on NAND
memory, which is only accessible when booted some outdated debian image
with 3.x kernel by means of some severely non-standard Allwinner
drivers. This is not only inconvenient to setup/modify/access, but
sometimes booting just randomly fails somewhere between boot0 and boot1.
Retrying after several seconds (after plugging off the power) usually
helps. Also, I've found that some time-critical application works more
reliably wrt performance when booted from sd-card as compared to this
NAND-boot0-boot1-uboot scenario, although uboot is the same and the
kernel and all userspace is the same. I suspect boot0/boot1 does some
unwanted (and unnecessary) hardware tweaking which then negatively
affects performance.
So, using various instructions and patches floating around, I've enabled
"Support for NAND on Allwinner SoCs" in my kernel (4.14), added &nfc to
dts, prepared mtd-utils, attempted to load sunxi_nand.
[ 67.072646] nand: Could not find valid ONFI parameter page; aborting
[ 67.079082] nand: device found, Manufacturer ID: 0xad, Chip ID: 0xd7
[ 67.085509] nand: Hynix NAND 4GiB 3,3V 8-bit
[ 67.089777] nand: 4096 MiB, MLC, erase size: 2048 KiB, page size:
8192, OOB size: 640
[ 67.100973] Bad block table not found for chip 0
[ 67.108481] Bad block table not found for chip 0
[ 67.113126] Scanning device for bad blocks
[ 67.147285] Bad eraseblock 16 at 0x0000021fe000
.... (repeated a lot)
Then I had to use a hack in nand_erase_nand() in order to workaround the
eraseblocks flood. My next findings are the following:
nanddump seem to dump something, but the actual data in first 200Mb does
not contain anything recognizable (32Kb@0 and 32Kb@2M look like filled
with random bytes, the rest looks like uninitialized or random bytes).
flash_erase does something, but it does not fix the "Bad eraseblock..."
flood however.
nandwrite and subsequent nanddump of e.g. u-boot-sunxi-with-spl.bin
shows that apparently something got stored, because the read data
matches perfectly the source.
Now leaving alone preparation of u-boot for NAND, I see two problems
already:
1. Initializing bad block table fails, also after flash_erase, probably
indicating something goes wrong;
2. Reading original (bootable Debian) NAND contents does not give any
recognizable strings but random garbage.
This feels like maybe physically some access takes place, but the
"encoding" is somehow wrong. I've seen some mentions of ECC_STRENGTH
setting, but I'm rather unsure how to deal with it.
Maybe it could be of some help that I have the debug serial output from
CT_Nandboot utility, see below.
Any hints?
Thank you!
Regards,
Nikolai
--------------------------------------------------------------------
CT_Nandboot output (trimmed):
[SCAN_DBG] ==============Nand Architecture Parameter==============
[SCAN_DBG] Nand Chip ID: 0xda94d7ad 0xffffffff
[SCAN_DBG] Nand Chip Count: 0x1
[SCAN_DBG] Nand Chip Connect: 0x1
[SCAN_DBG] Nand Rb Connect Mode: 0x1
[SCAN_DBG] Sector Count Of Page: 0x10
[SCAN_DBG] Page Count Of Block: 0x100
[SCAN_DBG] Block Count Of Die: 0x800
[SCAN_DBG] Plane Count Of Die: 0x2
[SCAN_DBG] Die Count Of Chip: 0x1
[SCAN_DBG] Bank Count Of Chip: 0x1
[SCAN_DBG] Optional Operation: 0x1188
[SCAN_DBG] Access Frequence: 0x1e
[SCAN_DBG] ECC Mode: 0x3
[SCAN_DBG] Read Retry Type: 0x10604
[SCAN_DBG] DDR Type: 0x0
[SCAN_DBG] =======================================================
[SCAN_DBG] ==============Optional Operaion Parameter==============
[SCAN_DBG] MultiPlaneReadCmd: 0x60, 0x60
[SCAN_DBG] MultiPlaneWriteCmd: 0x11, 0x81
[SCAN_DBG] MultiPlaneCopyReadCmd: 0x60, 0x60, 0x35
[SCAN_DBG] MultiPlaneCopyWriteCmd: 0x85, 0x11, 0x81
[SCAN_DBG] MultiPlaneStatusCmd: 0x70
[SCAN_DBG] InterBnk0StatusCmd: 0xf1
[SCAN_DBG] InterBnk1StatusCmd: 0xf2
[SCAN_DBG] BadBlockFlagPosition: 0x2
[SCAN_DBG] MultiPlaneBlockOffset: 0x1
[SCAN_DBG] =======================================================
NHW : nand hw scan ok
check nand version start.
Current nand driver version is 0x000000ff 0x00000000 0x00000002 0x00000012
Succeed in getting flash info.
--------------------------------------------------------------------
--
You received this message because you are subscribed to the Google Groups
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.