qcacmn: Write Rx desc SPT on partner SOC

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

Change-Id: If89eff3425078aebb975463a01d0a45c9f5a21db
This commit is contained in:
Chaithanya Garrepalli
2021-11-29 22:00:55 +05:30
committed by Madan Koyyalamudi
parent f49b3a1753
commit ed4b7bf28b
5 changed files with 79 additions and 6 deletions

View File

@@ -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_*/

View File

@@ -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

View File

@@ -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);

View File

@@ -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,

View File

@@ -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);