* nand_base.c:nand_get_flash_type() test results
@ 2011-10-12 15:26 Angus CLARK
2011-10-14 13:57 ` Artem Bityutskiy
2011-10-16 14:33 ` Mike Dunn
0 siblings, 2 replies; 7+ messages in thread
From: Angus CLARK @ 2011-10-12 15:26 UTC (permalink / raw)
To: linux-mtd; +Cc: Angus CLARK
[-- Attachment #1: Type: text/plain, Size: 3709 bytes --]
Hi All,
While attempting to add support for some of the more recent NAND devices, I
ended up refactoring nand_get_flash_type() code. The refactoring was primarily
aimed at simplifying the way in which the growing number 'READID' decoding
exceptions could be accommodated.
The refactored code was tested on the data found at
http://www.linux-mtd.infradead.org/nand-data/nanddata.html, with a few extra
devices added along the way (179 devices in total).
I thought I would share the results here, partly for anyone else who might be
interested, but also to judge whether it would be worth me porting the code for
inclusion in mtd-2.6 (I currently work on a 2.6.32 derived tree!).
The results are attached as a CSV file, with a few selected results included
in-line below.
Notes:
[1] The table presents the results from 3 versions of nand_get_flash_type():
'mtd-2.6' - from the Linux-MTD git tree
'l2-mtd-2.6' - from Artem's 'MTD ML' git tree
'devel-mtd' - my development code
[2] Devices listed in table as "ONFI-only" were not tested
[3] Toshiba devices were not tested, since the datasheets only include the
decode table, not the actual READID signatures.
[4] The results assume "NAND_SCAN_BYTE1AND6" is valid and correct (affecting
ST/Numonyx LP NAND devices). (See previous emails on this topic!)
[5] "don't care" READID bytes are treated as 0xff, since this provides the best
indication of when the data is relied upon incorrectly. This is perhaps a bit
unfair to the existing code, since often the devices will output 0x00 for "don't
care" bytes, which causes far fewer errors in practice.
Sample results:
Name READID #CS Size Page OOB BLK BW C Bad Block
--------------------------------------------------------------------------------
HY27US1612(1/2)B 0xAD56 1 : 64 512 16 16 x16 1 1st+2nd/6th
mtd-2.6 : 64 512 16 16 x16 1 1st+2nd/1st FAIL
l2-mtd-2.6 : 64 512 16 16 x16 1 1st+2nd/1st FAIL
devel-mtd : 64 512 16 16 x16 1 1st+2nd/6th PASS
H27UAG8T2A 0xADD594254441 1 : 2048 4096 224 512 x8 2 last/1st
mtd-2.6 : 2048 2048 64 256 x8 2 last/1st FAIL
l2-mtd-2.6 : 2048 2048 64 256 x8 2 last/1st FAIL
devel-mtd : 2048 4096 224 512 x8 2 last/1st PASS
H27UBG8T2A 0xADD7949A7442 1 : 4096 8192 448 2048 x8 2 1st+last/1st
mtd-2.6 : 4096 4096 64 128 x8 2 last/1st FAIL
l2-mtd-2.6 : 4096 4096 64 128 x8 2 last/1st FAIL
devel-mtd : 4096 8192 448 2048 x8 2 1st+last/1st PASS
K9K8G08U0B 0xECDC519558 1 : 1024 2048 64 128 x8 1 1st+2nd/1st
mtd-2.6 : 512 2048 64 128 x8 1 1st+2nd/1st FAIL
l2-mtd-2.6 : 512 2048 64 128 x8 1 1st+2nd/1st FAIL
devel-mtd : 1024 2048 64 128 x8 1 1st+2nd/1st PASS
K9GBG08U0M 0xECD794725442 1 : 4096 8192 436 1024 x8 2 1st+last/1st
mtd-2.6 : 4096 8192 436 1024 x8 2 last/1st FAIL
l2-mtd-2.6 : 4096 8192 436 1024 x8 2 last/1st FAIL
devel-mtd : 4096 8192 436 1024 x8 2 1st+last/1st PASS
NAND01GR3B2B 0x20A18015 1 : 128 2048 64 128 x8 1 1st/1st+6th
mtd-2.6 : 128 2048 64 128 x8 1 1st/1st+6th PASS
l2-mtd-2.6 : 128 2048 64 128 x8 1 1st/1st FAIL
devel-mtd : 128 2048 64 128 x8 1 1st/1st+6th PASS
Cheers,
Angus
[-- Attachment #2: nand_get_flash_type-results.csv --]
[-- Type: text/plain, Size: 36986 bytes --]
Name,READID/code_base,#CS,Size (MiB),Page,OOB,Block (KiB),Bus Width,Bits per cell,Bad Block Marker (Page/OOB),Decode
HY27SS08561A,0xAD35,1,32,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,32,512,16,16,x8,1,1st+2nd/6th, PASS
HY27SS16561A,0xAD45,1,32,512,16,16,x16,1,1st+2nd/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,devel-mtd,,32,512,16,16,x16,1,1st+2nd/1st, PASS
HY27US08561A,0xAD75,1,32,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,32,512,16,16,x8,1,1st+2nd/6th, PASS
HY27US16561A,0xAD55,1,32,512,16,16,x16,1,1st+2nd/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,devel-mtd,,32,512,16,16,x16,1,1st+2nd/1st, PASS
HY27US0812(1/2)B,0xAD76,1,64,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st+2nd/6th, PASS
HY27US1612(1/2)B,0xAD56,1,64,512,16,16,x16,1,1st+2nd/6th,,
,mtd-2.6,,64,512,16,16,x16,1,1st+2nd/1st, FAIL
,l2-mtd-2.6,,64,512,16,16,x16,1,1st+2nd/1st, FAIL
,devel-mtd,,64,512,16,16,x16,1,1st+2nd/6th, PASS
HY27US081G1M,0xAD79A500,1,128,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,128,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,128,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,128,512,16,16,x8,1,1st+2nd/6th, PASS
HY27US161G1M,0xAD74A500,1,128,512,16,16,x16,1,1st+2nd/1st,,
,mtd-2.6,,128,512,16,16,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,128,512,16,16,x16,1,1st+2nd/1st, PASS
,devel-mtd,,128,512,16,16,x16,1,1st+2nd/1st, PASS
HY27SF081G2M,0xADA1XX15,1,128,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,l2-mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27SF161G2M,0xADADXX55,1,128,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x16,4,last/1st, FAIL
,l2-mtd-2.6,,128,2048,64,128,x16,4,last/1st, FAIL
,devel-mtd,,128,2048,64,128,x16,1,1st+2nd/1st, PASS
HY27UF081G2M,0xADF1XX15,1,128,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,l2-mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UF161G2M,0xADC1XX55,1,128,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x16,4,last/1st, FAIL
,l2-mtd-2.6,,128,2048,64,128,x16,4,last/1st, FAIL
,devel-mtd,,128,2048,64,128,x16,1,1st+2nd/1st, PASS
HY27UF081G2A,0xADF1801D,1,128,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UF161G2A,0xADC1805D,1,128,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x16,1,1st+2nd/1st, PASS
,devel-mtd,,128,2048,64,128,x16,1,1st+2nd/1st, PASS
HY27UF082G2M,0xADDAXX15,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,4,last/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x8,4,last/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UF162G2M,0xADCAXX55,1,256,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x16,4,last/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x16,4,last/1st, FAIL
,devel-mtd,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
HY27UF082G2A,0xADDA801D00,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UF162G2A,0xADCA805D00,1,256,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
HY27UF082G2B,0xADDA109544,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UF162G2B,0xADCA10D544,1,256,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
HY27UG088G5M,0xADDC8095,2,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UG088GDM,0xADDC8095,2,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UH08AG5M,0xADD3C195,2,2048,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UH08AGDM,0xADD3C195,2,2048,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
HY27UH08AG5B,0xADD3519558,2,2048,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
H27UAG8T2A,0xADD594254441,1,2048,4096,224,512,x8,2,last/1st,,
,mtd-2.6,,2048,2048,64,256,x8,2,last/1st, FAIL
,l2-mtd-2.6,,2048,2048,64,256,x8,2,last/1st, FAIL
,devel-mtd,,2048,4096,224,512,x8,2,last/1st, PASS
H27UBG8T2A,0xADD7949A7442,1,4096,8192,448,2048,x8,2,1st+last/1st,,
,mtd-2.6,,4096,4096,64,128,x8,2,last/1st, FAIL
,l2-mtd-2.6,,4096,4096,64,128,x8,2,last/1st, FAIL
,devel-mtd,,4096,8192,448,2048,x8,2,1st+last/1st, PASS
K9F5608D0C,0xEC75,1,32,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,32,512,16,16,x8,1,1st+2nd/6th, PASS
K9F5608Q0C,0xEC35,1,32,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,32,512,16,16,x8,1,1st+2nd/6th, PASS
K9F5608U0C,0xEC75,1,32,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,32,512,16,16,x8,1,1st+2nd/6th, PASS
K9F5616D0C,0xEC55,1,32,512,16,16,x16,1,1st+2nd/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,devel-mtd,,32,512,16,16,x16,1,1st+2nd/1st, PASS
K9F5616Q0C,0xEC45,1,32,512,16,16,x16,1,1st+2nd/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,devel-mtd,,32,512,16,16,x16,1,1st+2nd/1st, PASS
K9F5616U0C,0xEC55,1,32,512,16,16,x16,1,1st+2nd/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, PASS
,devel-mtd,,32,512,16,16,x16,1,1st+2nd/1st, PASS
K9F1208B0B,0xEC76A5C0,1,64,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st+2nd/6th, PASS
K9F1208U0B,0xEC76A5C0,1,64,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st+2nd/6th, PASS
K9F1208R0B,0xEC36A5C0,1,64,512,16,16,x8,1,1st+2nd/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st+2nd/6th, PASS
K9F1G08U0A,0xECF1XX15,1,128,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,l2-mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F1G08Q0A,0xECF1XX15,1,128,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,l2-mtd-2.6,,128,2048,64,128,x8,4,last/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F1G08U0B,0xECF1009540,1,128,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F1G08U0D,0xECF1001540,1,128,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,128,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F2G08U0M,0xECDA8015,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F2G16U0M,0xECCA8055,1,256,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
K9K4G08U1M,0xECDA8015,2,512,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F2G08U0A,0xECDA109544,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F2G08R0A,0xECAA001544,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F2G08B0B,0xECDA109544,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F2G08U0B,0xECDA109544,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F2G08U0C,0xECDA109544,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F4G08U0M,0xECDC109554,1,512,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
K9K8G08U1M,0xECDC109554,2,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F4G08U0A,0xECDC109554,1,512,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
K9K8G08U1A,0xECDC109554,2,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
K9F8G08B0M,0xECD310A664,1,1024,4096,128,256,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,4096,128,256,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,4096,128,256,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,4096,128,256,x8,1,1st+2nd/1st, PASS
K9F8G08U0M,0xECD310A664,1,1024,4096,128,256,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,4096,128,256,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,4096,128,256,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,4096,128,256,x8,1,1st+2nd/1st, PASS
K9KAG08U1M,0xECD310A664,2,2048,4096,128,256,x8,1,1st+2nd/1st,,
,mtd-2.6,,2048,4096,128,256,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,2048,4096,128,256,x8,1,1st+2nd/1st, PASS
,devel-mtd,,2048,4096,128,256,x8,1,1st+2nd/1st, PASS
K9K8G08U0A,0xECD3519558,1,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
K9WAG08U1A,0xECD3519558,2,2048,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
K9NBG08U5A,0xECD3519558,4,4096,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,4096,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,4096,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,4096,2048,64,128,x8,1,1st+2nd/1st, PASS
K9K8G08U0B,0xECDC519558,1,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, FAIL
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
K9WAG08U1B,0xECDC519558,2,2048,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, FAIL
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, FAIL
,devel-mtd,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
K9G8G08B0M,0xECD3142564,1,1024,2048,64,256,x8,2,last/1st,,
,mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,l2-mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,devel-mtd,,1024,2048,64,256,x8,2,last/1st, PASS
K9G8G08U0M,0xECD3142564,1,1024,2048,64,256,x8,2,last/1st,,
,mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,l2-mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,devel-mtd,,1024,2048,64,256,x8,2,last/1st, PASS
K9LAG08U1M,0xECD3142564,2,2048,2048,64,256,x8,2,last/1st,,
,mtd-2.6,,2048,2048,64,256,x8,2,last/1st, PASS
,l2-mtd-2.6,,2048,2048,64,256,x8,2,last/1st, PASS
,devel-mtd,,2048,2048,64,256,x8,2,last/1st, PASS
K9G8G08B0A,0xECD314A564,1,1024,2048,64,256,x8,2,last/1st,,
,mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,l2-mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,devel-mtd,,1024,2048,64,256,x8,2,last/1st, PASS
K9G8G08U0A,0xECD314A564,1,1024,2048,64,256,x8,2,last/1st,,
,mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,l2-mtd-2.6,,1024,2048,64,256,x8,2,last/1st, PASS
,devel-mtd,,1024,2048,64,256,x8,2,last/1st, PASS
K9LAG08U1A,0xECD314A564,2,2048,2048,64,256,x8,2,last/1st,,
,mtd-2.6,,2048,2048,64,256,x8,2,last/1st, PASS
,l2-mtd-2.6,,2048,2048,64,256,x8,2,last/1st, PASS
,devel-mtd,,2048,2048,64,256,x8,2,last/1st, PASS
K9GAG08B0D,0xECD594293441,1,2048,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,2048,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,2048,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,2048,4096,218,512,x8,2,last/1st, PASS
K9GAG08U0D,0xECD594293441,1,2048,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,2048,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,2048,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,2048,4096,218,512,x8,2,last/1st, PASS
K9LBG08U1D,0xECD594293441,2,4096,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,4096,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,4096,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,4096,4096,218,512,x8,2,last/1st, PASS
K9HCG08U5D,0xECD594293441,4,8192,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,8192,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,8192,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,8192,4096,218,512,x8,2,last/1st, PASS
K9GAG08U0E,0xECD584725042,1,2048,8192,436,1024,x8,2,1st+last/1st,,
,mtd-2.6,,2048,8192,436,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,2048,8192,436,1024,x8,2,last/1st, FAIL
,devel-mtd,,2048,8192,436,1024,x8,2,1st+last/1st, PASS
K9LBG08U0E,0xECD7C5725442,1,4096,8192,436,1024,x8,2,1st+last/1st,,
,mtd-2.6,,4096,8192,436,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,4096,8192,436,1024,x8,2,last/1st, FAIL
,devel-mtd,,4096,8192,436,1024,x8,2,1st+last/1st, PASS
K9HCG08U1E,0xECD7C5725442,2,8192,8192,436,1024,x8,2,1st+last/1st,,
,mtd-2.6,,8192,8192,436,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,8192,8192,436,1024,x8,2,last/1st, FAIL
,devel-mtd,,8192,8192,436,1024,x8,2,1st+last/1st, PASS
K9LBG08U0M,0xECD755B678,1,4096,4096,128,512,x8,2,last/1st,,
,mtd-2.6,,4096,4096,128,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,4096,4096,128,512,x8,2,last/1st, PASS
,devel-mtd,,4096,4096,128,512,x8,2,last/1st, PASS
K9HCG08U1M,0xECD755B678,2,8192,4096,128,512,x8,2,last/1st,,
,mtd-2.6,,8192,4096,128,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,8192,4096,128,512,x8,2,last/1st, PASS
,devel-mtd,,8192,4096,128,512,x8,2,last/1st, PASS
K9MDG08U5M,0xECD755B678,4,16384,4096,128,512,x8,2,last/1st,,
,mtd-2.6,,16384,4096,128,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,16384,4096,128,512,x8,2,last/1st, PASS
,devel-mtd,,16384,4096,128,512,x8,2,last/1st, PASS
K9LBG08U0D,0xECD7D5293841,1,4096,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,4096,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,4096,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,4096,4096,218,512,x8,2,last/1st, PASS
K9HCG08U1D,0xECD7D5293841,2,8192,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,8192,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,8192,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,8192,4096,218,512,x8,2,last/1st, PASS
K9MDG08U5D,0xECD7D5293841,4,16384,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,16384,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,16384,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,16384,4096,218,512,x8,2,last/1st, PASS
K9PDG08U5D,0xECD7D5293841,4,16384,4096,218,512,x8,2,last/1st,,
,mtd-2.6,,16384,4096,218,512,x8,2,last/1st, PASS
,l2-mtd-2.6,,16384,4096,218,512,x8,2,last/1st, PASS
,devel-mtd,,16384,4096,218,512,x8,2,last/1st, PASS
K9GBG08U0M,0xECD794725442,1,4096,8192,436,1024,x8,2,1st+last/1st,,
,mtd-2.6,,4096,8192,436,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,4096,8192,436,1024,x8,2,last/1st, FAIL
,devel-mtd,,4096,8192,436,1024,x8,2,1st+last/1st, PASS
K9LCG08U1M,0xECD794725442,2,8192,8192,436,1024,x8,2,1st+last/1st,,
,mtd-2.6,,8192,8192,436,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,8192,8192,436,1024,x8,2,last/1st, FAIL
,devel-mtd,,8192,8192,436,1024,x8,2,1st+last/1st, PASS
K9HDG08U5M,0xECD794725442,4,16384,8192,436,1024,x8,2,1st+last/1st,,
,mtd-2.6,,16384,8192,436,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,16384,8192,436,1024,x8,2,last/1st, FAIL
,devel-mtd,,16384,8192,436,1024,x8,2,1st+last/1st, PASS
K9GBG08U0A,0xECD794766443,1,4096,8192,640,1024,x8,2,1st+last/1st,,
,mtd-2.6,,4096,8192,128,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,4096,8192,128,1024,x8,2,last/1st, FAIL
,devel-mtd,,4096,8192,640,1024,x8,2,1st+last/1st, PASS
K9LCG08U1A,0xECD794766443,2,8192,8192,640,1024,x8,2,1st+last/1st,,
,mtd-2.6,,8192,8192,128,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,8192,8192,128,1024,x8,2,last/1st, FAIL
,devel-mtd,,8192,8192,640,1024,x8,2,1st+last/1st, PASS
K9HDG08U5A,0xECD794766443,4,16384,8192,640,1024,x8,2,1st+last/1st,,
,mtd-2.6,,16384,8192,128,1024,x8,2,last/1st, FAIL
,l2-mtd-2.6,,16384,8192,128,1024,x8,2,last/1st, FAIL
,devel-mtd,,16384,8192,640,1024,x8,2,1st+last/1st, PASS
MT29F2G08AAB,0x2CDAXX15,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x8,4,1st+2nd/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F2G16AAB,0x2CCAXX55,1,256,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x16,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x16,4,1st+2nd/1st, FAIL
,devel-mtd,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
MT29F4G08BAB,0x2CDCXX15,1,512,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x8,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,512,2048,64,128,x8,4,1st+2nd/1st, FAIL
,devel-mtd,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F4G16BAB,0x2CCCXX55,1,512,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x16,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,512,2048,64,128,x16,4,1st+2nd/1st, FAIL
,devel-mtd,,512,2048,64,128,x16,1,1st+2nd/1st, PASS
MT29F8G08FAB,0x2CDCXX15,2,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,1024,2048,64,128,x8,4,1st+2nd/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F2G08AAC,0x2CDAXX15,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x8,4,1st+2nd/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F2G16AAC,0x2CCAXX55,1,256,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x16,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x16,4,1st+2nd/1st, FAIL
,devel-mtd,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
MT29F2G08ABC,0x2CAAXX15,1,256,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x8,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x8,4,1st+2nd/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F2G16ABC,0x2CBAXX55,1,256,2048,64,128,x16,1,1st+2nd/1st,,
,mtd-2.6,,256,2048,64,128,x16,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,256,2048,64,128,x16,4,1st+2nd/1st, FAIL
,devel-mtd,,256,2048,64,128,x16,1,1st+2nd/1st, PASS
MT29F4G08BAC,0x2CDCXX15,1,512,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x8,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,512,2048,64,128,x8,4,1st+2nd/1st, FAIL
,devel-mtd,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F8G08FAC,0x2CDCXX15,2,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,4,1st+2nd/1st, FAIL
,l2-mtd-2.6,,1024,2048,64,128,x8,4,1st+2nd/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F4G08AAA,0x2CDC909554,1,512,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,512,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F8G08BAA,0x2CD3D19558,1,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F8G08DAA,0x2CDC909554,2,1024,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F16G08FAA,0x2CD3D19558,2,2048,2048,64,128,x8,1,1st+2nd/1st,,
,mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,l2-mtd-2.6,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
,devel-mtd,,2048,2048,64,128,x8,1,1st+2nd/1st, PASS
MT29F8G08MAA,0x2CD394A564,1,1024,2048,64,256,x8,2,1st+2nd/1st,,
,mtd-2.6,,1024,2048,64,256,x8,2,1st+2nd/1st, PASS
,l2-mtd-2.6,,1024,2048,64,256,x8,2,1st+2nd/1st, PASS
,devel-mtd,,1024,2048,64,256,x8,2,1st+2nd/1st, PASS
MT29F16G08QAA,0x2CD394A564,2,2048,2048,64,256,x8,2,1st+2nd/1st,,
,mtd-2.6,,2048,2048,64,256,x8,2,1st+2nd/1st, PASS
,l2-mtd-2.6,,2048,2048,64,256,x8,2,1st+2nd/1st, PASS
,devel-mtd,,2048,2048,64,256,x8,2,1st+2nd/1st, PASS
MT29F32G08TAA,0x2CD5D5A568,2,4096,2048,64,256,x8,2,1st+2nd/1st,,
,mtd-2.6,,4096,2048,64,256,x8,2,1st+2nd/1st, PASS
,l2-mtd-2.6,,4096,2048,64,256,x8,2,1st+2nd/1st, PASS
,devel-mtd,,4096,2048,64,256,x8,2,1st+2nd/1st, PASS
NAND128R3A,0x2033,1,16,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,16,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,16,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,16,512,16,16,x8,1,1st/6th, PASS
NAND128W3A,0x2073,1,16,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,16,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,16,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,16,512,16,16,x8,1,1st/6th, PASS
NAND128R4A,0x2043,1,16,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,16,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,16,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,16,512,16,16,x16,1,1st/1st, PASS
NAND128W4A,0x2053,1,16,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,16,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,16,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,16,512,16,16,x16,1,1st/1st, PASS
NAND256R3A,0x2035,1,32,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,32,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,32,512,16,16,x8,1,1st/6th, PASS
NAND256W3A,0x2075,1,32,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,32,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,32,512,16,16,x8,1,1st/6th, PASS
NAND256R4A,0x2045,1,32,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,32,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,32,512,16,16,x16,1,1st/1st, PASS
NAND256W4A,0x2055,1,32,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,32,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,32,512,16,16,x16,1,1st/1st, PASS
NAND512R3A,0x2036,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512W3A,0x2076,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512R4A,0x2046,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND512W4A,0x2056,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND512R3A2C,0x2036,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512W3A2C,0x2076,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512R4A2C,0x2046,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND512W4A2C,0x2056,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND512R3A2D,0x2036,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512W3A2D,0x2076,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512R4A2D,0x2046,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND512W4A2D,0x2056,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND512R3A2S,0x2036,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512W3A2S,0x2076,1,64,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,64,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,64,512,16,16,x8,1,1st/6th, PASS
NAND512R4A2S,0x2046,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND512W4A2S,0x2056,1,64,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,64,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,64,512,16,16,x16,1,1st/1st, PASS
NAND01GR3A,0x2039,1,128,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,128,512,16,16,x8,1,1st/6th, PASS
NAND01GW3A,0x2079,1,128,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,128,512,16,16,x8,1,1st/6th, PASS
NAND01GR4A,0x2049,1,128,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,128,512,16,16,x16,1,1st/1st, PASS
NAND01GW4A,0x2059,1,128,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,128,512,16,16,x16,1,1st/1st, PASS
NAND01GR3A2C,0x2078,1,128,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,128,512,16,16,x8,1,1st/6th, PASS
NAND01GW3A2C,0x2079,1,128,512,16,16,x8,1,1st/6th,,
,mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,l2-mtd-2.6,,128,512,16,16,x8,1,1st/6th, PASS
,devel-mtd,,128,512,16,16,x8,1,1st/6th, PASS
NAND01GR4A2C,0x2072,1,128,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,128,512,16,16,x16,1,1st/1st, PASS
NAND01GW4A2C,0x2074,1,128,512,16,16,x16,1,1st/1st,,
,mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,512,16,16,x16,1,1st/1st, PASS
,devel-mtd,,128,512,16,16,x16,1,1st/1st, PASS
NAND01GR3B2B,0x20A18015,1,128,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,128,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,128,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st/1st+6th, PASS
NAND01GR3B2B,0x20A10015,1,128,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,128,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,128,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st/1st+6th, PASS
NAND01GR4B2B,0x20B10055,1,128,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,128,2048,64,128,x16,1,1st/1st, PASS
NAND01GR4B2B,0x20B18055,1,128,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,128,2048,64,128,x16,1,1st/1st, PASS
NAND01GW3B2B,0x20F1001D,1,128,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,128,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,128,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st/1st+6th, PASS
NAND01GW3B2B,0x20F1801D,1,128,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,128,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,128,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,128,2048,64,128,x8,1,1st/1st+6th, PASS
NAND01GW4B2B,0x20C1805D,1,128,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,128,2048,64,128,x16,1,1st/1st, PASS
NAND01GW4B2B,0x20C1005D,1,128,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,128,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,128,2048,64,128,x16,1,1st/1st, PASS
NAND02GR3B2C,0x20AA8015,1,256,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,256,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st/1st+6th, PASS
NAND02GR4B2C,0x20BA8055,1,256,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,256,2048,64,128,x16,1,1st/1st, PASS
NAND02GW3B2C,0x20DA801D,1,256,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,256,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st/1st+6th, PASS
NAND02GW4B2C,0x20CA805D,1,256,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,256,2048,64,128,x16,1,1st/1st, PASS
NAND02GR3B2D,0x20AA101544,1,256,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,256,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st/1st+6th, PASS
NAND02GR4B2D,0x20BA105544,1,256,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,256,2048,64,128,x16,1,1st/1st, PASS
NAND02GW3B2D,0x20DA109544,1,256,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,256,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,256,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,256,2048,64,128,x8,1,1st/1st+6th, PASS
NAND02GW4B2D,0x20CA10D544,1,256,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,256,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,256,2048,64,128,x16,1,1st/1st, PASS
NAND04GR3B2D,0x20AC101554,1,512,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,512,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,512,2048,64,128,x8,1,1st/1st+6th, PASS
NAND04GR4B2D,0x20BC105554,1,512,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,512,2048,64,128,x16,1,1st/1st, PASS
NAND04GW3B2D,0x20DC109554,1,512,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,512,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,512,2048,64,128,x8,1,1st/1st+6th, PASS
NAND04GW4B2D,0x20CC10D554,1,512,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,512,2048,64,128,x16,1,1st/1st, PASS
NAND04GR3B2D,0x20AC101554,1,512,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,512,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,512,2048,64,128,x8,1,1st/1st+6th, PASS
NAND04GR4B2D,0x20BC105554,1,512,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,512,2048,64,128,x16,1,1st/1st, PASS
NAND04GW3B2D,0x20DC109554,1,512,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,512,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,512,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,512,2048,64,128,x8,1,1st/1st+6th, PASS
NAND04GW4B2D,0x20CC10D554,1,512,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,512,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,512,2048,64,128,x16,1,1st/1st, PASS
NAND08GR3B2C,0x20A3511558,1,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GR3B4C,0x20AC101554,2,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GR4B2C,0x20B3515558,1,1024,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,1024,2048,64,128,x16,1,1st/1st, PASS
NAND08GW3B2C,0x20D3519558,1,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GW3B4C,0x20DC109554,2,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GW4B2C,0x20C351D558,1,1024,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,1024,2048,64,128,x16,1,1st/1st, PASS
NAND08GR3B2C,0x20A3511558,1,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GR3B4C,0x20AC101554,2,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GR4B2C,0x20B3515558,1,1024,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,1024,2048,64,128,x16,1,1st/1st, PASS
NAND08GW3B2C,0x20D3519558,1,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GW3B4C,0x20DC109554,2,1024,2048,64,128,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,2048,64,128,x8,1,1st/1st+6th, PASS
NAND08GW4B2C,0x20C351D558,1,1024,2048,64,128,x16,1,1st/1st,,
,mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,l2-mtd-2.6,,1024,2048,64,128,x16,1,1st/1st, PASS
,devel-mtd,,1024,2048,64,128,x16,1,1st/1st, PASS
NAND08GW3F2B,0x20D390152441,1,1024,4096,224,256,x8,1,1st/1st+6th,,
,mtd-2.6,,1024,2048,64,128,x8,1,1st/1st+6th, FAIL
,l2-mtd-2.6,,1024,2048,64,128,x8,1,1st/1st, FAIL
,devel-mtd,,1024,4096,224,256,x8,1,1st/1st+6th, PASS
S30ML128P,0x0153030110,1,16,512,16,512,x16,1,1st+2nd/1st,,
,mtd-2.6,,16,512,16,16,x16,1,1st+2nd/1st, FAIL
,l2-mtd-2.6,,16,512,16,16,x16,1,1st+2nd/1st, FAIL
,devel-mtd,,16,512,16,512,x16,1,1st+2nd/1st, PASS
S30ML128P,0x0173010110,1,16,512,16,512,x8,1,1st+2nd/6th,,
,mtd-2.6,,16,512,16,16,x8,1,1st+2nd/6th, FAIL
,l2-mtd-2.6,,16,512,16,16,x8,1,1st+2nd/6th, FAIL
,devel-mtd,,16,512,16,512,x8,1,1st+2nd/6th, PASS
S30ML256P,0x0155010110,1,32,512,16,512,x16,1,1st+2nd/1st,,
,mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, FAIL
,l2-mtd-2.6,,32,512,16,16,x16,1,1st+2nd/1st, FAIL
,devel-mtd,,32,512,16,512,x16,1,1st+2nd/1st, PASS
S30ML256P,0x0175010110,1,32,512,16,512,x8,1,1st+2nd/6th,,
,mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, FAIL
,l2-mtd-2.6,,32,512,16,16,x8,1,1st+2nd/6th, FAIL
,devel-mtd,,32,512,16,512,x8,1,1st+2nd/6th, PASS
S30ML512P,0x0176010110,1,64,512,16,512,x8,1,1st+2nd/6th,,
,mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, FAIL
,l2-mtd-2.6,,64,512,16,16,x8,1,1st+2nd/6th, FAIL
,devel-mtd,,64,512,16,512,x8,1,1st+2nd/6th, PASS
S30ML512P,0x0156010110,1,64,512,16,512,x16,1,1st+2nd/1st,,
,mtd-2.6,,64,512,16,16,x16,1,1st+2nd/1st, FAIL
,l2-mtd-2.6,,64,512,16,16,x16,1,1st+2nd/1st, FAIL
,devel-mtd,,64,512,16,512,x16,1,1st+2nd/1st, PASS
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: nand_base.c:nand_get_flash_type() test results
2011-10-12 15:26 nand_base.c:nand_get_flash_type() test results Angus CLARK
@ 2011-10-14 13:57 ` Artem Bityutskiy
2011-10-14 15:14 ` Angus CLARK
2011-10-16 14:33 ` Mike Dunn
1 sibling, 1 reply; 7+ messages in thread
From: Artem Bityutskiy @ 2011-10-14 13:57 UTC (permalink / raw)
To: Angus CLARK; +Cc: linux-mtd
On Wed, 2011-10-12 at 16:26 +0100, Angus CLARK wrote:
> Hi All,
>
> While attempting to add support for some of the more recent NAND devices, I
> ended up refactoring nand_get_flash_type() code. The refactoring was primarily
> aimed at simplifying the way in which the growing number 'READID' decoding
> exceptions could be accommodated.
Why not to send the refactored code as well?
--
Best Regards,
Artem Bityutskiy
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: nand_base.c:nand_get_flash_type() test results
2011-10-14 13:57 ` Artem Bityutskiy
@ 2011-10-14 15:14 ` Angus CLARK
2011-10-16 12:03 ` Artem Bityutskiy
0 siblings, 1 reply; 7+ messages in thread
From: Angus CLARK @ 2011-10-14 15:14 UTC (permalink / raw)
To: linux-mtd; +Cc: Artem Bityutskiy
[-- Attachment #1: Type: text/plain, Size: 757 bytes --]
On 10/14/2011 02:57 PM, Artem Bityutskiy wrote:
> On Wed, 2011-10-12 at 16:26 +0100, Angus CLARK wrote:
>> Hi All,
>>
>> While attempting to add support for some of the more recent NAND devices, I
>> ended up refactoring nand_get_flash_type() code. The refactoring was primarily
>> aimed at simplifying the way in which the growing number 'READID' decoding
>> exceptions could be accommodated.
>
> Why not to send the refactored code as well?
>
Well, mostly to avoid criticism of it not being based on the mtd-2.6 tree :-) I
have attached the file 'nand_id_decode.c' which includes most of the relevant
code. If there is interest, I am happy to port to mtd-2.6, but testing on this
version would be limited to compilation and nandsim.
Cheers,
Angus
[-- Attachment #2: nand_id_decode.c --]
[-- Type: text/plain, Size: 13346 bytes --]
/*
* drivers/mtd/nand/nand_id_decode.c
*
* Determine NAND device properties by decoding the READID string
*
* The following code attempts to encapsulate the knowledge in
* mtd-2.6(2011-07-09):nand_base.c:nand_get_flash_type(), refactored according
* to three basic schemes:
*
* 'ID 2' : extract properties from device table. For 2-byte IDs,
* or where device ID gives a non-zero page-size
* (SP devices).
*
* 'Extended ID': decode properties from ID string where possible, falling
* back to device table. For 3/4/5-byte IDs.
*
* 'ID 6' : decode properties from ID string where possible, falling
* back to device table. For 6-byte IDs.
*
* The refactoring is primarily aimed at simplifying the way in which decoding
* exceptions (growing fast!) can be accomodated.
*
* Tested on all devices found in
* http://www.linux-mtd.infradead.org/nand-data/nanddata.html (2011-07-09),
* EXCLUDING the following:
*
* - 'ONFI-only': READID is insufficient to decode all properties.
*
* - Toshiba devices: datasheets only present decode table, not actual
* READID strings.
*
*
* Author: Angus Clark <Angus.Clark@st.com>
* Copyright (c) 2012 STMicroelectronics Limited
*
* ------------------------------------------------------------------------
* May be copied or modified under the terms of the GNU General Public
* License Version 2.0 only. See linux/COPYING for more information.
* ------------------------------------------------------------------------
*
*/
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
static struct nand_flash_dev *search_nand_flash_dev(uint8_t id);
static int nand_decode_id_2(struct mtd_info *mtd,
struct nand_chip *chip,
struct nand_flash_dev *type,
uint8_t *id, int id_len);
static int nand_decode_id_ext(struct mtd_info *mtd,
struct nand_chip *chip,
struct nand_flash_dev *type,
uint8_t *id, int id_len);
static int nand_decode_id_6(struct mtd_info *mtd,
struct nand_chip *chip,
struct nand_flash_dev *type,
uint8_t *id, int id_len);
static void nand_decode_id_bbm(struct mtd_info *mtd,
struct nand_chip *chip,
uint8_t *id, int id_len);
int nand_decode_id(struct mtd_info *mtd, struct nand_chip *chip,
uint8_t *id, int id_len)
{
struct nand_flash_dev *type = NULL;
int ret = 0;
/*
* Find 'nand_flash_dev' in table
*/
type = search_nand_flash_dev(id[1]);
if (!type) {
pr_err("[MTD][NAND]:%s: failed to find NAND "
"device ID [%02x] in table\n", __func__, id[1]);
return 1;
}
/*
* Decode ID string
*/
if (id_len == 2 || type->pagesize)
ret = nand_decode_id_2(mtd, chip, type, id, id_len);
else if (id_len <= 5)
ret = nand_decode_id_ext(mtd, chip, type, id, id_len);
else if (id_len == 6)
ret = nand_decode_id_6(mtd, chip, type, id, id_len);
else
ret = 1;
if (ret) {
pr_err("[MTD][NAND]:%s:failed to decode NAND "
"device ID\n", __func__);
return ret;
}
/*
* Determine bad-block marker scheme
*/
nand_decode_id_bbm(mtd, chip, id, id_len);
return 0;
}
EXPORT_SYMBOL_GPL(nand_decode_id);
static struct nand_flash_dev *search_nand_flash_dev(uint8_t id)
{
struct nand_flash_dev *device;
for (device = nand_flash_ids; device->name != NULL; device++) {
if (device->id == id)
return device;
}
return NULL;
}
static int nand_decode_id_2(struct mtd_info *mtd,
struct nand_chip *chip,
struct nand_flash_dev *type,
uint8_t *id, int id_len)
{
mtd->writesize = type->pagesize;
mtd->oobsize = type->pagesize / 32;
chip->chipsize = ((uint64_t)type->chipsize) << 20;
/* SPANSION/AMD (S30ML-P ORNAND) has non-standard block size */
if (id[0] == NAND_MFR_AMD)
mtd->erasesize = 512 * 1024;
else
mtd->erasesize = type->erasesize;
/* Get chip options from table */
chip->options &= ~NAND_CHIPOPTIONS_MSK;
chip->options |= type->options & NAND_CHIPOPTIONS_MSK;
chip->options |= NAND_NO_AUTOINCR;
if (mtd->writesize > 512)
chip->options |= NAND_NO_READRDY;
/* Assume some defaults */
chip->bits_per_cell = 1;
chip->cellinfo = 0;
chip->planes_per_chip = 1;
chip->luns_per_chip = 1;
return 0;
}
static int nand_decode_id_ext(struct mtd_info *mtd,
struct nand_chip *chip,
struct nand_flash_dev *type,
uint8_t *id, int id_len)
{
uint8_t data;
if (id_len < 3 || id_len > 5) {
pr_err("[MTD][NAND]:%s: invalid ID length [%d]\n",
__func__, id_len);
return 1;
}
/* Clear chip options */
chip->options &= ~NAND_CHIPOPTIONS_MSK;
/* ID4: Planes/Chip Size */
if (id[0] == NAND_MFR_HYNIX && id_len == 5 && id[4] == 0 &&
(id[1] == 0xDA || id[1] == 0xCA)) {
/* Non-standard decode: HY27UF082G2A, HY27UF162G2A */
chip->planes_per_chip = 2;
chip->chipsize = (128 * 1024 * 1024) * chip->planes_per_chip;
} else if (id_len == 5) {
/* - Planes per chip: ID4[3:2] */
data = (id[4] >> 2) & 0x3;
chip->planes_per_chip = 1 << data;
/* - Plane size: ID4[6:4], multiples of 8MiB */
data = (id[4] >> 4) & 0x7;
chip->chipsize = (8 * 1024 * 1024) << data; /* plane size */
chip->chipsize *= chip->planes_per_chip; /* chip size */
} else {
/* Fall-back to table */
chip->planes_per_chip = 1;
chip->chipsize = (((uint64_t)type->chipsize) << 20);
}
/* ID3: Page/OOB/Block Size */
if (id_len >= 4) {
/* - Page Size: ID3[1:0] */
data = id[3] & 0x3;
mtd->writesize = 1024 << data; /* multiples of 1k */
/* - OOB Size: ID3[2] */
data = (id[3] >> 2) & 0x1;
mtd->oobsize = 8 << data; /* per 512 */
mtd->oobsize *= mtd->writesize / 512; /* per page */
/* - Block Size: ID3[5:4] */
data = (id[3] >> 4) & 0x3;
mtd->erasesize = (64 * 1024) << data; /* multiples of 64k */
/* - Bus Width; ID3[6] */
if ((id[3] >> 6) & 0x1)
chip->options |= NAND_BUSWIDTH_16;
} else {
/* Fall-back to table */
mtd->writesize = type->pagesize;
mtd->oobsize = type->pagesize / 32;
if (type->options & NAND_BUSWIDTH_16)
chip->options |= NAND_BUSWIDTH_16;
}
/* Some default 'chip' options */
chip->options |= NAND_NO_AUTOINCR;
if (chip->planes_per_chip > 1)
chip->options |= NAND_MULTIPLANE_READ;
if (mtd->writesize > 512)
chip->options |= NAND_NO_READRDY;
if (id[0] == NAND_MFR_SAMSUNG && mtd->writesize > 512)
chip->options |= NAND_SAMSUNG_LP_OPTIONS;
/* ID2: Package/Cell/Features */
/* Note, ID2 invalid, or documented as "don't care" on certain devices
* (assume some defaults)
*/
if (id_len == 4 && id[0] == NAND_MFR_HYNIX &&
(id[1] == 0xF1 || id[1] == 0xC1 || id[1] == 0xA1 || id[1] == 0xAD ||
id[1] == 0xDA || id[1] == 0xCA)) {
/* HY27{U,S}F{08,16}1G2M;
* HY27UF{08,16}2G2M
*/
chip->luns_per_chip = 1;
chip->bits_per_cell = 1;
chip->cellinfo = 0;
chip->options |= (NAND_CACHEPRG |
NAND_CACHERD |
NAND_COPYBACK);
} else if (id_len == 4 && id[0] == NAND_MFR_MICRON &&
(id[1] == 0xDA || id[1] == 0xCA || id[1] == 0xDC ||
id[1] == 0xCC || id[1] == 0xAA || id[1] == 0xBA)) {
/* MT29F2G{08,16}AAB;
* MT29F4G{08,16}BAB;
* MT29F2G{08,16}A{A,B}C;
* MT29F4G08BAC
*/
chip->luns_per_chip = 1;
chip->bits_per_cell = 1;
chip->cellinfo = 0;
chip->options |= (NAND_CACHEPRG |
NAND_CACHERD |
NAND_COPYBACK);
} else if (id_len == 4 && id[0] == NAND_MFR_SAMSUNG &&
(id[1] == 0xF1 || id[1] == 0xA1)) {
/* K9F1G08{U,Q}A */
chip->luns_per_chip = 1;
chip->bits_per_cell = 1;
chip->cellinfo = 0;
chip->options |= (NAND_CACHEPRG |
NAND_CACHERD |
NAND_COPYBACK);
} else {
/* - LUNs: ID2[1:0] */
data = id[2] & 0x3;
chip->luns_per_chip = 0x1 << data;
/* - Cell levels: ID2[3:2] */
data = (id[2] >> 2) & 0x3;
chip->bits_per_cell = data + 1;
/* - Interleave: ID2[6] */
if ((id[2] >> 6) & 0x1)
chip->options |= NAND_MULTILUN;
/* - Cache Program: ID2[7] */
if ((id[2] >> 7) & 0x1)
chip->options |= NAND_CACHEPRG;
/* - Copy to 'cellinfo' */
chip->cellinfo = id[2];
}
return 0;
}
static int nand_decode_id_6(struct mtd_info *mtd,
struct nand_chip *chip,
struct nand_flash_dev *type,
uint8_t *id, int id_len)
{
uint8_t data;
if (id_len != 6) {
pr_err("[MTD][NAND]:%s: invalid ID length [%d]\n",
__func__, id_len);
return 1;
}
chip->chipsize = (((uint64_t)type->chipsize) << 20);
/* ID4: Planes */
/* - Number: ID4[3:2] */
data = (id[4] >> 2) & 0x3;
chip->planes_per_chip = 1 << data;
/* ID3: Page/OOB/Block Size */
/* - Page Size: ID3[1:0] */
data = id[3] & 0x3;
mtd->writesize = 2048 << data; /* multiples of 2k */
/* - OOB Size: ID3[6,3:2] */
data = ((id[3] >> 4) & 0x4) | ((id[3] >> 2) & 0x3);
if (id[0] == NAND_MFR_SAMSUNG) {
switch (data) {
case 1:
mtd->oobsize = 128;
break;
case 2:
mtd->oobsize = 218;
break;
case 3:
mtd->oobsize = 400;
break;
case 4:
mtd->oobsize = 436;
break;
case 5:
mtd->oobsize = 640;
break;
default:
pr_err("[MTD][NAND]:%s: unknown OOB size\n",
__func__);
return 1;
break;
}
} else {
switch (data) {
case 0:
mtd->oobsize = 128;
break;
case 1:
mtd->oobsize = 224;
break;
case 2:
mtd->oobsize = 448;
break;
default:
pr_err("[MTD][NAND]:%s: unknown OOB size\n",
__func__);
break;
}
}
/* - Block Size: ID3[7,5:4] */
data = ((id[3] >> 5) & 0x4) | ((id[3] >> 4) & 0x3);
switch (data) {
case 0:
case 1:
case 2:
mtd->erasesize = (128 * 1024) << data;
break;
case 3:
if (id[0] == NAND_MFR_SAMSUNG)
mtd->erasesize = (1024 * 1024);
else
mtd->erasesize = (768 * 1024);
break;
case 4:
case 5:
mtd->erasesize = (1024 * 1024) << (data - 4);
break;
default:
pr_err("[MTD][NAND]:%s: unknown block size\n",
__func__);
return 1;
break;
}
/* Some default 'chip' options */
chip->options &= ~NAND_CHIPOPTIONS_MSK;
chip->options |= NAND_NO_AUTOINCR;
if (chip->planes_per_chip > 1)
chip->options |= NAND_MULTIPLANE_READ;
if (mtd->writesize > 512)
chip->options |= NAND_NO_READRDY;
if (id[0] == NAND_MFR_SAMSUNG && mtd->writesize > 512)
chip->options |= NAND_SAMSUNG_LP_OPTIONS;
/* ID2: Package/Cell/Features */
/* - LUNs: ID2[1:0] */
data = id[2] & 0x3;
chip->luns_per_chip = 0x1 << data;
/* - Cell levels: ID2[3:2] */
data = (id[2] >> 2) & 0x3;
chip->bits_per_cell = data + 1;
/* - Interleave: ID2[6] */
if ((id[2] >> 6) & 0x1)
chip->options |= NAND_MULTILUN;
/* - Cache Program: ID2[7] */
if ((id[2] >> 7) & 0x1)
chip->options |= NAND_CACHEPRG;
/* - Copy to 'cellinfo' */
chip->cellinfo = id[2];
/* Bus Width, from table */
chip->options |= (type->options & NAND_BUSWIDTH_16);
return 0;
}
/*
* Heuristics for factory-programmed bad-block marker (BBM) schemes, largely
* based on code in mtd-2.6 (2011-07-09)
* nand_base.c:nand_get_flash_type(), and datasheets for devices in
* http://www.linux-mtd.infradead.org/nand-data/nanddata.html (2011-07-09).
*/
static void nand_decode_id_bbm(struct mtd_info *mtd,
struct nand_chip *chip,
uint8_t *id, int id_len)
{
/*
* Some special cases first
*/
/* Hynix HY27US1612{1,2}B: 3rd word for x16 device! */
if (id[0] == NAND_MFR_HYNIX && id[1] == 0x56) {
chip->bbt_options = (NAND_BBM_PAGE_0 |
NAND_BBM_PAGE_1 |
NAND_BBM_BYTE_OOB_5);
return;
}
/* Hynix H27UAG8T2A: last and last-2 pages, byte 0 */
if (id[0] == NAND_MFR_HYNIX && id_len == 6 &&
id[1] == 0xD5 && id[2] == 0x94 && id[3] == 0x25 &&
id[4] == 0x44 && id[5] == 0x41) {
chip->bbt_options = (NAND_BBM_PAGE_LAST |
NAND_BBM_PAGE_LMIN2 |
NAND_BBM_BYTE_OOB_0);
return;
}
/* Numonyx/ST 2K/4K pages, x8 bus use BOTH byte 0 and 5 (drivers may
* need to disable 'byte 5' depending on ECC layout)
*/
if (!(chip->options & NAND_BUSWIDTH_16) &&
mtd->writesize >= 2048 && id[0] == NAND_MFR_STMICRO) {
chip->bbt_options = (NAND_BBM_PAGE_0 |
NAND_BBM_BYTE_OOB_0 |
NAND_BBM_BYTE_OOB_5);
return;
}
/* Samsung and Hynix MLC NAND: last page, byte 0; and 1st page for 8KiB
* page devices */
if ((id[0] == NAND_MFR_SAMSUNG || id[0] == NAND_MFR_HYNIX) &&
chip->bits_per_cell == 2) {
chip->bbt_options = NAND_BBM_PAGE_LAST | NAND_BBM_BYTE_OOB_0;
if (mtd->writesize == 8192)
chip->bbt_options |= NAND_BBM_PAGE_0;
return;
}
/* Micron 2KiB page devices use 1st and 2nd page, byte 0 */
if (id[0] == NAND_MFR_MICRON && mtd->writesize == 2048) {
chip->bbt_options = NAND_BBM_PAGE_0 | NAND_BBM_PAGE_1 |
NAND_BBM_BYTE_OOB_0;
return;
}
/*
* For the rest...
*/
/* Scan at least the first page */
chip->bbt_options = NAND_BBM_PAGE_0;
/* Also 2nd page for SLC Samsung, Hynix, Toshia, and AMD/Spansion */
if (chip->bits_per_cell == 1 &&
(id[0] == NAND_MFR_SAMSUNG ||
id[0] == NAND_MFR_HYNIX ||
id[0] == NAND_MFR_TOSHIBA ||
id[0] == NAND_MFR_AMD))
chip->bbt_options |= NAND_BBM_PAGE_1;
/* SP x8 devices use 6th byte OOB; everything else uses 1st byte OOB */
if (mtd->writesize == 512 && !(chip->options & NAND_BUSWIDTH_16))
chip->bbt_options |= NAND_BBM_BYTE_OOB_5;
else
chip->bbt_options |= NAND_BBM_BYTE_OOB_0;
return;
}
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: nand_base.c:nand_get_flash_type() test results
2011-10-14 15:14 ` Angus CLARK
@ 2011-10-16 12:03 ` Artem Bityutskiy
0 siblings, 0 replies; 7+ messages in thread
From: Artem Bityutskiy @ 2011-10-16 12:03 UTC (permalink / raw)
To: Angus CLARK; +Cc: linux-mtd
On Fri, 2011-10-14 at 16:14 +0100, Angus CLARK wrote:
> On 10/14/2011 02:57 PM, Artem Bityutskiy wrote:
> > On Wed, 2011-10-12 at 16:26 +0100, Angus CLARK wrote:
> >> Hi All,
> >>
> >> While attempting to add support for some of the more recent NAND devices, I
> >> ended up refactoring nand_get_flash_type() code. The refactoring was primarily
> >> aimed at simplifying the way in which the growing number 'READID' decoding
> >> exceptions could be accommodated.
> >
> > Why not to send the refactored code as well?
> >
>
> Well, mostly to avoid criticism of it not being based on the mtd-2.6 tree :-)
That's unavoidable - please, base it on the l2-mtd-2.6.git tree:
git://git.infradead.org/users/dedekind/l2-mtd-2.6.git
:-)
> I
> have attached the file 'nand_id_decode.c' which includes most of the relevant
> code. If there is interest, I am happy to port to mtd-2.6, but testing on this
> version would be limited to compilation and nandsim.
The situation in MTD is that this is a scarcely populated subsystem
(everyone moves to eMMC) and we have little people who have time to take
your job, transform it into a nice patch, etc.
Your contribution is very appreciated, but please, do one more step -
create a nice patch against l2-mtd-2.6.git, with nice commit message,
and send it to this mailing list and CC Brian Norris. We will look at it
and take it to upstream.
Thanks!
--
Best Regards,
Artem Bityutskiy
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: nand_base.c:nand_get_flash_type() test results
2011-10-12 15:26 nand_base.c:nand_get_flash_type() test results Angus CLARK
2011-10-14 13:57 ` Artem Bityutskiy
@ 2011-10-16 14:33 ` Mike Dunn
2011-10-18 7:58 ` Angus CLARK
1 sibling, 1 reply; 7+ messages in thread
From: Mike Dunn @ 2011-10-16 14:33 UTC (permalink / raw)
To: linux-mtd
On 10/12/2011 08:26 AM, Angus CLARK wrote:
> Hi All,
>
> While attempting to add support for some of the more recent NAND devices, I
> ended up refactoring nand_get_flash_type() code. The refactoring was primarily
> aimed at simplifying the way in which the growing number 'READID' decoding
> exceptions could be accommodated.
>
I am currently grappling with this issue with my driver for the diskonchip G4,
which is an MLC nand under the hood, but has a proprietary controller around it
which doesn't interact as a "typical" NAND device. Specific to this topic, it
doesn't respond to NAND_READID commands. My solution was to skip the call to
nand_scan_ident(), which calls nand_get_flash_type(). Instead, I do all the
initializations done by nand_get_flash_type() within my driver.
Any thoughts or suggestions appreciated.
Thanks,
Mike
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: nand_base.c:nand_get_flash_type() test results
2011-10-16 14:33 ` Mike Dunn
@ 2011-10-18 7:58 ` Angus CLARK
2011-10-18 14:05 ` Mike Dunn
0 siblings, 1 reply; 7+ messages in thread
From: Angus CLARK @ 2011-10-18 7:58 UTC (permalink / raw)
To: Mike Dunn; +Cc: Angus CLARK, linux-mtd
Hi Mike,
On 10/16/2011 03:33 PM, Mike Dunn wrote:
>
> I am currently grappling with this issue with my driver for the diskonchip G4,
> which is an MLC nand under the hood, but has a proprietary controller around it
> which doesn't interact as a "typical" NAND device. Specific to this topic, it
> doesn't respond to NAND_READID commands. My solution was to skip the call to
> nand_scan_ident(), which calls nand_get_flash_type(). Instead, I do all the
> initializations done by nand_get_flash_type() within my driver.
>
> Any thoughts or suggestions appreciated.
>
I am not familiar with the diskonchip technology but I had a quick look through
the patch you posted a few days ago. What you have done regarding
nand_scan_ident() is probably the most sensible solution here - I believe it was
this kind of use-case that led to nand_scan() being split into nand_scan_ident()
and nand_scan_tail().
An alternative approach would be to fake support for NAND_CMD_READID, similar to
what you have done for NAND_CMD_STATUS, with subsequent calls to
chip->read_byte() returning the 'DOCG4_IDREG' sequence {0x04, 0x00, 0xfb, 0xff}.
In the same way ONFI devices are handled, you could then add a special case in
nand_get_flash_type(), say nand_flash_detect_docg4(), jumping to 'ident_done' if
successful.
To be honest, in this case, I don't think there is much to be gained by adding
'nand_flash_detect_docg4()' to the generic code. It would just return some
hard-coded parameters to serve a single device and driver; you may as well put
them in the driver itself, as you have done. On the other hand, if you extend
it to also handle the other diskonchip varients, that might be more interesting.
Cheers,
Angus
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: nand_base.c:nand_get_flash_type() test results
2011-10-18 7:58 ` Angus CLARK
@ 2011-10-18 14:05 ` Mike Dunn
0 siblings, 0 replies; 7+ messages in thread
From: Mike Dunn @ 2011-10-18 14:05 UTC (permalink / raw)
To: Angus CLARK; +Cc: robert.jarzmik, linux-mtd
Hi Angus. Thanks for taking a look and commenting.
On 10/18/2011 12:58 AM, Angus CLARK wrote:
> On 10/16/2011 03:33 PM, Mike Dunn wrote:
>> I am currently grappling with this issue with my driver for the diskonchip G4,
>> which is an MLC nand under the hood, but has a proprietary controller around it
>> which doesn't interact as a "typical" NAND device. Specific to this topic, it
>> doesn't respond to NAND_READID commands. My solution was to skip the call to
>> nand_scan_ident(), which calls nand_get_flash_type(). Instead, I do all the
>> initializations done by nand_get_flash_type() within my driver.
>>
>> Any thoughts or suggestions appreciated.
>>
> I am not familiar with the diskonchip technology but I had a quick look through
> the patch you posted a few days ago. What you have done regarding
> nand_scan_ident() is probably the most sensible solution here - I believe it was
> this kind of use-case that led to nand_scan() being split into nand_scan_ident()
> and nand_scan_tail().
My guess as well. The only problem is that, oddly, nand_scan_ident() calls
nand_set_defaults(). So by skipping the cal to nand_scan_ident(), the various
defaut nand methods are not set. Fortunately, I need to override most of them
anyway, but I did need to duplicate a couple trivial ones in my driver, since
they're not exported from nand_base.c
> An alternative approach would be to fake support for NAND_CMD_READID, similar to
> what you have done for NAND_CMD_STATUS, with subsequent calls to
> chip->read_byte() returning the 'DOCG4_IDREG' sequence {0x04, 0x00, 0xfb, 0xff}.
> In the same way ONFI devices are handled, you could then add a special case in
> nand_get_flash_type(), say nand_flash_detect_docg4(), jumping to 'ident_done' if
> successful.
I did it this way originally. But this method requires serving up an arbitrary
unused ID and patching nand_ids.c with a new entry for the arbitrary ID
containing the docg4 parameters. It was so ugly, I went with the alternate method.
> To be honest, in this case, I don't think there is much to be gained by adding
> 'nand_flash_detect_docg4()' to the generic code. It would just return some
> hard-coded parameters to serve a single device and driver; you may as well put
> them in the driver itself, as you have done. On the other hand, if you extend
> it to also handle the other diskonchip varients, that might be more interesting.
Thaks for the suggestion. Something to keep in mind; Robert Jarzmik is working
on a driver for the diskonchip G3 (which may also support the P3).
Thanks again,
Mike
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-10-18 14:06 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-12 15:26 nand_base.c:nand_get_flash_type() test results Angus CLARK
2011-10-14 13:57 ` Artem Bityutskiy
2011-10-14 15:14 ` Angus CLARK
2011-10-16 12:03 ` Artem Bityutskiy
2011-10-16 14:33 ` Mike Dunn
2011-10-18 7:58 ` Angus CLARK
2011-10-18 14:05 ` Mike Dunn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).