• Steve Hodgson's avatar
    sfc: Fix event based MCDI completion and MC REBOOT/CMDDONE ordering issue · 18e3ee2c
    Steve Hodgson authored
    The mcfw *never* sends CMDDONE when rebooting. Changing this so that it always
    sends CMDDONE *before* REBOOT is easy on Siena, but it's not obvious that we
    could guarantee to be able to implement this on future hardware.
    
    Given this, I'm less convinced that the protocol should be changed.
    
    To reiterate the failure mode: The driver sees this:
    
     issue command
     receive REBOOT event
    
    Was that reboot event sent before the command was issued, or in
    response to the command? If the former then there will be a subsequent
    CMDDONE event, if the latter, then there will be no CMDDONE event.
    
    Options to resolve this are:
    
     1. REBOOT always completes an outstanding mcdi request, and we set
        the credits count to ignore a subsequent CMDDONE event with
        mismatching seqno.
    
     2. REBOOT never completes an outstanding mcdi request. If there is
        no CMDDONE event then we rely on the mcdi timeout code to complete
        the outstanding request, incurring a 10s delay.
    
    I'd argue that (2) is tidier, but that incurring a 10s delay is a little
    needless. Let's go with (1).
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    18e3ee2c
mcdi.c 31.1 KB