mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-18 01:41:24 +00:00
1186 lines
36 KiB
Diff
1186 lines
36 KiB
Diff
From 22ed8e368785b07917ecd956a008177d3aa51616 Mon Sep 17 00:00:00 2001
|
|
From: Anilkumar Kolli <akolli@codeaurora.org>
|
|
Date: Wed, 19 Aug 2020 16:11:31 +0530
|
|
Subject: [PATCH 02/15] ath11k: move target ce configs to hw_params
|
|
|
|
Move target CE config and target CE service config to hw_params.
|
|
No functional changes.
|
|
|
|
Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
|
|
---
|
|
drivers/net/wireless/ath/ath11k/ahb.c | 254 +-------------------
|
|
drivers/net/wireless/ath/ath11k/core.c | 8 +
|
|
drivers/net/wireless/ath/ath11k/core.h | 6 +
|
|
drivers/net/wireless/ath/ath11k/hw.c | 410 +++++++++++++++++++++++++++++++++
|
|
drivers/net/wireless/ath/ath11k/hw.h | 5 +-
|
|
drivers/net/wireless/ath/ath11k/pci.c | 193 +---------------
|
|
6 files changed, 442 insertions(+), 434 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
|
@@ -20,6 +20,9 @@ static const struct of_device_id ath11k_
|
|
{ .compatible = "qcom,ipq8074-wifi",
|
|
.data = (void *)ATH11K_HW_IPQ8074,
|
|
},
|
|
+ { .compatible = "qcom,ipq6018-wifi",
|
|
+ .data = (void *)ATH11K_HW_IPQ6018,
|
|
+ },
|
|
{ }
|
|
};
|
|
|
|
@@ -32,244 +35,6 @@ static const struct ath11k_bus_params at
|
|
.fixed_mem_region = true,
|
|
};
|
|
|
|
-/* Target firmware's Copy Engine configuration. */
|
|
-static const struct ce_pipe_config target_ce_config_wlan[] = {
|
|
- /* CE0: host->target HTC control and raw streams */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(0),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE1: target->host HTT + HTC control */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(1),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE2: target->host WMI */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE3: host->target WMI */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(3),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE4: host->target HTT */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(4),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(256),
|
|
- .nbytes_max = __cpu_to_le32(256),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE5: target->host Pktlog */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(5),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(0),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE6: Reserved for target autonomous hif_memcpy */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(6),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(65535),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE7 used only by Host */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(7),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE8 target->host used only by IPA */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(8),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(65535),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE9 host->target HTT */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(9),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE10 target->host HTT */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(10),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
|
|
- .nentries = __cpu_to_le32(0),
|
|
- .nbytes_max = __cpu_to_le32(0),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE11 Not used */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(0),
|
|
- .pipedir = __cpu_to_le32(0),
|
|
- .nentries = __cpu_to_le32(0),
|
|
- .nbytes_max = __cpu_to_le32(0),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-};
|
|
-
|
|
-/* Map from service/endpoint to Copy Engine.
|
|
- * This table is derived from the CE_PCI TABLE, above.
|
|
- * It is passed to the Target at startup for use by firmware.
|
|
- */
|
|
-static const struct service_to_pipe target_service_to_ce_map_wlan[] = {
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(7),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC2),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(9),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC2),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(0),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(1),
|
|
- },
|
|
- { /* not used */
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(0),
|
|
- },
|
|
- { /* not used */
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(1),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- .pipenum = __cpu_to_le32(4),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(1),
|
|
- },
|
|
- {
|
|
- .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- .pipenum = __cpu_to_le32(5),
|
|
- },
|
|
-
|
|
- /* (Additions here) */
|
|
-
|
|
- { /* terminator entry */ }
|
|
-};
|
|
|
|
#define ATH11K_IRQ_CE0_OFFSET 4
|
|
|
|
@@ -444,7 +209,7 @@ static void ath11k_ahb_ce_irq_enable(str
|
|
{
|
|
const struct ce_pipe_config *ce_config;
|
|
|
|
- ce_config = &target_ce_config_wlan[ce_id];
|
|
+ ce_config = &ab->hw_params.target_ce_config[ce_id];
|
|
if (__le32_to_cpu(ce_config->pipedir) & PIPEDIR_OUT)
|
|
ath11k_ahb_setbit32(ab, ce_id, CE_HOST_IE_ADDRESS);
|
|
|
|
@@ -459,7 +224,7 @@ static void ath11k_ahb_ce_irq_disable(st
|
|
{
|
|
const struct ce_pipe_config *ce_config;
|
|
|
|
- ce_config = &target_ce_config_wlan[ce_id];
|
|
+ ce_config = &ab->hw_params.target_ce_config[ce_id];
|
|
if (__le32_to_cpu(ce_config->pipedir) & PIPEDIR_OUT)
|
|
ath11k_ahb_clearbit32(ab, ce_id, CE_HOST_IE_ADDRESS);
|
|
|
|
@@ -600,10 +365,10 @@ static void ath11k_ahb_init_qmi_ce_confi
|
|
{
|
|
struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
|
|
|
|
- cfg->tgt_ce_len = ARRAY_SIZE(target_ce_config_wlan) - 1;
|
|
- cfg->tgt_ce = target_ce_config_wlan;
|
|
- cfg->svc_to_ce_map_len = ARRAY_SIZE(target_service_to_ce_map_wlan);
|
|
- cfg->svc_to_ce_map = target_service_to_ce_map_wlan;
|
|
+ cfg->tgt_ce_len = ab->hw_params.target_ce_count;
|
|
+ cfg->tgt_ce = ab->hw_params.target_ce_config;
|
|
+ cfg->svc_to_ce_map_len = ab->hw_params.svc_to_ce_map_len;
|
|
+ cfg->svc_to_ce_map = ab->hw_params.svc_to_ce_map;
|
|
ab->qmi.service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_IPQ8074;
|
|
}
|
|
|
|
@@ -812,8 +577,8 @@ static int ath11k_ahb_map_service_to_pip
|
|
bool ul_set = false, dl_set = false;
|
|
int i;
|
|
|
|
- for (i = 0; i < ARRAY_SIZE(target_service_to_ce_map_wlan); i++) {
|
|
- entry = &target_service_to_ce_map_wlan[i];
|
|
+ for (i = 0; i < ab->hw_params.svc_to_ce_map_len; i++) {
|
|
+ entry = &ab->hw_params.svc_to_ce_map[i];
|
|
|
|
if (__le32_to_cpu(entry->service_id) != service_id)
|
|
continue;
|
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
|
@@ -41,6 +41,39 @@ static const struct ath11k_hw_params ath
|
|
.regs = &ipq8074_regs,
|
|
.host_ce_config = ath11k_host_ce_config_ipq8074,
|
|
.ce_count = 12,
|
|
+ .target_ce_config = ath11k_target_ce_config_wlan_ipq8074,
|
|
+ .target_ce_count = 11,
|
|
+ .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq8074,
|
|
+ .svc_to_ce_map_len = 21,
|
|
+ .single_pdev_only = false,
|
|
+ .needs_band_to_mac = true,
|
|
+ .rxdma1_enable = true,
|
|
+ .num_rxmda_per_pdev = 1,
|
|
+ .rx_mac_buf_ring = false,
|
|
+ .vdev_start_delay = false,
|
|
+ .htt_peer_map_v2 = true,
|
|
+ .tcl_0_only = false,
|
|
+ },
|
|
+ {
|
|
+ .hw_rev = ATH11K_HW_IPQ6018,
|
|
+ .name = "ipq6018 hw1.0",
|
|
+ .fw = {
|
|
+ .dir = "IPQ6018/hw1.0",
|
|
+ .board_size = 256 * 1024,
|
|
+ .cal_size = 256 * 1024,
|
|
+ },
|
|
+ .max_radios = 2,
|
|
+ .bdf_addr = 0x4ABC0000,
|
|
+ .hw_ops = &ipq6018_ops,
|
|
+ .ring_mask = &ath11k_hw_ring_mask_ipq8074,
|
|
+ .internal_sleep_clock = false,
|
|
+ .regs = &ipq8074_regs,
|
|
+ .host_ce_config = ath11k_host_ce_config_ipq8074,
|
|
+ .ce_count = 12,
|
|
+ .target_ce_config = ath11k_target_ce_config_wlan_ipq8074,
|
|
+ .target_ce_count = 11,
|
|
+ .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq6018,
|
|
+ .svc_to_ce_map_len = 19,
|
|
.single_pdev_only = false,
|
|
.needs_band_to_mac = true,
|
|
.rxdma1_enable = true,
|
|
@@ -66,6 +99,10 @@ static const struct ath11k_hw_params ath
|
|
.regs = &qca6390_regs,
|
|
.host_ce_config = ath11k_host_ce_config_qca6390,
|
|
.ce_count = 9,
|
|
+ .target_ce_config = ath11k_target_ce_config_wlan_qca6390,
|
|
+ .target_ce_count = 9,
|
|
+ .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qca6390,
|
|
+ .svc_to_ce_map_len = 14,
|
|
.single_pdev_only = true,
|
|
.needs_band_to_mac = false,
|
|
.rxdma1_enable = false,
|
|
@@ -902,12 +939,6 @@ int ath11k_core_init(struct ath11k_base
|
|
return ret;
|
|
}
|
|
|
|
- ret = ath11k_init_hw_params(ab);
|
|
- if (ret) {
|
|
- ath11k_err(ab, "failed to get hw params %d\n", ret);
|
|
- return ret;
|
|
- }
|
|
-
|
|
ret = ath11k_core_soc_create(ab);
|
|
if (ret) {
|
|
ath11k_err(ab, "failed to create soc core: %d\n", ret);
|
|
--- a/drivers/net/wireless/ath/ath11k/core.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
|
@@ -99,6 +99,7 @@ struct ath11k_skb_rxcb {
|
|
|
|
enum ath11k_hw_rev {
|
|
ATH11K_HW_IPQ8074,
|
|
+ ATH11K_HW_IPQ6018,
|
|
ATH11K_HW_QCA6390_HW20,
|
|
};
|
|
|
|
@@ -892,6 +893,13 @@ struct ath11k_fw_stats_bcn {
|
|
u32 tx_bcn_outage_cnt;
|
|
};
|
|
|
|
+extern const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq8074[];
|
|
+extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[];
|
|
+extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018[];
|
|
+
|
|
+extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[];
|
|
+extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[];
|
|
+
|
|
void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id);
|
|
void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id,
|
|
u8 *mac_addr, u16 ast_hash);
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
|
@@ -276,6 +276,518 @@ const struct ath11k_hw_ring_mask ath11k_
|
|
},
|
|
};
|
|
|
|
+/* Target firmware's Copy Engine configuration. */
|
|
+const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq8074[] = {
|
|
+ /* CE0: host->target HTC control and raw streams */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(0),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE1: target->host HTT + HTC control */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE2: target->host WMI */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE3: host->target WMI */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE4: host->target HTT */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(4),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(256),
|
|
+ .nbytes_max = __cpu_to_le32(256),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE5: target->host Pktlog */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(5),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(0),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE6: Reserved for target autonomous hif_memcpy */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(6),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(65535),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE7 used only by Host */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(7),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE8 target->host used only by IPA */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(8),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(65535),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE9 host->target HTT */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(9),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE10 target->host HTT */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(10),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
|
|
+ .nentries = __cpu_to_le32(0),
|
|
+ .nbytes_max = __cpu_to_le32(0),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE11 Not used */
|
|
+};
|
|
+
|
|
+/* Map from service/endpoint to Copy Engine.
|
|
+ * This table is derived from the CE_PCI TABLE, above.
|
|
+ * It is passed to the Target at startup for use by firmware.
|
|
+ */
|
|
+const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[] = {
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(7),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC2),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(9),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC2),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(0),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ },
|
|
+ { /* not used */
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(0),
|
|
+ },
|
|
+ { /* not used */
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(4),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(5),
|
|
+ },
|
|
+
|
|
+ /* (Additions here) */
|
|
+
|
|
+ { /* terminator entry */ }
|
|
+};
|
|
+
|
|
+const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018[] = {
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(7),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(0),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ },
|
|
+ { /* not used */
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(0),
|
|
+ },
|
|
+ { /* not used */
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ .pipenum = __cpu_to_le32(4),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ },
|
|
+ {
|
|
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ .pipenum = __cpu_to_le32(5),
|
|
+ },
|
|
+
|
|
+ /* (Additions here) */
|
|
+
|
|
+ { /* terminator entry */ }
|
|
+};
|
|
+
|
|
+/* Target firmware's Copy Engine configuration. */
|
|
+const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[] = {
|
|
+ /* CE0: host->target HTC control and raw streams */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(0),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE1: target->host HTT + HTC control */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE2: target->host WMI */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE3: host->target WMI */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE4: host->target HTT */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(4),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(256),
|
|
+ .nbytes_max = __cpu_to_le32(256),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE5: target->host Pktlog */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(5),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE6: Reserved for target autonomous hif_memcpy */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(6),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(16384),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE7 used only by Host */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(7),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
|
|
+ .nentries = __cpu_to_le32(0),
|
|
+ .nbytes_max = __cpu_to_le32(0),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE8 target->host used only by IPA */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(8),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(16384),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+ /* CE 9, 10, 11 are used by MHI driver */
|
|
+};
|
|
+
|
|
+/* Map from service/endpoint to Copy Engine.
|
|
+ * This table is derived from the CE_PCI TABLE, above.
|
|
+ * It is passed to the Target at startup for use by firmware.
|
|
+ */
|
|
+const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[] = {
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(0),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(4),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(1),
|
|
+ },
|
|
+
|
|
+ /* (Additions here) */
|
|
+
|
|
+ { /* must be last */
|
|
+ __cpu_to_le32(0),
|
|
+ __cpu_to_le32(0),
|
|
+ __cpu_to_le32(0),
|
|
+ },
|
|
+};
|
|
+
|
|
const struct ath11k_hw_regs ipq8074_regs = {
|
|
/* SW2TCL(x) R0 ring configuration address */
|
|
.hal_tcl1_ring_base_lsb = 0x00000510,
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
|
@@ -129,7 +129,6 @@ struct ath11k_hw_params {
|
|
} fw;
|
|
|
|
const struct ath11k_hw_ops *hw_ops;
|
|
-
|
|
const struct ath11k_hw_ring_mask *ring_mask;
|
|
|
|
bool internal_sleep_clock;
|
|
@@ -137,6 +136,10 @@ struct ath11k_hw_params {
|
|
const struct ath11k_hw_regs *regs;
|
|
const struct ce_attr *host_ce_config;
|
|
u32 ce_count;
|
|
+ const struct ce_pipe_config *target_ce_config;
|
|
+ u32 target_ce_count;
|
|
+ const struct service_to_pipe *svc_to_ce_map;
|
|
+ u32 svc_to_ce_map_len;
|
|
|
|
bool single_pdev_only;
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
|
@@ -51,187 +51,6 @@ static const struct ath11k_msi_config ms
|
|
},
|
|
};
|
|
|
|
-/* Target firmware's Copy Engine configuration. */
|
|
-static const struct ce_pipe_config target_ce_config_wlan[] = {
|
|
- /* CE0: host->target HTC control and raw streams */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(0),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE1: target->host HTT + HTC control */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(1),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE2: target->host WMI */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(2),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE3: host->target WMI */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(3),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE4: host->target HTT */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(4),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
- .nentries = __cpu_to_le32(256),
|
|
- .nbytes_max = __cpu_to_le32(256),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE5: target->host Pktlog */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(5),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(2048),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE6: Reserved for target autonomous hif_memcpy */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(6),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(16384),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE7 used only by Host */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(7),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
|
|
- .nentries = __cpu_to_le32(0),
|
|
- .nbytes_max = __cpu_to_le32(0),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
-
|
|
- /* CE8 target->host used only by IPA */
|
|
- {
|
|
- .pipenum = __cpu_to_le32(8),
|
|
- .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
- .nentries = __cpu_to_le32(32),
|
|
- .nbytes_max = __cpu_to_le32(16384),
|
|
- .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
- .reserved = __cpu_to_le32(0),
|
|
- },
|
|
- /* CE 9, 10, 11 are used by MHI driver */
|
|
-};
|
|
-
|
|
-/* Map from service/endpoint to Copy Engine.
|
|
- * This table is derived from the CE_PCI TABLE, above.
|
|
- * It is passed to the Target at startup for use by firmware.
|
|
- */
|
|
-static const struct service_to_pipe target_service_to_ce_map_wlan[] = {
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
- __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
- __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
- __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
- __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
- __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
- __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
- __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
- __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- __cpu_to_le32(2),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
- __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- __cpu_to_le32(3),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
- __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- __cpu_to_le32(2),
|
|
- },
|
|
-
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
- __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- __cpu_to_le32(0),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
- __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- __cpu_to_le32(2),
|
|
- },
|
|
-
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
- __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
- __cpu_to_le32(4),
|
|
- },
|
|
- {
|
|
- __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
- __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
- __cpu_to_le32(1),
|
|
- },
|
|
-
|
|
- /* (Additions here) */
|
|
-
|
|
- { /* must be last */
|
|
- __cpu_to_le32(0),
|
|
- __cpu_to_le32(0),
|
|
- __cpu_to_le32(0),
|
|
- },
|
|
-};
|
|
-
|
|
static const char *irq_name[ATH11K_IRQ_NUM_MAX] = {
|
|
"bhi",
|
|
"mhi-er0",
|
|
@@ -757,11 +576,11 @@ static void ath11k_pci_init_qmi_ce_confi
|
|
{
|
|
struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
|
|
|
|
- cfg->tgt_ce = target_ce_config_wlan;
|
|
- cfg->tgt_ce_len = ARRAY_SIZE(target_ce_config_wlan);
|
|
+ cfg->tgt_ce = ab->hw_params.target_ce_config;
|
|
+ cfg->tgt_ce_len = ab->hw_params.target_ce_count;
|
|
|
|
- cfg->svc_to_ce_map = target_service_to_ce_map_wlan;
|
|
- cfg->svc_to_ce_map_len = ARRAY_SIZE(target_service_to_ce_map_wlan);
|
|
+ cfg->svc_to_ce_map = ab->hw_params.svc_to_ce_map;
|
|
+ cfg->svc_to_ce_map_len = ab->hw_params.svc_to_ce_map_len;
|
|
ab->qmi.service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_QCA6390;
|
|
}
|
|
|
|
@@ -965,8 +784,8 @@ static int ath11k_pci_map_service_to_pip
|
|
bool ul_set = false, dl_set = false;
|
|
int i;
|
|
|
|
- for (i = 0; i < ARRAY_SIZE(target_service_to_ce_map_wlan); i++) {
|
|
- entry = &target_service_to_ce_map_wlan[i];
|
|
+ for (i = 0; i < ab->hw_params.svc_to_ce_map_len; i++) {
|
|
+ entry = &ab->hw_params.svc_to_ce_map[i];
|
|
|
|
if (__le32_to_cpu(entry->service_id) != service_id)
|
|
continue;
|
|
@@ -1027,6 +846,16 @@ static int ath11k_pci_probe(struct pci_d
|
|
|
|
switch (pci_dev->device) {
|
|
case QCA6390_DEVICE_ID:
|
|
+ hw_rev = ATH11K_HW_QCA6390_HW20;
|
|
+ break;
|
|
+ default:
|
|
+ dev_err(&pdev->dev, "Unknown PCI device found: 0x%x\n",
|
|
+ pci_dev->device);
|
|
+ return -ENOTSUPP;
|
|
+ }
|
|
+
|
|
+ switch (pci_dev->device) {
|
|
+ case QCA6390_DEVICE_ID:
|
|
hw_rev = ATH11K_HW_QCA6390_HW20;
|
|
break;
|
|
default:
|