mbox series

[Intel-wired-lan,iwl-next,v9,00/14] Add support for Rx timestamping for both ice and iavf drivers

Message ID 20240813125513.8212-1-mateusz.polchlopek@intel.com (mailing list archive)
Headers show
Series Add support for Rx timestamping for both ice and iavf drivers | expand

Message

Mateusz Polchlopek Aug. 13, 2024, 12:54 p.m. UTC
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.

---
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

Comments

Tony Nguyen Aug. 15, 2024, 10:16 p.m. UTC | #1
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