[PATCH ath-next 1/2] wifi: ath12k: add AHB platform descriptor support

Krzysztof Kozlowski krzk at kernel.org
Tue Aug 25 01:09:43 PDT 2026


On 21/07/2026 08:50, Aaradhana Sahu wrote:
> AHB-based platforms associate each device with a userPD ID that determines
> the firmware name and Peripheral Authentication Service ID (PASID) used
> during firmware authentication.
> 
> Current implementation does not support platforms with multiple devices
> sharing the same compatible string but using different userPD IDs.
> As a result, the driver cannot uniquely identify each device for firmware
> selection and authentication.
> 
> Add an AHB platform descriptor to store device-specific configuration.
> Implement userPD ID resolution by matching device tree reg properties, with
> node name matching as a fallback. Centralize platform configuration to
> simplify the probe path by removing hardware-specific conditionals.
> 
> Tested-on: IPQ5332 hw1.0 AHB WLAN.WBE.1.6-01275-QCAHKSWPL_SILICONZ-1
> 
> Signed-off-by: Aaradhana Sahu <aaradhana.sahu at oss.qualcomm.com>
> ---
>  drivers/net/wireless/ath/ath12k/ahb.c       |  4 +-
>  drivers/net/wireless/ath/ath12k/ahb.h       | 19 +++++
>  drivers/net/wireless/ath/ath12k/hw.h        |  1 -
>  drivers/net/wireless/ath/ath12k/wifi7/ahb.c | 90 +++++++++++++++++----
>  4 files changed, 94 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath12k/ahb.c b/drivers/net/wireless/ath/ath12k/ahb.c
> index 07bb83710b1f..14ee696960c7 100644
> --- a/drivers/net/wireless/ath/ath12k/ahb.c
> +++ b/drivers/net/wireless/ath/ath12k/ahb.c
> @@ -704,7 +704,7 @@ static int ath12k_ahb_map_service_to_pipe(struct ath12k_base *ab, u16 service_id
>  	return 0;
>  }
>  
> -static const struct ath12k_hif_ops ath12k_ahb_hif_ops = {
> +const struct ath12k_hif_ops ath12k_ahb_hif_ops = {
>  	.start = ath12k_ahb_start,
>  	.stop = ath12k_ahb_stop,
>  	.read32 = ath12k_ahb_read32,
> @@ -715,6 +715,7 @@ static const struct ath12k_hif_ops ath12k_ahb_hif_ops = {
>  	.power_up = ath12k_ahb_power_up,
>  	.power_down = ath12k_ahb_power_down,
>  };
> +EXPORT_SYMBOL(ath12k_ahb_hif_ops);
>  
>  static irqreturn_t ath12k_userpd_irq_handler(int irq, void *data)
>  {
> @@ -1038,7 +1039,6 @@ static int ath12k_ahb_probe(struct platform_device *pdev)
>  
>  	ab_ahb = ath12k_ab_to_ahb(ab);
>  	ab_ahb->ab = ab;
> -	ab->hif.ops = &ath12k_ahb_hif_ops;
>  	ab->pdev = pdev;
>  	platform_set_drvdata(pdev, ab);
>  
> diff --git a/drivers/net/wireless/ath/ath12k/ahb.h b/drivers/net/wireless/ath/ath12k/ahb.h
> index a153db6cf1d3..037347ccd21b 100644
> --- a/drivers/net/wireless/ath/ath12k/ahb.h
> +++ b/drivers/net/wireless/ath/ath12k/ahb.h
> @@ -30,6 +30,24 @@
>  #define ATH12K_USERPD_ID_MASK			GENMASK(10, 8)
>  #define ATH12K_USERPD_FW_NAME_LEN		35
>  
> +enum ath12k_ahb_userpd_id {
> +	ATH12K_AHB_USERPD_ID_0 = 1,
> +	ATH12K_AHB_USERPD_ID_1,
> +	ATH12K_AHB_USERPD_ID_2,
> +};
> +
> +struct ath12k_ahb_userpd_map {
> +	phys_addr_t io_start;
> +	const char *node_name;
> +	u32 upd_id;
> +};
> +
> +struct ath12k_ahb_desc {
> +	enum ath12k_hw_rev hw_rev;
> +	bool auth_enabled;
> +	const struct ath12k_hif_ops *ops;
> +};
> +
>  enum ath12k_ahb_smp2p_msg_id {
>  	ATH12K_AHB_POWER_SAVE_ENTER = 1,
>  	ATH12K_AHB_POWER_SAVE_EXIT,
> @@ -43,6 +61,7 @@ enum ath12k_ahb_userpd_irq {
>  };
>  
>  struct ath12k_base;
> +extern const struct ath12k_hif_ops ath12k_ahb_hif_ops;
>  
>  struct ath12k_ahb_device_family_ops {
>  	int (*probe)(struct platform_device *pdev);
> diff --git a/drivers/net/wireless/ath/ath12k/hw.h b/drivers/net/wireless/ath/ath12k/hw.h
> index 49cfd5dfc70a..3ed38f8f2b48 100644
> --- a/drivers/net/wireless/ath/ath12k/hw.h
> +++ b/drivers/net/wireless/ath/ath12k/hw.h
> @@ -100,7 +100,6 @@ struct ieee80211_rx_status;
>  #define ATH12K_REGDB_FILE_NAME		"regdb.bin"
>  
>  #define ATH12K_PCIE_MAX_PAYLOAD_SIZE	128
> -#define ATH12K_IPQ5332_USERPD_ID	1
>  
>  enum ath12k_hw_rate_cck {
>  	ATH12K_HW_RATE_CCK_LP_11M = 0,
> diff --git a/drivers/net/wireless/ath/ath12k/wifi7/ahb.c b/drivers/net/wireless/ath/ath12k/wifi7/ahb.c
> index 6a8b8b2a56f9..98a6606ffd76 100644
> --- a/drivers/net/wireless/ath/ath12k/wifi7/ahb.c
> +++ b/drivers/net/wireless/ath/ath12k/wifi7/ahb.c
> @@ -15,44 +15,100 @@
>  #include "dp.h"
>  #include "core.h"
>  
> +/*
> + * Node name to UserPD ID mapping
> + *
> + * The io_start field is used for additional validation when the reg
> + * property is present in the device tree. If io_start is 0, only
> + * node_name matching is performed.
> + *
> + * For platforms where not all WiFi nodes have a 'reg' property, set
> + * io_start to 0 for those entries. The driver will match purely by
> + * node name in such cases.
> + */
> +static const struct ath12k_ahb_userpd_map ath12k_wifi7_ahb_userpd_map[] = {
> +	{ .io_start = 0x0c000000, .node_name = "wifi", .upd_id = ATH12K_AHB_USERPD_ID_0 },

NAK.

This slipped past my filters so I will be reverting this. YOU CANNOT add
such undocumented ABI.

Test your code - how does it work when the node is called "wireless"?


Best regards,
Krzysztof



More information about the ath12k mailing list