Message ID | 20240813125513.8212-1-mateusz.polchlopek@intel.com |
---|---|
Headers | show |
Series | Add support for Rx timestamping for both ice and iavf drivers | expand |
On 8/13/2024 5:54 AM, Mateusz Polchlopek wrote: > Initially, during VF creation it registers the PTP clock in > the system and negotiates with PF it's capabilities. In the > meantime the PF enables the Flexible Descriptor for VF. > Only this type of descriptor allows to receive Rx timestamps. > > Enabling virtual clock would be possible, though it would probably > perform poorly due to the lack of direct time access. > > Enable timestamping should be done using userspace tools, e.g. > hwstamp_ctl -i $VF -r 14 > > In order to report the timestamps to userspace, the VF extends > timestamp to 40b. > > To support this feature the flexible descriptors and PTP part > in iavf driver have been introduced. Can you check that each patch compiles cleanly? Some of these are not (especially w/clang). Also, there's some scattered checkpatch issues if you could run and correct the applicable ones. Thanks, Tony > --- > v9: > - another big refactor of code, again the list is too long to describe each change. Only > patch1 and patch12 has not been changed AFAIR. Please take a look on v8 and changes > requests from Alexander L. (in short - fixed structs paddings, aligns, optimized rx hot > path, renamed few structs, added "const" keyword where applicable, added kdoc comments > to newly introduced structs and defines, removed unnecessary casts, simplified few > functions and few more). > > v8: > - big refactor to make code more optimised (too many changes to list them here, please > take a look on v7 patch9 and comments from Alexander L) - patch 11. Because of that I > decided to remove all gathered RB tags. > - changed newly introduced spinlock aq_cmd_lock to mutex type to avoid deadlock - patch 7 > - adjusted function iavf_is_descriptor_done() to extract fields from descriptor in a new > way - patch 12 > - changed (and removed unused) defines that describe specific fields and bits in > descriptor > https://lore.kernel.org/netdev/20240730091509.18846-1-mateusz.polchlopek@intel.com/ > > v7: > - changed .ndo_eth_ioctl to .ndo_hwtstamp_get and .ndo_hwtstamp_set > (according to Kuba's suggestion) - patch 11 > https://lore.kernel.org/netdev/20240604131400.13655-1-mateusz.polchlopek@intel.com/ > > v6: > - reordered tags > - added RB tags where applicable > - removed redundant instructions in ifs - patch 4 and patch 5 > - changed teardown to LIFO, adapter->ptp.initialized = false > moved to the top of function - patch 6 > - changed cpu-endianess for testing - patch 9 > - aligned to libeth changes - patch 9 > https://lore.kernel.org/netdev/20240528112301.5374-1-mateusz.polchlopek@intel.com/ > > v5: > - fixed all new issues generated by this series in kernel-doc > https://lore.kernel.org/netdev/20240418052500.50678-1-mateusz.polchlopek@intel.com/ > > v4: > - fixed duplicated argument in iavf_virtchnl.c reported by coccicheck > https://lore.kernel.org/netdev/20240410121706.6223-1-mateusz.polchlopek@intel.com/ > > v3: > - added RB in commit 6 > - removed inline keyword in commit 9 > - fixed sparse issues in commit 9 and commit 10 > - used GENMASK_ULL when possible in commit 9 > https://lore.kernel.org/netdev/20240403131927.87021-1-mateusz.polchlopek@intel.com/ > > v2: > - fixed warning related to wrong specifier to dev_err_once in > commit 7 > - fixed warnings related to unused variables in commit 9 > https://lore.kernel.org/netdev/20240327132543.15923-1-mateusz.polchlopek@intel.com/ > > v1: > - initial series > https://lore.kernel.org/netdev/20240326115116.10040-1-mateusz.polchlopek@intel.com/ > --- > > Jacob Keller (10): > virtchnl: add support for enabling PTP on iAVF > virtchnl: add enumeration for the rxdid format > iavf: add support for negotiating flexible RXDID format > iavf: negotiate PTP capabilities > iavf: add initial framework for registering PTP clock > iavf: add support for indirect access to PHC time > iavf: periodically cache PHC time > iavf: refactor iavf_clean_rx_irq to support legacy and flex > descriptors > iavf: handle set and get timestamps ops > iavf: add support for Rx timestamps to hotpath > > Mateusz Polchlopek (3): > libeth: move idpf_rx_csum_decoded and idpf_rx_extracted > iavf: define Rx descriptors as qwords > iavf: Implement checking DD desc field > > Simei Su (1): > ice: support Rx timestamp on flex descriptor > > drivers/net/ethernet/intel/iavf/Makefile | 2 + > drivers/net/ethernet/intel/iavf/iavf.h | 35 +- > drivers/net/ethernet/intel/iavf/iavf_main.c | 228 ++++++++- > drivers/net/ethernet/intel/iavf/iavf_ptp.c | 481 ++++++++++++++++++ > drivers/net/ethernet/intel/iavf/iavf_ptp.h | 26 + > drivers/net/ethernet/intel/iavf/iavf_trace.h | 6 +- > drivers/net/ethernet/intel/iavf/iavf_txrx.c | 425 ++++++++++++---- > drivers/net/ethernet/intel/iavf/iavf_txrx.h | 22 +- > drivers/net/ethernet/intel/iavf/iavf_type.h | 272 +++++----- > drivers/net/ethernet/intel/iavf/iavf_types.h | 36 ++ > .../net/ethernet/intel/iavf/iavf_virtchnl.c | 223 ++++++++ > drivers/net/ethernet/intel/ice/ice_base.c | 3 - > drivers/net/ethernet/intel/ice/ice_lib.c | 5 +- > drivers/net/ethernet/intel/ice/ice_ptp.c | 4 +- > drivers/net/ethernet/intel/ice/ice_ptp.h | 8 + > drivers/net/ethernet/intel/ice/ice_vf_lib.h | 2 + > drivers/net/ethernet/intel/ice/ice_virtchnl.c | 96 +++- > drivers/net/ethernet/intel/ice/ice_virtchnl.h | 6 + > .../intel/ice/ice_virtchnl_allowlist.c | 7 + > .../ethernet/intel/idpf/idpf_singleq_txrx.c | 51 +- > drivers/net/ethernet/intel/idpf/idpf_txrx.c | 16 +- > drivers/net/ethernet/intel/idpf/idpf_txrx.h | 19 - > include/linux/avf/virtchnl.h | 131 ++++- > include/net/libeth/rx.h | 42 ++ > 24 files changed, 1810 insertions(+), 336 deletions(-) > create mode 100644 drivers/net/ethernet/intel/iavf/iavf_ptp.c > create mode 100644 drivers/net/ethernet/intel/iavf/iavf_ptp.h > create mode 100644 drivers/net/ethernet/intel/iavf/iavf_types.h > > > base-commit: d1815992133ebcc6007009645571f322f4bc7c44