• Michael Chan's avatar
    [TG3]: Add recovery logic when MMIOs are re-ordered · df3e6548
    Michael Chan authored
    Add recovery logic when we suspect that the system is re-ordering
    MMIOs. Re-ordered MMIOs to the send mailbox can cause bogus tx
    completions and hit BUG_ON() in the tx completion path.
    
    tg3 already has logic to handle re-ordered MMIOs by flushing the MMIOs
    that must be strictly ordered (such as the send mailbox).  Determining
    when to enable the flush is currently a manual process of adding known
    chipsets to a list.
    
    The new code replaces the BUG_ON() in the tx completion path with the
    call to tg3_tx_recover(). It will set the TG3_FLAG_MBOX_WRITE_REORDER
    flag and reset the chip later in the workqueue to recover and start
    flushing MMIOs to the mailbox.
    
    A message to report the problem will be printed. We will then decide
    whether or not to add the host bridge to the list of chipsets that do
    re-ordering.
    
    We may add some additional code later to print the host bridge's ID so
    that the user can report it more easily.
    
    The assumption that re-ordering can only happen on x86 systems is also
    removed.
    Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    df3e6548
tg3.h 84.9 KB