162306a36Sopenharmony_ci// SPDX-License-Identifier: BSD-3-Clause-Clear 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. 462306a36Sopenharmony_ci * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/types.h> 862306a36Sopenharmony_ci#include <linux/bitops.h> 962306a36Sopenharmony_ci#include <linux/bitfield.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "debug.h" 1262306a36Sopenharmony_ci#include "core.h" 1362306a36Sopenharmony_ci#include "ce.h" 1462306a36Sopenharmony_ci#include "hw.h" 1562306a36Sopenharmony_ci#include "mhi.h" 1662306a36Sopenharmony_ci#include "dp_rx.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistatic u8 ath12k_hw_qcn9274_mac_from_pdev_id(int pdev_idx) 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci return pdev_idx; 2162306a36Sopenharmony_ci} 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistatic int ath12k_hw_mac_id_to_pdev_id_qcn9274(const struct ath12k_hw_params *hw, 2462306a36Sopenharmony_ci int mac_id) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci return mac_id; 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistatic int ath12k_hw_mac_id_to_srng_id_qcn9274(const struct ath12k_hw_params *hw, 3062306a36Sopenharmony_ci int mac_id) 3162306a36Sopenharmony_ci{ 3262306a36Sopenharmony_ci return 0; 3362306a36Sopenharmony_ci} 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistatic u8 ath12k_hw_get_ring_selector_qcn9274(struct sk_buff *skb) 3662306a36Sopenharmony_ci{ 3762306a36Sopenharmony_ci return smp_processor_id(); 3862306a36Sopenharmony_ci} 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic bool ath12k_dp_srng_is_comp_ring_qcn9274(int ring_num) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci if (ring_num < 3 || ring_num == 4) 4362306a36Sopenharmony_ci return true; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci return false; 4662306a36Sopenharmony_ci} 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistatic int ath12k_hw_mac_id_to_pdev_id_wcn7850(const struct ath12k_hw_params *hw, 4962306a36Sopenharmony_ci int mac_id) 5062306a36Sopenharmony_ci{ 5162306a36Sopenharmony_ci return 0; 5262306a36Sopenharmony_ci} 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistatic int ath12k_hw_mac_id_to_srng_id_wcn7850(const struct ath12k_hw_params *hw, 5562306a36Sopenharmony_ci int mac_id) 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci return mac_id; 5862306a36Sopenharmony_ci} 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistatic u8 ath12k_hw_get_ring_selector_wcn7850(struct sk_buff *skb) 6162306a36Sopenharmony_ci{ 6262306a36Sopenharmony_ci return skb_get_queue_mapping(skb); 6362306a36Sopenharmony_ci} 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistatic bool ath12k_dp_srng_is_comp_ring_wcn7850(int ring_num) 6662306a36Sopenharmony_ci{ 6762306a36Sopenharmony_ci if (ring_num == 0 || ring_num == 2 || ring_num == 4) 6862306a36Sopenharmony_ci return true; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci return false; 7162306a36Sopenharmony_ci} 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_cistatic const struct ath12k_hw_ops qcn9274_ops = { 7462306a36Sopenharmony_ci .get_hw_mac_from_pdev_id = ath12k_hw_qcn9274_mac_from_pdev_id, 7562306a36Sopenharmony_ci .mac_id_to_pdev_id = ath12k_hw_mac_id_to_pdev_id_qcn9274, 7662306a36Sopenharmony_ci .mac_id_to_srng_id = ath12k_hw_mac_id_to_srng_id_qcn9274, 7762306a36Sopenharmony_ci .rxdma_ring_sel_config = ath12k_dp_rxdma_ring_sel_config_qcn9274, 7862306a36Sopenharmony_ci .get_ring_selector = ath12k_hw_get_ring_selector_qcn9274, 7962306a36Sopenharmony_ci .dp_srng_is_tx_comp_ring = ath12k_dp_srng_is_comp_ring_qcn9274, 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_cistatic const struct ath12k_hw_ops wcn7850_ops = { 8362306a36Sopenharmony_ci .get_hw_mac_from_pdev_id = ath12k_hw_qcn9274_mac_from_pdev_id, 8462306a36Sopenharmony_ci .mac_id_to_pdev_id = ath12k_hw_mac_id_to_pdev_id_wcn7850, 8562306a36Sopenharmony_ci .mac_id_to_srng_id = ath12k_hw_mac_id_to_srng_id_wcn7850, 8662306a36Sopenharmony_ci .rxdma_ring_sel_config = ath12k_dp_rxdma_ring_sel_config_wcn7850, 8762306a36Sopenharmony_ci .get_ring_selector = ath12k_hw_get_ring_selector_wcn7850, 8862306a36Sopenharmony_ci .dp_srng_is_tx_comp_ring = ath12k_dp_srng_is_comp_ring_wcn7850, 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci#define ATH12K_TX_RING_MASK_0 0x1 9262306a36Sopenharmony_ci#define ATH12K_TX_RING_MASK_1 0x2 9362306a36Sopenharmony_ci#define ATH12K_TX_RING_MASK_2 0x4 9462306a36Sopenharmony_ci#define ATH12K_TX_RING_MASK_3 0x8 9562306a36Sopenharmony_ci#define ATH12K_TX_RING_MASK_4 0x10 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci#define ATH12K_RX_RING_MASK_0 0x1 9862306a36Sopenharmony_ci#define ATH12K_RX_RING_MASK_1 0x2 9962306a36Sopenharmony_ci#define ATH12K_RX_RING_MASK_2 0x4 10062306a36Sopenharmony_ci#define ATH12K_RX_RING_MASK_3 0x8 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci#define ATH12K_RX_ERR_RING_MASK_0 0x1 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci#define ATH12K_RX_WBM_REL_RING_MASK_0 0x1 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci#define ATH12K_REO_STATUS_RING_MASK_0 0x1 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#define ATH12K_HOST2RXDMA_RING_MASK_0 0x1 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci#define ATH12K_RX_MON_RING_MASK_0 0x1 11162306a36Sopenharmony_ci#define ATH12K_RX_MON_RING_MASK_1 0x2 11262306a36Sopenharmony_ci#define ATH12K_RX_MON_RING_MASK_2 0x4 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci#define ATH12K_TX_MON_RING_MASK_0 0x1 11562306a36Sopenharmony_ci#define ATH12K_TX_MON_RING_MASK_1 0x2 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci/* Target firmware's Copy Engine configuration. */ 11862306a36Sopenharmony_cistatic const struct ce_pipe_config ath12k_target_ce_config_wlan_qcn9274[] = { 11962306a36Sopenharmony_ci /* CE0: host->target HTC control and raw streams */ 12062306a36Sopenharmony_ci { 12162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(0), 12262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 12362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 12462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 12562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 12662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 12762306a36Sopenharmony_ci }, 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci /* CE1: target->host HTT + HTC control */ 13062306a36Sopenharmony_ci { 13162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(1), 13262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_IN), 13362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 13462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 13562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 13662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 13762306a36Sopenharmony_ci }, 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci /* CE2: target->host WMI */ 14062306a36Sopenharmony_ci { 14162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(2), 14262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_IN), 14362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 14462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 14562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 14662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 14762306a36Sopenharmony_ci }, 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci /* CE3: host->target WMI (mac0) */ 15062306a36Sopenharmony_ci { 15162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(3), 15262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 15362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 15462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 15562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 15662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 15762306a36Sopenharmony_ci }, 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci /* CE4: host->target HTT */ 16062306a36Sopenharmony_ci { 16162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(4), 16262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 16362306a36Sopenharmony_ci .nentries = __cpu_to_le32(256), 16462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(256), 16562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR), 16662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 16762306a36Sopenharmony_ci }, 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci /* CE5: target->host Pktlog */ 17062306a36Sopenharmony_ci { 17162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(5), 17262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_IN), 17362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 17462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 17562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 17662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 17762306a36Sopenharmony_ci }, 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci /* CE6: Reserved for target autonomous hif_memcpy */ 18062306a36Sopenharmony_ci { 18162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(6), 18262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_INOUT), 18362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 18462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(16384), 18562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 18662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 18762306a36Sopenharmony_ci }, 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci /* CE7: host->target WMI (mac1) */ 19062306a36Sopenharmony_ci { 19162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(7), 19262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 19362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 19462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 19562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 19662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 19762306a36Sopenharmony_ci }, 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci /* CE8: Reserved for target autonomous hif_memcpy */ 20062306a36Sopenharmony_ci { 20162306a36Sopenharmony_ci .pipenum = __cpu_to_le32(8), 20262306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_INOUT), 20362306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 20462306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(16384), 20562306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 20662306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 20762306a36Sopenharmony_ci }, 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci /* CE9, 10 and 11: Reserved for MHI */ 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci /* CE12: Target CV prefetch */ 21262306a36Sopenharmony_ci { 21362306a36Sopenharmony_ci .pipenum = __cpu_to_le32(12), 21462306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 21562306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 21662306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 21762306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 21862306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 21962306a36Sopenharmony_ci }, 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci /* CE13: Target CV prefetch */ 22262306a36Sopenharmony_ci { 22362306a36Sopenharmony_ci .pipenum = __cpu_to_le32(13), 22462306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 22562306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 22662306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 22762306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 22862306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 22962306a36Sopenharmony_ci }, 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci /* CE14: WMI logging/CFR/Spectral/Radar */ 23262306a36Sopenharmony_ci { 23362306a36Sopenharmony_ci .pipenum = __cpu_to_le32(14), 23462306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_IN), 23562306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 23662306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 23762306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 23862306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 23962306a36Sopenharmony_ci }, 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci /* CE15: Reserved */ 24262306a36Sopenharmony_ci}; 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci/* Target firmware's Copy Engine configuration. */ 24562306a36Sopenharmony_cistatic const struct ce_pipe_config ath12k_target_ce_config_wlan_wcn7850[] = { 24662306a36Sopenharmony_ci /* CE0: host->target HTC control and raw streams */ 24762306a36Sopenharmony_ci { 24862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(0), 24962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 25062306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 25162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 25262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 25362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 25462306a36Sopenharmony_ci }, 25562306a36Sopenharmony_ci 25662306a36Sopenharmony_ci /* CE1: target->host HTT + HTC control */ 25762306a36Sopenharmony_ci { 25862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(1), 25962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_IN), 26062306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 26162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 26262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 26362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 26462306a36Sopenharmony_ci }, 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci /* CE2: target->host WMI */ 26762306a36Sopenharmony_ci { 26862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(2), 26962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_IN), 27062306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 27162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 27262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 27362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 27462306a36Sopenharmony_ci }, 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci /* CE3: host->target WMI */ 27762306a36Sopenharmony_ci { 27862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(3), 27962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 28062306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 28162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 28262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 28362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 28462306a36Sopenharmony_ci }, 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci /* CE4: host->target HTT */ 28762306a36Sopenharmony_ci { 28862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(4), 28962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_OUT), 29062306a36Sopenharmony_ci .nentries = __cpu_to_le32(256), 29162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(256), 29262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR), 29362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 29462306a36Sopenharmony_ci }, 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci /* CE5: target->host Pktlog */ 29762306a36Sopenharmony_ci { 29862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(5), 29962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_IN), 30062306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 30162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(2048), 30262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 30362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 30462306a36Sopenharmony_ci }, 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci /* CE6: Reserved for target autonomous hif_memcpy */ 30762306a36Sopenharmony_ci { 30862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(6), 30962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_INOUT), 31062306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 31162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(16384), 31262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 31362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 31462306a36Sopenharmony_ci }, 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci /* CE7 used only by Host */ 31762306a36Sopenharmony_ci { 31862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(7), 31962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H), 32062306a36Sopenharmony_ci .nentries = __cpu_to_le32(0), 32162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(0), 32262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR), 32362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 32462306a36Sopenharmony_ci }, 32562306a36Sopenharmony_ci 32662306a36Sopenharmony_ci /* CE8 target->host used only by IPA */ 32762306a36Sopenharmony_ci { 32862306a36Sopenharmony_ci .pipenum = __cpu_to_le32(8), 32962306a36Sopenharmony_ci .pipedir = __cpu_to_le32(PIPEDIR_INOUT), 33062306a36Sopenharmony_ci .nentries = __cpu_to_le32(32), 33162306a36Sopenharmony_ci .nbytes_max = __cpu_to_le32(16384), 33262306a36Sopenharmony_ci .flags = __cpu_to_le32(CE_ATTR_FLAGS), 33362306a36Sopenharmony_ci .reserved = __cpu_to_le32(0), 33462306a36Sopenharmony_ci }, 33562306a36Sopenharmony_ci /* CE 9, 10, 11 are used by MHI driver */ 33662306a36Sopenharmony_ci}; 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_ci/* Map from service/endpoint to Copy Engine. 33962306a36Sopenharmony_ci * This table is derived from the CE_PCI TABLE, above. 34062306a36Sopenharmony_ci * It is passed to the Target at startup for use by firmware. 34162306a36Sopenharmony_ci */ 34262306a36Sopenharmony_cistatic const struct service_to_pipe ath12k_target_service_to_ce_map_wlan_qcn9274[] = { 34362306a36Sopenharmony_ci { 34462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO), 34562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 34662306a36Sopenharmony_ci __cpu_to_le32(3), 34762306a36Sopenharmony_ci }, 34862306a36Sopenharmony_ci { 34962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO), 35062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 35162306a36Sopenharmony_ci __cpu_to_le32(2), 35262306a36Sopenharmony_ci }, 35362306a36Sopenharmony_ci { 35462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK), 35562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 35662306a36Sopenharmony_ci __cpu_to_le32(3), 35762306a36Sopenharmony_ci }, 35862306a36Sopenharmony_ci { 35962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK), 36062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 36162306a36Sopenharmony_ci __cpu_to_le32(2), 36262306a36Sopenharmony_ci }, 36362306a36Sopenharmony_ci { 36462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE), 36562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 36662306a36Sopenharmony_ci __cpu_to_le32(3), 36762306a36Sopenharmony_ci }, 36862306a36Sopenharmony_ci { 36962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE), 37062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 37162306a36Sopenharmony_ci __cpu_to_le32(2), 37262306a36Sopenharmony_ci }, 37362306a36Sopenharmony_ci { 37462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI), 37562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 37662306a36Sopenharmony_ci __cpu_to_le32(3), 37762306a36Sopenharmony_ci }, 37862306a36Sopenharmony_ci { 37962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI), 38062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 38162306a36Sopenharmony_ci __cpu_to_le32(2), 38262306a36Sopenharmony_ci }, 38362306a36Sopenharmony_ci { 38462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL), 38562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 38662306a36Sopenharmony_ci __cpu_to_le32(3), 38762306a36Sopenharmony_ci }, 38862306a36Sopenharmony_ci { 38962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL), 39062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 39162306a36Sopenharmony_ci __cpu_to_le32(2), 39262306a36Sopenharmony_ci }, 39362306a36Sopenharmony_ci { 39462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL), 39562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 39662306a36Sopenharmony_ci __cpu_to_le32(0), 39762306a36Sopenharmony_ci }, 39862306a36Sopenharmony_ci { 39962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL), 40062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 40162306a36Sopenharmony_ci __cpu_to_le32(1), 40262306a36Sopenharmony_ci }, 40362306a36Sopenharmony_ci { 40462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_TEST_RAW_STREAMS), 40562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 40662306a36Sopenharmony_ci __cpu_to_le32(0), 40762306a36Sopenharmony_ci }, 40862306a36Sopenharmony_ci { 40962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_TEST_RAW_STREAMS), 41062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 41162306a36Sopenharmony_ci __cpu_to_le32(1), 41262306a36Sopenharmony_ci }, 41362306a36Sopenharmony_ci { 41462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG), 41562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 41662306a36Sopenharmony_ci __cpu_to_le32(4), 41762306a36Sopenharmony_ci }, 41862306a36Sopenharmony_ci { 41962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG), 42062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 42162306a36Sopenharmony_ci __cpu_to_le32(1), 42262306a36Sopenharmony_ci }, 42362306a36Sopenharmony_ci { 42462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC1), 42562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 42662306a36Sopenharmony_ci __cpu_to_le32(7), 42762306a36Sopenharmony_ci }, 42862306a36Sopenharmony_ci { 42962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC1), 43062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 43162306a36Sopenharmony_ci __cpu_to_le32(2), 43262306a36Sopenharmony_ci }, 43362306a36Sopenharmony_ci { 43462306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_PKT_LOG), 43562306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 43662306a36Sopenharmony_ci __cpu_to_le32(5), 43762306a36Sopenharmony_ci }, 43862306a36Sopenharmony_ci { 43962306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL_DIAG), 44062306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 44162306a36Sopenharmony_ci __cpu_to_le32(14), 44262306a36Sopenharmony_ci }, 44362306a36Sopenharmony_ci 44462306a36Sopenharmony_ci /* (Additions here) */ 44562306a36Sopenharmony_ci 44662306a36Sopenharmony_ci { /* must be last */ 44762306a36Sopenharmony_ci __cpu_to_le32(0), 44862306a36Sopenharmony_ci __cpu_to_le32(0), 44962306a36Sopenharmony_ci __cpu_to_le32(0), 45062306a36Sopenharmony_ci }, 45162306a36Sopenharmony_ci}; 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_cistatic const struct service_to_pipe ath12k_target_service_to_ce_map_wlan_wcn7850[] = { 45462306a36Sopenharmony_ci { 45562306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO), 45662306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 45762306a36Sopenharmony_ci __cpu_to_le32(3), 45862306a36Sopenharmony_ci }, 45962306a36Sopenharmony_ci { 46062306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO), 46162306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 46262306a36Sopenharmony_ci __cpu_to_le32(2), 46362306a36Sopenharmony_ci }, 46462306a36Sopenharmony_ci { 46562306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK), 46662306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 46762306a36Sopenharmony_ci __cpu_to_le32(3), 46862306a36Sopenharmony_ci }, 46962306a36Sopenharmony_ci { 47062306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK), 47162306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 47262306a36Sopenharmony_ci __cpu_to_le32(2), 47362306a36Sopenharmony_ci }, 47462306a36Sopenharmony_ci { 47562306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE), 47662306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 47762306a36Sopenharmony_ci __cpu_to_le32(3), 47862306a36Sopenharmony_ci }, 47962306a36Sopenharmony_ci { 48062306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE), 48162306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 48262306a36Sopenharmony_ci __cpu_to_le32(2), 48362306a36Sopenharmony_ci }, 48462306a36Sopenharmony_ci { 48562306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI), 48662306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 48762306a36Sopenharmony_ci __cpu_to_le32(3), 48862306a36Sopenharmony_ci }, 48962306a36Sopenharmony_ci { 49062306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI), 49162306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 49262306a36Sopenharmony_ci __cpu_to_le32(2), 49362306a36Sopenharmony_ci }, 49462306a36Sopenharmony_ci { 49562306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL), 49662306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 49762306a36Sopenharmony_ci __cpu_to_le32(3), 49862306a36Sopenharmony_ci }, 49962306a36Sopenharmony_ci { 50062306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL), 50162306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 50262306a36Sopenharmony_ci __cpu_to_le32(2), 50362306a36Sopenharmony_ci }, 50462306a36Sopenharmony_ci { 50562306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL), 50662306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 50762306a36Sopenharmony_ci __cpu_to_le32(0), 50862306a36Sopenharmony_ci }, 50962306a36Sopenharmony_ci { 51062306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL), 51162306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 51262306a36Sopenharmony_ci __cpu_to_le32(2), 51362306a36Sopenharmony_ci }, 51462306a36Sopenharmony_ci { 51562306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG), 51662306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ 51762306a36Sopenharmony_ci __cpu_to_le32(4), 51862306a36Sopenharmony_ci }, 51962306a36Sopenharmony_ci { 52062306a36Sopenharmony_ci __cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG), 52162306a36Sopenharmony_ci __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */ 52262306a36Sopenharmony_ci __cpu_to_le32(1), 52362306a36Sopenharmony_ci }, 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_ci /* (Additions here) */ 52662306a36Sopenharmony_ci 52762306a36Sopenharmony_ci { /* must be last */ 52862306a36Sopenharmony_ci __cpu_to_le32(0), 52962306a36Sopenharmony_ci __cpu_to_le32(0), 53062306a36Sopenharmony_ci __cpu_to_le32(0), 53162306a36Sopenharmony_ci }, 53262306a36Sopenharmony_ci}; 53362306a36Sopenharmony_ci 53462306a36Sopenharmony_cistatic const struct ath12k_hw_ring_mask ath12k_hw_ring_mask_qcn9274 = { 53562306a36Sopenharmony_ci .tx = { 53662306a36Sopenharmony_ci ATH12K_TX_RING_MASK_0, 53762306a36Sopenharmony_ci ATH12K_TX_RING_MASK_1, 53862306a36Sopenharmony_ci ATH12K_TX_RING_MASK_2, 53962306a36Sopenharmony_ci ATH12K_TX_RING_MASK_3, 54062306a36Sopenharmony_ci }, 54162306a36Sopenharmony_ci .rx_mon_dest = { 54262306a36Sopenharmony_ci 0, 0, 0, 54362306a36Sopenharmony_ci ATH12K_RX_MON_RING_MASK_0, 54462306a36Sopenharmony_ci ATH12K_RX_MON_RING_MASK_1, 54562306a36Sopenharmony_ci ATH12K_RX_MON_RING_MASK_2, 54662306a36Sopenharmony_ci }, 54762306a36Sopenharmony_ci .rx = { 54862306a36Sopenharmony_ci 0, 0, 0, 0, 54962306a36Sopenharmony_ci ATH12K_RX_RING_MASK_0, 55062306a36Sopenharmony_ci ATH12K_RX_RING_MASK_1, 55162306a36Sopenharmony_ci ATH12K_RX_RING_MASK_2, 55262306a36Sopenharmony_ci ATH12K_RX_RING_MASK_3, 55362306a36Sopenharmony_ci }, 55462306a36Sopenharmony_ci .rx_err = { 55562306a36Sopenharmony_ci 0, 0, 0, 55662306a36Sopenharmony_ci ATH12K_RX_ERR_RING_MASK_0, 55762306a36Sopenharmony_ci }, 55862306a36Sopenharmony_ci .rx_wbm_rel = { 55962306a36Sopenharmony_ci 0, 0, 0, 56062306a36Sopenharmony_ci ATH12K_RX_WBM_REL_RING_MASK_0, 56162306a36Sopenharmony_ci }, 56262306a36Sopenharmony_ci .reo_status = { 56362306a36Sopenharmony_ci 0, 0, 0, 56462306a36Sopenharmony_ci ATH12K_REO_STATUS_RING_MASK_0, 56562306a36Sopenharmony_ci }, 56662306a36Sopenharmony_ci .host2rxdma = { 56762306a36Sopenharmony_ci 0, 0, 0, 56862306a36Sopenharmony_ci ATH12K_HOST2RXDMA_RING_MASK_0, 56962306a36Sopenharmony_ci }, 57062306a36Sopenharmony_ci .tx_mon_dest = { 57162306a36Sopenharmony_ci ATH12K_TX_MON_RING_MASK_0, 57262306a36Sopenharmony_ci ATH12K_TX_MON_RING_MASK_1, 57362306a36Sopenharmony_ci }, 57462306a36Sopenharmony_ci}; 57562306a36Sopenharmony_ci 57662306a36Sopenharmony_cistatic const struct ath12k_hw_ring_mask ath12k_hw_ring_mask_wcn7850 = { 57762306a36Sopenharmony_ci .tx = { 57862306a36Sopenharmony_ci ATH12K_TX_RING_MASK_0, 57962306a36Sopenharmony_ci ATH12K_TX_RING_MASK_2, 58062306a36Sopenharmony_ci ATH12K_TX_RING_MASK_4, 58162306a36Sopenharmony_ci }, 58262306a36Sopenharmony_ci .rx_mon_dest = { 58362306a36Sopenharmony_ci }, 58462306a36Sopenharmony_ci .rx = { 58562306a36Sopenharmony_ci 0, 0, 0, 58662306a36Sopenharmony_ci ATH12K_RX_RING_MASK_0, 58762306a36Sopenharmony_ci ATH12K_RX_RING_MASK_1, 58862306a36Sopenharmony_ci ATH12K_RX_RING_MASK_2, 58962306a36Sopenharmony_ci ATH12K_RX_RING_MASK_3, 59062306a36Sopenharmony_ci }, 59162306a36Sopenharmony_ci .rx_err = { 59262306a36Sopenharmony_ci ATH12K_RX_ERR_RING_MASK_0, 59362306a36Sopenharmony_ci }, 59462306a36Sopenharmony_ci .rx_wbm_rel = { 59562306a36Sopenharmony_ci ATH12K_RX_WBM_REL_RING_MASK_0, 59662306a36Sopenharmony_ci }, 59762306a36Sopenharmony_ci .reo_status = { 59862306a36Sopenharmony_ci ATH12K_REO_STATUS_RING_MASK_0, 59962306a36Sopenharmony_ci }, 60062306a36Sopenharmony_ci .host2rxdma = { 60162306a36Sopenharmony_ci }, 60262306a36Sopenharmony_ci .tx_mon_dest = { 60362306a36Sopenharmony_ci }, 60462306a36Sopenharmony_ci}; 60562306a36Sopenharmony_ci 60662306a36Sopenharmony_cistatic const struct ath12k_hw_regs qcn9274_v1_regs = { 60762306a36Sopenharmony_ci /* SW2TCL(x) R0 ring configuration address */ 60862306a36Sopenharmony_ci .hal_tcl1_ring_id = 0x00000908, 60962306a36Sopenharmony_ci .hal_tcl1_ring_misc = 0x00000910, 61062306a36Sopenharmony_ci .hal_tcl1_ring_tp_addr_lsb = 0x0000091c, 61162306a36Sopenharmony_ci .hal_tcl1_ring_tp_addr_msb = 0x00000920, 61262306a36Sopenharmony_ci .hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000930, 61362306a36Sopenharmony_ci .hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000934, 61462306a36Sopenharmony_ci .hal_tcl1_ring_msi1_base_lsb = 0x00000948, 61562306a36Sopenharmony_ci .hal_tcl1_ring_msi1_base_msb = 0x0000094c, 61662306a36Sopenharmony_ci .hal_tcl1_ring_msi1_data = 0x00000950, 61762306a36Sopenharmony_ci .hal_tcl_ring_base_lsb = 0x00000b58, 61862306a36Sopenharmony_ci 61962306a36Sopenharmony_ci /* TCL STATUS ring address */ 62062306a36Sopenharmony_ci .hal_tcl_status_ring_base_lsb = 0x00000d38, 62162306a36Sopenharmony_ci 62262306a36Sopenharmony_ci .hal_wbm_idle_ring_base_lsb = 0x00000d0c, 62362306a36Sopenharmony_ci .hal_wbm_idle_ring_misc_addr = 0x00000d1c, 62462306a36Sopenharmony_ci .hal_wbm_r0_idle_list_cntl_addr = 0x00000210, 62562306a36Sopenharmony_ci .hal_wbm_r0_idle_list_size_addr = 0x00000214, 62662306a36Sopenharmony_ci .hal_wbm_scattered_ring_base_lsb = 0x00000220, 62762306a36Sopenharmony_ci .hal_wbm_scattered_ring_base_msb = 0x00000224, 62862306a36Sopenharmony_ci .hal_wbm_scattered_desc_head_info_ix0 = 0x00000230, 62962306a36Sopenharmony_ci .hal_wbm_scattered_desc_head_info_ix1 = 0x00000234, 63062306a36Sopenharmony_ci .hal_wbm_scattered_desc_tail_info_ix0 = 0x00000240, 63162306a36Sopenharmony_ci .hal_wbm_scattered_desc_tail_info_ix1 = 0x00000244, 63262306a36Sopenharmony_ci .hal_wbm_scattered_desc_ptr_hp_addr = 0x0000024c, 63362306a36Sopenharmony_ci 63462306a36Sopenharmony_ci .hal_wbm_sw_release_ring_base_lsb = 0x0000034c, 63562306a36Sopenharmony_ci .hal_wbm_sw1_release_ring_base_lsb = 0x000003c4, 63662306a36Sopenharmony_ci .hal_wbm0_release_ring_base_lsb = 0x00000dd8, 63762306a36Sopenharmony_ci .hal_wbm1_release_ring_base_lsb = 0x00000e50, 63862306a36Sopenharmony_ci 63962306a36Sopenharmony_ci /* PCIe base address */ 64062306a36Sopenharmony_ci .pcie_qserdes_sysclk_en_sel = 0x01e0c0a8, 64162306a36Sopenharmony_ci .pcie_pcs_osc_dtct_config_base = 0x01e0d45c, 64262306a36Sopenharmony_ci 64362306a36Sopenharmony_ci /* PPE release ring address */ 64462306a36Sopenharmony_ci .hal_ppe_rel_ring_base = 0x0000043c, 64562306a36Sopenharmony_ci 64662306a36Sopenharmony_ci /* REO DEST ring address */ 64762306a36Sopenharmony_ci .hal_reo2_ring_base = 0x0000055c, 64862306a36Sopenharmony_ci .hal_reo1_misc_ctrl_addr = 0x00000b7c, 64962306a36Sopenharmony_ci .hal_reo1_sw_cookie_cfg0 = 0x00000050, 65062306a36Sopenharmony_ci .hal_reo1_sw_cookie_cfg1 = 0x00000054, 65162306a36Sopenharmony_ci .hal_reo1_qdesc_lut_base0 = 0x00000058, 65262306a36Sopenharmony_ci .hal_reo1_qdesc_lut_base1 = 0x0000005c, 65362306a36Sopenharmony_ci .hal_reo1_ring_base_lsb = 0x000004e4, 65462306a36Sopenharmony_ci .hal_reo1_ring_base_msb = 0x000004e8, 65562306a36Sopenharmony_ci .hal_reo1_ring_id = 0x000004ec, 65662306a36Sopenharmony_ci .hal_reo1_ring_misc = 0x000004f4, 65762306a36Sopenharmony_ci .hal_reo1_ring_hp_addr_lsb = 0x000004f8, 65862306a36Sopenharmony_ci .hal_reo1_ring_hp_addr_msb = 0x000004fc, 65962306a36Sopenharmony_ci .hal_reo1_ring_producer_int_setup = 0x00000508, 66062306a36Sopenharmony_ci .hal_reo1_ring_msi1_base_lsb = 0x0000052C, 66162306a36Sopenharmony_ci .hal_reo1_ring_msi1_base_msb = 0x00000530, 66262306a36Sopenharmony_ci .hal_reo1_ring_msi1_data = 0x00000534, 66362306a36Sopenharmony_ci .hal_reo1_aging_thres_ix0 = 0x00000b08, 66462306a36Sopenharmony_ci .hal_reo1_aging_thres_ix1 = 0x00000b0c, 66562306a36Sopenharmony_ci .hal_reo1_aging_thres_ix2 = 0x00000b10, 66662306a36Sopenharmony_ci .hal_reo1_aging_thres_ix3 = 0x00000b14, 66762306a36Sopenharmony_ci 66862306a36Sopenharmony_ci /* REO Exception ring address */ 66962306a36Sopenharmony_ci .hal_reo2_sw0_ring_base = 0x000008a4, 67062306a36Sopenharmony_ci 67162306a36Sopenharmony_ci /* REO Reinject ring address */ 67262306a36Sopenharmony_ci .hal_sw2reo_ring_base = 0x00000304, 67362306a36Sopenharmony_ci .hal_sw2reo1_ring_base = 0x0000037c, 67462306a36Sopenharmony_ci 67562306a36Sopenharmony_ci /* REO cmd ring address */ 67662306a36Sopenharmony_ci .hal_reo_cmd_ring_base = 0x0000028c, 67762306a36Sopenharmony_ci 67862306a36Sopenharmony_ci /* REO status ring address */ 67962306a36Sopenharmony_ci .hal_reo_status_ring_base = 0x00000a84, 68062306a36Sopenharmony_ci}; 68162306a36Sopenharmony_ci 68262306a36Sopenharmony_cistatic const struct ath12k_hw_regs qcn9274_v2_regs = { 68362306a36Sopenharmony_ci /* SW2TCL(x) R0 ring configuration address */ 68462306a36Sopenharmony_ci .hal_tcl1_ring_id = 0x00000908, 68562306a36Sopenharmony_ci .hal_tcl1_ring_misc = 0x00000910, 68662306a36Sopenharmony_ci .hal_tcl1_ring_tp_addr_lsb = 0x0000091c, 68762306a36Sopenharmony_ci .hal_tcl1_ring_tp_addr_msb = 0x00000920, 68862306a36Sopenharmony_ci .hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000930, 68962306a36Sopenharmony_ci .hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000934, 69062306a36Sopenharmony_ci .hal_tcl1_ring_msi1_base_lsb = 0x00000948, 69162306a36Sopenharmony_ci .hal_tcl1_ring_msi1_base_msb = 0x0000094c, 69262306a36Sopenharmony_ci .hal_tcl1_ring_msi1_data = 0x00000950, 69362306a36Sopenharmony_ci .hal_tcl_ring_base_lsb = 0x00000b58, 69462306a36Sopenharmony_ci 69562306a36Sopenharmony_ci /* TCL STATUS ring address */ 69662306a36Sopenharmony_ci .hal_tcl_status_ring_base_lsb = 0x00000d38, 69762306a36Sopenharmony_ci 69862306a36Sopenharmony_ci /* WBM idle link ring address */ 69962306a36Sopenharmony_ci .hal_wbm_idle_ring_base_lsb = 0x00000d3c, 70062306a36Sopenharmony_ci .hal_wbm_idle_ring_misc_addr = 0x00000d4c, 70162306a36Sopenharmony_ci .hal_wbm_r0_idle_list_cntl_addr = 0x00000240, 70262306a36Sopenharmony_ci .hal_wbm_r0_idle_list_size_addr = 0x00000244, 70362306a36Sopenharmony_ci .hal_wbm_scattered_ring_base_lsb = 0x00000250, 70462306a36Sopenharmony_ci .hal_wbm_scattered_ring_base_msb = 0x00000254, 70562306a36Sopenharmony_ci .hal_wbm_scattered_desc_head_info_ix0 = 0x00000260, 70662306a36Sopenharmony_ci .hal_wbm_scattered_desc_head_info_ix1 = 0x00000264, 70762306a36Sopenharmony_ci .hal_wbm_scattered_desc_tail_info_ix0 = 0x00000270, 70862306a36Sopenharmony_ci .hal_wbm_scattered_desc_tail_info_ix1 = 0x00000274, 70962306a36Sopenharmony_ci .hal_wbm_scattered_desc_ptr_hp_addr = 0x0000027c, 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci /* SW2WBM release ring address */ 71262306a36Sopenharmony_ci .hal_wbm_sw_release_ring_base_lsb = 0x0000037c, 71362306a36Sopenharmony_ci .hal_wbm_sw1_release_ring_base_lsb = 0x000003f4, 71462306a36Sopenharmony_ci 71562306a36Sopenharmony_ci /* WBM2SW release ring address */ 71662306a36Sopenharmony_ci .hal_wbm0_release_ring_base_lsb = 0x00000e08, 71762306a36Sopenharmony_ci .hal_wbm1_release_ring_base_lsb = 0x00000e80, 71862306a36Sopenharmony_ci 71962306a36Sopenharmony_ci /* PCIe base address */ 72062306a36Sopenharmony_ci .pcie_qserdes_sysclk_en_sel = 0x01e0c0a8, 72162306a36Sopenharmony_ci .pcie_pcs_osc_dtct_config_base = 0x01e0d45c, 72262306a36Sopenharmony_ci 72362306a36Sopenharmony_ci /* PPE release ring address */ 72462306a36Sopenharmony_ci .hal_ppe_rel_ring_base = 0x0000046c, 72562306a36Sopenharmony_ci 72662306a36Sopenharmony_ci /* REO DEST ring address */ 72762306a36Sopenharmony_ci .hal_reo2_ring_base = 0x00000578, 72862306a36Sopenharmony_ci .hal_reo1_misc_ctrl_addr = 0x00000b9c, 72962306a36Sopenharmony_ci .hal_reo1_sw_cookie_cfg0 = 0x0000006c, 73062306a36Sopenharmony_ci .hal_reo1_sw_cookie_cfg1 = 0x00000070, 73162306a36Sopenharmony_ci .hal_reo1_qdesc_lut_base0 = 0x00000074, 73262306a36Sopenharmony_ci .hal_reo1_qdesc_lut_base1 = 0x00000078, 73362306a36Sopenharmony_ci .hal_reo1_ring_base_lsb = 0x00000500, 73462306a36Sopenharmony_ci .hal_reo1_ring_base_msb = 0x00000504, 73562306a36Sopenharmony_ci .hal_reo1_ring_id = 0x00000508, 73662306a36Sopenharmony_ci .hal_reo1_ring_misc = 0x00000510, 73762306a36Sopenharmony_ci .hal_reo1_ring_hp_addr_lsb = 0x00000514, 73862306a36Sopenharmony_ci .hal_reo1_ring_hp_addr_msb = 0x00000518, 73962306a36Sopenharmony_ci .hal_reo1_ring_producer_int_setup = 0x00000524, 74062306a36Sopenharmony_ci .hal_reo1_ring_msi1_base_lsb = 0x00000548, 74162306a36Sopenharmony_ci .hal_reo1_ring_msi1_base_msb = 0x0000054C, 74262306a36Sopenharmony_ci .hal_reo1_ring_msi1_data = 0x00000550, 74362306a36Sopenharmony_ci .hal_reo1_aging_thres_ix0 = 0x00000B28, 74462306a36Sopenharmony_ci .hal_reo1_aging_thres_ix1 = 0x00000B2C, 74562306a36Sopenharmony_ci .hal_reo1_aging_thres_ix2 = 0x00000B30, 74662306a36Sopenharmony_ci .hal_reo1_aging_thres_ix3 = 0x00000B34, 74762306a36Sopenharmony_ci 74862306a36Sopenharmony_ci /* REO Exception ring address */ 74962306a36Sopenharmony_ci .hal_reo2_sw0_ring_base = 0x000008c0, 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_ci /* REO Reinject ring address */ 75262306a36Sopenharmony_ci .hal_sw2reo_ring_base = 0x00000320, 75362306a36Sopenharmony_ci .hal_sw2reo1_ring_base = 0x00000398, 75462306a36Sopenharmony_ci 75562306a36Sopenharmony_ci /* REO cmd ring address */ 75662306a36Sopenharmony_ci .hal_reo_cmd_ring_base = 0x000002A8, 75762306a36Sopenharmony_ci 75862306a36Sopenharmony_ci /* REO status ring address */ 75962306a36Sopenharmony_ci .hal_reo_status_ring_base = 0x00000aa0, 76062306a36Sopenharmony_ci}; 76162306a36Sopenharmony_ci 76262306a36Sopenharmony_cistatic const struct ath12k_hw_regs wcn7850_regs = { 76362306a36Sopenharmony_ci /* SW2TCL(x) R0 ring configuration address */ 76462306a36Sopenharmony_ci .hal_tcl1_ring_id = 0x00000908, 76562306a36Sopenharmony_ci .hal_tcl1_ring_misc = 0x00000910, 76662306a36Sopenharmony_ci .hal_tcl1_ring_tp_addr_lsb = 0x0000091c, 76762306a36Sopenharmony_ci .hal_tcl1_ring_tp_addr_msb = 0x00000920, 76862306a36Sopenharmony_ci .hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000930, 76962306a36Sopenharmony_ci .hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000934, 77062306a36Sopenharmony_ci .hal_tcl1_ring_msi1_base_lsb = 0x00000948, 77162306a36Sopenharmony_ci .hal_tcl1_ring_msi1_base_msb = 0x0000094c, 77262306a36Sopenharmony_ci .hal_tcl1_ring_msi1_data = 0x00000950, 77362306a36Sopenharmony_ci .hal_tcl_ring_base_lsb = 0x00000b58, 77462306a36Sopenharmony_ci 77562306a36Sopenharmony_ci /* TCL STATUS ring address */ 77662306a36Sopenharmony_ci .hal_tcl_status_ring_base_lsb = 0x00000d38, 77762306a36Sopenharmony_ci 77862306a36Sopenharmony_ci .hal_wbm_idle_ring_base_lsb = 0x00000d3c, 77962306a36Sopenharmony_ci .hal_wbm_idle_ring_misc_addr = 0x00000d4c, 78062306a36Sopenharmony_ci .hal_wbm_r0_idle_list_cntl_addr = 0x00000240, 78162306a36Sopenharmony_ci .hal_wbm_r0_idle_list_size_addr = 0x00000244, 78262306a36Sopenharmony_ci .hal_wbm_scattered_ring_base_lsb = 0x00000250, 78362306a36Sopenharmony_ci .hal_wbm_scattered_ring_base_msb = 0x00000254, 78462306a36Sopenharmony_ci .hal_wbm_scattered_desc_head_info_ix0 = 0x00000260, 78562306a36Sopenharmony_ci .hal_wbm_scattered_desc_head_info_ix1 = 0x00000264, 78662306a36Sopenharmony_ci .hal_wbm_scattered_desc_tail_info_ix0 = 0x00000270, 78762306a36Sopenharmony_ci .hal_wbm_scattered_desc_tail_info_ix1 = 0x00000274, 78862306a36Sopenharmony_ci .hal_wbm_scattered_desc_ptr_hp_addr = 0x00000027c, 78962306a36Sopenharmony_ci 79062306a36Sopenharmony_ci .hal_wbm_sw_release_ring_base_lsb = 0x0000037c, 79162306a36Sopenharmony_ci .hal_wbm_sw1_release_ring_base_lsb = 0x00000284, 79262306a36Sopenharmony_ci .hal_wbm0_release_ring_base_lsb = 0x00000e08, 79362306a36Sopenharmony_ci .hal_wbm1_release_ring_base_lsb = 0x00000e80, 79462306a36Sopenharmony_ci 79562306a36Sopenharmony_ci /* PCIe base address */ 79662306a36Sopenharmony_ci .pcie_qserdes_sysclk_en_sel = 0x01e0e0a8, 79762306a36Sopenharmony_ci .pcie_pcs_osc_dtct_config_base = 0x01e0f45c, 79862306a36Sopenharmony_ci 79962306a36Sopenharmony_ci /* PPE release ring address */ 80062306a36Sopenharmony_ci .hal_ppe_rel_ring_base = 0x0000043c, 80162306a36Sopenharmony_ci 80262306a36Sopenharmony_ci /* REO DEST ring address */ 80362306a36Sopenharmony_ci .hal_reo2_ring_base = 0x0000055c, 80462306a36Sopenharmony_ci .hal_reo1_misc_ctrl_addr = 0x00000b7c, 80562306a36Sopenharmony_ci .hal_reo1_sw_cookie_cfg0 = 0x00000050, 80662306a36Sopenharmony_ci .hal_reo1_sw_cookie_cfg1 = 0x00000054, 80762306a36Sopenharmony_ci .hal_reo1_qdesc_lut_base0 = 0x00000058, 80862306a36Sopenharmony_ci .hal_reo1_qdesc_lut_base1 = 0x0000005c, 80962306a36Sopenharmony_ci .hal_reo1_ring_base_lsb = 0x000004e4, 81062306a36Sopenharmony_ci .hal_reo1_ring_base_msb = 0x000004e8, 81162306a36Sopenharmony_ci .hal_reo1_ring_id = 0x000004ec, 81262306a36Sopenharmony_ci .hal_reo1_ring_misc = 0x000004f4, 81362306a36Sopenharmony_ci .hal_reo1_ring_hp_addr_lsb = 0x000004f8, 81462306a36Sopenharmony_ci .hal_reo1_ring_hp_addr_msb = 0x000004fc, 81562306a36Sopenharmony_ci .hal_reo1_ring_producer_int_setup = 0x00000508, 81662306a36Sopenharmony_ci .hal_reo1_ring_msi1_base_lsb = 0x0000052C, 81762306a36Sopenharmony_ci .hal_reo1_ring_msi1_base_msb = 0x00000530, 81862306a36Sopenharmony_ci .hal_reo1_ring_msi1_data = 0x00000534, 81962306a36Sopenharmony_ci .hal_reo1_aging_thres_ix0 = 0x00000b08, 82062306a36Sopenharmony_ci .hal_reo1_aging_thres_ix1 = 0x00000b0c, 82162306a36Sopenharmony_ci .hal_reo1_aging_thres_ix2 = 0x00000b10, 82262306a36Sopenharmony_ci .hal_reo1_aging_thres_ix3 = 0x00000b14, 82362306a36Sopenharmony_ci 82462306a36Sopenharmony_ci /* REO Exception ring address */ 82562306a36Sopenharmony_ci .hal_reo2_sw0_ring_base = 0x000008a4, 82662306a36Sopenharmony_ci 82762306a36Sopenharmony_ci /* REO Reinject ring address */ 82862306a36Sopenharmony_ci .hal_sw2reo_ring_base = 0x00000304, 82962306a36Sopenharmony_ci .hal_sw2reo1_ring_base = 0x0000037c, 83062306a36Sopenharmony_ci 83162306a36Sopenharmony_ci /* REO cmd ring address */ 83262306a36Sopenharmony_ci .hal_reo_cmd_ring_base = 0x0000028c, 83362306a36Sopenharmony_ci 83462306a36Sopenharmony_ci /* REO status ring address */ 83562306a36Sopenharmony_ci .hal_reo_status_ring_base = 0x00000a84, 83662306a36Sopenharmony_ci}; 83762306a36Sopenharmony_ci 83862306a36Sopenharmony_cistatic const struct ath12k_hw_hal_params ath12k_hw_hal_params_qcn9274 = { 83962306a36Sopenharmony_ci .rx_buf_rbm = HAL_RX_BUF_RBM_SW3_BM, 84062306a36Sopenharmony_ci .wbm2sw_cc_enable = HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW0_EN | 84162306a36Sopenharmony_ci HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW1_EN | 84262306a36Sopenharmony_ci HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW2_EN | 84362306a36Sopenharmony_ci HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW3_EN | 84462306a36Sopenharmony_ci HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW4_EN, 84562306a36Sopenharmony_ci}; 84662306a36Sopenharmony_ci 84762306a36Sopenharmony_cistatic const struct ath12k_hw_hal_params ath12k_hw_hal_params_wcn7850 = { 84862306a36Sopenharmony_ci .rx_buf_rbm = HAL_RX_BUF_RBM_SW1_BM, 84962306a36Sopenharmony_ci .wbm2sw_cc_enable = HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW0_EN | 85062306a36Sopenharmony_ci HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW2_EN | 85162306a36Sopenharmony_ci HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW3_EN | 85262306a36Sopenharmony_ci HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW4_EN, 85362306a36Sopenharmony_ci}; 85462306a36Sopenharmony_ci 85562306a36Sopenharmony_cistatic const struct ath12k_hw_params ath12k_hw_params[] = { 85662306a36Sopenharmony_ci { 85762306a36Sopenharmony_ci .name = "qcn9274 hw1.0", 85862306a36Sopenharmony_ci .hw_rev = ATH12K_HW_QCN9274_HW10, 85962306a36Sopenharmony_ci .fw = { 86062306a36Sopenharmony_ci .dir = "QCN9274/hw1.0", 86162306a36Sopenharmony_ci .board_size = 256 * 1024, 86262306a36Sopenharmony_ci .cal_offset = 128 * 1024, 86362306a36Sopenharmony_ci }, 86462306a36Sopenharmony_ci .max_radios = 1, 86562306a36Sopenharmony_ci .single_pdev_only = false, 86662306a36Sopenharmony_ci .qmi_service_ins_id = ATH12K_QMI_WLFW_SERVICE_INS_ID_V01_QCN9274, 86762306a36Sopenharmony_ci .internal_sleep_clock = false, 86862306a36Sopenharmony_ci 86962306a36Sopenharmony_ci .hw_ops = &qcn9274_ops, 87062306a36Sopenharmony_ci .ring_mask = &ath12k_hw_ring_mask_qcn9274, 87162306a36Sopenharmony_ci .regs = &qcn9274_v1_regs, 87262306a36Sopenharmony_ci 87362306a36Sopenharmony_ci .host_ce_config = ath12k_host_ce_config_qcn9274, 87462306a36Sopenharmony_ci .ce_count = 16, 87562306a36Sopenharmony_ci .target_ce_config = ath12k_target_ce_config_wlan_qcn9274, 87662306a36Sopenharmony_ci .target_ce_count = 12, 87762306a36Sopenharmony_ci .svc_to_ce_map = ath12k_target_service_to_ce_map_wlan_qcn9274, 87862306a36Sopenharmony_ci .svc_to_ce_map_len = 18, 87962306a36Sopenharmony_ci 88062306a36Sopenharmony_ci .hal_params = &ath12k_hw_hal_params_qcn9274, 88162306a36Sopenharmony_ci 88262306a36Sopenharmony_ci .rxdma1_enable = false, 88362306a36Sopenharmony_ci .num_rxmda_per_pdev = 1, 88462306a36Sopenharmony_ci .num_rxdma_dst_ring = 0, 88562306a36Sopenharmony_ci .rx_mac_buf_ring = false, 88662306a36Sopenharmony_ci .vdev_start_delay = false, 88762306a36Sopenharmony_ci 88862306a36Sopenharmony_ci .interface_modes = BIT(NL80211_IFTYPE_STATION) | 88962306a36Sopenharmony_ci BIT(NL80211_IFTYPE_AP), 89062306a36Sopenharmony_ci .supports_monitor = false, 89162306a36Sopenharmony_ci 89262306a36Sopenharmony_ci .idle_ps = false, 89362306a36Sopenharmony_ci .download_calib = true, 89462306a36Sopenharmony_ci .supports_suspend = false, 89562306a36Sopenharmony_ci .tcl_ring_retry = true, 89662306a36Sopenharmony_ci .reoq_lut_support = false, 89762306a36Sopenharmony_ci .supports_shadow_regs = false, 89862306a36Sopenharmony_ci 89962306a36Sopenharmony_ci .hal_desc_sz = sizeof(struct hal_rx_desc_qcn9274), 90062306a36Sopenharmony_ci .num_tcl_banks = 48, 90162306a36Sopenharmony_ci .max_tx_ring = 4, 90262306a36Sopenharmony_ci 90362306a36Sopenharmony_ci .mhi_config = &ath12k_mhi_config_qcn9274, 90462306a36Sopenharmony_ci 90562306a36Sopenharmony_ci .wmi_init = ath12k_wmi_init_qcn9274, 90662306a36Sopenharmony_ci 90762306a36Sopenharmony_ci .hal_ops = &hal_qcn9274_ops, 90862306a36Sopenharmony_ci 90962306a36Sopenharmony_ci .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01), 91062306a36Sopenharmony_ci }, 91162306a36Sopenharmony_ci { 91262306a36Sopenharmony_ci .name = "wcn7850 hw2.0", 91362306a36Sopenharmony_ci .hw_rev = ATH12K_HW_WCN7850_HW20, 91462306a36Sopenharmony_ci 91562306a36Sopenharmony_ci .fw = { 91662306a36Sopenharmony_ci .dir = "WCN7850/hw2.0", 91762306a36Sopenharmony_ci .board_size = 256 * 1024, 91862306a36Sopenharmony_ci .cal_offset = 256 * 1024, 91962306a36Sopenharmony_ci }, 92062306a36Sopenharmony_ci 92162306a36Sopenharmony_ci .max_radios = 1, 92262306a36Sopenharmony_ci .single_pdev_only = true, 92362306a36Sopenharmony_ci .qmi_service_ins_id = ATH12K_QMI_WLFW_SERVICE_INS_ID_V01_WCN7850, 92462306a36Sopenharmony_ci .internal_sleep_clock = true, 92562306a36Sopenharmony_ci 92662306a36Sopenharmony_ci .hw_ops = &wcn7850_ops, 92762306a36Sopenharmony_ci .ring_mask = &ath12k_hw_ring_mask_wcn7850, 92862306a36Sopenharmony_ci .regs = &wcn7850_regs, 92962306a36Sopenharmony_ci 93062306a36Sopenharmony_ci .host_ce_config = ath12k_host_ce_config_wcn7850, 93162306a36Sopenharmony_ci .ce_count = 9, 93262306a36Sopenharmony_ci .target_ce_config = ath12k_target_ce_config_wlan_wcn7850, 93362306a36Sopenharmony_ci .target_ce_count = 9, 93462306a36Sopenharmony_ci .svc_to_ce_map = ath12k_target_service_to_ce_map_wlan_wcn7850, 93562306a36Sopenharmony_ci .svc_to_ce_map_len = 14, 93662306a36Sopenharmony_ci 93762306a36Sopenharmony_ci .hal_params = &ath12k_hw_hal_params_wcn7850, 93862306a36Sopenharmony_ci 93962306a36Sopenharmony_ci .rxdma1_enable = false, 94062306a36Sopenharmony_ci .num_rxmda_per_pdev = 2, 94162306a36Sopenharmony_ci .num_rxdma_dst_ring = 1, 94262306a36Sopenharmony_ci .rx_mac_buf_ring = true, 94362306a36Sopenharmony_ci .vdev_start_delay = true, 94462306a36Sopenharmony_ci 94562306a36Sopenharmony_ci .interface_modes = BIT(NL80211_IFTYPE_STATION) | 94662306a36Sopenharmony_ci BIT(NL80211_IFTYPE_AP), 94762306a36Sopenharmony_ci .supports_monitor = false, 94862306a36Sopenharmony_ci 94962306a36Sopenharmony_ci .idle_ps = true, 95062306a36Sopenharmony_ci .download_calib = false, 95162306a36Sopenharmony_ci .supports_suspend = false, 95262306a36Sopenharmony_ci .tcl_ring_retry = false, 95362306a36Sopenharmony_ci .reoq_lut_support = false, 95462306a36Sopenharmony_ci .supports_shadow_regs = true, 95562306a36Sopenharmony_ci 95662306a36Sopenharmony_ci .hal_desc_sz = sizeof(struct hal_rx_desc_wcn7850), 95762306a36Sopenharmony_ci .num_tcl_banks = 7, 95862306a36Sopenharmony_ci .max_tx_ring = 3, 95962306a36Sopenharmony_ci 96062306a36Sopenharmony_ci .mhi_config = &ath12k_mhi_config_wcn7850, 96162306a36Sopenharmony_ci 96262306a36Sopenharmony_ci .wmi_init = ath12k_wmi_init_wcn7850, 96362306a36Sopenharmony_ci 96462306a36Sopenharmony_ci .hal_ops = &hal_wcn7850_ops, 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_ci .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01) | 96762306a36Sopenharmony_ci BIT(CNSS_PCIE_PERST_NO_PULL_V01), 96862306a36Sopenharmony_ci }, 96962306a36Sopenharmony_ci { 97062306a36Sopenharmony_ci .name = "qcn9274 hw2.0", 97162306a36Sopenharmony_ci .hw_rev = ATH12K_HW_QCN9274_HW20, 97262306a36Sopenharmony_ci .fw = { 97362306a36Sopenharmony_ci .dir = "QCN9274/hw2.0", 97462306a36Sopenharmony_ci .board_size = 256 * 1024, 97562306a36Sopenharmony_ci .cal_offset = 128 * 1024, 97662306a36Sopenharmony_ci }, 97762306a36Sopenharmony_ci .max_radios = 1, 97862306a36Sopenharmony_ci .single_pdev_only = false, 97962306a36Sopenharmony_ci .qmi_service_ins_id = ATH12K_QMI_WLFW_SERVICE_INS_ID_V01_QCN9274, 98062306a36Sopenharmony_ci .internal_sleep_clock = false, 98162306a36Sopenharmony_ci 98262306a36Sopenharmony_ci .hw_ops = &qcn9274_ops, 98362306a36Sopenharmony_ci .ring_mask = &ath12k_hw_ring_mask_qcn9274, 98462306a36Sopenharmony_ci .regs = &qcn9274_v2_regs, 98562306a36Sopenharmony_ci 98662306a36Sopenharmony_ci .host_ce_config = ath12k_host_ce_config_qcn9274, 98762306a36Sopenharmony_ci .ce_count = 16, 98862306a36Sopenharmony_ci .target_ce_config = ath12k_target_ce_config_wlan_qcn9274, 98962306a36Sopenharmony_ci .target_ce_count = 12, 99062306a36Sopenharmony_ci .svc_to_ce_map = ath12k_target_service_to_ce_map_wlan_qcn9274, 99162306a36Sopenharmony_ci .svc_to_ce_map_len = 18, 99262306a36Sopenharmony_ci 99362306a36Sopenharmony_ci .hal_params = &ath12k_hw_hal_params_qcn9274, 99462306a36Sopenharmony_ci 99562306a36Sopenharmony_ci .rxdma1_enable = false, 99662306a36Sopenharmony_ci .num_rxmda_per_pdev = 1, 99762306a36Sopenharmony_ci .num_rxdma_dst_ring = 0, 99862306a36Sopenharmony_ci .rx_mac_buf_ring = false, 99962306a36Sopenharmony_ci .vdev_start_delay = false, 100062306a36Sopenharmony_ci 100162306a36Sopenharmony_ci .interface_modes = BIT(NL80211_IFTYPE_STATION) | 100262306a36Sopenharmony_ci BIT(NL80211_IFTYPE_AP), 100362306a36Sopenharmony_ci .supports_monitor = false, 100462306a36Sopenharmony_ci 100562306a36Sopenharmony_ci .idle_ps = false, 100662306a36Sopenharmony_ci .download_calib = true, 100762306a36Sopenharmony_ci .supports_suspend = false, 100862306a36Sopenharmony_ci .tcl_ring_retry = true, 100962306a36Sopenharmony_ci .reoq_lut_support = false, 101062306a36Sopenharmony_ci .supports_shadow_regs = false, 101162306a36Sopenharmony_ci 101262306a36Sopenharmony_ci .hal_desc_sz = sizeof(struct hal_rx_desc_qcn9274), 101362306a36Sopenharmony_ci .num_tcl_banks = 48, 101462306a36Sopenharmony_ci .max_tx_ring = 4, 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci .mhi_config = &ath12k_mhi_config_qcn9274, 101762306a36Sopenharmony_ci 101862306a36Sopenharmony_ci .wmi_init = ath12k_wmi_init_qcn9274, 101962306a36Sopenharmony_ci 102062306a36Sopenharmony_ci .hal_ops = &hal_qcn9274_ops, 102162306a36Sopenharmony_ci 102262306a36Sopenharmony_ci .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01), 102362306a36Sopenharmony_ci }, 102462306a36Sopenharmony_ci}; 102562306a36Sopenharmony_ci 102662306a36Sopenharmony_ciint ath12k_hw_init(struct ath12k_base *ab) 102762306a36Sopenharmony_ci{ 102862306a36Sopenharmony_ci const struct ath12k_hw_params *hw_params = NULL; 102962306a36Sopenharmony_ci int i; 103062306a36Sopenharmony_ci 103162306a36Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(ath12k_hw_params); i++) { 103262306a36Sopenharmony_ci hw_params = &ath12k_hw_params[i]; 103362306a36Sopenharmony_ci 103462306a36Sopenharmony_ci if (hw_params->hw_rev == ab->hw_rev) 103562306a36Sopenharmony_ci break; 103662306a36Sopenharmony_ci } 103762306a36Sopenharmony_ci 103862306a36Sopenharmony_ci if (i == ARRAY_SIZE(ath12k_hw_params)) { 103962306a36Sopenharmony_ci ath12k_err(ab, "Unsupported hardware version: 0x%x\n", ab->hw_rev); 104062306a36Sopenharmony_ci return -EINVAL; 104162306a36Sopenharmony_ci } 104262306a36Sopenharmony_ci 104362306a36Sopenharmony_ci ab->hw_params = hw_params; 104462306a36Sopenharmony_ci 104562306a36Sopenharmony_ci ath12k_info(ab, "Hardware name: %s\n", ab->hw_params->name); 104662306a36Sopenharmony_ci 104762306a36Sopenharmony_ci return 0; 104862306a36Sopenharmony_ci} 1049