Lines Matching refs:mvm

23 static void iwl_mvm_ptp_update_new_read(struct iwl_mvm *mvm, u32 gp2)  in iwl_mvm_ptp_update_new_read()  argument
28 if (gp2 < mvm->ptp_data.last_gp2 && in iwl_mvm_ptp_update_new_read()
29 mvm->ptp_data.last_gp2 - gp2 < IWL_PTP_WRAP_THRESHOLD_USEC) { in iwl_mvm_ptp_update_new_read()
30 IWL_DEBUG_INFO(mvm, in iwl_mvm_ptp_update_new_read()
32 gp2, mvm->ptp_data.last_gp2); in iwl_mvm_ptp_update_new_read()
36 if (gp2 < mvm->ptp_data.last_gp2) { in iwl_mvm_ptp_update_new_read()
37 mvm->ptp_data.wrap_counter++; in iwl_mvm_ptp_update_new_read()
38 IWL_DEBUG_INFO(mvm, in iwl_mvm_ptp_update_new_read()
40 mvm->ptp_data.wrap_counter); in iwl_mvm_ptp_update_new_read()
43 mvm->ptp_data.last_gp2 = gp2; in iwl_mvm_ptp_update_new_read()
44 schedule_delayed_work(&mvm->ptp_data.dwork, IWL_PTP_WRAP_TIME); in iwl_mvm_ptp_update_new_read()
47 u64 iwl_mvm_ptp_get_adj_time(struct iwl_mvm *mvm, u64 base_time_ns) in iwl_mvm_ptp_get_adj_time() argument
49 struct ptp_data *data = &mvm->ptp_data; in iwl_mvm_ptp_get_adj_time()
50 u64 last_gp2_ns = mvm->ptp_data.scale_update_gp2 * NSEC_PER_USEC; in iwl_mvm_ptp_get_adj_time()
54 iwl_mvm_ptp_update_new_read(mvm, in iwl_mvm_ptp_get_adj_time()
57 IWL_DEBUG_INFO(mvm, "base_time_ns=%llu, wrap_counter=%u\n", in iwl_mvm_ptp_get_adj_time()
67 IWL_DEBUG_INFO(mvm, "Time before scale update - ignore\n"); in iwl_mvm_ptp_get_adj_time()
72 IWL_DEBUG_INFO(mvm, "diff ns=%llu\n", (unsigned long long)diff); in iwl_mvm_ptp_get_adj_time()
76 IWL_DEBUG_INFO(mvm, "scaled diff ns=%llu\n", (unsigned long long)diff); in iwl_mvm_ptp_get_adj_time()
80 IWL_DEBUG_INFO(mvm, "base=%llu delta=%lld adj=%llu\n", in iwl_mvm_ptp_get_adj_time()
87 iwl_mvm_get_crosstimestamp_fw(struct iwl_mvm *mvm, u32 *gp2, u64 *sys_time) in iwl_mvm_get_crosstimestamp_fw() argument
103 ret = iwl_mvm_send_cmd(mvm, &cmd); in iwl_mvm_get_crosstimestamp_fw()
110 IWL_ERR(mvm, "PTP: Invalid command response\n"); in iwl_mvm_get_crosstimestamp_fw()
127 static void iwl_mvm_phc_get_crosstimestamp_loop(struct iwl_mvm *mvm, in iwl_mvm_phc_get_crosstimestamp_loop() argument
136 iwl_mvm_get_sync_time(mvm, CLOCK_REALTIME, &tmp_gp2, NULL, in iwl_mvm_phc_get_crosstimestamp_loop()
143 IWL_DEBUG_INFO(mvm, "PTP: new times: gp2=%u sys=%lld\n", in iwl_mvm_phc_get_crosstimestamp_loop()
153 struct iwl_mvm *mvm = container_of(ptp, struct iwl_mvm, in iwl_mvm_phc_get_crosstimestamp() local
165 if (!mvm->ptp_data.ptp_clock) { in iwl_mvm_phc_get_crosstimestamp()
166 IWL_ERR(mvm, "No PHC clock registered\n"); in iwl_mvm_phc_get_crosstimestamp()
170 mutex_lock(&mvm->mutex); in iwl_mvm_phc_get_crosstimestamp()
171 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_SYNCED_TIME)) { in iwl_mvm_phc_get_crosstimestamp()
172 ret = iwl_mvm_get_crosstimestamp_fw(mvm, &gp2, &sys_time); in iwl_mvm_phc_get_crosstimestamp()
177 iwl_mvm_phc_get_crosstimestamp_loop(mvm, &sys_time, &gp2); in iwl_mvm_phc_get_crosstimestamp()
180 gp2_ns = iwl_mvm_ptp_get_adj_time(mvm, (u64)gp2 * NSEC_PER_USEC); in iwl_mvm_phc_get_crosstimestamp()
182 IWL_INFO(mvm, "Got Sync Time: GP2:%u, last_GP2: %u, GP2_ns: %lld, sys_time: %lld\n", in iwl_mvm_phc_get_crosstimestamp()
183 gp2, mvm->ptp_data.last_gp2, gp2_ns, (s64)sys_time); in iwl_mvm_phc_get_crosstimestamp()
190 mutex_unlock(&mvm->mutex); in iwl_mvm_phc_get_crosstimestamp()
196 struct iwl_mvm *mvm = container_of(wk, struct iwl_mvm, in iwl_mvm_ptp_work() local
200 mutex_lock(&mvm->mutex); in iwl_mvm_ptp_work()
201 gp2 = iwl_mvm_get_systime(mvm); in iwl_mvm_ptp_work()
202 iwl_mvm_ptp_update_new_read(mvm, gp2); in iwl_mvm_ptp_work()
203 mutex_unlock(&mvm->mutex); in iwl_mvm_ptp_work()
209 struct iwl_mvm *mvm = container_of(ptp, struct iwl_mvm, in iwl_mvm_ptp_gettime() local
214 mutex_lock(&mvm->mutex); in iwl_mvm_ptp_gettime()
215 gp2 = iwl_mvm_get_systime(mvm); in iwl_mvm_ptp_gettime()
216 ns = iwl_mvm_ptp_get_adj_time(mvm, gp2 * NSEC_PER_USEC); in iwl_mvm_ptp_gettime()
217 mutex_unlock(&mvm->mutex); in iwl_mvm_ptp_gettime()
225 struct iwl_mvm *mvm = container_of(ptp, struct iwl_mvm, in iwl_mvm_ptp_adjtime() local
230 mutex_lock(&mvm->mutex); in iwl_mvm_ptp_adjtime()
232 IWL_DEBUG_INFO(mvm, "delta=%lld, new delta=%lld\n", (long long)delta, in iwl_mvm_ptp_adjtime()
234 mutex_unlock(&mvm->mutex); in iwl_mvm_ptp_adjtime()
240 struct iwl_mvm *mvm = container_of(ptp, struct iwl_mvm, in iwl_mvm_ptp_adjfine() local
242 struct ptp_data *data = &mvm->ptp_data; in iwl_mvm_ptp_adjfine()
245 mutex_lock(&mvm->mutex); in iwl_mvm_ptp_adjfine()
251 gp2 = iwl_mvm_get_systime(mvm); in iwl_mvm_ptp_adjfine()
253 iwl_mvm_ptp_get_adj_time(mvm, gp2 * NSEC_PER_USEC); in iwl_mvm_ptp_adjfine()
259 IWL_DEBUG_INFO(mvm, "adjfine: scaled_ppm=%ld new=%llu\n", in iwl_mvm_ptp_adjfine()
262 mutex_unlock(&mvm->mutex); in iwl_mvm_ptp_adjfine()
271 void iwl_mvm_ptp_init(struct iwl_mvm *mvm) in iwl_mvm_ptp_init() argument
274 if (WARN_ON(mvm->ptp_data.ptp_clock)) in iwl_mvm_ptp_init()
277 mvm->ptp_data.ptp_clock_info.owner = THIS_MODULE; in iwl_mvm_ptp_init()
278 mvm->ptp_data.ptp_clock_info.max_adj = 0x7fffffff; in iwl_mvm_ptp_init()
279 mvm->ptp_data.ptp_clock_info.getcrosststamp = in iwl_mvm_ptp_init()
281 mvm->ptp_data.ptp_clock_info.adjfine = iwl_mvm_ptp_adjfine; in iwl_mvm_ptp_init()
282 mvm->ptp_data.ptp_clock_info.adjtime = iwl_mvm_ptp_adjtime; in iwl_mvm_ptp_init()
283 mvm->ptp_data.ptp_clock_info.gettime64 = iwl_mvm_ptp_gettime; in iwl_mvm_ptp_init()
284 mvm->ptp_data.scaled_freq = SCALE_FACTOR; in iwl_mvm_ptp_init()
287 snprintf(mvm->ptp_data.ptp_clock_info.name, in iwl_mvm_ptp_init()
288 sizeof(mvm->ptp_data.ptp_clock_info.name), in iwl_mvm_ptp_init()
291 INIT_DELAYED_WORK(&mvm->ptp_data.dwork, iwl_mvm_ptp_work); in iwl_mvm_ptp_init()
293 mvm->ptp_data.ptp_clock = in iwl_mvm_ptp_init()
294 ptp_clock_register(&mvm->ptp_data.ptp_clock_info, mvm->dev); in iwl_mvm_ptp_init()
296 if (IS_ERR(mvm->ptp_data.ptp_clock)) { in iwl_mvm_ptp_init()
297 IWL_ERR(mvm, "Failed to register PHC clock (%ld)\n", in iwl_mvm_ptp_init()
298 PTR_ERR(mvm->ptp_data.ptp_clock)); in iwl_mvm_ptp_init()
299 mvm->ptp_data.ptp_clock = NULL; in iwl_mvm_ptp_init()
300 } else if (mvm->ptp_data.ptp_clock) { in iwl_mvm_ptp_init()
301 IWL_INFO(mvm, "Registered PHC clock: %s, with index: %d\n", in iwl_mvm_ptp_init()
302 mvm->ptp_data.ptp_clock_info.name, in iwl_mvm_ptp_init()
303 ptp_clock_index(mvm->ptp_data.ptp_clock)); in iwl_mvm_ptp_init()
312 void iwl_mvm_ptp_remove(struct iwl_mvm *mvm) in iwl_mvm_ptp_remove() argument
314 if (mvm->ptp_data.ptp_clock) { in iwl_mvm_ptp_remove()
315 IWL_INFO(mvm, "Unregistering PHC clock: %s, with index: %d\n", in iwl_mvm_ptp_remove()
316 mvm->ptp_data.ptp_clock_info.name, in iwl_mvm_ptp_remove()
317 ptp_clock_index(mvm->ptp_data.ptp_clock)); in iwl_mvm_ptp_remove()
319 ptp_clock_unregister(mvm->ptp_data.ptp_clock); in iwl_mvm_ptp_remove()
320 mvm->ptp_data.ptp_clock = NULL; in iwl_mvm_ptp_remove()
321 memset(&mvm->ptp_data.ptp_clock_info, 0, in iwl_mvm_ptp_remove()
322 sizeof(mvm->ptp_data.ptp_clock_info)); in iwl_mvm_ptp_remove()
323 mvm->ptp_data.last_gp2 = 0; in iwl_mvm_ptp_remove()
324 cancel_delayed_work_sync(&mvm->ptp_data.dwork); in iwl_mvm_ptp_remove()