[flashrom] [Flashrom] Chip Driver Notes, JEDEC and similar

Sean Nelson audiohacked at gmail.com
Fri Dec 25 22:53:52 CET 2009


This shows how we could refactor the jedec code. After the refactor we 
can delete these:
  * am29f040b
  * en29f002a -> file_not_used
  * m29f002
  * mx29f002
  * pm29f002
  * sst49lf040
  * w49f002u

These files can be deleted if we *could* find a way to integrate the 
problems into jedec.c:
  * w29ee011 -> checks specifically for w29ee011
  * w39v040c -> checks for lock in probe: address 0xfff2
  * pm49fl00x -> uses chip protect code
  * m29f002 -> block based writing
  * m29f400bt -> block based writing

I was looking through these two files and saw that they used variable block
sizes for writing sectors, maybe we can do something simpler to 
block_erasers:
  * m29f002
  * m29f400bt

There are a few files that performs another map_flash_registers() after
successful probe, I was wondering if we could add the re-mapping to
probe_jedec_common or if its safe to omit the function call:
  * pm49fl00x
  * stm50flw0x0x
  * w39v080fa

List of chips that use a specific addressing for command codes:
0x2AA based chips:
  * am29f040b
  * mx29f002
  * pm29f002

0xAAA based chips:
  * m29f002
  * m29f400bt

0x2AAA based chips:
  * pm49fl00x
  * sst49lf040
  * stm50flw0x0x
  * w29ee011
  * w39v040c
  * w39v080fa
  * w49f002u

The full notes:

@jedec {
     # start_program_jedec     => AA 55 A0
     # probe_jedec         => AA 55 90 MID DID AA 55 F0
     # erase_sector_jedec     => AA 55 80 AA 55 30
     # erase_block_jedec     => AA 55 80 AA 55 50
     # erase_chip_jedec     => AA 55 80 AA 55 10
     # write_page_write_jedec
     # write_byte_program_jedec
     # write_sector_jedec - byte_program based
     # write_jedec is a chip by page writer - page based
     # write_jedec_1 is a chip by page writer - sector based
     #
     # void start_program_jedec(chipaddr bios, unsigned int mask,
     #                 unsigned int shift)
     # {
     #    chip_writeb(0xAA, bios + (0x5555 & mask) );
     #    chip_writeb(0x55, bios + ((0x2AAA & mask)>>shift) );
     #    chip_writeb(0xA0, bios + (0x5555 & mask) );
     # }
}

@82802ab { # FWHUB map_flash_registers }
@am29f040b { # 0x555 0x2AA
     erase_29f040b             => erase_chip_jedec_2aa
     erase_chip_29f040b         => erase_chip_block_jedec_2aa
     erase_sector_29f040b         => erase_sector_jedec_2aa
     probe_29f040b             => probe_jedec_2aa_reset
     write_29f040b             => write_jedec_2aa
     write_sector_29f040b         => write_sector_jedec_2aa
}

@en29f002a { # file_not_used
}

@m29f002 { # 0x555 0xAAA block_based_write
     do_block
     erase_m29f002             => erase_chip_block_jedec_aaa
     rewrite_block             => write_block_jedec_aaa
     write_m29f002t             # variable page writing
     write_m29f002b             # same as previous
}

@m29f400bt { # 0x555 0xAAA block_based_write
     block_erase_chip_m29f400bt     => erase_chip_block_jedec_aaa
     block_erase_m29f400bt         => erase_sector_jedec_aaa
     erase_m29f400bt         => erase_chip_jedec_aaa
     probe_m29f400bt         => probe_jedec_aaa_did_02
     write_coreboot_m29f400bt     # same as previous
     write_m29f400bt         # variable page writing
     write_page_m29f400bt
}

@mx29f002 { # 0x555 0x2AA
     erase_29f002             => erase_chip_jedec_2aa
     erase_chip_29f002         => erase_chip_block_jedec_2aa
     erase_sector_29f002         => erase_sector_jedec_2aa
     probe_29f002             => probe_jedec_2aa_reset
}

@pm29f002 { # 0x555 0x2AA
     write_pm29f002             => write_jedec_1_2aa
}

@pm49fl00x { # 0x5555 0x2AAA map_flash_registers needs_protects
     erase_49fl00x             => erase_chip_block_jedec_2aaa
     probe_49fl00x             => probe_jedec_2aaa
     write_49fl00x             => write_jedec_2aaa
     write_lockbits_49fl00x
}

@sharplhf00l04 { # FWHUB map_flash_registers }
@sst28sf040 { # FWHUB }
@sst49lf040 { # 0x5555 0x2AAA
     erase_49lf040             => erase_sector_jedec_2aaa
     write_49lf040             => write_jedec_2aaa
}

@sst49lfxxxc { # FWHUB map_flash_registers }
@sst_fwhub { # FWHUB map_flash_registers }
@stm50flw0x0x { # 0x5555 0x2AAA map_flash_registers
     erase_block_stm50flw0x0x
     erase_stm50flw0x0x
     probe_stm50flw0x0x         => probe_jedec_2aaa
     unlock_block_stm50flw0x0x
     wait_stm50flw0x0x
     write_page_stm50flw0x0x
     write_stm50flw0x0x
}

@w29ee011 {  # 0x5555 0x2AAA has_check_W29EE011 funks_up_AMIC_A49LF040A
     probe_w29ee011             => probe_jedec_2aaa_60
}

@w39v040c { # 0x5555 0x2AAA has_lock_fff2
     probe_w39v040c             => probe_jedec_2aaa
}


@w39v080fa { # 0x5555 0x2AAA map_flash_registers
     erase_sector_winbond_fwhub
     erase_winbond_fwhub
     probe_winbond_fwhub         => probe_jedec_2aaa
     unlock_block_winbond_fwhub
     unlock_winbond_fwhub
     write_winbond_fwhub
}

@w49f002u { # 0x5555 0x2AAA
     write_49f002             => write_jedec_1_2aaa
}





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20091225/8375f69a/attachment.html>


More information about the flashrom mailing list