From 50c9ab56a1fd5d9524d9a85017c3b6970522efc7 Mon Sep 17 00:00:00 2001 From: Prakash Manjunathappa Date: Tue, 11 Apr 2023 23:22:43 -0700 Subject: [PATCH] qcacmn: Do not subscribe for MC/BC frames for kiwi/peach MC/BC frames are routed to FW ring based on routing config for MC/BC data as SRC: FW2RXDMA and DST: RXDMA2DFW. Data offload features in FW will take care of routing the MC/BC frames to FW in both active and low power modes. Make this change only for kiwi/peach using hal ops. Change-Id: Id8665261a512c9db3e808f95082ff82b47f01ade CRs-Fixed: 3464036 --- dp/wifi3.0/be/dp_be.c | 8 ++++++-- hal/wifi3.0/be/hal_be_generic_api.c | 13 +++++++++++++ hal/wifi3.0/hal_internal.h | 1 + hal/wifi3.0/hal_rx.h | 14 ++++++++++++++ hal/wifi3.0/kiwi/hal_kiwi.c | 13 +++++++++++++ 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index 975b87bfa7..c8ac15dee2 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -1429,8 +1429,10 @@ dp_rxdma_ring_sel_cfg_be(struct dp_soc *soc) htt_tlv_filter.fp_mgmt_filter = 0; htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_BA_REQ; htt_tlv_filter.fp_data_filter = (FILTER_DATA_UCAST | - FILTER_DATA_MCAST | FILTER_DATA_DATA); + htt_tlv_filter.fp_data_filter |= + hal_rx_en_mcast_fp_data_filter(soc->hal_soc) ? + FILTER_DATA_MCAST : 0; htt_tlv_filter.mo_mgmt_filter = 0; htt_tlv_filter.mo_ctrl_filter = 0; htt_tlv_filter.mo_data_filter = 0; @@ -1533,8 +1535,10 @@ dp_rxdma_ring_sel_cfg_be(struct dp_soc *soc) htt_tlv_filter.fp_mgmt_filter = 0; htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_BA_REQ; htt_tlv_filter.fp_data_filter = (FILTER_DATA_UCAST | - FILTER_DATA_MCAST | FILTER_DATA_DATA); + htt_tlv_filter.fp_data_filter |= + hal_rx_en_mcast_fp_data_filter(soc->hal_soc) ? + FILTER_DATA_MCAST : 0; htt_tlv_filter.mo_mgmt_filter = 0; htt_tlv_filter.mo_ctrl_filter = 0; htt_tlv_filter.mo_data_filter = 0; diff --git a/hal/wifi3.0/be/hal_be_generic_api.c b/hal/wifi3.0/be/hal_be_generic_api.c index 701bc679e1..554a6e5028 100644 --- a/hal/wifi3.0/be/hal_be_generic_api.c +++ b/hal/wifi3.0/be/hal_be_generic_api.c @@ -453,6 +453,17 @@ void hal_rx_buf_cookie_rbm_get_be(uint32_t *buf_addr_info_hdl, (hal_ring_desc_t)buf_addr_info); } +/** + * hal_rx_en_mcast_fp_data_filter_generic_be() - Is mcast filter pass enabled + * + * Return: true default for BE WIN + */ +static inline +bool hal_rx_en_mcast_fp_data_filter_generic_be(void) +{ + return true; +} + /** * hal_rxdma_buff_addr_info_set_be() - set the buffer_addr_info of the * rxdma ring entry. @@ -973,4 +984,6 @@ void hal_hw_txrx_default_ops_attach_be(struct hal_soc *hal_soc) hal_set_reo_ent_desc_reo_dest_ind_be; hal_soc->ops->hal_get_reo_ent_desc_qdesc_addr = hal_get_reo_ent_desc_qdesc_addr_be; + hal_soc->ops->hal_rx_en_mcast_fp_data_filter = + hal_rx_en_mcast_fp_data_filter_generic_be; } diff --git a/hal/wifi3.0/hal_internal.h b/hal/wifi3.0/hal_internal.h index d893811954..0bd69fc53b 100644 --- a/hal/wifi3.0/hal_internal.h +++ b/hal/wifi3.0/hal_internal.h @@ -1455,6 +1455,7 @@ struct hal_hw_txrx_ops { uint32_t (*hal_tx_get_num_ppe_vp_search_idx_tbl_entries)( hal_soc_handle_t hal_soc_hdl); uint32_t (*hal_tx_ring_halt_get)(hal_soc_handle_t hal_soc_hdl); + bool (*hal_rx_en_mcast_fp_data_filter)(void); }; /** diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index 907e30cf32..29a3dc7b01 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -3126,4 +3126,18 @@ hal_get_tsf_time(hal_soc_handle_t hal_soc_hdl, uint32_t tsf_id, hal_soc->ops->hal_get_tsf_time(hal_soc_hdl, tsf_id, mac_id, tsf, tsf_sync_soc_time); } + +/** + * hal_rx_en_mcast_fp_data_filter() - Is mcast filter pass enabled + * @hal_soc_hdl: HAL soc handle + * + * Return: false for BE MCC, true for WIN + */ +static inline +bool hal_rx_en_mcast_fp_data_filter(hal_soc_handle_t hal_soc_hdl) +{ + struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl; + + return hal_soc->ops->hal_rx_en_mcast_fp_data_filter(); +} #endif /* _HAL_RX_H */ diff --git a/hal/wifi3.0/kiwi/hal_kiwi.c b/hal/wifi3.0/kiwi/hal_kiwi.c index 836f41279d..efd635f236 100644 --- a/hal/wifi3.0/kiwi/hal_kiwi.c +++ b/hal/wifi3.0/kiwi/hal_kiwi.c @@ -2012,6 +2012,17 @@ static QDF_STATUS hal_rx_reo_ent_get_src_link_id_kiwi(hal_rxdma_desc_t rx_desc, return QDF_STATUS_SUCCESS; } +/** + * hal_rx_en_mcast_fp_data_filter_kiwi() - Is mcast filter pass enabled + * + * Return: false for BE MCC + */ +static inline +bool hal_rx_en_mcast_fp_data_filter_kiwi(void) +{ + return false; +} + #ifdef QCA_WIFI_KIWI_V2 /** * hal_srng_dst_hw_init_misc_1_kiwi() - Function to initialize MISC_1 register @@ -2343,6 +2354,8 @@ static void hal_hw_txrx_ops_attach_kiwi(struct hal_soc *hal_soc) #ifdef FEATURE_DIRECT_LINK hal_soc->ops->hal_srng_set_msi_config = hal_srng_set_msi_config; #endif + hal_soc->ops->hal_rx_en_mcast_fp_data_filter = + hal_rx_en_mcast_fp_data_filter_kiwi; }; struct hal_hw_srng_config hw_srng_table_kiwi[] = {