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
}