ath11k: add ipq6018 support
authorAnilkumar Kolli <akolli@codeaurora.org>
Tue, 8 Sep 2020 07:55:36 +0000 (07:55 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 11 Sep 2020 09:56:05 +0000 (12:56 +0300)
IPQ6018 has one 5G and one 2G radio with 2x2,
shares ipq8074 configurations.

Tested on: IPQ6018 hw1.0 AHB WLAN.HK.2.2-02134-QCAHKSWPL_SILICONZ-1
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/010101746cb68b63-c2bc31ec-a31e-442e-a572-26f4c045c06b-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

index f6eed64..f6e36e5 100644 (file)
@@ -20,6 +20,9 @@ static const struct of_device_id ath11k_ahb_of_match[] = {
        { .compatible = "qcom,ipq8074-wifi",
          .data = (void *)ATH11K_HW_IPQ8074,
        },
+       { .compatible = "qcom,ipq6018-wifi",
+         .data = (void *)ATH11K_HW_IPQ6018_HW10,
+       },
        { }
 };
 
index bdde876..2046943 100644 (file)
@@ -49,6 +49,35 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .tcl_0_only = false,
        },
        {
+               .hw_rev = ATH11K_HW_IPQ6018_HW10,
+               .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,
+               .num_rxmda_per_pdev = 1,
+               .rx_mac_buf_ring = false,
+               .vdev_start_delay = false,
+               .htt_peer_map_v2 = true,
+               .tcl_0_only = false,
+       },
+       {
                .name = "qca6390 hw2.0",
                .hw_rev = ATH11K_HW_QCA6390_HW20,
                .fw = {
index cb6c5e4..fcc3c6a 100644 (file)
@@ -91,6 +91,7 @@ struct ath11k_skb_rxcb {
 enum ath11k_hw_rev {
        ATH11K_HW_IPQ8074,
        ATH11K_HW_QCA6390_HW20,
+       ATH11K_HW_IPQ6018_HW10,
 };
 
 enum ath11k_firmware_mode {
@@ -847,6 +848,7 @@ struct ath11k_fw_stats_bcn {
 
 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[];
index 35cbb13..5f2eb20 100644 (file)
@@ -507,6 +507,108 @@ const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[] = {
        { /* 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 */