]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mvm: add an option to use ptp clock for rx timestamp
authorAvraham Stern <avraham.stern@intel.com>
Mon, 27 May 2024 16:05:56 +0000 (19:05 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 29 May 2024 08:33:11 +0000 (10:33 +0200)
Add a debugfs option to use the ptp clock time for rx device
timestamps. This can be useful to e.g. synchronize multiple NICs or
reporting the timestamp in the system clock instead of gp2.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Reviewed-by: Gregory Greenman <gregory.greenman@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240527190228.b197b4f3f9ed.I578ee916d5f517a2e3a89e890a8ea24065946427@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c

index 96c9382b98fb545be12482193e63a13fb85c0af4..879640a7d46a52ee58befd96c6cac6a3e8b54dd5 100644 (file)
@@ -2441,6 +2441,9 @@ void iwl_mvm_dbgfs_register(struct iwl_mvm *mvm)
        debugfs_create_file("mem", 0600, mvm->debugfs_dir, mvm,
                            &iwl_dbgfs_mem_ops);
 
+       debugfs_create_bool("rx_ts_ptp", 0600, mvm->debugfs_dir,
+                           &mvm->rx_ts_ptp);
+
        /*
         * Create a symlink with mac80211. It will be removed when mac80211
         * exists (before the opmode exists which removes the target.)
index 770a7098b0f9b443bac1481dc9ca4316b69bbea0..879fa1065bec5749ce42eb938a65f53b66cde9ec 100644 (file)
@@ -1309,6 +1309,9 @@ struct iwl_mvm {
        struct iwl_phy_specific_cfg phy_filters;
 #endif
 
+       /* report rx timestamp in ptp clock time */
+       bool rx_ts_ptp;
+
        unsigned long last_6ghz_passive_scan_jiffies;
        unsigned long last_reset_or_resume_time_jiffies;
 
index 2f9e2254fb4675f131ce619f1de82851559e8372..5af169f3d708afa5389563d7956a2428b91db33e 100644 (file)
@@ -1954,6 +1954,14 @@ static void iwl_mvm_rx_fill_status(struct iwl_mvm *mvm,
        iwl_mvm_decode_lsig(skb, phy_data);
 
        rx_status->device_timestamp = phy_data->gp2_on_air_rise;
+
+       if (mvm->rx_ts_ptp && mvm->monitor_on) {
+               u64 adj_time =
+                       iwl_mvm_ptp_get_adj_time(mvm, phy_data->gp2_on_air_rise * NSEC_PER_USEC);
+
+               rx_status->device_timestamp = div64_u64(adj_time, NSEC_PER_USEC);
+       }
+
        rx_status->freq = ieee80211_channel_to_frequency(phy_data->channel,
                                                         rx_status->band);
        iwl_mvm_get_signal_strength(mvm, rx_status, rate_n_flags,