]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath11k: add support for QCA6698AQ
authorMiaoqing Pan <quic_miaoqing@quicinc.com>
Thu, 31 Oct 2024 00:05:41 +0000 (08:05 +0800)
committerJeff Johnson <quic_jjohnson@quicinc.com>
Thu, 21 Nov 2024 15:52:50 +0000 (07:52 -0800)
QCA6698AQ IP core is the same as WCN6855 hw2.1, they share the same
PCI device ID, the same major and minor version numbers, the same
register address, and same HAL descriptors, etc. The most significant
difference is that QCA6698AQ has different RF, IPA, thermal, etc.

Follow the approach done in commit 5dc9d1a55e95 ("wifi: ath11k: add
support for QCA2066"), enumerate the subversion number to identify the
specific card.

Tested-on: QCA6698AQ hw2.1 PCI WLAN.HSP.1.1-04479-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1

Signed-off-by: Miaoqing Pan <quic_miaoqing@quicinc.com>
Acked-by: Kalle Valo <kvalo@kernel.org>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Link: https://patch.msgid.link/20241031000541.3331606-1-quic_miaoqing@quicinc.com
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
drivers/net/wireless/ath/ath11k/core.c
drivers/net/wireless/ath/ath11k/core.h
drivers/net/wireless/ath/ath11k/mhi.c
drivers/net/wireless/ath/ath11k/pci.c
drivers/net/wireless/ath/ath11k/pcic.c

index a9aefb1a705d777b68c9da27861051d08cfffa8f..c576bbba52bf156a7b8b8f38011f627da295a21d 100644 (file)
@@ -811,6 +811,93 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                        .end = 0x0177ffff,
                },
 
