From 25c8802a2e1bd9184af58d139f0f19d213731623 Mon Sep 17 00:00:00 2001 From: Qi Zhang Date: Tue, 10 Aug 2021 10:51:19 +0800 Subject: [PATCH] net/ice/base: add accessors to get/set time reference The E822 device clock might come from a variety of different sources, called TIME_REFs. The firmware reports the current TIME_REF as part of its function capabilities, which the driver caches when it loads. Add an accessor function to look up the current TIME_REF from the capabilities. This reduces line length significantly and also avoids a tight coupling to the capabilities structure. In some cases, TIME_REF might change at run time. This can occur in the event that the CGU registers are updated. When this happens, its possible that the capabilities structure can be out of date until the capabilities are re-read. Add a setter function to update the TIME_REF when this occurs. The driver can call this function after updating the CGU to ensure that the TIME_REF in the capabilities structure is up to date, without needing to re-read the entire capabilities from firmware. Signed-off-by: Jacob Keller Signed-off-by: Qi Zhang Acked-by: Junfeng Guo --- drivers/net/ice/base/ice_ptp_hw.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/net/ice/base/ice_ptp_hw.h b/drivers/net/ice/base/ice_ptp_hw.h index eb0e410ed8..ad2349f60a 100644 --- a/drivers/net/ice/base/ice_ptp_hw.h +++ b/drivers/net/ice/base/ice_ptp_hw.h @@ -124,6 +124,31 @@ enum ice_status ice_cfg_cgu_pll_e822(struct ice_hw *hw, enum ice_time_ref_freq clk_freq, enum ice_clk_src clk_src); +/** + * ice_e822_time_ref - Get the current TIME_REF from capabilities + * @hw: pointer to the HW structure + * + * Returns the current TIME_REF from the capabilities structure. + */ +static inline enum ice_time_ref_freq ice_e822_time_ref(struct ice_hw *hw) +{ + return hw->func_caps.ts_func_info.time_ref; +} + +/** + * ice_set_e822_time_ref - Set new TIME_REF + * @hw: pointer to the HW structure + * @time_ref: new TIME_REF to set + * + * Update the TIME_REF in the capabilities structure in response to some + * change, such as an update to the CGU registers. + */ +static inline void +ice_set_e822_time_ref(struct ice_hw *hw, enum ice_time_ref_freq time_ref) +{ + hw->func_caps.ts_func_info.time_ref = time_ref; +} + static inline u64 ice_e822_pll_freq(enum ice_time_ref_freq time_ref) { return e822_time_ref[time_ref].pll_freq; -- 2.20.1