Message ID | 1601399736-3210-2-git-send-email-kvalo@codeaurora.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 616c16a4b26a9f136cf8a1ad0b8c4d03a72d4328 |
Delegated to: | Kalle Valo |
Headers | show |
Series | ath11k: qca6390: smaller new features and fixes | expand |
Kalle Valo <kvalo@codeaurora.org> wrote: > The QCA6390 board I have, model 8291M-PR comes with an ELF board file. To get > this to at least somewhat work, I renamed bdwlan.e04 to 'board.bin' and then > added this patch to check for ELF magic string in the beginning of the file. > If that is found, use type ELF. After this the driver loads. > > Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1 > > Signed-off-by: Ben Greear <greearb@candelatech.com> > [kvalo@codeaurora.org: use elf.h, minor cleanup] > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> 8 patches applied to ath-next branch of ath.git, thanks. 616c16a4b26a ath11k: support loading ELF board files b09199248905 ath11k: fix AP mode for QCA6390 2626c269702e ath11k: add interface_modes to hw_params 18ac1665e785 ath11k: pci: check TCSR_SOC_HW_VERSION 3f6e6c3291ed ath11k: disable monitor mode on QCA6390 df648808c6b9 ath11k: change to disable softirqs for ath11k_regd_update to solve deadlock 6a8be1baa911 ath11k: Use GFP_ATOMIC instead of GFP_KERNEL in ath11k_dp_htt_get_ppdu_desc 87e8497a7d46 ath11k: Use GFP_ATOMIC instead of GFP_KERNEL in idr_alloc
diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c index b906b50ee57e..9144f28b37d1 100644 --- a/drivers/net/wireless/ath/ath11k/qmi.c +++ b/drivers/net/wireless/ath/ath11k/qmi.c @@ -3,6 +3,8 @@ * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. */ +#include <linux/elf.h> + #include "qmi.h" #include "core.h" #include "debug.h" @@ -1990,6 +1992,7 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) struct qmi_txn txn = {}; int ret; const u8 *temp; + int bdf_type; req = kzalloc(sizeof(*req), GFP_KERNEL); if (!req) @@ -2006,6 +2009,13 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) temp = bd.data; remaining = bd.len; + if (bd.len >= SELFMAG && memcmp(bd.data, ELFMAG, SELFMAG) == 0) + bdf_type = ATH11K_QMI_BDF_TYPE_ELF; + else + bdf_type = ATH11K_QMI_BDF_TYPE_BIN; + + ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi bdf_type %d\n", bdf_type); + while (remaining) { req->valid = 1; req->file_id_valid = 1; @@ -2015,7 +2025,7 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) req->seg_id_valid = 1; req->data_valid = 1; req->data_len = ATH11K_QMI_MAX_BDF_FILE_NAME_SIZE; - req->bdf_type = ATH11K_QMI_BDF_TYPE_BIN; + req->bdf_type = bdf_type; req->bdf_type_valid = 1; req->end_valid = 1; req->end = 0;