[Intel-wired-lan] [PATCH iwl-net v2] ice: dpll: fix phase offset value
Paul Menzel
pmenzel at molgen.mpg.de
Mon Dec 18 15:07:03 UTC 2023
Dear Arkadiusz,
Am 18.12.23 um 15:58 schrieb Arkadiusz Kubalewski:
> Stop dividing the phase_offset value received from firmware. This fault
> is present since the initial implementation.
> The phase_offset value received from firmware is in 0.01ps resolution.
> Dpll subsystem is using the value in 0.001ps, raw value is adjusted
> before providing it to the user.
>
> The user can observe the value of phase offset with response to
> `pin-get` netlink message of dpll subsystem for an active pin:
> $ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/dpll.yaml \
> --do pin-get --json '{"id":2}'
>
> Where example of correct response would be:
> {'board-label': 'C827_0-RCLKA',
> 'capabilities': 6,
> 'clock-id': 4658613174691613800,
> 'frequency': 1953125,
> 'id': 2,
> 'module-name': 'ice',
> 'parent-device': [{'direction': 'input',
> 'parent-id': 6,
> 'phase-offset': -216839550,
> 'prio': 9,
> 'state': 'connected'},
> {'direction': 'input',
> 'parent-id': 7,
> 'phase-offset': -42930,
> 'prio': 8,
> 'state': 'connected'}],
> 'phase-adjust': 0,
> 'phase-adjust-max': 16723,
> 'phase-adjust-min': -16723,
> 'type': 'mux'}
>
> Provided phase-offset value (-42930) shall be divided by the user with
> DPLL_PHASE_OFFSET_DIVIDER to get actual value of -42.930 ps.
>
> Before the fix, the response was not correct:
> {'board-label': 'C827_0-RCLKA',
> 'capabilities': 6,
> 'clock-id': 4658613174691613800,
> 'frequency': 1953125,
> 'id': 2,
> 'module-name': 'ice',
> 'parent-device': [{'direction': 'input',
> 'parent-id': 6,
> 'phase-offset': -216839,
> 'prio': 9,
> 'state': 'connected'},
> {'direction': 'input',
> 'parent-id': 7,
> 'phase-offset': -42,
> 'prio': 8,
> 'state': 'connected'}],
> 'phase-adjust': 0,
> 'phase-adjust-max': 16723,
> 'phase-adjust-min': -16723,
> 'type': 'mux'}
>
> Where phase-offset value (-42), after division
> (DPLL_PHASE_OFFSET_DIVIDER) would be: -0.042 ps.
Thank you for the detailed description.
> Fixes: 8a3a565ff210 ("ice: add admin commands to access cgu configuration")
> Fixes: 90e1c90750d7 ("ice: dpll: implement phase related callbacks")
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov at intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel at intel.com>
> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski at intel.com>
> ---
> drivers/net/ethernet/intel/ice/ice_common.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
> index 9a6c25f98632..edac34c796ce 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -5332,7 +5332,6 @@ ice_aq_get_cgu_dpll_status(struct ice_hw *hw, u8 dpll_num, u8 *ref_state,
> u8 *eec_mode)
> {
> struct ice_aqc_get_cgu_dpll_status *cmd;
> - const s64 nsec_per_psec = 1000LL;
> struct ice_aq_desc desc;
> int status;
>
> @@ -5348,8 +5347,7 @@ ice_aq_get_cgu_dpll_status(struct ice_hw *hw, u8 dpll_num, u8 *ref_state,
> *phase_offset = le32_to_cpu(cmd->phase_offset_h);
> *phase_offset <<= 32;
> *phase_offset += le32_to_cpu(cmd->phase_offset_l);
> - *phase_offset = div64_s64(sign_extend64(*phase_offset, 47),
> - nsec_per_psec);
> + *phase_offset = sign_extend64(*phase_offset, 47);
> *eec_mode = cmd->eec_mode;
> }
Reviewed-by: Paul Menzel <pmenzel at molgen.mpg.de>
Kind regards,
Paul
More information about the Intel-wired-lan
mailing list