+               .tcl_ring_retry = true,
+               .tx_ring_size = DP_TCL_DATA_RING_SIZE,
+               .smp2p_wow_exit = false,
+               .support_fw_mac_sequence = true,
+               .support_dual_stations = true,
+       },
+       {
+               .name = "qca6698aq hw2.1",
+               .hw_rev = ATH11K_HW_QCA6698AQ_HW21,
+               .fw = {
+                       .dir = "QCA6698AQ/hw2.1",
+                       .board_size = 256 * 1024,
+                       .cal_offset = 128 * 1024,
+               },
+               .max_radios = 3,
+               .bdf_addr = 0x4B0C0000,
+               .hw_ops = &wcn6855_ops,
+               .ring_mask = &ath11k_hw_ring_mask_qca6390,
+               .internal_sleep_clock = true,
+               .regs = &wcn6855_regs,
+               .qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_QCA6390,
+               .host_ce_config = ath11k_host_ce_config_qca6390,
+               .ce_count = 9,
+               .target_ce_config = ath11k_target_ce_config_wlan_qca6390,
+               .target_ce_count = 9,
+               .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qca6390,
+               .svc_to_ce_map_len = 14,
+               .single_pdev_only = true,
+               .rxdma1_enable = false,
+               .num_rxdma_per_pdev = 2,
+               .rx_mac_buf_ring = true,
+               .vdev_start_delay = true,
+               .htt_peer_map_v2 = false,
+
+               .spectral = {
+                       .fft_sz = 0,
+                       .fft_pad_sz = 0,
+                       .summary_pad_sz = 0,
+                       .fft_hdr_len = 0,
+                       .max_fft_bins = 0,
+                       .fragment_160mhz = false,
+               },
+
+               .interface_modes = BIT(NL80211_IFTYPE_STATION) |
+                                       BIT(NL80211_IFTYPE_AP) |
+                                       BIT(NL80211_IFTYPE_P2P_DEVICE) |
+                                       BIT(NL80211_IFTYPE_P2P_CLIENT) |
+                                       BIT(NL80211_IFTYPE_P2P_GO),
+               .supports_monitor = false,
+               .supports_shadow_regs = true,
+               .idle_ps = true,
+               .supports_sta_ps = true,
+               .coldboot_cal_mm = false,
+               .coldboot_cal_ftm = false,
+               .cbcal_restart_fw = false,
+               .fw_mem_mode = 0,
+               .num_vdevs = 2 + 1,
+               .num_peers = 512,
+               .supports_suspend = true,
+               .hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
+               .supports_regdb = true,
+               .fix_l1ss = false,
+               .credit_flow = true,
+               .max_tx_ring = DP_TCL_NUM_RING_MAX_QCA6390,
+               .hal_params = &ath11k_hw_hal_params_qca6390,
+               .supports_dynamic_smps_6ghz = false,
+               .alloc_cacheable_memory = false,
+               .supports_rssi_stats = true,
+               .fw_wmi_diag_event = true,
+               .current_cc_support = true,
+               .dbr_debug_support = false,
+               .global_reset = true,
+               .bios_sar_capa = &ath11k_hw_sar_capa_wcn6855,
+               .m3_fw_support = true,
+               .fixed_bdf_addr = false,
+               .fixed_mem_region = false,
+               .static_window_map = false,
+               .hybrid_bus_type = false,
+               .fixed_fw_mem = false,
+               .support_off_channel_tx = true,
+               .supports_multi_bssid = true,
+
+               .sram_dump = {
+                       .start = 0x01400000,
+                       .end = 0x0177ffff,
+               },
+
                .tcl_ring_retry = true,
                .tx_ring_size = DP_TCL_DATA_RING_SIZE,
                .smp2p_wow_exit = false,
index b1440a70a886bf1ecaf3aad12cfc70d7a650c6e1..a9dc7fe7765a143c3808908a541d70aeeb5a7a54 100644 (file)
@@ -148,6 +148,7 @@ enum ath11k_hw_rev {
        ATH11K_HW_WCN6750_HW10,
        ATH11K_HW_IPQ5018_HW10,
        ATH11K_HW_QCA2066_HW21,
+       ATH11K_HW_QCA6698AQ_HW21,
 };
 
 enum ath11k_firmware_mode {
index 6974a551883fcb4cddf9b97ac692eaea43499c7f..6e45f464a429beb1ee5b40cab173d76406f7a55e 100644 (file)
@@ -398,6 +398,7 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci)
        case ATH11K_HW_WCN6855_HW20:
        case ATH11K_HW_WCN6855_HW21:
        case ATH11K_HW_QCA2066_HW21:
+       case ATH11K_HW_QCA6698AQ_HW21:
                ath11k_mhi_config = &ath11k_mhi_config_qca6390;
                break;
        default:
index be9d2c69cc4137c519244ce02e4eaa3bdf2ec546..b93f04973ad79f945fc6e923592ec6904dcd8f8f 100644 (file)
@@ -846,6 +846,9 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
                                case 0x1019D0E1:
                                        ab->hw_rev = ATH11K_HW_QCA2066_HW21;
                                        break;
+                               case 0x001e60e1:
+                                       ab->hw_rev = ATH11K_HW_QCA6698AQ_HW21;
+                                       break;
                                default:
                                        ab->hw_rev = ATH11K_HW_WCN6855_HW21;
                                }
index debe7c5919ef006ee911c94882c82ea3bcf61548..3fe77310c71fcb094b84baee0f87e106566a5097 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include "core.h"
@@ -126,6 +126,17 @@ static const struct ath11k_msi_config ath11k_msi_config[] = {
                },
                .hw_rev = ATH11K_HW_QCA2066_HW21,
        },
+       {
+               .total_vectors = 32,
+               .total_users = 4,
+               .users = (struct ath11k_msi_user[]) {
+                       { .name = "MHI", .num_vectors = 3, .base_vector = 0 },
+                       { .name = "CE", .num_vectors = 10, .base_vector = 3 },
+                       { .name = "WAKE", .num_vectors = 1, .base_vector = 13 },
+                       { .name = "DP", .num_vectors = 18, .base_vector = 14 },
+               },
+               .hw_rev = ATH11K_HW_QCA6698AQ_HW21,
+       },
 };
 
 int ath11k_pcic_init_msi_config(struct ath11k_base *ab)