diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
index 21c14950095e..2e9b565f592e 100644
--- a/components/mlme/core/src/wlan_mlme_main.c
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -1470,6 +1470,7 @@ static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
{
lfr->lfr3_roaming_offload =
cfg_get(psoc, CFG_LFR3_ROAMING_OFFLOAD);
+ lfr->enable_self_bss_roam = cfg_get(psoc, CFG_LFR3_ENABLE_SELF_BSS_ROAM);
lfr->enable_roam_reason_vsie =
cfg_get(psoc, CFG_ENABLE_ROAM_REASON_VSIE);
lfr->enable_disconnect_roam_offload =
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
index 2299c7daf875..fbf30d2ad318 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
@@ -2148,6 +2148,28 @@
1, \
"enable roam offload")
+/*
+ *
+ * enable_self_bss_roam - enable/disable roaming to self bss
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * This INI is used to enable/disable roaming to already connected BSSID
+ *
+ * Related: None
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_LFR3_ENABLE_SELF_BSS_ROAM CFG_INI_BOOL( \
+ "enable_self_bss_roam", \
+ 0, \
+ "enable self bss roam")
+
/*
*
* enable_disconnect_roam_offload - Enable/Disable emergency roaming during
@@ -2414,6 +2436,7 @@
#define ROAM_OFFLOAD_ALL \
CFG(CFG_LFR3_ROAMING_OFFLOAD) \
+ CFG(CFG_LFR3_ENABLE_SELF_BSS_ROAM) \
CFG(CFG_LFR_ENABLE_DISCONNECT_ROAM) \
CFG(CFG_LFR_ENABLE_IDLE_ROAM) \
CFG(CFG_LFR_IDLE_ROAM_RSSI_DELTA) \
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index afb73cc59d84..dbb225a45d97 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -1439,6 +1439,7 @@ struct bss_load_trigger {
* @mawc_roam_enabled: Enable/Disable MAWC during roaming
* @enable_fast_roam_in_concurrency:Enable LFR roaming on STA during concurrency
* @lfr3_roaming_offload: Enable/disable roam offload feature
+ * @enable_self_bss_roam: enable roaming to connected BSSID
* @enable_disconnect_roam_offload: enable disassoc/deauth roam scan.
* @enable_idle_roam: flag to enable/disable idle roam in fw
* @idle_roam_rssi_delta: rssi delta of connected ap which is used to
@@ -1548,6 +1549,7 @@ struct wlan_mlme_lfr_cfg {
bool enable_fast_roam_in_concurrency;
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
bool lfr3_roaming_offload;
+ bool enable_self_bss_roam;
bool enable_disconnect_roam_offload;
bool enable_idle_roam;
uint32_t idle_roam_rssi_delta;
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 7ecc26cacf45..85d2690716a5 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -2229,6 +2229,7 @@ struct roam_offload_scan_req {
eSirDFSRoamScanMode allowDFSChannelRoam;
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
uint8_t roam_offload_enabled;
+ bool enable_self_bss_roam;
uint8_t PSK_PMK[SIR_ROAM_SCAN_PSK_SIZE];
uint32_t pmk_len;
uint8_t Prefer5GHz;
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index bcb8205f20fb..e70663cbac05 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -17473,6 +17473,8 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
if (!req_buf->roam_offload_enabled)
return;
+ req_buf->enable_self_bss_roam =
+ mac_ctx->mlme_cfg->lfr.enable_self_bss_roam;
req_buf->roam_triggers.vdev_id = session->vdev_id;
req_buf->roam_triggers.trigger_bitmap =
mlme_get_roam_trigger_bitmap(mac_ctx->psoc, session->vdev_id);
diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c
index 83e2e6abdf57..f59ff1cf8d4d 100644
--- a/core/wma/src/wma_scan_roam.c
+++ b/core/wma/src/wma_scan_roam.c
@@ -336,6 +336,8 @@ static void wma_roam_scan_offload_set_params(
(roam_req->ConnectedNetwork.authentication,
roam_req->ConnectedNetwork.encryption);
+ params->disable_self_roam =
+ !roam_req->enable_self_bss_roam;
params->roam_offload_enabled = roam_req->roam_offload_enabled;
params->roam_offload_params.ho_delay_for_rx =
roam_req->ho_delay_for_rx;