Commit 78556820a4ef3f507ec7c26a86d5ac3889d93d1f
1 parent
ca896ef3
CFI-0002 linux MTD compatibility.
* Add an extended table area. * Clear buffer write timeouts to indicate that we dont support it. * Correct device size. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4387 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
25 additions
and
7 deletions
hw/pflash_cfi02.c
@@ -608,8 +608,8 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off, | @@ -608,8 +608,8 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off, | ||
608 | /* Command set (AMD/Fujitsu) */ | 608 | /* Command set (AMD/Fujitsu) */ |
609 | pfl->cfi_table[0x13] = 0x02; | 609 | pfl->cfi_table[0x13] = 0x02; |
610 | pfl->cfi_table[0x14] = 0x00; | 610 | pfl->cfi_table[0x14] = 0x00; |
611 | - /* Primary extended table address (none) */ | ||
612 | - pfl->cfi_table[0x15] = 0x00; | 611 | + /* Primary extended table address */ |
612 | + pfl->cfi_table[0x15] = 0x31; | ||
613 | pfl->cfi_table[0x16] = 0x00; | 613 | pfl->cfi_table[0x16] = 0x00; |
614 | /* Alternate command set (none) */ | 614 | /* Alternate command set (none) */ |
615 | pfl->cfi_table[0x17] = 0x00; | 615 | pfl->cfi_table[0x17] = 0x00; |
@@ -627,22 +627,22 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off, | @@ -627,22 +627,22 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off, | ||
627 | pfl->cfi_table[0x1E] = 0x00; | 627 | pfl->cfi_table[0x1E] = 0x00; |
628 | /* Reserved */ | 628 | /* Reserved */ |
629 | pfl->cfi_table[0x1F] = 0x07; | 629 | pfl->cfi_table[0x1F] = 0x07; |
630 | - /* Timeout for min size buffer write (16 µs) */ | ||
631 | - pfl->cfi_table[0x20] = 0x04; | 630 | + /* Timeout for min size buffer write (NA) */ |
631 | + pfl->cfi_table[0x20] = 0x00; | ||
632 | /* Typical timeout for block erase (512 ms) */ | 632 | /* Typical timeout for block erase (512 ms) */ |
633 | pfl->cfi_table[0x21] = 0x09; | 633 | pfl->cfi_table[0x21] = 0x09; |
634 | /* Typical timeout for full chip erase (4096 ms) */ | 634 | /* Typical timeout for full chip erase (4096 ms) */ |
635 | pfl->cfi_table[0x22] = 0x0C; | 635 | pfl->cfi_table[0x22] = 0x0C; |
636 | /* Reserved */ | 636 | /* Reserved */ |
637 | pfl->cfi_table[0x23] = 0x01; | 637 | pfl->cfi_table[0x23] = 0x01; |
638 | - /* Max timeout for buffer write */ | ||
639 | - pfl->cfi_table[0x24] = 0x04; | 638 | + /* Max timeout for buffer write (NA) */ |
639 | + pfl->cfi_table[0x24] = 0x00; | ||
640 | /* Max timeout for block erase */ | 640 | /* Max timeout for block erase */ |
641 | pfl->cfi_table[0x25] = 0x0A; | 641 | pfl->cfi_table[0x25] = 0x0A; |
642 | /* Max timeout for chip erase */ | 642 | /* Max timeout for chip erase */ |
643 | pfl->cfi_table[0x26] = 0x0D; | 643 | pfl->cfi_table[0x26] = 0x0D; |
644 | /* Device size */ | 644 | /* Device size */ |
645 | - pfl->cfi_table[0x27] = ctz32(chip_len) + 1; | 645 | + pfl->cfi_table[0x27] = ctz32(chip_len); |
646 | /* Flash device interface (8 & 16 bits) */ | 646 | /* Flash device interface (8 & 16 bits) */ |
647 | pfl->cfi_table[0x28] = 0x02; | 647 | pfl->cfi_table[0x28] = 0x02; |
648 | pfl->cfi_table[0x29] = 0x00; | 648 | pfl->cfi_table[0x29] = 0x00; |
@@ -659,5 +659,23 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off, | @@ -659,5 +659,23 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off, | ||
659 | pfl->cfi_table[0x2F] = sector_len >> 8; | 659 | pfl->cfi_table[0x2F] = sector_len >> 8; |
660 | pfl->cfi_table[0x30] = sector_len >> 16; | 660 | pfl->cfi_table[0x30] = sector_len >> 16; |
661 | 661 | ||
662 | + /* Extended */ | ||
663 | + pfl->cfi_table[0x31] = 'P'; | ||
664 | + pfl->cfi_table[0x32] = 'R'; | ||
665 | + pfl->cfi_table[0x33] = 'I'; | ||
666 | + | ||
667 | + pfl->cfi_table[0x34] = '1'; | ||
668 | + pfl->cfi_table[0x35] = '0'; | ||
669 | + | ||
670 | + pfl->cfi_table[0x36] = 0x00; | ||
671 | + pfl->cfi_table[0x37] = 0x00; | ||
672 | + pfl->cfi_table[0x38] = 0x00; | ||
673 | + pfl->cfi_table[0x39] = 0x00; | ||
674 | + | ||
675 | + pfl->cfi_table[0x3a] = 0x00; | ||
676 | + | ||
677 | + pfl->cfi_table[0x3b] = 0x00; | ||
678 | + pfl->cfi_table[0x3c] = 0x00; | ||
679 | + | ||
662 | return pfl; | 680 | return pfl; |
663 | } | 681 | } |