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
|
#define DP_AST_AGING_TIMER_DEFAULT_MS 5000
|
||||||
|
|
||||||
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
|
#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] = {
|
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},
|
{.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},
|
{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
|
#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] = {
|
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},
|
{.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);
|
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;
|
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_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);
|
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->bank_id = dp_tx_get_bank_profile(be_soc, be_vdev);
|
||||||
be_vdev->vdev_id_check_en = false;
|
|
||||||
|
|
||||||
if (be_vdev->bank_id == DP_BE_INVALID_BANK_ID) {
|
if (be_vdev->bank_id == DP_BE_INVALID_BANK_ID) {
|
||||||
QDF_BUG(0);
|
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);
|
dp_tx_inspect_handler(soc, vdev, tx_desc, status);
|
||||||
break;
|
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:
|
default:
|
||||||
dp_tx_comp_debug("Invalid HTT tx_status %d\n",
|
dp_tx_comp_alert("Invalid HTT tx_status %d\n",
|
||||||
tx_status);
|
tx_status);
|
||||||
break;
|
goto release_tx_desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_HTT_COMP);
|
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
|
#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,
|
uint32_t (*dp_service_near_full_srngs)(struct dp_soc *soc,
|
||||||
struct dp_intr *int_ctx,
|
struct dp_intr *int_ctx,
|
||||||
uint32_t dp_budget);
|
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 */
|
/* Control Arch Ops */
|
||||||
QDF_STATUS (*txrx_set_vdev_param)(struct dp_soc *soc,
|
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,
|
int (*dp_srng_test_and_update_nf_params)(struct dp_soc *soc,
|
||||||
struct dp_srng *dp_srng,
|
struct dp_srng *dp_srng,
|
||||||
int *max_reap_limit);
|
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,
|
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
|
* Structures
|
||||||
* ---------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------
|
||||||
@@ -676,4 +686,34 @@ hal_tx_vdev_mcast_ctrl_set(hal_soc_handle_t hal_soc_hdl,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#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_ */
|
#endif /* _HAL_BE_TX_H_ */
|
||||||
|
Reference in New Issue
Block a user