[SRU][J:hwe/N][PATCH 01/11] wifi: ath12k: add fallback board name without variant while searching board-2.bin
Werner Sembach
wse at tuxedocomputers.com
Mon Feb 17 11:15:42 UTC 2025
Am 17.02.25 um 12:03 schrieb Stefan Bader:
> On 17.02.25 09:53, Werner Sembach wrote:
>> From: Wen Gong <quic_wgong at quicinc.com>
>>
>> Buglink: https://bugs.launchpad.net/bugs/2098104
>>
>> Impact: This is a patchset that we (as in TUXEDO Computers) currently apply
>> on top of the Ubuntu 6.8 kernel to make it run smoothly on all our devices.
>> All patches apply cleanly on 6.8.
>> Fix: The "wifi: ath12k: *" patches are part of a larger patchset to enable
>> support for the ath12k wifi chipset that iirc we currently use in our intel
>> desktop PCs. The rest of that patchset already got included in the
>> Ubuntu 6.8 kernel. This patch is already upstream, just not on the 6.8
>> branch, because they where upstreamed after that one was already EOL.
>> Testcase: We run this patchset for all our customers devices (we basically
>> maintain our own OEM branch) so it is quite field testet. Besides that,
>> whenever a new patch was added we did regression testing on a selection of
>> devices.
>>
>> Currently a variant value read from DT or SMBIOS is considered while
>> searching board-2.bin, this may fail because not all board-2.bin files
>> contains that symbol.
>>
>> Add fallback board name which removes variant value and searches again
>> in board-2.bin when fails to increase boot up success rate.
>>
>> dmesg log after this patch:
>> [169547.248472] ath12k_pci 0000:05:00.0: boot using board name
>> 'bus=pci,vendor=17cb,device=1103,subsystem-vendor=17cb,subsystem-device=3374,qmi-chip-id=2,qmi-board-id=262,variant=test'
>> [169547.248565] ath12k_pci 0000:05:00.0: boot firmware request
>> ath12k/WCN7850/hw2.0/board-2.bin size 180324
>> [169547.248568] ath12k_pci 0000:05:00.0: board name
>> [169547.248570] ath12k_pci 0000:05:00.0: 00000000: 62 75 73 3d 70 63 69 2c 76
>> 65 6e 64 6f 72 3d 31 bus=pci,vendor=1
>> [169547.248571] ath12k_pci 0000:05:00.0: 00000010: 37 63 62 2c 64 65 76 69 63
>> 65 3d 31 31 30 33 2c 7cb,device=1103,
>> [169547.248572] ath12k_pci 0000:05:00.0: 00000020: 73 75 62 73 79 73 74 65 6d
>> 2d 76 65 6e 64 6f 72 subsystem-vendor
>> [169547.248574] ath12k_pci 0000:05:00.0: 00000030: 3d 31 37 63 62 2c 73 75 62
>> 73 79 73 74 65 6d 2d =17cb,subsystem-
>> [169547.248575] ath12k_pci 0000:05:00.0: 00000040: 64 65 76 69 63 65 3d 33 33
>> 37 34 2c 71 6d 69 2d device=3374,qmi-
>> [169547.248576] ath12k_pci 0000:05:00.0: 00000050: 63 68 69 70 2d 69 64 3d 32
>> 2c 71 6d 69 2d 62 6f chip-id=2,qmi-bo
>> [169547.248577] ath12k_pci 0000:05:00.0: 00000060: 61 72 64 2d 69 64 3d 32 36
>> 32 ard-id=262
>> [169547.248578] ath12k_pci 0000:05:00.0: board name
>> [169547.248579] ath12k_pci 0000:05:00.0: 00000000: 62 75 73 3d 70 63 69 2c 76
>> 65 6e 64 6f 72 3d 31 bus=pci,vendor=1
>> [169547.248581] ath12k_pci 0000:05:00.0: 00000010: 37 63 62 2c 64 65 76 69 63
>> 65 3d 31 31 30 33 2c 7cb,device=1103,
>> [169547.248582] ath12k_pci 0000:05:00.0: 00000020: 73 75 62 73 79 73 74 65 6d
>> 2d 76 65 6e 64 6f 72 subsystem-vendor
>> [169547.248583] ath12k_pci 0000:05:00.0: 00000030: 3d 31 37 63 62 2c 73 75 62
>> 73 79 73 74 65 6d 2d =17cb,subsystem-
>> [169547.248584] ath12k_pci 0000:05:00.0: 00000040: 64 65 76 69 63 65 3d 33 33
>> 37 34 2c 71 6d 69 2d device=3374,qmi-
>> [169547.248585] ath12k_pci 0000:05:00.0: 00000050: 63 68 69 70 2d 69 64 3d 32
>> 2c 71 6d 69 2d 62 6f chip-id=2,qmi-bo
>> [169547.248587] ath12k_pci 0000:05:00.0: 00000060: 61 72 64 2d 69 64 3d 32 36
>> 36 ard-id=266
>> [169547.248588] ath12k_pci 0000:05:00.0: board name
>> [169547.248589] ath12k_pci 0000:05:00.0: 00000000: 62 75 73 3d 70 63 69 2c 76
>> 65 6e 64 6f 72 3d 31 bus=pci,vendor=1
>> [169547.248590] ath12k_pci 0000:05:00.0: 00000010: 37 63 62 2c 64 65 76 69 63
>> 65 3d 31 31 30 33 2c 7cb,device=1103,
>> [169547.248591] ath12k_pci 0000:05:00.0: 00000020: 73 75 62 73 79 73 74 65 6d
>> 2d 76 65 6e 64 6f 72 subsystem-vendor
>> [169547.248592] ath12k_pci 0000:05:00.0: 00000030: 3d 31 37 63 62 2c 73 75 62
>> 73 79 73 74 65 6d 2d =17cb,subsystem-
>> [169547.248594] ath12k_pci 0000:05:00.0: 00000040: 64 65 76 69 63 65 3d 33 33
>> 37 34 2c 71 6d 69 2d device=3374,qmi-
>> [169547.248595] ath12k_pci 0000:05:00.0: 00000050: 63 68 69 70 2d 69 64 3d 31
>> 38 2c 71 6d 69 2d 62 chip-id=18,qmi-b
>> [169547.248596] ath12k_pci 0000:05:00.0: 00000060: 6f 61 72 64 2d 69 64 3d 32
>> 36 36 oard-id=266
>> [169547.248597] ath12k_pci 0000:05:00.0: failed to fetch board data for
>> bus=pci,vendor=17cb,device=1103,subsystem-vendor=17cb,subsystem-device=3374,qmi-chip-id=2,qmi-board-id=262,variant=test
>> from ath12k/WCN7850/hw2.0/board-2.bin
>> [169547.248476] ath12k_pci 0000:05:00.0: boot using board name
>> 'bus=pci,vendor=17cb,device=1103,subsystem-vendor=17cb,subsystem-device=3374,qmi-chip-id=2,qmi-board-id=262'
>> [169547.248634] ath12k_pci 0000:05:00.0: boot firmware request
>> ath12k/WCN7850/hw2.0/board-2.bin size 180324
>> [169547.248636] ath12k_pci 0000:05:00.0: board name
>> [169547.248637] ath12k_pci 0000:05:00.0: 00000000: 62 75 73 3d 70 63 69 2c 76
>> 65 6e 64 6f 72 3d 31 bus=pci,vendor=1
>> [169547.248638] ath12k_pci 0000:05:00.0: 00000010: 37 63 62 2c 64 65 76 69 63
>> 65 3d 31 31 30 33 2c 7cb,device=1103,
>> [169547.248639] ath12k_pci 0000:05:00.0: 00000020: 73 75 62 73 79 73 74 65 6d
>> 2d 76 65 6e 64 6f 72 subsystem-vendor
>> [169547.248641] ath12k_pci 0000:05:00.0: 00000030: 3d 31 37 63 62 2c 73 75 62
>> 73 79 73 74 65 6d 2d =17cb,subsystem-
>> [169547.248642] ath12k_pci 0000:05:00.0: 00000040: 64 65 76 69 63 65 3d 33 33
>> 37 34 2c 71 6d 69 2d device=3374,qmi-
>> [169547.248643] ath12k_pci 0000:05:00.0: 00000050: 63 68 69 70 2d 69 64 3d 32
>> 2c 71 6d 69 2d 62 6f chip-id=2,qmi-bo
>> [169547.248645] ath12k_pci 0000:05:00.0: 00000060: 61 72 64 2d 69 64 3d 32 36
>> 32 ard-id=262
>> [169547.248646] ath12k_pci 0000:05:00.0: boot found match for name
>> 'bus=pci,vendor=17cb,device=1103,subsystem-vendor=17cb,subsystem-device=3374,qmi-chip-id=2,qmi-board-id=262'
>> [169547.248647] ath12k_pci 0000:05:00.0: boot found board data for
>> 'bus=pci,vendor=17cb,device=1103,subsystem-vendor=17cb,subsystem-device=3374,qmi-chip-id=2,qmi-board-id=262'
>> [169547.248649] ath12k_pci 0000:05:00.0: using board api 2
>>
>> Tested-on: WCN7850 hw2.0 PCI
>> WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4
>>
>> Signed-off-by: Wen Gong <quic_wgong at quicinc.com>
>> Signed-off-by: Baochen Qiang <quic_bqiang at quicinc.com>
>> Signed-off-by: Kalle Valo <quic_kvalo at quicinc.com>
>> Link: https://msgid.link/20231216060140.30611-3-quic_bqiang@quicinc.com
>> Signed-off-by: Werner Sembach <wse at tuxedocomputers.com>
>> ---
>
> Hi Werner,
>
> not sure how other reviewers want or will treat this. But general notes:
>
> With anything more that a single patch, having a cover email ([PATCH 00/xx])
> is much better because it allows passing some background about the whole set
> without having to repeat it in each one.
>
> The target only needs to be "[N]" as the jammy:linux-hwe-6.8 is a backport of
> the noble kernel. Any change applied to noble:linux automatically ends up in
> the hwe-6.8 kernel.
>
> The signed-off-by area must contain a reference to the original patch like:
>
> (cherry picked from commit <sha1> [linux-next|linux-<v>.<m>.y])
>
> The <sha1> is either from linux-next (then adding that) or one linux-<v>.<m>.y
> tree (also with saying which) or upstream linux (this if preferred and the
> default if not giving any additional hint). It is a cherry pick if the format
> patch can be applied with at least -C2. Otherwise it should be a
>
> (backported from commit <sha1> [linux-next|linux-<v>.<m>.y])
>
> Since there was already an initial submission, this should have been a "[SRU
> v2]" and the original thread should have been NACKed (by yourself).
>
> -Stefan
kk will resubmitt
>
>> drivers/net/wireless/ath/ath12k/core.c | 48 ++++++++++++++++++++++----
>> 1 file changed, 41 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath12k/core.c
>> b/drivers/net/wireless/ath/ath12k/core.c
>> index 95012477e88f9..7f57efb8e93bf 100644
>> --- a/drivers/net/wireless/ath/ath12k/core.c
>> +++ b/drivers/net/wireless/ath/ath12k/core.c
>> @@ -105,13 +105,13 @@ int ath12k_core_resume(struct ath12k_base *ab)
>> return 0;
>> }
>> -static int ath12k_core_create_board_name(struct ath12k_base *ab, char *name,
>> - size_t name_len)
>> +static int __ath12k_core_create_board_name(struct ath12k_base *ab, char *name,
>> + size_t name_len, bool with_variant)
>> {
>> /* strlen(',variant=') + strlen(ab->qmi.target.bdf_ext) */
>> char variant[9 + ATH12K_QMI_BDF_EXT_STR_LENGTH] = { 0 };
>> - if (ab->qmi.target.bdf_ext[0] != '\0')
>> + if (with_variant && ab->qmi.target.bdf_ext[0] != '\0')
>> scnprintf(variant, sizeof(variant), ",variant=%s",
>> ab->qmi.target.bdf_ext);
>> @@ -141,6 +141,18 @@ static int ath12k_core_create_board_name(struct
>> ath12k_base *ab, char *name,
>> return 0;
>> }
>> +static int ath12k_core_create_board_name(struct ath12k_base *ab, char *name,
>> + size_t name_len)
>> +{
>> + return __ath12k_core_create_board_name(ab, name, name_len, true);
>> +}
>> +
>> +static int ath12k_core_create_fallback_board_name(struct ath12k_base *ab,
>> char *name,
>> + size_t name_len)
>> +{
>> + return __ath12k_core_create_board_name(ab, name, name_len, false);
>> +}
>> +
>> const struct firmware *ath12k_core_firmware_request(struct ath12k_base *ab,
>> const char *file)
>> {
>> @@ -344,7 +356,7 @@ static int ath12k_core_fetch_board_data_api_n(struct
>> ath12k_base *ab,
>> out:
>> if (!bd->data || !bd->len) {
>> - ath12k_err(ab,
>> + ath12k_dbg(ab, ATH12K_DBG_BOOT,
>> "failed to fetch board data for %s from %s\n",
>> boardname, filepath);
>> ret = -ENODATA;
>> @@ -375,11 +387,14 @@ int ath12k_core_fetch_board_data_api_1(struct
>> ath12k_base *ab,
>> #define BOARD_NAME_SIZE 200
>> int ath12k_core_fetch_bdf(struct ath12k_base *ab, struct ath12k_board_data
>> *bd)
>> {
>> - char boardname[BOARD_NAME_SIZE];
>> + char boardname[BOARD_NAME_SIZE], fallback_boardname[BOARD_NAME_SIZE];
>> + char *filename, filepath[100];
>> int bd_api;
>> int ret;
>> - ret = ath12k_core_create_board_name(ab, boardname, BOARD_NAME_SIZE);
>> + filename = ATH12K_BOARD_API2_FILE;
>> +
>> + ret = ath12k_core_create_board_name(ab, boardname, sizeof(boardname));
>> if (ret) {
>> ath12k_err(ab, "failed to create board name: %d", ret);
>> return ret;
>> @@ -390,10 +405,29 @@ int ath12k_core_fetch_bdf(struct ath12k_base *ab,
>> struct ath12k_board_data *bd)
>> if (!ret)
>> goto success;
>> + ret = ath12k_core_create_fallback_board_name(ab, fallback_boardname,
>> + sizeof(fallback_boardname));
>> + if (ret) {
>> + ath12k_err(ab, "failed to create fallback board name: %d", ret);
>> + return ret;
>> + }
>> +
>> + ret = ath12k_core_fetch_board_data_api_n(ab, bd, fallback_boardname);
>> + if (!ret)
>> + goto success;
>> +
>> bd_api = 1;
>> ret = ath12k_core_fetch_board_data_api_1(ab, bd,
>> ATH12K_DEFAULT_BOARD_FILE);
>> if (ret) {
>> - ath12k_err(ab, "failed to fetch board-2.bin or board.bin from %s\n",
>> + ath12k_core_create_firmware_path(ab, filename,
>> + filepath, sizeof(filepath));
>> + ath12k_err(ab, "failed to fetch board data for %s from %s\n",
>> + boardname, filepath);
>> + if (memcmp(boardname, fallback_boardname, strlen(boardname)))
>> + ath12k_err(ab, "failed to fetch board data for %s from %s\n",
>> + fallback_boardname, filepath);
>> +
>> + ath12k_err(ab, "failed to fetch board.bin from %s\n",
>> ab->hw_params->fw.dir);
>> return ret;
>> }
>
More information about the kernel-team
mailing list