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.

Reply via email to