diff --git a/drivers/platform/msm/Android.bp b/drivers/platform/msm/Android.bp
index 65a7d17..b49332b 100644
--- a/drivers/platform/msm/Android.bp
+++ b/drivers/platform/msm/Android.bp
@@ -32,3 +32,9 @@
     vendor: true,
     recovery_available: true
 }
+
+cc_library_headers {
+    name: "qti_ipa_kernel_headers",
+    vendor: true,
+    recovery_available: true
+}
diff --git a/drivers/platform/msm/gsi/gsi.c b/drivers/platform/msm/gsi/gsi.c
index 2145042..10cd2d7 100644
--- a/drivers/platform/msm/gsi/gsi.c
+++ b/drivers/platform/msm/gsi/gsi.c
@@ -3612,7 +3612,7 @@
 	}
 
 	if (ctx->state == GSI_CHAN_STATE_STOP_IN_PROC) {
-		GSIERR("chan=%lu busy try again\n", chan_hdl);
+		GSIDBG("chan=%lu busy try again\n", chan_hdl);
 		res = -GSI_STATUS_AGAIN;
 		goto free_lock;
 	}
diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c b/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c
index d07a5d0..af95450 100644
--- a/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c
+++ b/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include <linux/debugfs.h>
@@ -762,8 +763,6 @@
 
 	/* fetch iface handle from header */
 	mux_hdr = (struct ipa_gsb_mux_hdr *)skb->data;
