lede/package/kernel/mac80211/patches/ath11k/0116-Revert-ath11k-add-read-variant-from-SMBIOS-for-downl.patch
2022-07-08 12:44:37 +08:00

169 lines
5.5 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 72f4124347724e3b8aa434f6bc4a2cd69f7bb336 Mon Sep 17 00:00:00 2001
From: Kalle Valo <kvalo@codeaurora.org>
Date: Wed, 24 Nov 2021 11:43:16 +0200
Subject: [PATCH] Revert "ath11k: add read variant from SMBIOS for download
board data"
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit 46e46db313a2bf3c48cac4eb8bdb613b762f301b. Mark reported
that it breaks QCA6390 hw2.0 on Dell XPS 13 9310:
[    5.537034] ath11k_pci 0000:72:00.0: chip_id 0x0 chip_family 0xb board_id 0xff soc_id 0xffffffff
[    5.537038] ath11k_pci 0000:72:00.0: fw_version 0x101c06cc fw_build_timestamp 2020-06-24 19:50 fw_build_id
[    5.537236] ath11k_pci 0000:72:00.0: failed to fetch board data for bus=pci,qmi-chip-id=0,qmi-board-id=255,variant=DE_1901 from ath11k/QCA6390/hw2.0/board-2.bin
[    5.537255] ath11k_pci 0000:72:00.0: failed to fetch board-2.bin or board.bin from QCA6390/hw2.0
[    5.537257] ath11k_pci 0000:72:00.0: qmi failed to fetch board file: -2
[    5.537258] ath11k_pci 0000:72:00.0: failed to load board data file: -2
So we need to back to the drawing board and implement it so that backwards
compatiblity is not broken.
Reported-by: Mark Herbert <mark.herbert42@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20211124094316.9096-1-kvalo@codeaurora.org
---
drivers/net/wireless/ath/ath11k/core.c | 79 --------------------------
drivers/net/wireless/ath/ath11k/core.h | 13 -----
drivers/net/wireless/ath/ath11k/qmi.c | 4 --
3 files changed, 96 deletions(-)
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
@@ -8,9 +8,6 @@
#include <linux/remoteproc.h>
#include <linux/firmware.h>
#include <linux/of.h>
-#include <linux/dmi.h>
-#include <linux/ctype.h>
-
#include "core.h"
#include "dp_tx.h"
#include "dp_rx.h"
@@ -387,82 +384,6 @@ int ath11k_core_resume(struct ath11k_bas
}
EXPORT_SYMBOL(ath11k_core_resume);
-static void ath11k_core_check_bdfext(const struct dmi_header *hdr, void *data)
-{
- struct ath11k_base *ab = data;
- const char *bdf_ext;
- const char *magic = ATH11K_SMBIOS_BDF_EXT_MAGIC;
- u8 bdf_enabled;
- int i;
- size_t len;
-
- if (ab->qmi.target.bdf_ext[0] != '\0')
- return;
-
- if (hdr->type != ATH11K_SMBIOS_BDF_EXT_TYPE)
- return;
-
- if (hdr->length != ATH11K_SMBIOS_BDF_EXT_LENGTH) {
- ath11k_dbg(ab, ATH11K_DBG_BOOT,
- "wrong smbios bdf ext type length (%d).\n",
- hdr->length);
- return;
- }
-
- bdf_enabled = *((u8 *)hdr + ATH11K_SMBIOS_BDF_EXT_OFFSET);
- if (!bdf_enabled) {
- ath11k_dbg(ab, ATH11K_DBG_BOOT, "bdf variant name not found.\n");
- return;
- }
-
- /* Only one string exists (per spec) */
- bdf_ext = (char *)hdr + hdr->length;
-
- if (memcmp(bdf_ext, magic, strlen(magic)) != 0) {
- ath11k_dbg(ab, ATH11K_DBG_BOOT,
- "bdf variant magic does not match.\n");
- return;
- }
-
- len = strlen(bdf_ext);
- for (i = 0; i < len; i++) {
- if (!isascii(bdf_ext[i]) || !isprint(bdf_ext[i])) {
- ath11k_dbg(ab, ATH11K_DBG_BOOT,
- "bdf variant name contains non ascii chars.\n");
- return;
- }
- }
-
- /* Copy extension name without magic prefix */
- if (strscpy(ab->qmi.target.bdf_ext, bdf_ext + strlen(magic),
- sizeof(ab->qmi.target.bdf_ext)) < 0) {
- ath11k_dbg(ab, ATH11K_DBG_BOOT,
- "bdf variant string is longer than the buffer can accommodate (variant: %s)\n",
- bdf_ext);
- return;
- }
-
- ath11k_dbg(ab, ATH11K_DBG_BOOT,
- "found and validated bdf variant smbios_type 0x%x bdf %s\n",
- ATH11K_SMBIOS_BDF_EXT_TYPE, bdf_ext);
-}
-
-int ath11k_core_check_smbios(struct ath11k_base *ab)
-{
- int ret;
-
- ab->qmi.target.bdf_ext[0] = '\0';
-
- ret = dmi_walk(ath11k_core_check_bdfext, ab);
- if (ret)
- return ret;
-
- if (ab->qmi.target.bdf_ext[0] == '\0')
- return -ENODATA;
-
- return 0;
-}
-
int ath11k_core_check_dt(struct ath11k_base *ab)
{
size_t max_len = sizeof(ab->qmi.target.bdf_ext);
--- a/drivers/net/wireless/ath/ath11k/core.h
+++ b/drivers/net/wireless/ath/ath11k/core.h
@@ -938,18 +938,6 @@ struct ath11k_fw_stats_bcn {
u32 tx_bcn_outage_cnt;
};
-/* SMBIOS type containing Board Data File Name Extension */
-#define ATH11K_SMBIOS_BDF_EXT_TYPE 0xF8
-
-/* SMBIOS type structure length (excluding strings-set) */
-#define ATH11K_SMBIOS_BDF_EXT_LENGTH 0x9
-
-/* Offset pointing to Board Data File Name Extension */
-#define ATH11K_SMBIOS_BDF_EXT_OFFSET 0x8
-
-/* The magic used by QCA spec */
-#define ATH11K_SMBIOS_BDF_EXT_MAGIC "BDF_"
-
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq8074[];
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[];
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018[];
@@ -971,7 +959,6 @@ int ath11k_core_fetch_bdf(struct ath11k_
struct ath11k_board_data *bd);
void ath11k_core_free_bdf(struct ath11k_base *ab, struct ath11k_board_data *bd);
int ath11k_core_check_dt(struct ath11k_base *ath11k);
-int ath11k_core_check_smbios(struct ath11k_base *ab);
void ath11k_core_halt(struct ath11k *ar);
int ath11k_core_resume(struct ath11k_base *ab);
--- a/drivers/net/wireless/ath/ath11k/qmi.c
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
@@ -1991,10 +1991,6 @@ static int ath11k_qmi_request_target_cap
ab->qmi.target.fw_build_timestamp,
ab->qmi.target.fw_build_id);
- r = ath11k_core_check_smbios(ab);
- if (r)
- ath11k_dbg(ab, ATH11K_DBG_QMI, "SMBIOS bdf variant name not set.\n");
-
r = ath11k_core_check_dt(ab);
if (r)
ath11k_dbg(ab, ATH11K_DBG_QMI, "DT bdf variant name not set.\n");