Forráskód Böngészése

qcacmn: add shadow register config support for wcn6450

Add support to send shadow register configurations to target
for wcn6450. This support is enabled with the feature macros
CONFIG_SHADOW_V3 and CONFIG_ADRASTEA_SHADOW_REGISTERS.

Change-Id: Ib67993ec838195a5fe174d42cf54ddc0075c3bc3
CRs-Fixed: 3381139
Venkateswara Naralasetty 2 éve
szülő
commit
fffd884d26
4 módosított fájl, 70 hozzáadás és 0 törlés
  1. 34 0
      hif/src/ce/ce_main.c
  2. 6 0
      hif/src/ce/ce_main.h
  3. 23 0
      hif/src/ce/ce_service_legacy.c
  4. 7 0
      hif/src/hif_main.h

+ 34 - 0
hif/src/ce/ce_main.c

@@ -3725,6 +3725,39 @@ void hif_ce_stop(struct hif_softc *scn)
 	hif_state->started = false;
 }
 
+#ifdef CONFIG_SHADOW_V3
+void hif_preare_shadow_register_cfg_v3(struct hif_softc *scn)
+{
+	int shadow_cfg_idx = scn->num_shadow_registers_configured;
+	int i;
+
+	/* shadow reg config for CE SRC registers */
+	for (i = 0; i < scn->ce_count; i++) {
+		scn->shadow_regs[shadow_cfg_idx].addr =
+				CE_BASE_ADDRESS(i) + SR_WR_INDEX_ADDRESS;
+		shadow_cfg_idx++;
+	}
+
+	/* shadow reg config for CE DST registers */
+	for (i = 0; i < scn->ce_count; i++) {
+		scn->shadow_regs[shadow_cfg_idx].addr =
+				CE_BASE_ADDRESS(i) + DST_WR_INDEX_ADDRESS;
+		shadow_cfg_idx++;
+	}
+
+	scn->num_shadow_registers_configured = shadow_cfg_idx;
+}
+
+void hif_get_shadow_reg_config_v3(struct hif_softc *scn,
+				  struct pld_shadow_reg_v3_cfg **shadow_config,
+				  int *num_shadow_registers_configured)
+{
+	*shadow_config = scn->shadow_regs;
+	*num_shadow_registers_configured =
+				scn->num_shadow_registers_configured;
+}
+#endif
+
 static void hif_get_shadow_reg_cfg(struct hif_softc *scn,
 				   struct shadow_reg_cfg
 				   **target_shadow_reg_cfg_ret,
@@ -4006,6 +4039,7 @@ int hif_wlan_enable(struct hif_softc *scn)
 	case TARGET_TYPE_KIWI:
 	case TARGET_TYPE_MANGO:
 	case TARGET_TYPE_PEACH:
+	case TARGET_TYPE_WCN6450:
 		hif_prepare_hal_shadow_reg_cfg_v3(scn, &cfg);
 		break;
 	default:

+ 6 - 0
hif/src/ce/ce_main.h

@@ -379,4 +379,10 @@ void hif_select_epping_service_to_pipe_map(struct service_to_pipe
 void ce_service_register_module(enum ce_target_type target_type,
 				struct ce_ops* (*ce_attach)(void));
 
+#ifdef CONFIG_SHADOW_V3
+void hif_get_shadow_reg_config_v3(struct hif_softc *scn,
+				  struct pld_shadow_reg_v3_cfg **shadow_config,
+				  int *num_shadow_registers_configured);
+void hif_preare_shadow_register_cfg_v3(struct hif_softc *scn);
+#endif
 #endif /* __CE_H__ */

+ 23 - 0
hif/src/ce/ce_service_legacy.c

@@ -1439,6 +1439,25 @@ int ce_get_index_info_legacy(struct hif_softc *scn, void *ce_state,
 }
 #endif
 
+#ifdef CONFIG_SHADOW_V3
+static void ce_prepare_shadow_register_v3_cfg_legacy(struct hif_softc *scn,
+				struct pld_shadow_reg_v3_cfg **shadow_config,
+				int *num_shadow_registers_configured)
+{
+	hif_get_shadow_reg_config_v3(scn, shadow_config,
+				     num_shadow_registers_configured);
+
+	if (*num_shadow_registers_configured != 0) {
+		hif_err("shadow register configuration already constructed");
+		return;
+	}
+
+	hif_preare_shadow_register_cfg_v3(scn);
+	hif_get_shadow_reg_config_v3(scn, shadow_config,
+				     num_shadow_registers_configured);
+}
+#endif
+
 struct ce_ops ce_service_legacy = {
 	.ce_get_desc_size = ce_get_desc_size_legacy,
 	.ce_ring_setup = ce_ring_setup_legacy,
@@ -1459,6 +1478,10 @@ struct ce_ops ce_service_legacy = {
 	.ce_get_index_info =
 		ce_get_index_info_legacy,
 #endif
+#ifdef CONFIG_SHADOW_V3
+	.ce_prepare_shadow_register_v3_cfg =
+		ce_prepare_shadow_register_v3_cfg_legacy,
+#endif
 };
 
 struct ce_ops *ce_services_legacy()

+ 7 - 0
hif/src/hif_main.h

@@ -43,6 +43,7 @@
 #ifdef HIF_CE_LOG_INFO
 #include "qdf_notifier.h"
 #endif
+#include "pld_common.h"
 
 #define HIF_MIN_SLEEP_INACTIVITY_TIME_MS     50
 #define HIF_SLEEP_INACTIVITY_TIMER_PERIOD_MS 60
@@ -250,6 +251,8 @@ struct hif_umac_reset_ctx {
 };
 #endif
 
+#define MAX_SHADOW_REGS 40
+
 struct hif_softc {
 	struct hif_opaque_softc osc;
 	struct hif_config_info hif_config;
@@ -373,6 +376,10 @@ struct hif_softc {
 #ifdef DP_UMAC_HW_RESET_SUPPORT
 	struct hif_umac_reset_ctx umac_reset_ctx;
 #endif
+#ifdef CONFIG_SHADOW_V3
+	struct pld_shadow_reg_v3_cfg shadow_regs[MAX_SHADOW_REGS];
+	int num_shadow_registers_configured;
+#endif
 };
 
 static inline