aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch')
-rw-r--r--package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch246
1 files changed, 246 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch b/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch
new file mode 100644
index 0000000000..9a16349b28
--- /dev/null
+++ b/package/kernel/mac80211/patches/ath11k/0020-wifi-ath11k-update-ce-configurations-for-IPQ5018.patch
@@ -0,0 +1,246 @@
+From 26af7aabd2d8225c6b2056234626ba5099610871 Mon Sep 17 00:00:00 2001
+From: Sriram R <quic_srirrama@quicinc.com>
+Date: Fri, 2 Dec 2022 23:37:14 +0200
+Subject: [PATCH] wifi: ath11k: update ce configurations for IPQ5018
+
+IPQ5018 is a single pdev device. Update host
+and target CE configurations accordingly.
+
+Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1
+
+Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
+Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
+Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://lore.kernel.org/r/20221122132152.17771-4-quic_kathirve@quicinc.com
+---
+ drivers/net/wireless/ath/ath11k/core.c | 4 +
+ drivers/net/wireless/ath/ath11k/core.h | 3 +
+ drivers/net/wireless/ath/ath11k/hw.c | 191 +++++++++++++++++++++++++
+ 3 files changed, 198 insertions(+)
+
+--- a/drivers/net/wireless/ath/ath11k/core.c
++++ b/drivers/net/wireless/ath/ath11k/core.c
+@@ -630,6 +630,10 @@ static const struct ath11k_hw_params ath
+ .internal_sleep_clock = false,
+ .host_ce_config = ath11k_host_ce_config_qcn9074,
+ .ce_count = CE_CNT_5018,
++ .target_ce_config = ath11k_target_ce_config_wlan_ipq5018,
++ .target_ce_count = TARGET_CE_CNT_5018,
++ .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq5018,
++ .svc_to_ce_map_len = SVC_CE_MAP_LEN_5018,
+ .rxdma1_enable = true,
+ .num_rxmda_per_pdev = RXDMA_PER_PDEV_5018,
+ .rx_mac_buf_ring = false,
+--- a/drivers/net/wireless/ath/ath11k/core.h
++++ b/drivers/net/wireless/ath/ath11k/core.h
+@@ -1146,6 +1146,9 @@ extern const struct service_to_pipe ath1
+ 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[];
+
++extern const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq5018[];
++extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq5018[];
++
+ extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qcn9074[];
+ extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qcn9074[];
+ int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab);
+--- a/drivers/net/wireless/ath/ath11k/hw.c
++++ b/drivers/net/wireless/ath/ath11k/hw.c
+@@ -1972,6 +1972,197 @@ const struct ath11k_hw_ring_mask ath11k_
+ },
+ };
+
++/* Target firmware's Copy Engine configuration for IPQ5018 */
++const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq5018[] = {
++ /* 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_OUT),
++ .nentries = __cpu_to_le32(32),
++ .nbytes_max = __cpu_to_le32(2048),
++ .flags = __cpu_to_le32(0x2000),
++ .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),
++ },
++};
++
++/* Map from service/endpoint to Copy Engine for IPQ5018.
++ * This table is derived from the CE 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_ipq5018[] = {
++ {
++ .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_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),
++ },
++
++ {
++ .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),
++ },
++ {
++ .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 ath11k_hw_regs ipq8074_regs = {
+ /* SW2TCL(x) R0 ring configuration address */
+ .hal_tcl1_ring_base_lsb = 0x00000510,