2 back to back 512Mbit P30 16 bit wide flashes on 32 bit bus
Miloslavsky, Philip
pmilosla at mc.com
Mon Jul 31 16:35:59 EDT 2006
I have a flash that I'm trying to get to work with MTD physmap.
I hear there are some bugs with P30 still, but for me the CFI interface
does not even work.
I have 2 back to back 512Mbit Intel strataflash P30 16 bit wide flashes
on 32 bit bus. One flash is on the lower half, one on the higher.
This is a sample sequence of events (the dump of the flash is in
integers):
inline_map_write: map->virt: 0xE1000000 ofs: 0x0 data: 0xF000F0
inline_map_write: bankwidth 1:0 2:0 4:1 8:0 large:0
inline_map_write: map->virt: 0xE1000000 ofs: 0x0 data: 0xFF00FF
inline_map_write: bankwidth 1:0 2:0 4:1 8:0 large:0
inline_map_write: map->virt: 0xE1000000 ofs: 0x550 data: 0x980098
inline_map_write: bankwidth 1:0 2:0 4:1 8:0 large:0
cfi_probe_chip: base: 0x0 size: 0x7ffffff phys: 0xd0000000 virt:
0xe1000000 bankwidth: 0x
cfi_probe_chip: flash_base after CFI commands:
off 0x0: 0x890089 0x89198919 0x10001 0x10001
off 0x10: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0x20: 0x890089 0x89198919 0x10001 0x10001
off 0x30: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0x40: 0x890089 0x89198919 0x10001 0x10001
off 0x50: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0x60: 0x890089 0x89198919 0x10001 0x10001
off 0x70: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0x80: 0x890089 0x89198919 0x10001 0x10001
off 0x90: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0xA0: 0x890089 0x89198919 0x10001 0x10001
off 0xB0: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0xC0: 0x890089 0x89198919 0x10001 0x10001
off 0xD0: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0xE0: 0x890089 0x89198919 0x10001 0x10001
off 0xF0: 0x890089 0xBFCFBFCF 0x10001 0x10001
off 0x100: 0x510051 0x520052 0x590059 0x10001
off 0x110: 0x0 0xA000A 0x10001 0x0
off 0x120: 0x510051 0x520052 0x590059 0x10001
off 0x130: 0x0 0xA000A 0x10001 0x0
off 0x140: 0x510051 0x520052 0x590059 0x10001
off 0x150: 0x0 0xA000A 0x10001 0x0
off 0x160: 0x510051 0x520052 0x590059 0x10001
off 0x170: 0x0 0xA000A 0x10001 0x0
qry_present: offset multiplier 0x10 times x where x is 0x10
interleave: 2 device type: 8
inline_map_read: map->virt: 0xE1000000 ofs: 0x100 result: 0x510051
inline_map_read: bankwidth 1:0 2:0 4:1 8:0 large:0
inline_map_read: map->virt: 0xE1000000 ofs: 0x110 result: 0x0
inline_map_read: bankwidth 1:0 2:0 4:1 8:0 large:0
inline_map_read: map->virt: 0xE1000000 ofs: 0x120 result: 0x510051
inline_map_read: bankwidth 1:0 2:0 4:1 8:0 large:0
map_word_equal: Read: 0x510051 Expected: 0x510051
map_word_equal: Read: 0x0 Expected: 0x520052
map_word_equal: Read NOT Expected
Note its reading from 0x120 not 0x104.
Thoughts? I don't think any set of geometry parameters will work for me.
I think I've tried them all at this point.
I am using linux 2.6.12.6 because I need chipset support that is only
available against that version.
--
Philip Miloslavsky
volatile int * flash_zero;
xip_disable();
cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type,
NULL);
cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type,
NULL);
cfi_send_gen_cmd(0x98, 0x55, base, map, cfi, cfi->device_type,
NULL);
printk(KERN_CRIT "cfi_probe_chip: base: 0x%x size: 0x%x phys: 0x%x
virt: 0x%x bankwidth
: 0x%x \n",
(unsigned long)base, map->size -1, map->phys,
map->virt, map->bankwid
th);
flash_zero = map->virt;
printk(KERN_CRIT "cfi_probe_chip: flash_base after CFI commands:
\n");
for(i =0; i < 0x60; i=i+4) {
printk("off 0x%X: 0x%X 0x%X 0x%X 0x%X\n", i*4, *(flash_zero
+i), *(flash_zero +i+
1), *(flash_zero +i+2), *(flash_zero +i+3
)); }
More information about the linux-mtd
mailing list