[PATCH ath-next 09/19] wifi: ath12k: advertise standard ELF image format for QCC2072
Baochen Qiang
baochen.qiang at oss.qualcomm.com
Wed Dec 17 17:54:23 PST 2025
Firmware (amss.bin) of QCC2072 is a standard ELF image, however those of
other chips are not. MHI subsystem supports both format, but by default
takes it as non-standard.
Flag this to MHI subsystem to avoid firmware loading failure.
Also refine hardware parameter dereferencing by defining a new local
pointer.
Tested-on: QCC2072 hw1.0 PCI WLAN.COL.1.0-01560-QCACOLSWPL_V1_TO_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c5-00302-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.115823.3
Signed-off-by: Baochen Qiang <baochen.qiang at oss.qualcomm.com>
---
drivers/net/wireless/ath/ath12k/hw.h | 1 +
drivers/net/wireless/ath/ath12k/mhi.c | 10 ++++++----
drivers/net/wireless/ath/ath12k/wifi7/hw.c | 5 +++++
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/ath12k/hw.h b/drivers/net/wireless/ath/ath12k/hw.h
index 655753d0413a..85da4e43cf61 100644
--- a/drivers/net/wireless/ath/ath12k/hw.h
+++ b/drivers/net/wireless/ath/ath12k/hw.h
@@ -142,6 +142,7 @@ struct ath12k_hw_params {
size_t board_size;
size_t cal_offset;
enum ath12k_m3_fw_loaders m3_loader;
+ bool std_elf_img:1;
} fw;
u8 max_radios;
diff --git a/drivers/net/wireless/ath/ath12k/mhi.c b/drivers/net/wireless/ath/ath12k/mhi.c
index 45c0f66dcc5e..7698a098c088 100644
--- a/drivers/net/wireless/ath/ath12k/mhi.c
+++ b/drivers/net/wireless/ath/ath12k/mhi.c
@@ -187,6 +187,7 @@ static void ath12k_mhi_op_write_reg(struct mhi_controller *mhi_cntrl,
int ath12k_mhi_register(struct ath12k_pci *ab_pci)
{
struct ath12k_base *ab = ab_pci->ab;
+ const struct ath12k_hw_params *hw_params = ab->hw_params;
struct mhi_controller *mhi_ctrl;
unsigned int board_id;
int ret;
@@ -201,11 +202,12 @@ int ath12k_mhi_register(struct ath12k_pci *ab_pci)
mhi_ctrl->cntrl_dev = ab->dev;
mhi_ctrl->regs = ab->mem;
mhi_ctrl->reg_len = ab->mem_len;
- mhi_ctrl->rddm_size = ab->hw_params->rddm_size;
+ mhi_ctrl->rddm_size = hw_params->rddm_size;
+ mhi_ctrl->standard_elf_image = hw_params->fw.std_elf_img;
- if (ab->hw_params->otp_board_id_register) {
+ if (hw_params->otp_board_id_register) {
board_id =
- ath12k_pci_read32(ab, ab->hw_params->otp_board_id_register);
+ ath12k_pci_read32(ab, hw_params->otp_board_id_register);
board_id = u32_get_bits(board_id, OTP_BOARD_ID_MASK);
if (!board_id || (board_id == OTP_INVALID_BOARD_ID)) {
@@ -262,7 +264,7 @@ int ath12k_mhi_register(struct ath12k_pci *ab_pci)
mhi_ctrl->read_reg = ath12k_mhi_op_read_reg;
mhi_ctrl->write_reg = ath12k_mhi_op_write_reg;
- ret = mhi_register_controller(mhi_ctrl, ab->hw_params->mhi_config);
+ ret = mhi_register_controller(mhi_ctrl, hw_params->mhi_config);
if (ret) {
ath12k_err(ab, "failed to register to mhi bus, err = %d\n", ret);
goto free_controller;
diff --git a/drivers/net/wireless/ath/ath12k/wifi7/hw.c b/drivers/net/wireless/ath/ath12k/wifi7/hw.c
index ef0a59f6339c..bfa111968676 100644
--- a/drivers/net/wireless/ath/ath12k/wifi7/hw.c
+++ b/drivers/net/wireless/ath/ath12k/wifi7/hw.c
@@ -339,6 +339,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
.board_size = 256 * 1024,
.cal_offset = 128 * 1024,
.m3_loader = ath12k_m3_fw_loader_driver,
+ .std_elf_img = false,
},
.max_radios = 1,
.single_pdev_only = false,
@@ -421,6 +422,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
.board_size = 256 * 1024,
.cal_offset = 256 * 1024,
.m3_loader = ath12k_m3_fw_loader_driver,
+ .std_elf_img = false,
},
.max_radios = 1,
@@ -505,6 +507,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
.board_size = 256 * 1024,
.cal_offset = 128 * 1024,
.m3_loader = ath12k_m3_fw_loader_driver,
+ .std_elf_img = false,
},
.max_radios = 2,
.single_pdev_only = false,
@@ -586,6 +589,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
.board_size = 256 * 1024,
.cal_offset = 128 * 1024,
.m3_loader = ath12k_m3_fw_loader_remoteproc,
+ .std_elf_img = false,
},
.max_radios = 1,
.single_pdev_only = false,
@@ -661,6 +665,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
.board_size = 256 * 1024,
.cal_offset = 256 * 1024,
.m3_loader = ath12k_m3_fw_loader_driver,
+ .std_elf_img = true,
},
.max_radios = 1,
--
2.25.1
More information about the ath12k
mailing list