Browse Source

cnss2: Add shadow register version 3 for kiwi

Add shadow register version 3 structure for kiwi
CE7 support for wmi logging.

Change-Id: Ie37dcc47ff4b63726cee43a3d26cb0aad24d44ed
Mohammed Siddiq 3 years ago
parent
commit
0db7057bb6
2 changed files with 37 additions and 10 deletions
  1. 27 9
      cnss2/qmi.c
  2. 10 1
      inc/cnss2.h

+ 27 - 9
cnss2/qmi.c

@@ -45,6 +45,9 @@
 #define QMI_WLFW_MAX_RECV_BUF_SIZE	SZ_8K
 #define IMSPRIVATE_SERVICE_MAX_MSG_LEN	SZ_8K
 #define DMS_QMI_MAX_MSG_LEN		SZ_256
+#define MAX_SHADOW_REG_RESERVED		2
+#define MAX_NUM_SHADOW_REG_V3	(QMI_WLFW_MAX_NUM_SHADOW_REG_V3_USAGE_V01 - \
+				 MAX_SHADOW_REG_RESERVED)
 
 #define QMI_WLFW_MAC_READY_TIMEOUT_MS	50
 #define QMI_WLFW_MAC_READY_MAX_RETRY	200
@@ -1379,16 +1382,31 @@ int cnss_wlfw_wlan_cfg_send_sync(struct cnss_plat_data *plat_priv,
 		req->svc_cfg[i].pipe_num = config->ce_svc_cfg[i].pipe_num;
 	}
 
-	req->shadow_reg_v2_valid = 1;
-	if (config->num_shadow_reg_v2_cfg >
-	    QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01)
-		req->shadow_reg_v2_len = QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01;
-	else
-		req->shadow_reg_v2_len = config->num_shadow_reg_v2_cfg;
+	if (plat_priv->device_id != KIWI_DEVICE_ID) {
+		req->shadow_reg_v2_valid = 1;
+		if (config->num_shadow_reg_v2_cfg >
+		    QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01)
+			req->shadow_reg_v2_len = QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01;
+		else
+			req->shadow_reg_v2_len = config->num_shadow_reg_v2_cfg;
 
-	memcpy(req->shadow_reg_v2, config->shadow_reg_v2_cfg,
-	       sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01)
-	       * req->shadow_reg_v2_len);
+		memcpy(req->shadow_reg_v2, config->shadow_reg_v2_cfg,
+		       sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01)
+		       * req->shadow_reg_v2_len);
+	} else {
+		cnss_pr_dbg("Shadow reg v3 len: %d\n",
+			    config->num_shadow_reg_v3_cfg);
+		req->shadow_reg_v3_valid = 1;
+		if (config->num_shadow_reg_v3_cfg >
+		    MAX_NUM_SHADOW_REG_V3)
+			req->shadow_reg_v3_len = MAX_NUM_SHADOW_REG_V3;
+		else
+			req->shadow_reg_v3_len = config->num_shadow_reg_v3_cfg;
+
+		memcpy(req->shadow_reg_v3, config->shadow_reg_v3_cfg,
+		       sizeof(struct wlfw_shadow_reg_v3_cfg_s_v01)
+		       * req->shadow_reg_v3_len);
+	}
 
 	ret = qmi_txn_init(&plat_priv->qmi_wlfw, &txn,
 			   wlfw_wlan_cfg_resp_msg_v01_ei, resp);

+ 10 - 1
inc/cnss2.h

@@ -1,5 +1,8 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */
+/*
+ * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ */
 
 #ifndef _NET_CNSS2_H
 #define _NET_CNSS2_H
@@ -160,6 +163,10 @@ struct cnss_rri_over_ddr_cfg {
 	u32 base_addr_high;
 };
 
+struct cnss_shadow_reg_v3_cfg {
+	u32 addr;
+};
+
 struct cnss_wlan_enable_cfg {
 	u32 num_ce_tgt_cfg;
 	struct cnss_ce_tgt_pipe_cfg *ce_tgt_cfg;
@@ -171,6 +178,8 @@ struct cnss_wlan_enable_cfg {
 	struct cnss_shadow_reg_v2_cfg *shadow_reg_v2_cfg;
 	bool rri_over_ddr_cfg_valid;
 	struct cnss_rri_over_ddr_cfg rri_over_ddr_cfg;
+	u32 num_shadow_reg_v3_cfg;
+	struct cnss_shadow_reg_v3_cfg *shadow_reg_v3_cfg;
 };
 
 enum cnss_driver_mode {