-	/* change to host order */
-	*(u32 *)mux_hdr = ntohl(*(u32 *)mux_hdr);
 	hdl = mux_hdr->iface_hdl;
 	if ((hdl < 0) || (hdl >= MAX_SUPPORTED_IFACE) ||
 		!ipa_gsb_ctx->iface[hdl]) {
@@ -1215,9 +1214,9 @@
 	/* add 4 byte header for mux */
 	mux_hdr = (struct ipa_gsb_mux_hdr *)skb_push(skb,
 		sizeof(struct ipa_gsb_mux_hdr));
+	memset(mux_hdr, 0, sizeof(struct ipa_gsb_mux_hdr));
 	mux_hdr->iface_hdl = (u8)hdl;
-	/* change to network order */
-	*(u32 *)mux_hdr = htonl(*(u32 *)mux_hdr);
+	mux_hdr->qmap_id = (u8)ipa3_ctx->ep[ipa_gsb_ctx->prod_hdl].cfg.meta.qmap_id;
 
 	ret = ipa_tx_dp(IPA_CLIENT_ODU_PROD, skb, metadata);
 	if (ret) {
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c
index 24f1923..e6cce06 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c
@@ -8282,8 +8282,8 @@
 	if (ipa3_ctx->gsi_msi_addr)
 		ipa_gsi_map_unmap_gsi_msi_addr(true);
 
-	if(!ipa_spearhead_stats_init())
-		IPADBG("Fail to init spearhead ipa lnx module");
+	if(!ipa_tlpd_stats_init())
+		IPADBG("Fail to init tlpd ipa lnx module");
 
 	pr_info("IPA driver initialization was successful.\n");
 #if IS_ENABLED(CONFIG_QCOM_VA_MINIDUMP)
@@ -9841,6 +9841,7 @@
 	ipa3_ctx->free_page_task_scheduled = false;
 
 	mutex_init(&ipa3_ctx->app_clock_vote.mutex);
+	mutex_init(&ipa3_ctx->ssr_lock);
 	ipa3_ctx->is_modem_up = false;
 	ipa3_ctx->mhi_ctrl_state = IPA_MHI_CTRL_NOT_SETUP;
 
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c
index 37c466b..013aa9c 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c
@@ -89,6 +89,11 @@
 				(ep->client == IPA_CLIENT_USB_CONS)) {
 			holb_cfg.tmr_val = IPA_HOLB_TMR_VAL_4_5;
 			holb_cfg.en = IPA_HOLB_TMR_EN;
+		} else if ((ipa3_ctx->ipa_hw_type >= IPA_HW_v5_5) &&
+				(ep->client == IPA_CLIENT_APPS_WAN_CONS ||
+				ep->client == IPA_CLIENT_APPS_WAN_COAL_CONS)) {
+			holb_cfg.tmr_val = IPA_HOLB_TMR_VAL_4_5;
+			holb_cfg.en = IPA_HOLB_TMR_EN;
 		} else {
 			holb_cfg.en = IPA_HOLB_TMR_DIS;
 			holb_cfg.tmr_val = 0;
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
index 4f1750b..ac14f07 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
@@ -1613,6 +1613,11 @@
 	int nbytes;
 	int cnt = 0;
 
+	if (!ipa3_odl_ctx) {
+                IPADBG("ODL stats not supported\n");
+                return 0;
+	}
+
 	nbytes = scnprintf(dbg_buff, IPA_MAX_MSG_LEN,
 			"ODL received pkt =%u\n"
 			"ODL processed pkt to DIAG=%u\n"
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
index ebae63a..56ddeb9 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
@@ -2742,8 +2742,8 @@
 			goto fail_kmem_cache_alloc;
 		rx_pkt = ipa3_alloc_rx_pkt_page(GFP_KERNEL, true, sys);
 		if (unlikely(!rx_pkt)) {
-			IPAERR("ipa3_alloc_rx_pkt_page fails\n");
-			break;
+			IPAERR_RL("ipa3_alloc_rx_pkt_page fails\n");
+			goto fail_kmem_cache_alloc;
 		}
 		rx_pkt->sys = sys;
 		sys->repl->cache[curr] = rx_pkt;
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c b/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c
index b255adb..2d8328c 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c
@@ -1876,6 +1876,19 @@
 				&reg_idx);
 			pipe_bitmask[reg_idx] |= mask;
 		}
+
+		/* Add drop stats for WAN & WAN_COAL if IPA_HW >=5.5 */
+		if (ipa3_ctx->ipa_hw_type >= IPA_HW_v5_5) {
+			mask = ipa_hw_stats_get_ep_bit_n_idx(
+				IPA_CLIENT_APPS_WAN_CONS,
+				&reg_idx);
+			pipe_bitmask[reg_idx] |= mask;
+
+			mask = ipa_hw_stats_get_ep_bit_n_idx(
+				IPA_CLIENT_APPS_WAN_COAL_CONS,
+				&reg_idx);
+			pipe_bitmask[reg_idx] |= mask;
+		}
 	}
 
 	/* Currently we have option to enable drop stats using debugfs.
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
index b603378..9f1ea0b 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
@@ -2594,6 +2594,7 @@
 	struct ipa3_page_recycle_stats prev_default_recycle_stats;
 	struct ipa3_page_recycle_stats prev_low_lat_data_recycle_stats;
 	struct mutex recycle_stats_collection_lock;
+	struct mutex ssr_lock;
 };
 
 struct ipa3_plat_drv_res {
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_stats.c b/drivers/platform/msm/ipa/ipa_v3/ipa_stats.c
index 43f48a9..085e1a3 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_stats.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_stats.c
@@ -51,7 +51,8 @@
 static struct class *class;
 static dev_t device;
 
-struct ipa_lnx_stats_spearhead_ctx ipa_lnx_agent_ctx;
+struct ipa_lnx_stats_tlpd_ctx ipa_lnx_agent_ctx;
+static DEFINE_MUTEX(ipa_lnx_ctx_mutex);
 
 struct wlan_intf_mode_cnt {
 	u8 ap_cnt;
@@ -125,52 +126,6 @@
 	return 0;
 }
 
-static bool ipa_stats_struct_mismatch()
-{
-	if (IPA_LNX_EACH_INST_ALLOC_INFO_STRUCT_LEN_INT != IPA_LNX_EACH_INST_ALLOC_INFO_STRUCT_LEN ||
-		IPA_LNX_STATS_ALL_INFO_STRUCT_LEN_INT != IPA_LNX_STATS_ALL_INFO_STRUCT_LEN ||
-		IPA_LNX_STATS_SPEARHEAD_CTX_STRUCT_LEN_INT != IPA_LNX_STATS_SPEARHEAD_CTX_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_GET_ALLOC_INFO structure size mismatch\n");
-			return true;
-	} else if (IPA_LNX_CONSOLIDATED_STATS_STRUCT_LEN_INT != IPA_LNX_CONSOLIDATED_STATS_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_GET_CONSOLIDATED_STATS structure size mismatch\n");
-			return true;
-	} else if (IPA_LNX_PG_RECYCLE_STATS_STRUCT_LEN_INT != IPA_LNX_PG_RECYCLE_STATS_STRUCT_LEN ||
-		IPA_LNX_EXCEPTION_STATS_STRUCT_LEN_INT != IPA_LNX_EXCEPTION_STATS_STRUCT_LEN ||
-		IPA_LNX_ODL_EP_STATS_STRUCT_LEN_INT != IPA_LNX_ODL_EP_STATS_STRUCT_LEN ||
-		IPA_LNX_HOLB_DISCARD_STATS_STRUCT_LEN_INT != IPA_LNX_HOLB_DISCARD_STATS_STRUCT_LEN ||
-		IPA_LNX_HOLB_MONITOR_STATS_STRUCT_LEN_INT != IPA_LNX_HOLB_MONITOR_STATS_STRUCT_LEN ||
-		IPA_LNX_HOLB_DROP_AND_MON_STATS_STRUCT_LEN_INT != IPA_LNX_HOLB_DROP_AND_MON_STATS_STRUCT_LEN ||
-		IPA_LNX_GENERIC_STATS_STRUCT_LEN_INT != IPA_LNX_GENERIC_STATS_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_GENERIC_STATS structure size mismatch\n");
-			return true;
-	} else if (IPA_LNX_PM_CLIENT_STATS_STRUCT_LEN_INT != IPA_LNX_PM_CLIENT_STATS_STRUCT_LEN ||
-		IPA_LNX_CLOCK_STATS_STRUCT_LEN_INT != IPA_LNX_CLOCK_STATS_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_CLOCK_STATS structure size mismatch\n");
-			return true;
-	} else if (IPA_LNX_GSI_RX_DEBUG_STATS_STRUCT_LEN_INT != IPA_LNX_GSI_RX_DEBUG_STATS_STRUCT_LEN ||
-		IPA_LNX_GSI_TX_DEBUG_STATS_STRUCT_LEN_INT != IPA_LNX_GSI_TX_DEBUG_STATS_STRUCT_LEN ||
-		IPA_LNX_GSI_DEBUG_STATS_STRUCT_LEN_INT != IPA_LNX_GSI_DEBUG_STATS_STRUCT_LEN ||
-		IPA_LNX_PIPE_INFO_STATS_STRUCT_LEN_INT != IPA_LNX_PIPE_INFO_STATS_STRUCT_LEN ||
-		IPA_LNX_WLAN_INSTANCE_INFO_STRUCT_LEN_INT != IPA_LNX_WLAN_INSTANCE_INFO_STRUCT_LEN ||
-		IPA_LNX_WLAN_INST_STATS_STRUCT_LEN_INT != IPA_LNX_WLAN_INST_STATS_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_WLAN_INST_STATS structure size mismatch\n");
-			return true;
-	} else if (IPA_LNX_ETH_INSTANCE_INFO_STRUCT_LEN_INT != IPA_LNX_ETH_INSTANCE_INFO_STRUCT_LEN ||
-		IPA_LNX_ETH_INST_STATS_STRUCT_LEN_INT != IPA_LNX_ETH_INST_STATS_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_ETH_INST_STATS structure size mismatch\n");
-			return true;
-	} else if (IPA_LNX_USB_INSTANCE_INFO_STRUCT_LEN_INT != IPA_LNX_USB_INSTANCE_INFO_STRUCT_LEN ||
-		IPA_LNX_USB_INST_STATS_STRUCT_LEN_INT != IPA_LNX_USB_INST_STATS_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_USB_INST_STATS structure size mismatch\n");
-			return true;
-	} else if (IPA_LNX_MHIP_INSTANCE_INFO_STRUCT_LEN_INT != IPA_LNX_MHIP_INSTANCE_INFO_STRUCT_LEN ||
-		IPA_LNX_MHIP_INST_STATS_STRUCT_LEN_INT != IPA_LNX_MHIP_INST_STATS_STRUCT_LEN) {
-			IPA_STATS_ERR("IPA_LNX_CMD_MHIP_INST_STATS structure size mismatch\n");
-			return true;
-	} else return false;
-}
-
 static int ipa_get_generic_stats(unsigned long arg)
 {
 	int res;
@@ -1520,14 +1475,14 @@
 	int eth_instance_id;
 
 	if (copy_from_user(&ipa_lnx_agent_ctx, u64_to_user_ptr((u64) arg),
-		sizeof(struct ipa_lnx_stats_spearhead_ctx))) {
+		sizeof(struct ipa_lnx_stats_tlpd_ctx))) {
 		IPA_STATS_ERR("copy from user failed");
 		return -EFAULT;
 	}
 
 	/* For generic stats */
 	if (ipa_lnx_agent_ctx.log_type_mask &
-		SPRHD_IPA_LOG_TYPE_GENERIC_STATS) {
+		TLPD_IPA_LOG_TYPE_GENERIC_STATS) {
 		for (i = 0; i < IPA_CLIENT_MAX; i++) {
 			int ep_idx = ipa3_get_ep_mapping(i);
 
@@ -1550,12 +1505,12 @@
 	}
 
 	/* For clock stats */
-	if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_CLOCK_STATS)
+	if (ipa_lnx_agent_ctx.log_type_mask & TLPD_IPA_LOG_TYPE_CLOCK_STATS)
 		ipa_lnx_agent_ctx.alloc_info.num_pm_clients =
 			ipa3_get_max_num_pipes();
 
 	/* For WLAN instance */
