On all E82X products (E822, E823 and E825), Tx timestamps are read using sideband queue. This is a very robust HW queue and it's used only for accessing PHYs and CGU, which means it can use spin_locks and delays instead of mutexes and sleeps like slow admin queue handled by the FW.
This allows reading the sideband queue in the top half of the interrupt and allows to avoid bottom half scheduling delays, which speeds up Tx timestamping process significantly. Introduce new structure ice_sq_ops, which allows to assign lock/unlock operations based on the queue type on queue init. Karol Kolacinski (4): ice: skip completion for sideband queue writes ice: refactor ice_sq_send_cmd and ice_shutdown_sq ice: use spin_lock for sideband queue send queue ice: read Tx timestamps in the IRQ top half drivers/net/ethernet/intel/ice/ice_common.c | 21 +- drivers/net/ethernet/intel/ice/ice_common.h | 3 +- drivers/net/ethernet/intel/ice/ice_controlq.c | 252 +++++++++++------- drivers/net/ethernet/intel/ice/ice_controlq.h | 20 +- drivers/net/ethernet/intel/ice/ice_ptp.c | 46 ++-- drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 62 +++-- drivers/net/ethernet/intel/ice/ice_sbq_cmd.h | 5 +- 7 files changed, 251 insertions(+), 158 deletions(-) base-commit: 82bb0098b73f72a026b4bb49206a8c1d90974edc -- 2.49.0
