Revision 95d1f3ed
b/hw/pflash_cfi02.c | ||
---|---|---|
208 | 208 |
|
209 | 209 |
/* WARNING: when the memory area is in ROMD mode, the offset is a |
210 | 210 |
ram offset, not a physical address */ |
211 |
cmd = value; |
|
212 |
if (pfl->cmd != 0xA0 && cmd == 0xF0) { |
|
213 |
#if 0 |
|
214 |
DPRINTF("%s: flash reset asked (%02x %02x)\n", |
|
215 |
__func__, pfl->cmd, cmd); |
|
216 |
#endif |
|
217 |
goto reset_flash; |
|
218 |
} |
|
219 |
DPRINTF("%s: offset " TARGET_FMT_lx " %08x %d %d\n", __func__, |
|
220 |
offset, value, width, pfl->wcycle); |
|
211 | 221 |
if (pfl->wcycle == 0) |
212 | 222 |
offset -= (target_ulong)(long)pfl->storage; |
213 | 223 |
else |
214 | 224 |
offset -= pfl->base; |
215 | 225 |
|
216 |
cmd = value; |
|
217 | 226 |
DPRINTF("%s: offset " TARGET_FMT_lx " %08x %d\n", __func__, |
218 | 227 |
offset, value, width); |
219 |
if (pfl->cmd != 0xA0 && cmd == 0xF0) { |
|
220 |
DPRINTF("%s: flash reset asked (%02x %02x)\n", |
|
221 |
__func__, pfl->cmd, cmd); |
|
222 |
goto reset_flash; |
|
223 |
} |
|
224 | 228 |
/* Set the device in I/O access mode */ |
225 | 229 |
cpu_register_physical_memory(pfl->base, pfl->total_len, pfl->fl_mem); |
226 | 230 |
boff = offset & (pfl->sector_len - 1); |
... | ... | |
416 | 420 |
|
417 | 421 |
/* Reset flash */ |
418 | 422 |
reset_flash: |
419 |
if (pfl->wcycle != 0) { |
|
420 |
cpu_register_physical_memory(pfl->base, pfl->total_len, |
|
421 |
pfl->off | IO_MEM_ROMD | pfl->fl_mem); |
|
422 |
} |
|
423 |
cpu_register_physical_memory(pfl->base, pfl->total_len, |
|
424 |
pfl->off | IO_MEM_ROMD | pfl->fl_mem); |
|
423 | 425 |
pfl->bypass = 0; |
424 | 426 |
pfl->wcycle = 0; |
425 | 427 |
pfl->cmd = 0; |
... | ... | |
530 | 532 |
|
531 | 533 |
total_len = sector_len * nb_blocs; |
532 | 534 |
/* XXX: to be fixed */ |
535 |
#if 0 |
|
533 | 536 |
if (total_len != (8 * 1024 * 1024) && total_len != (16 * 1024 * 1024) && |
534 | 537 |
total_len != (32 * 1024 * 1024) && total_len != (64 * 1024 * 1024)) |
535 | 538 |
return NULL; |
539 |
#endif |
|
536 | 540 |
pfl = qemu_mallocz(sizeof(pflash_t)); |
537 | 541 |
if (pfl == NULL) |
538 | 542 |
return NULL; |
539 | 543 |
pfl->storage = phys_ram_base + off; |
540 |
pfl->fl_mem = cpu_register_io_memory(0, pflash_read_ops, pflash_write_ops, pfl); |
|
544 |
pfl->fl_mem = cpu_register_io_memory(0, pflash_read_ops, pflash_write_ops, |
|
545 |
pfl); |
|
541 | 546 |
pfl->off = off; |
542 | 547 |
cpu_register_physical_memory(base, total_len, |
543 | 548 |
off | pfl->fl_mem | IO_MEM_ROMD); |
... | ... | |
613 | 618 |
pfl->cfi_table[0x28] = 0x02; |
614 | 619 |
pfl->cfi_table[0x29] = 0x00; |
615 | 620 |
/* Max number of bytes in multi-bytes write */ |
616 |
pfl->cfi_table[0x2A] = 0x05; |
|
621 |
/* XXX: disable buffered write as it's not supported */ |
|
622 |
// pfl->cfi_table[0x2A] = 0x05; |
|
623 |
pfl->cfi_table[0x2A] = 0x00; |
|
617 | 624 |
pfl->cfi_table[0x2B] = 0x00; |
618 | 625 |
/* Number of erase block regions (uniform) */ |
619 | 626 |
pfl->cfi_table[0x2C] = 0x01; |
Also available in: Unified diff