• Jacob Keller's avatar
    ice: periodically kick Tx timestamp interrupt · 712e8763
    Jacob Keller authored
    The E822 hardware for Tx timestamping keeps track of how many
    outstanding timestamps are still in the PHY memory block. It will not
    generate a new interrupt to the MAC until all of the timestamps in the
    region have been read.
    
    If somehow all the available data is not read, but the driver has exited
    its interrupt routine already, the PHY will not generate a new interrupt
    even if new timestamp data is captured. Because no interrupt is
    generated, the driver never processes the timestamp data. This state
    results in a permanent failure for all future Tx timestamps.
    
    It is not clear how the driver and hardware could enter this state.
    However, if it does, there is currently no recovery mechanism.
    
    Add a recovery mechanism via the periodic PTP work thread which invokes
    ice_ptp_periodic_work(). Introduce a new check,
    ice_ptp_maybe_trigger_tx_interrupt() which checks the PHY timestamp
    ready bitmask. If any bits are set, trigger a software interrupt by
    writing to PFINT_OICR.
    
    Once triggered, the main timestamp processing thread will read through
    the PHY data and clear the outstanding timestamp data. Once cleared, new
    data should trigger interrupts as expected.
    
    This should allow recovery from such a state rather than leaving the
    device in a state where we cannot process Tx timestamps.
    
    It is possible that this function checks for timestamp data
    simultaneously with the interrupt, and it might trigger additional
    unnecessary interrupts. This will cause a small amount of additional
    processing.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: default avatarKarol Kolacinski <karol.kolacinski@intel.com>
    Reviewed-by: default avatarAndrii Staikov <andrii.staikov@intel.com>
    Reviewed-by: default avatarSimon Horman <horms@kernel.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    712e8763
ice_ptp.c 85 KB