• Matthias Schiffer's avatar
    net: dsa: mv88e6xxx: Avoid EEPROM timeout without EEPROM on 88E6250-family switches · e44894e2
    Matthias Schiffer authored
    88E6250-family switches have the quirk that the EEPROM Running flag can
    get stuck at 1 when no EEPROM is connected, causing
    mv88e6xxx_g2_eeprom_wait() to time out. We still want to wait for the
    EEPROM however, to avoid interrupting a transfer and leaving the EEPROM
    in an invalid state.
    
    The condition to wait for recommended by the hardware spec is the EEInt
    flag, however this flag is cleared on read, so before the hardware reset,
    is may have been cleared already even though the EEPROM has been read
    successfully.
    
    For this reason, we revive the mv88e6xxx_g1_wait_eeprom_done() function
    that was removed in commit 6ccf50d4
    ("net: dsa: mv88e6xxx: Avoid EEPROM timeout when EEPROM is absent") in a
    slightly refactored form, and introduce a new
    mv88e6xxx_g1_wait_eeprom_done_prereset() that additionally handles this
    case by triggering another EEPROM reload that can be waited on.
    
    On other switch models without this quirk, mv88e6xxx_g2_eeprom_wait() is
    kept, as it avoids the additional reload.
    
    Fixes: 6ccf50d4 ("net: dsa: mv88e6xxx: Avoid EEPROM timeout when EEPROM is absent")
    Signed-off-by: default avatarMatthias Schiffer <matthias.schiffer@ew.tq-group.com>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e44894e2
chip.c 209 KB