qcacmn: Change to route vdev_id exceptions to FW
Configure HW to route vdev_id mismatch exceptions packets to FW. Change-Id: I8baf4a2f299ddda253a9cd3c247054a0e546af23
This commit is contained in:

committed by
Madan Koyyalamudi

parent
409ffbfda0
commit
60db195327
@@ -28,6 +28,8 @@
|
||||
#define DP_AST_AGING_TIMER_DEFAULT_MS 5000
|
||||
|
||||
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
|
||||
#define DP_TX_VDEV_ID_CHECK_ENABLE 0
|
||||
|
||||
static struct wlan_cfg_tcl_wbm_ring_num_map g_tcl_wbm_map_array[MAX_TCL_DATA_RINGS] = {
|
||||
{.tcl_ring_num = 0, .wbm_ring_num = 0, .wbm_rbm_id = HAL_BE_WBM_SW0_BM_ID, .for_ipa = 0},
|
||||
{1, 4, HAL_BE_WBM_SW4_BM_ID, 0},
|
||||
@@ -37,6 +39,7 @@ static struct wlan_cfg_tcl_wbm_ring_num_map g_tcl_wbm_map_array[MAX_TCL_DATA_RIN
|
||||
};
|
||||
|
||||
#else
|
||||
#define DP_TX_VDEV_ID_CHECK_ENABLE 1
|
||||
|
||||
static struct wlan_cfg_tcl_wbm_ring_num_map g_tcl_wbm_map_array[MAX_TCL_DATA_RINGS] = {
|
||||
{.tcl_ring_num = 0, .wbm_ring_num = 0, .wbm_rbm_id = HAL_BE_WBM_SW0_BM_ID, .for_ipa = 0},
|
||||
@@ -436,6 +439,9 @@ static QDF_STATUS dp_soc_init_be(struct dp_soc *soc)
|
||||
|
||||
qdf_status = dp_hw_cookie_conversion_init(be_soc);
|
||||
|
||||
/* route vdev_id mismatch notification via FW completion */
|
||||
hal_tx_vdev_mismatch_routing_set(soc->hal_soc,
|
||||
HAL_TX_VDEV_MISMATCH_FW_NOTIFY);
|
||||
return qdf_status;
|
||||
}
|
||||
|
||||
@@ -463,10 +469,9 @@ static QDF_STATUS dp_vdev_attach_be(struct dp_soc *soc, struct dp_vdev *vdev)
|
||||
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||
struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
|
||||
|
||||
be_vdev->bank_id = dp_tx_get_bank_profile(be_soc, be_vdev);
|
||||
be_vdev->vdev_id_check_en = DP_TX_VDEV_ID_CHECK_ENABLE;
|
||||
|
||||
/* Needs to be enabled after bring-up*/
|
||||
be_vdev->vdev_id_check_en = false;
|
||||
be_vdev->bank_id = dp_tx_get_bank_profile(be_soc, be_vdev);
|
||||
|
||||
if (be_vdev->bank_id == DP_BE_INVALID_BANK_ID) {
|
||||
QDF_BUG(0);
|
||||
|
@@ -4490,13 +4490,24 @@ void dp_tx_process_htt_completion(struct dp_soc *soc,
|
||||
dp_tx_inspect_handler(soc, vdev, tx_desc, status);
|
||||
break;
|
||||
}
|
||||
case HTT_TX_FW2WBM_TX_STATUS_VDEVID_MISMATCH:
|
||||
{
|
||||
DP_STATS_INC(vdev, tx_i.dropped.fail_per_pkt_vdev_id_check, 1);
|
||||
goto release_tx_desc;
|
||||
}
|
||||
default:
|
||||
dp_tx_comp_debug("Invalid HTT tx_status %d\n",
|
||||
dp_tx_comp_alert("Invalid HTT tx_status %d\n",
|
||||
tx_status);
|
||||
break;
|
||||
goto release_tx_desc;
|
||||
}
|
||||
|
||||
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_HTT_COMP);
|
||||
return;
|
||||
|
||||
release_tx_desc:
|
||||
dp_tx_comp_free_buf(soc, tx_desc);
|
||||
dp_tx_desc_release(tx_desc, tx_desc->pool_id);
|
||||
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_HTT_COMP);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_RX_SOFTIRQ_TIME_LIMIT
|
||||
|
@@ -1640,6 +1640,8 @@ struct dp_arch_ops {
|
||||
uint32_t (*dp_service_near_full_srngs)(struct dp_soc *soc,
|
||||
struct dp_intr *int_ctx,
|
||||
uint32_t dp_budget);
|
||||
void (*tx_implicit_rbm_set)(struct dp_soc *soc, uint8_t tx_ring_id,
|
||||
uint8_t bm_id);
|
||||
|
||||
/* Control Arch Ops */
|
||||
QDF_STATUS (*txrx_set_vdev_param)(struct dp_soc *soc,
|
||||
@@ -1652,8 +1654,6 @@ struct dp_arch_ops {
|
||||
int (*dp_srng_test_and_update_nf_params)(struct dp_soc *soc,
|
||||
struct dp_srng *dp_srng,
|
||||
int *max_reap_limit);
|
||||
void (*tx_implicit_rbm_set)(struct dp_soc *soc, uint8_t tx_ring_id,
|
||||
uint8_t bm_id);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -53,6 +53,16 @@ enum hal_tx_mcast_ctrl {
|
||||
HAL_TX_MCAST_CTRL_NO_SPECIAL,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum hal_tx_vdev_mismatch_notify
|
||||
* @HAL_TX_VDEV_MISMATCH_TQM_NOTIFY: vdev mismatch exception routed to TQM
|
||||
* @HAL_TX_VDEV_MISMATCH_FW_NOTIFY: vdev mismatch exception routed to FW
|
||||
*/
|
||||
enum hal_tx_vdev_mismatch_notify {
|
||||
HAL_TX_VDEV_MISMATCH_TQM_NOTIFY = 0,
|
||||
HAL_TX_VDEV_MISMATCH_FW_NOTIFY,
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
* Structures
|
||||
* ---------------------------------------------------------------------------
|
||||
@@ -676,4 +686,34 @@ hal_tx_vdev_mcast_ctrl_set(hal_soc_handle_t hal_soc_hdl,
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hal_tx_vdev_mismatch_routing_set - set vdev mismatch exception routing
|
||||
* @hal_soc: HAL SoC context
|
||||
* @config: HAL_TX_VDEV_MISMATCH_TQM_NOTIFY - route via TQM
|
||||
* HAL_TX_VDEV_MISMATCH_FW_NOTIFY - route via FW
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void
|
||||
hal_tx_vdev_mismatch_routing_set(hal_soc_handle_t hal_soc_hdl,
|
||||
enum hal_tx_vdev_mismatch_notify config)
|
||||
{
|
||||
struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
|
||||
uint32_t reg_addr, reg_val = 0;
|
||||
uint32_t val = 0;
|
||||
|
||||
reg_addr = HWIO_TCL_R0_CMN_CONFIG_ADDR(MAC_TCL_REG_REG_BASE);
|
||||
|
||||
val = HAL_REG_READ(hal_soc, reg_addr);
|
||||
|
||||
/* reset the corresponding bits in register */
|
||||
val &= (~(HWIO_TCL_R0_CMN_CONFIG_VDEVID_MISMATCH_EXCEPTION_BMSK));
|
||||
|
||||
/* set config value */
|
||||
reg_val = val | (config <<
|
||||
HWIO_TCL_R0_CMN_CONFIG_VDEVID_MISMATCH_EXCEPTION_SHFT);
|
||||
|
||||
HAL_REG_WRITE(hal_soc, reg_addr, reg_val);
|
||||
}
|
||||
#endif /* _HAL_BE_TX_H_ */
|
||||
|
Reference in New Issue
Block a user