qcacmn: Setup RXDMA to software Ring for WMAC1
Setup RxDMA to software ring of both MACs, required for DBS MCC case. Change-Id: I1a094c1fafe39a2a41e8867c82c1236c4b9b6593 CRs-Fixed: 2135851
这个提交包含在:
@@ -687,6 +687,12 @@ static uint32_t dp_service_srngs(void *dp_ctx, uint32_t dp_budget)
|
||||
remaining_quota = budget;
|
||||
}
|
||||
}
|
||||
for (ring = 0; ring < MAX_RX_MAC_RINGS; ring++) {
|
||||
/* Need to check on this, why is required */
|
||||
work_done = dp_rxdma_err_process(soc, ring,
|
||||
remaining_quota);
|
||||
budget -= work_done;
|
||||
}
|
||||
}
|
||||
|
||||
if (reo_status_mask)
|
||||
@@ -1843,6 +1849,21 @@ static int dp_soc_cmn_setup(struct dp_soc *soc)
|
||||
soc->num_reo_dest_rings = 0;
|
||||
}
|
||||
|
||||
/* LMAC RxDMA to SW Rings configuration */
|
||||
if (!wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) {
|
||||
/* Only valid for MCL */
|
||||
struct dp_pdev *pdev = soc->pdev_list[0];
|
||||
|
||||
for (i = 0; i < MAX_RX_MAC_RINGS; i++) {
|
||||
if (dp_srng_setup(soc, &pdev->rxdma_err_dst_ring[i],
|
||||
RXDMA_DST, 0, i, RXDMA_ERR_DST_RING_SIZE)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
||||
QDF_TRACE_LEVEL_ERROR,
|
||||
FL("dp_srng_setup failed for rxdma_err_dst_ring"));
|
||||
goto fail1;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* TBD: call dp_rx_init to setup Rx SW descriptors */
|
||||
|
||||
/* REO reinjection ring */
|
||||
@@ -2191,11 +2212,13 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc,
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
if (dp_srng_setup(soc, &pdev->rxdma_err_dst_ring, RXDMA_DST, 0,
|
||||
pdev_id, RXDMA_ERR_DST_RING_SIZE)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("dp_srng_setup failed for rxdma_mon_dst_ring"));
|
||||
goto fail1;
|
||||
if (wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) {
|
||||
if (dp_srng_setup(soc, &pdev->rxdma_err_dst_ring[0], RXDMA_DST,
|
||||
0, pdev_id, RXDMA_ERR_DST_RING_SIZE)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("dp_srng_setup failed for rxdma_err_dst_ring"));
|
||||
goto fail1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Setup second Rx refill buffer ring */
|
||||
@@ -2357,7 +2380,15 @@ static void dp_pdev_detach_wifi3(struct cdp_pdev *txrx_pdev, int force)
|
||||
dp_srng_cleanup(soc, &pdev->rxdma_mon_desc_ring,
|
||||
RXDMA_MONITOR_DESC, 0);
|
||||
|
||||
dp_srng_cleanup(soc, &pdev->rxdma_err_dst_ring, RXDMA_DST, 0);
|
||||
if (wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) {
|
||||
dp_srng_cleanup(soc, &pdev->rxdma_err_dst_ring[0], RXDMA_DST, 0);
|
||||
} else {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_RX_MAC_RINGS; i++)
|
||||
dp_srng_cleanup(soc, &pdev->rxdma_err_dst_ring[i],
|
||||
RXDMA_DST, 0);
|
||||
}
|
||||
|
||||
soc->pdev_list[pdev->pdev_id] = NULL;
|
||||
soc->pdev_count--;
|
||||
@@ -2553,6 +2584,10 @@ static void dp_rxdma_ring_config(struct dp_soc *soc)
|
||||
pdev->rx_mac_buf_ring[j]
|
||||
.hal_srng,
|
||||
RXDMA_BUF);
|
||||
htt_srng_setup(soc->htt_handle, mac_id,
|
||||
pdev->rxdma_err_dst_ring[j]
|
||||
.hal_srng,
|
||||
RXDMA_DST);
|
||||
mac_id++;
|
||||
}
|
||||
|
||||
@@ -2572,10 +2607,6 @@ static void dp_rxdma_ring_config(struct dp_soc *soc)
|
||||
htt_srng_setup(soc->htt_handle, i,
|
||||
pdev->rxdma_mon_desc_ring.hal_srng,
|
||||
RXDMA_MONITOR_DESC);
|
||||
|
||||
htt_srng_setup(soc->htt_handle, i,
|
||||
pdev->rxdma_err_dst_ring.hal_srng,
|
||||
RXDMA_DST);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2588,6 +2619,8 @@ static void dp_rxdma_ring_config(struct dp_soc *soc)
|
||||
struct dp_pdev *pdev = soc->pdev_list[i];
|
||||
|
||||
if (pdev) {
|
||||
int ring_idx = dp_get_ring_id_for_mac_id(soc, i);
|
||||
|
||||
htt_srng_setup(soc->htt_handle, i,
|
||||
pdev->rx_refill_buf_ring.hal_srng, RXDMA_BUF);
|
||||
|
||||
@@ -2604,8 +2637,8 @@ static void dp_rxdma_ring_config(struct dp_soc *soc)
|
||||
pdev->rxdma_mon_desc_ring.hal_srng,
|
||||
RXDMA_MONITOR_DESC);
|
||||
htt_srng_setup(soc->htt_handle, i,
|
||||
pdev->rxdma_err_dst_ring.hal_srng,
|
||||
RXDMA_DST);
|
||||
pdev->rxdma_err_dst_ring[ring_idx].hal_srng,
|
||||
RXDMA_DST);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4134,9 +4167,14 @@ dp_print_ring_stats(struct dp_pdev *pdev)
|
||||
dp_print_ring_stat_from_hal(pdev->soc,
|
||||
&pdev->rxdma_mon_desc_ring,
|
||||
"Rxdma mon desc Ring");
|
||||
dp_print_ring_stat_from_hal(pdev->soc,
|
||||
&pdev->rxdma_err_dst_ring,
|
||||
"Rxdma err dst ring");
|
||||
|
||||
for (i = 0; i < MAX_RX_MAC_RINGS; i++) {
|
||||
snprintf(ring_name, STR_MAXLEN, "Rxdma err dst ring %d", i);
|
||||
dp_print_ring_stat_from_hal(pdev->soc,
|
||||
&pdev->rxdma_err_dst_ring[i],
|
||||
ring_name);
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_RX_MAC_RINGS; i++) {
|
||||
snprintf(ring_name, STR_MAXLEN, "Rx mac buf ring %d", i);
|
||||
dp_print_ring_stat_from_hal(pdev->soc,
|
||||
@@ -5653,6 +5691,43 @@ fail0:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_get_pdev_for_mac_id() - Return pdev for mac_id
|
||||
*
|
||||
* @soc: handle to DP soc
|
||||
* @mac_id: MAC id
|
||||
*
|
||||
* Return: Return pdev corresponding to MAC
|
||||
*/
|
||||
void *dp_get_pdev_for_mac_id(struct dp_soc *soc, uint32_t mac_id)
|
||||
{
|
||||
if (wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx))
|
||||
return soc->pdev_list[mac_id];
|
||||
|
||||
/* Typically for MCL as there only 1 PDEV*/
|
||||
return soc->pdev_list[0];
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_get_ring_id_for_mac_id() - Return pdev for mac_id
|
||||
*
|
||||
* @soc: handle to DP soc
|
||||
* @mac_id: MAC id
|
||||
*
|
||||
* Return: ring id
|
||||
*/
|
||||
int dp_get_ring_id_for_mac_id(struct dp_soc *soc, uint32_t mac_id)
|
||||
{
|
||||
/*
|
||||
* Single pdev using both MACs will operate on both MAC rings,
|
||||
* which is the case for MCL.
|
||||
*/
|
||||
if (!wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx))
|
||||
return mac_id;
|
||||
|
||||
/* For WIN each PDEV will operate one ring, so index is zero. */
|
||||
return 0;
|
||||
}
|
||||
#if defined(CONFIG_WIN) && WDI_EVENT_ENABLE
|
||||
/*
|
||||
* dp_set_pktlog_wifi3() - attach txrx vdev
|
||||
|
在新工单中引用
屏蔽一个用户