Programming the flash chip in the Dlink DNS323

Rogan Dawes rogan at dawes.za.net
Fri Jul 23 10:41:11 EDT 2010


Hi folks,

I sent this mail to the linux-mtd list a few days ago, but got no 
response. The kernel get_maintainers script indicated that you had all 
had something to do with the CFI code in the past. If I have been 
excessive in my addressing, I apologize sincerely.

I'm trying to find out whether there is any special-casing in the kernel 
CFI code for the Spansion S29GL064M90TFIR4 used in my DNS-323. I am 
trying to build an up-to-date (U-Boot) bootloader, that has more 
functionality than the seriously crippled one that ships by default with 
the device.

Unfortunately, the current U-Boot CFI code can not detect the flash 
chip, which has led me to investigate how Linux controls it. From my 
initial reading of the setup code in 
arch/arm/mach-orion5x/dns323-setup.c, there doesn't seem to be anything 
special about the DNS-323's flash part, but I'd appreciate it if anyone 
could confirm that?

If there is nothing special-cased in the kernel CFI code, then I guess I 
will have to try to port the kernel CFI code to U-Boot.

See below for some info about how the Spansion flash part behaves in 
U-Boot, if you are interested.

Many thanks for reading this (and more if you respond! :-) )

Rogan

-------- Original Message --------
Subject: Programming the flash chip in the Dlink DNS323
Date: Tue, 20 Jul 2010 17:34:10 +0200
From: Rogan Dawes <rogan at dawes.za.net>
To: linux-mtd at lists.infradead.org
Newsgroups: gmane.linux.drivers.mtd

Hi folks,

I am trying to add support for the DNS323 to U-Boot, but am struggling
with the flash chip, a Spansion S29GL064M90TFIR4. I am unable to get it
to generate the appropriate CFI responses. In fact, I cannot even get it 
to react to the sequence to trigger the manufacturer ID, although I can 
get it to show the QRY response.

This is what I get (from the u-boot command line):

DNS323B1> mw.b 0xf4000000 0xF0          // send a reset
DNS323B1> md.b 0xf4000000 0x40          // display the first bytes
f4000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
f4000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
f4000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
f4000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
DNS323B1> mw.b 0xf40000aa 0x98         // enable QRY mode
DNS323B1> md.b 0xf4000000 0x40         // display the QRY info
f4000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
f4000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
f4000020: 51 51 52 52 59 59 02 02 00 00 40 40 00 00 00 00
QQRRYY....@@....
f4000030: 00 00 00 00 00 00 27 27 36 36 00 00 00 00 04 04
......''66......

The apparently odd thing is that rather than "QRY" at 0x10, I get
"QQRRYY" at 0x20, but the device should be in 8-bit mode, from all the
info I've found (including the kernel sources).

It seems that there is support for it in the mainstream kernel, and as
far as I can see, it is being detected using CFI.

Here is where it is set up:

arch/arm/mach-orion5x/dns323-setup.c

which simply defines the flash addresses and bus width:

static struct physmap_flash_data dns323_nor_flash_data = {
         .width          = 1,
         .parts          = dns323_partitions,
         .nr_parts       = ARRAY_SIZE(dns323_partitions)
};

static struct resource dns323_nor_flash_resource = {
         .flags          = IORESOURCE_MEM,
         .start          = DNS323_NOR_BOOT_BASE,
         .end            = DNS323_NOR_BOOT_BASE + DNS323_NOR_BOOT_SIZE - 1,
};

static struct platform_device dns323_nor_flash = {
         .name           = "physmap-flash",
         .id             = 0,
         .dev            = {
                 .platform_data  = &dns323_nor_flash_data,
         },
         .resource       = &dns323_nor_flash_resource,
         .num_resources  = 1,
};

Does anyone have any insight into this chip, and could help me add
support for it to U-Boot?

Many thanks.

Rogan




More information about the linux-mtd mailing list