diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index a96011ddd7c4..06978b5e0cd8 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -517,11 +517,11 @@ static int cnss_setup_dms_mac(struct cnss_plat_data *plat_priv) break; ret = cnss_qmi_get_dms_mac(plat_priv); - if (ret == 0) + if (ret != -EAGAIN) break; msleep(CNSS_DMS_QMI_CONNECTION_WAIT_MS); } - if (!plat_priv->dms.mac_valid) { + if (!plat_priv->dms.nv_mac_not_prov && !plat_priv->dms.mac_valid) { cnss_pr_err("Unable to get MAC from DMS after retries\n"); CNSS_ASSERT(0); return -EINVAL; diff --git a/drivers/net/wireless/cnss2/main.h b/drivers/net/wireless/cnss2/main.h index e22439c97416..0adae531a79b 100644 --- a/drivers/net/wireless/cnss2/main.h +++ b/drivers/net/wireless/cnss2/main.h @@ -394,6 +394,7 @@ enum cnss_ce_index { struct cnss_dms_data { u32 mac_valid; + u8 nv_mac_not_prov; u8 mac[QMI_WLFW_MAC_ADDR_SIZE_V01]; }; diff --git a/drivers/net/wireless/cnss2/qmi.c b/drivers/net/wireless/cnss2/qmi.c index 07e6d9227f4d..dba3eec809ad 100644 --- a/drivers/net/wireless/cnss2/qmi.c +++ b/drivers/net/wireless/cnss2/qmi.c @@ -39,6 +39,7 @@ #define QMI_WLFW_MAX_RECV_BUF_SIZE SZ_8K #define IMSPRIVATE_SERVICE_MAX_MSG_LEN SZ_8K #define DMS_QMI_MAX_MSG_LEN SZ_256 +#define DMS_MAC_NOT_PROVISIONED 16 #define QMI_WLFW_MAC_READY_TIMEOUT_MS 50 #define QMI_WLFW_MAC_READY_MAX_RETRY 200 @@ -2872,7 +2873,7 @@ int cnss_qmi_get_dms_mac(struct cnss_plat_data *plat_priv) if (!test_bit(CNSS_QMI_DMS_CONNECTED, &plat_priv->driver_state)) { cnss_pr_err("DMS QMI connection not established\n"); - return -EINVAL; + return -EAGAIN; } cnss_pr_dbg("Requesting DMS MAC address"); @@ -2903,8 +2904,13 @@ int cnss_qmi_get_dms_mac(struct cnss_plat_data *plat_priv) } if (resp.resp.result != QMI_RESULT_SUCCESS_V01) { - cnss_pr_err("QMI_DMS_GET_MAC_ADDRESS_REQ_V01 failed, result: %d, err: %d\n", - resp.resp.result, resp.resp.error); + if (resp.resp.error == DMS_MAC_NOT_PROVISIONED) { + cnss_pr_err("NV MAC address is not provisioned"); + plat_priv->dms.nv_mac_not_prov = 1; + } else { + cnss_pr_err("QMI_DMS_GET_MAC_ADDRESS_REQ_V01 failed, result: %d, err: %d\n", + resp.resp.result, resp.resp.error); + } ret = -resp.resp.result; goto out; }