Message ID | 20250204071259.15510-1-piotr.kwapulinski@intel.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [iwl-next] ixgbe: add PTP support for E610 device | expand |
On Tue, Feb 04, 2025 at 08:12:59AM +0100, Piotr Kwapulinski wrote: > Add PTP support for E610 adapter. The E610 is based on X550 and adds > firmware managed link, enhanced security capabilities and support for > updated server manageability. It does not introduce any new PTP features > compared to X550. > > Reviewed-by: Milena Olech <milena.olech@intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Piotr Kwapulinski <piotr.kwapulinski@intel.com> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 1 + > drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 13 +++++++++++-- > 2 files changed, 12 insertions(+), 2 deletions(-) Reviewed-by: Simon Horman <horms@kernel.org>
On 04/02/2025 07:12, Piotr Kwapulinski wrote: > Add PTP support for E610 adapter. The E610 is based on X550 and adds > firmware managed link, enhanced security capabilities and support for > updated server manageability. It does not introduce any new PTP features > compared to X550. > > Reviewed-by: Milena Olech <milena.olech@intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Piotr Kwapulinski <piotr.kwapulinski@intel.com> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 1 + > drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 13 +++++++++++-- > 2 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > index da91c58..f03925c 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > @@ -3185,6 +3185,7 @@ static int ixgbe_get_ts_info(struct net_device *dev, > case ixgbe_mac_X550: > case ixgbe_mac_X550EM_x: > case ixgbe_mac_x550em_a: > + case ixgbe_mac_e610: > info->rx_filters |= BIT(HWTSTAMP_FILTER_ALL); > break; > case ixgbe_mac_X540: > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c > index 9339edb..eef25e1 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c > @@ -140,6 +140,7 @@ > * proper mult and shift to convert the cycles into nanoseconds of time. > */ > #define IXGBE_X550_BASE_PERIOD 0xC80000000ULL > +#define IXGBE_E610_BASE_PERIOD 0x333333333ULL > #define INCVALUE_MASK 0x7FFFFFFF > #define ISGN 0x80000000 > > @@ -415,6 +416,7 @@ static void ixgbe_ptp_convert_to_hwtstamp(struct ixgbe_adapter *adapter, > case ixgbe_mac_X550: > case ixgbe_mac_X550EM_x: > case ixgbe_mac_x550em_a: > + case ixgbe_mac_e610: > /* Upper 32 bits represent billions of cycles, lower 32 bits > * represent cycles. However, we use timespec64_to_ns for the > * correct math even though the units haven't been corrected > @@ -492,11 +494,13 @@ static int ixgbe_ptp_adjfine_X550(struct ptp_clock_info *ptp, long scaled_ppm) > struct ixgbe_adapter *adapter = > container_of(ptp, struct ixgbe_adapter, ptp_caps); > struct ixgbe_hw *hw = &adapter->hw; > + u64 rate, base; > bool neg_adj; > - u64 rate; > u32 inca; > > - neg_adj = diff_by_scaled_ppm(IXGBE_X550_BASE_PERIOD, scaled_ppm, &rate); > + base = hw->mac.type == ixgbe_mac_e610 ? IXGBE_E610_BASE_PERIOD : > + IXGBE_X550_BASE_PERIOD; > + neg_adj = diff_by_scaled_ppm(base, scaled_ppm, &rate); > > /* warn if rate is too large */ > if (rate >= INCVALUE_MASK) > @@ -559,6 +563,7 @@ static int ixgbe_ptp_gettimex(struct ptp_clock_info *ptp, > case ixgbe_mac_X550: > case ixgbe_mac_X550EM_x: > case ixgbe_mac_x550em_a: > + case ixgbe_mac_e610: > /* Upper 32 bits represent billions of cycles, lower 32 bits > * represent cycles. However, we use timespec64_to_ns for the > * correct math even though the units haven't been corrected > @@ -1067,6 +1072,7 @@ static int ixgbe_ptp_set_timestamp_mode(struct ixgbe_adapter *adapter, > case ixgbe_mac_X550: > case ixgbe_mac_X550EM_x: > case ixgbe_mac_x550em_a: > + case ixgbe_mac_e610: > /* enable timestamping all packets only if at least some > * packets were requested. Otherwise, play nice and disable > * timestamping > @@ -1233,6 +1239,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter) > fallthrough; > case ixgbe_mac_x550em_a: > case ixgbe_mac_X550: > + case ixgbe_mac_e610: > cc.read = ixgbe_ptp_read_X550; > break; > case ixgbe_mac_X540: > @@ -1280,6 +1287,7 @@ static void ixgbe_ptp_init_systime(struct ixgbe_adapter *adapter) > case ixgbe_mac_X550EM_x: > case ixgbe_mac_x550em_a: > case ixgbe_mac_X550: > + case ixgbe_mac_e610: > tsauxc = IXGBE_READ_REG(hw, IXGBE_TSAUXC); > > /* Reset SYSTIME registers to 0 */ > @@ -1407,6 +1415,7 @@ static long ixgbe_ptp_create_clock(struct ixgbe_adapter *adapter) > case ixgbe_mac_X550: > case ixgbe_mac_X550EM_x: > case ixgbe_mac_x550em_a: > + case ixgbe_mac_e610: > snprintf(adapter->ptp_caps.name, 16, "%s", netdev->name); > adapter->ptp_caps.owner = THIS_MODULE; > adapter->ptp_caps.max_adj = 30000000; LGTM, Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index da91c58..f03925c 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -3185,6 +3185,7 @@ static int ixgbe_get_ts_info(struct net_device *dev, case ixgbe_mac_X550: case ixgbe_mac_X550EM_x: case ixgbe_mac_x550em_a: + case ixgbe_mac_e610: info->rx_filters |= BIT(HWTSTAMP_FILTER_ALL); break; case ixgbe_mac_X540: diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c index 9339edb..eef25e1 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c @@ -140,6 +140,7 @@ * proper mult and shift to convert the cycles into nanoseconds of time. */ #define IXGBE_X550_BASE_PERIOD 0xC80000000ULL +#define IXGBE_E610_BASE_PERIOD 0x333333333ULL #define INCVALUE_MASK 0x7FFFFFFF #define ISGN 0x80000000 @@ -415,6 +416,7 @@ static void ixgbe_ptp_convert_to_hwtstamp(struct ixgbe_adapter *adapter, case ixgbe_mac_X550: case ixgbe_mac_X550EM_x: case ixgbe_mac_x550em_a: + case ixgbe_mac_e610: /* Upper 32 bits represent billions of cycles, lower 32 bits * represent cycles. However, we use timespec64_to_ns for the * correct math even though the units haven't been corrected @@ -492,11 +494,13 @@ static int ixgbe_ptp_adjfine_X550(struct ptp_clock_info *ptp, long scaled_ppm) struct ixgbe_adapter *adapter = container_of(ptp, struct ixgbe_adapter, ptp_caps); struct ixgbe_hw *hw = &adapter->hw; + u64 rate, base; bool neg_adj; - u64 rate; u32 inca; - neg_adj = diff_by_scaled_ppm(IXGBE_X550_BASE_PERIOD, scaled_ppm, &rate); + base = hw->mac.type == ixgbe_mac_e610 ? IXGBE_E610_BASE_PERIOD : + IXGBE_X550_BASE_PERIOD; + neg_adj = diff_by_scaled_ppm(base, scaled_ppm, &rate); /* warn if rate is too large */ if (rate >= INCVALUE_MASK) @@ -559,6 +563,7 @@ static int ixgbe_ptp_gettimex(struct ptp_clock_info *ptp, case ixgbe_mac_X550: case ixgbe_mac_X550EM_x: case ixgbe_mac_x550em_a: + case ixgbe_mac_e610: /* Upper 32 bits represent billions of cycles, lower 32 bits * represent cycles. However, we use timespec64_to_ns for the * correct math even though the units haven't been corrected @@ -1067,6 +1072,7 @@ static int ixgbe_ptp_set_timestamp_mode(struct ixgbe_adapter *adapter, case ixgbe_mac_X550: case ixgbe_mac_X550EM_x: case ixgbe_mac_x550em_a: + case ixgbe_mac_e610: /* enable timestamping all packets only if at least some * packets were requested. Otherwise, play nice and disable * timestamping @@ -1233,6 +1239,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter) fallthrough; case ixgbe_mac_x550em_a: case ixgbe_mac_X550: + case ixgbe_mac_e610: cc.read = ixgbe_ptp_read_X550; break; case ixgbe_mac_X540: @@ -1280,6 +1287,7 @@ static void ixgbe_ptp_init_systime(struct ixgbe_adapter *adapter) case ixgbe_mac_X550EM_x: case ixgbe_mac_x550em_a: case ixgbe_mac_X550: + case ixgbe_mac_e610: tsauxc = IXGBE_READ_REG(hw, IXGBE_TSAUXC); /* Reset SYSTIME registers to 0 */ @@ -1407,6 +1415,7 @@ static long ixgbe_ptp_create_clock(struct ixgbe_adapter *adapter) case ixgbe_mac_X550: case ixgbe_mac_X550EM_x: case ixgbe_mac_x550em_a: + case ixgbe_mac_e610: snprintf(adapter->ptp_caps.name, 16, "%s", netdev->name); adapter->ptp_caps.owner = THIS_MODULE; adapter->ptp_caps.max_adj = 30000000;