From: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
To: Roopni Devanathan <roopni.devanathan@oss.qualcomm.com>,
ath12k@lists.infradead.org
Cc: linux-wireless@vger.kernel.org,
Harshitha Prem <harshitha.prem@oss.qualcomm.com>
Subject: Re: [PATCH ath-next] wifi: ath12k: Create symlink for each radio in a wiphy
Date: Tue, 7 Apr 2026 11:29:40 +0800 [thread overview]
Message-ID: <03c3da0d-4bea-49be-b0b3-4be6f408daaf@oss.qualcomm.com> (raw)
In-Reply-To: <20260402051402.3903795-1-roopni.devanathan@oss.qualcomm.com>
On 4/2/2026 1:14 PM, Roopni Devanathan wrote:
> In single-wiphy design, when more than one radio is registered as a
> single-wiphy in the mac80211 layer, the following warnings are seen:
>
> 1. debugfs: File 'ath12k' in directory 'phy0' already present!
> 2. debugfs: File 'simulate_fw_crash' in directory 'pci-0000:57:00.0' already present!
> debugfs: File 'device_dp_stats' in directory 'pci-01777777777777777777777:57:00.0' already present!
>
> When more than one radio is registered as a single-wiphy, symlinks for
> all the radios are created in the same debugfs directory:
> /sys/kernel/debug/ieee80211/phyX/ath12k, resulting in warning 1. When a
> symlink is created for the first radio, since the 'ath12k' directory is
> not present, it will be created and no warning will be thrown. But when
> symlink is created for more than one radio, since the 'ath12k'
> directory was already created for symlink for radio 1, a warning is
> thrown complaining that 'ath12k' directory is already present. To resolve
> warning 1, create symlink for each radio in separate debugfs directories.
> For the first radio, the symlink will always be the 'ath12k' directory.
> This ensures that the existing directory structure is retained for
> single-wiphy and multi-wiphy architectures. In single-wiphy architecture
> with multiple radios, create symlink in separate debugfs directories
> introduced by mac80211.
>
> Existing debugfs directory in single-wiphy architecture:
> /sys/kernel/debug/ieee80211/phyX/ath12k is a symlink to
> /sys/kernel/debug/ath12k/pci-0001:01:00.0/macY
>
> Proposed debugfs directory in single-wiphy architecture with one radio:
> /sys/kernel/debug/ieee80211/phyX/ath12k is a symlink to
> /sys/kernel/debug/ath12k/pci-0001:01:00.0/mac0
>
> Proposed debugfs directory in single-wiphy architecture with more than
> one radio:
> /sys/kernel/debug/ieee80211/phyX/radio0/ath12k is a symlink to
> /sys/kernel/debug/ath12k/pci-0001:01:00.0/mac0 and
> /sys/kernel/debug/ieee80211/phyX/radioY/ath12k is a symlink to
> /sys/kernel/debug/ath12k/pci-0001:01:00.0/macY
>
> Where X is phy index and Y is radio index, seen in
> 'iw phyX info | grep Idx'. Two symlinks for the first radio are to ensure
> compatibility with the existing design. Add radio_idx inside ar, to track
> the radio index in probing order.
>
> API ath12k_debugfs_pdev_create() that creates SoC entries is called more
> than once when hardware group starts up, resulting in warning 2. To
> resolve this warning, remove all other calls to this API and add one
> inside the ath12k_core_pdev_create(). This API carries all pdev-specific
> initializations and can conveniently hold a call to
> ath12k_debugfs_pdev_create().
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
>
> Co-developed-by: Harshitha Prem <harshitha.prem@oss.qualcomm.com>
> Signed-off-by: Harshitha Prem <harshitha.prem@oss.qualcomm.com>
> Signed-off-by: Roopni Devanathan <roopni.devanathan@oss.qualcomm.com>
> ---
> drivers/net/wireless/ath/ath12k/core.c | 4 ++--
> drivers/net/wireless/ath/ath12k/core.h | 2 ++
> drivers/net/wireless/ath/ath12k/debugfs.c | 29 +++++++++++++++++++----
> drivers/net/wireless/ath/ath12k/mac.c | 2 +-
> 4 files changed, 29 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
> index c31c47fb5a73..2519e2400d58 100644
> --- a/drivers/net/wireless/ath/ath12k/core.c
> +++ b/drivers/net/wireless/ath/ath12k/core.c
> @@ -835,8 +835,6 @@ static int ath12k_core_soc_create(struct ath12k_base *ab)
> goto err_qmi_deinit;
> }
>
> - ath12k_debugfs_pdev_create(ab);
> -
> return 0;
>
> err_qmi_deinit:
> @@ -869,6 +867,8 @@ static int ath12k_core_pdev_create(struct ath12k_base *ab)
> goto err_dp_pdev_free;
> }
>
> + ath12k_debugfs_pdev_create(ab);
> +
> return 0;
>
> err_dp_pdev_free:
> diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h
> index 59c193b24764..046249c8763e 100644
> --- a/drivers/net/wireless/ath/ath12k/core.h
> +++ b/drivers/net/wireless/ath/ath12k/core.h
> @@ -588,6 +588,7 @@ struct ath12k_dbg_htt_stats {
> struct ath12k_debug {
> struct dentry *debugfs_pdev;
> struct dentry *debugfs_pdev_symlink;
> + struct dentry *debugfs_pdev_symlink_default;
> struct ath12k_dbg_htt_stats htt_stats;
> enum wmi_halphy_ctrl_path_stats_id tpc_stats_type;
> bool tpc_request;
> @@ -673,6 +674,7 @@ struct ath12k {
> u8 pdev_idx;
> u8 lmac_id;
> u8 hw_link_id;
> + u8 radio_idx;
>
> struct completion peer_assoc_done;
> struct completion peer_delete_done;
> diff --git a/drivers/net/wireless/ath/ath12k/debugfs.c b/drivers/net/wireless/ath/ath12k/debugfs.c
> index 358031fa14eb..8c81a1c22449 100644
> --- a/drivers/net/wireless/ath/ath12k/debugfs.c
> +++ b/drivers/net/wireless/ath/ath12k/debugfs.c
> @@ -1473,18 +1473,35 @@ void ath12k_debugfs_register(struct ath12k *ar)
> {
> struct ath12k_base *ab = ar->ab;
> struct ieee80211_hw *hw = ar->ah->hw;
> - char pdev_name[5];
> + struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
> + struct dentry *ath12k_fs;
> char buf[100] = {};
> + char pdev_name[5];
>
> scnprintf(pdev_name, sizeof(pdev_name), "%s%d", "mac", ar->pdev_idx);
>
> ar->debug.debugfs_pdev = debugfs_create_dir(pdev_name, ab->debugfs_soc);
>
> /* Create a symlink under ieee80211/phy* */
> - scnprintf(buf, sizeof(buf), "../../ath12k/%pd2", ar->debug.debugfs_pdev);
> - ar->debug.debugfs_pdev_symlink = debugfs_create_symlink("ath12k",
> - hw->wiphy->debugfsdir,
> - buf);
> + if (ar->radio_idx == 0) {
> + scnprintf(buf, sizeof(buf), "../../ath12k/%pd2",
> + ar->debug.debugfs_pdev);
> + ath12k_fs = hw->wiphy->debugfsdir;
> +
> + /* symbolic link for compatibility */
> + ar->debug.debugfs_pdev_symlink_default = debugfs_create_symlink("ath12k",
> + ath12k_fs,
> + buf);
> + }
> +
> + if (ah->num_radio > 1) {
> + scnprintf(buf, sizeof(buf), "../../../ath12k/%pd2",
> + ar->debug.debugfs_pdev);
> + ath12k_fs = hw->wiphy->radio_cfg[ar->radio_idx].radio_debugfsdir;
> + ar->debug.debugfs_pdev_symlink = debugfs_create_symlink("ath12k",
> + ath12k_fs,
> + buf);
> + }
>
> if (ar->mac.sbands[NL80211_BAND_5GHZ].channels) {
> debugfs_create_file("dfs_simulate_radar", 0200,
> @@ -1513,7 +1530,9 @@ void ath12k_debugfs_unregister(struct ath12k *ar)
>
> /* Remove symlink under ieee80211/phy* */
> debugfs_remove(ar->debug.debugfs_pdev_symlink);
> + debugfs_remove(ar->debug.debugfs_pdev_symlink_default);
> debugfs_remove_recursive(ar->debug.debugfs_pdev);
> ar->debug.debugfs_pdev_symlink = NULL;
> + ar->debug.debugfs_pdev_symlink_default = NULL;
> ar->debug.debugfs_pdev = NULL;
> }
> diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
> index 553ec28b6aaa..c2b747f1b9f5 100644
> --- a/drivers/net/wireless/ath/ath12k/mac.c
> +++ b/drivers/net/wireless/ath/ath12k/mac.c
> @@ -15065,6 +15065,7 @@ static struct ath12k_hw *ath12k_mac_hw_allocate(struct ath12k_hw_group *ag,
> ar->hw_link_id = pdev->hw_link_id;
> ar->pdev = pdev;
> ar->pdev_idx = pdev_idx;
> + ar->radio_idx = i;
> pdev->ar = ar;
>
> ag->hw_links[ar->hw_link_id].device_id = ab->device_id;
> @@ -15132,7 +15133,6 @@ int ath12k_mac_allocate(struct ath12k_hw_group *ag)
> if (!ab)
> continue;
>
> - ath12k_debugfs_pdev_create(ab);
> ath12k_mac_set_device_defaults(ab);
> total_radio += ab->num_radios;
> }
>
> base-commit: 15551ababf6d4e857f2101366a0c3eaa86dd822c
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
next prev parent reply other threads:[~2026-04-07 3:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-02 5:14 [PATCH ath-next] wifi: ath12k: Create symlink for each radio in a wiphy Roopni Devanathan
2026-04-03 4:51 ` Rameshkumar Sundaram
2026-04-07 3:29 ` Baochen Qiang [this message]
2026-04-08 0:50 ` Jeff Johnson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=03c3da0d-4bea-49be-b0b3-4be6f408daaf@oss.qualcomm.com \
--to=baochen.qiang@oss.qualcomm.com \
--cc=ath12k@lists.infradead.org \
--cc=harshitha.prem@oss.qualcomm.com \
--cc=linux-wireless@vger.kernel.org \
--cc=roopni.devanathan@oss.qualcomm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox