On 7/2/2026 4:58 AM, Sumit Garg wrote:
> From: Sumit Garg <[email protected]>
> 
> Switch ath12k client driver over to generic PAS TZ APIs. Generic PAS TZ
> service allows to support multiple TZ implementation backends like QTEE
> based SCM PAS service, OP-TEE based PAS service and any further future TZ
> backend service.
> 
> Acked-by: Jeff Johnson <[email protected]>
> Signed-off-by: Sumit Garg <[email protected]>
> ---
>  drivers/net/wireless/ath/ath12k/Kconfig |  2 +-
>  drivers/net/wireless/ath/ath12k/ahb.c   | 10 +++++-----
>  2 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath12k/Kconfig 
> b/drivers/net/wireless/ath/ath12k/Kconfig
> index 4a2b240f967a..0d5d1c55bfc1 100644
> --- a/drivers/net/wireless/ath/ath12k/Kconfig
> +++ b/drivers/net/wireless/ath/ath12k/Kconfig
> @@ -18,7 +18,7 @@ config ATH12K_AHB
>       bool "Qualcomm ath12k AHB support"
>       depends on ATH12K && REMOTEPROC
>       select QCOM_MDT_LOADER
> -     select QCOM_SCM
> +     select QCOM_PAS
>       help
>         Enable support for Ath12k AHB bus chipsets, example IPQ5332.
>  
> diff --git a/drivers/net/wireless/ath/ath12k/ahb.c 
> b/drivers/net/wireless/ath/ath12k/ahb.c
> index 30733a244454..69e21214e629 100644
> --- a/drivers/net/wireless/ath/ath12k/ahb.c
> +++ b/drivers/net/wireless/ath/ath12k/ahb.c
> @@ -5,7 +5,7 @@
>   */
>  
>  #include <linux/dma-mapping.h>
> -#include <linux/firmware/qcom/qcom_scm.h>
> +#include <linux/firmware/qcom/qcom_pas.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
>  #include <linux/platform_device.h>
> @@ -420,7 +420,7 @@ static int ath12k_ahb_power_up(struct ath12k_base *ab)
>  
>       if (ab_ahb->scm_auth_enabled) {
>               /* Authenticate FW image using peripheral ID */
> -             ret = qcom_scm_pas_auth_and_reset(pasid);
> +             ret = qcom_pas_auth_and_reset(pasid);
>               if (ret) {
>                       ath12k_err(ab, "failed to boot the remote processor 
> %d\n", ret);
>                       goto err_fw2;
> @@ -485,10 +485,10 @@ static void ath12k_ahb_power_down(struct ath12k_base 
> *ab, bool is_suspend)
>               pasid = (u32_encode_bits(ab_ahb->userpd_id, 
> ATH12K_USERPD_ID_MASK)) |
>                        ATH12K_AHB_UPD_SWID;
>               /* Release the firmware */
> -             ret = qcom_scm_pas_shutdown(pasid);
> +             ret = qcom_pas_shutdown(pasid);
>               if (ret)
> -                     ath12k_err(ab, "scm pas shutdown failed for userPD%d\n",
> -                                ab_ahb->userpd_id);
> +                     ath12k_err(ab, "PAS shutdown failed for userPD%d: %d\n",
> +                                ab_ahb->userpd_id, ret);
>       }
>  }
>  

My code review agent is flagging:

**Missing probe-defer guard** (`ahb.c:422`) — `qcom_pas_is_available()` is
explicitly documented as mandatory before any PAS call. The OP-TEE backend
registers its ops asynchronously; without an `if (!qcom_pas_is_available())
return -EPROBE_DEFER` in the probe path, firmware auth silently returns
`-ENODEV` with no retry.

Is it an existing deficiency in ath12k that there is no probe deferral?
Or did the qcom_scm_*() calls somehow guarantee something that is no longer
true with the qcom_pas_*() calls?

And also for future cleanup:
**Misleading field name** (`ahb.c:384`) — `scm_auth_enabled` should be
`pas_auth_enabled` to match the backend-agnostic API it now guards.

I plan on taking this patch as-is through the ath tree since it is currently
just simple API changes. Any additional changes can come separately.

/jeff



Reply via email to