<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body text="#000000" bgcolor="#ffffff">
This shows how we could refactor the jedec code. After the refactor we
can delete these:
<br>
 * am29f040b
<br>
 * en29f002a -> file_not_used
<br>
 * m29f002
<br>
 * mx29f002
<br>
 * pm29f002
<br>
 * sst49lf040
<br>
 * w49f002u
<br>
<br>
These files can be deleted if we <b class="moz-txt-star"><span
 class="moz-txt-tag">*</span>could<span class="moz-txt-tag">*</span></b>
find a way to integrate the problems into jedec.c:
<br>
 * w29ee011 -> checks specifically for w29ee011
<br>
 * w39v040c -> checks for lock in probe: address 0xfff2
<br>
 * pm49fl00x -> uses chip protect code
<br>
 * m29f002 -> block based writing
<br>
 * m29f400bt -> block based writing
<br>
<br>
I was looking through these two files and saw that they used variable
block
<br>
sizes for writing sectors, maybe we can do something simpler to
block_erasers:
<br>
 * m29f002
<br>
 * m29f400bt
<br>
<br>
There are a few files that performs another map_flash_registers() after
<br>
successful probe, I was wondering if we could add the re-mapping to
<br>
probe_jedec_common or if its safe to omit the function call:
<br>
 * pm49fl00x
<br>
 * stm50flw0x0x
<br>
 * w39v080fa
<br>
<br>
List of chips that use a specific addressing for command codes:
<br>
0x2AA based chips:
<br>
 * am29f040b
<br>
 * mx29f002
<br>
 * pm29f002
<br>
<br>
0xAAA based chips:
<br>
 * m29f002
<br>
 * m29f400bt
<br>
<br>
0x2AAA based chips:
<br>
 * pm49fl00x
<br>
 * sst49lf040
<br>
 * stm50flw0x0x
<br>
 * w29ee011
<br>
 * w39v040c
<br>
 * w39v080fa
<br>
 * w49f002u
<br>
 <br>
The full notes:<br>
<br>
@jedec {<br>
    # start_program_jedec     => AA 55 A0<br>
    # probe_jedec         => AA 55 90 MID DID AA 55 F0<br>
    # erase_sector_jedec     => AA 55 80 AA 55 30<br>
    # erase_block_jedec     => AA 55 80 AA 55 50<br>
    # erase_chip_jedec     => AA 55 80 AA 55 10<br>
    # write_page_write_jedec<br>
    # write_byte_program_jedec<br>
    # write_sector_jedec - byte_program based<br>
    # write_jedec is a chip by page writer - page based<br>
    # write_jedec_1 is a chip by page writer - sector based<br>
    #<br>
    # void start_program_jedec(chipaddr bios, unsigned int mask,<br>
    #                 unsigned int shift)<br>
    # {<br>
    #    chip_writeb(0xAA, bios + (0x5555 & mask) );<br>
    #    chip_writeb(0x55, bios + ((0x2AAA & mask)>>shift) );<br>
    #    chip_writeb(0xA0, bios + (0x5555 & mask) );<br>
    # }<br>
}<br>
<br>
@82802ab { # FWHUB map_flash_registers }<br>
@am29f040b { # 0x555 0x2AA<br>
    erase_29f040b             => erase_chip_jedec_2aa<br>
    erase_chip_29f040b         => erase_chip_block_jedec_2aa<br>
    erase_sector_29f040b         => erase_sector_jedec_2aa<br>
    probe_29f040b             => probe_jedec_2aa_reset<br>
    write_29f040b             => write_jedec_2aa<br>
    write_sector_29f040b         => write_sector_jedec_2aa    <br>
}<br>
<br>
@en29f002a { # file_not_used<br>
}<br>
<br>
@m29f002 { # 0x555 0xAAA block_based_write<br>
    do_block<br>
    erase_m29f002             => erase_chip_block_jedec_aaa<br>
    rewrite_block             => write_block_jedec_aaa<br>
    write_m29f002t             # variable page writing<br>
    write_m29f002b             # same as previous<br>
}<br>
<br>
@m29f400bt { # 0x555 0xAAA block_based_write<br>
    block_erase_chip_m29f400bt     => erase_chip_block_jedec_aaa<br>
    block_erase_m29f400bt         => erase_sector_jedec_aaa<br>
    erase_m29f400bt         => erase_chip_jedec_aaa<br>
    probe_m29f400bt         => probe_jedec_aaa_did_02<br>
    write_coreboot_m29f400bt     # same as previous<br>
    write_m29f400bt         # variable page writing<br>
    write_page_m29f400bt<br>
}<br>
<br>
@mx29f002 { # 0x555 0x2AA<br>
    erase_29f002             => erase_chip_jedec_2aa<br>
    erase_chip_29f002         => erase_chip_block_jedec_2aa<br>
    erase_sector_29f002         => erase_sector_jedec_2aa<br>
    probe_29f002             => probe_jedec_2aa_reset<br>
}<br>
<br>
@pm29f002 { # 0x555 0x2AA<br>
    write_pm29f002             => write_jedec_1_2aa<br>
}<br>
<br>
@pm49fl00x { # 0x5555 0x2AAA map_flash_registers needs_protects<br>
    erase_49fl00x             => erase_chip_block_jedec_2aaa<br>
    probe_49fl00x             => probe_jedec_2aaa<br>
    write_49fl00x             => write_jedec_2aaa<br>
    write_lockbits_49fl00x<br>
}<br>
<br>
@sharplhf00l04 { # FWHUB map_flash_registers }<br>
@sst28sf040 { # FWHUB }<br>
@sst49lf040 { # 0x5555 0x2AAA<br>
    erase_49lf040             => erase_sector_jedec_2aaa<br>
    write_49lf040             => write_jedec_2aaa<br>
}<br>
<br>
@sst49lfxxxc { # FWHUB map_flash_registers }<br>
@sst_fwhub { # FWHUB map_flash_registers }<br>
@stm50flw0x0x { # 0x5555 0x2AAA map_flash_registers<br>
    erase_block_stm50flw0x0x<br>
    erase_stm50flw0x0x<br>
    probe_stm50flw0x0x         => probe_jedec_2aaa<br>
    unlock_block_stm50flw0x0x<br>
    wait_stm50flw0x0x<br>
    write_page_stm50flw0x0x<br>
    write_stm50flw0x0x<br>
}<br>
<br>
@w29ee011 {  # 0x5555 0x2AAA has_check_W29EE011 funks_up_AMIC_A49LF040A<br>
    probe_w29ee011             => probe_jedec_2aaa_60<br>
}<br>
<br>
@w39v040c { # 0x5555 0x2AAA has_lock_fff2<br>
    probe_w39v040c             => probe_jedec_2aaa<br>
}<br>
<br>
<br>
@w39v080fa { # 0x5555 0x2AAA map_flash_registers<br>
    erase_sector_winbond_fwhub<br>
    erase_winbond_fwhub<br>
    probe_winbond_fwhub         => probe_jedec_2aaa<br>
    unlock_block_winbond_fwhub<br>
    unlock_winbond_fwhub<br>
    write_winbond_fwhub<br>
}<br>
<br>
@w49f002u { # 0x5555 0x2AAA<br>
    write_49f002             => write_jedec_1_2aaa<br>
}<br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>