From 0228c90e693dfee2b5b2aff2dc2fde50856f6e10 Mon Sep 17 00:00:00 2001 From: hzy Date: Mon, 4 Dec 2023 23:42:34 +0800 Subject: [PATCH] mac80211: ath11k: Support reading board_id from devicetree and filesystem --- ...ort-reading-board_id-from-devicetree.patch | 35 +++++++++++ ...ort-reading-board_id-from-filesystem.patch | 58 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 package/kernel/mac80211/patches/ath11k/211-ath11k-Support-reading-board_id-from-devicetree.patch create mode 100644 package/kernel/mac80211/patches/ath11k/212-ath11k-Support-reading-board_id-from-filesystem.patch diff --git a/package/kernel/mac80211/patches/ath11k/211-ath11k-Support-reading-board_id-from-devicetree.patch b/package/kernel/mac80211/patches/ath11k/211-ath11k-Support-reading-board_id-from-devicetree.patch new file mode 100644 index 0000000000..80a9a5dc54 --- /dev/null +++ b/package/kernel/mac80211/patches/ath11k/211-ath11k-Support-reading-board_id-from-devicetree.patch @@ -0,0 +1,35 @@ +From 1b4a1cc8a00a1497f0afa782f1ae844db8eab3d4 Mon Sep 17 00:00:00 2001 +From: hzy +Date: Sat, 7 Oct 2023 22:19:31 +0800 +Subject: [PATCH 1/2] ath11k: Support reading board_id from devicetree + +--- + drivers/net/wireless/ath/ath11k/qmi.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c +index 801d5880..a9aa40dd 100644 +--- a/drivers/net/wireless/ath/ath11k/qmi.c ++++ b/drivers/net/wireless/ath/ath11k/qmi.c +@@ -2200,6 +2200,7 @@ static int ath11k_qmi_request_target_cap(struct ath11k_base *ab) + struct qmi_txn txn; + int ret = 0; + int r; ++ u32 board_id; + char *fw_build_id; + int fw_build_id_mask_len; + +@@ -2242,7 +2243,9 @@ static int ath11k_qmi_request_target_cap(struct ath11k_base *ab) + ab->qmi.target.chip_family = resp.chip_info.chip_family; + } + +- if (resp.board_info_valid) ++ if (!of_property_read_u32(ab->dev->of_node, "qcom,board_id", &board_id) && board_id != 0xFF) ++ ab->qmi.target.board_id = board_id; ++ else if (resp.board_info_valid) + ab->qmi.target.board_id = resp.board_info.board_id; + else + ab->qmi.target.board_id = 0xFF; +-- +2.40.1 + diff --git a/package/kernel/mac80211/patches/ath11k/212-ath11k-Support-reading-board_id-from-filesystem.patch b/package/kernel/mac80211/patches/ath11k/212-ath11k-Support-reading-board_id-from-filesystem.patch new file mode 100644 index 0000000000..70d07c9bf7 --- /dev/null +++ b/package/kernel/mac80211/patches/ath11k/212-ath11k-Support-reading-board_id-from-filesystem.patch @@ -0,0 +1,58 @@ +From e99fe9e7929eb55618e468c1bfbe64aa41fb9420 Mon Sep 17 00:00:00 2001 +From: hzy +Date: Sat, 7 Oct 2023 22:22:05 +0800 +Subject: [PATCH 2/2] ath11k: Support reading board_id from filesystem + +--- + drivers/net/wireless/ath/ath11k/qmi.c | 28 ++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c +index a9aa40dd..ebf99a9a 100644 +--- a/drivers/net/wireless/ath/ath11k/qmi.c ++++ b/drivers/net/wireless/ath/ath11k/qmi.c +@@ -2193,6 +2193,30 @@ out: + return ret; + } + ++static int ath11k_qmi_fetch_board_id_from_fs(struct ath11k_base *ab, u32 *board_id) ++{ ++ const struct firmware *fw; ++ char buf[64]; ++ int len; ++ int ret; ++ ++ snprintf(buf, sizeof(buf), "board_id-%s-%s", ++ ath11k_bus_str(ab->hif.bus), dev_name(ab->dev)); ++ ++ fw = ath11k_core_firmware_request(ab, buf); ++ if(IS_ERR(fw)) ++ return PTR_ERR(fw); ++ ++ len = min(fw->size, sizeof(buf) - 1); ++ memcpy(buf, fw->data, len); ++ buf[len] = 0; ++ ++ ret = kstrtouint(buf, 0, board_id); ++ ++ release_firmware(fw); ++ return ret; ++} ++ + static int ath11k_qmi_request_target_cap(struct ath11k_base *ab) + { + struct qmi_wlanfw_cap_req_msg_v01 req; +@@ -2243,7 +2267,9 @@ static int ath11k_qmi_request_target_cap(struct ath11k_base *ab) + ab->qmi.target.chip_family = resp.chip_info.chip_family; + } + +- if (!of_property_read_u32(ab->dev->of_node, "qcom,board_id", &board_id) && board_id != 0xFF) ++ if (!ath11k_qmi_fetch_board_id_from_fs(ab, &board_id) && board_id != 0xFF) ++ ab->qmi.target.board_id = board_id; ++ else if (!of_property_read_u32(ab->dev->of_node, "qcom,board_id", &board_id) && board_id != 0xFF) + ab->qmi.target.board_id = board_id; + else if (resp.board_info_valid) + ab->qmi.target.board_id = resp.board_info.board_id; +-- +2.40.1 +