|
@@ -6594,6 +6594,7 @@ dp_soc_attach_target_wifi3(struct cdp_soc_t *cdp_soc)
|
|
|
{
|
|
|
struct dp_soc *soc = (struct dp_soc *)cdp_soc;
|
|
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
|
+ struct hal_reo_params reo_params;
|
|
|
|
|
|
htt_soc_attach_target(soc->htt_handle);
|
|
|
|
|
@@ -6649,6 +6650,39 @@ dp_soc_attach_target_wifi3(struct cdp_soc_t *cdp_soc)
|
|
|
/* initialize work queue for stats processing */
|
|
|
qdf_create_work(0, &soc->htt_stats.work, htt_t2h_stats_handler, soc);
|
|
|
|
|
|
+ wlan_cfg_soc_update_tgt_params(soc->wlan_cfg_ctx,
|
|
|
+ soc->ctrl_psoc);
|
|
|
+ /* Setup HW REO */
|
|
|
+ qdf_mem_zero(&reo_params, sizeof(reo_params));
|
|
|
+
|
|
|
+ if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
|
|
|
+ /*
|
|
|
+ * Reo ring remap is not required if both radios
|
|
|
+ * are offloaded to NSS
|
|
|
+ */
|
|
|
+
|
|
|
+ if (soc->arch_ops.reo_remap_config(soc, &reo_params.remap0,
|
|
|
+ &reo_params.remap1,
|
|
|
+ &reo_params.remap2))
|
|
|
+ reo_params.rx_hash_enabled = true;
|
|
|
+ else
|
|
|
+ reo_params.rx_hash_enabled = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * set the fragment destination ring
|
|
|
+ */
|
|
|
+ dp_reo_frag_dst_set(soc, &reo_params.frag_dst_ring);
|
|
|
+
|
|
|
+ if (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx))
|
|
|
+ reo_params.alt_dst_ind_0 = REO_REMAP_RELEASE;
|
|
|
+
|
|
|
+ hal_reo_setup(soc->hal_soc, &reo_params, 1);
|
|
|
+
|
|
|
+ hal_reo_set_err_dst_remap(soc->hal_soc);
|
|
|
+
|
|
|
+ soc->features.pn_in_reo_dest = hal_reo_enable_pn_in_dest(soc->hal_soc);
|
|
|
+
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
@@ -8039,8 +8073,10 @@ static inline bool dp_is_vdev_subtype_p2p(struct dp_vdev *vdev)
|
|
|
* Return: None
|
|
|
*/
|
|
|
static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev,
|
|
|
+ struct cdp_peer_setup_info *setup_info,
|
|
|
enum cdp_host_reo_dest_ring *reo_dest,
|
|
|
- bool *hash_based)
|
|
|
+ bool *hash_based,
|
|
|
+ uint8_t *lmac_peer_id_msb)
|
|
|
{
|
|
|
struct dp_soc *soc;
|
|
|
struct dp_pdev *pdev;
|
|
@@ -8088,10 +8124,15 @@ static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev,
|
|
|
* Return: None
|
|
|
*/
|
|
|
static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev,
|
|
|
+ struct cdp_peer_setup_info *setup_info,
|
|
|
enum cdp_host_reo_dest_ring *reo_dest,
|
|
|
- bool *hash_based)
|
|
|
+ bool *hash_based,
|
|
|
+ uint8_t *lmac_peer_id_msb)
|
|
|
{
|
|
|
- dp_vdev_get_default_reo_hash(vdev, reo_dest, hash_based);
|
|
|
+ struct dp_soc *soc = vdev->pdev->soc;
|
|
|
+
|
|
|
+ soc->arch_ops.peer_get_reo_hash(vdev, setup_info, reo_dest, hash_based,
|
|
|
+ lmac_peer_id_msb);
|
|
|
}
|
|
|
#endif /* IPA_OFFLOAD */
|
|
|
|
|
@@ -8134,7 +8175,9 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|
|
/* save vdev related member in case vdev freed */
|
|
|
vdev_opmode = vdev->opmode;
|
|
|
pdev = vdev->pdev;
|
|
|
- dp_peer_setup_get_reo_hash(vdev, &reo_dest, &hash_based);
|
|
|
+ dp_peer_setup_get_reo_hash(vdev, setup_info,
|
|
|
+ &reo_dest, &hash_based,
|
|
|
+ &lmac_peer_id_msb);
|
|
|
|
|
|
dp_info("pdev: %d vdev :%d opmode:%u hash-based-steering:%d default-reo_dest:%u",
|
|
|
pdev->pdev_id, vdev->vdev_id,
|
|
@@ -14879,7 +14922,6 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
|
|
{
|
|
|
struct htt_soc *htt_soc = (struct htt_soc *)soc->htt_handle;
|
|
|
bool is_monitor_mode = false;
|
|
|
- struct hal_reo_params reo_params;
|
|
|
uint8_t i;
|
|
|
int num_dp_msi;
|
|
|
struct dp_mon_ops *mon_ops;
|
|
@@ -15004,23 +15046,6 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
|
|
if (soc->disable_mac1_intr)
|
|
|
dp_soc_disable_unused_mac_intr_mask(soc, 0x1);
|
|
|
|
|
|
- /* Setup HW REO */
|
|
|
- qdf_mem_zero(&reo_params, sizeof(reo_params));
|
|
|
-
|
|
|
- if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
|
|
|
- /*
|
|
|
- * Reo ring remap is not required if both radios
|
|
|
- * are offloaded to NSS
|
|
|
- */
|
|
|
-
|
|
|
- if (dp_reo_remap_config(soc, &reo_params.remap0,
|
|
|
- &reo_params.remap1,
|
|
|
- &reo_params.remap2))
|
|
|
- reo_params.rx_hash_enabled = true;
|
|
|
- else
|
|
|
- reo_params.rx_hash_enabled = false;
|
|
|
- }
|
|
|
-
|
|
|
/* setup the global rx defrag waitlist */
|
|
|
TAILQ_INIT(&soc->rx.defrag.waitlist);
|
|
|
soc->rx.defrag.timeout_ms =
|
|
@@ -15030,20 +15055,6 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
|
|
wlan_cfg_get_defrag_timeout_check(soc->wlan_cfg_ctx);
|
|
|
qdf_spinlock_create(&soc->rx.defrag.defrag_lock);
|
|
|
|
|
|
- /*
|
|
|
- * set the fragment destination ring
|
|
|
- */
|
|
|
- dp_reo_frag_dst_set(soc, &reo_params.frag_dst_ring);
|
|
|
-
|
|
|
- if (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx))
|
|
|
- reo_params.alt_dst_ind_0 = REO_REMAP_RELEASE;
|
|
|
-
|
|
|
- hal_reo_setup(soc->hal_soc, &reo_params, 1);
|
|
|
-
|
|
|
- hal_reo_set_err_dst_remap(soc->hal_soc);
|
|
|
-
|
|
|
- soc->features.pn_in_reo_dest = hal_reo_enable_pn_in_dest(soc->hal_soc);
|
|
|
-
|
|
|
mon_ops = dp_mon_ops_get(soc);
|
|
|
if (mon_ops && mon_ops->mon_soc_init)
|
|
|
mon_ops->mon_soc_init(soc);
|