Przeglądaj źródła

qcacmn: HAL srng API changes for beryllium

Add HAL srng API changes for WCN7850

Change-Id: I4b78dbe6a88b24c9ef7662c2091123fa7f86ba18
CRs-Fixed: 2891049
Rakesh Pillai 4 lat temu
rodzic
commit
b2548a90cd
1 zmienionych plików z 48 dodań i 23 usunięć
  1. 48 23
      hal/wifi3.0/hal_srng.c

+ 48 - 23
hal/wifi3.0/hal_srng.c

@@ -18,6 +18,7 @@
 
 #include "hal_hw_headers.h"
 #include "hal_api.h"
+#include "hal_reo.h"
 #include "target_type.h"
 #include "wcss_version.h"
 #include "qdf_module.h"
@@ -49,11 +50,19 @@ void hal_qca6750_attach(struct hal_soc *hal);
 #ifdef QCA_WIFI_QCA5018
 void hal_qca5018_attach(struct hal_soc *hal);
 #endif
+#ifdef QCA_WIFI_WCN7850
+void hal_wcn7850_attach(struct hal_soc *hal);
+#endif
 
 #ifdef ENABLE_VERBOSE_DEBUG
 bool is_hal_verbose_debug_enabled;
 #endif
 
+#define HAL_REO_DESTINATION_RING_CTRL_IX_0_ADDR(x)	((x) + 0x4)
+#define HAL_REO_DESTINATION_RING_CTRL_IX_1_ADDR(x)	((x) + 0x8)
+#define HAL_REO_DESTINATION_RING_CTRL_IX_2_ADDR(x)	((x) + 0xc)
+#define HAL_REO_DESTINATION_RING_CTRL_IX_3_ADDR(x)	((x) + 0x10)
+
 #ifdef ENABLE_HAL_REG_WR_HISTORY
 struct hal_reg_write_fail_history hal_reg_wr_hist;
 
@@ -185,10 +194,12 @@ QDF_STATUS hal_set_shadow_regs(void *hal_soc)
 	int i;
 	struct hal_hw_srng_config *srng_config =
 		&hal->hw_srng_table[WBM2SW_RELEASE];
+	uint32_t reo_reg_base;
+
+	reo_reg_base = hal_get_reo_reg_base_offset(hal_soc);
 
 	target_reg_offset =
-		HWIO_REO_R0_DESTINATION_RING_CTRL_IX_0_ADDR(
-			SEQ_WCSS_UMAC_REO_REG_OFFSET);
+		HAL_REO_DESTINATION_RING_CTRL_IX_0_ADDR(reo_reg_base);
 
 	for (i = 0; i < MAX_REO_REMAP_SHADOW_REGS; i++) {
 		hal_set_one_target_reg_config(hal, target_reg_offset, i);
@@ -381,6 +392,13 @@ static void hal_target_based_configure(struct hal_soc *hal)
 			hal_qca6750_attach(hal);
 		break;
 #endif
+#ifdef QCA_WIFI_WCN7850
+	case TARGET_TYPE_WCN7850:
+		hal->use_register_windowing = true;
+		hal_wcn7850_attach(hal);
+		hal->init_phase = false;
+		break;
+#endif
 #if defined(QCA_WIFI_QCA8074) && defined(WIFI_TARGET_TYPE_3_0)
 	case TARGET_TYPE_QCA8074:
 		hal_qca8074_attach(hal);
@@ -1486,6 +1504,10 @@ extern void hal_detach(void *hal_soc)
 }
 qdf_export_symbol(hal_detach);
 
+#define HAL_CE_CHANNEL_DST_DEST_CTRL_ADDR(x)		((x) + 0x000000b0)
+#define HAL_CE_CHANNEL_DST_DEST_CTRL_DEST_MAX_LENGTH_BMSK	0x0000ffff
+#define HAL_CE_CHANNEL_DST_DEST_RING_CONSUMER_PREFETCH_TIMER_ADDR(x)	((x) + 0x00000040)
+#define HAL_CE_CHANNEL_DST_DEST_RING_CONSUMER_PREFETCH_TIMER_RMSK	0x00000007
 /**
  * hal_ce_dst_setup - Initialize CE destination ring registers
  * @hal_soc: HAL SOC handle
@@ -1500,23 +1522,23 @@ static inline void hal_ce_dst_setup(struct hal_soc *hal, struct hal_srng *srng,
 		HAL_SRNG_CONFIG(hal, CE_DST);
 
 	/* set DEST_MAX_LENGTH according to ce assignment */
