Skip to content
  • Kyle Moffett's avatar
    e1000: Allow direct access to the E1000 SPI EEPROM device · ce5207e1
    Kyle Moffett authored and Wolfgang Denk's avatar Wolfgang Denk committed
    
    
    As a part of the manufacturing process for some of our custom hardware,
    we are programming the EEPROMs attached to our Intel 82571EB controllers
    from software using U-Boot and Linux.
    
    This code provides several conditionally-compiled features to assist in
    our manufacturing process:
    
      CONFIG_CMD_E1000:
        This is a basic "e1000" command which allows querying the controller
        and (if other config options are set) performing EEPROM programming.
        In particular, with CONFIG_E1000_SPI this allows you to display a
        hex-dump of the EEPROM, copy to/from main memory, and verify/update
        the software checksum.
    
      CONFIG_E1000_SPI_GENERIC:
        Build a generic SPI driver providing the standard U-Boot SPI driver
        interface.  This allows commands such as "sspi" to access the bus
        attached to the E1000 controller.  Additionally, some E1000 chipsets
        can support user data in a reserved space in the E1000 EEPROM which
        could be used for U-Boot environment storage.
    
      CONFIG_E1000_SPI:
        The core SPI access code used by the above interfaces.
    
    For example, the following commands allow you to program the EEPROM from
    a USB device (assumes CONFIG_E1000_SPI and CONFIG_CMD_E1000 are enabled):
      usb start
      fatload usb 0 $loadaddr 82571EB_No_Mgmt_Discrete-LOM.bin
      e1000 0 spi program $loadaddr 0 1024
      e1000 0 spi checksum update
    
    Please keep in mind that the Intel-provided .eep files are organized as
    16-bit words.  When converting them to binary form for programming you
    must byteswap each 16-bit word so that it is in little-endian form.
    
    This means that when reading and writing words to the SPI EEPROM, the
    bit ordering for each word looks like this on the wire:
    
      Time >>>
    ------------------------------------------------------------------
      ... [7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8], ...
    ------------------------------------------------------------------
      (MSB is 15, LSB is 0).
    
    Signed-off-by: default avatarKyle Moffett <Kyle.D.Moffett@boeing.com>
    Cc: Ben Warren <biggerbadderben@gmail.com>
    ce5207e1