Skip to content

Commit b129699

Browse files
Anilkumar KolliKalle Valo
authored andcommitted
ath11k: add ipq6018 support
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 <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://lore.kernel.org/r/010101746cb68b63-c2bc31ec-a31e-442e-a572-26f4c045c06b-000000@us-west-2.amazonses.com
1 parent 967c1d1 commit b129699

File tree

4 files changed

+136
-0
lines changed

4 files changed

+136
-0
lines changed

drivers/net/wireless/ath/ath11k/ahb.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ static const struct of_device_id ath11k_ahb_of_match[] = {
2020
{ .compatible = "qcom,ipq8074-wifi",
2121
.data = (void *)ATH11K_HW_IPQ8074,
2222
},
23+
{ .compatible = "qcom,ipq6018-wifi",
24+
.data = (void *)ATH11K_HW_IPQ6018_HW10,
25+
},
2326
{ }
2427
};
2528

drivers/net/wireless/ath/ath11k/core.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,35 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
4848
.htt_peer_map_v2 = true,
4949
.tcl_0_only = false,
5050
},
51+
{
52+
.hw_rev = ATH11K_HW_IPQ6018_HW10,
53+
.name = "ipq6018 hw1.0",
54+
.fw = {
55+
.dir = "IPQ6018/hw1.0",
56+
.board_size = 256 * 1024,
57+
.cal_size = 256 * 1024,
58+
},
59+
.max_radios = 2,
60+
.bdf_addr = 0x4ABC0000,
61+
.hw_ops = &ipq6018_ops,
62+
.ring_mask = &ath11k_hw_ring_mask_ipq8074,
63+
.internal_sleep_clock = false,
64+
.regs = &ipq8074_regs,
65+
.host_ce_config = ath11k_host_ce_config_ipq8074,
66+
.ce_count = 12,
67+
.target_ce_config = ath11k_target_ce_config_wlan_ipq8074,
68+
.target_ce_count = 11,
69+
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq6018,
70+
.svc_to_ce_map_len = 19,
71+
.single_pdev_only = false,
72+
.needs_band_to_mac = true,
73+
.rxdma1_enable = true,
74+
.num_rxmda_per_pdev = 1,
75+
.rx_mac_buf_ring = false,
76+
.vdev_start_delay = false,
77+
.htt_peer_map_v2 = true,
78+
.tcl_0_only = false,
79+
},
5180
{
5281
.name = "qca6390 hw2.0",
5382
.hw_rev = ATH11K_HW_QCA6390_HW20,

drivers/net/wireless/ath/ath11k/core.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ struct ath11k_skb_rxcb {
9191
enum ath11k_hw_rev {
9292
ATH11K_HW_IPQ8074,
9393
ATH11K_HW_QCA6390_HW20,
94+
ATH11K_HW_IPQ6018_HW10,
9495
};
9596

9697
enum ath11k_firmware_mode {
@@ -847,6 +848,7 @@ struct ath11k_fw_stats_bcn {
847848

848849
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq8074[];
849850
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[];
851+
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018[];
850852

851853
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[];
852854
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[];

drivers/net/wireless/ath/ath11k/hw.c

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,108 @@ const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[] = {
507507
{ /* terminator entry */ }
508508
};
509509

510+
const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018[] = {
511+
{
512+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
513+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
514+
.pipenum = __cpu_to_le32(3),
515+
},
516+
{
517+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
518+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
519+
.pipenum = __cpu_to_le32(2),
520+
},
521+
{
522+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
523+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
524+
.pipenum = __cpu_to_le32(3),
525+
},
526+
{
527+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
528+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
529+
.pipenum = __cpu_to_le32(2),
530+
},
531+
{
532+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
533+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
534+
.pipenum = __cpu_to_le32(3),
535+
},
536+
{
537+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
538+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
539+
.pipenum = __cpu_to_le32(2),
540+
},
541+
{
542+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
543+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
544+
.pipenum = __cpu_to_le32(3),
545+
},
546+
{
547+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
548+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
549+
.pipenum = __cpu_to_le32(2),
550+
},
551+
{
552+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
553+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
554+
.pipenum = __cpu_to_le32(3),
555+
},
556+
{
557+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
558+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
559+
.pipenum = __cpu_to_le32(2),
560+
},
561+
{
562+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
563+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
564+
.pipenum = __cpu_to_le32(7),
565+
},
566+
{
567+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
568+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
569+
.pipenum = __cpu_to_le32(2),
570+
},
571+
{
572+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
573+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
574+
.pipenum = __cpu_to_le32(0),
575+
},
576+
{
577+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
578+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
579+
.pipenum = __cpu_to_le32(1),
580+
},
581+
{ /* not used */
582+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
583+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
584+
.pipenum = __cpu_to_le32(0),
585+
},
586+
{ /* not used */
587+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
588+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
589+
.pipenum = __cpu_to_le32(1),
590+
},
591+
{
592+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
593+
.pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
594+
.pipenum = __cpu_to_le32(4),
595+
},
596+
{
597+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
598+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
599+
.pipenum = __cpu_to_le32(1),
600+
},
601+
{
602+
.service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
603+
.pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
604+
.pipenum = __cpu_to_le32(5),
605+
},
606+
607+
/* (Additions here) */
608+
609+
{ /* terminator entry */ }
610+
};
611+
510612
/* Target firmware's Copy Engine configuration. */
511613
const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[] = {
512614
/* CE0: host->target HTC control and raw streams */

0 commit comments

Comments
 (0)