ath11k: move target ce configs to hw_params
authorAnilkumar Kolli <akolli@codeaurora.org>
Tue, 8 Sep 2020 07:55:35 +0000 (07:55 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 11 Sep 2020 09:56:02 +0000 (12:56 +0300)
Move target CE config and target CE service config to hw_params.
No functional changes.

Tested on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00009-QCAHKSWPL_SILICONZ-1

Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/010101746cb685d9-6bedeccb-29a1-4d32-8664-fcfe7d105f4a-000000@us-west-2.amazonses.com
drivers/net/wireless/ath/ath11k/ahb.c
drivers/net/wireless/ath/ath11k/core.c
drivers/net/wireless/ath/ath11k/core.h
drivers/net/wireless/ath/ath11k/hw.c
drivers/net/wireless/ath/ath11k/hw.h
drivers/net/wireless/ath/ath11k/pci.c

index 6380d48..f6eed64 100644 (file)
@@ -32,245 +32,6 @@ static const struct ath11k_bus_params ath11k_ahb_bus_params = {
        .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
 
 static const char *irq_name[ATH11K_IRQ_NUM_MAX] = {
@@ -444,7 +205,7 @@ static void ath11k_ahb_ce_irq_enable(struct ath11k_base *ab, u16 ce_id)
 {
        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 +220,7 @@ static void ath11k_ahb_ce_irq_disable(struct ath11k_base *ab, u16 ce_id)
 {
        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);
 
@@ -577,10 +338,10 @@ static void ath11k_ahb_init_qmi_ce_config(struct ath11k_base *ab)
 {
        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;
 }
 
@@ -788,8 +549,8 @@ static int ath11k_ahb_map_service_to_pipe(struct ath11k_base *ab, u16 service_id
        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;
index 437b112..bdde876 100644 (file)
@@ -35,6 +35,10 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .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,
@@ -60,6 +64,10 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .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,
index d21191c..cb6c5e4 100644 (file)
@@ -845,6 +845,12 @@ 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 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);
index e078899..35cbb13 100644 (file)
@@ -276,6 +276,416 @@ const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390 = {
        },
 };
 
+/* 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 */ }
+};
+
+/* 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,
index d15fa7f..57960a7 100644 (file)
@@ -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;
 
index 0588857..aec0b59 100644 (file)
@@ -51,187 +51,6 @@ static const struct ath11k_msi_config msi_config = {
        },
 };
 
-/* 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_config(struct ath11k_base *ab)
 {
        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_pipe(struct ath11k_base *ab, u16 service_id
        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;