[coreboot] [PATCH] flashrom: Implement probe support for Atmel chips

Myles Watson mylesgw at gmail.com
Sat Nov 15 14:26:01 CET 2008


On Thu, Nov 13, 2008 at 8:17 PM, Carl-Daniel Hailfinger <
c-d.hailfinger.devel.2006 at gmx.net> wrote:

> The AT25 and AT26 series SPI chips from Atmel are plain EEPROMs.
>
> This is needed for some Intel boards.
> Patch attached for Gmail users.
>
> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
>
>
> Index: flashrom-atmel/flashchips.c
> ===================================================================
> --- flashrom-atmel/flashchips.c (Revision 3751)
> +++ flashrom-atmel/flashchips.c (Arbeitskopie)
> @@ -38,11 +38,36 @@
>        {"AMD",         "Am29F040B",            AMD_ID,         AM_29F040B,
>             512,    64 * 1024,      TEST_OK_PREW,   probe_29f040b,
>  erase_29f040b,                  write_29f040b},
>        {"AMD",         "Am29LV040B",           AMD_ID,         AM_29LV040B,
>            512,    64 * 1024,      TEST_UNTESTED,  probe_29f040b,
>  erase_29f040b,                  write_29f040b},
>        {"ASD",         "AE49F2008",            ASD_ID,
> ASD_AE49F2008,          256,    128,            TEST_UNTESTED,  probe_jedec,
>            erase_chip_jedec,               write_jedec},
> +       {"Atmel",       "AT25DF021",            ATMEL_ID,       AT_25DF021,
>             256,    256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25DF041A",           ATMEL_ID,
> AT_25DF041A,            512,    256,            TEST_UNTESTED,
>  probe_spi_rdid,         NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25DF081",            ATMEL_ID,       AT_25DF081,
>             1024,   256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25DF161",            ATMEL_ID,       AT_25DF161,
>             2048,   256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25DF321",            ATMEL_ID,       AT_25DF321,
>             4096,   256,            TEST_OK_PREW,   probe_spi_rdid,
> spi_chip_erase_c7,      spi_chip_write, spi_chip_read},
> +       {"Atmel",       "AT25DF321A",           ATMEL_ID,
> AT_25DF321A,            4096,   256,            TEST_UNTESTED,
>  probe_spi_rdid,         NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25DF641",            ATMEL_ID,       AT_25DF641,
>             8192,   256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25F512B",            ATMEL_ID,       AT_25F512B,
>             64,     256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25FS010",            ATMEL_ID,       AT_25FS010,
>             128,    256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT25FS040",            ATMEL_ID,       AT_25FS040,
>             512,    256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT26DF041",            ATMEL_ID,       AT_26DF041,
>             512,    256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL /* Incompatible Page write */,     NULL},
> +       {"Atmel",       "AT26DF081A",           ATMEL_ID,
> AT_26DF081A,            1024,   256,            TEST_UNTESTED,
>  probe_spi_rdid,         NULL,   NULL,   NULL},
> +       {"Atmel",       "AT26DF161",            ATMEL_ID,       AT_26DF161,
>             2048,   256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},
> +       {"Atmel",       "AT26DF161A",           ATMEL_ID,
> AT_26DF161A,            2048,   256,            TEST_UNTESTED,
>  probe_spi_rdid,         NULL,   NULL,   NULL},
> +       /*The AT26DF321 has the same ID as the AT25DF321. */
> +       /*{"Atmel",     "AT26DF321",            ATMEL_ID,       AT_26DF321,
>             4096,   256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL,   NULL},*/
> +       {"Atmel",       "AT26F004",             ATMEL_ID,       AT_26F004,
>              512,    256,            TEST_UNTESTED,  probe_spi_rdid,
> NULL,   NULL /* Incompatible Page write */,     NULL},
>        {"Atmel",       "AT29C020",             ATMEL_ID,       AT_29C020,
>            256,    256,            TEST_OK_PREW,   probe_jedec,
>  erase_chip_jedec,               write_jedec},
>        {"Atmel",       "AT29C040A",            ATMEL_ID,       AT_29C040A,
>             512,    256,            TEST_UNTESTED,  probe_jedec,
>  erase_chip_jedec,               write_jedec},
> +       {"Atmel",       "AT45CS1282",           ATMEL_ID,
> AT_45CS1282,            16896/*!*/,1056/*!*/,   TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL /* Incompatible Page write */,
> NULL /* Incompatible read */}, /* No power of two sizes */
> +       {"Atmel",       "AT45DB011D",           ATMEL_ID,
> AT_45DB011D,            128/*!*/,256/*!*/,      TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL}, /* Size can only be
> determined from status register */
> +       {"Atmel",       "AT45DB021D",           ATMEL_ID,
> AT_45DB021D,            256/*!*/,256/*!*/,      TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL}, /* Size can only be
> determined from status register */
> +       {"Atmel",       "AT45DB041D",           ATMEL_ID,
> AT_45DB041D,            512/*!*/,256/*!*/,      TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL}, /* Size can only be
> determined from status register */
> +       {"Atmel",       "AT45DB081D",           ATMEL_ID,
> AT_45DB081D,            1024/*!*/,256/*!*/,     TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL}, /* Size can only be
> determined from status register */
> +       {"Atmel",       "AT45DB161D",           ATMEL_ID,
> AT_45DB161D,            2048/*!*/,512/*!*/,     TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL}, /* Size can only be
> determined from status register */
> +       {"Atmel",       "AT45DB321C",           ATMEL_ID,
> AT_45DB321C,            4224/*!*/,528/*!*/,     TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL /* Incompatible read */}, /*
> No power of two sizes */
> +       {"Atmel",       "AT45DB321D",           ATMEL_ID,
> AT_45DB321D,            4096/*!*/,512/*!*/,     TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL}, /* Size can only be
> determined from status register */
> +       {"Atmel",       "AT45DB642D",           ATMEL_ID,
> AT_45DB642D,            8192/*!*/,1024/*!*/,    TEST_BAD_READ,
>  probe_spi_rdid,         NULL,   NULL,   NULL}, /* Size can only be
> determined from status register */
>        {"Atmel",       "AT49F002(N)",          ATMEL_ID,       AT_49F002N,
>             256,    256,            TEST_UNTESTED,  probe_jedec,
>  erase_chip_jedec,               write_49f002},
>        {"Atmel",       "AT49F002(N)T",         ATMEL_ID,       AT_49F002NT,
>            256,    256,            TEST_OK_PREW,   probe_jedec,
>  erase_chip_jedec,               write_49f002},
> -       {"Atmel",       "AT25DF321",            ATMEL_ID,       AT_25DF321,
>             4096,   256,            TEST_OK_PREW,   probe_spi_rdid,
> spi_chip_erase_c7,      spi_chip_write, spi_chip_read},
>        {"AMIC",        "A25L40P",              AMIC_ID,
>  AMIC_A25L40P,           512,    256,            TEST_OK_PREW,
> probe_spi_rdid4,        spi_chip_erase_c7,      spi_chip_write,
> spi_chip_read},
>        {"AMIC",        "A29002B",              AMIC_ID_NOPREFIX,
> AMIC_A29002B,         256,    64 * 1024,      TEST_UNTESTED,  probe_29f002,
>           erase_29f002,                   write_29f002},
>        {"AMIC",        "A29002T",              AMIC_ID_NOPREFIX,
> AMIC_A29002T,         256,    64 * 1024,      TEST_OK_PREW,   probe_29f002,
>           erase_29f002,                   write_29f002},
> @@ -157,6 +182,7 @@
>        {"Winbond",     "W39V080FA",            WINBOND_ID,     W_39V080FA,
>             1024,   64*1024,        TEST_OK_PREW,   probe_winbond_fwhub,
>  erase_winbond_fwhub,            write_winbond_fwhub},
>        {"Winbond",     "W39V080FA (dual mode)",WINBOND_ID,
> W_39V080FA_DM,          512,    64*1024,        TEST_UNTESTED,
>  probe_winbond_fwhub,    erase_winbond_fwhub,
>  write_winbond_fwhub},
>
> +       {"Atmel",       "unknown Atmel SPI chip",ATMEL_ID,
>  GENERIC_DEVICE_ID,      0,      256,            TEST_UNTESTED,
>  probe_spi_rdid,         NULL,                           NULL},
>        {"EON",         "unknown EON SPI chip",
> EON_ID_NOPREFIX,GENERIC_DEVICE_ID,      0,      256,
>  TEST_UNTESTED,  probe_spi_rdid,         NULL,
> NULL},
>        {"Macronix",    "unknown Macronix SPI chip",    MX_ID,
>  GENERIC_DEVICE_ID,      0,      256,            TEST_UNTESTED,
>  probe_spi_rdid,         NULL,                           NULL},
>        {"PMC",         "unknown PMC SPI chip", PMC_ID,
> GENERIC_DEVICE_ID,      0,      256,            TEST_UNTESTED,
>  probe_spi_rdid,         NULL,                           NULL},
> Index: flashrom-atmel/spi.h
> ===================================================================
> --- flashrom-atmel/spi.h        (Revision 3751)
> +++ flashrom-atmel/spi.h        (Arbeitskopie)
> @@ -29,6 +29,16 @@
>  #define JEDEC_RDID_OUTSIZE     0x01
>  #define JEDEC_RDID_INSIZE      0x03
>
> +/* AT25F512A has bit 3 as don't care bit in commands */
> +#define AT25F512A_RDID         0x15
> +#define AT25F512A_RDID_OUTSIZE 0x01
> +#define AT25F512A_RDID_INSIZE  0x02
> +
> +/* Read Electronic Manufacturer Signature */
> +#define JEDEC_REMS             0x
> +#define JEDEC_REMS_OUTSIZE     0x
> +#define JEDEC_REMS_INSIZE      0x


I don't understand these defines.

Other than that:
Acked-by: Myles Watson <mylesgw at gmail.com>

Thanks,
Myles
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20081115/18fa31de/attachment.html>


More information about the coreboot mailing list