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