diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
index e81c69f04725..918299506cc6 100644
--- a/components/mlme/core/src/wlan_mlme_main.c
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -1718,6 +1718,7 @@ static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
lfr->roam_scan_period_after_inactivity =
cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
lfr->fw_akm_bitmap = 0;
+ lfr->enable_ft_im_roaming = cfg_get(psoc, CFG_FT_IM_ROAMING);
mlme_init_roam_offload_cfg(psoc, lfr);
mlme_init_ese_cfg(psoc, lfr);
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
index fbf30d2ad318..ee555727cbef 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
@@ -2599,6 +2599,31 @@
0, \
"Config roam scan policy")
+/*
+ *
+ * enable_ft_im_roaming - FW needs to perform FT initial moiblity association
+ * instead of FT roaming for deauth roam trigger
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * This ini is used to FT roaming for deauth roam trigger behavior from HOST
+ * 0 - To disable FT-IM
+ * 1 - To enable FT-IM
+ *
+ * Related: None
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_FT_IM_ROAMING CFG_INI_BOOL( \
+ "enable_ft_im_roaming", \
+ 1, \
+ "FT roaming for deauth roam trigger")
+
/*
*
* roam_scan_inactivity_time - Device inactivity monitoring time in
@@ -2805,6 +2830,7 @@
CFG(CFG_LFR_ROAM_FORCE_RSSI_TRIGGER) \
CFG(CFG_ROAM_SCAN_SCAN_POLICY) \
CFG(CFG_ROAM_SCAN_INACTIVITY_TIME) \
+ CFG(CFG_FT_IM_ROAMING) \
CFG(CFG_ROAM_INACTIVE_COUNT) \
CFG(CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD) \
CFG(CFG_BSS_LOAD_TRIG_5G_RSSI_THRES) \
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index 29b79cc02369..43837ac9b324 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -1532,6 +1532,7 @@ struct bss_load_trigger {
* @enable_adaptive_11r Flag to check if adaptive 11r ini is enabled
* @tgt_adaptive_11r_cap: Flag to check if target supports adaptive
* 11r
+ * @enable_ft_im_roaming: Flag to enable/disable FT-IM roaming
* @roam_scan_home_away_time: The home away time to firmware
* @roam_scan_n_probes: The number of probes to be sent for firmware roaming
* @delay_before_vdev_stop:Wait time for tx complete before vdev stop
@@ -1642,6 +1643,7 @@ struct wlan_mlme_lfr_cfg {
bool enable_adaptive_11r;
bool tgt_adaptive_11r_cap;
#endif
+ bool enable_ft_im_roaming;
uint16_t roam_scan_home_away_time;
uint32_t roam_scan_n_probes;
uint8_t delay_before_vdev_stop;
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 05938c7b1a0d..da3e6677675b 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -2236,7 +2236,7 @@ struct roam_offload_scan_req {
struct pmkid_mode_bits pmkid_modes;
bool is_adaptive_11r_connection;
bool is_sae_single_pmk;
-
+ bool enable_ft_im_roaming;
/* Idle/Disconnect roam parameters */
struct wmi_idle_roam_params idle_roam_params;
struct wmi_disconnect_roam_params disconnect_roam_params;
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index ded013502a4e..d751c7d03e33 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -16891,6 +16891,8 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
mac_ctx->mlme_cfg->lfr.roam_force_rssi_trigger);
csr_update_roam_req_adaptive_11r(session, mac_ctx, req_buf);
+ req_buf->enable_ft_im_roaming =
+ mac_ctx->mlme_cfg->lfr.enable_ft_im_roaming;
/* fill bss load triggered roam related configs */
req_buf->bss_load_trig_enabled =
mac_ctx->mlme_cfg->lfr.bss_load_trig.enabled;
diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c
index 8609872a2c52..52cec90d323c 100644
--- a/core/wma/src/wma_scan_roam.c
+++ b/core/wma/src/wma_scan_roam.c
@@ -367,6 +367,7 @@ static void wma_roam_scan_offload_set_params(
params->rct_validity_timer = roam_req->rct_validity_timer;
params->is_adaptive_11r = roam_req->is_adaptive_11r_connection;
params->is_sae_same_pmk = roam_req->is_sae_single_pmk;
+ params->enable_ft_im_roaming = roam_req->enable_ft_im_roaming;
wma_debug("qos_caps %d, qos_enabled %d, ho_delay_for_rx %d, roam_scan_mode %d roam_preauth: retrycount %d, no_ack_timeout %d SAE Single PMK:%d",
params->roam_offload_params.qos_caps,
params->roam_offload_params.qos_enabled,