Przeglądaj źródła

qcacmn: Write Rx desc SPT on partner SOC

Changes to write Rx descriptor secondary page
tables on partner SOCs.

Change-Id: If89eff3425078aebb975463a01d0a45c9f5a21db
Chaithanya Garrepalli 3 lat temu
rodzic
commit
ed4b7bf28b

+ 14 - 0
dp/inc/cdp_txrx_mlo.h

@@ -93,4 +93,18 @@ cdp_update_mlo_ptnr_list(ol_txrx_soc_handle soc, int8_t vdev_ids[],
 	return QDF_STATUS_SUCCESS;
 }
 
+static inline void cdp_mlo_setup_complete(ol_txrx_soc_handle soc,
+					  struct cdp_mlo_ctxt *mlo_ctx)
+{
+	if (!soc || !soc->ops) {
+		QDF_BUG(0);
+		return;
+	}
+
+	if (!soc->ops->mlo_ops ||
+	    !soc->ops->mlo_ops->mlo_setup_complete)
+		return;
+
+	soc->ops->mlo_ops->mlo_setup_complete(mlo_ctx);
+}
 #endif /*_CDP_TXRX_MLO_H_*/

+ 2 - 0
dp/inc/cdp_txrx_ops.h

@@ -109,6 +109,7 @@ enum vdev_ll_conn_actions {
  * struct cdp_mlo_ops - MLO ops for multichip
  * @mlo_soc_setup: setup DP mlo for SOC
  * @mlo_soc_teardown: teardown DP mlo for SOC
+ * @mlo_setup_complete: indication to DP that all SOCs mlo is setup
  */
 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
 struct cdp_mlo_ops {
@@ -119,6 +120,7 @@ struct cdp_mlo_ops {
 	QDF_STATUS (*update_mlo_ptnr_list)(struct cdp_soc_t *soc_hdl,
 					   int8_t *vdev_ids, uint8_t num_vdevs,
 					   uint8_t vdev_id);
+	void (*mlo_setup_complete)(struct cdp_mlo_ctxt *mlo_ctxt);
 };
 #endif
 

+ 1 - 6
dp/wifi3.0/be/dp_be.c

@@ -1289,12 +1289,7 @@ static void dp_peer_get_reo_hash_be(struct dp_vdev *vdev,
 		return dp_vdev_get_default_reo_hash(vdev, reo_dest,
 						    hash_based);
 
-	/* Not a ML link peer configure local chip*/
-	if (!setup_info)
-		chip_id = be_soc->mlo_chip_id;
-	else
-		chip_id = setup_info->primary_umac_id;
-
+	chip_id = be_soc->mlo_chip_id;
 	default_rx_ring_id =
 		wlan_cfg_mlo_default_rx_ring_get_by_chip_id(soc->wlan_cfg_ctx,
 							    chip_id);

+ 59 - 0
dp/wifi3.0/be/mlo/dp_mlo.c

@@ -123,6 +123,37 @@ dp_mlo_get_soc_ref_by_chip_id(struct dp_mlo_ctxt *ml_ctxt,
 	return soc;
 }
 
+static QDF_STATUS dp_partner_soc_rx_hw_cc_init(struct dp_mlo_ctxt *mlo_ctxt,
+					       struct dp_soc_be *be_soc)
+{
+	uint8_t i;
+	struct dp_soc *partner_soc;
+	struct dp_soc_be *be_partner_soc;
+	uint8_t pool_id;
+	QDF_STATUS qdf_status;
+
+	for (i = 0; i < WLAN_MAX_MLO_CHIPS; i++) {
+		partner_soc = dp_mlo_get_soc_ref_by_chip_id(mlo_ctxt, i);
+		if (!partner_soc)
+			continue;
+
+		be_partner_soc = dp_get_be_soc_from_dp_soc(partner_soc);
+
+		for (pool_id = 0; pool_id < MAX_RXDESC_POOLS; pool_id++) {
+			qdf_status =
+				dp_hw_cookie_conversion_init
+					(be_soc,
+					 &be_partner_soc->rx_cc_ctx[pool_id]);
+			if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
+				dp_alert("MLO partner soc RX CC init failed");
+				return qdf_status;
+			}
+		}
+	}
+
+	return qdf_status;
+}
+
 static void dp_mlo_soc_setup(struct cdp_soc_t *soc_hdl,
 			     struct cdp_mlo_ctxt *cdp_ml_ctxt)
 {
@@ -307,10 +338,38 @@ void dp_clr_mlo_ptnr_list(struct dp_soc *soc, struct dp_vdev *vdev)
 	}
 }
 
+static void dp_mlo_setup_complete(struct cdp_mlo_ctxt *cdp_ml_ctxt)
+{
+	struct dp_mlo_ctxt *mlo_ctxt = cdp_mlo_ctx_to_dp(cdp_ml_ctxt);
+	int i;
+	struct dp_soc *soc;
+	struct dp_soc_be *be_soc;
+	QDF_STATUS qdf_status;
+
+	if (!cdp_ml_ctxt)
+		return;
+
+	for (i = 0; i < WLAN_MAX_MLO_CHIPS; i++) {
+		soc = dp_mlo_get_soc_ref_by_chip_id(mlo_ctxt, i);
+
+		if (!soc)
+			continue;
+		be_soc = dp_get_be_soc_from_dp_soc(soc);
+
+		qdf_status = dp_partner_soc_rx_hw_cc_init(mlo_ctxt, be_soc);
+
+		if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
+			dp_alert("MLO partner SOC Rx desc CC init failed");
+			qdf_assert_always(0);
+		}
+	}
+}
+
 static struct cdp_mlo_ops dp_mlo_ops = {
 	.mlo_soc_setup = dp_mlo_soc_setup,
 	.mlo_soc_teardown = dp_mlo_soc_teardown,
 	.update_mlo_ptnr_list = dp_update_mlo_ptnr_list,
+	.mlo_setup_complete = dp_mlo_setup_complete,
 };
 
 void dp_soc_mlo_fill_params(struct dp_soc *soc,

+ 3 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_setup.c

@@ -73,6 +73,9 @@ void mlo_setup_update_soc_ready(struct wlan_objmgr_psoc *psoc)
 		cdp_soc_mlo_soc_setup(wlan_psoc_get_dp_handle(tmp_soc),
 				      mlo_ctx->dp_handle);
 	}
+
+	cdp_mlo_setup_complete(wlan_psoc_get_dp_handle(psoc),
+			       mlo_ctx->dp_handle);
 }
 
 qdf_export_symbol(mlo_setup_update_soc_ready);