-	reg_addr = HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_CTRL_ADDR(
+	reg_addr = HAL_CE_CHANNEL_DST_DEST_CTRL_ADDR(
 			ring_config->reg_start[R0_INDEX] +
 			(ring_num * ring_config->reg_size[R0_INDEX]));
 
 	reg_val = HAL_REG_READ(hal, reg_addr);
-	reg_val &= ~HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_CTRL_DEST_MAX_LENGTH_BMSK;
+	reg_val &= ~HAL_CE_CHANNEL_DST_DEST_CTRL_DEST_MAX_LENGTH_BMSK;
 	reg_val |= srng->u.dst_ring.max_buffer_length &
-		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_CTRL_DEST_MAX_LENGTH_BMSK;
+		HAL_CE_CHANNEL_DST_DEST_CTRL_DEST_MAX_LENGTH_BMSK;
 	HAL_REG_WRITE(hal, reg_addr, reg_val);
 
 	if (srng->prefetch_timer) {
-		reg_addr = HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_CONSUMER_PREFETCH_TIMER_ADDR(
+		reg_addr = HAL_CE_CHANNEL_DST_DEST_RING_CONSUMER_PREFETCH_TIMER_ADDR(
 				ring_config->reg_start[R0_INDEX] +
 				(ring_num * ring_config->reg_size[R0_INDEX]));
 
 		reg_val = HAL_REG_READ(hal, reg_addr);
-		reg_val &= ~HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_CONSUMER_PREFETCH_TIMER_RMSK;
+		reg_val &= ~HAL_CE_CHANNEL_DST_DEST_RING_CONSUMER_PREFETCH_TIMER_RMSK;
 		reg_val |= srng->prefetch_timer;
 		HAL_REG_WRITE(hal, reg_addr, reg_val);
 		reg_val = HAL_REG_READ(hal, reg_addr);
@@ -1539,64 +1561,67 @@ void hal_reo_read_write_ctrl_ix(hal_soc_handle_t hal_soc_hdl, bool read,
 {
 	uint32_t reg_offset;
 	struct hal_soc *hal = (struct hal_soc *)hal_soc_hdl;
+	uint32_t reo_reg_base;
+
+	reo_reg_base = hal_get_reo_reg_base_offset(hal_soc_hdl);
 
 	if (read) {
 		if (ix0) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_0_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_0_ADDR(
+						reo_reg_base);
 			*ix0 = HAL_REG_READ(hal, reg_offset);
 		}
 
 		if (ix1) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_1_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_1_ADDR(
+						reo_reg_base);
 			*ix1 = HAL_REG_READ(hal, reg_offset);
 		}
 
 		if (ix2) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_2_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_2_ADDR(
+						reo_reg_base);
 			*ix2 = HAL_REG_READ(hal, reg_offset);
 		}
 
 		if (ix3) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_3_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_3_ADDR(
+						reo_reg_base);
 			*ix3 = HAL_REG_READ(hal, reg_offset);
 		}
 	} else {
 		if (ix0) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_0_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_0_ADDR(
+						reo_reg_base);
 			HAL_REG_WRITE_CONFIRM_RETRY(hal, reg_offset,
 						    *ix0, true);
 		}
 
 		if (ix1) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_1_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_1_ADDR(
+						reo_reg_base);
 			HAL_REG_WRITE_CONFIRM_RETRY(hal, reg_offset,
 						    *ix1, true);
 		}
 
 		if (ix2) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_2_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_2_ADDR(
+						reo_reg_base);
 			HAL_REG_WRITE_CONFIRM_RETRY(hal, reg_offset,
 						    *ix2, true);
 		}
 
 		if (ix3) {
 			reg_offset =
-				HWIO_REO_R0_DESTINATION_RING_CTRL_IX_3_ADDR(
-						SEQ_WCSS_UMAC_REO_REG_OFFSET);
+				HAL_REO_DESTINATION_RING_CTRL_IX_3_ADDR(
+						reo_reg_base);
 			HAL_REG_WRITE_CONFIRM_RETRY(hal, reg_offset,
 						    *ix3, true);
 		}