-	if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_WLAN_STATS) {
+	if (ipa_lnx_agent_ctx.log_type_mask & TLPD_IPA_LOG_TYPE_WLAN_STATS) {
 		ipa_ep_idx_tx = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_CONS);
 		ipa_ep_idx_rx = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_PROD);
 		if ((ipa_ep_idx_tx == -1) || (ipa_ep_idx_rx == -1) ||
@@ -1587,7 +1542,7 @@
 	}
 
 	/* For ETH instance */
-	if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_ETH_STATS) {
+	if (ipa_lnx_agent_ctx.log_type_mask & TLPD_IPA_LOG_TYPE_ETH_STATS) {
 		ipa_lnx_agent_ctx.alloc_info.num_eth_instances = 0;
 		for (i = 0; i < IPA_ETH_INST_ID_MAX; i++) {
 			ipa_lnx_agent_ctx.alloc_info.eth_inst_info[i].num_pipes = 0;
@@ -1598,7 +1553,7 @@
 				= 0;
 			k = 0;
 			for (j = 0; (j < IPA_ETH_CLIENT_MAX) &&
-				(k < SPEARHEAD_NUM_MAX_TX_INSTANCES); j++) {
+				(k < TLPD_NUM_MAX_TX_INSTANCES); j++) {
 				if (ipa_eth_client_exist(j, i) &&
 					(ipa_lnx_agent_ctx.alloc_info.num_eth_instances < 2)) {
 					eth_instance_id = ipa_lnx_agent_ctx.alloc_info.num_eth_instances;
@@ -1643,13 +1598,13 @@
 	}
 
 	/* For USB instance */
-	if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_USB_STATS) {
+	if (ipa_lnx_agent_ctx.log_type_mask & TLPD_IPA_LOG_TYPE_USB_STATS) {
 		ipa_lnx_agent_ctx.alloc_info.num_usb_instances = 0;
 		index = 0;
 		for (i = 0; (i < IPA_USB_MAX_TETH_PROT_SIZE) &&
-			(index < SPEARHEAD_NUM_MAX_INSTANCES); i++) {
+			(index < TLPD_NUM_MAX_INSTANCES); i++) {
 			if(ipa_usb_is_teth_prot_connected(i)) {
-				if (index == SPEARHEAD_NUM_MAX_INSTANCES) {
+				if (index == TLPD_NUM_MAX_INSTANCES) {
 					IPA_STATS_ERR("USB alloc info max size reached\n");
 					break;
 				}
@@ -1697,7 +1652,7 @@
 	}
 
 	/* For MHIP instance */
-	if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_MHIP_STATS) {
+	if (ipa_lnx_agent_ctx.log_type_mask & TLPD_IPA_LOG_TYPE_MHIP_STATS) {
 #if IS_ENABLED(CONFIG_IPA3_MHI_PRIME_MANAGER)
 		if (!ipa3_ctx->mhip_ctx.dbg_stats.uc_dbg_stats_mmio) {
 			ipa_lnx_agent_ctx.alloc_info.num_mhip_instances = 0;
@@ -1735,13 +1690,13 @@
 	}
 
 	/* For Page recycling stats for default, coal and Low lat pipes */
-	if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_RECYCLE_STATS)
+	if (ipa_lnx_agent_ctx.log_type_mask & TLPD_IPA_LOG_TYPE_RECYCLE_STATS)
 		ipa_lnx_agent_ctx.alloc_info.num_page_rec_interval =
 			IPA_LNX_PIPE_PAGE_RECYCLING_INTERVAL_COUNT;
 
 	if(copy_to_user((u8 *)arg,
 		&ipa_lnx_agent_ctx,
-		sizeof(struct ipa_lnx_stats_spearhead_ctx))) {
+		sizeof(struct ipa_lnx_stats_tlpd_ctx))) {
 		IPA_STATS_ERR("copy to user failed");
 		return -EFAULT;
 	}
@@ -1765,6 +1720,7 @@
 		return -EPERM;
 	}
 
+	mutex_lock(&ipa_lnx_ctx_mutex);
 	switch (cmd) {
 	case IPA_LNX_IOC_GET_ALLOC_INFO:
 		retval = ipa_stats_get_alloc_info(arg);
@@ -1810,45 +1766,46 @@
 				const void __user *)arg, sizeof(struct ipa_lnx_consolidated_stats));
 		if (IS_ERR(consolidated_stats)) {
 			IPA_STATS_ERR("copy from user failed");
+			mutex_unlock(&ipa_lnx_ctx_mutex);
 			return -ENOMEM;
 		}
 
-		if (consolidated_stats->log_type_mask & SPRHD_IPA_LOG_TYPE_GENERIC_STATS) {
+		if (consolidated_stats->log_type_mask & TLPD_IPA_LOG_TYPE_GENERIC_STATS) {
 			retval = ipa_get_generic_stats((unsigned long) consolidated_stats->generic_stats);
 			if (retval) {
 				IPA_STATS_ERR("ipa get generic stats fail");
 				break;
 			}
 		}
-		if (consolidated_stats->log_type_mask & SPRHD_IPA_LOG_TYPE_CLOCK_STATS) {
+		if (consolidated_stats->log_type_mask & TLPD_IPA_LOG_TYPE_CLOCK_STATS) {
 			retval = ipa_get_clock_stats((unsigned long) consolidated_stats->clock_stats);
 			if (retval) {
 				IPA_STATS_ERR("ipa get clock stats fail");
 				break;
 			}
 		}
-		if (consolidated_stats->log_type_mask & SPRHD_IPA_LOG_TYPE_WLAN_STATS) {
+		if (consolidated_stats->log_type_mask & TLPD_IPA_LOG_TYPE_WLAN_STATS) {
 			retval = ipa_get_wlan_inst_stats((unsigned long) consolidated_stats->wlan_stats);
 			if (retval) {
 				IPA_STATS_ERR("ipa get wlan inst stats fail");
 				break;
 			}
 		}
-		if (consolidated_stats->log_type_mask & SPRHD_IPA_LOG_TYPE_ETH_STATS) {
+		if (consolidated_stats->log_type_mask & TLPD_IPA_LOG_TYPE_ETH_STATS) {
 			retval = ipa_get_eth_inst_stats((unsigned long) consolidated_stats->eth_stats);
 			if (retval) {
 				IPA_STATS_ERR("ipa get eth inst stats fail");
 				break;
 			}
 		}
-		if (consolidated_stats->log_type_mask & SPRHD_IPA_LOG_TYPE_USB_STATS) {
+		if (consolidated_stats->log_type_mask & TLPD_IPA_LOG_TYPE_USB_STATS) {
 			retval = ipa_get_usb_inst_stats((unsigned long) consolidated_stats->usb_stats);
 			if (retval) {
 				IPA_STATS_ERR("ipa get usb inst stats fail");
 				break;
 			}
 		}
-		if (consolidated_stats->log_type_mask & SPRHD_IPA_LOG_TYPE_MHIP_STATS) {
+		if (consolidated_stats->log_type_mask & TLPD_IPA_LOG_TYPE_MHIP_STATS) {
 #if IS_ENABLED(CONFIG_IPA3_MHI_PRIME_MANAGER)
 			retval = ipa_get_mhip_inst_stats((unsigned long) consolidated_stats->mhip_stats);
 			if (retval) {
@@ -1857,7 +1814,7 @@
 			}
 #endif
 		}
-		if (consolidated_stats->log_type_mask & SPRHD_IPA_LOG_TYPE_RECYCLE_STATS) {
+		if (consolidated_stats->log_type_mask & TLPD_IPA_LOG_TYPE_RECYCLE_STATS) {
 			retval = ipa_get_page_recycle_stats((unsigned long) consolidated_stats->recycle_stats);
 			if (retval) {
 				IPA_STATS_ERR("ipa get page recycle stats fail\n");
@@ -1868,6 +1825,7 @@
 	default:
 		retval = -ENOTTY;
 	}
+	mutex_unlock(&ipa_lnx_ctx_mutex);
 	return retval;
 }
 
@@ -1878,7 +1836,7 @@
 	.unlocked_ioctl = ipa_lnx_stats_ioctl,
 };
 
-static int ipa_spearhead_stats_ioctl_init(void)
+static int ipa_tlpd_stats_ioctl_init(void)
 {
 	unsigned int ipa_lnx_stats_ioctl_major = 0;
 	int ret;
@@ -1927,16 +1885,11 @@
 	return -ENODEV;
 }
 
-int ipa_spearhead_stats_init()
+int ipa_tlpd_stats_init()
 {
 	int ret;
 
-	if (ipa_stats_struct_mismatch()) {
-		IPA_STATS_ERR("ipa stats structure mismatch\n");
-		return -1;
-	}
-
-	ret = ipa_spearhead_stats_ioctl_init();
+	ret = ipa_tlpd_stats_ioctl_init();
 	if(ret) {
 		IPA_STATS_ERR("IPA_LNX_STATS_IOCTL init failure = %d\n", ret);
 		return -1;
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_stats.h b/drivers/platform/msm/ipa/ipa_v3/ipa_stats.h
index 8e0ddfd..179c9c2 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_stats.h
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_stats.h
@@ -17,7 +17,7 @@
 
 #define IPA_LNX_IOC_GET_ALLOC_INFO _IOWR(IPA_LNX_STATS_IOC_MAGIC, \
 	IPA_LNX_CMD_GET_ALLOC_INFO, \
-	struct ipa_lnx_stats_spearhead_ctx)
+	struct ipa_lnx_stats_tlpd_ctx)
 
 #define IPA_LNX_IOC_GET_GENERIC_STATS _IOWR(IPA_LNX_STATS_IOC_MAGIC, \
 	IPA_LNX_CMD_GENERIC_STATS, \
@@ -45,32 +45,31 @@
 
 #define IPA_LNX_IOC_GET_CONSOLIDATED_STATS _IOWR(IPA_LNX_STATS_IOC_MAGIC, \
 	IPA_LNX_CMD_CONSOLIDATED_STATS, \
-	struct ipa_lnx_consolidated_stats)
+	int)
 
 #define IPA_LNX_STATS_SUCCESS 0
 #define IPA_LNX_STATS_FAILURE -1
 
-#define SPEARHEAD_NUM_MAX_PIPES 6
-#define SPEARHEAD_NUM_MAX_TX_INSTANCES 3
-#define SPEARHEAD_NUM_MAX_RX_INSTANCES 3
+#define TLPD_NUM_MAX_PIPES 6
+#define TLPD_NUM_MAX_TX_INSTANCES 3
+#define TLPD_NUM_MAX_RX_INSTANCES 3
 
-#define SPEARHEAD_NUM_MAX_INSTANCES 2
+#define TLPD_NUM_MAX_INSTANCES 2
 
 #define IPA_LNX_PIPE_PAGE_RECYCLING_INTERVAL_COUNT 5
 #define IPA_LNX_PIPE_PAGE_RECYCLING_INTERVAL_TIME 10 /* In milli second */
 
 /**
  * This is used to indicate which set of logs is enabled from IPA
- * These bitmapped macros are copied from
- * spearhead/inc/spearhead_client.h
+ * These bitmapped macros.
  */
-#define SPRHD_IPA_LOG_TYPE_GENERIC_STATS   0x00001
-#define SPRHD_IPA_LOG_TYPE_CLOCK_STATS     0x00002
-#define SPRHD_IPA_LOG_TYPE_WLAN_STATS      0x00004
-#define SPRHD_IPA_LOG_TYPE_ETH_STATS       0x00008
-#define SPRHD_IPA_LOG_TYPE_USB_STATS       0x00010
-#define SPRHD_IPA_LOG_TYPE_MHIP_STATS      0x00020
-#define SPRHD_IPA_LOG_TYPE_RECYCLE_STATS   0x00040
+#define TLPD_IPA_LOG_TYPE_GENERIC_STATS   0x00001
+#define TLPD_IPA_LOG_TYPE_CLOCK_STATS     0x00002
+#define TLPD_IPA_LOG_TYPE_WLAN_STATS      0x00004
+#define TLPD_IPA_LOG_TYPE_ETH_STATS       0x00008
+#define TLPD_IPA_LOG_TYPE_USB_STATS       0x00010
+#define TLPD_IPA_LOG_TYPE_MHIP_STATS      0x00020
+#define TLPD_IPA_LOG_TYPE_RECYCLE_STATS   0x00040
 
 
 /**
@@ -99,7 +98,7 @@
  * is structure modification.This is NOT the sizeof(struct) but
  * it is addition of the specified type of variable included
  * inside the structre. Also update the internal structure lengths
- * in ipa_lnx_spearhead_stats.c to overcome backward and forward
+ * in ipa_lnx_tlpd_stats.c to overcome backward and forward
  * compatibility between userspace and driver structures.
  */
 /* IPA Linux generic stats structures */
@@ -109,7 +108,6 @@
 	uint64_t def_total_repl_buff;
 	uint64_t def_temp_repl_buff;
 };
-#define IPA_LNX_PG_RECYCLE_STATS_STRUCT_LEN_INT 32
 
 struct exception_stats {
 	uint32_t excptn_type_none;
@@ -123,7 +121,6 @@
 	uint32_t excptn_type_ipv6_ct;
 	uint32_t excptn_type_csum;
 };
-#define IPA_LNX_EXCEPTION_STATS_STRUCT_LEN_INT 40
 
 struct odl_ep_stats {
 	uint32_t rx_pkt;
@@ -131,7 +128,6 @@
 	uint32_t dropped_pkt;
 	uint32_t num_queue_pkt;
 };
-#define IPA_LNX_ODL_EP_STATS_STRUCT_LEN_INT 16
 
 struct holb_discard_stats {
 	uint32_t client_type;
@@ -139,7 +135,6 @@
 	uint32_t num_drp_bytes;
 	uint32_t reserved;
 };
-#define IPA_LNX_HOLB_DISCARD_STATS_STRUCT_LEN_INT 16
 
 struct holb_monitor_stats {
 	uint32_t client_type;
@@ -147,7 +142,6 @@
 	uint32_t num_en_cnt;
 	uint32_t num_dis_cnt;
 };
-#define IPA_LNX_HOLB_MONITOR_STATS_STRUCT_LEN_INT 16
 
 struct holb_drop_and_mon_stats {
 	uint32_t num_holb_disc_pipes;
@@ -155,7 +149,6 @@
 	struct holb_discard_stats holb_disc_stats[0];
 	struct holb_monitor_stats holb_mon_stats[0];
 };
-#define IPA_LNX_HOLB_DROP_AND_MON_STATS_STRUCT_LEN_INT (8 + 16 +16)
 
 struct ipa_lnx_generic_stats {
 	uint32_t tx_dma_pkts;
@@ -173,7 +166,6 @@
 	struct odl_ep_stats odl_stats;
 	struct holb_drop_and_mon_stats holb_stats;
 };
-#define IPA_LNX_GENERIC_STATS_STRUCT_LEN_INT (40 + 32 + 40 + 16 + 40)
 
 /* IPA Linux clock stats structures */
 struct pm_client_stats {
@@ -184,7 +176,6 @@
 	uint32_t pm_client_type;
 	uint32_t reserved;
 };
-#define IPA_LNX_PM_CLIENT_STATS_STRUCT_LEN_INT 24
 
 struct ipa_lnx_clock_stats {
 	uint32_t active_clients;
@@ -195,7 +186,6 @@
 	uint32_t curr_clk_vote;
 	struct pm_client_stats pm_clnt_stats[0];
 };
-#define IPA_LNX_CLOCK_STATS_STRUCT_LEN_INT (24 + 24)
 
 /* Generic instance structures */
 struct ipa_lnx_gsi_rx_debug_stats {
@@ -212,7 +202,6 @@
 	uint32_t gsi_debug4;
 	uint32_t rx_summary;
 };
-#define IPA_LNX_GSI_RX_DEBUG_STATS_STRUCT_LEN_INT 48
 
 struct ipa_lnx_gsi_tx_debug_stats {
 	uint32_t tx_client;
@@ -230,7 +219,6 @@
 	uint32_t tx_summary;
 	uint32_t reserved;
 };
-#define IPA_LNX_GSI_TX_DEBUG_STATS_STRUCT_LEN_INT 56
 
 struct ipa_lnx_gsi_debug_stats {
 	uint32_t num_tx_instances;
@@ -238,7 +226,6 @@
 	struct ipa_lnx_gsi_tx_debug_stats gsi_tx_dbg_stats[0];
 	struct ipa_lnx_gsi_rx_debug_stats gsi_rx_dbg_stats[0];
 };
-#define IPA_LNX_GSI_DEBUG_STATS_STRUCT_LEN_INT (8 + 48 + 56)
 
 struct ipa_lnx_pipe_info {
 	uint64_t gsi_chan_ring_bp;
@@ -266,7 +253,6 @@
 	uint32_t gsi_poll_mode;
 	uint32_t gsi_db_in_bytes;
 };
-#define IPA_LNX_PIPE_INFO_STATS_STRUCT_LEN_INT 120
 
 /* IPA Linux wlan instance stats structures */
 struct wlan_instance_info {
@@ -281,14 +267,12 @@
 	struct ipa_lnx_gsi_debug_stats gsi_debug_stats;
 	struct ipa_lnx_pipe_info pipe_info[0];
 };
-#define IPA_LNX_WLAN_INSTANCE_INFO_STRUCT_LEN_INT (32 + 112 + 120)
 
 struct ipa_lnx_wlan_inst_stats {
 	uint32_t num_wlan_instance;
 	uint32_t reserved;
 	struct wlan_instance_info instance_info[0];
 };
-#define IPA_LNX_WLAN_INST_STATS_STRUCT_LEN_INT (8 + 264)
 
 /* IPA Linux eth instance stats structures */
 struct eth_instance_info {
@@ -299,14 +283,12 @@
 	struct ipa_lnx_gsi_debug_stats gsi_debug_stats;
 	struct ipa_lnx_pipe_info pipe_info[0];
 };
-#define IPA_LNX_ETH_INSTANCE_INFO_STRUCT_LEN_INT (16 + 112 + 120)
 
 struct ipa_lnx_eth_inst_stats {
 	uint32_t num_eth_instance;
 	uint32_t reserved;
 	struct eth_instance_info instance_info[0];
 };
-#define IPA_LNX_ETH_INST_STATS_STRUCT_LEN_INT (8 + 248)
 
 /* IPA Linux usb instance stats structures */
 struct usb_instance_info {
@@ -317,14 +299,12 @@
 	struct ipa_lnx_gsi_debug_stats gsi_debug_stats;
 	struct ipa_lnx_pipe_info pipe_info[0];
 };
-#define IPA_LNX_USB_INSTANCE_INFO_STRUCT_LEN_INT (16 + 112 + 120)
 
 struct ipa_lnx_usb_inst_stats {
 	uint32_t num_usb_instance;
 	uint32_t reserved;
 	struct usb_instance_info instance_info[0];
 };
-#define IPA_LNX_USB_INST_STATS_STRUCT_LEN_INT (8 + 248)
 
 /* IPA Linux mhip instance stats structures */
 struct mhip_instance_info {
@@ -335,14 +315,12 @@
 	struct ipa_lnx_gsi_debug_stats gsi_debug_stats;
 	struct ipa_lnx_pipe_info pipe_info[0];
 };
-#define IPA_LNX_MHIP_INSTANCE_INFO_STRUCT_LEN_INT (16 + 112 + 120)
 
 struct ipa_lnx_mhip_inst_stats {
 	uint32_t num_mhip_instance;
 	uint32_t reserved;
 	struct mhip_instance_info instance_info[0];
 };
-#define IPA_LNX_MHIP_INST_STATS_STRUCT_LEN_INT (8 + 248)
 
 struct ipa_lnx_consolidated_stats {
 	uint64_t log_type_mask;
@@ -354,7 +332,6 @@
 	struct ipa_lnx_mhip_inst_stats *mhip_stats;
 	struct ipa_lnx_pipe_page_recycling_stats *recycle_stats;
 };
-#define IPA_LNX_CONSOLIDATED_STATS_STRUCT_LEN_INT (8 + 48)
 
 enum rx_channel_type {
 	RX_WAN_COALESCING,
@@ -391,15 +368,14 @@
 
 /* Explain below structures */
 struct ipa_lnx_each_inst_alloc_info {
-	uint32_t pipes_client_type[SPEARHEAD_NUM_MAX_PIPES];
-	uint32_t tx_inst_client_type[SPEARHEAD_NUM_MAX_TX_INSTANCES];
-	uint32_t rx_inst_client_type[SPEARHEAD_NUM_MAX_RX_INSTANCES];
+	uint32_t pipes_client_type[TLPD_NUM_MAX_PIPES];
+	uint32_t tx_inst_client_type[TLPD_NUM_MAX_TX_INSTANCES];
+	uint32_t rx_inst_client_type[TLPD_NUM_MAX_RX_INSTANCES];
 	uint32_t num_pipes;
 	uint32_t num_tx_instances;
 	uint32_t num_rx_instances;
 	uint32_t reserved;
 };
-#define IPA_LNX_EACH_INST_ALLOC_INFO_STRUCT_LEN_INT (24 + 12 + 12 + 16)
 
 struct ipa_lnx_stats_alloc_info {
 	uint32_t num_holb_drop_stats_clients;
@@ -410,19 +386,17 @@
 	uint32_t num_usb_instances;
 	uint32_t num_mhip_instances;
 	uint32_t num_page_rec_interval;
-	struct ipa_lnx_each_inst_alloc_info wlan_inst_info[SPEARHEAD_NUM_MAX_INSTANCES];
-	struct ipa_lnx_each_inst_alloc_info eth_inst_info[SPEARHEAD_NUM_MAX_INSTANCES];
-	struct ipa_lnx_each_inst_alloc_info usb_inst_info[SPEARHEAD_NUM_MAX_INSTANCES];
-	struct ipa_lnx_each_inst_alloc_info mhip_inst_info[SPEARHEAD_NUM_MAX_INSTANCES];
+	struct ipa_lnx_each_inst_alloc_info wlan_inst_info[TLPD_NUM_MAX_INSTANCES];
+	struct ipa_lnx_each_inst_alloc_info eth_inst_info[TLPD_NUM_MAX_INSTANCES];
+	struct ipa_lnx_each_inst_alloc_info usb_inst_info[TLPD_NUM_MAX_INSTANCES];
+	struct ipa_lnx_each_inst_alloc_info mhip_inst_info[TLPD_NUM_MAX_INSTANCES];
 };
-#define IPA_LNX_STATS_ALL_INFO_STRUCT_LEN_INT (32 + 128 + 128 + 128)
 
-struct ipa_lnx_stats_spearhead_ctx {
-	uint32_t usb_teth_prot[SPEARHEAD_NUM_MAX_INSTANCES];
+struct ipa_lnx_stats_tlpd_ctx {
+	uint32_t usb_teth_prot[TLPD_NUM_MAX_INSTANCES];
 	uint32_t log_type_mask;
 	struct ipa_lnx_stats_alloc_info alloc_info;
 };
-#define IPA_LNX_STATS_SPEARHEAD_CTX_STRUCT_LEN_INT (8 + 4 + 416)
 
 /* enum ipa_lnx_stats_ioc_cmd_type - IOCTL Command types for IPA lnx stats
  *
@@ -439,7 +413,7 @@
 	IPA_LNX_CMD_STATS_MAX,
 };
 
-int ipa_spearhead_stats_init(void);
+int ipa_tlpd_stats_init(void);
 
 /* Peripheral stats for Q6, should be in the same order, defined by Q6 */
 struct ipa_peripheral_mdm_stats {
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c b/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c
index 37a2916..291d0a3 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include "ipa_i.h"
@@ -1733,6 +1734,11 @@
 	struct ipa_mem_buffer cmd;
 	struct IpaQuotaMonitoring_t *quota_info;
 
+	if (!ipa3_ctx->uc_ctx.uc_event_ring_valid) {
+		IPADBG("uC event ring not configured, Quota monitor won't work\n");
+		return res;
+	}
+
 	cmd.size = sizeof(*quota_info);
 	cmd.base = dma_alloc_coherent(ipa3_ctx->uc_pdev, cmd.size,
 		&cmd.phys_base, GFP_KERNEL);
@@ -1801,6 +1807,11 @@
 	if (!info)
 		return -EINVAL;
 
+	if (!ipa3_ctx->uc_ctx.uc_event_ring_valid) {
+		IPADBG("uC event ring not configured, BW monitor won't work\n");
+		return res;
+	}
+
 	/* check max entry */
 	if (info->num > BW_MONITORING_MAX_THRESHOLD) {
 		IPAERR("%d, support max %d bw monitor\n", info->num,
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
index cc48442..7b48bae 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
@@ -13364,17 +13364,17 @@
 {
 	bool is_up;
 
-	mutex_lock(&ipa3_ctx->lock);
+	mutex_lock(&ipa3_ctx->ssr_lock);
 	is_up = ipa3_ctx->is_modem_up;
-	mutex_unlock(&ipa3_ctx->lock);
+	mutex_unlock(&ipa3_ctx->ssr_lock);
 	return is_up;
 }
 
 void ipa3_set_modem_up(bool is_up)
 {
-	mutex_lock(&ipa3_ctx->lock);
+	mutex_lock(&ipa3_ctx->ssr_lock);
 	ipa3_ctx->is_modem_up = is_up;
-	mutex_unlock(&ipa3_ctx->lock);
+	mutex_unlock(&ipa3_ctx->ssr_lock);
 }
 
 /**
