diff --git a/BUILD.bazel b/BUILD.bazel
index 71ffa33..f7c68e1 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -9,7 +9,6 @@
 load(
     ":mgk_modules.bzl",
     "mgk_gki_modules",
-    "mgk_implicit_module_out",
     "mgk_module_outs",
     "platform_ack_modules",
 )
@@ -274,7 +273,6 @@
     dtbo_names = KIRKWOOD_64_DTBO_NAMES,
     gki_modules = mgk_gki_modules,
     in_tree_modules = mgk_module_outs + platform_ack_modules,
-    in_tree_modules_discard = mgk_implicit_module_out,
     insmod_cfgs = KIRKWOOD_64_INSMOD_CFGS,
     kleaf_modules = mt8696_common_kleaf_modules,
 )
diff --git a/arch/arm64/configs/kirkwood_64_defconfig b/arch/arm64/configs/kirkwood_64_defconfig
index 4d490a4..4a232fa 100644
--- a/arch/arm64/configs/kirkwood_64_defconfig
+++ b/arch/arm64/configs/kirkwood_64_defconfig
@@ -146,7 +146,7 @@
 CONFIG_DEVICE_MODULES_MTK_SCPSYS_PM_DOMAINS=m
 CONFIG_CFG80211=m
 CONFIG_CFG80211_CERTIFICATION_ONUS=y
-CONFIG_CFG80211_EXTRA_REGDB_KEYDIR="\$(srctree)/../kernel_device_modules-5.15/net/wireless/certs" # nocheck: This is expanded during compilation
+CONFIG_CFG80211_EXTRA_REGDB_KEYDIR="\${ROOT_DIR}/kernel_device_modules-5.15/net/wireless/certs" # nocheck: This is expanded during compilation
 CONFIG_NL80211_TESTMODE=y
 CONFIG_MAC80211=m
 CONFIG_SND_SOC_MT8696=m
@@ -192,5 +192,6 @@
 # CONFIG_MTK_SCPSYS_PM_DOMAINS is not set
 # CONFIG_MTK_SCPSYS is not set
 # CONFIG_MODULE_SIG_ALL is not set
+# CONFIG_ARM_MEDIATEK_CPUFREQ_HW is not set
 CONFIG_MTK_DMABUF_DEFFERRED_MAX_MBYTES=32
 CONFIG_DEVICE_MODULES_SPI_SPIDEV=m
diff --git a/device.bazelrc b/device.bazelrc
index d52a4df..747e652 100644
--- a/device.bazelrc
+++ b/device.bazelrc
@@ -1,6 +1,6 @@
 build:download_gki --use_prebuilt_gki
 build:download_gki --use_signed_prebuilts
-build:download_gki --action_env=KLEAF_DOWNLOAD_BUILD_NUMBER_MAP="gki_prebuilts=12916019"
+build:download_gki --action_env=KLEAF_DOWNLOAD_BUILD_NUMBER_MAP="gki_prebuilts=13512086"
 build:no_download_gki --use_prebuilt_gki=false
 
 # disable GKI prebuilts by default
diff --git a/drivers/gpu/img-rogue/23.2/build/linux/config/core.mk b/drivers/gpu/img-rogue/23.2/build/linux/config/core.mk
index 7b7b8ab..8966b22 100644
--- a/drivers/gpu/img-rogue/23.2/build/linux/config/core.mk
+++ b/drivers/gpu/img-rogue/23.2/build/linux/config/core.mk
@@ -1281,6 +1281,9 @@
 $(eval $(call TunableBothConfigC,RGX_FW_IRQ_OS_COUNTERS,))
 $(eval $(call TunableBothConfigC,RGX_IRQ_HYPERV_HANDLER,))
 
+PVRSRV_MAX_REAL_TIME_CONTEXTS ?= 1
+$(eval $(call KernelConfigC,PVRSRV_MAX_REAL_TIME_CONTEXTS,$(PVRSRV_MAX_REAL_TIME_CONTEXTS),))
+
 #
 # GPU virtualization validation
 #
diff --git a/drivers/gpu/img-rogue/23.2/build/linux/config/core_volcanic.mk b/drivers/gpu/img-rogue/23.2/build/linux/config/core_volcanic.mk
index 6db6dbd..9dbd8b9 100644
--- a/drivers/gpu/img-rogue/23.2/build/linux/config/core_volcanic.mk
+++ b/drivers/gpu/img-rogue/23.2/build/linux/config/core_volcanic.mk
@@ -1102,6 +1102,10 @@
 $(eval $(call TunableBothConfigC,PVR_ENABLE_PHR,,\
 Enable the Periodic Hardware Reset functionality (PHR)))
 
+
+PVRSRV_MAX_REAL_TIME_CONTEXTS ?= 1
+$(eval $(call KernelConfigC,PVRSRV_MAX_REAL_TIME_CONTEXTS,$(PVRSRV_MAX_REAL_TIME_CONTEXTS),))
+
 #
 # GPU virtualization validation
 #
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/cache_bridge/server_cache_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/cache_bridge/server_cache_bridge.c
index b2f5267..614599b 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/cache_bridge/server_cache_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/cache_bridge/server_cache_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 static_assert(CACHE_BATCH_MAX <= IMG_UINT32_MAX,
 	      "CACHE_BATCH_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeCacheOpQueue(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psCacheOpQueueIN_UI8,
 			 IMG_UINT8 * psCacheOpQueueOUT_UI8, CONNECTION_DATA * psConnection)
@@ -300,10 +300,10 @@ PVRSRVBridgeCacheOpQueue(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CACHEOPQUEUE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeCacheOpExec(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psCacheOpExecIN_UI8,
 			IMG_UINT8 * psCacheOpExecOUT_UI8, CONNECTION_DATA * psConnection)
@@ -352,10 +352,10 @@ PVRSRVBridgeCacheOpExec(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CACHEOPEXEC, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeCacheOpLog(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psCacheOpLogIN_UI8,
 		       IMG_UINT8 * psCacheOpLogOUT_UI8, CONNECTION_DATA * psConnection)
@@ -406,7 +406,7 @@ PVRSRVBridgeCacheOpLog(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CACHEOPLOG, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/cmm_bridge/server_cmm_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/cmm_bridge/server_cmm_bridge.c
index cc658c7..019daf5 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/cmm_bridge/server_cmm_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/cmm_bridge/server_cmm_bridge.c
@@ -75,7 +75,7 @@ static PVRSRV_ERROR _DevmemIntExportCtxpsContextExportIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntExportCtx(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemIntExportCtxIN_UI8,
 			       IMG_UINT8 * psDevmemIntExportCtxOUT_UI8,
@@ -179,10 +179,10 @@ PVRSRVBridgeDevmemIntExportCtx(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTEXPORTCTX, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnexportCtx(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psDevmemIntUnexportCtxIN_UI8,
 				 IMG_UINT8 * psDevmemIntUnexportCtxOUT_UI8,
@@ -218,7 +218,7 @@ PVRSRVBridgeDevmemIntUnexportCtx(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnexportCtx_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNEXPORTCTX, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntAcquireRemoteCtxpsContextIntRelease(void *pvData)
@@ -228,7 +228,7 @@ static PVRSRV_ERROR _DevmemIntAcquireRemoteCtxpsContextIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntAcquireRemoteCtx(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psDevmemIntAcquireRemoteCtxIN_UI8,
 				      IMG_UINT8 * psDevmemIntAcquireRemoteCtxOUT_UI8,
@@ -352,7 +352,7 @@ PVRSRVBridgeDevmemIntAcquireRemoteCtx(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTACQUIREREMOTECTX, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/devicememhistory_bridge/server_devicememhistory_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/devicememhistory_bridge/server_devicememhistory_bridge.c
index 72c6a86..fa81161 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/devicememhistory_bridge/server_devicememhistory_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/devicememhistory_bridge/server_devicememhistory_bridge.c
@@ -71,7 +71,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psDevicememHistoryMapIN_UI8,
 				IMG_UINT8 * psDevicememHistoryMapOUT_UI8,
@@ -199,13 +199,13 @@ PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYMAP, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevicememHistoryUnmapIN_UI8,
 				  IMG_UINT8 * psDevicememHistoryUnmapOUT_UI8,
@@ -333,13 +333,13 @@ PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYUNMAP, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psDevicememHistoryMapVRangeIN_UI8,
 				      IMG_UINT8 * psDevicememHistoryMapVRangeOUT_UI8,
@@ -438,13 +438,13 @@ PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYMAPVRANGE, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psDevicememHistoryUnmapVRangeIN_UI8,
 					IMG_UINT8 * psDevicememHistoryUnmapVRangeOUT_UI8,
@@ -546,7 +546,7 @@ PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYUNMAPVRANGE, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
@@ -556,7 +556,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 	      "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psDevicememHistorySparseChangeIN_UI8,
 					 IMG_UINT8 * psDevicememHistorySparseChangeOUT_UI8,
@@ -758,7 +758,7 @@ PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYSPARSECHANGE, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/di_bridge/server_di_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/di_bridge/server_di_bridge.c
index 154bccd..04c2af8 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/di_bridge/server_di_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/di_bridge/server_di_bridge.c
@@ -75,7 +75,7 @@ static PVRSRV_ERROR _DICreateContextpsContextIntRelease(void *pvData)
 static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
 	      "PRVSRVTL_MAX_STREAM_NAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDICreateContext(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psDICreateContextIN_UI8,
 			    IMG_UINT8 * psDICreateContextOUT_UI8, CONNECTION_DATA * psConnection)
@@ -227,10 +227,10 @@ PVRSRVBridgeDICreateContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DICREATECONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIDestroyContext(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psDIDestroyContextIN_UI8,
 			     IMG_UINT8 * psDIDestroyContextOUT_UI8, CONNECTION_DATA * psConnection)
@@ -262,13 +262,13 @@ PVRSRVBridgeDIDestroyContext(IMG_UINT32 ui32DispatchTableEntry,
 
 DIDestroyContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DIDESTROYCONTEXT, eError);
 }
 
 static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
 	      "DI_IMPL_BRG_PATH_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIReadEntry(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psDIReadEntryIN_UI8,
 			IMG_UINT8 * psDIReadEntryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -387,7 +387,7 @@ PVRSRVBridgeDIReadEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DIREADENTRY, eError);
 }
 
 static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
@@ -395,7 +395,7 @@ static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
 static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
 	      "DI_IMPL_BRG_PATH_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIWriteEntry(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psDIWriteEntryIN_UI8,
 			 IMG_UINT8 * psDIWriteEntryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -543,10 +543,10 @@ PVRSRVBridgeDIWriteEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DIWRITEENTRY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIListAllEntries(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psDIListAllEntriesIN_UI8,
 			     IMG_UINT8 * psDIListAllEntriesOUT_UI8, CONNECTION_DATA * psConnection)
@@ -591,7 +591,7 @@ PVRSRVBridgeDIListAllEntries(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DILISTALLENTRIES, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/dmabuf_bridge/server_dmabuf_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/dmabuf_bridge/server_dmabuf_bridge.c
index d3b3279..56fb021 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/dmabuf_bridge/server_dmabuf_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/dmabuf_bridge/server_dmabuf_bridge.c
@@ -76,7 +76,7 @@ static PVRSRV_ERROR _PhysmemImportDmaBufpsPMRPtrIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemImportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPhysmemImportDmaBufIN_UI8,
 				IMG_UINT8 * psPhysmemImportDmaBufOUT_UI8,
@@ -218,7 +218,7 @@ PVRSRVBridgePhysmemImportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMIMPORTDMABUF, eError);
 }
 
 static PVRSRV_ERROR _PhysmemImportDmaBufLockedpsPMRPtrIntRelease(void *pvData)
@@ -231,7 +231,7 @@ static PVRSRV_ERROR _PhysmemImportDmaBufLockedpsPMRPtrIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemImportDmaBufLocked(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psPhysmemImportDmaBufLockedIN_UI8,
 				      IMG_UINT8 * psPhysmemImportDmaBufLockedOUT_UI8,
@@ -374,10 +374,10 @@ PVRSRVBridgePhysmemImportDmaBufLocked(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMIMPORTDMABUFLOCKED, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemExportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPhysmemExportDmaBufIN_UI8,
 				IMG_UINT8 * psPhysmemExportDmaBufOUT_UI8,
@@ -427,7 +427,7 @@ PVRSRVBridgePhysmemExportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMEXPORTDMABUF, eError);
 }
 
 static PVRSRV_ERROR _PhysmemImportSparseDmaBufpsPMRPtrIntRelease(void *pvData)
@@ -442,7 +442,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemImportSparseDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psPhysmemImportSparseDmaBufIN_UI8,
 				      IMG_UINT8 * psPhysmemImportSparseDmaBufOUT_UI8,
@@ -620,7 +620,7 @@ PVRSRVBridgePhysmemImportSparseDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMIMPORTSPARSEDMABUF, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/htbuffer_bridge/server_htbuffer_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/htbuffer_bridge/server_htbuffer_bridge.c
index 50b4fcb..d9845cc 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/htbuffer_bridge/server_htbuffer_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/htbuffer_bridge/server_htbuffer_bridge.c
@@ -72,7 +72,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 static_assert(HTB_FLAG_NUM_EL <= IMG_UINT32_MAX,
 	      "HTB_FLAG_NUM_EL must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHTBControl(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psHTBControlIN_UI8,
 		       IMG_UINT8 * psHTBControlOUT_UI8, CONNECTION_DATA * psConnection)
@@ -175,7 +175,7 @@ PVRSRVBridgeHTBControl(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HTBCONTROL, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/mm_bridge/server_mm_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/mm_bridge/server_mm_bridge.c
index 07f82bd..d476d7f 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/mm_bridge/server_mm_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/mm_bridge/server_mm_bridge.c
@@ -89,7 +89,7 @@ static PVRSRV_ERROR _PMRExportPMRpsPMRExportIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRExportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psPMRExportPMRIN_UI8,
 			 IMG_UINT8 * psPMRExportPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -254,7 +254,7 @@ PVRSRVBridgePMRExportPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMREXPORTPMR, eError);
 }
 
 #else
@@ -263,7 +263,7 @@ PVRSRVBridgePMRExportPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(SUPPORT_INSECURE_EXPORT)
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnexportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psPMRUnexportPMRIN_UI8,
 			   IMG_UINT8 * psPMRUnexportPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -351,14 +351,14 @@ PVRSRVBridgePMRUnexportPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnexportPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNEXPORTPMR, eError);
 }
 
 #else
 #define PVRSRVBridgePMRUnexportPMR NULL
 #endif
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRGetUID(IMG_UINT32 ui32DispatchTableEntry,
 		      IMG_UINT8 * psPMRGetUIDIN_UI8,
 		      IMG_UINT8 * psPMRGetUIDOUT_UI8, CONNECTION_DATA * psConnection)
@@ -403,7 +403,7 @@ PVRSRVBridgePMRGetUID(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRGETUID, eError);
 }
 
 static PVRSRV_ERROR _PMRMakeLocalImportHandlepsExtMemIntRelease(void *pvData)
@@ -413,7 +413,7 @@ static PVRSRV_ERROR _PMRMakeLocalImportHandlepsExtMemIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRMakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psPMRMakeLocalImportHandleIN_UI8,
 				     IMG_UINT8 * psPMRMakeLocalImportHandleOUT_UI8,
@@ -497,10 +497,10 @@ PVRSRVBridgePMRMakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRMAKELOCALIMPORTHANDLE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnmakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 				       IMG_UINT8 * psPMRUnmakeLocalImportHandleIN_UI8,
 				       IMG_UINT8 * psPMRUnmakeLocalImportHandleOUT_UI8,
@@ -536,7 +536,7 @@ PVRSRVBridgePMRUnmakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnmakeLocalImportHandle_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNMAKELOCALIMPORTHANDLE, eError);
 }
 
 #if defined(SUPPORT_INSECURE_EXPORT)
@@ -547,7 +547,7 @@ static PVRSRV_ERROR _PMRImportPMRpsPMRIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psPMRImportPMRIN_UI8,
 			 IMG_UINT8 * psPMRImportPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -632,7 +632,7 @@ PVRSRVBridgePMRImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRIMPORTPMR, eError);
 }
 
 #else
@@ -646,7 +646,7 @@ static PVRSRV_ERROR _PMRLocalImportPMRpsPMRIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRLocalImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psPMRLocalImportPMRIN_UI8,
 			      IMG_UINT8 * psPMRLocalImportPMROUT_UI8,
@@ -730,10 +730,10 @@ PVRSRVBridgePMRLocalImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRLOCALIMPORTPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnrefPMR(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psPMRUnrefPMRIN_UI8,
 			IMG_UINT8 * psPMRUnrefPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -765,10 +765,10 @@ PVRSRVBridgePMRUnrefPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnrefPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNREFPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnrefUnlockPMR(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psPMRUnrefUnlockPMRIN_UI8,
 			      IMG_UINT8 * psPMRUnrefUnlockPMROUT_UI8,
@@ -801,7 +801,7 @@ PVRSRVBridgePMRUnrefUnlockPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnrefUnlockPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNREFUNLOCKPMR, eError);
 }
 
 static PVRSRV_ERROR _PhysmemNewRamBackedPMRpsPMRPtrIntRelease(void *pvData)
@@ -816,7 +816,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemNewRamBackedPMR(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPhysmemNewRamBackedPMRIN_UI8,
 				   IMG_UINT8 * psPhysmemNewRamBackedPMROUT_UI8,
@@ -999,7 +999,7 @@ PVRSRVBridgePhysmemNewRamBackedPMR(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMNEWRAMBACKEDPMR, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntCtxCreatepsDevMemServerContextIntRelease(void *pvData)
@@ -1009,7 +1009,7 @@ static PVRSRV_ERROR _DevmemIntCtxCreatepsDevMemServerContextIntRelease(void *pvD
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntCtxCreate(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemIntCtxCreateIN_UI8,
 			       IMG_UINT8 * psDevmemIntCtxCreateOUT_UI8,
@@ -1108,10 +1108,10 @@ PVRSRVBridgeDevmemIntCtxCreate(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTCTXCREATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntCtxDestroy(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psDevmemIntCtxDestroyIN_UI8,
 				IMG_UINT8 * psDevmemIntCtxDestroyOUT_UI8,
@@ -1149,7 +1149,7 @@ PVRSRVBridgeDevmemIntCtxDestroy(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntCtxDestroy_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTCTXDESTROY, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntHeapCreatepsDevmemHeapPtrIntRelease(void *pvData)
@@ -1159,7 +1159,7 @@ static PVRSRV_ERROR _DevmemIntHeapCreatepsDevmemHeapPtrIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntHeapCreate(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psDevmemIntHeapCreateIN_UI8,
 				IMG_UINT8 * psDevmemIntHeapCreateOUT_UI8,
@@ -1246,10 +1246,10 @@ PVRSRVBridgeDevmemIntHeapCreate(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTHEAPCREATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntHeapDestroy(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psDevmemIntHeapDestroyIN_UI8,
 				 IMG_UINT8 * psDevmemIntHeapDestroyOUT_UI8,
@@ -1285,7 +1285,7 @@ PVRSRVBridgeDevmemIntHeapDestroy(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntHeapDestroy_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTHEAPDESTROY, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntMapPMRpsMappingIntRelease(void *pvData)
@@ -1295,7 +1295,7 @@ static PVRSRV_ERROR _DevmemIntMapPMRpsMappingIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psDevmemIntMapPMRIN_UI8,
 			    IMG_UINT8 * psDevmemIntMapPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -1418,10 +1418,10 @@ PVRSRVBridgeDevmemIntMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTMAPPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnmapPMR(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psDevmemIntUnmapPMRIN_UI8,
 			      IMG_UINT8 * psDevmemIntUnmapPMROUT_UI8,
@@ -1454,7 +1454,7 @@ PVRSRVBridgeDevmemIntUnmapPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnmapPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNMAPPMR, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRangepsReservationIntRelease(void *pvData)
@@ -1464,7 +1464,7 @@ static PVRSRV_ERROR _DevmemIntReserveRangepsReservationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevmemIntReserveRangeIN_UI8,
 				  IMG_UINT8 * psDevmemIntReserveRangeOUT_UI8,
@@ -1550,7 +1550,7 @@ PVRSRVBridgeDevmemIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGE, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMRpsMappingIntRelease(void *pvData)
@@ -1560,7 +1560,7 @@ static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMRpsMappingIntRelease(void *pvD
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRangeAndMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 					   IMG_UINT8 * psDevmemIntReserveRangeAndMapPMRIN_UI8,
 					   IMG_UINT8 * psDevmemIntReserveRangeAndMapPMROUT_UI8,
@@ -1668,10 +1668,10 @@ PVRSRVBridgeDevmemIntReserveRangeAndMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGEANDMAPPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR(IMG_UINT32 ui32DispatchTableEntry,
 					       IMG_UINT8 *
 					       psDevmemIntUnreserveRangeAndUnmapPMRIN_UI8,
@@ -1713,10 +1713,10 @@ PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR(IMG_UINT32 ui32DispatchTableEntry
 
 DevmemIntUnreserveRangeAndUnmapPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGEANDUNMAPPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psDevmemIntUnreserveRangeIN_UI8,
 				    IMG_UINT8 * psDevmemIntUnreserveRangeOUT_UI8,
@@ -1754,7 +1754,7 @@ PVRSRVBridgeDevmemIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnreserveRange_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGE, eError);
 }
 
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
@@ -1762,7 +1762,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 	      "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeChangeSparseMem(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psChangeSparseMemIN_UI8,
 			    IMG_UINT8 * psChangeSparseMemOUT_UI8, CONNECTION_DATA * psConnection)
@@ -1946,10 +1946,10 @@ PVRSRVBridgeChangeSparseMem(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CHANGESPARSEMEM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIsVDevAddrValid(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevmemIsVDevAddrValidIN_UI8,
 				  IMG_UINT8 * psDevmemIsVDevAddrValidOUT_UI8,
@@ -1999,12 +1999,12 @@ PVRSRVBridgeDevmemIsVDevAddrValid(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMISVDEVADDRVALID, eError);
 }
 
 #if defined(RGX_FEATURE_FBCDC)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemInvalidateFBSCTable(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psDevmemInvalidateFBSCTableIN_UI8,
 				      IMG_UINT8 * psDevmemInvalidateFBSCTableOUT_UI8,
@@ -2054,14 +2054,14 @@ PVRSRVBridgeDevmemInvalidateFBSCTable(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINVALIDATEFBSCTABLE, eError);
 }
 
 #else
 #define PVRSRVBridgeDevmemInvalidateFBSCTable NULL
 #endif
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapConfigCount(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psHeapCfgHeapConfigCountIN_UI8,
 				   IMG_UINT8 * psHeapCfgHeapConfigCountOUT_UI8,
@@ -2080,10 +2080,10 @@ PVRSRVBridgeHeapCfgHeapConfigCount(IMG_UINT32 ui32DispatchTableEntry,
 	    HeapCfgHeapConfigCount(psConnection, OSGetDevNode(psConnection),
 				   &psHeapCfgHeapConfigCountOUT->ui32NumHeapConfigs);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPCONFIGCOUNT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapCount(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psHeapCfgHeapCountIN_UI8,
 			     IMG_UINT8 * psHeapCfgHeapCountOUT_UI8, CONNECTION_DATA * psConnection)
@@ -2098,13 +2098,13 @@ PVRSRVBridgeHeapCfgHeapCount(IMG_UINT32 ui32DispatchTableEntry,
 			     psHeapCfgHeapCountIN->ui32HeapConfigIndex,
 			     &psHeapCfgHeapCountOUT->ui32NumHeaps);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPCOUNT, eError);
 }
 
 static_assert(DEVMEM_HEAPNAME_MAXLENGTH <= IMG_UINT32_MAX,
 	      "DEVMEM_HEAPNAME_MAXLENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapConfigName(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psHeapCfgHeapConfigNameIN_UI8,
 				  IMG_UINT8 * psHeapCfgHeapConfigNameOUT_UI8,
@@ -2220,13 +2220,13 @@ PVRSRVBridgeHeapCfgHeapConfigName(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPCONFIGNAME, eError);
 }
 
 static_assert(DEVMEM_HEAPNAME_MAXLENGTH <= IMG_UINT32_MAX,
 	      "DEVMEM_HEAPNAME_MAXLENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapDetails(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psHeapCfgHeapDetailsIN_UI8,
 			       IMG_UINT8 * psHeapCfgHeapDetailsOUT_UI8,
@@ -2342,10 +2342,10 @@ PVRSRVBridgeHeapCfgHeapDetails(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPDETAILS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntRegisterPFNotifyKM(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psDevmemIntRegisterPFNotifyKMIN_UI8,
 					IMG_UINT8 * psDevmemIntRegisterPFNotifyKMOUT_UI8,
@@ -2394,13 +2394,13 @@ PVRSRVBridgeDevmemIntRegisterPFNotifyKM(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTREGISTERPFNOTIFYKM, eError);
 }
 
 static_assert(PVRSRV_PHYS_HEAP_LAST <= IMG_UINT32_MAX,
 	      "PVRSRV_PHYS_HEAP_LAST must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysHeapGetMemInfo(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psPhysHeapGetMemInfoIN_UI8,
 			       IMG_UINT8 * psPhysHeapGetMemInfoOUT_UI8,
@@ -2538,10 +2538,10 @@ PVRSRVBridgePhysHeapGetMemInfo(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSHEAPGETMEMINFO, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetDefaultPhysicalHeap(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psGetDefaultPhysicalHeapIN_UI8,
 				   IMG_UINT8 * psGetDefaultPhysicalHeapOUT_UI8,
@@ -2560,10 +2560,10 @@ PVRSRVBridgeGetDefaultPhysicalHeap(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVGetDefaultPhysicalHeapKM(psConnection, OSGetDevNode(psConnection),
 					   &psGetDefaultPhysicalHeapOUT->eHeap);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETDEFAULTPHYSICALHEAP, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemGetFaultAddress(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevmemGetFaultAddressIN_UI8,
 				  IMG_UINT8 * psDevmemGetFaultAddressOUT_UI8,
@@ -2613,12 +2613,12 @@ PVRSRVBridgeDevmemGetFaultAddress(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMGETFAULTADDRESS, eError);
 }
 
 #if defined(PVRSRV_ENABLE_PROCESS_STATS)
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVStatsUpdateOOMStat(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psPVRSRVStatsUpdateOOMStatIN_UI8,
 				     IMG_UINT8 * psPVRSRVStatsUpdateOOMStatOUT_UI8,
@@ -2636,7 +2636,7 @@ PVRSRVBridgePVRSRVStatsUpdateOOMStat(IMG_UINT32 ui32DispatchTableEntry,
 				     psPVRSRVStatsUpdateOOMStatIN->ui32ui32StatType,
 				     psPVRSRVStatsUpdateOOMStatIN->ui32pid);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVSTATSUPDATEOOMSTAT, eError);
 }
 
 #else
@@ -2650,7 +2650,7 @@ static PVRSRV_ERROR _DevmemXIntReserveRangepsReservationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psDevmemXIntReserveRangeIN_UI8,
 				   IMG_UINT8 * psDevmemXIntReserveRangeOUT_UI8,
@@ -2736,10 +2736,10 @@ PVRSRVBridgeDevmemXIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTRESERVERANGE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psDevmemXIntUnreserveRangeIN_UI8,
 				     IMG_UINT8 * psDevmemXIntUnreserveRangeOUT_UI8,
@@ -2777,10 +2777,10 @@ PVRSRVBridgeDevmemXIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemXIntUnreserveRange_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTUNRESERVERANGE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntMapPages(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemXIntMapPagesIN_UI8,
 			       IMG_UINT8 * psDevmemXIntMapPagesOUT_UI8,
@@ -2855,10 +2855,10 @@ PVRSRVBridgeDevmemXIntMapPages(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTMAPPAGES, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntUnmapPages(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psDevmemXIntUnmapPagesIN_UI8,
 				 IMG_UINT8 * psDevmemXIntUnmapPagesOUT_UI8,
@@ -2911,10 +2911,10 @@ PVRSRVBridgeDevmemXIntUnmapPages(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTUNMAPPAGES, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntMapVRangeToBackingPage(IMG_UINT32 ui32DispatchTableEntry,
 					     IMG_UINT8 * psDevmemXIntMapVRangeToBackingPageIN_UI8,
 					     IMG_UINT8 * psDevmemXIntMapVRangeToBackingPageOUT_UI8,
@@ -2969,7 +2969,7 @@ PVRSRVBridgeDevmemXIntMapVRangeToBackingPage(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTMAPVRANGETOBACKINGPAGE, eError);
 }
 
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
@@ -2977,7 +2977,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 	      "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeChangeSparseMem2(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psChangeSparseMem2IN_UI8,
 			     IMG_UINT8 * psChangeSparseMem2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -3181,7 +3181,7 @@ PVRSRVBridgeChangeSparseMem2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CHANGESPARSEMEM2, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRange2psReservationIntRelease(void *pvData)
@@ -3191,7 +3191,7 @@ static PVRSRV_ERROR _DevmemIntReserveRange2psReservationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psDevmemIntReserveRange2IN_UI8,
 				   IMG_UINT8 * psDevmemIntReserveRange2OUT_UI8,
@@ -3278,10 +3278,10 @@ PVRSRVBridgeDevmemIntReserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGE2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psDevmemIntUnreserveRange2IN_UI8,
 				     IMG_UINT8 * psDevmemIntUnreserveRange2OUT_UI8,
@@ -3319,10 +3319,10 @@ PVRSRVBridgeDevmemIntUnreserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnreserveRange2_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGE2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psDevmemIntMapPMR2IN_UI8,
 			     IMG_UINT8 * psDevmemIntMapPMR2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -3411,10 +3411,10 @@ PVRSRVBridgeDevmemIntMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTMAPPMR2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnmapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemIntUnmapPMR2IN_UI8,
 			       IMG_UINT8 * psDevmemIntUnmapPMR2OUT_UI8,
@@ -3463,7 +3463,7 @@ PVRSRVBridgeDevmemIntUnmapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNMAPPMR2, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMR2psReservationIntRelease(void *pvData)
@@ -3473,7 +3473,7 @@ static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMR2psReservationIntRelease(void
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRangeAndMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 					    IMG_UINT8 * psDevmemIntReserveRangeAndMapPMR2IN_UI8,
 					    IMG_UINT8 * psDevmemIntReserveRangeAndMapPMR2OUT_UI8,
@@ -3582,10 +3582,10 @@ PVRSRVBridgeDevmemIntReserveRangeAndMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGEANDMAPPMR2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 						IMG_UINT8 *
 						psDevmemIntUnreserveRangeAndUnmapPMR2IN_UI8,
@@ -3628,7 +3628,7 @@ PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR2(IMG_UINT32 ui32DispatchTableEntr
 
 DevmemIntUnreserveRangeAndUnmapPMR2_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGEANDUNMAPPMR2, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/mmextmem_bridge/server_mmextmem_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/mmextmem_bridge/server_mmextmem_bridge.c
index 538d04c..9d018ff 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/mmextmem_bridge/server_mmextmem_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/mmextmem_bridge/server_mmextmem_bridge.c
@@ -76,7 +76,7 @@ static PVRSRV_ERROR _PhysmemWrapExtMempsPMRPtrIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemWrapExtMem(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psPhysmemWrapExtMemIN_UI8,
 			      IMG_UINT8 * psPhysmemWrapExtMemOUT_UI8,
@@ -131,7 +131,7 @@ PVRSRVBridgePhysmemWrapExtMem(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMWRAPEXTMEM, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/pdump_bridge/server_pdump_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/pdump_bridge/server_pdump_bridge.c
index 6b3baf6..8099578 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/pdump_bridge/server_pdump_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/pdump_bridge/server_pdump_bridge.c
@@ -70,7 +70,7 @@ static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 static_assert(4 <= IMG_UINT32_MAX, "4 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpImageDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psPDumpImageDescriptorIN_UI8,
 				 IMG_UINT8 * psPDumpImageDescriptorOUT_UI8,
@@ -241,13 +241,13 @@ PVRSRVBridgePDumpImageDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPIMAGEDESCRIPTOR, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_COMMENT_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_COMMENT_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpComment(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psPVRSRVPDumpCommentIN_UI8,
 			       IMG_UINT8 * psPVRSRVPDumpCommentOUT_UI8,
@@ -349,10 +349,10 @@ PVRSRVBridgePVRSRVPDumpComment(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPCOMMENT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpSetFrame(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPVRSRVPDumpSetFrameIN_UI8,
 				IMG_UINT8 * psPVRSRVPDumpSetFrameOUT_UI8,
@@ -369,13 +369,13 @@ PVRSRVBridgePVRSRVPDumpSetFrame(IMG_UINT32 ui32DispatchTableEntry,
 	    PDumpSetFrameKM(psConnection, OSGetDevNode(psConnection),
 			    psPVRSRVPDumpSetFrameIN->ui32Frame);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPSETFRAME, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpDataDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPDumpDataDescriptorIN_UI8,
 				IMG_UINT8 * psPDumpDataDescriptorOUT_UI8,
@@ -515,7 +515,7 @@ PVRSRVBridgePDumpDataDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPDATADESCRIPTOR, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpctrl_bridge/server_pdumpctrl_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpctrl_bridge/server_pdumpctrl_bridge.c
index 2d5578c..1d25737 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpctrl_bridge/server_pdumpctrl_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpctrl_bridge/server_pdumpctrl_bridge.c
@@ -67,7 +67,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpGetState(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPVRSRVPDumpGetStateIN_UI8,
 				IMG_UINT8 * psPVRSRVPDumpGetStateOUT_UI8,
@@ -85,10 +85,10 @@ PVRSRVBridgePVRSRVPDumpGetState(IMG_UINT32 ui32DispatchTableEntry,
 
 	psPVRSRVPDumpGetStateOUT->eError = PDumpGetStateKM(&psPVRSRVPDumpGetStateOUT->ui64State);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPGETSTATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpGetFrame(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPVRSRVPDumpGetFrameIN_UI8,
 				IMG_UINT8 * psPVRSRVPDumpGetFrameOUT_UI8,
@@ -107,10 +107,10 @@ PVRSRVBridgePVRSRVPDumpGetFrame(IMG_UINT32 ui32DispatchTableEntry,
 	    PDumpGetFrameKM(psConnection, OSGetDevNode(psConnection),
 			    &psPVRSRVPDumpGetFrameOUT->ui32Frame);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPGETFRAME, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpSetDefaultCaptureParams(IMG_UINT32 ui32DispatchTableEntry,
 					       IMG_UINT8 *
 					       psPVRSRVPDumpSetDefaultCaptureParamsIN_UI8,
@@ -138,10 +138,10 @@ PVRSRVBridgePVRSRVPDumpSetDefaultCaptureParams(IMG_UINT32 ui32DispatchTableEntry
 					   psPVRSRVPDumpSetDefaultCaptureParamsIN->
 					   ui32AutoTermTimeout);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPSETDEFAULTCAPTUREPARAMS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpIsLastCaptureFrame(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psPVRSRVPDumpIsLastCaptureFrameIN_UI8,
 					  IMG_UINT8 * psPVRSRVPDumpIsLastCaptureFrameOUT_UI8,
@@ -160,10 +160,10 @@ PVRSRVBridgePVRSRVPDumpIsLastCaptureFrame(IMG_UINT32 ui32DispatchTableEntry,
 	psPVRSRVPDumpIsLastCaptureFrameOUT->eError =
 	    PDumpIsLastCaptureFrameKM(&psPVRSRVPDumpIsLastCaptureFrameOUT->bpbIsLastCaptureFrame);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPISLASTCAPTUREFRAME, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpForceCaptureStop(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psPVRSRVPDumpForceCaptureStopIN_UI8,
 					IMG_UINT8 * psPVRSRVPDumpForceCaptureStopOUT_UI8,
@@ -181,7 +181,7 @@ PVRSRVBridgePVRSRVPDumpForceCaptureStop(IMG_UINT32 ui32DispatchTableEntry,
 	psPVRSRVPDumpForceCaptureStopOUT->eError =
 	    PDumpForceCaptureStopKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPFORCECAPTURESTOP, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpmm_bridge/server_pdumpmm_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpmm_bridge/server_pdumpmm_bridge.c
index 38e1a66..8fc3b7d 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpmm_bridge/server_pdumpmm_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/pdumpmm_bridge/server_pdumpmm_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpLoadMem(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psPMRPDumpLoadMemIN_UI8,
 			    IMG_UINT8 * psPMRPDumpLoadMemOUT_UI8, CONNECTION_DATA * psConnection)
@@ -117,10 +117,10 @@ PVRSRVBridgePMRPDumpLoadMem(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPLOADMEM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpLoadMemValue32(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue32IN_UI8,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue32OUT_UI8,
@@ -172,10 +172,10 @@ PVRSRVBridgePMRPDumpLoadMemValue32(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPLOADMEMVALUE32, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpLoadMemValue64(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue64IN_UI8,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue64OUT_UI8,
@@ -227,13 +227,13 @@ PVRSRVBridgePMRPDumpLoadMemValue64(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPLOADMEMVALUE64, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpSaveToFile(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psPMRPDumpSaveToFileIN_UI8,
 			       IMG_UINT8 * psPMRPDumpSaveToFileOUT_UI8,
@@ -367,7 +367,7 @@ PVRSRVBridgePMRPDumpSaveToFile(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPSAVETOFILE, eError);
 }
 
 static_assert(PHYSMEM_PDUMP_MEMSPACE_MAX_LENGTH <= IMG_UINT32_MAX,
@@ -375,7 +375,7 @@ static_assert(PHYSMEM_PDUMP_MEMSPACE_MAX_LENGTH <= IMG_UINT32_MAX,
 static_assert(PHYSMEM_PDUMP_SYMNAME_MAX_LENGTH <= IMG_UINT32_MAX,
 	      "PHYSMEM_PDUMP_SYMNAME_MAX_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpSymbolicAddr(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psPMRPDumpSymbolicAddrIN_UI8,
 				 IMG_UINT8 * psPMRPDumpSymbolicAddrOUT_UI8,
@@ -553,10 +553,10 @@ PVRSRVBridgePMRPDumpSymbolicAddr(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPSYMBOLICADDR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpPol32(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psPMRPDumpPol32IN_UI8,
 			  IMG_UINT8 * psPMRPDumpPol32OUT_UI8, CONNECTION_DATA * psConnection)
@@ -606,10 +606,10 @@ PVRSRVBridgePMRPDumpPol32(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPPOL32, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpCheck32(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psPMRPDumpCheck32IN_UI8,
 			    IMG_UINT8 * psPMRPDumpCheck32OUT_UI8, CONNECTION_DATA * psConnection)
@@ -659,10 +659,10 @@ PVRSRVBridgePMRPDumpCheck32(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPCHECK32, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psPMRPDumpCBPIN_UI8,
 			IMG_UINT8 * psPMRPDumpCBPOUT_UI8, CONNECTION_DATA * psConnection)
@@ -711,13 +711,13 @@ PVRSRVBridgePMRPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPCBP, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntPDumpSaveToFileVirtual(IMG_UINT32 ui32DispatchTableEntry,
 					    IMG_UINT8 * psDevmemIntPDumpSaveToFileVirtualIN_UI8,
 					    IMG_UINT8 * psDevmemIntPDumpSaveToFileVirtualOUT_UI8,
@@ -864,7 +864,7 @@ PVRSRVBridgeDevmemIntPDumpSaveToFileVirtual(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTPDUMPSAVETOFILEVIRTUAL, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/pvrtl_bridge/server_pvrtl_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/pvrtl_bridge/server_pvrtl_bridge.c
index 9facf79..0693d57 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/pvrtl_bridge/server_pvrtl_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/pvrtl_bridge/server_pvrtl_bridge.c
@@ -75,7 +75,7 @@ static PVRSRV_ERROR _TLOpenStreampsSDIntRelease(void *pvData)
 static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
 	      "PRVSRVTL_MAX_STREAM_NAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLOpenStream(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psTLOpenStreamIN_UI8,
 			 IMG_UINT8 * psTLOpenStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -238,10 +238,10 @@ PVRSRVBridgeTLOpenStream(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLOPENSTREAM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLCloseStream(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psTLCloseStreamIN_UI8,
 			  IMG_UINT8 * psTLCloseStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -273,10 +273,10 @@ PVRSRVBridgeTLCloseStream(IMG_UINT32 ui32DispatchTableEntry,
 
 TLCloseStream_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLCLOSESTREAM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLAcquireData(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psTLAcquireDataIN_UI8,
 			  IMG_UINT8 * psTLAcquireDataOUT_UI8, CONNECTION_DATA * psConnection)
@@ -324,10 +324,10 @@ PVRSRVBridgeTLAcquireData(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLACQUIREDATA, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLReleaseData(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psTLReleaseDataIN_UI8,
 			  IMG_UINT8 * psTLReleaseDataOUT_UI8, CONNECTION_DATA * psConnection)
@@ -375,7 +375,7 @@ PVRSRVBridgeTLReleaseData(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLRELEASEDATA, eError);
 }
 
 static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
@@ -383,7 +383,7 @@ static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRVTL_MAX_DISCOVERABLE_STREAMS_BUFFER <= IMG_UINT32_MAX,
 	      "PVRSRVTL_MAX_DISCOVERABLE_STREAMS_BUFFER must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLDiscoverStreams(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psTLDiscoverStreamsIN_UI8,
 			      IMG_UINT8 * psTLDiscoverStreamsOUT_UI8,
@@ -513,10 +513,10 @@ PVRSRVBridgeTLDiscoverStreams(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLDISCOVERSTREAMS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLReserveStream(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psTLReserveStreamIN_UI8,
 			    IMG_UINT8 * psTLReserveStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -566,10 +566,10 @@ PVRSRVBridgeTLReserveStream(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLRESERVESTREAM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLCommitStream(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psTLCommitStreamIN_UI8,
 			   IMG_UINT8 * psTLCommitStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -615,13 +615,13 @@ PVRSRVBridgeTLCommitStream(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLCOMMITSTREAM, eError);
 }
 
 static_assert(PVRSRVTL_MAX_PACKET_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRVTL_MAX_PACKET_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLWriteData(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psTLWriteDataIN_UI8,
 			IMG_UINT8 * psTLWriteDataOUT_UI8, CONNECTION_DATA * psConnection)
@@ -745,7 +745,7 @@ PVRSRVBridgeTLWriteData(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLWRITEDATA, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxbreakpoint_bridge/server_rgxbreakpoint_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxbreakpoint_bridge/server_rgxbreakpoint_bridge.c
index 78fd2b4..2d95e72 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxbreakpoint_bridge/server_rgxbreakpoint_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxbreakpoint_bridge/server_rgxbreakpoint_bridge.c
@@ -67,7 +67,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psRGXSetBreakpointIN_UI8,
 			     IMG_UINT8 * psRGXSetBreakpointOUT_UI8, CONNECTION_DATA * psConnection)
@@ -119,10 +119,10 @@ PVRSRVBridgeRGXSetBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETBREAKPOINT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXClearBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXClearBreakpointIN_UI8,
 			       IMG_UINT8 * psRGXClearBreakpointOUT_UI8,
@@ -170,10 +170,10 @@ PVRSRVBridgeRGXClearBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCLEARBREAKPOINT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXEnableBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXEnableBreakpointIN_UI8,
 				IMG_UINT8 * psRGXEnableBreakpointOUT_UI8,
@@ -222,10 +222,10 @@ PVRSRVBridgeRGXEnableBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXENABLEBREAKPOINT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDisableBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRGXDisableBreakpointIN_UI8,
 				 IMG_UINT8 * psRGXDisableBreakpointOUT_UI8,
@@ -274,10 +274,10 @@ PVRSRVBridgeRGXDisableBreakpoint(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDISABLEBREAKPOINT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXOverallocateBPRegisters(IMG_UINT32 ui32DispatchTableEntry,
 				       IMG_UINT8 * psRGXOverallocateBPRegistersIN_UI8,
 				       IMG_UINT8 * psRGXOverallocateBPRegistersOUT_UI8,
@@ -295,7 +295,7 @@ PVRSRVBridgeRGXOverallocateBPRegisters(IMG_UINT32 ui32DispatchTableEntry,
 					       psRGXOverallocateBPRegistersIN->ui32TempRegs,
 					       psRGXOverallocateBPRegistersIN->ui32SharedRegs);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXOVERALLOCATEBPREGISTERS, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxcmp_bridge/server_rgxcmp_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxcmp_bridge/server_rgxcmp_bridge.c
index a8d284e..111268c 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxcmp_bridge/server_rgxcmp_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxcmp_bridge/server_rgxcmp_bridge.c
@@ -79,7 +79,7 @@ static_assert(RGXFWIF_RF_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(RGXFWIF_STATIC_COMPUTECONTEXT_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_STATIC_COMPUTECONTEXT_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXCreateComputeContextIN_UI8,
 				    IMG_UINT8 * psRGXCreateComputeContextOUT_UI8,
@@ -306,10 +306,10 @@ PVRSRVBridgeRGXCreateComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATECOMPUTECONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXDestroyComputeContextIN_UI8,
 				     IMG_UINT8 * psRGXDestroyComputeContextOUT_UI8,
@@ -361,10 +361,10 @@ PVRSRVBridgeRGXDestroyComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyComputeContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYCOMPUTECONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFlushComputeData(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXFlushComputeDataIN_UI8,
 				IMG_UINT8 * psRGXFlushComputeDataOUT_UI8,
@@ -428,10 +428,10 @@ PVRSRVBridgeRGXFlushComputeData(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFLUSHCOMPUTEDATA, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetComputeContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXSetComputeContextPriorityIN_UI8,
 					 IMG_UINT8 * psRGXSetComputeContextPriorityOUT_UI8,
@@ -498,10 +498,10 @@ PVRSRVBridgeRGXSetComputeContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETCOMPUTECONTEXTPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXNotifyComputeWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 					      IMG_UINT8 * psRGXNotifyComputeWriteOffsetUpdateIN_UI8,
 					      IMG_UINT8 *
@@ -568,7 +568,7 @@ PVRSRVBridgeRGXNotifyComputeWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXNOTIFYCOMPUTEWRITEOFFSETUPDATE, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -580,7 +580,7 @@ static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
 	      "PVRSRV_MAX_SYNCS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickCDM2(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psRGXKickCDM2IN_UI8,
 			IMG_UINT8 * psRGXKickCDM2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -972,10 +972,10 @@ PVRSRVBridgeRGXKickCDM2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKCDM2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetComputeContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXSetComputeContextPropertyIN_UI8,
 					 IMG_UINT8 * psRGXSetComputeContextPropertyOUT_UI8,
@@ -1043,10 +1043,10 @@ PVRSRVBridgeRGXSetComputeContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETCOMPUTECONTEXTPROPERTY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetLastDeviceError(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXGetLastDeviceErrorIN_UI8,
 				  IMG_UINT8 * psRGXGetLastDeviceErrorOUT_UI8,
@@ -1081,13 +1081,13 @@ PVRSRVBridgeRGXGetLastDeviceError(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXGetLastDeviceError_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETLASTDEVICEERROR, eError);
 }
 
 static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickTimestampQuery(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXKickTimestampQueryIN_UI8,
 				  IMG_UINT8 * psRGXKickTimestampQueryOUT_UI8,
@@ -1234,7 +1234,7 @@ PVRSRVBridgeRGXKickTimestampQuery(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKTIMESTAMPQUERY, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c
index 07b6162..199f008 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetFWLog(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXFWDebugSetFWLogIN_UI8,
 			       IMG_UINT8 * psRGXFWDebugSetFWLogOUT_UI8,
@@ -84,10 +84,10 @@ PVRSRVBridgeRGXFWDebugSetFWLog(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugSetFWLogKM(psConnection, OSGetDevNode(psConnection),
 				       psRGXFWDebugSetFWLogIN->ui32RGXFWLogType);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETFWLOG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugDumpFreelistPageList(IMG_UINT32 ui32DispatchTableEntry,
 					   IMG_UINT8 * psRGXFWDebugDumpFreelistPageListIN_UI8,
 					   IMG_UINT8 * psRGXFWDebugDumpFreelistPageListOUT_UI8,
@@ -105,10 +105,10 @@ PVRSRVBridgeRGXFWDebugDumpFreelistPageList(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugDumpFreelistPageListOUT->eError =
 	    PVRSRVRGXFWDebugDumpFreelistPageListKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGDUMPFREELISTPAGELIST, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSuspendDevice(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXFWDebugSuspendDeviceIN_UI8,
 				    IMG_UINT8 * psRGXFWDebugSuspendDeviceOUT_UI8,
@@ -126,10 +126,10 @@ PVRSRVBridgeRGXFWDebugSuspendDevice(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugSuspendDeviceOUT->eError =
 	    PVRSRVRGXFWDebugSuspendDeviceKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSUSPENDDEVICE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugResumeDevice(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugResumeDeviceIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugResumeDeviceOUT_UI8,
@@ -147,10 +147,10 @@ PVRSRVBridgeRGXFWDebugResumeDevice(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugResumeDeviceOUT->eError =
 	    PVRSRVRGXFWDebugResumeDeviceKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGRESUMEDEVICE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetVzConnectionCooldownPeriodInSec(IMG_UINT32 ui32DispatchTableEntry,
 							 IMG_UINT8 *
 							 psRGXFWDebugSetVzConnectionCooldownPeriodInSecIN_UI8,
@@ -173,10 +173,10 @@ PVRSRVBridgeRGXFWDebugSetVzConnectionCooldownPeriodInSec(IMG_UINT32 ui32Dispatch
 								 psRGXFWDebugSetVzConnectionCooldownPeriodInSecIN->
 								 ui32ui32VzConnectionCooldownPeriodInSec);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETVZCONNECTIONCOOLDOWNPERIODINSEC, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetHCSDeadline(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXFWDebugSetHCSDeadlineIN_UI8,
 				     IMG_UINT8 * psRGXFWDebugSetHCSDeadlineOUT_UI8,
@@ -193,10 +193,10 @@ PVRSRVBridgeRGXFWDebugSetHCSDeadline(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugSetHCSDeadlineKM(psConnection, OSGetDevNode(psConnection),
 					     psRGXFWDebugSetHCSDeadlineIN->ui32RGXHCSDeadline);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETHCSDEADLINE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverPriority(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXFWDebugSetDriverPriorityIN_UI8,
 					IMG_UINT8 * psRGXFWDebugSetDriverPriorityOUT_UI8,
@@ -214,10 +214,10 @@ PVRSRVBridgeRGXFWDebugSetDriverPriority(IMG_UINT32 ui32DispatchTableEntry,
 						psRGXFWDebugSetDriverPriorityIN->ui32DriverID,
 						psRGXFWDebugSetDriverPriorityIN->ui32Priority);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverTimeSlice(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXFWDebugSetDriverTimeSliceIN_UI8,
 					 IMG_UINT8 * psRGXFWDebugSetDriverTimeSliceOUT_UI8,
@@ -235,10 +235,10 @@ PVRSRVBridgeRGXFWDebugSetDriverTimeSlice(IMG_UINT32 ui32DispatchTableEntry,
 						 psRGXFWDebugSetDriverTimeSliceIN->ui32DriverID,
 						 psRGXFWDebugSetDriverTimeSliceIN->ui32TimeSlice);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERTIMESLICE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverTimeSliceInterval(IMG_UINT32 ui32DispatchTableEntry,
 						 IMG_UINT8 *
 						 psRGXFWDebugSetDriverTimeSliceIntervalIN_UI8,
@@ -260,10 +260,10 @@ PVRSRVBridgeRGXFWDebugSetDriverTimeSliceInterval(IMG_UINT32 ui32DispatchTableEnt
 							 psRGXFWDebugSetDriverTimeSliceIntervalIN->
 							 ui32TimeSliceInterval);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERTIMESLICEINTERVAL, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverIsolationGroup(IMG_UINT32 ui32DispatchTableEntry,
 					      IMG_UINT8 * psRGXFWDebugSetDriverIsolationGroupIN_UI8,
 					      IMG_UINT8 *
@@ -285,10 +285,10 @@ PVRSRVBridgeRGXFWDebugSetDriverIsolationGroup(IMG_UINT32 ui32DispatchTableEntry,
 						      psRGXFWDebugSetDriverIsolationGroupIN->
 						      ui32IsolationGroup);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERISOLATIONGROUP, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetOSNewOnlineState(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXFWDebugSetOSNewOnlineStateIN_UI8,
 					  IMG_UINT8 * psRGXFWDebugSetOSNewOnlineStateOUT_UI8,
@@ -307,10 +307,10 @@ PVRSRVBridgeRGXFWDebugSetOSNewOnlineState(IMG_UINT32 ui32DispatchTableEntry,
 						  psRGXFWDebugSetOSNewOnlineStateIN->
 						  ui32OSNewState);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETOSNEWONLINESTATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugMapGuestHeap(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugMapGuestHeapIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugMapGuestHeapOUT_UI8,
@@ -328,10 +328,10 @@ PVRSRVBridgeRGXFWDebugMapGuestHeap(IMG_UINT32 ui32DispatchTableEntry,
 					   psRGXFWDebugMapGuestHeapIN->ui32DriverID,
 					   psRGXFWDebugMapGuestHeapIN->ui64ui64GuestHeapBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGMAPGUESTHEAP, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugPHRConfigure(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugPHRConfigureIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugPHRConfigureOUT_UI8,
@@ -348,10 +348,10 @@ PVRSRVBridgeRGXFWDebugPHRConfigure(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugPHRConfigureKM(psConnection, OSGetDevNode(psConnection),
 					   psRGXFWDebugPHRConfigureIN->ui32ui32PHRMode);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGPHRCONFIGURE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugWdgConfigure(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugWdgConfigureIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugWdgConfigureOUT_UI8,
@@ -368,10 +368,10 @@ PVRSRVBridgeRGXFWDebugWdgConfigure(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugWdgConfigureKM(psConnection, OSGetDevNode(psConnection),
 					   psRGXFWDebugWdgConfigureIN->ui32ui32WdgPeriodUs);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGWDGCONFIGURE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCurrentTime(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psRGXCurrentTimeIN_UI8,
 			   IMG_UINT8 * psRGXCurrentTimeOUT_UI8, CONNECTION_DATA * psConnection)
@@ -387,12 +387,12 @@ PVRSRVBridgeRGXCurrentTime(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXCurrentTime(psConnection, OSGetDevNode(psConnection),
 				 &psRGXCurrentTimeOUT->ui64Time);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCURRENTTIME, eError);
 }
 
 #if defined(SUPPORT_VALIDATION)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugInjectFault(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXFWDebugInjectFaultIN_UI8,
 				  IMG_UINT8 * psRGXFWDebugInjectFaultOUT_UI8,
@@ -410,7 +410,7 @@ PVRSRVBridgeRGXFWDebugInjectFault(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugInjectFaultOUT->eError =
 	    PVRSRVRGXFWDebugInjectFaultKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGINJECTFAULT, eError);
 }
 
 #else
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxhwperf_bridge/server_rgxhwperf_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxhwperf_bridge/server_rgxhwperf_bridge.c
index fdcc3a3..de943c8 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxhwperf_bridge/server_rgxhwperf_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxhwperf_bridge/server_rgxhwperf_bridge.c
@@ -66,7 +66,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCtrlHWPerf(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psRGXCtrlHWPerfIN_UI8,
 			  IMG_UINT8 * psRGXCtrlHWPerfOUT_UI8, CONNECTION_DATA * psConnection)
@@ -81,10 +81,10 @@ PVRSRVBridgeRGXCtrlHWPerf(IMG_UINT32 ui32DispatchTableEntry,
 				  psRGXCtrlHWPerfIN->ui32StreamId,
 				  psRGXCtrlHWPerfIN->bToggle, psRGXCtrlHWPerfIN->ui64Mask);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCTRLHWPERF, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetHWPerfBvncFeatureFlags(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXGetHWPerfBvncFeatureFlagsIN_UI8,
 					 IMG_UINT8 * psRGXGetHWPerfBvncFeatureFlagsOUT_UI8,
@@ -103,13 +103,13 @@ PVRSRVBridgeRGXGetHWPerfBvncFeatureFlags(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXGetHWPerfBvncFeatureFlagsKM(psConnection, OSGetDevNode(psConnection),
 						 &psRGXGetHWPerfBvncFeatureFlagsOUT->sBVNC);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETHWPERFBVNCFEATUREFLAGS, eError);
 }
 
 static_assert(RGXFWIF_HWPERF_CTRL_BLKS_MAX <= IMG_UINT32_MAX,
 	      "RGXFWIF_HWPERF_CTRL_BLKS_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXConfigMuxHWPerfCounters(IMG_UINT32 ui32DispatchTableEntry,
 				       IMG_UINT8 * psRGXConfigMuxHWPerfCountersIN_UI8,
 				       IMG_UINT8 * psRGXConfigMuxHWPerfCountersOUT_UI8,
@@ -218,13 +218,13 @@ PVRSRVBridgeRGXConfigMuxHWPerfCounters(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCONFIGMUXHWPERFCOUNTERS, eError);
 }
 
 static_assert(RGXFWIF_HWPERF_CTRL_BLKS_MAX <= IMG_UINT32_MAX,
 	      "RGXFWIF_HWPERF_CTRL_BLKS_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXControlHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXControlHWPerfBlocksIN_UI8,
 				   IMG_UINT8 * psRGXControlHWPerfBlocksOUT_UI8,
@@ -326,13 +326,13 @@ PVRSRVBridgeRGXControlHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCONTROLHWPERFBLOCKS, eError);
 }
 
 static_assert(RGX_HWPERF_MAX_CUSTOM_CNTRS <= IMG_UINT32_MAX,
 	      "RGX_HWPERF_MAX_CUSTOM_CNTRS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXConfigCustomCounters(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXConfigCustomCountersIN_UI8,
 				    IMG_UINT8 * psRGXConfigCustomCountersOUT_UI8,
@@ -439,13 +439,13 @@ PVRSRVBridgeRGXConfigCustomCounters(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCONFIGCUSTOMCOUNTERS, eError);
 }
 
 static_assert(RGXFWIF_HWPERF_CTRL_BLKS_MAX <= IMG_UINT32_MAX,
 	      "RGXFWIF_HWPERF_CTRL_BLKS_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXConfigureHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXConfigureHWPerfBlocksIN_UI8,
 				     IMG_UINT8 * psRGXConfigureHWPerfBlocksOUT_UI8,
@@ -551,12 +551,12 @@ PVRSRVBridgeRGXConfigureHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCONFIGUREHWPERFBLOCKS, eError);
 }
 
 static_assert(1 <= IMG_UINT32_MAX, "1 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetConfiguredHWPerfMuxCounters(IMG_UINT32 ui32DispatchTableEntry,
 					      IMG_UINT8 * psRGXGetConfiguredHWPerfMuxCountersIN_UI8,
 					      IMG_UINT8 *
@@ -669,12 +669,12 @@ PVRSRVBridgeRGXGetConfiguredHWPerfMuxCounters(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETCONFIGUREDHWPERFMUXCOUNTERS, eError);
 }
 
 static_assert(1 <= IMG_UINT32_MAX, "1 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetConfiguredHWPerfCounters(IMG_UINT32 ui32DispatchTableEntry,
 					   IMG_UINT8 * psRGXGetConfiguredHWPerfCountersIN_UI8,
 					   IMG_UINT8 * psRGXGetConfiguredHWPerfCountersOUT_UI8,
@@ -781,10 +781,13 @@ PVRSRVBridgeRGXGetConfiguredHWPerfCounters(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETCONFIGUREDHWPERFCOUNTERS, eError);
 }
 
-static IMG_INT
+static_assert(RGXFWIF_HWPERF_CTRL_BLKS_MAX <= IMG_UINT32_MAX,
+	      "RGXFWIF_HWPERF_CTRL_BLKS_MAX must not be larger than IMG_UINT32_MAX");
+
+static size_t
 PVRSRVBridgeRGXGetEnabledHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psRGXGetEnabledHWPerfBlocksIN_UI8,
 				      IMG_UINT8 * psRGXGetEnabledHWPerfBlocksOUT_UI8,
@@ -807,6 +810,12 @@ PVRSRVBridgeRGXGetEnabledHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	IMG_UINT64 ui64BufferSize =
 	    ((IMG_UINT64) psRGXGetEnabledHWPerfBlocksIN->ui32ArrayLen * sizeof(IMG_UINT32)) + 0;
 
+	if (psRGXGetEnabledHWPerfBlocksIN->ui32ArrayLen > RGXFWIF_HWPERF_CTRL_BLKS_MAX)
+	{
+		psRGXGetEnabledHWPerfBlocksOUT->eError = PVRSRV_ERROR_BRIDGE_ARRAY_SIZE_TOO_BIG;
+		goto RGXGetEnabledHWPerfBlocks_exit;
+	}
+
 	psRGXGetEnabledHWPerfBlocksOUT->pui32EnabledBlockIDs =
 	    psRGXGetEnabledHWPerfBlocksIN->pui32EnabledBlockIDs;
 
@@ -892,12 +901,12 @@ PVRSRVBridgeRGXGetEnabledHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETENABLEDHWPERFBLOCKS, eError);
 }
 
 #if defined(PVRSRV_FORCE_HWPERF_TO_SCHED_CLK)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetHWPerfTimeStamp(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXGetHWPerfTimeStampIN_UI8,
 				  IMG_UINT8 * psRGXGetHWPerfTimeStampOUT_UI8,
@@ -916,7 +925,7 @@ PVRSRVBridgeRGXGetHWPerfTimeStamp(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXGetHWPerfTimeStampKM(psConnection, OSGetDevNode(psConnection),
 					  &psRGXGetHWPerfTimeStampOUT->ui64TimeStamp);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETHWPERFTIMESTAMP, eError);
 }
 
 #else
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c
index 8d943cd..dfa3f9a 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c
@@ -74,7 +74,7 @@ static PVRSRV_ERROR _RGXCreateKickSyncContextpsKickSyncContextIntRelease(void *p
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXCreateKickSyncContextIN_UI8,
 				     IMG_UINT8 * psRGXCreateKickSyncContextOUT_UI8,
@@ -161,10 +161,10 @@ PVRSRVBridgeRGXCreateKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEKICKSYNCCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psRGXDestroyKickSyncContextIN_UI8,
 				      IMG_UINT8 * psRGXDestroyKickSyncContextOUT_UI8,
@@ -202,7 +202,7 @@ PVRSRVBridgeRGXDestroyKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyKickSyncContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYKICKSYNCCONTEXT, eError);
 }
 
 static_assert(PVRSRV_MAX_DEV_VARS <= IMG_UINT32_MAX,
@@ -210,7 +210,7 @@ static_assert(PVRSRV_MAX_DEV_VARS <= IMG_UINT32_MAX,
 static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX,
 	      "PVRSRV_SYNC_NAME_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psRGXKickSync2IN_UI8,
 			 IMG_UINT8 * psRGXKickSync2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -462,10 +462,10 @@ PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKSYNC2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetKickSyncContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXSetKickSyncContextPropertyIN_UI8,
 					  IMG_UINT8 * psRGXSetKickSyncContextPropertyOUT_UI8,
@@ -519,7 +519,7 @@ PVRSRVBridgeRGXSetKickSyncContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETKICKSYNCCONTEXTPROPERTY, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxpdump_bridge/server_rgxpdump_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxpdump_bridge/server_rgxpdump_bridge.c
index 6a52346..a7366f0 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxpdump_bridge/server_rgxpdump_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxpdump_bridge/server_rgxpdump_bridge.c
@@ -65,7 +65,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpTraceBuffer(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psPDumpTraceBufferIN_UI8,
 			     IMG_UINT8 * psPDumpTraceBufferOUT_UI8, CONNECTION_DATA * psConnection)
@@ -79,10 +79,10 @@ PVRSRVBridgePDumpTraceBuffer(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpTraceBufferKM(psConnection, OSGetDevNode(psConnection),
 				     psPDumpTraceBufferIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPTRACEBUFFER, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpSignatureBuffer(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psPDumpSignatureBufferIN_UI8,
 				 IMG_UINT8 * psPDumpSignatureBufferOUT_UI8,
@@ -99,12 +99,12 @@ PVRSRVBridgePDumpSignatureBuffer(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpSignatureBufferKM(psConnection, OSGetDevNode(psConnection),
 					 psPDumpSignatureBufferIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPSIGNATUREBUFFER, eError);
 }
 
 #if defined(SUPPORT_VALIDATION)
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpComputeCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psPDumpComputeCRCSignatureCheckIN_UI8,
 					  IMG_UINT8 * psPDumpComputeCRCSignatureCheckOUT_UI8,
@@ -122,14 +122,14 @@ PVRSRVBridgePDumpComputeCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 						  psPDumpComputeCRCSignatureCheckIN->
 						  ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPCOMPUTECRCSIGNATURECHECK, eError);
 }
 
 #else
 #define PVRSRVBridgePDumpComputeCRCSignatureCheck NULL
 #endif
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPDumpCRCSignatureCheckIN_UI8,
 				   IMG_UINT8 * psPDumpCRCSignatureCheckOUT_UI8,
@@ -146,10 +146,10 @@ PVRSRVBridgePDumpCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpCRCSignatureCheckKM(psConnection, OSGetDevNode(psConnection),
 					   psPDumpCRCSignatureCheckIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPCRCSIGNATURECHECK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpValCheckPreCommand(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psPDumpValCheckPreCommandIN_UI8,
 				    IMG_UINT8 * psPDumpValCheckPreCommandOUT_UI8,
@@ -166,10 +166,10 @@ PVRSRVBridgePDumpValCheckPreCommand(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpValCheckPreCommandKM(psConnection, OSGetDevNode(psConnection),
 					    psPDumpValCheckPreCommandIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPVALCHECKPRECOMMAND, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpValCheckPostCommand(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psPDumpValCheckPostCommandIN_UI8,
 				     IMG_UINT8 * psPDumpValCheckPostCommandOUT_UI8,
@@ -186,7 +186,7 @@ PVRSRVBridgePDumpValCheckPostCommand(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpValCheckPostCommandKM(psConnection, OSGetDevNode(psConnection),
 					     psPDumpValCheckPostCommandIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPVALCHECKPOSTCOMMAND, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxregconfig_bridge/server_rgxregconfig_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxregconfig_bridge/server_rgxregconfig_bridge.c
index 5484014..7802ff2 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxregconfig_bridge/server_rgxregconfig_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxregconfig_bridge/server_rgxregconfig_bridge.c
@@ -67,7 +67,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetRegConfigType(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXSetRegConfigTypeIN_UI8,
 				IMG_UINT8 * psRGXSetRegConfigTypeOUT_UI8,
@@ -84,10 +84,10 @@ PVRSRVBridgeRGXSetRegConfigType(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXSetRegConfigTypeKM(psConnection, OSGetDevNode(psConnection),
 					psRGXSetRegConfigTypeIN->ui8RegPowerIsland);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETREGCONFIGTYPE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXAddRegconfig(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psRGXAddRegconfigIN_UI8,
 			    IMG_UINT8 * psRGXAddRegconfigOUT_UI8, CONNECTION_DATA * psConnection)
@@ -103,10 +103,10 @@ PVRSRVBridgeRGXAddRegconfig(IMG_UINT32 ui32DispatchTableEntry,
 				    psRGXAddRegconfigIN->ui64RegValue,
 				    psRGXAddRegconfigIN->ui64RegMask);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXADDREGCONFIG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXClearRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psRGXClearRegConfigIN_UI8,
 			      IMG_UINT8 * psRGXClearRegConfigOUT_UI8,
@@ -122,10 +122,10 @@ PVRSRVBridgeRGXClearRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXClearRegConfigOUT->eError =
 	    PVRSRVRGXClearRegConfigKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCLEARREGCONFIG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXEnableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXEnableRegConfigIN_UI8,
 			       IMG_UINT8 * psRGXEnableRegConfigOUT_UI8,
@@ -142,10 +142,10 @@ PVRSRVBridgeRGXEnableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXEnableRegConfigOUT->eError =
 	    PVRSRVRGXEnableRegConfigKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXENABLEREGCONFIG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDisableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXDisableRegConfigIN_UI8,
 				IMG_UINT8 * psRGXDisableRegConfigOUT_UI8,
@@ -163,7 +163,7 @@ PVRSRVBridgeRGXDisableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXDisableRegConfigOUT->eError =
 	    PVRSRVRGXDisableRegConfigKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDISABLEREGCONFIG, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/common_rgxta3d_bridge.h b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/common_rgxta3d_bridge.h
index 7271ad4..0b164b8 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/common_rgxta3d_bridge.h
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/common_rgxta3d_bridge.h
@@ -74,7 +74,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define PVRSRV_BRIDGE_RGXTA3D_RGXSETRENDERCONTEXTPROPERTY			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+14
 #define PVRSRV_BRIDGE_RGXTA3D_RGXCREATEZSBUFFER2			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+15
 #define PVRSRV_BRIDGE_RGXTA3D_RGXCREATEFREELIST2			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+16
-#define PVRSRV_BRIDGE_RGXTA3D_CMD_LAST			(PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+16)
+#define PVRSRV_BRIDGE_RGXTA3D_RGXCREATEHWRTDATASET2			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+17
+#define PVRSRV_BRIDGE_RGXTA3D_CMD_LAST			(PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+17)
 
 /*******************************************
             RGXCreateHWRTDataSet
@@ -466,4 +467,47 @@ typedef struct PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2_TAG
 	PVRSRV_ERROR eError;
 } __packed PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2;
 
+/*******************************************
+            RGXCreateHWRTDataSet2
+ *******************************************/
+
+/* Bridge in structure for RGXCreateHWRTDataSet2 */
+typedef struct PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2_TAG
+{
+	IMG_UINT64 ui64FlippedMultiSampleCtl;
+	IMG_UINT64 ui64MultiSampleCtl;
+	IMG_HANDLE hPMMlistsReservation;
+	IMG_DEV_VIRTADDR *psMacrotileArrayDevVAddr;
+	IMG_DEV_VIRTADDR *psRTCDevVAddr;
+	IMG_DEV_VIRTADDR *psRgnHeaderDevVAddr;
+	IMG_DEV_VIRTADDR *psTailPtrsDevVAddr;
+	IMG_DEV_VIRTADDR *psVHeapTableDevVAddr;
+	IMG_HANDLE *phKmHwRTDataSet;
+	IMG_HANDLE *phapsFreeLists;
+	IMG_UINT32 ui32ISPMergeLowerX;
+	IMG_UINT32 ui32ISPMergeLowerY;
+	IMG_UINT32 ui32ISPMergeScaleX;
+	IMG_UINT32 ui32ISPMergeScaleY;
+	IMG_UINT32 ui32ISPMergeUpperX;
+	IMG_UINT32 ui32ISPMergeUpperY;
+	IMG_UINT32 ui32ISPMtileSize;
+	IMG_UINT32 ui32MTileStride;
+	IMG_UINT32 ui32PPPScreen;
+	IMG_UINT32 ui32RgnHeaderSize;
+	IMG_UINT32 ui32TEAA;
+	IMG_UINT32 ui32TEMTILE1;
+	IMG_UINT32 ui32TEMTILE2;
+	IMG_UINT32 ui32TEScreen;
+	IMG_UINT32 ui32TPCSize;
+	IMG_UINT32 ui32TPCStride;
+	IMG_UINT16 ui16MaxRTs;
+} __packed PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2;
+
+/* Bridge out structure for RGXCreateHWRTDataSet2 */
+typedef struct PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2_TAG
+{
+	IMG_HANDLE *phKmHwRTDataSet;
+	PVRSRV_ERROR eError;
+} __packed PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2;
+
 #endif /* COMMON_RGXTA3D_BRIDGE_H */
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/server_rgxta3d_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/server_rgxta3d_bridge.c
index 700cec5..9aa4ec1 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/server_rgxta3d_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxta3d_bridge/server_rgxta3d_bridge.c
@@ -89,7 +89,7 @@ static_assert(RGXMKIF_NUM_GEOMDATAS <= IMG_UINT32_MAX,
 static_assert(RGXMKIF_NUM_RTDATAS <= IMG_UINT32_MAX,
 	      "RGXMKIF_NUM_RTDATAS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRGXCreateHWRTDataSetIN_UI8,
 				 IMG_UINT8 * psRGXCreateHWRTDataSetOUT_UI8,
@@ -531,10 +531,10 @@ PVRSRVBridgeRGXCreateHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXDestroyHWRTDataSetIN_UI8,
 				  IMG_UINT8 * psRGXDestroyHWRTDataSetOUT_UI8,
@@ -572,7 +572,7 @@ PVRSRVBridgeRGXDestroyHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyHWRTDataSet_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYHWRTDATASET, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateZSBufferpssZSBufferKMIntRelease(void *pvData)
@@ -582,7 +582,7 @@ static PVRSRV_ERROR _RGXCreateZSBufferpssZSBufferKMIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psRGXCreateZSBufferIN_UI8,
 			      IMG_UINT8 * psRGXCreateZSBufferOUT_UI8,
@@ -686,10 +686,10 @@ PVRSRVBridgeRGXCreateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEZSBUFFER, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXDestroyZSBufferIN_UI8,
 			       IMG_UINT8 * psRGXDestroyZSBufferOUT_UI8,
@@ -726,7 +726,7 @@ PVRSRVBridgeRGXDestroyZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyZSBuffer_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYZSBUFFER, eError);
 }
 
 static PVRSRV_ERROR _RGXPopulateZSBufferpssPopulationIntRelease(void *pvData)
@@ -736,7 +736,7 @@ static PVRSRV_ERROR _RGXPopulateZSBufferpssPopulationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXPopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXPopulateZSBufferIN_UI8,
 				IMG_UINT8 * psRGXPopulateZSBufferOUT_UI8,
@@ -820,10 +820,10 @@ PVRSRVBridgeRGXPopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXPOPULATEZSBUFFER, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXUnpopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXUnpopulateZSBufferIN_UI8,
 				  IMG_UINT8 * psRGXUnpopulateZSBufferOUT_UI8,
@@ -859,7 +859,7 @@ PVRSRVBridgeRGXUnpopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXUnpopulateZSBuffer_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXUNPOPULATEZSBUFFER, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateFreeListpsCleanupCookieIntRelease(void *pvData)
@@ -869,7 +869,7 @@ static PVRSRV_ERROR _RGXCreateFreeListpsCleanupCookieIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateFreeList(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psRGXCreateFreeListIN_UI8,
 			      IMG_UINT8 * psRGXCreateFreeListOUT_UI8,
@@ -1009,10 +1009,10 @@ PVRSRVBridgeRGXCreateFreeList(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyFreeList(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXDestroyFreeListIN_UI8,
 			       IMG_UINT8 * psRGXDestroyFreeListOUT_UI8,
@@ -1047,7 +1047,7 @@ PVRSRVBridgeRGXDestroyFreeList(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyFreeList_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYFREELIST, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateRenderContextpsRenderContextIntRelease(void *pvData)
@@ -1062,7 +1062,7 @@ static_assert(RGXFWIF_RF_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(RGXFWIF_STATIC_RENDERCONTEXT_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_STATIC_RENDERCONTEXT_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXCreateRenderContextIN_UI8,
 				   IMG_UINT8 * psRGXCreateRenderContextOUT_UI8,
@@ -1275,10 +1275,10 @@ PVRSRVBridgeRGXCreateRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATERENDERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXDestroyRenderContextIN_UI8,
 				    IMG_UINT8 * psRGXDestroyRenderContextOUT_UI8,
@@ -1316,10 +1316,10 @@ PVRSRVBridgeRGXDestroyRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyRenderContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYRENDERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSendZSStoreDisable(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXSendZSStoreDisableIN_UI8,
 				  IMG_UINT8 * psRGXSendZSStoreDisableOUT_UI8,
@@ -1374,10 +1374,10 @@ PVRSRVBridgeRGXSendZSStoreDisable(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSENDZSSTOREDISABLE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetRenderContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXSetRenderContextPriorityIN_UI8,
 					IMG_UINT8 * psRGXSetRenderContextPriorityOUT_UI8,
@@ -1430,10 +1430,10 @@ PVRSRVBridgeRGXSetRenderContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETRENDERCONTEXTPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXRenderContextStalled(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXRenderContextStalledIN_UI8,
 				    IMG_UINT8 * psRGXRenderContextStalledOUT_UI8,
@@ -1483,7 +1483,7 @@ PVRSRVBridgeRGXRenderContextStalled(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXRENDERCONTEXTSTALLED, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -1505,7 +1505,7 @@ static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
 	      "PVRSRV_MAX_SYNCS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickTA3D2(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psRGXKickTA3D2IN_UI8,
 			 IMG_UINT8 * psRGXKickTA3D2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -2335,10 +2335,10 @@ PVRSRVBridgeRGXKickTA3D2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKTA3D2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetRenderContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXSetRenderContextPropertyIN_UI8,
 					IMG_UINT8 * psRGXSetRenderContextPropertyOUT_UI8,
@@ -2392,7 +2392,7 @@ PVRSRVBridgeRGXSetRenderContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETRENDERCONTEXTPROPERTY, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateZSBuffer2pssZSBufferKMIntRelease(void *pvData)
@@ -2402,7 +2402,7 @@ static PVRSRV_ERROR _RGXCreateZSBuffer2pssZSBufferKMIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateZSBuffer2(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXCreateZSBuffer2IN_UI8,
 			       IMG_UINT8 * psRGXCreateZSBuffer2OUT_UI8,
@@ -2508,7 +2508,7 @@ PVRSRVBridgeRGXCreateZSBuffer2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEZSBUFFER2, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateFreeList2psCleanupCookieIntRelease(void *pvData)
@@ -2518,7 +2518,7 @@ static PVRSRV_ERROR _RGXCreateFreeList2psCleanupCookieIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateFreeList2(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXCreateFreeList2IN_UI8,
 			       IMG_UINT8 * psRGXCreateFreeList2OUT_UI8,
@@ -2659,7 +2659,474 @@ PVRSRVBridgeRGXCreateFreeList2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2, eError);
+}
+
+static PVRSRV_ERROR _RGXCreateHWRTDataSet2psKmHwRTDataSetIntRelease(void *pvData)
+{
+	PVRSRV_ERROR eError;
+	eError = RGXDestroyHWRTDataSet((RGX_KM_HW_RT_DATASET *) pvData);
+	return eError;
+}
+
+static_assert(RGXMKIF_NUM_GEOMDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_GEOMDATAS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_RTDATA_FREELISTS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_RTDATA_FREELISTS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_GEOMDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_GEOMDATAS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_RTDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_RTDATAS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_RTDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_RTDATAS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_GEOMDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_GEOMDATAS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_RTDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_RTDATAS must not be larger than IMG_UINT32_MAX");
+
+static size_t
+PVRSRVBridgeRGXCreateHWRTDataSet2(IMG_UINT32 ui32DispatchTableEntry,
+				  IMG_UINT8 * psRGXCreateHWRTDataSet2IN_UI8,
+				  IMG_UINT8 * psRGXCreateHWRTDataSet2OUT_UI8,
+				  CONNECTION_DATA * psConnection)
+{
+	PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2 *psRGXCreateHWRTDataSet2IN =
+	    (PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2 *)
+	    IMG_OFFSET_ADDR(psRGXCreateHWRTDataSet2IN_UI8, 0);
+	PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2 *psRGXCreateHWRTDataSet2OUT =
+	    (PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2 *)
+	    IMG_OFFSET_ADDR(psRGXCreateHWRTDataSet2OUT_UI8, 0);
+
+	IMG_DEV_VIRTADDR *sVHeapTableDevVAddrInt = NULL;
+	IMG_HANDLE hPMMlistsReservation = psRGXCreateHWRTDataSet2IN->hPMMlistsReservation;
+	DEVMEMINT_RESERVATION2 *psPMMlistsReservationInt = NULL;
+	RGX_FREELIST **psapsFreeListsInt = NULL;
+	IMG_HANDLE *hapsFreeListsInt2 = NULL;
+	IMG_DEV_VIRTADDR *sTailPtrsDevVAddrInt = NULL;
+	IMG_DEV_VIRTADDR *sMacrotileArrayDevVAddrInt = NULL;
+	IMG_DEV_VIRTADDR *sRgnHeaderDevVAddrInt = NULL;
+	IMG_DEV_VIRTADDR *sRTCDevVAddrInt = NULL;
+	RGX_KM_HW_RT_DATASET **psKmHwRTDataSetInt = NULL;
+	IMG_HANDLE *hKmHwRTDataSetInt2 = NULL;
+
+	IMG_UINT32 ui32NextOffset = 0;
+	IMG_BYTE *pArrayArgsBuffer = NULL;
+	IMG_BOOL bHaveEnoughSpace = IMG_FALSE;
+
+	IMG_UINT32 ui32BufferSize = 0;
+	IMG_UINT64 ui64BufferSize =
+	    ((IMG_UINT64) RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(RGX_FREELIST *)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATAS * sizeof(IMG_HANDLE)) + 0;
+
+	psRGXCreateHWRTDataSet2OUT->phKmHwRTDataSet = psRGXCreateHWRTDataSet2IN->phKmHwRTDataSet;
+
+	if (ui64BufferSize > IMG_UINT32_MAX)
+	{
+		psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_BRIDGE_BUFFER_TOO_SMALL;
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	ui32BufferSize = (IMG_UINT32) ui64BufferSize;
+
+	if (ui32BufferSize != 0)
+	{
+		/* Try to use remainder of input buffer for copies if possible, word-aligned for safety. */
+		IMG_UINT32 ui32InBufferOffset =
+		    PVR_ALIGN(sizeof(*psRGXCreateHWRTDataSet2IN), sizeof(unsigned long));
+		IMG_UINT32 ui32InBufferExcessSize =
+		    ui32InBufferOffset >=
+		    PVRSRV_MAX_BRIDGE_IN_SIZE ? 0 : PVRSRV_MAX_BRIDGE_IN_SIZE - ui32InBufferOffset;
+
+		bHaveEnoughSpace = ui32BufferSize <= ui32InBufferExcessSize;
+		if (bHaveEnoughSpace)
+		{
+			IMG_BYTE *pInputBuffer = (IMG_BYTE *) (void *)psRGXCreateHWRTDataSet2IN;
+
+			pArrayArgsBuffer = &pInputBuffer[ui32InBufferOffset];
+		}
+		else
+		{
+			pArrayArgsBuffer = OSAllocMemNoStats(ui32BufferSize);
+
+			if (!pArrayArgsBuffer)
+			{
+				psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
+				goto RGXCreateHWRTDataSet2_exit;
+			}
+		}
+	}
+
+	{
+		sVHeapTableDevVAddrInt =
+		    (IMG_DEV_VIRTADDR *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, sVHeapTableDevVAddrInt,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->psVHeapTableDevVAddr,
+		     RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+	{
+		psapsFreeListsInt =
+		    (RGX_FREELIST **) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		OSCachedMemSet(psapsFreeListsInt, 0,
+			       RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(RGX_FREELIST *));
+		ui32NextOffset += RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(RGX_FREELIST *);
+		hapsFreeListsInt2 =
+		    (IMG_HANDLE *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, hapsFreeListsInt2,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->phapsFreeLists,
+		     RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+	{
+		sTailPtrsDevVAddrInt =
+		    (IMG_DEV_VIRTADDR *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, sTailPtrsDevVAddrInt,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->psTailPtrsDevVAddr,
+		     RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+	{
+		sMacrotileArrayDevVAddrInt =
+		    (IMG_DEV_VIRTADDR *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, sMacrotileArrayDevVAddrInt,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->psMacrotileArrayDevVAddr,
+		     RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+	{
+		sRgnHeaderDevVAddrInt =
+		    (IMG_DEV_VIRTADDR *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, sRgnHeaderDevVAddrInt,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->psRgnHeaderDevVAddr,
+		     RGXMKIF_NUM_RTDATAS * sizeof(IMG_DEV_VIRTADDR)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+	{
+		sRTCDevVAddrInt =
+		    (IMG_DEV_VIRTADDR *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, sRTCDevVAddrInt,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->psRTCDevVAddr,
+		     RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+	if (IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset) != NULL)
+	{
+		psKmHwRTDataSetInt =
+		    (RGX_KM_HW_RT_DATASET **) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		OSCachedMemSet(psKmHwRTDataSetInt, 0,
+			       RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *));
+		ui32NextOffset += RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *);
+		hKmHwRTDataSetInt2 =
+		    (IMG_HANDLE *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_RTDATAS * sizeof(IMG_HANDLE);
+	}
+
+	/* Lock over handle lookup. */
+	LockHandle(psConnection->psHandleBase);
+
+	/* Look up the address from the handle */
+	psRGXCreateHWRTDataSet2OUT->eError =
+	    PVRSRVLookupHandleUnlocked(psConnection->psHandleBase,
+				       (void **)&psPMMlistsReservationInt,
+				       hPMMlistsReservation,
+				       PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2, IMG_TRUE);
+	if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+	{
+		UnlockHandle(psConnection->psHandleBase);
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	{
+		IMG_UINT32 i;
+
+		for (i = 0; i < RGXMKIF_NUM_RTDATA_FREELISTS; i++)
+		{
+			/* Look up the address from the handle */
+			psRGXCreateHWRTDataSet2OUT->eError =
+			    PVRSRVLookupHandleUnlocked(psConnection->psHandleBase,
+						       (void **)&psapsFreeListsInt[i],
+						       hapsFreeListsInt2[i],
+						       PVRSRV_HANDLE_TYPE_RGX_FREELIST, IMG_TRUE);
+			if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+			{
+				UnlockHandle(psConnection->psHandleBase);
+				goto RGXCreateHWRTDataSet2_exit;
+			}
+		}
+	}
+	/* Release now we have looked up handles. */
+	UnlockHandle(psConnection->psHandleBase);
+
+	psRGXCreateHWRTDataSet2OUT->eError =
+	    RGXCreateHWRTDataSet2(psConnection, OSGetDevNode(psConnection),
+				  sVHeapTableDevVAddrInt,
+				  psPMMlistsReservationInt,
+				  psapsFreeListsInt,
+				  psRGXCreateHWRTDataSet2IN->ui32PPPScreen,
+				  psRGXCreateHWRTDataSet2IN->ui64MultiSampleCtl,
+				  psRGXCreateHWRTDataSet2IN->ui64FlippedMultiSampleCtl,
+				  psRGXCreateHWRTDataSet2IN->ui32TPCStride,
+				  sTailPtrsDevVAddrInt,
+				  psRGXCreateHWRTDataSet2IN->ui32TPCSize,
+				  psRGXCreateHWRTDataSet2IN->ui32TEScreen,
+				  psRGXCreateHWRTDataSet2IN->ui32TEAA,
+				  psRGXCreateHWRTDataSet2IN->ui32TEMTILE1,
+				  psRGXCreateHWRTDataSet2IN->ui32TEMTILE2,
+				  psRGXCreateHWRTDataSet2IN->ui32MTileStride,
+				  psRGXCreateHWRTDataSet2IN->ui32ISPMergeLowerX,
+				  psRGXCreateHWRTDataSet2IN->ui32ISPMergeLowerY,
+				  psRGXCreateHWRTDataSet2IN->ui32ISPMergeUpperX,
+				  psRGXCreateHWRTDataSet2IN->ui32ISPMergeUpperY,
+				  psRGXCreateHWRTDataSet2IN->ui32ISPMergeScaleX,
+				  psRGXCreateHWRTDataSet2IN->ui32ISPMergeScaleY,
+				  sMacrotileArrayDevVAddrInt,
+				  sRgnHeaderDevVAddrInt,
+				  sRTCDevVAddrInt,
+				  psRGXCreateHWRTDataSet2IN->ui32RgnHeaderSize,
+				  psRGXCreateHWRTDataSet2IN->ui32ISPMtileSize,
+				  psRGXCreateHWRTDataSet2IN->ui16MaxRTs, psKmHwRTDataSetInt);
+	/* Exit early if bridged call fails */
+	if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+	{
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	/* Lock over handle creation. */
+	LockHandle(psConnection->psHandleBase);
+	if (hKmHwRTDataSetInt2)
+	{
+		IMG_UINT32 i;
+
+		for (i = 0; i < RGXMKIF_NUM_RTDATAS; i++)
+		{
+
+			psRGXCreateHWRTDataSet2OUT->eError =
+			    PVRSRVAllocHandleUnlocked(psConnection->psHandleBase,
+						      &hKmHwRTDataSetInt2[i],
+						      (void *)psKmHwRTDataSetInt[i],
+						      PVRSRV_HANDLE_TYPE_RGX_KM_HW_RT_DATASET,
+						      PVRSRV_HANDLE_ALLOC_FLAG_MULTI,
+						      (PFN_HANDLE_RELEASE) &
+						      _RGXCreateHWRTDataSet2psKmHwRTDataSetIntRelease);
+			if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+			{
+				IMG_UINT32 j;
+				/* Ensure the remaining handles are set to NULL. hKmHwRTDataSetInt2[i] was
+				 * zeroed when calling PVRSRVAllocHandleUnlocked, so we start at the next
+				 * element. If it was the last iteration, the loop doesn't run.
+				 */
+				for (j = i + 1; j < RGXMKIF_NUM_RTDATAS; j++)
+				{
+					hKmHwRTDataSetInt2[j] = NULL;
+				}
+				UnlockHandle(psConnection->psHandleBase);
+				goto RGXCreateHWRTDataSet2_exit;
+			}
+
+		}
+	}
+	/* Release now we have created handles. */
+	UnlockHandle(psConnection->psHandleBase);
+
+	/* If dest ptr is non-null and we have data to copy */
+	if ((hKmHwRTDataSetInt2) && ((RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *)) > 0))
+	{
+		if (unlikely
+		    (OSCopyToUser
+		     (NULL, (void __user *)psRGXCreateHWRTDataSet2OUT->phKmHwRTDataSet,
+		      hKmHwRTDataSetInt2,
+		      (RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *))) != PVRSRV_OK))
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+RGXCreateHWRTDataSet2_exit:
+
+	/* Lock over handle lookup cleanup. */
+	LockHandle(psConnection->psHandleBase);
+
+	/* Unreference the previously looked up handle */
+	if (psPMMlistsReservationInt)
+	{
+		PVRSRVReleaseHandleUnlocked(psConnection->psHandleBase,
+					    hPMMlistsReservation,
+					    PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2);
+	}
+
+	if (hapsFreeListsInt2)
+	{
+		IMG_UINT32 i;
+
+		for (i = 0; i < RGXMKIF_NUM_RTDATA_FREELISTS; i++)
+		{
+
+			/* Unreference the previously looked up handle */
+			if (psapsFreeListsInt && psapsFreeListsInt[i])
+			{
+				PVRSRVReleaseHandleUnlocked(psConnection->psHandleBase,
+							    hapsFreeListsInt2[i],
+							    PVRSRV_HANDLE_TYPE_RGX_FREELIST);
+			}
+		}
+	}
+	/* Release now we have cleaned up look up handles. */
+	UnlockHandle(psConnection->psHandleBase);
+
+	if (psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK)
+	{
+		if (hKmHwRTDataSetInt2)
+		{
+			PVRSRV_ERROR eError;
+
+			/* Lock over handle creation cleanup. */
+			LockHandle(psConnection->psHandleBase);
+
+			{
+				IMG_UINT32 idx;
+				for (idx = 0; idx < RGXMKIF_NUM_RTDATAS; idx++)
+				{
+					if (hKmHwRTDataSetInt2[idx])
+					{
+
+						eError =
+						    PVRSRVDestroyHandleUnlocked(psConnection->
+										psHandleBase,
+										hKmHwRTDataSetInt2
+										[idx],
+										PVRSRV_HANDLE_TYPE_RGX_KM_HW_RT_DATASET);
+						if (unlikely
+						    ((eError != PVRSRV_OK)
+						     && (eError != PVRSRV_ERROR_RETRY)))
+						{
+							PVR_DPF((PVR_DBG_ERROR,
+								 "%s: %s",
+								 __func__,
+								 PVRSRVGetErrorString(eError)));
+						}
+						/* Releasing the handle should free/destroy/release the resource.
+						 * This should never fail... */
+						PVR_ASSERT((eError == PVRSRV_OK)
+							   || (eError == PVRSRV_ERROR_RETRY));
+
+					}
+					else
+					{
+						/* Free/Destroy/Release the resource */
+						RGXDestroyHWRTDataSet(psKmHwRTDataSetInt[idx]);
+					}
+				}
+			}
+
+			/* Release now we have cleaned up creation handles. */
+			UnlockHandle(psConnection->psHandleBase);
+
+		}
+
+		else if (psKmHwRTDataSetInt)
+		{
+			IMG_UINT32 i;
+			for (i = 0; i < RGXMKIF_NUM_RTDATAS; i++)
+			{
+				if (psKmHwRTDataSetInt[i])
+				{
+					RGXDestroyHWRTDataSet(psKmHwRTDataSetInt[i]);
+				}
+			}
+		}
+
+	}
+
+	/* Allocated space should be equal to the last updated offset */
+#ifdef PVRSRV_NEED_PVR_ASSERT
+	if (psRGXCreateHWRTDataSet2OUT->eError == PVRSRV_OK)
+		PVR_ASSERT(ui32BufferSize == ui32NextOffset);
+#endif /* PVRSRV_NEED_PVR_ASSERT */
+
+	if (!bHaveEnoughSpace && pArrayArgsBuffer)
+		OSFreeMemNoStats(pArrayArgsBuffer);
+
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2, eError);
 }
 
 /* ***************************************************************************
@@ -2761,6 +3228,11 @@ PVRSRV_ERROR InitRGXTA3DBridge(void)
 			      sizeof(PVRSRV_BRIDGE_IN_RGXCREATEFREELIST2),
 			      sizeof(PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2));
 
+	SetDispatchTableEntry(PVRSRV_BRIDGE_RGXTA3D, PVRSRV_BRIDGE_RGXTA3D_RGXCREATEHWRTDATASET2,
+			      PVRSRVBridgeRGXCreateHWRTDataSet2, NULL,
+			      sizeof(PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2),
+			      sizeof(PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2));
+
 	return PVRSRV_OK;
 }
 
@@ -2809,4 +3281,6 @@ void DeinitRGXTA3DBridge(void)
 
 	UnsetDispatchTableEntry(PVRSRV_BRIDGE_RGXTA3D, PVRSRV_BRIDGE_RGXTA3D_RGXCREATEFREELIST2);
 
+	UnsetDispatchTableEntry(PVRSRV_BRIDGE_RGXTA3D, PVRSRV_BRIDGE_RGXTA3D_RGXCREATEHWRTDATASET2);
+
 }
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c
index 4af3cfc..22f2810 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c
@@ -65,7 +65,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXBeginTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXBeginTimerQueryIN_UI8,
 			       IMG_UINT8 * psRGXBeginTimerQueryOUT_UI8,
@@ -81,10 +81,10 @@ PVRSRVBridgeRGXBeginTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXBeginTimerQueryKM(psConnection, OSGetDevNode(psConnection),
 				       psRGXBeginTimerQueryIN->ui32QueryId);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXBEGINTIMERQUERY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXEndTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psRGXEndTimerQueryIN_UI8,
 			     IMG_UINT8 * psRGXEndTimerQueryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -99,10 +99,10 @@ PVRSRVBridgeRGXEndTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXEndTimerQueryOUT->eError =
 	    PVRSRVRGXEndTimerQueryKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXENDTIMERQUERY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXQueryTimer(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psRGXQueryTimerIN_UI8,
 			  IMG_UINT8 * psRGXQueryTimerOUT_UI8, CONNECTION_DATA * psConnection)
@@ -118,7 +118,7 @@ PVRSRVBridgeRGXQueryTimer(IMG_UINT32 ui32DispatchTableEntry,
 				  &psRGXQueryTimerOUT->ui64StartTime,
 				  &psRGXQueryTimerOUT->ui64EndTime);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXQUERYTIMER, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq2_bridge/server_rgxtq2_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq2_bridge/server_rgxtq2_bridge.c
index 8dfc01b..bccd646 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq2_bridge/server_rgxtq2_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq2_bridge/server_rgxtq2_bridge.c
@@ -77,7 +77,7 @@ static PVRSRV_ERROR _RGXTDMCreateTransferContextpsTransferContextIntRelease(void
 static_assert(RGXFWIF_RF_CMD_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_RF_CMD_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMCreateTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXTDMCreateTransferContextIN_UI8,
 					IMG_UINT8 * psRGXTDMCreateTransferContextOUT_UI8,
@@ -268,10 +268,10 @@ PVRSRVBridgeRGXTDMCreateTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMCREATETRANSFERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMDestroyTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXTDMDestroyTransferContextIN_UI8,
 					 IMG_UINT8 * psRGXTDMDestroyTransferContextOUT_UI8,
@@ -324,10 +324,10 @@ PVRSRVBridgeRGXTDMDestroyTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXTDMDestroyTransferContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMDESTROYTRANSFERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMSetTransferContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPriorityIN_UI8,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPriorityOUT_UI8,
@@ -395,10 +395,10 @@ PVRSRVBridgeRGXTDMSetTransferContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMSETTRANSFERCONTEXTPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMNotifyWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXTDMNotifyWriteOffsetUpdateIN_UI8,
 					  IMG_UINT8 * psRGXTDMNotifyWriteOffsetUpdateOUT_UI8,
@@ -465,7 +465,7 @@ PVRSRVBridgeRGXTDMNotifyWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMNOTIFYWRITEOFFSETUPDATE, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -477,7 +477,7 @@ static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
 	      "PVRSRV_MAX_SYNCS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMSubmitTransfer2(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXTDMSubmitTransfer2IN_UI8,
 				  IMG_UINT8 * psRGXTDMSubmitTransfer2OUT_UI8,
@@ -882,7 +882,7 @@ PVRSRVBridgeRGXTDMSubmitTransfer2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMSUBMITTRANSFER2, eError);
 }
 
 static PVRSRV_ERROR _RGXTDMGetSharedMemorypsCLIPMRMemIntRelease(void *pvData)
@@ -899,7 +899,7 @@ static PVRSRV_ERROR _RGXTDMGetSharedMemorypsUSCPMRMemIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMGetSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXTDMGetSharedMemoryIN_UI8,
 				  IMG_UINT8 * psRGXTDMGetSharedMemoryOUT_UI8,
@@ -988,10 +988,10 @@ PVRSRVBridgeRGXTDMGetSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMGETSHAREDMEMORY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMReleaseSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psRGXTDMReleaseSharedMemoryIN_UI8,
 				      IMG_UINT8 * psRGXTDMReleaseSharedMemoryOUT_UI8,
@@ -1041,10 +1041,10 @@ PVRSRVBridgeRGXTDMReleaseSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXTDMReleaseSharedMemory_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMRELEASESHAREDMEMORY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMSetTransferContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPropertyIN_UI8,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPropertyOUT_UI8,
@@ -1115,7 +1115,7 @@ PVRSRVBridgeRGXTDMSetTransferContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMSETTRANSFERCONTEXTPROPERTY, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq_bridge/server_rgxtq_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq_bridge/server_rgxtq_bridge.c
index 1d067ac..95e7f54 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq_bridge/server_rgxtq_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/rgxtq_bridge/server_rgxtq_bridge.c
@@ -78,7 +78,7 @@ static PVRSRV_ERROR _RGXCreateTransferContextpsTransferContextIntRelease(void *p
 static_assert(RGXFWIF_RF_CMD_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_RF_CMD_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXCreateTransferContextIN_UI8,
 				     IMG_UINT8 * psRGXCreateTransferContextOUT_UI8,
@@ -251,10 +251,10 @@ PVRSRVBridgeRGXCreateTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATETRANSFERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psRGXDestroyTransferContextIN_UI8,
 				      IMG_UINT8 * psRGXDestroyTransferContextOUT_UI8,
@@ -292,10 +292,10 @@ PVRSRVBridgeRGXDestroyTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyTransferContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYTRANSFERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetTransferContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXSetTransferContextPriorityIN_UI8,
 					  IMG_UINT8 * psRGXSetTransferContextPriorityOUT_UI8,
@@ -348,7 +348,7 @@ PVRSRVBridgeRGXSetTransferContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETTRANSFERCONTEXTPRIORITY, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -360,7 +360,7 @@ static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
 	      "PVRSRV_MAX_SYNCS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSubmitTransfer2(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXSubmitTransfer2IN_UI8,
 			       IMG_UINT8 * psRGXSubmitTransfer2OUT_UI8,
@@ -1020,7 +1020,7 @@ PVRSRVBridgeRGXSubmitTransfer2(IMG_UINT32 ui32DispatchTableEntry,
 	if (pArrayArgsBuffer2)
 		OSFreeMemNoStats(pArrayArgsBuffer2);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSUBMITTRANSFER2, eError);
 }
 
 static PVRSRV_ERROR _RGXTQGetSharedMemorypsCLIPMRMemIntRelease(void *pvData)
@@ -1037,7 +1037,7 @@ static PVRSRV_ERROR _RGXTQGetSharedMemorypsUSCPMRMemIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTQGetSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRGXTQGetSharedMemoryIN_UI8,
 				 IMG_UINT8 * psRGXTQGetSharedMemoryOUT_UI8,
@@ -1112,10 +1112,10 @@ PVRSRVBridgeRGXTQGetSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTQGETSHAREDMEMORY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTQReleaseSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXTQReleaseSharedMemoryIN_UI8,
 				     IMG_UINT8 * psRGXTQReleaseSharedMemoryOUT_UI8,
@@ -1151,10 +1151,10 @@ PVRSRVBridgeRGXTQReleaseSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXTQReleaseSharedMemory_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTQRELEASESHAREDMEMORY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetTransferContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXSetTransferContextPropertyIN_UI8,
 					  IMG_UINT8 * psRGXSetTransferContextPropertyOUT_UI8,
@@ -1208,7 +1208,7 @@ PVRSRVBridgeRGXSetTransferContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETTRANSFERCONTEXTPROPERTY, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/ri_bridge/server_ri_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/ri_bridge/server_ri_bridge.c
index 1f9db7d..940f942 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/ri_bridge/server_ri_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/ri_bridge/server_ri_bridge.c
@@ -65,7 +65,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWritePMREntry(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psRIWritePMREntryIN_UI8,
 			    IMG_UINT8 * psRIWritePMREntryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -110,7 +110,7 @@ PVRSRVBridgeRIWritePMREntry(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEPMRENTRY, eError);
 }
 
 static PVRSRV_ERROR _RIWriteMEMDESCEntrypsRIHandleIntRelease(void *pvData)
@@ -123,7 +123,7 @@ static PVRSRV_ERROR _RIWriteMEMDESCEntrypsRIHandleIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWriteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRIWriteMEMDESCEntryIN_UI8,
 				IMG_UINT8 * psRIWriteMEMDESCEntryOUT_UI8,
@@ -294,7 +294,7 @@ PVRSRVBridgeRIWriteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEMEMDESCENTRY, eError);
 }
 
 static PVRSRV_ERROR _RIWriteProcListEntrypsRIHandleIntRelease(void *pvData)
@@ -307,7 +307,7 @@ static PVRSRV_ERROR _RIWriteProcListEntrypsRIHandleIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWriteProcListEntry(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRIWriteProcListEntryIN_UI8,
 				 IMG_UINT8 * psRIWriteProcListEntryOUT_UI8,
@@ -446,10 +446,10 @@ PVRSRVBridgeRIWriteProcListEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEPROCLISTENTRY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIUpdateMEMDESCAddr(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRIUpdateMEMDESCAddrIN_UI8,
 				IMG_UINT8 * psRIUpdateMEMDESCAddrOUT_UI8,
@@ -498,10 +498,10 @@ PVRSRVBridgeRIUpdateMEMDESCAddr(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIUPDATEMEMDESCADDR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDeleteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRIDeleteMEMDESCEntryIN_UI8,
 				 IMG_UINT8 * psRIDeleteMEMDESCEntryOUT_UI8,
@@ -537,10 +537,10 @@ PVRSRVBridgeRIDeleteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 
 RIDeleteMEMDESCEntry_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDELETEMEMDESCENTRY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDumpList(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psRIDumpListIN_UI8,
 		       IMG_UINT8 * psRIDumpListOUT_UI8, CONNECTION_DATA * psConnection)
@@ -585,10 +585,10 @@ PVRSRVBridgeRIDumpList(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDUMPLIST, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDumpAll(IMG_UINT32 ui32DispatchTableEntry,
 		      IMG_UINT8 * psRIDumpAllIN_UI8,
 		      IMG_UINT8 * psRIDumpAllOUT_UI8, CONNECTION_DATA * psConnection)
@@ -603,10 +603,10 @@ PVRSRVBridgeRIDumpAll(IMG_UINT32 ui32DispatchTableEntry,
 
 	psRIDumpAllOUT->eError = RIDumpAllKM();
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDUMPALL, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDumpProcess(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psRIDumpProcessIN_UI8,
 			  IMG_UINT8 * psRIDumpProcessOUT_UI8, CONNECTION_DATA * psConnection)
@@ -620,10 +620,10 @@ PVRSRVBridgeRIDumpProcess(IMG_UINT32 ui32DispatchTableEntry,
 
 	psRIDumpProcessOUT->eError = RIDumpProcessKM(psRIDumpProcessIN->ui32Pid);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDUMPPROCESS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWritePMREntryWithOwner(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRIWritePMREntryWithOwnerIN_UI8,
 				     IMG_UINT8 * psRIWritePMREntryWithOwnerOUT_UI8,
@@ -672,7 +672,7 @@ PVRSRVBridgeRIWritePMREntryWithOwner(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEPMRENTRYWITHOWNER, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/srvcore_bridge/server_srvcore_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/srvcore_bridge/server_srvcore_bridge.c
index d40e53b..06d2b1d 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/srvcore_bridge/server_srvcore_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/srvcore_bridge/server_srvcore_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeConnect(IMG_UINT32 ui32DispatchTableEntry,
 		    IMG_UINT8 * psConnectIN_UI8,
 		    IMG_UINT8 * psConnectOUT_UI8, CONNECTION_DATA * psConnection)
@@ -87,10 +87,10 @@ PVRSRVBridgeConnect(IMG_UINT32 ui32DispatchTableEntry,
 			    &psConnectOUT->ui8KernelArch,
 			    &psConnectOUT->ui32CapabilityFlags, &psConnectOUT->ui64PackedBvnc);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CONNECT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDisconnect(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psDisconnectIN_UI8,
 		       IMG_UINT8 * psDisconnectOUT_UI8, CONNECTION_DATA * psConnection)
@@ -105,7 +105,7 @@ PVRSRVBridgeDisconnect(IMG_UINT32 ui32DispatchTableEntry,
 
 	psDisconnectOUT->eError = PVRSRVDisconnectKM();
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DISCONNECT, eError);
 }
 
 static PVRSRV_ERROR _AcquireGlobalEventObjecthGlobalEventObjectIntRelease(void *pvData)
@@ -115,7 +115,7 @@ static PVRSRV_ERROR _AcquireGlobalEventObjecthGlobalEventObjectIntRelease(void *
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAcquireGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psAcquireGlobalEventObjectIN_UI8,
 				     IMG_UINT8 * psAcquireGlobalEventObjectOUT_UI8,
@@ -170,10 +170,10 @@ PVRSRVBridgeAcquireGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ACQUIREGLOBALEVENTOBJECT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeReleaseGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psReleaseGlobalEventObjectIN_UI8,
 				     IMG_UINT8 * psReleaseGlobalEventObjectOUT_UI8,
@@ -211,7 +211,7 @@ PVRSRVBridgeReleaseGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 
 ReleaseGlobalEventObject_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RELEASEGLOBALEVENTOBJECT, eError);
 }
 
 static PVRSRV_ERROR _EventObjectOpenhOSEventIntRelease(void *pvData)
@@ -221,7 +221,7 @@ static PVRSRV_ERROR _EventObjectOpenhOSEventIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectOpen(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psEventObjectOpenIN_UI8,
 			    IMG_UINT8 * psEventObjectOpenOUT_UI8, CONNECTION_DATA * psConnection)
@@ -300,10 +300,10 @@ PVRSRVBridgeEventObjectOpen(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTOPEN, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectWait(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psEventObjectWaitIN_UI8,
 			    IMG_UINT8 * psEventObjectWaitOUT_UI8, CONNECTION_DATA * psConnection)
@@ -349,10 +349,10 @@ PVRSRVBridgeEventObjectWait(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTWAIT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectClose(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psEventObjectCloseIN_UI8,
 			     IMG_UINT8 * psEventObjectCloseOUT_UI8, CONNECTION_DATA * psConnection)
@@ -384,10 +384,10 @@ PVRSRVBridgeEventObjectClose(IMG_UINT32 ui32DispatchTableEntry,
 
 EventObjectClose_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTCLOSE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDumpDebugInfo(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psDumpDebugInfoIN_UI8,
 			  IMG_UINT8 * psDumpDebugInfoOUT_UI8, CONNECTION_DATA * psConnection)
@@ -401,10 +401,10 @@ PVRSRVBridgeDumpDebugInfo(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVDumpDebugInfoKM(psConnection, OSGetDevNode(psConnection),
 				  psDumpDebugInfoIN->ui32VerbLevel);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DUMPDEBUGINFO, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetDevClockSpeed(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psGetDevClockSpeedIN_UI8,
 			     IMG_UINT8 * psGetDevClockSpeedOUT_UI8, CONNECTION_DATA * psConnection)
@@ -420,10 +420,10 @@ PVRSRVBridgeGetDevClockSpeed(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVGetDevClockSpeedKM(psConnection, OSGetDevNode(psConnection),
 				     &psGetDevClockSpeedOUT->ui32ClockSpeed);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETDEVCLOCKSPEED, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHWOpTimeout(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psHWOpTimeoutIN_UI8,
 			IMG_UINT8 * psHWOpTimeoutOUT_UI8, CONNECTION_DATA * psConnection)
@@ -437,13 +437,13 @@ PVRSRVBridgeHWOpTimeout(IMG_UINT32 ui32DispatchTableEntry,
 
 	psHWOpTimeoutOUT->eError = PVRSRVHWOpTimeoutKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HWOPTIMEOUT, eError);
 }
 
 static_assert(RGXFW_ALIGN_CHECKS_UM_MAX <= IMG_UINT32_MAX,
 	      "RGXFW_ALIGN_CHECKS_UM_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAlignmentCheck(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psAlignmentCheckIN_UI8,
 			   IMG_UINT8 * psAlignmentCheckOUT_UI8, CONNECTION_DATA * psConnection)
@@ -541,10 +541,10 @@ PVRSRVBridgeAlignmentCheck(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ALIGNMENTCHECK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetDeviceStatus(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psGetDeviceStatusIN_UI8,
 			    IMG_UINT8 * psGetDeviceStatusOUT_UI8, CONNECTION_DATA * psConnection)
@@ -560,12 +560,12 @@ PVRSRVBridgeGetDeviceStatus(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVGetDeviceStatusKM(psConnection, OSGetDevNode(psConnection),
 				    &psGetDeviceStatusOUT->ui32DeviceSatus);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETDEVICESTATUS, eError);
 }
 
 static_assert(8 <= IMG_UINT32_MAX, "8 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetMultiCoreInfo(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psGetMultiCoreInfoIN_UI8,
 			     IMG_UINT8 * psGetMultiCoreInfoOUT_UI8, CONNECTION_DATA * psConnection)
@@ -670,10 +670,10 @@ PVRSRVBridgeGetMultiCoreInfo(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETMULTICOREINFO, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectWaitTimeout(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psEventObjectWaitTimeoutIN_UI8,
 				   IMG_UINT8 * psEventObjectWaitTimeoutOUT_UI8,
@@ -723,13 +723,13 @@ PVRSRVBridgeEventObjectWaitTimeout(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTWAITTIMEOUT, eError);
 }
 
 static_assert(PVRSRV_PROCESS_STAT_TYPE_COUNT <= IMG_UINT32_MAX,
 	      "PVRSRV_PROCESS_STAT_TYPE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeFindProcessMemStats(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psFindProcessMemStatsIN_UI8,
 				IMG_UINT8 * psFindProcessMemStatsOUT_UI8,
@@ -843,7 +843,7 @@ PVRSRVBridgeFindProcessMemStats(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_FINDPROCESSMEMSTATS, eError);
 }
 
 static PVRSRV_ERROR _AcquireInfoPagepsPMRIntRelease(void *pvData)
@@ -853,7 +853,7 @@ static PVRSRV_ERROR _AcquireInfoPagepsPMRIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAcquireInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psAcquireInfoPageIN_UI8,
 			    IMG_UINT8 * psAcquireInfoPageOUT_UI8, CONNECTION_DATA * psConnection)
@@ -902,10 +902,10 @@ PVRSRVBridgeAcquireInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ACQUIREINFOPAGE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeReleaseInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psReleaseInfoPageIN_UI8,
 			    IMG_UINT8 * psReleaseInfoPageOUT_UI8, CONNECTION_DATA * psConnection)
@@ -937,7 +937,7 @@ PVRSRVBridgeReleaseInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 
 ReleaseInfoPage_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RELEASEINFOPAGE, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/sync_bridge/server_sync_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/sync_bridge/server_sync_bridge.c
index a0d9210..a54f23f 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/sync_bridge/server_sync_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/sync_bridge/server_sync_bridge.c
@@ -77,7 +77,7 @@ static PVRSRV_ERROR _AllocSyncPrimitiveBlockpsSyncHandleIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAllocSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psAllocSyncPrimitiveBlockIN_UI8,
 				    IMG_UINT8 * psAllocSyncPrimitiveBlockOUT_UI8,
@@ -179,10 +179,10 @@ PVRSRVBridgeAllocSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ALLOCSYNCPRIMITIVEBLOCK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeFreeSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psFreeSyncPrimitiveBlockIN_UI8,
 				   IMG_UINT8 * psFreeSyncPrimitiveBlockOUT_UI8,
@@ -218,10 +218,10 @@ PVRSRVBridgeFreeSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 
 FreeSyncPrimitiveBlock_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_FREESYNCPRIMITIVEBLOCK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimSet(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psSyncPrimSetIN_UI8,
 			IMG_UINT8 * psSyncPrimSetOUT_UI8, CONNECTION_DATA * psConnection)
@@ -269,12 +269,12 @@ PVRSRVBridgeSyncPrimSet(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMSET, eError);
 }
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDump(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psSyncPrimPDumpIN_UI8,
 			  IMG_UINT8 * psSyncPrimPDumpOUT_UI8, CONNECTION_DATA * psConnection)
@@ -321,7 +321,7 @@ PVRSRVBridgeSyncPrimPDump(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMP, eError);
 }
 
 #else
@@ -330,7 +330,7 @@ PVRSRVBridgeSyncPrimPDump(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDumpValue(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psSyncPrimPDumpValueIN_UI8,
 			       IMG_UINT8 * psSyncPrimPDumpValueOUT_UI8,
@@ -381,7 +381,7 @@ PVRSRVBridgeSyncPrimPDumpValue(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPVALUE, eError);
 }
 
 #else
@@ -390,7 +390,7 @@ PVRSRVBridgeSyncPrimPDumpValue(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psSyncPrimPDumpPolIN_UI8,
 			     IMG_UINT8 * psSyncPrimPDumpPolOUT_UI8, CONNECTION_DATA * psConnection)
@@ -442,7 +442,7 @@ PVRSRVBridgeSyncPrimPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPPOL, eError);
 }
 
 #else
@@ -451,7 +451,7 @@ PVRSRVBridgeSyncPrimPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psSyncPrimPDumpCBPIN_UI8,
 			     IMG_UINT8 * psSyncPrimPDumpCBPOUT_UI8, CONNECTION_DATA * psConnection)
@@ -502,7 +502,7 @@ PVRSRVBridgeSyncPrimPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPCBP, eError);
 }
 
 #else
@@ -512,7 +512,7 @@ PVRSRVBridgeSyncPrimPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX,
 	      "PVRSRV_SYNC_NAME_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncAllocEvent(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psSyncAllocEventIN_UI8,
 			   IMG_UINT8 * psSyncAllocEventOUT_UI8, CONNECTION_DATA * psConnection)
@@ -613,10 +613,10 @@ PVRSRVBridgeSyncAllocEvent(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCALLOCEVENT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncFreeEvent(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psSyncFreeEventIN_UI8,
 			  IMG_UINT8 * psSyncFreeEventOUT_UI8, CONNECTION_DATA * psConnection)
@@ -630,12 +630,12 @@ PVRSRVBridgeSyncFreeEvent(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVSyncFreeEventKM(psConnection, OSGetDevNode(psConnection),
 				  psSyncFreeEventIN->ui32FWAddr);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCFREEEVENT, eError);
 }
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncCheckpointSignalledPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 					    IMG_UINT8 * psSyncCheckpointSignalledPDumpPolIN_UI8,
 					    IMG_UINT8 * psSyncCheckpointSignalledPDumpPolOUT_UI8,
@@ -653,7 +653,7 @@ PVRSRVBridgeSyncCheckpointSignalledPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 	psSyncCheckpointSignalledPDumpPolOUT->eError =
 	    PVRSRVSyncCheckpointSignalledPDumpPolKM(psSyncCheckpointSignalledPDumpPolIN->hFence);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCCHECKPOINTSIGNALLEDPDUMPPOL, eError);
 }
 
 #else
diff --git a/drivers/gpu/img-rogue/23.2/generated/rogue/synctracking_bridge/server_synctracking_bridge.c b/drivers/gpu/img-rogue/23.2/generated/rogue/synctracking_bridge/server_synctracking_bridge.c
index 06757e5..1c2136a 100644
--- a/drivers/gpu/img-rogue/23.2/generated/rogue/synctracking_bridge/server_synctracking_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/rogue/synctracking_bridge/server_synctracking_bridge.c
@@ -66,7 +66,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncRecordRemoveByHandle(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psSyncRecordRemoveByHandleIN_UI8,
 				     IMG_UINT8 * psSyncRecordRemoveByHandleOUT_UI8,
@@ -102,7 +102,7 @@ PVRSRVBridgeSyncRecordRemoveByHandle(IMG_UINT32 ui32DispatchTableEntry,
 
 SyncRecordRemoveByHandle_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCRECORDREMOVEBYHANDLE, eError);
 }
 
 static PVRSRV_ERROR _SyncRecordAddpshRecordIntRelease(void *pvData)
@@ -115,7 +115,7 @@ static PVRSRV_ERROR _SyncRecordAddpshRecordIntRelease(void *pvData)
 static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX,
 	      "PVRSRV_SYNC_NAME_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncRecordAdd(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psSyncRecordAddIN_UI8,
 			  IMG_UINT8 * psSyncRecordAddOUT_UI8, CONNECTION_DATA * psConnection)
@@ -284,7 +284,7 @@ PVRSRVBridgeSyncRecordAdd(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCRECORDADD, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/cache_bridge/server_cache_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/cache_bridge/server_cache_bridge.c
index b2f5267..614599b 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/cache_bridge/server_cache_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/cache_bridge/server_cache_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 static_assert(CACHE_BATCH_MAX <= IMG_UINT32_MAX,
 	      "CACHE_BATCH_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeCacheOpQueue(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psCacheOpQueueIN_UI8,
 			 IMG_UINT8 * psCacheOpQueueOUT_UI8, CONNECTION_DATA * psConnection)
@@ -300,10 +300,10 @@ PVRSRVBridgeCacheOpQueue(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CACHEOPQUEUE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeCacheOpExec(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psCacheOpExecIN_UI8,
 			IMG_UINT8 * psCacheOpExecOUT_UI8, CONNECTION_DATA * psConnection)
@@ -352,10 +352,10 @@ PVRSRVBridgeCacheOpExec(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CACHEOPEXEC, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeCacheOpLog(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psCacheOpLogIN_UI8,
 		       IMG_UINT8 * psCacheOpLogOUT_UI8, CONNECTION_DATA * psConnection)
@@ -406,7 +406,7 @@ PVRSRVBridgeCacheOpLog(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CACHEOPLOG, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/cmm_bridge/server_cmm_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/cmm_bridge/server_cmm_bridge.c
index cc658c7..019daf5 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/cmm_bridge/server_cmm_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/cmm_bridge/server_cmm_bridge.c
@@ -75,7 +75,7 @@ static PVRSRV_ERROR _DevmemIntExportCtxpsContextExportIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntExportCtx(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemIntExportCtxIN_UI8,
 			       IMG_UINT8 * psDevmemIntExportCtxOUT_UI8,
@@ -179,10 +179,10 @@ PVRSRVBridgeDevmemIntExportCtx(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTEXPORTCTX, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnexportCtx(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psDevmemIntUnexportCtxIN_UI8,
 				 IMG_UINT8 * psDevmemIntUnexportCtxOUT_UI8,
@@ -218,7 +218,7 @@ PVRSRVBridgeDevmemIntUnexportCtx(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnexportCtx_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNEXPORTCTX, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntAcquireRemoteCtxpsContextIntRelease(void *pvData)
@@ -228,7 +228,7 @@ static PVRSRV_ERROR _DevmemIntAcquireRemoteCtxpsContextIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntAcquireRemoteCtx(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psDevmemIntAcquireRemoteCtxIN_UI8,
 				      IMG_UINT8 * psDevmemIntAcquireRemoteCtxOUT_UI8,
@@ -352,7 +352,7 @@ PVRSRVBridgeDevmemIntAcquireRemoteCtx(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTACQUIREREMOTECTX, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/devicememhistory_bridge/server_devicememhistory_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/devicememhistory_bridge/server_devicememhistory_bridge.c
index 72c6a86..fa81161 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/devicememhistory_bridge/server_devicememhistory_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/devicememhistory_bridge/server_devicememhistory_bridge.c
@@ -71,7 +71,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psDevicememHistoryMapIN_UI8,
 				IMG_UINT8 * psDevicememHistoryMapOUT_UI8,
@@ -199,13 +199,13 @@ PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYMAP, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevicememHistoryUnmapIN_UI8,
 				  IMG_UINT8 * psDevicememHistoryUnmapOUT_UI8,
@@ -333,13 +333,13 @@ PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYUNMAP, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psDevicememHistoryMapVRangeIN_UI8,
 				      IMG_UINT8 * psDevicememHistoryMapVRangeOUT_UI8,
@@ -438,13 +438,13 @@ PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYMAPVRANGE, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psDevicememHistoryUnmapVRangeIN_UI8,
 					IMG_UINT8 * psDevicememHistoryUnmapVRangeOUT_UI8,
@@ -546,7 +546,7 @@ PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYUNMAPVRANGE, eError);
 }
 
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
@@ -556,7 +556,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 	      "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psDevicememHistorySparseChangeIN_UI8,
 					 IMG_UINT8 * psDevicememHistorySparseChangeOUT_UI8,
@@ -758,7 +758,7 @@ PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVICEMEMHISTORYSPARSECHANGE, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/di_bridge/server_di_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/di_bridge/server_di_bridge.c
index 154bccd..04c2af8 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/di_bridge/server_di_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/di_bridge/server_di_bridge.c
@@ -75,7 +75,7 @@ static PVRSRV_ERROR _DICreateContextpsContextIntRelease(void *pvData)
 static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
 	      "PRVSRVTL_MAX_STREAM_NAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDICreateContext(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psDICreateContextIN_UI8,
 			    IMG_UINT8 * psDICreateContextOUT_UI8, CONNECTION_DATA * psConnection)
@@ -227,10 +227,10 @@ PVRSRVBridgeDICreateContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DICREATECONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIDestroyContext(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psDIDestroyContextIN_UI8,
 			     IMG_UINT8 * psDIDestroyContextOUT_UI8, CONNECTION_DATA * psConnection)
@@ -262,13 +262,13 @@ PVRSRVBridgeDIDestroyContext(IMG_UINT32 ui32DispatchTableEntry,
 
 DIDestroyContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DIDESTROYCONTEXT, eError);
 }
 
 static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
 	      "DI_IMPL_BRG_PATH_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIReadEntry(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psDIReadEntryIN_UI8,
 			IMG_UINT8 * psDIReadEntryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -387,7 +387,7 @@ PVRSRVBridgeDIReadEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DIREADENTRY, eError);
 }
 
 static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
@@ -395,7 +395,7 @@ static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
 static_assert(DI_IMPL_BRG_PATH_LEN <= IMG_UINT32_MAX,
 	      "DI_IMPL_BRG_PATH_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIWriteEntry(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psDIWriteEntryIN_UI8,
 			 IMG_UINT8 * psDIWriteEntryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -543,10 +543,10 @@ PVRSRVBridgeDIWriteEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DIWRITEENTRY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDIListAllEntries(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psDIListAllEntriesIN_UI8,
 			     IMG_UINT8 * psDIListAllEntriesOUT_UI8, CONNECTION_DATA * psConnection)
@@ -591,7 +591,7 @@ PVRSRVBridgeDIListAllEntries(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DILISTALLENTRIES, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/dmabuf_bridge/server_dmabuf_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/dmabuf_bridge/server_dmabuf_bridge.c
index d3b3279..56fb021 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/dmabuf_bridge/server_dmabuf_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/dmabuf_bridge/server_dmabuf_bridge.c
@@ -76,7 +76,7 @@ static PVRSRV_ERROR _PhysmemImportDmaBufpsPMRPtrIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemImportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPhysmemImportDmaBufIN_UI8,
 				IMG_UINT8 * psPhysmemImportDmaBufOUT_UI8,
@@ -218,7 +218,7 @@ PVRSRVBridgePhysmemImportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMIMPORTDMABUF, eError);
 }
 
 static PVRSRV_ERROR _PhysmemImportDmaBufLockedpsPMRPtrIntRelease(void *pvData)
@@ -231,7 +231,7 @@ static PVRSRV_ERROR _PhysmemImportDmaBufLockedpsPMRPtrIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemImportDmaBufLocked(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psPhysmemImportDmaBufLockedIN_UI8,
 				      IMG_UINT8 * psPhysmemImportDmaBufLockedOUT_UI8,
@@ -374,10 +374,10 @@ PVRSRVBridgePhysmemImportDmaBufLocked(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMIMPORTDMABUFLOCKED, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemExportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPhysmemExportDmaBufIN_UI8,
 				IMG_UINT8 * psPhysmemExportDmaBufOUT_UI8,
@@ -427,7 +427,7 @@ PVRSRVBridgePhysmemExportDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMEXPORTDMABUF, eError);
 }
 
 static PVRSRV_ERROR _PhysmemImportSparseDmaBufpsPMRPtrIntRelease(void *pvData)
@@ -442,7 +442,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemImportSparseDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psPhysmemImportSparseDmaBufIN_UI8,
 				      IMG_UINT8 * psPhysmemImportSparseDmaBufOUT_UI8,
@@ -620,7 +620,7 @@ PVRSRVBridgePhysmemImportSparseDmaBuf(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMIMPORTSPARSEDMABUF, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/htbuffer_bridge/server_htbuffer_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/htbuffer_bridge/server_htbuffer_bridge.c
index 50b4fcb..d9845cc 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/htbuffer_bridge/server_htbuffer_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/htbuffer_bridge/server_htbuffer_bridge.c
@@ -72,7 +72,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 static_assert(HTB_FLAG_NUM_EL <= IMG_UINT32_MAX,
 	      "HTB_FLAG_NUM_EL must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHTBControl(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psHTBControlIN_UI8,
 		       IMG_UINT8 * psHTBControlOUT_UI8, CONNECTION_DATA * psConnection)
@@ -175,7 +175,7 @@ PVRSRVBridgeHTBControl(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HTBCONTROL, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/mm_bridge/server_mm_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/mm_bridge/server_mm_bridge.c
index 07f82bd..d476d7f 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/mm_bridge/server_mm_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/mm_bridge/server_mm_bridge.c
@@ -89,7 +89,7 @@ static PVRSRV_ERROR _PMRExportPMRpsPMRExportIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRExportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psPMRExportPMRIN_UI8,
 			 IMG_UINT8 * psPMRExportPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -254,7 +254,7 @@ PVRSRVBridgePMRExportPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMREXPORTPMR, eError);
 }
 
 #else
@@ -263,7 +263,7 @@ PVRSRVBridgePMRExportPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(SUPPORT_INSECURE_EXPORT)
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnexportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psPMRUnexportPMRIN_UI8,
 			   IMG_UINT8 * psPMRUnexportPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -351,14 +351,14 @@ PVRSRVBridgePMRUnexportPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnexportPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNEXPORTPMR, eError);
 }
 
 #else
 #define PVRSRVBridgePMRUnexportPMR NULL
 #endif
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRGetUID(IMG_UINT32 ui32DispatchTableEntry,
 		      IMG_UINT8 * psPMRGetUIDIN_UI8,
 		      IMG_UINT8 * psPMRGetUIDOUT_UI8, CONNECTION_DATA * psConnection)
@@ -403,7 +403,7 @@ PVRSRVBridgePMRGetUID(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRGETUID, eError);
 }
 
 static PVRSRV_ERROR _PMRMakeLocalImportHandlepsExtMemIntRelease(void *pvData)
@@ -413,7 +413,7 @@ static PVRSRV_ERROR _PMRMakeLocalImportHandlepsExtMemIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRMakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psPMRMakeLocalImportHandleIN_UI8,
 				     IMG_UINT8 * psPMRMakeLocalImportHandleOUT_UI8,
@@ -497,10 +497,10 @@ PVRSRVBridgePMRMakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRMAKELOCALIMPORTHANDLE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnmakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 				       IMG_UINT8 * psPMRUnmakeLocalImportHandleIN_UI8,
 				       IMG_UINT8 * psPMRUnmakeLocalImportHandleOUT_UI8,
@@ -536,7 +536,7 @@ PVRSRVBridgePMRUnmakeLocalImportHandle(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnmakeLocalImportHandle_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNMAKELOCALIMPORTHANDLE, eError);
 }
 
 #if defined(SUPPORT_INSECURE_EXPORT)
@@ -547,7 +547,7 @@ static PVRSRV_ERROR _PMRImportPMRpsPMRIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psPMRImportPMRIN_UI8,
 			 IMG_UINT8 * psPMRImportPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -632,7 +632,7 @@ PVRSRVBridgePMRImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRIMPORTPMR, eError);
 }
 
 #else
@@ -646,7 +646,7 @@ static PVRSRV_ERROR _PMRLocalImportPMRpsPMRIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRLocalImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psPMRLocalImportPMRIN_UI8,
 			      IMG_UINT8 * psPMRLocalImportPMROUT_UI8,
@@ -730,10 +730,10 @@ PVRSRVBridgePMRLocalImportPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRLOCALIMPORTPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnrefPMR(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psPMRUnrefPMRIN_UI8,
 			IMG_UINT8 * psPMRUnrefPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -765,10 +765,10 @@ PVRSRVBridgePMRUnrefPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnrefPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNREFPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRUnrefUnlockPMR(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psPMRUnrefUnlockPMRIN_UI8,
 			      IMG_UINT8 * psPMRUnrefUnlockPMROUT_UI8,
@@ -801,7 +801,7 @@ PVRSRVBridgePMRUnrefUnlockPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 PMRUnrefUnlockPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRUNREFUNLOCKPMR, eError);
 }
 
 static PVRSRV_ERROR _PhysmemNewRamBackedPMRpsPMRPtrIntRelease(void *pvData)
@@ -816,7 +816,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemNewRamBackedPMR(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPhysmemNewRamBackedPMRIN_UI8,
 				   IMG_UINT8 * psPhysmemNewRamBackedPMROUT_UI8,
@@ -999,7 +999,7 @@ PVRSRVBridgePhysmemNewRamBackedPMR(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMNEWRAMBACKEDPMR, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntCtxCreatepsDevMemServerContextIntRelease(void *pvData)
@@ -1009,7 +1009,7 @@ static PVRSRV_ERROR _DevmemIntCtxCreatepsDevMemServerContextIntRelease(void *pvD
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntCtxCreate(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemIntCtxCreateIN_UI8,
 			       IMG_UINT8 * psDevmemIntCtxCreateOUT_UI8,
@@ -1108,10 +1108,10 @@ PVRSRVBridgeDevmemIntCtxCreate(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTCTXCREATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntCtxDestroy(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psDevmemIntCtxDestroyIN_UI8,
 				IMG_UINT8 * psDevmemIntCtxDestroyOUT_UI8,
@@ -1149,7 +1149,7 @@ PVRSRVBridgeDevmemIntCtxDestroy(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntCtxDestroy_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTCTXDESTROY, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntHeapCreatepsDevmemHeapPtrIntRelease(void *pvData)
@@ -1159,7 +1159,7 @@ static PVRSRV_ERROR _DevmemIntHeapCreatepsDevmemHeapPtrIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntHeapCreate(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psDevmemIntHeapCreateIN_UI8,
 				IMG_UINT8 * psDevmemIntHeapCreateOUT_UI8,
@@ -1246,10 +1246,10 @@ PVRSRVBridgeDevmemIntHeapCreate(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTHEAPCREATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntHeapDestroy(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psDevmemIntHeapDestroyIN_UI8,
 				 IMG_UINT8 * psDevmemIntHeapDestroyOUT_UI8,
@@ -1285,7 +1285,7 @@ PVRSRVBridgeDevmemIntHeapDestroy(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntHeapDestroy_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTHEAPDESTROY, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntMapPMRpsMappingIntRelease(void *pvData)
@@ -1295,7 +1295,7 @@ static PVRSRV_ERROR _DevmemIntMapPMRpsMappingIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psDevmemIntMapPMRIN_UI8,
 			    IMG_UINT8 * psDevmemIntMapPMROUT_UI8, CONNECTION_DATA * psConnection)
@@ -1418,10 +1418,10 @@ PVRSRVBridgeDevmemIntMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTMAPPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnmapPMR(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psDevmemIntUnmapPMRIN_UI8,
 			      IMG_UINT8 * psDevmemIntUnmapPMROUT_UI8,
@@ -1454,7 +1454,7 @@ PVRSRVBridgeDevmemIntUnmapPMR(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnmapPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNMAPPMR, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRangepsReservationIntRelease(void *pvData)
@@ -1464,7 +1464,7 @@ static PVRSRV_ERROR _DevmemIntReserveRangepsReservationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevmemIntReserveRangeIN_UI8,
 				  IMG_UINT8 * psDevmemIntReserveRangeOUT_UI8,
@@ -1550,7 +1550,7 @@ PVRSRVBridgeDevmemIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGE, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMRpsMappingIntRelease(void *pvData)
@@ -1560,7 +1560,7 @@ static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMRpsMappingIntRelease(void *pvD
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRangeAndMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 					   IMG_UINT8 * psDevmemIntReserveRangeAndMapPMRIN_UI8,
 					   IMG_UINT8 * psDevmemIntReserveRangeAndMapPMROUT_UI8,
@@ -1668,10 +1668,10 @@ PVRSRVBridgeDevmemIntReserveRangeAndMapPMR(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGEANDMAPPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR(IMG_UINT32 ui32DispatchTableEntry,
 					       IMG_UINT8 *
 					       psDevmemIntUnreserveRangeAndUnmapPMRIN_UI8,
@@ -1713,10 +1713,10 @@ PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR(IMG_UINT32 ui32DispatchTableEntry
 
 DevmemIntUnreserveRangeAndUnmapPMR_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGEANDUNMAPPMR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psDevmemIntUnreserveRangeIN_UI8,
 				    IMG_UINT8 * psDevmemIntUnreserveRangeOUT_UI8,
@@ -1754,7 +1754,7 @@ PVRSRVBridgeDevmemIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnreserveRange_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGE, eError);
 }
 
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
@@ -1762,7 +1762,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 	      "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeChangeSparseMem(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psChangeSparseMemIN_UI8,
 			    IMG_UINT8 * psChangeSparseMemOUT_UI8, CONNECTION_DATA * psConnection)
@@ -1946,10 +1946,10 @@ PVRSRVBridgeChangeSparseMem(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CHANGESPARSEMEM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIsVDevAddrValid(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevmemIsVDevAddrValidIN_UI8,
 				  IMG_UINT8 * psDevmemIsVDevAddrValidOUT_UI8,
@@ -1999,12 +1999,12 @@ PVRSRVBridgeDevmemIsVDevAddrValid(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMISVDEVADDRVALID, eError);
 }
 
 #if defined(RGX_FEATURE_FBCDC)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemInvalidateFBSCTable(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psDevmemInvalidateFBSCTableIN_UI8,
 				      IMG_UINT8 * psDevmemInvalidateFBSCTableOUT_UI8,
@@ -2054,14 +2054,14 @@ PVRSRVBridgeDevmemInvalidateFBSCTable(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINVALIDATEFBSCTABLE, eError);
 }
 
 #else
 #define PVRSRVBridgeDevmemInvalidateFBSCTable NULL
 #endif
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapConfigCount(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psHeapCfgHeapConfigCountIN_UI8,
 				   IMG_UINT8 * psHeapCfgHeapConfigCountOUT_UI8,
@@ -2080,10 +2080,10 @@ PVRSRVBridgeHeapCfgHeapConfigCount(IMG_UINT32 ui32DispatchTableEntry,
 	    HeapCfgHeapConfigCount(psConnection, OSGetDevNode(psConnection),
 				   &psHeapCfgHeapConfigCountOUT->ui32NumHeapConfigs);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPCONFIGCOUNT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapCount(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psHeapCfgHeapCountIN_UI8,
 			     IMG_UINT8 * psHeapCfgHeapCountOUT_UI8, CONNECTION_DATA * psConnection)
@@ -2098,13 +2098,13 @@ PVRSRVBridgeHeapCfgHeapCount(IMG_UINT32 ui32DispatchTableEntry,
 			     psHeapCfgHeapCountIN->ui32HeapConfigIndex,
 			     &psHeapCfgHeapCountOUT->ui32NumHeaps);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPCOUNT, eError);
 }
 
 static_assert(DEVMEM_HEAPNAME_MAXLENGTH <= IMG_UINT32_MAX,
 	      "DEVMEM_HEAPNAME_MAXLENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapConfigName(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psHeapCfgHeapConfigNameIN_UI8,
 				  IMG_UINT8 * psHeapCfgHeapConfigNameOUT_UI8,
@@ -2220,13 +2220,13 @@ PVRSRVBridgeHeapCfgHeapConfigName(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPCONFIGNAME, eError);
 }
 
 static_assert(DEVMEM_HEAPNAME_MAXLENGTH <= IMG_UINT32_MAX,
 	      "DEVMEM_HEAPNAME_MAXLENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHeapCfgHeapDetails(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psHeapCfgHeapDetailsIN_UI8,
 			       IMG_UINT8 * psHeapCfgHeapDetailsOUT_UI8,
@@ -2342,10 +2342,10 @@ PVRSRVBridgeHeapCfgHeapDetails(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HEAPCFGHEAPDETAILS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntRegisterPFNotifyKM(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psDevmemIntRegisterPFNotifyKMIN_UI8,
 					IMG_UINT8 * psDevmemIntRegisterPFNotifyKMOUT_UI8,
@@ -2394,13 +2394,13 @@ PVRSRVBridgeDevmemIntRegisterPFNotifyKM(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTREGISTERPFNOTIFYKM, eError);
 }
 
 static_assert(PVRSRV_PHYS_HEAP_LAST <= IMG_UINT32_MAX,
 	      "PVRSRV_PHYS_HEAP_LAST must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysHeapGetMemInfo(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psPhysHeapGetMemInfoIN_UI8,
 			       IMG_UINT8 * psPhysHeapGetMemInfoOUT_UI8,
@@ -2538,10 +2538,10 @@ PVRSRVBridgePhysHeapGetMemInfo(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSHEAPGETMEMINFO, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetDefaultPhysicalHeap(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psGetDefaultPhysicalHeapIN_UI8,
 				   IMG_UINT8 * psGetDefaultPhysicalHeapOUT_UI8,
@@ -2560,10 +2560,10 @@ PVRSRVBridgeGetDefaultPhysicalHeap(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVGetDefaultPhysicalHeapKM(psConnection, OSGetDevNode(psConnection),
 					   &psGetDefaultPhysicalHeapOUT->eHeap);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETDEFAULTPHYSICALHEAP, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemGetFaultAddress(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psDevmemGetFaultAddressIN_UI8,
 				  IMG_UINT8 * psDevmemGetFaultAddressOUT_UI8,
@@ -2613,12 +2613,12 @@ PVRSRVBridgeDevmemGetFaultAddress(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMGETFAULTADDRESS, eError);
 }
 
 #if defined(PVRSRV_ENABLE_PROCESS_STATS)
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVStatsUpdateOOMStat(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psPVRSRVStatsUpdateOOMStatIN_UI8,
 				     IMG_UINT8 * psPVRSRVStatsUpdateOOMStatOUT_UI8,
@@ -2636,7 +2636,7 @@ PVRSRVBridgePVRSRVStatsUpdateOOMStat(IMG_UINT32 ui32DispatchTableEntry,
 				     psPVRSRVStatsUpdateOOMStatIN->ui32ui32StatType,
 				     psPVRSRVStatsUpdateOOMStatIN->ui32pid);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVSTATSUPDATEOOMSTAT, eError);
 }
 
 #else
@@ -2650,7 +2650,7 @@ static PVRSRV_ERROR _DevmemXIntReserveRangepsReservationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psDevmemXIntReserveRangeIN_UI8,
 				   IMG_UINT8 * psDevmemXIntReserveRangeOUT_UI8,
@@ -2736,10 +2736,10 @@ PVRSRVBridgeDevmemXIntReserveRange(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTRESERVERANGE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psDevmemXIntUnreserveRangeIN_UI8,
 				     IMG_UINT8 * psDevmemXIntUnreserveRangeOUT_UI8,
@@ -2777,10 +2777,10 @@ PVRSRVBridgeDevmemXIntUnreserveRange(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemXIntUnreserveRange_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTUNRESERVERANGE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntMapPages(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemXIntMapPagesIN_UI8,
 			       IMG_UINT8 * psDevmemXIntMapPagesOUT_UI8,
@@ -2855,10 +2855,10 @@ PVRSRVBridgeDevmemXIntMapPages(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTMAPPAGES, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntUnmapPages(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psDevmemXIntUnmapPagesIN_UI8,
 				 IMG_UINT8 * psDevmemXIntUnmapPagesOUT_UI8,
@@ -2911,10 +2911,10 @@ PVRSRVBridgeDevmemXIntUnmapPages(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTUNMAPPAGES, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemXIntMapVRangeToBackingPage(IMG_UINT32 ui32DispatchTableEntry,
 					     IMG_UINT8 * psDevmemXIntMapVRangeToBackingPageIN_UI8,
 					     IMG_UINT8 * psDevmemXIntMapVRangeToBackingPageOUT_UI8,
@@ -2969,7 +2969,7 @@ PVRSRVBridgeDevmemXIntMapVRangeToBackingPage(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMXINTMAPVRANGETOBACKINGPAGE, eError);
 }
 
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
@@ -2977,7 +2977,7 @@ static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 static_assert(PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX,
 	      "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeChangeSparseMem2(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psChangeSparseMem2IN_UI8,
 			     IMG_UINT8 * psChangeSparseMem2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -3181,7 +3181,7 @@ PVRSRVBridgeChangeSparseMem2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CHANGESPARSEMEM2, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRange2psReservationIntRelease(void *pvData)
@@ -3191,7 +3191,7 @@ static PVRSRV_ERROR _DevmemIntReserveRange2psReservationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psDevmemIntReserveRange2IN_UI8,
 				   IMG_UINT8 * psDevmemIntReserveRange2OUT_UI8,
@@ -3278,10 +3278,10 @@ PVRSRVBridgeDevmemIntReserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGE2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psDevmemIntUnreserveRange2IN_UI8,
 				     IMG_UINT8 * psDevmemIntUnreserveRange2OUT_UI8,
@@ -3319,10 +3319,10 @@ PVRSRVBridgeDevmemIntUnreserveRange2(IMG_UINT32 ui32DispatchTableEntry,
 
 DevmemIntUnreserveRange2_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGE2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psDevmemIntMapPMR2IN_UI8,
 			     IMG_UINT8 * psDevmemIntMapPMR2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -3411,10 +3411,10 @@ PVRSRVBridgeDevmemIntMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTMAPPMR2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnmapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psDevmemIntUnmapPMR2IN_UI8,
 			       IMG_UINT8 * psDevmemIntUnmapPMR2OUT_UI8,
@@ -3463,7 +3463,7 @@ PVRSRVBridgeDevmemIntUnmapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNMAPPMR2, eError);
 }
 
 static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMR2psReservationIntRelease(void *pvData)
@@ -3473,7 +3473,7 @@ static PVRSRV_ERROR _DevmemIntReserveRangeAndMapPMR2psReservationIntRelease(void
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntReserveRangeAndMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 					    IMG_UINT8 * psDevmemIntReserveRangeAndMapPMR2IN_UI8,
 					    IMG_UINT8 * psDevmemIntReserveRangeAndMapPMR2OUT_UI8,
@@ -3582,10 +3582,10 @@ PVRSRVBridgeDevmemIntReserveRangeAndMapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTRESERVERANGEANDMAPPMR2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR2(IMG_UINT32 ui32DispatchTableEntry,
 						IMG_UINT8 *
 						psDevmemIntUnreserveRangeAndUnmapPMR2IN_UI8,
@@ -3628,7 +3628,7 @@ PVRSRVBridgeDevmemIntUnreserveRangeAndUnmapPMR2(IMG_UINT32 ui32DispatchTableEntr
 
 DevmemIntUnreserveRangeAndUnmapPMR2_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTUNRESERVERANGEANDUNMAPPMR2, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/mmextmem_bridge/server_mmextmem_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/mmextmem_bridge/server_mmextmem_bridge.c
index 538d04c..9d018ff 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/mmextmem_bridge/server_mmextmem_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/mmextmem_bridge/server_mmextmem_bridge.c
@@ -76,7 +76,7 @@ static PVRSRV_ERROR _PhysmemWrapExtMempsPMRPtrIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePhysmemWrapExtMem(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psPhysmemWrapExtMemIN_UI8,
 			      IMG_UINT8 * psPhysmemWrapExtMemOUT_UI8,
@@ -131,7 +131,7 @@ PVRSRVBridgePhysmemWrapExtMem(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PHYSMEMWRAPEXTMEM, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/pdump_bridge/server_pdump_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/pdump_bridge/server_pdump_bridge.c
index 6b3baf6..8099578 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/pdump_bridge/server_pdump_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/pdump_bridge/server_pdump_bridge.c
@@ -70,7 +70,7 @@ static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 static_assert(4 <= IMG_UINT32_MAX, "4 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpImageDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psPDumpImageDescriptorIN_UI8,
 				 IMG_UINT8 * psPDumpImageDescriptorOUT_UI8,
@@ -241,13 +241,13 @@ PVRSRVBridgePDumpImageDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPIMAGEDESCRIPTOR, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_COMMENT_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_COMMENT_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpComment(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psPVRSRVPDumpCommentIN_UI8,
 			       IMG_UINT8 * psPVRSRVPDumpCommentOUT_UI8,
@@ -349,10 +349,10 @@ PVRSRVBridgePVRSRVPDumpComment(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPCOMMENT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpSetFrame(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPVRSRVPDumpSetFrameIN_UI8,
 				IMG_UINT8 * psPVRSRVPDumpSetFrameOUT_UI8,
@@ -369,13 +369,13 @@ PVRSRVBridgePVRSRVPDumpSetFrame(IMG_UINT32 ui32DispatchTableEntry,
 	    PDumpSetFrameKM(psConnection, OSGetDevNode(psConnection),
 			    psPVRSRVPDumpSetFrameIN->ui32Frame);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPSETFRAME, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpDataDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPDumpDataDescriptorIN_UI8,
 				IMG_UINT8 * psPDumpDataDescriptorOUT_UI8,
@@ -515,7 +515,7 @@ PVRSRVBridgePDumpDataDescriptor(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPDATADESCRIPTOR, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpctrl_bridge/server_pdumpctrl_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpctrl_bridge/server_pdumpctrl_bridge.c
index 2d5578c..1d25737 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpctrl_bridge/server_pdumpctrl_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpctrl_bridge/server_pdumpctrl_bridge.c
@@ -67,7 +67,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpGetState(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPVRSRVPDumpGetStateIN_UI8,
 				IMG_UINT8 * psPVRSRVPDumpGetStateOUT_UI8,
@@ -85,10 +85,10 @@ PVRSRVBridgePVRSRVPDumpGetState(IMG_UINT32 ui32DispatchTableEntry,
 
 	psPVRSRVPDumpGetStateOUT->eError = PDumpGetStateKM(&psPVRSRVPDumpGetStateOUT->ui64State);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPGETSTATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpGetFrame(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psPVRSRVPDumpGetFrameIN_UI8,
 				IMG_UINT8 * psPVRSRVPDumpGetFrameOUT_UI8,
@@ -107,10 +107,10 @@ PVRSRVBridgePVRSRVPDumpGetFrame(IMG_UINT32 ui32DispatchTableEntry,
 	    PDumpGetFrameKM(psConnection, OSGetDevNode(psConnection),
 			    &psPVRSRVPDumpGetFrameOUT->ui32Frame);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPGETFRAME, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpSetDefaultCaptureParams(IMG_UINT32 ui32DispatchTableEntry,
 					       IMG_UINT8 *
 					       psPVRSRVPDumpSetDefaultCaptureParamsIN_UI8,
@@ -138,10 +138,10 @@ PVRSRVBridgePVRSRVPDumpSetDefaultCaptureParams(IMG_UINT32 ui32DispatchTableEntry
 					   psPVRSRVPDumpSetDefaultCaptureParamsIN->
 					   ui32AutoTermTimeout);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPSETDEFAULTCAPTUREPARAMS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpIsLastCaptureFrame(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psPVRSRVPDumpIsLastCaptureFrameIN_UI8,
 					  IMG_UINT8 * psPVRSRVPDumpIsLastCaptureFrameOUT_UI8,
@@ -160,10 +160,10 @@ PVRSRVBridgePVRSRVPDumpIsLastCaptureFrame(IMG_UINT32 ui32DispatchTableEntry,
 	psPVRSRVPDumpIsLastCaptureFrameOUT->eError =
 	    PDumpIsLastCaptureFrameKM(&psPVRSRVPDumpIsLastCaptureFrameOUT->bpbIsLastCaptureFrame);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPISLASTCAPTUREFRAME, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePVRSRVPDumpForceCaptureStop(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psPVRSRVPDumpForceCaptureStopIN_UI8,
 					IMG_UINT8 * psPVRSRVPDumpForceCaptureStopOUT_UI8,
@@ -181,7 +181,7 @@ PVRSRVBridgePVRSRVPDumpForceCaptureStop(IMG_UINT32 ui32DispatchTableEntry,
 	psPVRSRVPDumpForceCaptureStopOUT->eError =
 	    PDumpForceCaptureStopKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PVRSRVPDUMPFORCECAPTURESTOP, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpmm_bridge/server_pdumpmm_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpmm_bridge/server_pdumpmm_bridge.c
index 38e1a66..8fc3b7d 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpmm_bridge/server_pdumpmm_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/pdumpmm_bridge/server_pdumpmm_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpLoadMem(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psPMRPDumpLoadMemIN_UI8,
 			    IMG_UINT8 * psPMRPDumpLoadMemOUT_UI8, CONNECTION_DATA * psConnection)
@@ -117,10 +117,10 @@ PVRSRVBridgePMRPDumpLoadMem(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPLOADMEM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpLoadMemValue32(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue32IN_UI8,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue32OUT_UI8,
@@ -172,10 +172,10 @@ PVRSRVBridgePMRPDumpLoadMemValue32(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPLOADMEMVALUE32, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpLoadMemValue64(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue64IN_UI8,
 				   IMG_UINT8 * psPMRPDumpLoadMemValue64OUT_UI8,
@@ -227,13 +227,13 @@ PVRSRVBridgePMRPDumpLoadMemValue64(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPLOADMEMVALUE64, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpSaveToFile(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psPMRPDumpSaveToFileIN_UI8,
 			       IMG_UINT8 * psPMRPDumpSaveToFileOUT_UI8,
@@ -367,7 +367,7 @@ PVRSRVBridgePMRPDumpSaveToFile(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPSAVETOFILE, eError);
 }
 
 static_assert(PHYSMEM_PDUMP_MEMSPACE_MAX_LENGTH <= IMG_UINT32_MAX,
@@ -375,7 +375,7 @@ static_assert(PHYSMEM_PDUMP_MEMSPACE_MAX_LENGTH <= IMG_UINT32_MAX,
 static_assert(PHYSMEM_PDUMP_SYMNAME_MAX_LENGTH <= IMG_UINT32_MAX,
 	      "PHYSMEM_PDUMP_SYMNAME_MAX_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpSymbolicAddr(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psPMRPDumpSymbolicAddrIN_UI8,
 				 IMG_UINT8 * psPMRPDumpSymbolicAddrOUT_UI8,
@@ -553,10 +553,10 @@ PVRSRVBridgePMRPDumpSymbolicAddr(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPSYMBOLICADDR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpPol32(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psPMRPDumpPol32IN_UI8,
 			  IMG_UINT8 * psPMRPDumpPol32OUT_UI8, CONNECTION_DATA * psConnection)
@@ -606,10 +606,10 @@ PVRSRVBridgePMRPDumpPol32(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPPOL32, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpCheck32(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psPMRPDumpCheck32IN_UI8,
 			    IMG_UINT8 * psPMRPDumpCheck32OUT_UI8, CONNECTION_DATA * psConnection)
@@ -659,10 +659,10 @@ PVRSRVBridgePMRPDumpCheck32(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPCHECK32, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePMRPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psPMRPDumpCBPIN_UI8,
 			IMG_UINT8 * psPMRPDumpCBPOUT_UI8, CONNECTION_DATA * psConnection)
@@ -711,13 +711,13 @@ PVRSRVBridgePMRPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PMRPDUMPCBP, eError);
 }
 
 static_assert(PVRSRV_PDUMP_MAX_FILENAME_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRV_PDUMP_MAX_FILENAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDevmemIntPDumpSaveToFileVirtual(IMG_UINT32 ui32DispatchTableEntry,
 					    IMG_UINT8 * psDevmemIntPDumpSaveToFileVirtualIN_UI8,
 					    IMG_UINT8 * psDevmemIntPDumpSaveToFileVirtualOUT_UI8,
@@ -864,7 +864,7 @@ PVRSRVBridgeDevmemIntPDumpSaveToFileVirtual(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DEVMEMINTPDUMPSAVETOFILEVIRTUAL, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/pvrtl_bridge/server_pvrtl_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/pvrtl_bridge/server_pvrtl_bridge.c
index 9facf79..0693d57 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/pvrtl_bridge/server_pvrtl_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/pvrtl_bridge/server_pvrtl_bridge.c
@@ -75,7 +75,7 @@ static PVRSRV_ERROR _TLOpenStreampsSDIntRelease(void *pvData)
 static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
 	      "PRVSRVTL_MAX_STREAM_NAME_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLOpenStream(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psTLOpenStreamIN_UI8,
 			 IMG_UINT8 * psTLOpenStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -238,10 +238,10 @@ PVRSRVBridgeTLOpenStream(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLOPENSTREAM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLCloseStream(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psTLCloseStreamIN_UI8,
 			  IMG_UINT8 * psTLCloseStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -273,10 +273,10 @@ PVRSRVBridgeTLCloseStream(IMG_UINT32 ui32DispatchTableEntry,
 
 TLCloseStream_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLCLOSESTREAM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLAcquireData(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psTLAcquireDataIN_UI8,
 			  IMG_UINT8 * psTLAcquireDataOUT_UI8, CONNECTION_DATA * psConnection)
@@ -324,10 +324,10 @@ PVRSRVBridgeTLAcquireData(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLACQUIREDATA, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLReleaseData(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psTLReleaseDataIN_UI8,
 			  IMG_UINT8 * psTLReleaseDataOUT_UI8, CONNECTION_DATA * psConnection)
@@ -375,7 +375,7 @@ PVRSRVBridgeTLReleaseData(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLRELEASEDATA, eError);
 }
 
 static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
@@ -383,7 +383,7 @@ static_assert(PRVSRVTL_MAX_STREAM_NAME_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRVTL_MAX_DISCOVERABLE_STREAMS_BUFFER <= IMG_UINT32_MAX,
 	      "PVRSRVTL_MAX_DISCOVERABLE_STREAMS_BUFFER must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLDiscoverStreams(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psTLDiscoverStreamsIN_UI8,
 			      IMG_UINT8 * psTLDiscoverStreamsOUT_UI8,
@@ -513,10 +513,10 @@ PVRSRVBridgeTLDiscoverStreams(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLDISCOVERSTREAMS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLReserveStream(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psTLReserveStreamIN_UI8,
 			    IMG_UINT8 * psTLReserveStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -566,10 +566,10 @@ PVRSRVBridgeTLReserveStream(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLRESERVESTREAM, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLCommitStream(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psTLCommitStreamIN_UI8,
 			   IMG_UINT8 * psTLCommitStreamOUT_UI8, CONNECTION_DATA * psConnection)
@@ -615,13 +615,13 @@ PVRSRVBridgeTLCommitStream(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLCOMMITSTREAM, eError);
 }
 
 static_assert(PVRSRVTL_MAX_PACKET_SIZE <= IMG_UINT32_MAX,
 	      "PVRSRVTL_MAX_PACKET_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeTLWriteData(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psTLWriteDataIN_UI8,
 			IMG_UINT8 * psTLWriteDataOUT_UI8, CONNECTION_DATA * psConnection)
@@ -745,7 +745,7 @@ PVRSRVBridgeTLWriteData(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_TLWRITEDATA, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxcmp_bridge/server_rgxcmp_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxcmp_bridge/server_rgxcmp_bridge.c
index a8d284e..111268c 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxcmp_bridge/server_rgxcmp_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxcmp_bridge/server_rgxcmp_bridge.c
@@ -79,7 +79,7 @@ static_assert(RGXFWIF_RF_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(RGXFWIF_STATIC_COMPUTECONTEXT_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_STATIC_COMPUTECONTEXT_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXCreateComputeContextIN_UI8,
 				    IMG_UINT8 * psRGXCreateComputeContextOUT_UI8,
@@ -306,10 +306,10 @@ PVRSRVBridgeRGXCreateComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATECOMPUTECONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXDestroyComputeContextIN_UI8,
 				     IMG_UINT8 * psRGXDestroyComputeContextOUT_UI8,
@@ -361,10 +361,10 @@ PVRSRVBridgeRGXDestroyComputeContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyComputeContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYCOMPUTECONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFlushComputeData(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXFlushComputeDataIN_UI8,
 				IMG_UINT8 * psRGXFlushComputeDataOUT_UI8,
@@ -428,10 +428,10 @@ PVRSRVBridgeRGXFlushComputeData(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFLUSHCOMPUTEDATA, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetComputeContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXSetComputeContextPriorityIN_UI8,
 					 IMG_UINT8 * psRGXSetComputeContextPriorityOUT_UI8,
@@ -498,10 +498,10 @@ PVRSRVBridgeRGXSetComputeContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETCOMPUTECONTEXTPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXNotifyComputeWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 					      IMG_UINT8 * psRGXNotifyComputeWriteOffsetUpdateIN_UI8,
 					      IMG_UINT8 *
@@ -568,7 +568,7 @@ PVRSRVBridgeRGXNotifyComputeWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXNOTIFYCOMPUTEWRITEOFFSETUPDATE, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -580,7 +580,7 @@ static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
 	      "PVRSRV_MAX_SYNCS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickCDM2(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psRGXKickCDM2IN_UI8,
 			IMG_UINT8 * psRGXKickCDM2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -972,10 +972,10 @@ PVRSRVBridgeRGXKickCDM2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKCDM2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetComputeContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXSetComputeContextPropertyIN_UI8,
 					 IMG_UINT8 * psRGXSetComputeContextPropertyOUT_UI8,
@@ -1043,10 +1043,10 @@ PVRSRVBridgeRGXSetComputeContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETCOMPUTECONTEXTPROPERTY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetLastDeviceError(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXGetLastDeviceErrorIN_UI8,
 				  IMG_UINT8 * psRGXGetLastDeviceErrorOUT_UI8,
@@ -1081,13 +1081,13 @@ PVRSRVBridgeRGXGetLastDeviceError(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXGetLastDeviceError_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETLASTDEVICEERROR, eError);
 }
 
 static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickTimestampQuery(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXKickTimestampQueryIN_UI8,
 				  IMG_UINT8 * psRGXKickTimestampQueryOUT_UI8,
@@ -1234,7 +1234,7 @@ PVRSRVBridgeRGXKickTimestampQuery(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKTIMESTAMPQUERY, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c
index 597949b..5d7d921 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxfwdbg_bridge/server_rgxfwdbg_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetFWLog(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXFWDebugSetFWLogIN_UI8,
 			       IMG_UINT8 * psRGXFWDebugSetFWLogOUT_UI8,
@@ -84,10 +84,10 @@ PVRSRVBridgeRGXFWDebugSetFWLog(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugSetFWLogKM(psConnection, OSGetDevNode(psConnection),
 				       psRGXFWDebugSetFWLogIN->ui32RGXFWLogType);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETFWLOG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugDumpFreelistPageList(IMG_UINT32 ui32DispatchTableEntry,
 					   IMG_UINT8 * psRGXFWDebugDumpFreelistPageListIN_UI8,
 					   IMG_UINT8 * psRGXFWDebugDumpFreelistPageListOUT_UI8,
@@ -105,10 +105,10 @@ PVRSRVBridgeRGXFWDebugDumpFreelistPageList(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugDumpFreelistPageListOUT->eError =
 	    PVRSRVRGXFWDebugDumpFreelistPageListKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGDUMPFREELISTPAGELIST, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSuspendDevice(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXFWDebugSuspendDeviceIN_UI8,
 				    IMG_UINT8 * psRGXFWDebugSuspendDeviceOUT_UI8,
@@ -126,10 +126,10 @@ PVRSRVBridgeRGXFWDebugSuspendDevice(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugSuspendDeviceOUT->eError =
 	    PVRSRVRGXFWDebugSuspendDeviceKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSUSPENDDEVICE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugResumeDevice(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugResumeDeviceIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugResumeDeviceOUT_UI8,
@@ -147,10 +147,10 @@ PVRSRVBridgeRGXFWDebugResumeDevice(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugResumeDeviceOUT->eError =
 	    PVRSRVRGXFWDebugResumeDeviceKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGRESUMEDEVICE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetVzConnectionCooldownPeriodInSec(IMG_UINT32 ui32DispatchTableEntry,
 							 IMG_UINT8 *
 							 psRGXFWDebugSetVzConnectionCooldownPeriodInSecIN_UI8,
@@ -173,10 +173,10 @@ PVRSRVBridgeRGXFWDebugSetVzConnectionCooldownPeriodInSec(IMG_UINT32 ui32Dispatch
 								 psRGXFWDebugSetVzConnectionCooldownPeriodInSecIN->
 								 ui32VzConnectionCooldownPeriodInSec);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETVZCONNECTIONCOOLDOWNPERIODINSEC, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetHCSDeadline(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXFWDebugSetHCSDeadlineIN_UI8,
 				     IMG_UINT8 * psRGXFWDebugSetHCSDeadlineOUT_UI8,
@@ -193,10 +193,10 @@ PVRSRVBridgeRGXFWDebugSetHCSDeadline(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugSetHCSDeadlineKM(psConnection, OSGetDevNode(psConnection),
 					     psRGXFWDebugSetHCSDeadlineIN->ui32RGXHCSDeadline);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETHCSDEADLINE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverPriority(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXFWDebugSetDriverPriorityIN_UI8,
 					IMG_UINT8 * psRGXFWDebugSetDriverPriorityOUT_UI8,
@@ -214,10 +214,10 @@ PVRSRVBridgeRGXFWDebugSetDriverPriority(IMG_UINT32 ui32DispatchTableEntry,
 						psRGXFWDebugSetDriverPriorityIN->ui32DriverID,
 						psRGXFWDebugSetDriverPriorityIN->ui32Priority);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverTimeSlice(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXFWDebugSetDriverTimeSliceIN_UI8,
 					 IMG_UINT8 * psRGXFWDebugSetDriverTimeSliceOUT_UI8,
@@ -235,10 +235,10 @@ PVRSRVBridgeRGXFWDebugSetDriverTimeSlice(IMG_UINT32 ui32DispatchTableEntry,
 						 psRGXFWDebugSetDriverTimeSliceIN->ui32DriverID,
 						 psRGXFWDebugSetDriverTimeSliceIN->ui32TimeSlice);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERTIMESLICE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverTimeSliceInterval(IMG_UINT32 ui32DispatchTableEntry,
 						 IMG_UINT8 *
 						 psRGXFWDebugSetDriverTimeSliceIntervalIN_UI8,
@@ -260,10 +260,10 @@ PVRSRVBridgeRGXFWDebugSetDriverTimeSliceInterval(IMG_UINT32 ui32DispatchTableEnt
 							 psRGXFWDebugSetDriverTimeSliceIntervalIN->
 							 ui32TimeSliceInterval);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERTIMESLICEINTERVAL, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetDriverIsolationGroup(IMG_UINT32 ui32DispatchTableEntry,
 					      IMG_UINT8 * psRGXFWDebugSetDriverIsolationGroupIN_UI8,
 					      IMG_UINT8 *
@@ -285,10 +285,10 @@ PVRSRVBridgeRGXFWDebugSetDriverIsolationGroup(IMG_UINT32 ui32DispatchTableEntry,
 						      psRGXFWDebugSetDriverIsolationGroupIN->
 						      ui32IsolationGroup);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETDRIVERISOLATIONGROUP, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugSetOSNewOnlineState(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXFWDebugSetOSNewOnlineStateIN_UI8,
 					  IMG_UINT8 * psRGXFWDebugSetOSNewOnlineStateOUT_UI8,
@@ -307,10 +307,10 @@ PVRSRVBridgeRGXFWDebugSetOSNewOnlineState(IMG_UINT32 ui32DispatchTableEntry,
 						  psRGXFWDebugSetOSNewOnlineStateIN->
 						  ui32OSNewState);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGSETOSNEWONLINESTATE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugMapGuestHeap(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugMapGuestHeapIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugMapGuestHeapOUT_UI8,
@@ -328,10 +328,10 @@ PVRSRVBridgeRGXFWDebugMapGuestHeap(IMG_UINT32 ui32DispatchTableEntry,
 					   psRGXFWDebugMapGuestHeapIN->ui32DriverID,
 					   psRGXFWDebugMapGuestHeapIN->ui64ui64GuestHeapBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGMAPGUESTHEAP, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugPHRConfigure(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugPHRConfigureIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugPHRConfigureOUT_UI8,
@@ -348,10 +348,10 @@ PVRSRVBridgeRGXFWDebugPHRConfigure(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugPHRConfigureKM(psConnection, OSGetDevNode(psConnection),
 					   psRGXFWDebugPHRConfigureIN->ui32ui32PHRMode);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGPHRCONFIGURE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugWdgConfigure(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXFWDebugWdgConfigureIN_UI8,
 				   IMG_UINT8 * psRGXFWDebugWdgConfigureOUT_UI8,
@@ -368,10 +368,10 @@ PVRSRVBridgeRGXFWDebugWdgConfigure(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXFWDebugWdgConfigureKM(psConnection, OSGetDevNode(psConnection),
 					   psRGXFWDebugWdgConfigureIN->ui32ui32WdgPeriodUs);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGWDGCONFIGURE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCurrentTime(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psRGXCurrentTimeIN_UI8,
 			   IMG_UINT8 * psRGXCurrentTimeOUT_UI8, CONNECTION_DATA * psConnection)
@@ -387,12 +387,12 @@ PVRSRVBridgeRGXCurrentTime(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXCurrentTime(psConnection, OSGetDevNode(psConnection),
 				 &psRGXCurrentTimeOUT->ui64Time);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCURRENTTIME, eError);
 }
 
 #if defined(SUPPORT_VALIDATION)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXFWDebugInjectFault(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXFWDebugInjectFaultIN_UI8,
 				  IMG_UINT8 * psRGXFWDebugInjectFaultOUT_UI8,
@@ -410,7 +410,7 @@ PVRSRVBridgeRGXFWDebugInjectFault(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXFWDebugInjectFaultOUT->eError =
 	    PVRSRVRGXFWDebugInjectFaultKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXFWDEBUGINJECTFAULT, eError);
 }
 
 #else
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxhwperf_bridge/server_rgxhwperf_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxhwperf_bridge/server_rgxhwperf_bridge.c
index bae7d88..95433cb 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxhwperf_bridge/server_rgxhwperf_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxhwperf_bridge/server_rgxhwperf_bridge.c
@@ -66,7 +66,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCtrlHWPerf(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psRGXCtrlHWPerfIN_UI8,
 			  IMG_UINT8 * psRGXCtrlHWPerfOUT_UI8, CONNECTION_DATA * psConnection)
@@ -81,13 +81,13 @@ PVRSRVBridgeRGXCtrlHWPerf(IMG_UINT32 ui32DispatchTableEntry,
 				  psRGXCtrlHWPerfIN->ui32StreamId,
 				  psRGXCtrlHWPerfIN->bToggle, psRGXCtrlHWPerfIN->ui64Mask);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCTRLHWPERF, eError);
 }
 
 static_assert(RGXFWIF_HWPERF_CTRL_BLKS_MAX + 3 <= IMG_UINT32_MAX,
 	      "RGXFWIF_HWPERF_CTRL_BLKS_MAX+3 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXConfigureHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXConfigureHWPerfBlocksIN_UI8,
 				     IMG_UINT8 * psRGXConfigureHWPerfBlocksOUT_UI8,
@@ -193,10 +193,10 @@ PVRSRVBridgeRGXConfigureHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCONFIGUREHWPERFBLOCKS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetHWPerfBvncFeatureFlags(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXGetHWPerfBvncFeatureFlagsIN_UI8,
 					 IMG_UINT8 * psRGXGetHWPerfBvncFeatureFlagsOUT_UI8,
@@ -215,13 +215,13 @@ PVRSRVBridgeRGXGetHWPerfBvncFeatureFlags(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXGetHWPerfBvncFeatureFlagsKM(psConnection, OSGetDevNode(psConnection),
 						 &psRGXGetHWPerfBvncFeatureFlagsOUT->sBVNC);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETHWPERFBVNCFEATUREFLAGS, eError);
 }
 
 static_assert(RGXFWIF_HWPERF_CTRL_BLKS_MAX <= IMG_UINT32_MAX,
 	      "RGXFWIF_HWPERF_CTRL_BLKS_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXControlHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXControlHWPerfBlocksIN_UI8,
 				   IMG_UINT8 * psRGXControlHWPerfBlocksOUT_UI8,
@@ -323,12 +323,12 @@ PVRSRVBridgeRGXControlHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCONTROLHWPERFBLOCKS, eError);
 }
 
 static_assert(1 <= IMG_UINT32_MAX, "1 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetConfiguredHWPerfCounters(IMG_UINT32 ui32DispatchTableEntry,
 					   IMG_UINT8 * psRGXGetConfiguredHWPerfCountersIN_UI8,
 					   IMG_UINT8 * psRGXGetConfiguredHWPerfCountersOUT_UI8,
@@ -435,10 +435,13 @@ PVRSRVBridgeRGXGetConfiguredHWPerfCounters(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETCONFIGUREDHWPERFCOUNTERS, eError);
 }
 
-static IMG_INT
+static_assert(RGXFWIF_HWPERF_CTRL_BLKS_MAX <= IMG_UINT32_MAX,
+	      "RGXFWIF_HWPERF_CTRL_BLKS_MAX must not be larger than IMG_UINT32_MAX");
+
+static size_t
 PVRSRVBridgeRGXGetEnabledHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psRGXGetEnabledHWPerfBlocksIN_UI8,
 				      IMG_UINT8 * psRGXGetEnabledHWPerfBlocksOUT_UI8,
@@ -461,6 +464,12 @@ PVRSRVBridgeRGXGetEnabledHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	IMG_UINT64 ui64BufferSize =
 	    ((IMG_UINT64) psRGXGetEnabledHWPerfBlocksIN->ui32ArrayLen * sizeof(IMG_UINT32)) + 0;
 
+	if (psRGXGetEnabledHWPerfBlocksIN->ui32ArrayLen > RGXFWIF_HWPERF_CTRL_BLKS_MAX)
+	{
+		psRGXGetEnabledHWPerfBlocksOUT->eError = PVRSRV_ERROR_BRIDGE_ARRAY_SIZE_TOO_BIG;
+		goto RGXGetEnabledHWPerfBlocks_exit;
+	}
+
 	psRGXGetEnabledHWPerfBlocksOUT->pui32EnabledBlockIDs =
 	    psRGXGetEnabledHWPerfBlocksIN->pui32EnabledBlockIDs;
 
@@ -546,12 +555,12 @@ PVRSRVBridgeRGXGetEnabledHWPerfBlocks(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETENABLEDHWPERFBLOCKS, eError);
 }
 
 #if defined(PVRSRV_FORCE_HWPERF_TO_SCHED_CLK)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXGetHWPerfTimeStamp(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXGetHWPerfTimeStampIN_UI8,
 				  IMG_UINT8 * psRGXGetHWPerfTimeStampOUT_UI8,
@@ -570,7 +579,7 @@ PVRSRVBridgeRGXGetHWPerfTimeStamp(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXGetHWPerfTimeStampKM(psConnection, OSGetDevNode(psConnection),
 					  &psRGXGetHWPerfTimeStampOUT->ui64TimeStamp);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXGETHWPERFTIMESTAMP, eError);
 }
 
 #else
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxkicksync_bridge/server_rgxkicksync_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxkicksync_bridge/server_rgxkicksync_bridge.c
index 8d943cd..dfa3f9a 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxkicksync_bridge/server_rgxkicksync_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxkicksync_bridge/server_rgxkicksync_bridge.c
@@ -74,7 +74,7 @@ static PVRSRV_ERROR _RGXCreateKickSyncContextpsKickSyncContextIntRelease(void *p
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRGXCreateKickSyncContextIN_UI8,
 				     IMG_UINT8 * psRGXCreateKickSyncContextOUT_UI8,
@@ -161,10 +161,10 @@ PVRSRVBridgeRGXCreateKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEKICKSYNCCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psRGXDestroyKickSyncContextIN_UI8,
 				      IMG_UINT8 * psRGXDestroyKickSyncContextOUT_UI8,
@@ -202,7 +202,7 @@ PVRSRVBridgeRGXDestroyKickSyncContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyKickSyncContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYKICKSYNCCONTEXT, eError);
 }
 
 static_assert(PVRSRV_MAX_DEV_VARS <= IMG_UINT32_MAX,
@@ -210,7 +210,7 @@ static_assert(PVRSRV_MAX_DEV_VARS <= IMG_UINT32_MAX,
 static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX,
 	      "PVRSRV_SYNC_NAME_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psRGXKickSync2IN_UI8,
 			 IMG_UINT8 * psRGXKickSync2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -462,10 +462,10 @@ PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKSYNC2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetKickSyncContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXSetKickSyncContextPropertyIN_UI8,
 					  IMG_UINT8 * psRGXSetKickSyncContextPropertyOUT_UI8,
@@ -519,7 +519,7 @@ PVRSRVBridgeRGXSetKickSyncContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETKICKSYNCCONTEXTPROPERTY, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxpdump_bridge/server_rgxpdump_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxpdump_bridge/server_rgxpdump_bridge.c
index 6a52346..a7366f0 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxpdump_bridge/server_rgxpdump_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxpdump_bridge/server_rgxpdump_bridge.c
@@ -65,7 +65,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpTraceBuffer(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psPDumpTraceBufferIN_UI8,
 			     IMG_UINT8 * psPDumpTraceBufferOUT_UI8, CONNECTION_DATA * psConnection)
@@ -79,10 +79,10 @@ PVRSRVBridgePDumpTraceBuffer(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpTraceBufferKM(psConnection, OSGetDevNode(psConnection),
 				     psPDumpTraceBufferIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPTRACEBUFFER, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpSignatureBuffer(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psPDumpSignatureBufferIN_UI8,
 				 IMG_UINT8 * psPDumpSignatureBufferOUT_UI8,
@@ -99,12 +99,12 @@ PVRSRVBridgePDumpSignatureBuffer(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpSignatureBufferKM(psConnection, OSGetDevNode(psConnection),
 					 psPDumpSignatureBufferIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPSIGNATUREBUFFER, eError);
 }
 
 #if defined(SUPPORT_VALIDATION)
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpComputeCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psPDumpComputeCRCSignatureCheckIN_UI8,
 					  IMG_UINT8 * psPDumpComputeCRCSignatureCheckOUT_UI8,
@@ -122,14 +122,14 @@ PVRSRVBridgePDumpComputeCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 						  psPDumpComputeCRCSignatureCheckIN->
 						  ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPCOMPUTECRCSIGNATURECHECK, eError);
 }
 
 #else
 #define PVRSRVBridgePDumpComputeCRCSignatureCheck NULL
 #endif
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psPDumpCRCSignatureCheckIN_UI8,
 				   IMG_UINT8 * psPDumpCRCSignatureCheckOUT_UI8,
@@ -146,10 +146,10 @@ PVRSRVBridgePDumpCRCSignatureCheck(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpCRCSignatureCheckKM(psConnection, OSGetDevNode(psConnection),
 					   psPDumpCRCSignatureCheckIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPCRCSIGNATURECHECK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpValCheckPreCommand(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psPDumpValCheckPreCommandIN_UI8,
 				    IMG_UINT8 * psPDumpValCheckPreCommandOUT_UI8,
@@ -166,10 +166,10 @@ PVRSRVBridgePDumpValCheckPreCommand(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpValCheckPreCommandKM(psConnection, OSGetDevNode(psConnection),
 					    psPDumpValCheckPreCommandIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPVALCHECKPRECOMMAND, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgePDumpValCheckPostCommand(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psPDumpValCheckPostCommandIN_UI8,
 				     IMG_UINT8 * psPDumpValCheckPostCommandOUT_UI8,
@@ -186,7 +186,7 @@ PVRSRVBridgePDumpValCheckPostCommand(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVPDumpValCheckPostCommandKM(psConnection, OSGetDevNode(psConnection),
 					     psPDumpValCheckPostCommandIN->ui32PDumpFlags);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_PDUMPVALCHECKPOSTCOMMAND, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxray_bridge/server_rgxray_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxray_bridge/server_rgxray_bridge.c
index c537779..996a4c6 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxray_bridge/server_rgxray_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxray_bridge/server_rgxray_bridge.c
@@ -75,7 +75,7 @@ static PVRSRV_ERROR _RGXCreateRayContextpsRayContextIntRelease(void *pvData)
 static_assert(RGXFWIF_STATIC_RAYCONTEXT_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_STATIC_RAYCONTEXT_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateRayContext(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXCreateRayContextIN_UI8,
 				IMG_UINT8 * psRGXCreateRayContextOUT_UI8,
@@ -252,10 +252,10 @@ PVRSRVBridgeRGXCreateRayContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATERAYCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyRayContext(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRGXDestroyRayContextIN_UI8,
 				 IMG_UINT8 * psRGXDestroyRayContextOUT_UI8,
@@ -291,7 +291,7 @@ PVRSRVBridgeRGXDestroyRayContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyRayContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYRAYCONTEXT, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -301,7 +301,7 @@ static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX,
 static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickRDM(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psRGXKickRDMIN_UI8,
 		       IMG_UINT8 * psRGXKickRDMOUT_UI8, CONNECTION_DATA * psConnection)
@@ -586,7 +586,7 @@ PVRSRVBridgeRGXKickRDM(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKRDM, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxregconfig_bridge/server_rgxregconfig_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxregconfig_bridge/server_rgxregconfig_bridge.c
index 5484014..7802ff2 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxregconfig_bridge/server_rgxregconfig_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxregconfig_bridge/server_rgxregconfig_bridge.c
@@ -67,7 +67,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetRegConfigType(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXSetRegConfigTypeIN_UI8,
 				IMG_UINT8 * psRGXSetRegConfigTypeOUT_UI8,
@@ -84,10 +84,10 @@ PVRSRVBridgeRGXSetRegConfigType(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXSetRegConfigTypeKM(psConnection, OSGetDevNode(psConnection),
 					psRGXSetRegConfigTypeIN->ui8RegPowerIsland);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETREGCONFIGTYPE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXAddRegconfig(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psRGXAddRegconfigIN_UI8,
 			    IMG_UINT8 * psRGXAddRegconfigOUT_UI8, CONNECTION_DATA * psConnection)
@@ -103,10 +103,10 @@ PVRSRVBridgeRGXAddRegconfig(IMG_UINT32 ui32DispatchTableEntry,
 				    psRGXAddRegconfigIN->ui64RegValue,
 				    psRGXAddRegconfigIN->ui64RegMask);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXADDREGCONFIG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXClearRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psRGXClearRegConfigIN_UI8,
 			      IMG_UINT8 * psRGXClearRegConfigOUT_UI8,
@@ -122,10 +122,10 @@ PVRSRVBridgeRGXClearRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXClearRegConfigOUT->eError =
 	    PVRSRVRGXClearRegConfigKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCLEARREGCONFIG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXEnableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXEnableRegConfigIN_UI8,
 			       IMG_UINT8 * psRGXEnableRegConfigOUT_UI8,
@@ -142,10 +142,10 @@ PVRSRVBridgeRGXEnableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXEnableRegConfigOUT->eError =
 	    PVRSRVRGXEnableRegConfigKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXENABLEREGCONFIG, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDisableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXDisableRegConfigIN_UI8,
 				IMG_UINT8 * psRGXDisableRegConfigOUT_UI8,
@@ -163,7 +163,7 @@ PVRSRVBridgeRGXDisableRegConfig(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXDisableRegConfigOUT->eError =
 	    PVRSRVRGXDisableRegConfigKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDISABLEREGCONFIG, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/common_rgxta3d_bridge.h b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/common_rgxta3d_bridge.h
index 82771d3..90e5e43 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/common_rgxta3d_bridge.h
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/common_rgxta3d_bridge.h
@@ -74,7 +74,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define PVRSRV_BRIDGE_RGXTA3D_RGXSETRENDERCONTEXTPROPERTY			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+14
 #define PVRSRV_BRIDGE_RGXTA3D_RGXCREATEZSBUFFER2			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+15
 #define PVRSRV_BRIDGE_RGXTA3D_RGXCREATEFREELIST2			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+16
-#define PVRSRV_BRIDGE_RGXTA3D_CMD_LAST			(PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+16)
+#define PVRSRV_BRIDGE_RGXTA3D_RGXCREATEHWRTDATASET2			PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+17
+#define PVRSRV_BRIDGE_RGXTA3D_CMD_LAST			(PVRSRV_BRIDGE_RGXTA3D_CMD_FIRST+17)
 
 /*******************************************
             RGXCreateHWRTDataSet
@@ -447,4 +448,28 @@ typedef struct PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2_TAG
 	PVRSRV_ERROR eError;
 } __packed PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2;
 
+/*******************************************
+            RGXCreateHWRTDataSet2
+ *******************************************/
+
+/* Bridge in structure for RGXCreateHWRTDataSet2 */
+typedef struct PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2_TAG
+{
+	IMG_DEV_VIRTADDR sVHeapTableDevVAddr;
+	IMG_HANDLE hMListsReservation;
+	IMG_HANDLE hPMSecureStatesReservation;
+	IMG_HANDLE hPMStatesReservation;
+	IMG_DEV_VIRTADDR *psTailPtrsDevVAddr;
+	IMG_HANDLE *phKmHwRTDataSet;
+	IMG_HANDLE *phapsFreeLists;
+	IMG_UINT16 ui16MaxRTs;
+} __packed PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2;
+
+/* Bridge out structure for RGXCreateHWRTDataSet2 */
+typedef struct PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2_TAG
+{
+	IMG_HANDLE *phKmHwRTDataSet;
+	PVRSRV_ERROR eError;
+} __packed PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2;
+
 #endif /* COMMON_RGXTA3D_BRIDGE_H */
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/server_rgxta3d_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/server_rgxta3d_bridge.c
index 568303e..61de029 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/server_rgxta3d_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxta3d_bridge/server_rgxta3d_bridge.c
@@ -83,7 +83,7 @@ static_assert(RGXMKIF_NUM_GEOMDATAS <= IMG_UINT32_MAX,
 static_assert(RGXMKIF_NUM_RTDATAS <= IMG_UINT32_MAX,
 	      "RGXMKIF_NUM_RTDATAS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRGXCreateHWRTDataSetIN_UI8,
 				 IMG_UINT8 * psRGXCreateHWRTDataSetOUT_UI8,
@@ -439,10 +439,10 @@ PVRSRVBridgeRGXCreateHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXDestroyHWRTDataSetIN_UI8,
 				  IMG_UINT8 * psRGXDestroyHWRTDataSetOUT_UI8,
@@ -480,7 +480,7 @@ PVRSRVBridgeRGXDestroyHWRTDataSet(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyHWRTDataSet_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYHWRTDATASET, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateZSBufferpssZSBufferKMIntRelease(void *pvData)
@@ -490,7 +490,7 @@ static PVRSRV_ERROR _RGXCreateZSBufferpssZSBufferKMIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psRGXCreateZSBufferIN_UI8,
 			      IMG_UINT8 * psRGXCreateZSBufferOUT_UI8,
@@ -594,10 +594,10 @@ PVRSRVBridgeRGXCreateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEZSBUFFER, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXDestroyZSBufferIN_UI8,
 			       IMG_UINT8 * psRGXDestroyZSBufferOUT_UI8,
@@ -634,7 +634,7 @@ PVRSRVBridgeRGXDestroyZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyZSBuffer_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYZSBUFFER, eError);
 }
 
 static PVRSRV_ERROR _RGXPopulateZSBufferpssPopulationIntRelease(void *pvData)
@@ -644,7 +644,7 @@ static PVRSRV_ERROR _RGXPopulateZSBufferpssPopulationIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXPopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRGXPopulateZSBufferIN_UI8,
 				IMG_UINT8 * psRGXPopulateZSBufferOUT_UI8,
@@ -728,10 +728,10 @@ PVRSRVBridgeRGXPopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXPOPULATEZSBUFFER, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXUnpopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXUnpopulateZSBufferIN_UI8,
 				  IMG_UINT8 * psRGXUnpopulateZSBufferOUT_UI8,
@@ -767,7 +767,7 @@ PVRSRVBridgeRGXUnpopulateZSBuffer(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXUnpopulateZSBuffer_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXUNPOPULATEZSBUFFER, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateFreeListpsCleanupCookieIntRelease(void *pvData)
@@ -777,7 +777,7 @@ static PVRSRV_ERROR _RGXCreateFreeListpsCleanupCookieIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateFreeList(IMG_UINT32 ui32DispatchTableEntry,
 			      IMG_UINT8 * psRGXCreateFreeListIN_UI8,
 			      IMG_UINT8 * psRGXCreateFreeListOUT_UI8,
@@ -941,10 +941,10 @@ PVRSRVBridgeRGXCreateFreeList(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyFreeList(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXDestroyFreeListIN_UI8,
 			       IMG_UINT8 * psRGXDestroyFreeListOUT_UI8,
@@ -979,7 +979,7 @@ PVRSRVBridgeRGXDestroyFreeList(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyFreeList_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYFREELIST, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateRenderContextpsRenderContextIntRelease(void *pvData)
@@ -994,7 +994,7 @@ static_assert(RGXFWIF_RF_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(RGXFWIF_STATIC_RENDERCONTEXT_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_STATIC_RENDERCONTEXT_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psRGXCreateRenderContextIN_UI8,
 				   IMG_UINT8 * psRGXCreateRenderContextOUT_UI8,
@@ -1205,10 +1205,10 @@ PVRSRVBridgeRGXCreateRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATERENDERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXDestroyRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXDestroyRenderContextIN_UI8,
 				    IMG_UINT8 * psRGXDestroyRenderContextOUT_UI8,
@@ -1246,10 +1246,10 @@ PVRSRVBridgeRGXDestroyRenderContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXDestroyRenderContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXDESTROYRENDERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSendZSStoreDisable(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXSendZSStoreDisableIN_UI8,
 				  IMG_UINT8 * psRGXSendZSStoreDisableOUT_UI8,
@@ -1304,10 +1304,10 @@ PVRSRVBridgeRGXSendZSStoreDisable(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSENDZSSTOREDISABLE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetRenderContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXSetRenderContextPriorityIN_UI8,
 					IMG_UINT8 * psRGXSetRenderContextPriorityOUT_UI8,
@@ -1360,10 +1360,10 @@ PVRSRVBridgeRGXSetRenderContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETRENDERCONTEXTPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXRenderContextStalled(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psRGXRenderContextStalledIN_UI8,
 				    IMG_UINT8 * psRGXRenderContextStalledOUT_UI8,
@@ -1413,7 +1413,7 @@ PVRSRVBridgeRGXRenderContextStalled(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXRENDERCONTEXTSTALLED, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -1435,7 +1435,7 @@ static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
 	      "PVRSRV_MAX_SYNCS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXKickTA3D2(IMG_UINT32 ui32DispatchTableEntry,
 			 IMG_UINT8 * psRGXKickTA3D2IN_UI8,
 			 IMG_UINT8 * psRGXKickTA3D2OUT_UI8, CONNECTION_DATA * psConnection)
@@ -2265,10 +2265,10 @@ PVRSRVBridgeRGXKickTA3D2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXKICKTA3D2, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXSetRenderContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXSetRenderContextPropertyIN_UI8,
 					IMG_UINT8 * psRGXSetRenderContextPropertyOUT_UI8,
@@ -2322,7 +2322,7 @@ PVRSRVBridgeRGXSetRenderContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXSETRENDERCONTEXTPROPERTY, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateZSBuffer2pssZSBufferKMIntRelease(void *pvData)
@@ -2332,7 +2332,7 @@ static PVRSRV_ERROR _RGXCreateZSBuffer2pssZSBufferKMIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateZSBuffer2(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXCreateZSBuffer2IN_UI8,
 			       IMG_UINT8 * psRGXCreateZSBuffer2OUT_UI8,
@@ -2438,7 +2438,7 @@ PVRSRVBridgeRGXCreateZSBuffer2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEZSBUFFER2, eError);
 }
 
 static PVRSRV_ERROR _RGXCreateFreeList2psCleanupCookieIntRelease(void *pvData)
@@ -2448,7 +2448,7 @@ static PVRSRV_ERROR _RGXCreateFreeList2psCleanupCookieIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXCreateFreeList2(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXCreateFreeList2IN_UI8,
 			       IMG_UINT8 * psRGXCreateFreeList2OUT_UI8,
@@ -2590,7 +2590,404 @@ PVRSRVBridgeRGXCreateFreeList2(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2, eError);
+}
+
+static PVRSRV_ERROR _RGXCreateHWRTDataSet2psKmHwRTDataSetIntRelease(void *pvData)
+{
+	PVRSRV_ERROR eError;
+	eError = RGXDestroyHWRTDataSet((RGX_KM_HW_RT_DATASET *) pvData);
+	return eError;
+}
+
+static_assert(RGXMKIF_NUM_RTDATA_FREELISTS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_RTDATA_FREELISTS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_GEOMDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_GEOMDATAS must not be larger than IMG_UINT32_MAX");
+static_assert(RGXMKIF_NUM_RTDATAS <= IMG_UINT32_MAX,
+	      "RGXMKIF_NUM_RTDATAS must not be larger than IMG_UINT32_MAX");
+
+static size_t
+PVRSRVBridgeRGXCreateHWRTDataSet2(IMG_UINT32 ui32DispatchTableEntry,
+				  IMG_UINT8 * psRGXCreateHWRTDataSet2IN_UI8,
+				  IMG_UINT8 * psRGXCreateHWRTDataSet2OUT_UI8,
+				  CONNECTION_DATA * psConnection)
+{
+	PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2 *psRGXCreateHWRTDataSet2IN =
+	    (PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2 *)
+	    IMG_OFFSET_ADDR(psRGXCreateHWRTDataSet2IN_UI8, 0);
+	PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2 *psRGXCreateHWRTDataSet2OUT =
+	    (PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2 *)
+	    IMG_OFFSET_ADDR(psRGXCreateHWRTDataSet2OUT_UI8, 0);
+
+	IMG_HANDLE hMListsReservation = psRGXCreateHWRTDataSet2IN->hMListsReservation;
+	DEVMEMINT_RESERVATION2 *psMListsReservationInt = NULL;
+	IMG_HANDLE hPMStatesReservation = psRGXCreateHWRTDataSet2IN->hPMStatesReservation;
+	DEVMEMINT_RESERVATION2 *psPMStatesReservationInt = NULL;
+	IMG_HANDLE hPMSecureStatesReservation =
+	    psRGXCreateHWRTDataSet2IN->hPMSecureStatesReservation;
+	DEVMEMINT_RESERVATION2 *psPMSecureStatesReservationInt = NULL;
+	RGX_FREELIST **psapsFreeListsInt = NULL;
+	IMG_HANDLE *hapsFreeListsInt2 = NULL;
+	IMG_DEV_VIRTADDR *sTailPtrsDevVAddrInt = NULL;
+	RGX_KM_HW_RT_DATASET **psKmHwRTDataSetInt = NULL;
+	IMG_HANDLE *hKmHwRTDataSetInt2 = NULL;
+
+	IMG_UINT32 ui32NextOffset = 0;
+	IMG_BYTE *pArrayArgsBuffer = NULL;
+	IMG_BOOL bHaveEnoughSpace = IMG_FALSE;
+
+	IMG_UINT32 ui32BufferSize = 0;
+	IMG_UINT64 ui64BufferSize =
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(RGX_FREELIST *)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *)) +
+	    ((IMG_UINT64) RGXMKIF_NUM_RTDATAS * sizeof(IMG_HANDLE)) + 0;
+
+	psRGXCreateHWRTDataSet2OUT->phKmHwRTDataSet = psRGXCreateHWRTDataSet2IN->phKmHwRTDataSet;
+
+	if (ui64BufferSize > IMG_UINT32_MAX)
+	{
+		psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_BRIDGE_BUFFER_TOO_SMALL;
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	ui32BufferSize = (IMG_UINT32) ui64BufferSize;
+
+	if (ui32BufferSize != 0)
+	{
+		/* Try to use remainder of input buffer for copies if possible, word-aligned for safety. */
+		IMG_UINT32 ui32InBufferOffset =
+		    PVR_ALIGN(sizeof(*psRGXCreateHWRTDataSet2IN), sizeof(unsigned long));
+		IMG_UINT32 ui32InBufferExcessSize =
+		    ui32InBufferOffset >=
+		    PVRSRV_MAX_BRIDGE_IN_SIZE ? 0 : PVRSRV_MAX_BRIDGE_IN_SIZE - ui32InBufferOffset;
+
+		bHaveEnoughSpace = ui32BufferSize <= ui32InBufferExcessSize;
+		if (bHaveEnoughSpace)
+		{
+			IMG_BYTE *pInputBuffer = (IMG_BYTE *) (void *)psRGXCreateHWRTDataSet2IN;
+
+			pArrayArgsBuffer = &pInputBuffer[ui32InBufferOffset];
+		}
+		else
+		{
+			pArrayArgsBuffer = OSAllocMemNoStats(ui32BufferSize);
+
+			if (!pArrayArgsBuffer)
+			{
+				psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
+				goto RGXCreateHWRTDataSet2_exit;
+			}
+		}
+	}
+
+	{
+		psapsFreeListsInt =
+		    (RGX_FREELIST **) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		OSCachedMemSet(psapsFreeListsInt, 0,
+			       RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(RGX_FREELIST *));
+		ui32NextOffset += RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(RGX_FREELIST *);
+		hapsFreeListsInt2 =
+		    (IMG_HANDLE *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, hapsFreeListsInt2,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->phapsFreeLists,
+		     RGXMKIF_NUM_RTDATA_FREELISTS * sizeof(IMG_HANDLE)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+	{
+		sTailPtrsDevVAddrInt =
+		    (IMG_DEV_VIRTADDR *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR);
+	}
+
+	/* Copy the data over */
+	if (RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR) > 0)
+	{
+		if (OSCopyFromUser
+		    (NULL, sTailPtrsDevVAddrInt,
+		     (const void __user *)psRGXCreateHWRTDataSet2IN->psTailPtrsDevVAddr,
+		     RGXMKIF_NUM_GEOMDATAS * sizeof(IMG_DEV_VIRTADDR)) != PVRSRV_OK)
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+	if (IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset) != NULL)
+	{
+		psKmHwRTDataSetInt =
+		    (RGX_KM_HW_RT_DATASET **) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		OSCachedMemSet(psKmHwRTDataSetInt, 0,
+			       RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *));
+		ui32NextOffset += RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *);
+		hKmHwRTDataSetInt2 =
+		    (IMG_HANDLE *) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset);
+		ui32NextOffset += RGXMKIF_NUM_RTDATAS * sizeof(IMG_HANDLE);
+	}
+
+	/* Lock over handle lookup. */
+	LockHandle(psConnection->psHandleBase);
+
+	/* Look up the address from the handle */
+	psRGXCreateHWRTDataSet2OUT->eError =
+	    PVRSRVLookupHandleUnlocked(psConnection->psHandleBase,
+				       (void **)&psMListsReservationInt,
+				       hMListsReservation,
+				       PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2, IMG_TRUE);
+	if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+	{
+		UnlockHandle(psConnection->psHandleBase);
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	/* Look up the address from the handle */
+	psRGXCreateHWRTDataSet2OUT->eError =
+	    PVRSRVLookupHandleUnlocked(psConnection->psHandleBase,
+				       (void **)&psPMStatesReservationInt,
+				       hPMStatesReservation,
+				       PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2, IMG_TRUE);
+	if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+	{
+		UnlockHandle(psConnection->psHandleBase);
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	/* Look up the address from the handle */
+	psRGXCreateHWRTDataSet2OUT->eError =
+	    PVRSRVLookupHandleUnlocked(psConnection->psHandleBase,
+				       (void **)&psPMSecureStatesReservationInt,
+				       hPMSecureStatesReservation,
+				       PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2, IMG_TRUE);
+	if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+	{
+		UnlockHandle(psConnection->psHandleBase);
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	{
+		IMG_UINT32 i;
+
+		for (i = 0; i < RGXMKIF_NUM_RTDATA_FREELISTS; i++)
+		{
+			/* Look up the address from the handle */
+			psRGXCreateHWRTDataSet2OUT->eError =
+			    PVRSRVLookupHandleUnlocked(psConnection->psHandleBase,
+						       (void **)&psapsFreeListsInt[i],
+						       hapsFreeListsInt2[i],
+						       PVRSRV_HANDLE_TYPE_RGX_FREELIST, IMG_TRUE);
+			if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+			{
+				UnlockHandle(psConnection->psHandleBase);
+				goto RGXCreateHWRTDataSet2_exit;
+			}
+		}
+	}
+	/* Release now we have looked up handles. */
+	UnlockHandle(psConnection->psHandleBase);
+
+	psRGXCreateHWRTDataSet2OUT->eError =
+	    RGXCreateHWRTDataSet2(psConnection, OSGetDevNode(psConnection),
+				  psRGXCreateHWRTDataSet2IN->sVHeapTableDevVAddr,
+				  psMListsReservationInt,
+				  psPMStatesReservationInt,
+				  psPMSecureStatesReservationInt,
+				  psapsFreeListsInt,
+				  sTailPtrsDevVAddrInt,
+				  psRGXCreateHWRTDataSet2IN->ui16MaxRTs, psKmHwRTDataSetInt);
+	/* Exit early if bridged call fails */
+	if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+	{
+		goto RGXCreateHWRTDataSet2_exit;
+	}
+
+	/* Lock over handle creation. */
+	LockHandle(psConnection->psHandleBase);
+	if (hKmHwRTDataSetInt2)
+	{
+		IMG_UINT32 i;
+
+		for (i = 0; i < RGXMKIF_NUM_RTDATAS; i++)
+		{
+
+			psRGXCreateHWRTDataSet2OUT->eError =
+			    PVRSRVAllocHandleUnlocked(psConnection->psHandleBase,
+						      &hKmHwRTDataSetInt2[i],
+						      (void *)psKmHwRTDataSetInt[i],
+						      PVRSRV_HANDLE_TYPE_RGX_KM_HW_RT_DATASET,
+						      PVRSRV_HANDLE_ALLOC_FLAG_MULTI,
+						      (PFN_HANDLE_RELEASE) &
+						      _RGXCreateHWRTDataSet2psKmHwRTDataSetIntRelease);
+			if (unlikely(psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK))
+			{
+				IMG_UINT32 j;
+				/* Ensure the remaining handles are set to NULL. hKmHwRTDataSetInt2[i] was
+				 * zeroed when calling PVRSRVAllocHandleUnlocked, so we start at the next
+				 * element. If it was the last iteration, the loop doesn't run.
+				 */
+				for (j = i + 1; j < RGXMKIF_NUM_RTDATAS; j++)
+				{
+					hKmHwRTDataSetInt2[j] = NULL;
+				}
+				UnlockHandle(psConnection->psHandleBase);
+				goto RGXCreateHWRTDataSet2_exit;
+			}
+
+		}
+	}
+	/* Release now we have created handles. */
+	UnlockHandle(psConnection->psHandleBase);
+
+	/* If dest ptr is non-null and we have data to copy */
+	if ((hKmHwRTDataSetInt2) && ((RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *)) > 0))
+	{
+		if (unlikely
+		    (OSCopyToUser
+		     (NULL, (void __user *)psRGXCreateHWRTDataSet2OUT->phKmHwRTDataSet,
+		      hKmHwRTDataSetInt2,
+		      (RGXMKIF_NUM_RTDATAS * sizeof(RGX_KM_HW_RT_DATASET *))) != PVRSRV_OK))
+		{
+			psRGXCreateHWRTDataSet2OUT->eError = PVRSRV_ERROR_INVALID_PARAMS;
+
+			goto RGXCreateHWRTDataSet2_exit;
+		}
+	}
+
+RGXCreateHWRTDataSet2_exit:
+
+	/* Lock over handle lookup cleanup. */
+	LockHandle(psConnection->psHandleBase);
+
+	/* Unreference the previously looked up handle */
+	if (psMListsReservationInt)
+	{
+		PVRSRVReleaseHandleUnlocked(psConnection->psHandleBase,
+					    hMListsReservation,
+					    PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2);
+	}
+
+	/* Unreference the previously looked up handle */
+	if (psPMStatesReservationInt)
+	{
+		PVRSRVReleaseHandleUnlocked(psConnection->psHandleBase,
+					    hPMStatesReservation,
+					    PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2);
+	}
+
+	/* Unreference the previously looked up handle */
+	if (psPMSecureStatesReservationInt)
+	{
+		PVRSRVReleaseHandleUnlocked(psConnection->psHandleBase,
+					    hPMSecureStatesReservation,
+					    PVRSRV_HANDLE_TYPE_DEVMEMINT_RESERVATION2);
+	}
+
+	if (hapsFreeListsInt2)
+	{
+		IMG_UINT32 i;
+
+		for (i = 0; i < RGXMKIF_NUM_RTDATA_FREELISTS; i++)
+		{
+
+			/* Unreference the previously looked up handle */
+			if (psapsFreeListsInt && psapsFreeListsInt[i])
+			{
+				PVRSRVReleaseHandleUnlocked(psConnection->psHandleBase,
+							    hapsFreeListsInt2[i],
+							    PVRSRV_HANDLE_TYPE_RGX_FREELIST);
+			}
+		}
+	}
+	/* Release now we have cleaned up look up handles. */
+	UnlockHandle(psConnection->psHandleBase);
+
+	if (psRGXCreateHWRTDataSet2OUT->eError != PVRSRV_OK)
+	{
+		if (hKmHwRTDataSetInt2)
+		{
+			PVRSRV_ERROR eError;
+
+			/* Lock over handle creation cleanup. */
+			LockHandle(psConnection->psHandleBase);
+
+			{
+				IMG_UINT32 idx;
+				for (idx = 0; idx < RGXMKIF_NUM_RTDATAS; idx++)
+				{
+					if (hKmHwRTDataSetInt2[idx])
+					{
+
+						eError =
+						    PVRSRVDestroyHandleUnlocked(psConnection->
+										psHandleBase,
+										hKmHwRTDataSetInt2
+										[idx],
+										PVRSRV_HANDLE_TYPE_RGX_KM_HW_RT_DATASET);
+						if (unlikely
+						    ((eError != PVRSRV_OK)
+						     && (eError != PVRSRV_ERROR_RETRY)))
+						{
+							PVR_DPF((PVR_DBG_ERROR,
+								 "%s: %s",
+								 __func__,
+								 PVRSRVGetErrorString(eError)));
+						}
+						/* Releasing the handle should free/destroy/release the resource.
+						 * This should never fail... */
+						PVR_ASSERT((eError == PVRSRV_OK)
+							   || (eError == PVRSRV_ERROR_RETRY));
+
+					}
+					else
+					{
+						/* Free/Destroy/Release the resource */
+						RGXDestroyHWRTDataSet(psKmHwRTDataSetInt[idx]);
+					}
+				}
+			}
+
+			/* Release now we have cleaned up creation handles. */
+			UnlockHandle(psConnection->psHandleBase);
+
+		}
+
+		else if (psKmHwRTDataSetInt)
+		{
+			IMG_UINT32 i;
+			for (i = 0; i < RGXMKIF_NUM_RTDATAS; i++)
+			{
+				if (psKmHwRTDataSetInt[i])
+				{
+					RGXDestroyHWRTDataSet(psKmHwRTDataSetInt[i]);
+				}
+			}
+		}
+
+	}
+
+	/* Allocated space should be equal to the last updated offset */
+#ifdef PVRSRV_NEED_PVR_ASSERT
+	if (psRGXCreateHWRTDataSet2OUT->eError == PVRSRV_OK)
+		PVR_ASSERT(ui32BufferSize == ui32NextOffset);
+#endif /* PVRSRV_NEED_PVR_ASSERT */
+
+	if (!bHaveEnoughSpace && pArrayArgsBuffer)
+		OSFreeMemNoStats(pArrayArgsBuffer);
+
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2, eError);
 }
 
 /* ***************************************************************************
@@ -2692,6 +3089,11 @@ PVRSRV_ERROR InitRGXTA3DBridge(void)
 			      sizeof(PVRSRV_BRIDGE_IN_RGXCREATEFREELIST2),
 			      sizeof(PVRSRV_BRIDGE_OUT_RGXCREATEFREELIST2));
 
+	SetDispatchTableEntry(PVRSRV_BRIDGE_RGXTA3D, PVRSRV_BRIDGE_RGXTA3D_RGXCREATEHWRTDATASET2,
+			      PVRSRVBridgeRGXCreateHWRTDataSet2, NULL,
+			      sizeof(PVRSRV_BRIDGE_IN_RGXCREATEHWRTDATASET2),
+			      sizeof(PVRSRV_BRIDGE_OUT_RGXCREATEHWRTDATASET2));
+
 	return PVRSRV_OK;
 }
 
@@ -2740,4 +3142,6 @@ void DeinitRGXTA3DBridge(void)
 
 	UnsetDispatchTableEntry(PVRSRV_BRIDGE_RGXTA3D, PVRSRV_BRIDGE_RGXTA3D_RGXCREATEFREELIST2);
 
+	UnsetDispatchTableEntry(PVRSRV_BRIDGE_RGXTA3D, PVRSRV_BRIDGE_RGXTA3D_RGXCREATEHWRTDATASET2);
+
 }
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c
index 4af3cfc..22f2810 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtimerquery_bridge/server_rgxtimerquery_bridge.c
@@ -65,7 +65,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXBeginTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psRGXBeginTimerQueryIN_UI8,
 			       IMG_UINT8 * psRGXBeginTimerQueryOUT_UI8,
@@ -81,10 +81,10 @@ PVRSRVBridgeRGXBeginTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVRGXBeginTimerQueryKM(psConnection, OSGetDevNode(psConnection),
 				       psRGXBeginTimerQueryIN->ui32QueryId);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXBEGINTIMERQUERY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXEndTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psRGXEndTimerQueryIN_UI8,
 			     IMG_UINT8 * psRGXEndTimerQueryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -99,10 +99,10 @@ PVRSRVBridgeRGXEndTimerQuery(IMG_UINT32 ui32DispatchTableEntry,
 	psRGXEndTimerQueryOUT->eError =
 	    PVRSRVRGXEndTimerQueryKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXENDTIMERQUERY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXQueryTimer(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psRGXQueryTimerIN_UI8,
 			  IMG_UINT8 * psRGXQueryTimerOUT_UI8, CONNECTION_DATA * psConnection)
@@ -118,7 +118,7 @@ PVRSRVBridgeRGXQueryTimer(IMG_UINT32 ui32DispatchTableEntry,
 				  &psRGXQueryTimerOUT->ui64StartTime,
 				  &psRGXQueryTimerOUT->ui64EndTime);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXQUERYTIMER, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtq2_bridge/server_rgxtq2_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtq2_bridge/server_rgxtq2_bridge.c
index 8dfc01b..bccd646 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtq2_bridge/server_rgxtq2_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/rgxtq2_bridge/server_rgxtq2_bridge.c
@@ -77,7 +77,7 @@ static PVRSRV_ERROR _RGXTDMCreateTransferContextpsTransferContextIntRelease(void
 static_assert(RGXFWIF_RF_CMD_SIZE <= IMG_UINT32_MAX,
 	      "RGXFWIF_RF_CMD_SIZE must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMCreateTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 					IMG_UINT8 * psRGXTDMCreateTransferContextIN_UI8,
 					IMG_UINT8 * psRGXTDMCreateTransferContextOUT_UI8,
@@ -268,10 +268,10 @@ PVRSRVBridgeRGXTDMCreateTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMCREATETRANSFERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMDestroyTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 					 IMG_UINT8 * psRGXTDMDestroyTransferContextIN_UI8,
 					 IMG_UINT8 * psRGXTDMDestroyTransferContextOUT_UI8,
@@ -324,10 +324,10 @@ PVRSRVBridgeRGXTDMDestroyTransferContext(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXTDMDestroyTransferContext_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMDESTROYTRANSFERCONTEXT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMSetTransferContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPriorityIN_UI8,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPriorityOUT_UI8,
@@ -395,10 +395,10 @@ PVRSRVBridgeRGXTDMSetTransferContextPriority(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMSETTRANSFERCONTEXTPRIORITY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMNotifyWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 					  IMG_UINT8 * psRGXTDMNotifyWriteOffsetUpdateIN_UI8,
 					  IMG_UINT8 * psRGXTDMNotifyWriteOffsetUpdateOUT_UI8,
@@ -465,7 +465,7 @@ PVRSRVBridgeRGXTDMNotifyWriteOffsetUpdate(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMNOTIFYWRITEOFFSETUPDATE, eError);
 }
 
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
@@ -477,7 +477,7 @@ static_assert(RGXFWIF_DM_INDEPENDENT_KICK_CMD_SIZE <= IMG_UINT32_MAX,
 static_assert(PVRSRV_MAX_SYNCS <= IMG_UINT32_MAX,
 	      "PVRSRV_MAX_SYNCS must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMSubmitTransfer2(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXTDMSubmitTransfer2IN_UI8,
 				  IMG_UINT8 * psRGXTDMSubmitTransfer2OUT_UI8,
@@ -882,7 +882,7 @@ PVRSRVBridgeRGXTDMSubmitTransfer2(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMSUBMITTRANSFER2, eError);
 }
 
 static PVRSRV_ERROR _RGXTDMGetSharedMemorypsCLIPMRMemIntRelease(void *pvData)
@@ -899,7 +899,7 @@ static PVRSRV_ERROR _RGXTDMGetSharedMemorypsUSCPMRMemIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMGetSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 				  IMG_UINT8 * psRGXTDMGetSharedMemoryIN_UI8,
 				  IMG_UINT8 * psRGXTDMGetSharedMemoryOUT_UI8,
@@ -988,10 +988,10 @@ PVRSRVBridgeRGXTDMGetSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMGETSHAREDMEMORY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMReleaseSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 				      IMG_UINT8 * psRGXTDMReleaseSharedMemoryIN_UI8,
 				      IMG_UINT8 * psRGXTDMReleaseSharedMemoryOUT_UI8,
@@ -1041,10 +1041,10 @@ PVRSRVBridgeRGXTDMReleaseSharedMemory(IMG_UINT32 ui32DispatchTableEntry,
 
 RGXTDMReleaseSharedMemory_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMRELEASESHAREDMEMORY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRGXTDMSetTransferContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPropertyIN_UI8,
 					     IMG_UINT8 * psRGXTDMSetTransferContextPropertyOUT_UI8,
@@ -1115,7 +1115,7 @@ PVRSRVBridgeRGXTDMSetTransferContextProperty(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RGXTDMSETTRANSFERCONTEXTPROPERTY, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/ri_bridge/server_ri_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/ri_bridge/server_ri_bridge.c
index 1f9db7d..940f942 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/ri_bridge/server_ri_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/ri_bridge/server_ri_bridge.c
@@ -65,7 +65,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWritePMREntry(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psRIWritePMREntryIN_UI8,
 			    IMG_UINT8 * psRIWritePMREntryOUT_UI8, CONNECTION_DATA * psConnection)
@@ -110,7 +110,7 @@ PVRSRVBridgeRIWritePMREntry(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEPMRENTRY, eError);
 }
 
 static PVRSRV_ERROR _RIWriteMEMDESCEntrypsRIHandleIntRelease(void *pvData)
@@ -123,7 +123,7 @@ static PVRSRV_ERROR _RIWriteMEMDESCEntrypsRIHandleIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWriteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRIWriteMEMDESCEntryIN_UI8,
 				IMG_UINT8 * psRIWriteMEMDESCEntryOUT_UI8,
@@ -294,7 +294,7 @@ PVRSRVBridgeRIWriteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEMEMDESCENTRY, eError);
 }
 
 static PVRSRV_ERROR _RIWriteProcListEntrypsRIHandleIntRelease(void *pvData)
@@ -307,7 +307,7 @@ static PVRSRV_ERROR _RIWriteProcListEntrypsRIHandleIntRelease(void *pvData)
 static_assert(DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX,
 	      "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWriteProcListEntry(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRIWriteProcListEntryIN_UI8,
 				 IMG_UINT8 * psRIWriteProcListEntryOUT_UI8,
@@ -446,10 +446,10 @@ PVRSRVBridgeRIWriteProcListEntry(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEPROCLISTENTRY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIUpdateMEMDESCAddr(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psRIUpdateMEMDESCAddrIN_UI8,
 				IMG_UINT8 * psRIUpdateMEMDESCAddrOUT_UI8,
@@ -498,10 +498,10 @@ PVRSRVBridgeRIUpdateMEMDESCAddr(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIUPDATEMEMDESCADDR, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDeleteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 				 IMG_UINT8 * psRIDeleteMEMDESCEntryIN_UI8,
 				 IMG_UINT8 * psRIDeleteMEMDESCEntryOUT_UI8,
@@ -537,10 +537,10 @@ PVRSRVBridgeRIDeleteMEMDESCEntry(IMG_UINT32 ui32DispatchTableEntry,
 
 RIDeleteMEMDESCEntry_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDELETEMEMDESCENTRY, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDumpList(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psRIDumpListIN_UI8,
 		       IMG_UINT8 * psRIDumpListOUT_UI8, CONNECTION_DATA * psConnection)
@@ -585,10 +585,10 @@ PVRSRVBridgeRIDumpList(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDUMPLIST, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDumpAll(IMG_UINT32 ui32DispatchTableEntry,
 		      IMG_UINT8 * psRIDumpAllIN_UI8,
 		      IMG_UINT8 * psRIDumpAllOUT_UI8, CONNECTION_DATA * psConnection)
@@ -603,10 +603,10 @@ PVRSRVBridgeRIDumpAll(IMG_UINT32 ui32DispatchTableEntry,
 
 	psRIDumpAllOUT->eError = RIDumpAllKM();
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDUMPALL, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIDumpProcess(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psRIDumpProcessIN_UI8,
 			  IMG_UINT8 * psRIDumpProcessOUT_UI8, CONNECTION_DATA * psConnection)
@@ -620,10 +620,10 @@ PVRSRVBridgeRIDumpProcess(IMG_UINT32 ui32DispatchTableEntry,
 
 	psRIDumpProcessOUT->eError = RIDumpProcessKM(psRIDumpProcessIN->ui32Pid);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIDUMPPROCESS, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeRIWritePMREntryWithOwner(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psRIWritePMREntryWithOwnerIN_UI8,
 				     IMG_UINT8 * psRIWritePMREntryWithOwnerOUT_UI8,
@@ -672,7 +672,7 @@ PVRSRVBridgeRIWritePMREntryWithOwner(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RIWRITEPMRENTRYWITHOWNER, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/srvcore_bridge/server_srvcore_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/srvcore_bridge/server_srvcore_bridge.c
index d40e53b..06d2b1d 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/srvcore_bridge/server_srvcore_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/srvcore_bridge/server_srvcore_bridge.c
@@ -68,7 +68,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeConnect(IMG_UINT32 ui32DispatchTableEntry,
 		    IMG_UINT8 * psConnectIN_UI8,
 		    IMG_UINT8 * psConnectOUT_UI8, CONNECTION_DATA * psConnection)
@@ -87,10 +87,10 @@ PVRSRVBridgeConnect(IMG_UINT32 ui32DispatchTableEntry,
 			    &psConnectOUT->ui8KernelArch,
 			    &psConnectOUT->ui32CapabilityFlags, &psConnectOUT->ui64PackedBvnc);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_CONNECT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDisconnect(IMG_UINT32 ui32DispatchTableEntry,
 		       IMG_UINT8 * psDisconnectIN_UI8,
 		       IMG_UINT8 * psDisconnectOUT_UI8, CONNECTION_DATA * psConnection)
@@ -105,7 +105,7 @@ PVRSRVBridgeDisconnect(IMG_UINT32 ui32DispatchTableEntry,
 
 	psDisconnectOUT->eError = PVRSRVDisconnectKM();
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DISCONNECT, eError);
 }
 
 static PVRSRV_ERROR _AcquireGlobalEventObjecthGlobalEventObjectIntRelease(void *pvData)
@@ -115,7 +115,7 @@ static PVRSRV_ERROR _AcquireGlobalEventObjecthGlobalEventObjectIntRelease(void *
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAcquireGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psAcquireGlobalEventObjectIN_UI8,
 				     IMG_UINT8 * psAcquireGlobalEventObjectOUT_UI8,
@@ -170,10 +170,10 @@ PVRSRVBridgeAcquireGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ACQUIREGLOBALEVENTOBJECT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeReleaseGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psReleaseGlobalEventObjectIN_UI8,
 				     IMG_UINT8 * psReleaseGlobalEventObjectOUT_UI8,
@@ -211,7 +211,7 @@ PVRSRVBridgeReleaseGlobalEventObject(IMG_UINT32 ui32DispatchTableEntry,
 
 ReleaseGlobalEventObject_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RELEASEGLOBALEVENTOBJECT, eError);
 }
 
 static PVRSRV_ERROR _EventObjectOpenhOSEventIntRelease(void *pvData)
@@ -221,7 +221,7 @@ static PVRSRV_ERROR _EventObjectOpenhOSEventIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectOpen(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psEventObjectOpenIN_UI8,
 			    IMG_UINT8 * psEventObjectOpenOUT_UI8, CONNECTION_DATA * psConnection)
@@ -300,10 +300,10 @@ PVRSRVBridgeEventObjectOpen(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTOPEN, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectWait(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psEventObjectWaitIN_UI8,
 			    IMG_UINT8 * psEventObjectWaitOUT_UI8, CONNECTION_DATA * psConnection)
@@ -349,10 +349,10 @@ PVRSRVBridgeEventObjectWait(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTWAIT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectClose(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psEventObjectCloseIN_UI8,
 			     IMG_UINT8 * psEventObjectCloseOUT_UI8, CONNECTION_DATA * psConnection)
@@ -384,10 +384,10 @@ PVRSRVBridgeEventObjectClose(IMG_UINT32 ui32DispatchTableEntry,
 
 EventObjectClose_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTCLOSE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeDumpDebugInfo(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psDumpDebugInfoIN_UI8,
 			  IMG_UINT8 * psDumpDebugInfoOUT_UI8, CONNECTION_DATA * psConnection)
@@ -401,10 +401,10 @@ PVRSRVBridgeDumpDebugInfo(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVDumpDebugInfoKM(psConnection, OSGetDevNode(psConnection),
 				  psDumpDebugInfoIN->ui32VerbLevel);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_DUMPDEBUGINFO, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetDevClockSpeed(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psGetDevClockSpeedIN_UI8,
 			     IMG_UINT8 * psGetDevClockSpeedOUT_UI8, CONNECTION_DATA * psConnection)
@@ -420,10 +420,10 @@ PVRSRVBridgeGetDevClockSpeed(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVGetDevClockSpeedKM(psConnection, OSGetDevNode(psConnection),
 				     &psGetDevClockSpeedOUT->ui32ClockSpeed);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETDEVCLOCKSPEED, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeHWOpTimeout(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psHWOpTimeoutIN_UI8,
 			IMG_UINT8 * psHWOpTimeoutOUT_UI8, CONNECTION_DATA * psConnection)
@@ -437,13 +437,13 @@ PVRSRVBridgeHWOpTimeout(IMG_UINT32 ui32DispatchTableEntry,
 
 	psHWOpTimeoutOUT->eError = PVRSRVHWOpTimeoutKM(psConnection, OSGetDevNode(psConnection));
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_HWOPTIMEOUT, eError);
 }
 
 static_assert(RGXFW_ALIGN_CHECKS_UM_MAX <= IMG_UINT32_MAX,
 	      "RGXFW_ALIGN_CHECKS_UM_MAX must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAlignmentCheck(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psAlignmentCheckIN_UI8,
 			   IMG_UINT8 * psAlignmentCheckOUT_UI8, CONNECTION_DATA * psConnection)
@@ -541,10 +541,10 @@ PVRSRVBridgeAlignmentCheck(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ALIGNMENTCHECK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetDeviceStatus(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psGetDeviceStatusIN_UI8,
 			    IMG_UINT8 * psGetDeviceStatusOUT_UI8, CONNECTION_DATA * psConnection)
@@ -560,12 +560,12 @@ PVRSRVBridgeGetDeviceStatus(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVGetDeviceStatusKM(psConnection, OSGetDevNode(psConnection),
 				    &psGetDeviceStatusOUT->ui32DeviceSatus);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETDEVICESTATUS, eError);
 }
 
 static_assert(8 <= IMG_UINT32_MAX, "8 must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeGetMultiCoreInfo(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psGetMultiCoreInfoIN_UI8,
 			     IMG_UINT8 * psGetMultiCoreInfoOUT_UI8, CONNECTION_DATA * psConnection)
@@ -670,10 +670,10 @@ PVRSRVBridgeGetMultiCoreInfo(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_GETMULTICOREINFO, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeEventObjectWaitTimeout(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psEventObjectWaitTimeoutIN_UI8,
 				   IMG_UINT8 * psEventObjectWaitTimeoutOUT_UI8,
@@ -723,13 +723,13 @@ PVRSRVBridgeEventObjectWaitTimeout(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_EVENTOBJECTWAITTIMEOUT, eError);
 }
 
 static_assert(PVRSRV_PROCESS_STAT_TYPE_COUNT <= IMG_UINT32_MAX,
 	      "PVRSRV_PROCESS_STAT_TYPE_COUNT must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeFindProcessMemStats(IMG_UINT32 ui32DispatchTableEntry,
 				IMG_UINT8 * psFindProcessMemStatsIN_UI8,
 				IMG_UINT8 * psFindProcessMemStatsOUT_UI8,
@@ -843,7 +843,7 @@ PVRSRVBridgeFindProcessMemStats(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_FINDPROCESSMEMSTATS, eError);
 }
 
 static PVRSRV_ERROR _AcquireInfoPagepsPMRIntRelease(void *pvData)
@@ -853,7 +853,7 @@ static PVRSRV_ERROR _AcquireInfoPagepsPMRIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAcquireInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psAcquireInfoPageIN_UI8,
 			    IMG_UINT8 * psAcquireInfoPageOUT_UI8, CONNECTION_DATA * psConnection)
@@ -902,10 +902,10 @@ PVRSRVBridgeAcquireInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 		}
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ACQUIREINFOPAGE, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeReleaseInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 			    IMG_UINT8 * psReleaseInfoPageIN_UI8,
 			    IMG_UINT8 * psReleaseInfoPageOUT_UI8, CONNECTION_DATA * psConnection)
@@ -937,7 +937,7 @@ PVRSRVBridgeReleaseInfoPage(IMG_UINT32 ui32DispatchTableEntry,
 
 ReleaseInfoPage_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_RELEASEINFOPAGE, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/sync_bridge/server_sync_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/sync_bridge/server_sync_bridge.c
index a0d9210..a54f23f 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/sync_bridge/server_sync_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/sync_bridge/server_sync_bridge.c
@@ -77,7 +77,7 @@ static PVRSRV_ERROR _AllocSyncPrimitiveBlockpsSyncHandleIntRelease(void *pvData)
 	return eError;
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeAllocSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 				    IMG_UINT8 * psAllocSyncPrimitiveBlockIN_UI8,
 				    IMG_UINT8 * psAllocSyncPrimitiveBlockOUT_UI8,
@@ -179,10 +179,10 @@ PVRSRVBridgeAllocSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 
 	}
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_ALLOCSYNCPRIMITIVEBLOCK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeFreeSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 				   IMG_UINT8 * psFreeSyncPrimitiveBlockIN_UI8,
 				   IMG_UINT8 * psFreeSyncPrimitiveBlockOUT_UI8,
@@ -218,10 +218,10 @@ PVRSRVBridgeFreeSyncPrimitiveBlock(IMG_UINT32 ui32DispatchTableEntry,
 
 FreeSyncPrimitiveBlock_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_FREESYNCPRIMITIVEBLOCK, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimSet(IMG_UINT32 ui32DispatchTableEntry,
 			IMG_UINT8 * psSyncPrimSetIN_UI8,
 			IMG_UINT8 * psSyncPrimSetOUT_UI8, CONNECTION_DATA * psConnection)
@@ -269,12 +269,12 @@ PVRSRVBridgeSyncPrimSet(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMSET, eError);
 }
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDump(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psSyncPrimPDumpIN_UI8,
 			  IMG_UINT8 * psSyncPrimPDumpOUT_UI8, CONNECTION_DATA * psConnection)
@@ -321,7 +321,7 @@ PVRSRVBridgeSyncPrimPDump(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMP, eError);
 }
 
 #else
@@ -330,7 +330,7 @@ PVRSRVBridgeSyncPrimPDump(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDumpValue(IMG_UINT32 ui32DispatchTableEntry,
 			       IMG_UINT8 * psSyncPrimPDumpValueIN_UI8,
 			       IMG_UINT8 * psSyncPrimPDumpValueOUT_UI8,
@@ -381,7 +381,7 @@ PVRSRVBridgeSyncPrimPDumpValue(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPVALUE, eError);
 }
 
 #else
@@ -390,7 +390,7 @@ PVRSRVBridgeSyncPrimPDumpValue(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psSyncPrimPDumpPolIN_UI8,
 			     IMG_UINT8 * psSyncPrimPDumpPolOUT_UI8, CONNECTION_DATA * psConnection)
@@ -442,7 +442,7 @@ PVRSRVBridgeSyncPrimPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPPOL, eError);
 }
 
 #else
@@ -451,7 +451,7 @@ PVRSRVBridgeSyncPrimPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncPrimPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 			     IMG_UINT8 * psSyncPrimPDumpCBPIN_UI8,
 			     IMG_UINT8 * psSyncPrimPDumpCBPOUT_UI8, CONNECTION_DATA * psConnection)
@@ -502,7 +502,7 @@ PVRSRVBridgeSyncPrimPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 	/* Release now we have cleaned up look up handles. */
 	UnlockHandle(psConnection->psHandleBase);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCPRIMPDUMPCBP, eError);
 }
 
 #else
@@ -512,7 +512,7 @@ PVRSRVBridgeSyncPrimPDumpCBP(IMG_UINT32 ui32DispatchTableEntry,
 static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX,
 	      "PVRSRV_SYNC_NAME_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncAllocEvent(IMG_UINT32 ui32DispatchTableEntry,
 			   IMG_UINT8 * psSyncAllocEventIN_UI8,
 			   IMG_UINT8 * psSyncAllocEventOUT_UI8, CONNECTION_DATA * psConnection)
@@ -613,10 +613,10 @@ PVRSRVBridgeSyncAllocEvent(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCALLOCEVENT, eError);
 }
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncFreeEvent(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psSyncFreeEventIN_UI8,
 			  IMG_UINT8 * psSyncFreeEventOUT_UI8, CONNECTION_DATA * psConnection)
@@ -630,12 +630,12 @@ PVRSRVBridgeSyncFreeEvent(IMG_UINT32 ui32DispatchTableEntry,
 	    PVRSRVSyncFreeEventKM(psConnection, OSGetDevNode(psConnection),
 				  psSyncFreeEventIN->ui32FWAddr);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCFREEEVENT, eError);
 }
 
 #if defined(PDUMP)
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncCheckpointSignalledPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 					    IMG_UINT8 * psSyncCheckpointSignalledPDumpPolIN_UI8,
 					    IMG_UINT8 * psSyncCheckpointSignalledPDumpPolOUT_UI8,
@@ -653,7 +653,7 @@ PVRSRVBridgeSyncCheckpointSignalledPDumpPol(IMG_UINT32 ui32DispatchTableEntry,
 	psSyncCheckpointSignalledPDumpPolOUT->eError =
 	    PVRSRVSyncCheckpointSignalledPDumpPolKM(psSyncCheckpointSignalledPDumpPolIN->hFence);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCCHECKPOINTSIGNALLEDPDUMPPOL, eError);
 }
 
 #else
diff --git a/drivers/gpu/img-rogue/23.2/generated/volcanic/synctracking_bridge/server_synctracking_bridge.c b/drivers/gpu/img-rogue/23.2/generated/volcanic/synctracking_bridge/server_synctracking_bridge.c
index 06757e5..1c2136a 100644
--- a/drivers/gpu/img-rogue/23.2/generated/volcanic/synctracking_bridge/server_synctracking_bridge.c
+++ b/drivers/gpu/img-rogue/23.2/generated/volcanic/synctracking_bridge/server_synctracking_bridge.c
@@ -66,7 +66,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Server-side bridge entry points
  */
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncRecordRemoveByHandle(IMG_UINT32 ui32DispatchTableEntry,
 				     IMG_UINT8 * psSyncRecordRemoveByHandleIN_UI8,
 				     IMG_UINT8 * psSyncRecordRemoveByHandleOUT_UI8,
@@ -102,7 +102,7 @@ PVRSRVBridgeSyncRecordRemoveByHandle(IMG_UINT32 ui32DispatchTableEntry,
 
 SyncRecordRemoveByHandle_exit:
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCRECORDREMOVEBYHANDLE, eError);
 }
 
 static PVRSRV_ERROR _SyncRecordAddpshRecordIntRelease(void *pvData)
@@ -115,7 +115,7 @@ static PVRSRV_ERROR _SyncRecordAddpshRecordIntRelease(void *pvData)
 static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX,
 	      "PVRSRV_SYNC_NAME_LENGTH must not be larger than IMG_UINT32_MAX");
 
-static IMG_INT
+static size_t
 PVRSRVBridgeSyncRecordAdd(IMG_UINT32 ui32DispatchTableEntry,
 			  IMG_UINT8 * psSyncRecordAddIN_UI8,
 			  IMG_UINT8 * psSyncRecordAddOUT_UI8, CONNECTION_DATA * psConnection)
@@ -284,7 +284,7 @@ PVRSRVBridgeSyncRecordAdd(IMG_UINT32 ui32DispatchTableEntry,
 	if (!bHaveEnoughSpace && pArrayArgsBuffer)
 		OSFreeMemNoStats(pArrayArgsBuffer);
 
-	return 0;
+	return offsetof(PVRSRV_BRIDGE_OUT_SYNCRECORDADD, eError);
 }
 
 /* ***************************************************************************
diff --git a/drivers/gpu/img-rogue/23.2/hwdefs/rogue/km/rgxdefs_km.h b/drivers/gpu/img-rogue/23.2/hwdefs/rogue/km/rgxdefs_km.h
index 31a550a..81eacfe 100644
--- a/drivers/gpu/img-rogue/23.2/hwdefs/rogue/km/rgxdefs_km.h
+++ b/drivers/gpu/img-rogue/23.2/hwdefs/rogue/km/rgxdefs_km.h
@@ -222,6 +222,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
 
+#define RGX_MLIST_ENTRY_STRIDE	(4U) /* 4 bytes */
+#define RGX_NUM_PM_ADDR_SPACES	(2U) /* VCE & TE share virtual space and Alist */
+#define RGX_PM_MAX_PB_VIRT_ADDR_SPACE  (IMG_UINT64_C(0x400000000)) /* PM Maximum addressable limit */
+
 #define RGX_BIF_PM_PHYSICAL_PAGE_ALIGNSHIFT		(12U)
 #define RGX_BIF_PM_PHYSICAL_PAGE_SIZE			(1UL << RGX_BIF_PM_PHYSICAL_PAGE_ALIGNSHIFT)
 
diff --git a/drivers/gpu/img-rogue/23.2/hwdefs/volcanic/km/rgxdefs_km.h b/drivers/gpu/img-rogue/23.2/hwdefs/volcanic/km/rgxdefs_km.h
index 717fcb8..00968c5 100644
--- a/drivers/gpu/img-rogue/23.2/hwdefs/volcanic/km/rgxdefs_km.h
+++ b/drivers/gpu/img-rogue/23.2/hwdefs/volcanic/km/rgxdefs_km.h
@@ -281,6 +281,20 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                                            RGX_CR_SOFT_RESET_BIF_JONES_EN | \
                                            RGX_CR_SOFT_RESET_SLC_EN))
 
+#define RGX_MLIST_ENTRY_STRIDE	(4U) /* 4 bytes */
+#define RGX_NUM_PM_ADDR_SPACES	(2U) /* VCE & TE share virtual space and Alist */
+#define RGX_PM_MAX_PB_VIRT_ADDR_SPACE  (IMG_UINT64_C(0x400000000)) /* PM Maximum addressable limit */
+
+
+#define RGX_PM_MAX_RSTATE_SIZE_DWORDS (46U)
+#define RGX_PM_MLIST_BASE_ADDR_MAX_ALIGNSIZE (32U)
+#define RGX_PM_VHEAP_BASE_ADDR_MAX_ALIGNSIZE (32U)
+#define _RGX_PM_RENDERSTATE_BUFFER_SET_MLIST_BASE_ADDR(_ft_,_x_) { ((_ft_)[2] = ((_x_) & (IMG_UINT64_C(0x00000000fffffff0)))); \
+                                                          ((_ft_)[3] = (((_x_) & (IMG_UINT64_C(0xffffffff00000000)))  >>  32)); }
+#define _RGX_PM_RENDERSTATE_BUFFER_SET_VHEAP_BASE_ADDR(_ft_,_x_) { ((_ft_)[6] = ((_x_) & (IMG_UINT64_C(0x00000000fffffff0)))); \
+                                                          ((_ft_)[7] = (((_x_) & (IMG_UINT64_C(0xffffffff00000000)))  >>  32)); }
+
+#define RGX_PM_RENDERSTATE_BASE_ADDR_ALIGNSIZE (32U)
 
 #define RGX_BIF_PM_PHYSICAL_PAGE_ALIGNSHIFT		(12U)
 #define RGX_BIF_PM_PHYSICAL_PAGE_SIZE			(1U << RGX_BIF_PM_PHYSICAL_PAGE_ALIGNSHIFT)
diff --git a/drivers/gpu/img-rogue/23.2/include/img_defs.h b/drivers/gpu/img-rogue/23.2/include/img_defs.h
index 0a755ae..217711f 100644
--- a/drivers/gpu/img-rogue/23.2/include/img_defs.h
+++ b/drivers/gpu/img-rogue/23.2/include/img_defs.h
@@ -494,6 +494,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define IMG_OFFSET_ADDR(addr, offset_in_bytes) \
 	(void*)&(((IMG_UINT8*)(void*)(addr))[offset_in_bytes])
 
+/* Get a new pointer (user space) with an offset (in bytes) from a base address,
+ * useful when traversing byte buffers and accessing data in buffers through
+ * struct pointers.
+ * Note, this macro is not equivalent to or replacing offsetof() */
+#define IMG_OFFSET_ADDR_USER(addr, offset_in_bytes) \
+	(void __user*)&(((IMG_UINT8 __user*)(void __user*)(addr))[offset_in_bytes])
+
 /* Get a new pointer with an offset (in bytes) from a base address, version
  * for volatile memory.
  */
diff --git a/drivers/gpu/img-rogue/23.2/include/pvrsrv_memallocflags.h b/drivers/gpu/img-rogue/23.2/include/pvrsrv_memallocflags.h
index 1e96035..9de6ed6 100644
--- a/drivers/gpu/img-rogue/23.2/include/pvrsrv_memallocflags.h
+++ b/drivers/gpu/img-rogue/23.2/include/pvrsrv_memallocflags.h
@@ -1013,6 +1013,8 @@ typedef IMG_UINT64 PVRSRV_MEMALLOCFLAGS_T;
 #if defined(DEBUG)
 #define PVRSRV_MEMALLOCFLAGS_DEVMEMX_PHYSICAL_MASK (PVRSRV_MEMALLOCFLAGS_CPU_MMUFLAGSMASK | \
                                                     PVRSRV_MEMALLOCFLAG_GPU_CACHE_MODE_MASK | \
+                                                    PVRSRV_MEMALLOCFLAG_GPU_WRITEABLE | \
+                                                    PVRSRV_MEMALLOCFLAG_GPU_READABLE | \
                                                     PVRSRV_MEMALLOCFLAG_CPU_READ_PERMITTED | \
                                                     PVRSRV_MEMALLOCFLAG_CPU_WRITE_PERMITTED | \
                                                     PVRSRV_MEMALLOCFLAG_CPU_CACHE_CLEAN | \
@@ -1026,6 +1028,8 @@ typedef IMG_UINT64 PVRSRV_MEMALLOCFLAGS_T;
 #else
 #define PVRSRV_MEMALLOCFLAGS_DEVMEMX_PHYSICAL_MASK (PVRSRV_MEMALLOCFLAGS_CPU_MMUFLAGSMASK | \
                                                     PVRSRV_MEMALLOCFLAG_GPU_CACHE_MODE_MASK | \
+                                                    PVRSRV_MEMALLOCFLAG_GPU_WRITEABLE | \
+                                                    PVRSRV_MEMALLOCFLAG_GPU_READABLE | \
                                                     PVRSRV_MEMALLOCFLAG_CPU_READ_PERMITTED | \
                                                     PVRSRV_MEMALLOCFLAG_CPU_WRITE_PERMITTED | \
                                                     PVRSRV_MEMALLOCFLAG_CPU_CACHE_CLEAN | \
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/devicemem_server.c b/drivers/gpu/img-rogue/23.2/services/server/common/devicemem_server.c
index b9035b1..3aec956 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/devicemem_server.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/devicemem_server.c
@@ -594,7 +594,7 @@ DevmemIntCtxCreate(CONNECTION_DATA *psConnection,
 
 	if (psDeviceNode->pfnRegisterMemoryContext)
 	{
-		eError = psDeviceNode->pfnRegisterMemoryContext(psDeviceNode, psDevmemCtx->psMMUContext, &hPrivDataInt);
+		eError = psDeviceNode->pfnRegisterMemoryContext(psDeviceNode, psDevmemCtx->psMMUContext, psDevmemCtx, &hPrivDataInt);
 		PVR_LOG_GOTO_IF_ERROR(eError, "pfnRegisterMemoryContext", fail_register);
 	}
 
@@ -630,6 +630,16 @@ DevmemIntCtxCreate(CONNECTION_DATA *psConnection,
 	return eError;
 }
 
+PVRSRV_ERROR DevmemIntCtxRef(DEVMEMINT_CTX *psDevmemCtx)
+{
+	return DevmemIntCtxAcquire(psDevmemCtx) ? PVRSRV_OK : PVRSRV_ERROR_REFCOUNT_OVERFLOW;
+}
+
+void DevmemIntCtxUnref(DEVMEMINT_CTX *psDevmemCtx)
+{
+	DevmemIntCtxRelease(psDevmemCtx);
+}
+
 /*************************************************************************/ /*!
 @Function       DevmemIntHeapCreate
 @Description    Creates and initialises a device memory heap.
@@ -1203,7 +1213,6 @@ DevmemIntMapPMR2(DEVMEMINT_HEAP *psDevmemHeap,
 
 	PMR_LogicalSize(psPMR, &ui64PMRLogicalSize);
 
-	PVR_LOG_RETURN_IF_INVALID_PARAM(psReservation->psMappedPMR == NULL, "psReservation");
 	PVR_LOG_RETURN_IF_INVALID_PARAM(ui64PMRLogicalSize == psReservation->uiLength, "psPMR logical size");
 
 	if (uiLog2HeapContiguity > PMR_GetLog2Contiguity(psPMR))
@@ -1222,13 +1231,14 @@ DevmemIntMapPMR2(DEVMEMINT_HEAP *psDevmemHeap,
 
 	OSLockAcquire(psReservation->hLock);
 
+	PVR_LOG_GOTO_IF_INVALID_PARAM(psReservation->psMappedPMR == NULL, eError, ErrorReleaseResLock);
+
 	if (!DevmemIntReservationAcquireUnlocked(psReservation))
 	{
 		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_REFCOUNT_OVERFLOW, ErrorReleaseResLock);
 	}
 
 	uiAllocationSize = psReservation->uiLength;
-
 	ui32NumDevPages = 0xffffffffU & ( ( (uiAllocationSize - 1) >> uiLog2HeapContiguity) + 1);
 	PVR_ASSERT((IMG_DEVMEM_SIZE_T) ui32NumDevPages << uiLog2HeapContiguity == uiAllocationSize);
 
@@ -1454,12 +1464,13 @@ DevmemIntUnmapPMR2(DEVMEMINT_RESERVATION2 *psReservation)
 	IMG_BOOL bIsSparse = IMG_FALSE;
 	IMG_UINT32 i;
 
-	PVR_RETURN_IF_INVALID_PARAM(psReservation->psMappedPMR != NULL);
-
 	ui32NumDevPages = _DevmemReservationPageCount(psReservation);
 	sAllocationDevVAddr = psReservation->sBase;
 
 	OSLockAcquire(psReservation->hLock);
+
+	PVR_GOTO_IF_INVALID_PARAM(psReservation->psMappedPMR != NULL, eError, ErrUnlockRes);
+
 	PMRLockPMR(psReservation->psMappedPMR);
 
 	bIsSparse = PMR_IsSparse(psReservation->psMappedPMR);
@@ -1514,6 +1525,7 @@ DevmemIntUnmapPMR2(DEVMEMINT_RESERVATION2 *psReservation)
 
 ErrUnlock:
 	PMRUnlockPMR(psReservation->psMappedPMR);
+ErrUnlockRes:
 	OSLockRelease(psReservation->hLock);
 
 	return eError;
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/physmem.c b/drivers/gpu/img-rogue/23.2/services/server/common/physmem.c
index e729683..2bc4b8b 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/physmem.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/physmem.c
@@ -535,6 +535,23 @@ static PVRSRV_ERROR _DevPhysHeapFromFlags(PVRSRV_MEMALLOCFLAGS_T uiFlags,
 	return PVRSRV_OK;
 }
 
+static INLINE void _PromoteToCpuCached(PVRSRV_MEMALLOCFLAGS_T *puiFlags)
+{
+	if ((*puiFlags & (PVRSRV_MEMALLOCFLAG_CPU_READABLE |
+	                  PVRSRV_MEMALLOCFLAG_CPU_WRITEABLE |
+	                  PVRSRV_MEMALLOCFLAG_KERNEL_CPU_MAPPABLE)) == 0)
+	{
+		/* We don't need to upgrade if we don't map into the CPU */
+		return;
+	}
+
+	/* Clear the existing CPU cache flags */
+	*puiFlags &= ~(PVRSRV_MEMALLOCFLAG_CPU_CACHE_MODE_MASK);
+
+	/* Add CPU cached flags */
+	*puiFlags |= PVRSRV_MEMALLOCFLAG_CPU_CACHE_INCOHERENT;
+}
+
 PVRSRV_ERROR
 PhysmemNewRamBackedPMR_direct(CONNECTION_DATA *psConnection,
                        PVRSRV_DEVICE_NODE *psDevNode,
@@ -566,6 +583,12 @@ PhysmemNewRamBackedPMR_direct(CONNECTION_DATA *psConnection,
 	 */
 	PVR_UNREFERENCED_PARAMETER(uiAnnotationLength);
 
+	if (PVRSRVSystemSnoopingOfCPUCache(psDevNode->psDevConfig) &&
+		psDevNode->pfnGetDeviceSnoopMode(psDevNode) == PVRSRV_DEVICE_SNOOP_CPU_ONLY)
+	{
+		_PromoteToCpuCached(&uiPMRFlags);
+	}
+
 	eError = PhysMemValidateParams(ui32NumPhysChunks,
 	                               ui32NumVirtChunks,
 								   pui32MappingTable,
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/pmr.c b/drivers/gpu/img-rogue/23.2/services/server/common/pmr.c
index 3126fd1..d5f616f 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/pmr.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/pmr.c
@@ -100,7 +100,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #if defined(SUPPORT_PMR_DEFERRED_FREE)
 #define PMR_FLAG_INTERNAL_DEFER_FREE       (1 << 2)
 #define PMR_FLAG_INTERNAL_IS_ZOMBIE        (1 << 3)
+#endif /* defined(SUPPORT_PMR_DEFERRED_FREE) */
+#define PMR_FLAG_INTERNAL_IS_EXCLUSIVE     (1 << 4)
 
+
+#if defined(SUPPORT_PMR_DEFERRED_FREE)
 /* Indicates PMR should be destroyed immediately and not deferred. */
 #define PMR_NO_ZOMBIE_FENCE IMG_UINT64_MAX
 #endif /* defined(SUPPORT_PMR_DEFERRED_FREE) */
@@ -671,6 +675,22 @@ static INLINE IMG_BOOL _IntFlagIsSet(const PMR *psPMR, const IMG_UINT32 uiValue)
 	return bIsSet;
 }
 
+static INLINE IMG_BOOL _IntFlagSetIfNotSet(PMR *psPMR, const IMG_UINT32 uiValue)
+{
+	OS_SPINLOCK_FLAGS uiLockingFlags;
+	IMG_BOOL bIsSet;
+
+	OSSpinLockAcquire(psPMR->hBitmapLock, uiLockingFlags);
+	bIsSet = BITMASK_HAS(psPMR->uiInternalFlags, uiValue);
+	if (!bIsSet)
+	{
+		BITMASK_SET(psPMR->uiInternalFlags, uiValue);
+	}
+	OSSpinLockRelease(psPMR->hBitmapLock, uiLockingFlags);
+
+	return !bIsSet;
+}
+
 static INLINE void
 _FactoryLock(const PMR_IMPL_FUNCTAB *psFuncTable)
 {
@@ -1690,6 +1710,13 @@ PMRLocalImportPMR(PMR *psPMR,
 	return PVRSRV_OK;
 }
 
+#if defined(PVRSRV_ENABLE_GPU_MEMORY_INFO)
+IMG_UINT64 PMRGetSerialNum(PMR *psPMR)
+{
+	return psPMR != NULL ? psPMR->uiSerialNum : (IMG_UINT64) -1ULL;
+}
+#endif
+
 PVRSRV_ERROR
 PMRGetUID(PMR *psPMR,
           IMG_UINT64 *pui64UID)
@@ -2428,6 +2455,11 @@ PMRMMapPMR(PMR *psPMR, PMR_MMAP_DATA pOSMMapData, PVRSRV_MEMALLOCFLAGS_T uiFlags
 	                    !PVRSRV_CHECK_CPU_WRITEABLE(uiFlags),
 	                    PVRSRV_ERROR_PMR_NOT_PERMITTED);
 
+	/* if readable mapping is requested on non-readable PMR then fail */
+	PVR_RETURN_IF_FALSE(PVRSRV_CHECK_CPU_READABLE(psPMR->uiFlags) ||
+	                    !PVRSRV_CHECK_CPU_READABLE(uiFlags),
+	                    PVRSRV_ERROR_PMR_NOT_PERMITTED);
+
 	if (psPMR->psFuncTab->pfnMMap)
 	{
 		return psPMR->psFuncTab->pfnMMap(psPMR->pvFlavourData, psPMR, pOSMMapData);
@@ -2598,6 +2630,27 @@ PMR_IsZombie(const PMR *psPMR)
 }
 #endif /* defined(SUPPORT_PMR_DEFERRED_FREE) */
 
+/* Exclusive flag tracks if the PMR is supporting or is used by another bridge resource */
+
+/* Function to set the exclusive use flag.
+   Returns IMG_FALSE if flag couldn't be set because it is already set.
+   IMG_TRUE otherwise. */
+IMG_BOOL
+PMR_SetExclusiveUse(PMR *psPMR, IMG_BOOL bFlag)
+{
+	PVR_ASSERT(psPMR != NULL);
+
+	if (bFlag)
+	{
+		return _IntFlagSetIfNotSet(psPMR, PMR_FLAG_INTERNAL_IS_EXCLUSIVE);
+	}
+	else
+	{
+		_IntFlagClr(psPMR, PMR_FLAG_INTERNAL_IS_EXCLUSIVE);
+		return IMG_TRUE;
+	}
+}
+
 /* Function that alters the mutability property
  * of the PMR
  * Setting it to TRUE makes sure the PMR memory layout
@@ -2772,6 +2825,19 @@ PMR_GetRefCount(const PMR *psPMR)
 	return OSAtomicRead(&psPMR->iRefCount);
 }
 
+PVRSRV_ERROR
+PMR_IsExportable(const PMR *psPMR)
+{
+	PVR_ASSERT(psPMR != NULL);
+
+	if (!PMR_DeviceNode(psPMR)->pfnValidateExportableFlags(psPMR->uiFlags))
+	{
+		return PVRSRV_ERROR_INVALID_FLAGS;
+	}
+
+	return PVRSRV_OK;
+}
+
 #if defined(PVRSRV_INTERNAL_IPA_FEATURE_TESTING)
 PVRSRV_ERROR
 PMRGetIPAPolicy(PMR *psPMR,
@@ -4319,7 +4385,6 @@ PMRWritePMPageList(/* Target PMR, offset, and length */
 	IMG_DEVMEM_SIZE_T uiWordSize;
 	IMG_UINT32 uiNumPages;
 	IMG_UINT32 uiPageIndex;
-	PMR_FLAGS_T uiFlags = psPageListPMR->uiFlags;
 	PMR_PAGELIST *psPageList;
 #if defined(PDUMP)
 	IMG_CHAR aszTableEntryMemspaceName[PHYSMEM_PDUMP_MEMSPACE_MAX_LENGTH];
@@ -4368,37 +4433,6 @@ PMRWritePMPageList(/* Target PMR, offset, and length */
 	/* Check we're not being asked to write off the end of the PMR */
 	PVR_GOTO_IF_INVALID_PARAM(uiTableOffset + uiTableLength <= psPageListPMR->uiLogicalSize, eError, return_error);
 
-	/* the PMR into which we are writing must not be user CPU mappable: */
-	if (PVRSRV_CHECK_CPU_READABLE(uiFlags) || PVRSRV_CHECK_CPU_WRITEABLE(uiFlags))
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		         "Masked flags = 0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC,
-		         (PMR_FLAGS_T)(uiFlags & (PVRSRV_MEMALLOCFLAG_CPU_READABLE | PVRSRV_MEMALLOCFLAG_CPU_WRITEABLE))));
-		PVR_DPF((PVR_DBG_ERROR,
-		         "Page list PMR allows CPU mapping (0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC ")",
-		         uiFlags));
-		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_DEVICEMEM_INVALID_PMR_FLAGS, return_error);
-	}
-
-	/* the PMR into which we are writing must not be user CPU cacheable: */
-	if (PVRSRV_CHECK_CPU_CACHE_INCOHERENT(uiFlags) ||
-		PVRSRV_CHECK_CPU_CACHE_COHERENT(uiFlags) ||
-		PVRSRV_CHECK_CPU_CACHED(uiFlags))
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		         "Masked flags = 0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC,
-		         (PMR_FLAGS_T)(uiFlags &  PVRSRV_MEMALLOCFLAG_CPU_CACHE_MODE_MASK)));
-		PVR_DPF((PVR_DBG_ERROR,
-		         "Page list PMR allows CPU caching (0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC ")",
-		         uiFlags));
-		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_DEVICEMEM_INVALID_PMR_FLAGS, return_error);
-	}
-
-	if (_PMRIsSparse(psPageListPMR))
-	{
-		PVR_LOG_GOTO_WITH_ERROR("psPageListPMR", eError, PVRSRV_ERROR_INVALID_PARAMS, return_error);
-	}
-
 	if (_PMRIsSparse(psReferencePMR))
 	{
 		PVR_LOG_GOTO_WITH_ERROR("psReferencePMR", eError, PVRSRV_ERROR_INVALID_PARAMS, return_error);
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/pvrsrv.c b/drivers/gpu/img-rogue/23.2/services/server/common/pvrsrv.c
index 86be6ff..f9ac513 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/pvrsrv.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/pvrsrv.c
@@ -2390,6 +2390,9 @@ PVRSRV_ERROR PVRSRVCommonDeviceCreate(void *pvOSDevice,
 	OSLockCreateNoStats(&psDeviceNode->hValidationLock);
 #endif
 
+#if defined(PVRSRV_MAX_REAL_TIME_CONTEXTS) && (PVRSRV_MAX_REAL_TIME_CONTEXTS > 1)
+	psDeviceNode->pui32RTContextCount = OSAllocZMem(sizeof(IMG_UINT32) * REQ_TYPE_TOTAL_COUNT);
+#endif
 	PVRSRVDeviceSetState(psDeviceNode, PVRSRV_DEVICE_STATE_CREATED);
 
 	return PVRSRV_OK;
@@ -2890,6 +2893,10 @@ void PVRSRVCommonDeviceDestroy(PVRSRV_DEVICE_NODE *psDeviceNode)
 	}
 	SysDevDeInit(psDeviceNode->psDevConfig);
 
+#if defined(PVRSRV_MAX_REAL_TIME_CONTEXTS) && (PVRSRV_MAX_REAL_TIME_CONTEXTS > 1)
+	OSFreeMem(psDeviceNode->pui32RTContextCount);
+#endif
+
 	PVRSRVCleanupThreadWaitForDevice(psDeviceNode);
 
 	OSWRLockAcquireWrite(psPVRSRVData->hDeviceNodeListLock);
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/ri_server.c b/drivers/gpu/img-rogue/23.2/services/server/common/ri_server.c
index 82a26cb..7c64880 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/ri_server.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/ri_server.c
@@ -126,7 +126,7 @@ typedef IMG_UINT64 _RI_BASE_T;
                                         "[Physical: 0x%010" IMG_UINT64_FMTSPECx ", %" IMG_UINT64_FMTSPEC "K]\n"
 #define RI_PMR_SUM_BUF_SIZE (sizeof(RI_PMR_SUM_FRMT)+(20+40))
 
-#define RI_PMR_ENTRY_FRMT      "%%sPID:%%-5d DEV:%%s <%%p>\t%%-%ds\t%%-%ds\t0x%%010" IMG_UINT64_FMTSPECx "\t[0x%%010" IMG_UINT64_FMTSPECx "]\t%%c"
+#define RI_PMR_ENTRY_FRMT      "%%sPID:%%-5d DEV:%%s <%%016" IMG_UINT64_FMTSPECx ">\t%%-%ds\t%%-%ds\t0x%%010" IMG_UINT64_FMTSPECx "\t[0x%%010" IMG_UINT64_FMTSPECx "]\t%%c"
 #define RI_PMR_ENTRY_BUF_SIZE  (sizeof(RI_PMR_ENTRY_FRMT)+(3+5+RI_DEV_ID_BUF_SIZE+16+(PVR_ANNOTATION_MAX_LEN/2)+PHYS_HEAP_NAME_SIZE+10+10))
 #define RI_PMR_ENTRY_FRMT_SIZE (sizeof(RI_PMR_ENTRY_FRMT))
 
@@ -1574,7 +1574,7 @@ static void _GeneratePMREntryString(RI_LIST_ENTRY *psRIEntry,
 	           (bDebugFs ? "" : "   "),
 	           psRIEntry->pid,
 	           (bHostDevice ? "-  " : szDeviceID),
-	           (void*)psRIEntry->psPMR,
+	           PMRGetSerialNum(psRIEntry->psPMR),
 	           pszAnnotationText,
 	           pszHeapText,
 	           uiLogicalSize,
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/srvcore.c b/drivers/gpu/img-rogue/23.2/services/server/common/srvcore.c
index 1571cfc..3566530 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/srvcore.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/srvcore.c
@@ -959,7 +959,7 @@ PVRSRVHWOpTimeoutKM(CONNECTION_DATA *psConnection,
 }
 
 
-IMG_INT
+size_t
 DummyBW(IMG_UINT32 ui32DispatchTableEntry,
 		IMG_UINT8 *psBridgeIn,
 		IMG_UINT8 *psBridgeOut,
@@ -1332,6 +1332,7 @@ PVRSRV_ERROR BridgedDispatchKM(CONNECTION_DATA * psConnection,
 	BridgeWrapperFunction pfBridgeHandler;
 	IMG_UINT32   ui32DispatchTableEntry, ui32GroupBoundary;
 	PVRSRV_ERROR err = PVRSRV_OK;
+	size_t       uiOutErrorOffset;
 #if !defined(INTEGRITY_OS)
 	PVRSRV_POOL_TOKEN hBridgeBufferPoolToken = NULL;
 #endif
@@ -1481,35 +1482,49 @@ PVRSRV_ERROR BridgedDispatchKM(CONNECTION_DATA * psConnection,
 		PVR_GOTO_WITH_ERROR(err, PVRSRV_ERROR_BRIDGE_EFAULT, unlock_and_return_error);
 	}
 
-	/* pfBridgeHandler functions do not fail and return an IMG_INT.
-	 * The value returned is either 0 or PVRSRV_OK (0).
-	 * In the event this changes an error may be +ve or -ve,
-	 * so try to return something consistent here.
+	/* pfBridgeHandler return an size_t containing the offset to the error code
+	 * in the output buffer.
 	 */
-	if (0 != pfBridgeHandler(ui32DispatchTableEntryIndex,
-						  psBridgeIn,
-						  psBridgeOut,
-						  psConnection)
-		)
-	{
-		PVR_LOG_GOTO_WITH_ERROR("pfBridgeHandler", err, PVRSRV_ERROR_BRIDGE_EPERM, unlock_and_return_error);
-	}
+	uiOutErrorOffset = pfBridgeHandler(ui32DispatchTableEntryIndex,
+							psBridgeIn,
+							psBridgeOut,
+							psConnection);
+
+#if !defined(INTEGRITY_OS)
+	/* The returned offset is expected to be within the range */
+	PVR_ASSERT(uiOutErrorOffset + sizeof(PVRSRV_ERROR) <= psBridgePackageKM->ui32OutBufferSize);
 
 	/*
 	   This should always be true as a.t.m. all bridge calls have to
 	   return an error message, but this could change so we do this
 	   check to be safe.
 	*/
-#if !defined(INTEGRITY_OS)
 	if (psBridgePackageKM->ui32OutBufferSize > 0)
 	{
-		if (CopyToUserWrapper (psConnection,
-						ui32DispatchTableEntryIndex,
-						psBridgePackageKM->pvParamOut,
-						psBridgeOut,
-						psBridgePackageKM->ui32OutBufferSize) != PVRSRV_OK)
+		PVRSRV_ERROR * peHandlerError = (PVRSRV_ERROR *) IMG_OFFSET_ADDR(psBridgeOut, uiOutErrorOffset);
+		if (*peHandlerError != PVRSRV_OK)
 		{
-			PVR_GOTO_WITH_ERROR(err, PVRSRV_ERROR_BRIDGE_EFAULT, unlock_and_return_error);
+			/* Only copy error code to user when pfBridgeHandler fails */
+			if (CopyToUserWrapper (psConnection,
+							ui32DispatchTableEntryIndex,
+							IMG_OFFSET_ADDR_USER(psBridgePackageKM->pvParamOut, uiOutErrorOffset),
+							peHandlerError,
+							sizeof(PVRSRV_ERROR)) != PVRSRV_OK)
+			{
+				PVR_GOTO_WITH_ERROR(err, PVRSRV_ERROR_BRIDGE_EFAULT, unlock_and_return_error);
+			}
+		}
+		else
+		{
+			/* Copy whole output to user when pfBridgeHandler succeeds */
+			if (CopyToUserWrapper (psConnection,
+							ui32DispatchTableEntryIndex,
+							psBridgePackageKM->pvParamOut,
+							psBridgeOut,
+							psBridgePackageKM->ui32OutBufferSize) != PVRSRV_OK)
+			{
+				PVR_GOTO_WITH_ERROR(err, PVRSRV_ERROR_BRIDGE_EFAULT, unlock_and_return_error);
+			}
 		}
 	}
 #endif
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/sync_checkpoint.c b/drivers/gpu/img-rogue/23.2/services/server/common/sync_checkpoint.c
index 7a22411..2cc6ce7 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/sync_checkpoint.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/sync_checkpoint.c
@@ -677,6 +677,7 @@ SyncCheckpointResolveFence(PSYNC_CHECKPOINT_CONTEXT psSyncCheckpointContext,
 			}
 
 			SyncCheckpointFreeCheckpointListMem(*papsSyncCheckpoints);
+			*papsSyncCheckpoints = NULL;
 		}
 
 		return PVRSRV_ERROR_INVALID_PARAMS;
diff --git a/drivers/gpu/img-rogue/23.2/services/server/common/tlserver.c b/drivers/gpu/img-rogue/23.2/services/server/common/tlserver.c
index 1a16ed5..85b9e5f 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/common/tlserver.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/common/tlserver.c
@@ -337,8 +337,6 @@ TLServerCloseStreamKM(PTL_STREAM_DESC psSD)
 		psStream->pfOnReaderCloseCallback(psStream->pvOnReaderCloseUserData);
 	}
 
-	OSLockRelease (psGD->hTLGDLock);
-
 	/* Destroy the stream if its TL_SNODE was removed from TL_GLOBAL_DATA */
 	if (bDestroyStream)
 	{
@@ -355,6 +353,8 @@ TLServerCloseStreamKM(PTL_STREAM_DESC psSD)
 		OSFreeMem(psSD);
 	}
 
+	OSLockRelease (psGD->hTLGDLock);
+
 	PVR_DPF_RETURN_RC(eError);
 }
 
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxfwcmnctx.c b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxfwcmnctx.c
index dc39be0..12424d0 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxfwcmnctx.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxfwcmnctx.c
@@ -96,11 +96,15 @@ static PVRSRV_ERROR _CheckPriority(PVRSRV_RGXDEV_INFO *psDevInfo,
 								   IMG_INT32 i32Priority,
 								   RGX_CCB_REQUESTOR_TYPE eRequestor)
 {
+	PVRSRV_ERROR eError = PVRSRV_OK;
+
 	/* Only contexts from a single PID allowed with real time priority (highest priority) */
 	if (i32Priority == RGX_CTX_PRIORITY_REALTIME)
 	{
 		DLLIST_NODE *psNode, *psNext;
 
+		OSWRLockAcquireRead(psDevInfo->hCommonCtxtListLock);
+
 		dllist_foreach_node(&psDevInfo->sCommonCtxtListHead, psNode, psNext)
 		{
 			RGX_SERVER_COMMON_CONTEXT *psThisContext =
@@ -108,15 +112,28 @@ static PVRSRV_ERROR _CheckPriority(PVRSRV_RGXDEV_INFO *psDevInfo,
 
 			if (psThisContext->i32Priority == RGX_CTX_PRIORITY_REALTIME &&
 				psThisContext->eRequestor == eRequestor &&
+#if defined(PVRSRV_MAX_REAL_TIME_CONTEXTS) && (PVRSRV_MAX_REAL_TIME_CONTEXTS > 1)
+				(psDevInfo->psDeviceNode->pui32RTContextCount == NULL ||
+				 psDevInfo->psDeviceNode->pui32RTContextCount[eRequestor] >= PVRSRV_MAX_REAL_TIME_CONTEXTS) &&
+#endif
 				RGXGetPIDFromServerMMUContext(psThisContext->psServerMMUContext) != OSGetCurrentClientProcessIDKM())
 			{
+#if defined(PVRSRV_MAX_REAL_TIME_CONTEXTS) && (PVRSRV_MAX_REAL_TIME_CONTEXTS > 1)
+				PVR_LOG(("Only %d process can have contexts with real time priority", PVRSRV_MAX_REAL_TIME_CONTEXTS));
+#else
 				PVR_LOG(("Only one process can have contexts with real time priority"));
-				return PVRSRV_ERROR_INVALID_PARAMS;
+#endif
+				eError = PVRSRV_ERROR_INVALID_PARAMS;
+				break;
 			}
 		}
+#if defined(PVRSRV_MAX_REAL_TIME_CONTEXTS) && (PVRSRV_MAX_REAL_TIME_CONTEXTS > 1)
+		psDevInfo->psDeviceNode->pui32RTContextCount[eRequestor]++;
+#endif
+		OSWRLockReleaseRead(psDevInfo->hCommonCtxtListLock);
 	}
 
-	return PVRSRV_OK;
+	return eError;
 }
 
 PVRSRV_ERROR FWCommonContextAllocate(CONNECTION_DATA *psConnection,
@@ -155,7 +172,19 @@ PVRSRV_ERROR FWCommonContextAllocate(CONNECTION_DATA *psConnection,
 	}
 
 	psServerCommonContext->psDevInfo = psDevInfo;
-	psServerCommonContext->psServerMMUContext = psServerMMUContext;
+
+	if (psServerMMUContext != NULL)
+	{
+		eError = RGXServerMMUContextRef(psServerMMUContext);
+		PVR_LOG_GOTO_IF_ERROR(eError, "RGXServerMMUContextRef", fail_contextalloc);
+
+		psServerCommonContext->psServerMMUContext = psServerMMUContext;
+	}
+	else
+	{
+		psServerCommonContext->psServerMMUContext = NULL;
+	}
+
 
 	if (psAllocatedMemDesc)
 	{
@@ -403,6 +432,12 @@ void FWCommonContextFree(RGX_SERVER_COMMON_CONTEXT *psServerCommonContext)
 	OSWRLockAcquireWrite(psServerCommonContext->psDevInfo->hCommonCtxtListLock);
 	/* Remove the context from the list of all contexts. */
 	dllist_remove_node(&psServerCommonContext->sListNode);
+#if defined(PVRSRV_MAX_REAL_TIME_CONTEXTS) && (PVRSRV_MAX_REAL_TIME_CONTEXTS > 1)
+	if (psServerCommonContext->i32Priority == RGX_CTX_PRIORITY_REALTIME)
+	{
+		psServerCommonContext->psDevInfo->psDeviceNode->pui32RTContextCount[psServerCommonContext->eRequestor]--;
+	}
+#endif
 	OSWRLockReleaseWrite(psServerCommonContext->psDevInfo->hCommonCtxtListLock);
 
 	/*
@@ -438,6 +473,12 @@ void FWCommonContextFree(RGX_SERVER_COMMON_CONTEXT *psServerCommonContext)
 						psServerCommonContext->psFWCommonContextMemDesc);
 		psServerCommonContext->psFWCommonContextMemDesc = NULL;
 	}
+
+	if (psServerCommonContext->psServerMMUContext != NULL)
+	{
+		RGXServerMMUContextUnref(psServerCommonContext->psServerMMUContext);
+	}
+
 	/* Free the hosts representation of the common context */
 	OSFreeMem(psServerCommonContext);
 }
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.c b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.c
index d9aa6ad..1478847 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.c
@@ -47,6 +47,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "devicemem.h"
 #include "devicemem_server_utils.h"
 #include "devicemem_pdump.h"
+#include "pvrsrv_memallocflags.h"
 #include "rgxdevice.h"
 #include "rgx_fwif_km.h"
 #include "rgxfwutils.h"
@@ -75,6 +76,7 @@ struct SERVER_MMU_CONTEXT_TAG
 	IMG_UINT64 ui64FBSCEntryMask;
 	DLLIST_NODE sNode;
 	PVRSRV_RGXDEV_INFO *psDevInfo;
+	DEVMEMINT_CTX *psDevMemCtx;
 }; /* SERVER_MMU_CONTEXT is typedef-ed in rgxmem.h */
 
 PVRSRV_ERROR RGXInvalidateFBSCTable(PVRSRV_DEVICE_NODE *psDeviceNode,
@@ -530,12 +532,23 @@ void RGXUnregisterMemoryContext(IMG_HANDLE hPrivData)
 	OSFreeMem(psServerMMUContext);
 }
 
+IMG_BOOL RGXValidateExportableFlags(PVRSRV_MEMALLOCFLAGS_T uiFlags)
+{
+	if (uiFlags & PVRSRV_MEMALLOCFLAG_DEVICE_FLAG(PMMETA_PROTECT))
+	{
+		return IMG_FALSE;
+	}
+
+	return IMG_TRUE;
+}
+
 /*
  * RGXRegisterMemoryContext
  */
-PVRSRV_ERROR RGXRegisterMemoryContext(PVRSRV_DEVICE_NODE	*psDeviceNode,
-									  MMU_CONTEXT			*psMMUContext,
-									  IMG_HANDLE			*hPrivData)
+PVRSRV_ERROR RGXRegisterMemoryContext(PVRSRV_DEVICE_NODE *psDeviceNode,
+									  MMU_CONTEXT *psMMUContext,
+									  DEVMEMINT_CTX *psDevMemCtx,
+									  IMG_HANDLE *hPrivData)
 {
 	PVRSRV_ERROR			eError;
 	PVRSRV_RGXDEV_INFO		*psDevInfo = psDeviceNode->pvDevice;
@@ -543,6 +556,8 @@ PVRSRV_ERROR RGXRegisterMemoryContext(PVRSRV_DEVICE_NODE	*psDeviceNode,
 	DEVMEM_MEMDESC			*psFWMemContextMemDesc;
 	SERVER_MMU_CONTEXT *psServerMMUContext;
 
+	PVR_ASSERT(psDevMemCtx != NULL);
+
 	if (psDevInfo->psKernelMMUCtx == NULL)
 	{
 		/*
@@ -563,6 +578,7 @@ PVRSRV_ERROR RGXRegisterMemoryContext(PVRSRV_DEVICE_NODE	*psDeviceNode,
 		psServerMMUContext->psDevInfo = psDevInfo;
 		psServerMMUContext->ui64FBSCEntryMask = 0;
 		psServerMMUContext->sFWMemContextDevVirtAddr.ui32Addr = 0;
+		psServerMMUContext->psDevMemCtx = psDevMemCtx;
 
 		/*
 			Allocate device memory for the firmware memory context for the new
@@ -732,6 +748,18 @@ PVRSRV_ERROR RGXRegisterMemoryContext(PVRSRV_DEVICE_NODE	*psDeviceNode,
 	return eError;
 }
 
+PVRSRV_ERROR RGXServerMMUContextRef(SERVER_MMU_CONTEXT *psServerMMUContext)
+{
+	PVR_ASSERT(psServerMMUContext != NULL);
+	return DevmemIntCtxRef(psServerMMUContext->psDevMemCtx);
+}
+
+void RGXServerMMUContextUnref(SERVER_MMU_CONTEXT *psServerMMUContext)
+{
+	PVR_ASSERT(psServerMMUContext != NULL);
+	DevmemIntCtxUnref(psServerMMUContext->psDevMemCtx);
+}
+
 DEVMEM_MEMDESC *RGXGetFWMemDescFromMemoryContextHandle(IMG_HANDLE hPriv)
 {
 	SERVER_MMU_CONTEXT *psMMUContext = (SERVER_MMU_CONTEXT *) hPriv;
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.h b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.h
index 2e959fc..595e181 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxmem.h
@@ -47,6 +47,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "pvrsrv_error.h"
 #include "device.h"
 #include "mmu_common.h"
+#include "devicemem_server.h"
 #include "rgxdevice.h"
 
 #define RGXMEM_SERVER_MMU_CONTEXT_MAX_NAME 16
@@ -66,6 +67,43 @@ typedef struct _RGXMEM_PROCESS_INFO_
 
 typedef struct SERVER_MMU_CONTEXT_TAG SERVER_MMU_CONTEXT;
 
+/*************************************************************************/ /*!
+@Function       RGXServerMMUContextRef
+
+@Description    Increments the reference count on the SERVER_MMU_CONTEXT by one.
+
+                Use this function to prevent the SERVER_MMU_CONTEXT being freed
+                until RGXServerMMUContextUnref is called.
+
+                You should call this function if:
+                 1. You are making use of the SERVER_MMU_CONTEXT and this function
+                    hasn't been called previously in the callstack.
+                 2. You are setting pointer to a SERVER_MMU_CONTEXT into another
+                    object.
+
+                RGXServerMMUContextUnref must be called once the object is no
+                longer going to be read or written to in the current callstack.
+
+@Input          psServerMMUContext  The SERVER_MMU_CONTEXT to be reference counted.
+
+@Return         PVRSRV_ERROR
+*/ /**************************************************************************/
+PVRSRV_ERROR RGXServerMMUContextRef(SERVER_MMU_CONTEXT *psServerMMUContext);
+
+/*************************************************************************/ /*!
+@Function       RGXServerMMUContextUnref
+
+@Description    Decreases the reference count on the SERVER_MMU_CONTEXT by one.
+
+                This should be always called after RGXServerMMUContextRef, once
+                the SERVER_MMU_CONTEXT is no longer being read from or written to.
+
+@Input          psServerMMUContext  The SERVER_MMU_CONTEXT to be reference counted.
+
+@Return         PVRSRV_ERROR
+*/ /**************************************************************************/
+void RGXServerMMUContextUnref(SERVER_MMU_CONTEXT *psServerMMUContext);
+
 IMG_DEV_PHYADDR GetPC(MMU_CONTEXT * psContext);
 
 void RGXSetFWMemContextDevVirtAddr(SERVER_MMU_CONTEXT *psServerMMUContext,
@@ -135,12 +173,25 @@ void RGXMMUTweakProtFlags(struct _PVRSRV_DEVICE_NODE_ *psDevNode,
 #endif
 
 void RGXUnregisterMemoryContext(IMG_HANDLE hPrivData);
-PVRSRV_ERROR RGXRegisterMemoryContext(PVRSRV_DEVICE_NODE	*psDevNode,
-									  MMU_CONTEXT			*psMMUContext,
-									  IMG_HANDLE			*hPrivData);
+PVRSRV_ERROR RGXRegisterMemoryContext(PVRSRV_DEVICE_NODE *psDevNode,
+									  MMU_CONTEXT *psMMUContext,
+									  DEVMEMINT_CTX *psDevMemCtx,
+									  IMG_HANDLE *hPrivData);
 
 DEVMEM_MEMDESC *RGXGetFWMemDescFromMemoryContextHandle(IMG_HANDLE hPriv);
 
+/*************************************************************************/ /*!
+@Function       RGXValidateExportableFlags
+
+@Description    Checks if a memory resource with the given flags can be exported
+                out of the driver and/or process.
+
+@Input          uiFlags      Memory allocation flags.
+
+@Return         IMG_TRUE if export is allowed, IMG_FALSE otherwise.
+*/ /**************************************************************************/
+IMG_BOOL RGXValidateExportableFlags(PVRSRV_MEMALLOCFLAGS_T uiFlags);
+
 void RGXCheckFaultAddress(PVRSRV_RGXDEV_INFO *psDevInfo,
 				IMG_DEV_VIRTADDR *psDevVAddr,
 				IMG_DEV_PHYADDR *psDevPAddr,
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.c b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.c
index 75222ae..f0b85cb 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.c
@@ -52,6 +52,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "sync_internal.h"
 #include "rgxfwutils.h"
 #include "rgxlayer.h"
+#include "rgxmmudefs_km.h"
+#include "rgxta3d.h"
 
 PVRSRV_ERROR RGXQueryAPMState(const PVRSRV_DEVICE_NODE *psDeviceNode,
 	const void *pvPrivateData,
@@ -301,6 +303,272 @@ IMG_BOOL RGXIsErrorAndDeviceRecoverable(PVRSRV_DEVICE_NODE *psDeviceNode, PVRSRV
 	return bRecoverable;
 }
 
+/*
+ *  Function that returns the MList Size required for a given max PB size.
+ *
+ *  The maximum MList size required always depends on the maximum PB Size
+ *  chosen and must also take into account the additional pages that will
+ *  be provided by a local PB.
+ */
+IMG_UINT32 RGXCalcMListSize(PVRSRV_DEVICE_NODE *psDeviceNode,
+                            IMG_UINT64 ui64MaxLocalPBSize,
+                            IMG_UINT64 ui64MaxGlobalPBSize)
+{
+	IMG_UINT32  ui32PTEPages = 0, ui32PDEPages = 0, ui32PCEPages = 0, ui32MListSize = 0;
+	IMG_UINT32  ui32NumOfPipes = 1;
+	IMG_UINT64  ui64TotalPages = 0;
+	PVRSRV_RGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice;
+	PVR_UNREFERENCED_PARAMETER(psDevInfo);
+	/*
+	 *  Assert if Size of PB exceeds maximum theoretical limit
+	 *  RGX_PM_MAX_PB_VIRT_ADDR_SPACE represents the 16G address space#
+	 */
+	PVR_ASSERT(ui64MaxLocalPBSize+ui64MaxGlobalPBSize <= RGX_PM_MAX_PB_VIRT_ADDR_SPACE);
+
+	/* Calculate the total number of pages which is the number of Page table entries */
+	ui64TotalPages = ((ui64MaxLocalPBSize+ui64MaxGlobalPBSize)/RGX_BIF_PM_PHYSICAL_PAGE_SIZE);
+
+	/* Calculate the total number of pages required for the PTE's (minimum of 1) */
+	ui32PTEPages = (IMG_UINT32)(ui64TotalPages/RGX_MMUCTRL_ENTRIES_PT_VALUE);
+	if (ui32PTEPages == 0U)
+	{
+		ui32PTEPages = 1;
+	}
+
+	/* Calculate the total number of pages required to hold the PDE's (minimum of 1) */
+	ui32PDEPages = ui32PTEPages/RGX_MMUCTRL_ENTRIES_PD_VALUE;
+	if (ui32PDEPages == 0U)
+	{
+		ui32PDEPages = 1;
+	}
+
+	/* Calculate the total number of pages required to hold the PCE's (minimum of 1) */
+	ui32PCEPages = ui32PDEPages/RGX_MMUCTRL_ENTRIES_PC_VALUE;
+	if (ui32PCEPages == 0U)
+	{
+		ui32PCEPages = 1;
+	}
+
+	/* Calculate the maximum number of TA/VCE pipes */
+#if defined(RGX_FEATURE_SCALABLE_TE_ARCH_IDX)
+	{
+		IMG_UINT32 ui32Val = RGX_GET_FEATURE_VALUE(psDevInfo, RGX_FEATURE_SCALABLE_TE_ARCH);
+		if (ui32Val > ui32NumOfPipes)
+		{
+			ui32NumOfPipes = ui32Val;
+		}
+	}
+#endif
+
+#if defined(RGX_FEATURE_SCALABLE_TE_ARCH_IDX)
+	{
+		IMG_UINT32 ui32Val = RGX_GET_FEATURE_VALUE(psDevInfo, RGX_FEATURE_SCALABLE_VCE);
+		if (ui32Val > ui32NumOfPipes)
+		{
+			ui32NumOfPipes = ui32Val;
+		}
+	}
+#endif
+
+	/*
+	 *  Calculate the MList size considering the total number of pages in PB are shared
+	 *  among all the PM address spaces...
+	 */
+	ui32MListSize = (ui32PCEPages + ui32PDEPages + ui32PTEPages) *
+					RGX_NUM_PM_ADDR_SPACES * ui32NumOfPipes * RGX_MLIST_ENTRY_STRIDE;
+
+	/* Round it off to the nearest page granularity */
+	ui32MListSize = PVR_ALIGN(ui32MListSize, RGX_BIF_PM_PHYSICAL_PAGE_SIZE);
+
+	return ui32MListSize;
+}
+
+/*
+ * Critical PMRs are PMRs that are created by client that might contain physical page addresses.
+ * We need to validate if they were allocated with proper flags. 
+ */
+static PVRSRV_ERROR
+_ValidateCriticalPMR(PMR* psPMR, IMG_DEVMEM_SIZE_T ui64MinSize)
+{
+	PVRSRV_ERROR eError;
+	PVRSRV_DEVICE_NODE *psDevNode = PMR_DeviceNode(psPMR);
+
+	IMG_BOOL bCPUCacheSnoop =
+		(PVRSRVSystemSnoopingOfCPUCache(psDevNode->psDevConfig) &&
+		 psDevNode->pfnGetDeviceSnoopMode(psDevNode) == PVRSRV_DEVICE_SNOOP_CPU_ONLY);
+
+	PMR_FLAGS_T uiFlags = PMR_Flags(psPMR);
+
+	if (PMR_IsSparse(psPMR))
+	{
+		PVR_DPF((PVR_DBG_ERROR,
+		         "%s: Critical PMR cannot be sparse!",
+		         __func__));
+		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_INVALID_PARAMS, return_error);
+	}
+
+	/* Critical PMR cannot be user CPU mappable */
+	if (PVRSRV_CHECK_CPU_READABLE(uiFlags) ||
+	    PVRSRV_CHECK_CPU_WRITEABLE(uiFlags))
+	{
+		PVR_DPF((PVR_DBG_ERROR,
+		         "%s: Critical PMR allows CPU mapping (0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC ")",
+		         __func__, uiFlags));
+		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_DEVICEMEM_INVALID_PMR_FLAGS, return_error);
+	}
+
+	/* Critical PMR must not be user CPU cacheable (unless snooping is on) */
+	if (!bCPUCacheSnoop &&
+	    (PVRSRV_CHECK_CPU_CACHE_INCOHERENT(uiFlags) ||
+	     PVRSRV_CHECK_CPU_CACHE_COHERENT(uiFlags) ||
+	     PVRSRV_CHECK_CPU_CACHED(uiFlags)))
+	{
+		PVR_DPF((PVR_DBG_ERROR,
+		         "%s: Critical PMR allows CPU caching (0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC ")",
+		         __func__, uiFlags));
+		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_DEVICEMEM_INVALID_PMR_FLAGS, return_error);
+	}
+
+	/* Critical PMRs must be allocated with PMMETA_PROTECT */
+	if ((uiFlags & PVRSRV_MEMALLOCFLAG_DEVICE_FLAG(PMMETA_PROTECT)) == 0)
+	{
+		PVR_DPF((PVR_DBG_ERROR,
+		        "%s: Critical PMR must have PMMETA_PROTECT set",
+		        __func__));
+		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_DEVICEMEM_INVALID_PMR_FLAGS, return_error);
+	}
+
+#if defined(SUPPORT_LINUX_OSPAGE_MIGRATION)
+	if (PVRSRV_CHECK_OS_LINUX_MOVABLE(uiFlags))
+	{
+		PVR_DPF((PVR_DBG_ERROR,
+		        "%s: Critical PMR must not have OS_LINUX_MOVABLE set",
+		        __func__));
+		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_DEVICEMEM_INVALID_PMR_FLAGS, return_error);
+	}
+#endif
+
+	{
+		IMG_DEVMEM_SIZE_T uiPMRSize;
+		PMR_LogicalSize(psPMR, &uiPMRSize);
+		if (uiPMRSize < ui64MinSize)
+		{
+			PVR_DPF((PVR_DBG_ERROR,
+					"%s: Critical PMR doesn't have sufficient size",
+					__func__));
+			PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_INVALID_PARAMS, return_error);
+		}
+	}
+	return PVRSRV_OK;
+return_error:
+	return eError;
+}
+
+/* Check if all global freelists have the same size and if all local freelists have the same size.*/
+PVRSRV_ERROR ValidateFreeListSizes(RGX_FREELIST* apsFreeLists[RGXMKIF_NUM_RTDATA_FREELISTS],
+                                   IMG_UINT32*   pui32LocalFLMaxPages,
+                                   IMG_UINT32*   pui32GlobalFLMaxPages)
+{
+	IMG_UINT32 i,j;
+	PVRSRV_ERROR eError = PVRSRV_OK;
+	IMG_UINT32 ui32GlobalFLMaxPages = apsFreeLists[RGXFW_GLOBAL_FREELIST]->ui32MaxFLPages;
+	IMG_UINT32 ui32LocalFLMaxPages = apsFreeLists[RGXFW_LOCAL_FREELIST]->ui32MaxFLPages;
+	IMG_UINT32 ui32NumFLPerGD = RGXMKIF_NUM_RTDATA_FREELISTS/RGXMKIF_NUM_GEOMDATAS;
+
+	for (i=0; i<RGXMKIF_NUM_GEOMDATAS; i++)
+	{
+		/* Check if all local freelists have the same size */
+		if (apsFreeLists[ui32NumFLPerGD * i + RGXFW_LOCAL_FREELIST]->ui32MaxFLPages != ui32LocalFLMaxPages)
+		{
+			eError = PVRSRV_ERROR_INVALID_PARAMS;
+		}
+
+		/* Check if all global freelists have the same size */
+		for (j=RGXFW_GLOBAL_FREELIST; j<ui32NumFLPerGD; j++)
+		{
+			if (apsFreeLists[ui32NumFLPerGD * i + j]->ui32MaxFLPages != ui32GlobalFLMaxPages)
+			{
+				eError = PVRSRV_ERROR_INVALID_PARAMS;
+			}
+		}
+	}
+
+	*pui32LocalFLMaxPages = ui32LocalFLMaxPages;
+	*pui32GlobalFLMaxPages = ui32GlobalFLMaxPages;
+
+	return eError;
+}
+
+PVRSRV_ERROR
+AcquireValidateRefCriticalBuffer(PVRSRV_DEVICE_NODE*     psDevNode,
+                                 DEVMEMINT_RESERVATION2* psReservation,
+                                 IMG_DEVMEM_SIZE_T       ui64MinSize,
+                                 PMR**                   ppsPMR,
+                                 IMG_DEV_VIRTADDR*       psDevVAddr)
+{
+	PVRSRV_ERROR eError;
+
+	/* Obtain reference to reservation object */
+	if (!DevmemIntReservationAcquire(psReservation))
+	{
+		eError = PVRSRV_ERROR_REFCOUNT_OVERFLOW;
+		PVR_LOG_GOTO_IF_ERROR_VA(eError, ReturnError,
+		    "%s: Failed to acquire reservation for critical buffer", __func__);
+	}
+
+	eError = DevmemIntGetReservationData(psReservation, ppsPMR, psDevVAddr);
+	PVR_LOG_GOTO_IF_ERROR_VA(eError, RollbackReservation,
+	    "%s: Error from DevmemIntGetReservationData for critical buffer: %s",
+	    __func__, PVRSRVGetErrorString(eError));
+
+
+	/* Check buffer sizes and flags are as required */
+	eError = _ValidateCriticalPMR(*ppsPMR, ui64MinSize);
+	PVR_LOG_GOTO_IF_ERROR_VA(eError, RollbackReservation,
+	    "%s: Validation of critical PMR failed: %s",
+	    __func__, PVRSRVGetErrorString(eError));
+
+	/* Check exclusive flag and set if possible */
+	if (!PMR_SetExclusiveUse(*ppsPMR, IMG_TRUE))
+	{
+		PVR_DPF((PVR_DBG_ERROR,
+		     "%s: Critical PMR already in use (exclusive flag)!",
+		     __func__));
+		PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_INVALID_PARAMS, RollbackReservation);
+	}
+
+	/* If no error on validation ref the PMR */
+	(void) PMRRefPMR(*ppsPMR);
+
+	return PVRSRV_OK;
+
+RollbackReservation:
+	DevmemIntReservationRelease(psReservation);
+ReturnError:
+	return eError;
+}
+
+void UnrefAndReleaseCriticalBuffer(DEVMEMINT_RESERVATION2* psReservation)
+{
+	PVRSRV_ERROR eError;
+	PMR* psPMR;
+	IMG_DEV_VIRTADDR sDummy;
+	/* Skip error check. If this function is called it means we already
+	   Acquired a reservation and confirmed that mapping exists. */
+	eError = DevmemIntGetReservationData(psReservation, &psPMR, &sDummy);
+	PVR_LOG_IF_ERROR_VA(PVR_DBG_ERROR, eError,
+	    "Error when trying to obtain reservation data in %s", __func__);
+
+	/* Ignore return value. Clearing the flag cannot fail. */
+	PMR_SetExclusiveUse(psPMR, IMG_FALSE);
+
+	eError = PMRUnrefPMR(psPMR);
+	PVR_LOG_IF_ERROR_VA(PVR_DBG_ERROR, eError, 
+	    "Error on PMR unref in %s", __func__);
+
+	DevmemIntReservationRelease(psReservation);
+}
+
 /******************************************************************************
  End of file (rgxutils.c)
 ******************************************************************************/
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.h b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.h
index 67d4bb8..6454970 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rgxutils.h
@@ -46,6 +46,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "rgxdebug_common.h"
 #include "pvr_notifier.h"
 #include "pvrsrv.h"
+#include "pvrsrv_error.h"
+#include "rgxta3d.h"
 
 /*!
 ******************************************************************************
@@ -206,6 +208,68 @@ PHYS_HEAP_POLICY RGXPhysHeapGetLMAPolicy(PHYS_HEAP_USAGE_FLAGS ui32UsageFlags);
 */ /**************************************************************************/
 IMG_BOOL RGXIsErrorAndDeviceRecoverable(PVRSRV_DEVICE_NODE *psDeviceNode, PVRSRV_ERROR *peError);
 
+/*************************************************************************/ /*!
+@Function       RGXCalcMListSize
+@Description    Function that calculates the MList Size required for
+                given local and global PB sizes.
+@Input          psDeviceNode The device node.
+@Input          ui64MaxLocalPBSize Maximum local PB size in bytes
+@Input          ui64MaxGlobalPBSize Maximum global PB size in bytes
+
+@Return         IMG_UINT32 Returns size of the mlist in bytes aligned to
+                RGX_BIF_PM_PHYSICAL_PAGE_SIZE.
+*/ /**************************************************************************/
+IMG_UINT32 RGXCalcMListSize(PVRSRV_DEVICE_NODE *psDeviceNode,
+                            IMG_UINT64 ui64MaxLocalPBSize,
+                            IMG_UINT64 ui64MaxGlobalPBSize);
+
+/*************************************************************************/ /*!
+@Function       ValidateFreeListSizes
+@Description    Helper function for RGXCreateHWRTDataSet
+                For the freelist array passed to RGXCreateHWRTDataSet, validate
+                if all global freelists have the same size and if all local
+                freelists have the same size. Return the sizes in output params.
+
+@Output         pui32LocalFLMaxPages Max number of pages for local freelist
+@Output         pui32GlobalFLMaxPages Max number of pages for global freelist
+
+@Return         PVRSRV_ERROR PVRSRV_OK if validation successful.
+                Appropriate error otherwise.
+*/ /**************************************************************************/
+PVRSRV_ERROR ValidateFreeListSizes(RGX_FREELIST* apsFreeLists[RGXMKIF_NUM_RTDATA_FREELISTS],
+                                   IMG_UINT32*   pui32LocalFLMaxPages,
+                                   IMG_UINT32*   pui32GlobalFLMaxPages);
+
+/*************************************************************************/ /*!
+@Function       AcquireValidateRefCriticalBuffer
+@Description    Helper function for RGXCreateHWRTDataSet
+                Acquire the reservation validate if the underlying PMR is
+                appropriate for use as critical buffer and ref it.
+@Input          psDevNode The device node.
+@Input          psReservation The reservation describing the critical buffer
+@Input          ui64MinSize Minimum size that buffer needs to have
+@Output         ppsPMR Pointer to be written with the PMR on success.
+@Output         psDevVAddr The device vaddress to be written on success.
+
+@Return         PVRSRV_ERROR PVRSRV_OK if validation successful.
+                Appropriate error otherwise.
+*/ /**************************************************************************/
+PVRSRV_ERROR AcquireValidateRefCriticalBuffer(PVRSRV_DEVICE_NODE*     psDevNode,
+                                              DEVMEMINT_RESERVATION2* psReservation,
+                                              IMG_DEVMEM_SIZE_T       ui64MinSize,
+                                              PMR**                   ppsPMR,
+                                              IMG_DEV_VIRTADDR*       psDevVAddr);
+
+
+/*************************************************************************/ /*!
+@Function       UnrefAndReleaseCriticalBuffer
+@Description    Helper function for RGXCreateHWRTDataSet
+                Unref the critical buffer and release the reservation object.
+@Input          psReservation The reservation describing the critical buffer
+
+*/ /**************************************************************************/
+void UnrefAndReleaseCriticalBuffer(DEVMEMINT_RESERVATION2* psReservation);
+
 /******************************************************************************
  End of file (rgxutils.h)
 ******************************************************************************/
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxhwperf.c b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxhwperf.c
index 1bb4e42..1515c72 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxhwperf.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxhwperf.c
@@ -1015,7 +1015,7 @@ PVRSRV_ERROR PVRSRVRGXGetEnabledHWPerfBlocks(PVRSRV_DEVICE_NODE *psDevNode,
 				continue;
 			}
 
-			if (ui32LastIdx > ui32ArrayLen)
+			if (ui32LastIdx + 1 > ui32ArrayLen)
 			{
 				PVR_DPF((PVR_DBG_ERROR, "ui32ArrayLen less than the number of enabled blocks."));
 				PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_OUT_OF_MEMORY, Error);
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxinit.c b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxinit.c
index b10712b..fec3f2a 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxinit.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxinit.c
@@ -1310,6 +1310,26 @@ static MMU_DEVICEATTRIBS *RGXDevMMUAttributes(PVRSRV_DEVICE_NODE *psDeviceNode,
 }
 
 /*
+	RGXDevSnoopMode
+*/
+static PVRSRV_DEVICE_SNOOP_MODE RGXDevSnoopMode(PVRSRV_DEVICE_NODE *psDeviceNode)
+{
+	PVRSRV_RGXDEV_INFO *psDevInfo;
+
+	PVR_ASSERT(psDeviceNode != NULL);
+	PVR_ASSERT(psDeviceNode->pvDevice != NULL);
+
+	psDevInfo = (PVRSRV_RGXDEV_INFO *) psDeviceNode->pvDevice;
+
+	if (RGX_IS_FEATURE_SUPPORTED(psDevInfo, AXI_ACELITE))
+	{
+		return PVRSRV_DEVICE_SNOOP_CPU_ONLY;
+	}
+
+	return PVRSRV_DEVICE_SNOOP_NONE;
+}
+
+/*
  * RGXInitDevPart2
  */
 PVRSRV_ERROR RGXInitDevPart2(PVRSRV_DEVICE_NODE	*psDeviceNode,
@@ -1775,6 +1795,7 @@ PVRSRV_ERROR RGXInitCreateFWKernelMemoryContext(PVRSRV_DEVICE_NODE *psDeviceNode
 	/* Register callbacks for creation of device memory contexts */
 	psDeviceNode->pfnRegisterMemoryContext = RGXRegisterMemoryContext;
 	psDeviceNode->pfnUnregisterMemoryContext = RGXUnregisterMemoryContext;
+	psDeviceNode->pfnValidateExportableFlags = RGXValidateExportableFlags;
 
 	RGXFwSharedMemCheckSnoopMode(psDevInfo->psDeviceNode->psDevConfig);
 
@@ -4600,6 +4621,7 @@ PVRSRV_ERROR RGXRegisterDevice(PVRSRV_DEVICE_NODE *psDeviceNode)
 
 	/* Callback for getting the MMU device attributes */
 	psDeviceNode->pfnGetMMUDeviceAttributes = RGXDevMMUAttributes;
+	psDeviceNode->pfnGetDeviceSnoopMode = RGXDevSnoopMode;
 	psDeviceNode->pfnMMUCacheInvalidate = RGXMMUCacheInvalidate;
 	psDeviceNode->pfnMMUCacheInvalidateKick = RGXMMUCacheInvalidateKick;
 	psDeviceNode->pfnMMUTopLevelPxWorkarounds = NULL;
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.c b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.c
index 615ab5f..828a26e 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.c
@@ -90,10 +90,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #if defined(SUPPORT_WORKLOAD_ESTIMATION)
 #include "rgxworkest.h"
-
 #define HASH_CLEAN_LIMIT 6
 #endif
 
+#include "rgxmmudefs_km.h"
+
 /* Enable this to dump the compiled list of UFOs prior to kick call */
 #define ENABLE_TA3D_UFO_DUMP	0
 
@@ -1513,21 +1514,108 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA      *psConnection,
 		IMG_UINT16			ui16MaxRTs,
 		RGX_KM_HW_RT_DATASET *pasKMHWRTDataSet[RGXMKIF_NUM_RTDATAS])
 {
+	PVR_UNREFERENCED_PARAMETER(psConnection);
+	PVR_UNREFERENCED_PARAMETER(psDeviceNode);
+	PVR_UNREFERENCED_PARAMETER(asVHeapTableDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(asPMMListDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(apsFreeLists);
+	PVR_UNREFERENCED_PARAMETER(ui32ScreenPixelMax);
+	PVR_UNREFERENCED_PARAMETER(ui64MultiSampleCtl);
+	PVR_UNREFERENCED_PARAMETER(ui64FlippedMultiSampleCtl);
+	PVR_UNREFERENCED_PARAMETER(ui32TPCStride);
+	PVR_UNREFERENCED_PARAMETER(asTailPtrsDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(ui32TPCSize);
+	PVR_UNREFERENCED_PARAMETER(ui32TEScreen);
+	PVR_UNREFERENCED_PARAMETER(ui32TEAA);
+	PVR_UNREFERENCED_PARAMETER(ui32TEMTILE1);
+	PVR_UNREFERENCED_PARAMETER(ui32TEMTILE2);
+	PVR_UNREFERENCED_PARAMETER(ui32MTileStride);
+	PVR_UNREFERENCED_PARAMETER(ui32ISPMergeLowerX);
+	PVR_UNREFERENCED_PARAMETER(ui32ISPMergeLowerY);
+	PVR_UNREFERENCED_PARAMETER(ui32ISPMergeUpperX);
+	PVR_UNREFERENCED_PARAMETER(ui32ISPMergeUpperY);
+	PVR_UNREFERENCED_PARAMETER(ui32ISPMergeScaleX);
+	PVR_UNREFERENCED_PARAMETER(ui32ISPMergeScaleY);
+	PVR_UNREFERENCED_PARAMETER(asMacrotileArrayDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(asRgnHeaderDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(asRTCDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(uiRgnHeaderSize);
+	PVR_UNREFERENCED_PARAMETER(ui32ISPMtileSize);
+	PVR_UNREFERENCED_PARAMETER(ui16MaxRTs);
+	PVR_UNREFERENCED_PARAMETER(pasKMHWRTDataSet);
+
+	return PVRSRV_ERROR_NOT_IMPLEMENTED;
+}
+
+/* Create set of HWRTData(s) and bind it with a shared FW HWRTDataCommon */
+PVRSRV_ERROR RGXCreateHWRTDataSet2(
+        CONNECTION_DATA         *psConnection,
+        PVRSRV_DEVICE_NODE      *psDeviceNode,
+        IMG_DEV_VIRTADDR        asVHeapTableDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+        DEVMEMINT_RESERVATION2  *psPMMListsReservation,
+        RGX_FREELIST            *apsFreeLists[RGXMKIF_NUM_RTDATA_FREELISTS],
+        IMG_UINT32              ui32ScreenPixelMax,
+        IMG_UINT64              ui64MultiSampleCtl,
+        IMG_UINT64              ui64FlippedMultiSampleCtl,
+        IMG_UINT32              ui32TPCStride,
+        IMG_DEV_VIRTADDR        asTailPtrsDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+        IMG_UINT32              ui32TPCSize,
+        IMG_UINT32              ui32TEScreen,
+        IMG_UINT32              ui32TEAA,
+        IMG_UINT32              ui32TEMTILE1,
+        IMG_UINT32              ui32TEMTILE2,
+        IMG_UINT32              ui32MTileStride,
+        IMG_UINT32              ui32ISPMergeLowerX,
+        IMG_UINT32              ui32ISPMergeLowerY,
+        IMG_UINT32              ui32ISPMergeUpperX,
+        IMG_UINT32              ui32ISPMergeUpperY,
+        IMG_UINT32              ui32ISPMergeScaleX,
+        IMG_UINT32              ui32ISPMergeScaleY,
+        IMG_DEV_VIRTADDR        asMacrotileArrayDevVAddr[RGXMKIF_NUM_RTDATAS],
+        IMG_DEV_VIRTADDR        asRgnHeaderDevVAddr[RGXMKIF_NUM_RTDATAS],
+        IMG_DEV_VIRTADDR        asRTCDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+        IMG_UINT32              uiRgnHeaderSize,
+        IMG_UINT32              ui32ISPMtileSize,
+        IMG_UINT16              ui16MaxRTs,
+        RGX_KM_HW_RT_DATASET    *pasKMHWRTDataSet[RGXMKIF_NUM_RTDATAS])
+{
 	PVRSRV_ERROR eError;
 	IMG_UINT32 ui32RTDataID;
-	PVRSRV_RGXDEV_INFO		*psDevInfo = psDeviceNode->pvDevice;
+	IMG_UINT32 ui32GlobalFLMaxPages, ui32LocalFLMaxPages;
+	IMG_DEVMEM_SIZE_T ui64MListSize;
+	PVRSRV_RGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice;
 
-	RGX_HWRTDATA_COMMON_COOKIE	*psHWRTDataCommonCookie;
-	RGXFWIF_HWRTDATA_COMMON		*psHWRTDataCommon;
-	DEVMEM_MEMDESC				*psHWRTDataCommonFwMemDesc;
-	RGXFWIF_DEV_VIRTADDR		sHWRTDataCommonFwAddr;
+	RGX_HWRTDATA_COMMON_COOKIE *psHWRTDataCommonCookie;
+	RGXFWIF_HWRTDATA_COMMON *psHWRTDataCommon;
+	DEVMEM_MEMDESC *psHWRTDataCommonFwMemDesc;
+	RGXFWIF_DEV_VIRTADDR sHWRTDataCommonFwAddr;
+
+	PMR* psMListsPMR = NULL;
+	IMG_DEV_VIRTADDR sMListsDevVAddr;
+
+	/* Check if freelists have correct sizes */
+	eError = ValidateFreeListSizes(apsFreeLists,
+	                               &ui32LocalFLMaxPages,
+	                               &ui32GlobalFLMaxPages);
+	PVR_LOG_RETURN_IF_ERROR(eError, "Invalid freelist sizes");
+
+	ui64MListSize = RGXCalcMListSize(psDeviceNode,
+	    ui32LocalFLMaxPages * RGX_BIF_PM_PHYSICAL_PAGE_SIZE,
+	    ui32GlobalFLMaxPages * RGX_BIF_PM_PHYSICAL_PAGE_SIZE);
+
+	eError = AcquireValidateRefCriticalBuffer(psDeviceNode,
+	                                          psPMMListsReservation,
+	                                          ui64MListSize * RGXMKIF_NUM_RTDATAS,
+	                                          &psMListsPMR,
+	                                          &sMListsDevVAddr);
+	PVR_LOG_RETURN_IF_ERROR(eError, "Failed to obtain or validate MLIST buffer");
 
 	/* Prepare KM cleanup object for HWRTDataCommon FW object */
 	psHWRTDataCommonCookie = OSAllocZMem(sizeof(*psHWRTDataCommonCookie));
 	if (psHWRTDataCommonCookie == NULL)
 	{
-		eError = PVRSRV_ERROR_OUT_OF_MEMORY;
-		goto err_HWRTDataCommonCookieAlloc;
+	    eError = PVRSRV_ERROR_OUT_OF_MEMORY;
+	    goto err_HWRTDataCommonCookieAlloc;
 	}
 
 	/*
@@ -1537,15 +1625,15 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA      *psConnection,
 	 * suffice on the CPU side (WC buffer will be flushed at the first TA-kick)
 	 */
 	eError = DevmemFwAllocate(psDevInfo,
-			sizeof(RGXFWIF_HWRTDATA_COMMON),
-			RGX_FWCOMCTX_ALLOCFLAGS,
-			"FwHWRTDataCommon",
-			&psHWRTDataCommonFwMemDesc);
+	                          sizeof(RGXFWIF_HWRTDATA_COMMON),
+	                          RGX_FWCOMCTX_ALLOCFLAGS,
+	                          "FwHWRTDataCommon",
+	                          &psHWRTDataCommonFwMemDesc);
 
 	if (eError != PVRSRV_OK)
 	{
-		PVR_DPF((PVR_DBG_ERROR, "%s: DevmemAllocate for FwHWRTDataCommon failed", __func__));
-		goto err_HWRTDataCommonAlloc;
+	    PVR_DPF((PVR_DBG_ERROR, "%s: DevmemAllocate for FwHWRTDataCommon failed", __func__));
+	    goto err_HWRTDataCommonAlloc;
 	}
 	eError = RGXSetFirmwareAddress(&sHWRTDataCommonFwAddr, psHWRTDataCommonFwMemDesc, 0, RFW_FWADDR_FLAG_NONE);
 	PVR_LOG_GOTO_IF_ERROR(eError, "RGXSetFirmwareAddress", err_HWRTDataCommonFwAddr);
@@ -1583,33 +1671,38 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA      *psConnection,
 	psHWRTDataCommonCookie->psHWRTDataCommonFwMemDesc = psHWRTDataCommonFwMemDesc;
 	psHWRTDataCommonCookie->sHWRTDataCommonFwAddr = sHWRTDataCommonFwAddr;
 
+	psHWRTDataCommonCookie->psPMMListsReservation = psPMMListsReservation;
+
 	/* Here we are creating a set of HWRTData(s)
 	   the number of elements in the set equals RGXMKIF_NUM_RTDATAS.
 	*/
 
 	for (ui32RTDataID = 0; ui32RTDataID < RGXMKIF_NUM_RTDATAS; ui32RTDataID++)
 	{
+		IMG_DEV_VIRTADDR sMListDevVAddr;
+		sMListDevVAddr.uiAddr = sMListsDevVAddr.uiAddr + ui32RTDataID * ui64MListSize;
+
 		eError = RGXCreateHWRTData_aux(
-			psConnection,
-			psDeviceNode,
-			asVHeapTableDevVAddr[ui32RTDataID % RGXMKIF_NUM_GEOMDATAS],
-			asPMMListDevVAddr[ui32RTDataID],
-			&apsFreeLists[(ui32RTDataID % RGXMKIF_NUM_GEOMDATAS) * RGXFW_MAX_FREELISTS],
-			asTailPtrsDevVAddr[ui32RTDataID % RGXMKIF_NUM_GEOMDATAS],
-			asMacrotileArrayDevVAddr[ui32RTDataID],
-			asRgnHeaderDevVAddr[ui32RTDataID],
-			asRTCDevVAddr[ui32RTDataID % RGXMKIF_NUM_GEOMDATAS],
-			ui16MaxRTs,
-			psHWRTDataCommonCookie,
-			&pasKMHWRTDataSet[ui32RTDataID]);
+		    psConnection,
+		    psDeviceNode,
+		    asVHeapTableDevVAddr[ui32RTDataID % RGXMKIF_NUM_GEOMDATAS],
+		    sMListDevVAddr,
+		    &apsFreeLists[(ui32RTDataID % RGXMKIF_NUM_GEOMDATAS) * RGXFW_MAX_FREELISTS],
+		    asTailPtrsDevVAddr[ui32RTDataID % RGXMKIF_NUM_GEOMDATAS],
+		    asMacrotileArrayDevVAddr[ui32RTDataID],
+		    asRgnHeaderDevVAddr[ui32RTDataID],
+		    asRTCDevVAddr[ui32RTDataID % RGXMKIF_NUM_GEOMDATAS],
+		    ui16MaxRTs,
+		    psHWRTDataCommonCookie,
+		    &pasKMHWRTDataSet[ui32RTDataID]);
 
 		if (eError != PVRSRV_OK)
 		{
 			PVR_DPF((PVR_DBG_ERROR,
-					"%s: Failed to create HWRTData [slot %u] (%s)",
-					__func__,
-					ui32RTDataID,
-					PVRSRVGetErrorString(eError)));
+			        "%s: Failed to create HWRTData [slot %u] (%s)",
+			        __func__,
+			        ui32RTDataID,
+			        PVRSRVGetErrorString(eError)));
 			goto err_HWRTDataAlloc;
 		}
 		psHWRTDataCommonCookie->ui32RefCount += 1;
@@ -1638,7 +1731,7 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA      *psConnection,
 err_HWRTDataCommonAlloc:
 	OSFreeMem(psHWRTDataCommonCookie);
 err_HWRTDataCommonCookieAlloc:
-
+	UnrefAndReleaseCriticalBuffer(psPMMListsReservation);
 	return eError;
 }
 
@@ -1710,6 +1803,7 @@ PVRSRV_ERROR RGXDestroyHWRTDataSet(RGX_KM_HW_RT_DATASET *psKMHWRTDataSet)
 
 		DevmemFwUnmapAndFree(psDevNode->pvDevice,
 		                     psCommonCookie->psHWRTDataCommonFwMemDesc);
+		UnrefAndReleaseCriticalBuffer(psCommonCookie->psPMMListsReservation);
 		OSFreeMem(psCommonCookie);
 	}
 
@@ -1767,47 +1861,12 @@ PVRSRV_ERROR RGXCreateFreeList2(CONNECTION_DATA			*psConnection,
 	IMG_DEV_VIRTADDR   sFreeListDevVAddr;
 	PMR*               psFreeListPMR = NULL;
 
-	/* Obtain reference to reservation object */
-	if (!DevmemIntReservationAcquire(psFreeListReservation))
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Failed to acquire reservation for freelist buffer",
-		        __func__));
-		eError = PVRSRV_ERROR_REFCOUNT_OVERFLOW;
-		goto ErrorReservationAcquire;
-	}
-
-	eError = DevmemIntGetReservationData(psFreeListReservation, &psFreeListPMR, &sFreeListDevVAddr);
-	if (eError != PVRSRV_OK)
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Error from DevmemIntGetReservationData: %s",
-		        __func__, PVRSRVGetErrorString(eError)));
-
-		goto ErrorAllocHost;
-	}
-
-	/* Check if client properly allocated PMMETA_PROTECT */
-	if ((PMR_Flags(psFreeListPMR) & PVRSRV_MEMALLOCFLAG_DEVICE_FLAG(PMMETA_PROTECT)) == 0)
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Freelist PMR must have PMMETA_PROTECT set",
-		        __func__));
-		eError = PVRSRV_ERROR_INVALID_FLAGS;
-		goto ErrorAllocHost;
-	}
-
-	if (PMR_IsSparse(psFreeListPMR))
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Free list PMR cannot be sparse!",
-		        __func__));
-		eError = PVRSRV_ERROR_INVALID_PARAMS;
-		goto ErrorAllocHost;
-	}
-
-	/* Ref the PMR to prevent resource being destroyed before use */
-	PMRRefPMR(psFreeListPMR);
+	eError = AcquireValidateRefCriticalBuffer(psDeviceNode,
+	                                          psFreeListReservation,
+	                                          0, /* Size is checked later after calculating initial grow size */
+	                                          &psFreeListPMR,
+	                                          &sFreeListDevVAddr);
+	PVR_LOG_RETURN_IF_ERROR(eError,  "Validation failed for Freelist reservation");
 
 	if (OSGetPageShift() > RGX_BIF_PM_PHYSICAL_PAGE_ALIGNSHIFT)
 	{
@@ -2031,10 +2090,8 @@ PVRSRV_ERROR RGXCreateFreeList2(CONNECTION_DATA			*psConnection,
 	OSFreeMem(psFreeList);
 
 ErrorAllocHost:
-	DevmemIntReservationRelease(psFreeListReservation);
+	UnrefAndReleaseCriticalBuffer(psFreeListReservation);
 
-ErrorReservationAcquire:
-	PVR_ASSERT(eError != PVRSRV_OK);
 	return eError;
 }
 
@@ -2133,9 +2190,7 @@ PVRSRV_ERROR RGXDestroyFreeList(RGX_FREELIST *psFreeList)
 	PVR_ASSERT(dllist_is_empty(&psFreeList->sMemoryBlockInitHead));
 	PVR_ASSERT(psFreeList->ui32CurrentFLPages == 0);
 
-	/* Remove reference from the PMR and reservation resources */
-	PMRUnrefPMR(psFreeList->psFreeListPMR);
-	DevmemIntReservationRelease(psFreeList->psFreeListReservation);
+	UnrefAndReleaseCriticalBuffer(psFreeList->psFreeListReservation);
 
 	/* free Freelist */
 	OSFreeMem(psFreeList);
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.h b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.h
index a843aa3..83e8806 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/rogue/rgxta3d.h
@@ -118,6 +118,7 @@ typedef struct _RGX_HWRTDATA_COMMON_COOKIE_
 {
 	DEVMEM_MEMDESC			*psHWRTDataCommonFwMemDesc;
 	RGXFWIF_DEV_VIRTADDR	sHWRTDataCommonFwAddr;
+	DEVMEMINT_RESERVATION2	*psPMMListsReservation;
 	IMG_UINT32				ui32RefCount;
 
 } RGX_HWRTDATA_COMMON_COOKIE;
@@ -254,6 +255,36 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA          *psConnection,
                                   IMG_UINT16                ui16MaxRTs,
                                   RGX_KM_HW_RT_DATASET     *pasKMHWRTDataSet[RGXMKIF_NUM_RTDATAS]);
 
+PVRSRV_ERROR RGXCreateHWRTDataSet2(CONNECTION_DATA          *psConnection,
+                                  PVRSRV_DEVICE_NODE        *psDeviceNode,
+                                  IMG_DEV_VIRTADDR          asVHeapTableDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+                                  DEVMEMINT_RESERVATION2    *psPMMListsReservation,
+                                  RGX_FREELIST	            *apsFreeLists[RGXMKIF_NUM_RTDATA_FREELISTS],
+                                  IMG_UINT32                ui32ScreenPixelMax,
+                                  IMG_UINT64                ui64MultiSampleCtl,
+                                  IMG_UINT64                ui64FlippedMultiSampleCtl,
+                                  IMG_UINT32                ui32TPCStride,
+                                  IMG_DEV_VIRTADDR          asTailPtrsDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+                                  IMG_UINT32                ui32TPCSize,
+                                  IMG_UINT32                ui32TEScreen,
+                                  IMG_UINT32                ui32TEAA,
+                                  IMG_UINT32                ui32TEMTILE1,
+                                  IMG_UINT32                ui32TEMTILE2,
+                                  IMG_UINT32                ui32MTileStride,
+                                  IMG_UINT32                ui32ISPMergeLowerX,
+                                  IMG_UINT32                ui32ISPMergeLowerY,
+                                  IMG_UINT32                ui32ISPMergeUpperX,
+                                  IMG_UINT32                ui32ISPMergeUpperY,
+                                  IMG_UINT32                ui32ISPMergeScaleX,
+                                  IMG_UINT32                ui32ISPMergeScaleY,
+                                  IMG_DEV_VIRTADDR          sMacrotileArrayDevVAddr[RGXMKIF_NUM_RTDATAS],
+                                  IMG_DEV_VIRTADDR          sRgnHeaderDevVAddr[RGXMKIF_NUM_RTDATAS],
+                                  IMG_DEV_VIRTADDR          asRTCDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+                                  IMG_UINT32                uiRgnHeaderSize,
+                                  IMG_UINT32                ui32ISPMtileSize,
+                                  IMG_UINT16                ui16MaxRTs,
+                                  RGX_KM_HW_RT_DATASET     *pasKMHWRTDataSet[RGXMKIF_NUM_RTDATAS]);
+
 /* Destroy HWRTDataSet */
 PVRSRV_ERROR RGXDestroyHWRTDataSet(RGX_KM_HW_RT_DATASET *psKMHWRTDataSet);
 
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxhwperf.c b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxhwperf.c
index da71bab..4c79706 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxhwperf.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxhwperf.c
@@ -512,7 +512,7 @@ PVRSRV_ERROR PVRSRVRGXGetEnabledHWPerfBlocks(PVRSRV_DEVICE_NODE *psDevNode,
 				continue;
 			}
 
-			if (ui32LastIdx > ui32ArrayLen)
+			if (ui32LastIdx + 1 > ui32ArrayLen)
 			{
 				PVR_DPF((PVR_DBG_ERROR, "ui32ArrayLen less than the number of enabled blocks."));
 				PVR_GOTO_WITH_ERROR(eError, PVRSRV_ERROR_OUT_OF_MEMORY, Error);
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxinit.c b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxinit.c
index 73cb05d..97901d5 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxinit.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxinit.c
@@ -1388,6 +1388,17 @@ static MMU_DEVICEATTRIBS *RGXDevMMUAttributes(PVRSRV_DEVICE_NODE *psDeviceNode,
 	return psMMUDevAttrs;
 }
 
+
+/*
+	RGXDevSnoopMode
+*/
+static PVRSRV_DEVICE_SNOOP_MODE RGXDevSnoopMode(PVRSRV_DEVICE_NODE *psDeviceNode)
+{
+	PVR_UNREFERENCED_PARAMETER(psDeviceNode);
+
+	return PVRSRV_DEVICE_SNOOP_NONE;
+}
+
 /*
  * RGXInitDevPart2
  */
@@ -1843,6 +1854,7 @@ PVRSRV_ERROR RGXInitCreateFWKernelMemoryContext(PVRSRV_DEVICE_NODE *psDeviceNode
 	/* Register callbacks for creation of device memory contexts */
 	psDeviceNode->pfnRegisterMemoryContext = RGXRegisterMemoryContext;
 	psDeviceNode->pfnUnregisterMemoryContext = RGXUnregisterMemoryContext;
+	psDeviceNode->pfnValidateExportableFlags = RGXValidateExportableFlags;
 
 	/* Create the memory context for the firmware. */
 	eError = DevmemCreateContext(psDeviceNode, DEVMEM_HEAPCFG_FORFW,
@@ -4504,6 +4516,7 @@ PVRSRV_ERROR RGXRegisterDevice(PVRSRV_DEVICE_NODE *psDeviceNode)
 
 	/* Callback for getting the MMU device attributes */
 	psDeviceNode->pfnGetMMUDeviceAttributes = RGXDevMMUAttributes;
+	psDeviceNode->pfnGetDeviceSnoopMode = RGXDevSnoopMode;
 	psDeviceNode->pfnMMUCacheInvalidate = RGXMMUCacheInvalidate;
 	psDeviceNode->pfnMMUCacheInvalidateKick = RGXMMUCacheInvalidateKick;
 #if defined(RGX_BRN71422_TARGET_HARDWARE_PHYSICAL_ADDR)
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.c b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.c
index 78af775..49deb13 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.c
@@ -1292,6 +1292,7 @@ static PVRSRV_ERROR RGXCreateHWRTData_aux(CONNECTION_DATA  *psConnection,
                                   RGX_FREELIST	           *apsFreeLists[RGXFW_MAX_FREELISTS],
                                   IMG_DEV_VIRTADDR          sTailPtrsDevVAddr,
                                   IMG_UINT16                ui16MaxRTs,
+                                  RGX_HWRTDATA_COMMON_COOKIE *psHWRTDataCommonCookie,
                                   RGX_KM_HW_RT_DATASET    **ppsKMHWRTDataSet) /* per-HWRTData */
 {
 	PVRSRV_ERROR eError;
@@ -1329,7 +1330,7 @@ static PVRSRV_ERROR RGXCreateHWRTData_aux(CONNECTION_DATA  *psConnection,
 
 	*ppsKMHWRTDataSet = psKMHWRTDataSet;
 	psKMHWRTDataSet->psDeviceNode = psDeviceNode;
-
+	psKMHWRTDataSet->psHWRTDataCommonCookie = psHWRTDataCommonCookie;
 	psDevInfo = psDeviceNode->pvDevice;
 
 	/*
@@ -1548,24 +1549,171 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA      *psConnection,
 		IMG_UINT16                ui16MaxRTs,
 		RGX_KM_HW_RT_DATASET     *pasKMHWRTDataSet[RGXMKIF_NUM_RTDATAS])
 {
+	PVR_UNREFERENCED_PARAMETER(psConnection);
+	PVR_UNREFERENCED_PARAMETER(psDeviceNode);
+	PVR_UNREFERENCED_PARAMETER(psVHeapTableDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(asPMDataDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(asPMSecureDataDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(apsFreeLists);
+	PVR_UNREFERENCED_PARAMETER(asTailPtrsDevVAddr);
+	PVR_UNREFERENCED_PARAMETER(ui16MaxRTs);
+	PVR_UNREFERENCED_PARAMETER(pasKMHWRTDataSet);
+
+	return PVRSRV_ERROR_NOT_IMPLEMENTED;
+}
+
+static PVRSRV_ERROR
+_WritePMStateBuffer(PMR* psRenderStatesPMR,
+                    IMG_DEVMEM_OFFSET_T ui64Offset,
+                    IMG_DEV_VIRTADDR sMListDevVAddr,
+                    IMG_DEV_VIRTADDR sVHeapTableDevVAddr)
+{
+	PVRSRV_ERROR eError;
+
+	size_t uiNbBytes;
+	IMG_UINT32 asRenderStateBuffer[RGX_PM_MAX_RSTATE_SIZE_DWORDS] = {0};
+
+	PVR_ASSERT(PVRSRV_IS_FEATURE_SUPPORTED(PMR_DeviceNode(psRenderStatesPMR), PM_BYTE_ALIGNED_BASE_ADDRESSES));
+	PVR_ASSERT((sMListDevVAddr.uiAddr & (RGX_PM_MLIST_BASE_ADDR_MAX_ALIGNSIZE - 1)) == 0);
+	PVR_ASSERT((sVHeapTableDevVAddr.uiAddr & (RGX_PM_VHEAP_BASE_ADDR_MAX_ALIGNSIZE - 1)) == 0);
+
+	/* Initialise the Mlist base and Vheap base */
+	_RGX_PM_RENDERSTATE_BUFFER_SET_MLIST_BASE_ADDR(asRenderStateBuffer, sMListDevVAddr.uiAddr);
+	_RGX_PM_RENDERSTATE_BUFFER_SET_VHEAP_BASE_ADDR(asRenderStateBuffer, sVHeapTableDevVAddr.uiAddr);
+
+	eError = PMR_WriteBytes(psRenderStatesPMR,
+	                        ui64Offset,
+	                        (IMG_UINT8*)&asRenderStateBuffer,
+	                        sizeof(asRenderStateBuffer),
+	                        &uiNbBytes);
+	if (eError != PVRSRV_OK)
+	{
+		PVR_DPF((PVR_DBG_ERROR,
+		        "%s: Error from PMR_WriteBytes: %s",
+		        __func__, PVRSRVGetErrorString(eError)));
+		goto ErrorExit;
+	}
+
+	PVR_ASSERT(uiNbBytes == sizeof(asRenderStateBuffer));
+
+	PDUMPCOMMENT(PMR_DeviceNode(psRenderStatesPMR), "PMState buffer");
+	PMRPDumpLoadMem(psRenderStatesPMR, ui64Offset, sizeof(asRenderStateBuffer), PDUMP_FLAGS_CONTINUOUS, false);
+
+	return PVRSRV_OK;
+ErrorExit:
+	return eError;
+}
+
+PVRSRV_ERROR RGXCreateHWRTDataSet2(
+        CONNECTION_DATA         *psConnection,
+        PVRSRV_DEVICE_NODE      *psDeviceNode,
+        IMG_DEV_VIRTADDR        sVHeapTableDevVAddr,
+        DEVMEMINT_RESERVATION2  *psPMMListsReservation,
+        DEVMEMINT_RESERVATION2  *psPMStateReservation,
+        DEVMEMINT_RESERVATION2  *psPMSecureStateReservation,
+        RGX_FREELIST            *apsFreeLists[RGXMKIF_NUM_RTDATA_FREELISTS],
+        IMG_DEV_VIRTADDR        asTailPtrsDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+        IMG_UINT16              ui16MaxRTs,
+        RGX_KM_HW_RT_DATASET    *pasKMHWRTDataSet[RGXMKIF_NUM_RTDATAS])
+{
 	PVRSRV_ERROR eError;
 	IMG_UINT32 ui32RTDataID;
+	IMG_UINT32 ui32GlobalFLMaxPages, ui32LocalFLMaxPages;
+	IMG_DEVMEM_SIZE_T ui64MListSize, ui64AlignedRenderStateSize;
+	RGX_HWRTDATA_COMMON_COOKIE *psHWRTDataCommonCookie;
+
+	PMR *psPMStatePMR=NULL, *psPMSecureStatePMR=NULL, *psMListsPMR=NULL;
+	IMG_DEV_VIRTADDR sPMStateBaseDevVAddr, sPMSecureStateDevVAddr, sMListsDevVAddr;
+
+	ui64AlignedRenderStateSize = PVR_ALIGN(sizeof(RGX_PM_RENDERSTATE_BUFFER),
+	   MAX(RGX_PM_RENDERSTATE_BASE_ADDR_ALIGNSIZE,
+	       GET_ROGUE_CACHE_LINE_SIZE(PVRSRV_GET_DEVICE_FEATURE_VALUE(psDeviceNode, SLC_CACHE_LINE_SIZE_BITS))));
+
+	/* Check if freelists have uniform sizes */
+	eError = ValidateFreeListSizes(apsFreeLists,
+	                               &ui32LocalFLMaxPages,
+	                               &ui32GlobalFLMaxPages);
+	PVR_LOG_RETURN_IF_ERROR(eError, "Invalid freelist sizes");
+
+	ui64MListSize = RGXCalcMListSize(psDeviceNode,
+	    ui32LocalFLMaxPages * RGX_BIF_PM_PHYSICAL_PAGE_SIZE,
+	    ui32GlobalFLMaxPages * RGX_BIF_PM_PHYSICAL_PAGE_SIZE);
+
+	eError = AcquireValidateRefCriticalBuffer(psDeviceNode,
+	                                          psPMStateReservation,
+	                                          ui64AlignedRenderStateSize * RGXMKIF_NUM_RTDATAS,
+	                                          &psPMStatePMR,
+	                                          &sPMStateBaseDevVAddr);
+	PVR_LOG_GOTO_IF_ERROR(eError,
+	    "Validation failed for MListAndState reservations", err_validation_rs);
+
+	/* The following check is needed to handle cases where a secure state reservation
+	   dummy is passed through the bridge because it is not used.
+	   In that case we can't acquire and validate twice. */
+	if (psPMStateReservation != psPMSecureStateReservation)
+	{
+		eError = AcquireValidateRefCriticalBuffer(psDeviceNode,
+		                                          psPMSecureStateReservation,
+		                                          ui64AlignedRenderStateSize * RGXMKIF_NUM_RTDATAS,
+		                                          &psPMSecureStatePMR,
+		                                          &sPMSecureStateDevVAddr);
+		PVR_LOG_GOTO_IF_ERROR(eError,
+		    "Validation failed for secure data reservations", err_validation_srs);
+	}
+
+	eError = AcquireValidateRefCriticalBuffer(psDeviceNode,
+	                                          psPMMListsReservation,
+	                                          ui64MListSize * RGXMKIF_NUM_RTDATAS,
+	                                          &psMListsPMR,
+	                                          &sMListsDevVAddr);
+	PVR_LOG_GOTO_IF_ERROR(eError,
+	    "Validation failed for secure data reservations", err_validation_mlist);
+
+	/* Prepare KM cleanup object for common data */
+	psHWRTDataCommonCookie = OSAllocZMem(sizeof(*psHWRTDataCommonCookie));
+	if (psHWRTDataCommonCookie == NULL)
+	{
+		eError = PVRSRV_ERROR_OUT_OF_MEMORY;
+		goto err_common_cookie_alloc;
+	}
+
+	psHWRTDataCommonCookie->psPMStateReservation = psPMStateReservation;
+	psHWRTDataCommonCookie->psPMSecureStateReservation = psPMSecureStateReservation;
+	psHWRTDataCommonCookie->psPMMListsReservation = psPMMListsReservation;
 
 	/* Here we are creating a set of HWRTData(s)
 	   the number of elements in the set equals RGXMKIF_NUM_RTDATAS.
 	*/
-
 	for (ui32RTDataID = 0; ui32RTDataID < RGXMKIF_NUM_RTDATAS; ui32RTDataID++)
 	{
+		IMG_DEV_VIRTADDR sRenderStateDevVirtAddr;
+		IMG_DEV_VIRTADDR sSecureRenderStateDevVirtAddr;
+		IMG_DEV_VIRTADDR sMListDevVirtAddr;
+
+		sRenderStateDevVirtAddr.uiAddr =
+		    sPMStateBaseDevVAddr.uiAddr + ui64AlignedRenderStateSize * ui32RTDataID;
+		sSecureRenderStateDevVirtAddr.uiAddr =
+		    sPMSecureStateDevVAddr.uiAddr + ui64AlignedRenderStateSize * ui32RTDataID;
+		sMListDevVirtAddr.uiAddr =
+		    sMListsDevVAddr.uiAddr + ui64MListSize * ui32RTDataID;
+
+		eError = _WritePMStateBuffer(psPMStatePMR,
+		                             ui64AlignedRenderStateSize * ui32RTDataID,
+		                             sMListDevVirtAddr,
+		                             sVHeapTableDevVAddr);
+		PVR_LOG_GOTO_IF_ERROR(eError,
+		    "Failed to write PM state buffer", err_HWRTDataAlloc);
+
 		eError = RGXCreateHWRTData_aux(
 			psConnection,
 			psDeviceNode,
-			psVHeapTableDevVAddr,
-			asPMDataDevVAddr[ui32RTDataID],
-			asPMSecureDataDevVAddr[ui32RTDataID],
+			sVHeapTableDevVAddr,
+			sRenderStateDevVirtAddr,
+			sSecureRenderStateDevVirtAddr,
 			&apsFreeLists[(ui32RTDataID % RGXMKIF_NUM_GEOMDATAS) * RGXFW_MAX_FREELISTS],
 			asTailPtrsDevVAddr[ui32RTDataID % RGXMKIF_NUM_GEOMDATAS],
 			ui16MaxRTs,
+			psHWRTDataCommonCookie,
 			&pasKMHWRTDataSet[ui32RTDataID]);
 
 		if (eError != PVRSRV_OK)
@@ -1577,6 +1725,7 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA      *psConnection,
 					PVRSRVGetErrorString(eError)));
 			goto err_HWRTDataAlloc;
 		}
+		psHWRTDataCommonCookie->ui32RefCount += 1;
 	}
 
 	return PVRSRV_OK;
@@ -1594,7 +1743,17 @@ PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA      *psConnection,
 			}
 		}
 	}
-
+	OSFreeMem(psHWRTDataCommonCookie);
+err_common_cookie_alloc:
+	UnrefAndReleaseCriticalBuffer(psPMMListsReservation);
+err_validation_mlist:
+	if (psPMSecureStateReservation != psPMStateReservation)
+	{
+		UnrefAndReleaseCriticalBuffer(psPMSecureStateReservation);
+	}
+err_validation_srs:
+	UnrefAndReleaseCriticalBuffer(psPMStateReservation);
+err_validation_rs:
 	return eError;
 }
 
@@ -1607,7 +1766,7 @@ PVRSRV_ERROR RGXDestroyHWRTDataSet(RGX_KM_HW_RT_DATASET *psKMHWRTDataSet)
 	PVRSRV_DEVICE_NODE *psDevNode;
 	PVRSRV_ERROR eError;
 	PRGXFWIF_HWRTDATA psHWRTData;
-
+	RGX_HWRTDATA_COMMON_COOKIE *psCommonCookie;
 	PVR_ASSERT(psKMHWRTDataSet);
 
 	psDevNode = psKMHWRTDataSet->psDeviceNode;
@@ -1632,6 +1791,7 @@ PVRSRV_ERROR RGXDestroyHWRTDataSet(RGX_KM_HW_RT_DATASET *psKMHWRTDataSet)
 		   This is to prevent repeated client calls to this function */
 		eError = PVRSRV_OK;
 	}
+	psCommonCookie = psKMHWRTDataSet->psHWRTDataCommonCookie;
 
 	RGXDestroyHWRTData_aux(psKMHWRTDataSet);
 
@@ -1648,7 +1808,22 @@ PVRSRV_ERROR RGXDestroyHWRTDataSet(RGX_KM_HW_RT_DATASET *psKMHWRTDataSet)
 	     objects will be destroyed after destruction of all HWRTDatas
 	     within a single pair.
 	*/
+	psCommonCookie->ui32RefCount--;
 
+	/* When ref count for HWRTDataCommonCookie hits ZERO
+	 * we have to destroy the cookie
+	 * [KM object] afterwards. */
+	if (psCommonCookie->ui32RefCount == 0)
+	{
+		UnrefAndReleaseCriticalBuffer(psCommonCookie->psPMStateReservation);
+		if (psCommonCookie->psPMSecureStateReservation != psCommonCookie->psPMStateReservation)
+		{
+			UnrefAndReleaseCriticalBuffer(psCommonCookie->psPMSecureStateReservation);
+		}
+		UnrefAndReleaseCriticalBuffer(psCommonCookie->psPMMListsReservation);
+
+		OSFreeMem(psCommonCookie);
+	}
 	return PVRSRV_OK;
 }
 
@@ -1715,47 +1890,14 @@ PVRSRV_ERROR RGXCreateFreeList2(CONNECTION_DATA       *psConnection,
 	                        sizeof(RGX_PM_FREELISTSTATE_BUFFER),
 	                        GET_ROGUE_CACHE_LINE_SIZE(PVRSRV_GET_DEVICE_FEATURE_VALUE(psDeviceNode, SLC_CACHE_LINE_SIZE_BITS)));
 
-	/* Obtain reference to reservation object */
-	if (!DevmemIntReservationAcquire(psFreeListAndStateReservation))
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Failed to acquire reservation for freelist buffer",
-		        __func__));
-		eError = PVRSRV_ERROR_REFCOUNT_OVERFLOW;
-		goto ErrorReservationAcquire;
-	}
+	eError = AcquireValidateRefCriticalBuffer(psDeviceNode,
+	                                          psFreeListAndStateReservation,
+	                                          0, /* Size is checked later after calculating initial grow size */
+	                                          &psFreeListAndStatePMR,
+	                                          &sFreeListStateDevVAddr);
+	PVR_LOG_GOTO_IF_ERROR(eError,
+	    "Validation failed for Freelist reservation", ErrorAcquireValidateFreeList);
 
-	eError = DevmemIntGetReservationData(psFreeListAndStateReservation, &psFreeListAndStatePMR, &sFreeListStateDevVAddr);
-	if (eError != PVRSRV_OK)
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Error from DevmemIntGetReservationData: %s",
-		        __func__, PVRSRVGetErrorString(eError)));
-
-		goto ErrorRefPMR;
-	}
-
-	/* Check if client properly allocated PMMETA_PROTECT */
-	if ((PMR_Flags(psFreeListAndStatePMR) & PVRSRV_MEMALLOCFLAG_DEVICE_FLAG(PMMETA_PROTECT)) == 0)
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Freelist PMR must have PMMETA_PROTECT set",
-		        __func__));
-		eError = PVRSRV_ERROR_INVALID_FLAGS;
-		goto ErrorRefPMR;
-	}
-
-	/* Ref the PMR to prevent resource being destroyed before use */
-	PMRRefPMR(psFreeListAndStatePMR);
-
-	if (PMR_IsSparse(psFreeListAndStatePMR))
-	{
-		PVR_DPF((PVR_DBG_ERROR,
-		        "%s: Free list PMR cannot be sparse!",
-		        __func__));
-		eError = PVRSRV_ERROR_INVALID_PARAMS;
-		goto ErrorAllocHost;
-	}
 
 	sFreeListBaseDevVAddr.uiAddr = sFreeListStateDevVAddr.uiAddr + uiFreeListOffset;
 
@@ -1891,7 +2033,7 @@ PVRSRV_ERROR RGXCreateFreeList2(CONNECTION_DATA       *psConnection,
 			PVR_DPF((PVR_DBG_ERROR,
 			        "%s: Error from PMR_WriteBytes: %s",
 			        __func__, PVRSRVGetErrorString(eError)));
-			goto FWFreeListAlloc;
+			goto ErrorWritePMR;
 		}
 		PVR_ASSERT(uiNbBytes == sizeof(sFLState));
 
@@ -2016,6 +2158,7 @@ PVRSRV_ERROR RGXCreateFreeList2(CONNECTION_DATA       *psConnection,
 
 	/* Error handling */
 FWFreeListCpuMap:
+ErrorWritePMR:
 	/* Remove freelists from list */
 	OSLockAcquire(psDevInfo->hLockFreeList);
 	dllist_remove_node(&psFreeList->sNode);
@@ -2031,10 +2174,9 @@ PVRSRV_ERROR RGXCreateFreeList2(CONNECTION_DATA       *psConnection,
 ErrorAllocHost:
 	PMRUnrefPMR(psFreeListAndStatePMR);
 
-ErrorRefPMR:
-	DevmemIntReservationRelease(psFreeListAndStateReservation);
+	UnrefAndReleaseCriticalBuffer(psFreeListAndStateReservation);
 
-ErrorReservationAcquire:
+ErrorAcquireValidateFreeList:
 	PVR_ASSERT(eError != PVRSRV_OK);
 	return eError;
 }
@@ -2133,11 +2275,8 @@ PVRSRV_ERROR RGXDestroyFreeList(RGX_FREELIST *psFreeList)
 
 	/* consistency checks */
 	PVR_ASSERT(dllist_is_empty(&psFreeList->sMemoryBlockInitHead));
-	PVR_ASSERT(psFreeList->ui32CurrentFLPages == 0);
-
-	/* Remove references from the PMR resources */
-	PMRUnrefPMR(psFreeList->psFreeListStatePMR);
-	DevmemIntReservationRelease(psFreeList->psFreeListAndStateReservation);
+	PVR_ASSERT(psFreeList->ui32CurrentFLPages == 0);;
+	UnrefAndReleaseCriticalBuffer(psFreeList->psFreeListAndStateReservation);
 
 	/* free Freelist */
 	OSFreeMem(psFreeList);
diff --git a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.h b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.h
index a33e5a9..83bfc42 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/devices/volcanic/rgxta3d.h
@@ -116,16 +116,18 @@ typedef struct _RGX_PMR_NODE_ RGX_PMR_NODE;
 
 typedef struct _RGX_HWRTDATA_COMMON_COOKIE_
 {
-	DEVMEM_MEMDESC			*psHWRTDataCommonFwMemDesc;
-	RGXFWIF_DEV_VIRTADDR	sHWRTDataCommonFwAddr;
-	IMG_UINT32				ui32RefCount;
-
+	DEVMEMINT_RESERVATION2* psPMStateReservation;
+	DEVMEMINT_RESERVATION2* psPMSecureStateReservation;
+	DEVMEMINT_RESERVATION2* psPMMListsReservation;
+	IMG_UINT32              ui32RefCount;
 } RGX_HWRTDATA_COMMON_COOKIE;
 
 typedef struct _RGX_KM_HW_RT_DATASET_
 {
 	/* RGX_RTDATA_CLEANUP_DATA */
 	/* RGXMKIF_NUM_RTDATAS */
+	RGX_HWRTDATA_COMMON_COOKIE* psHWRTDataCommonCookie;
+
 	PVRSRV_DEVICE_NODE *psDeviceNode;
 	RGXFWIF_DEV_VIRTADDR sHWRTDataFwAddr;
 
@@ -231,7 +233,16 @@ typedef struct {
 /* Dump the physical pages of a freelist */
 IMG_BOOL RGXDumpFreeListPageList(RGX_FREELIST *psFreeList);
 
-
+PVRSRV_ERROR RGXCreateHWRTDataSet2(CONNECTION_DATA          *psConnection,
+                                   PVRSRV_DEVICE_NODE       *psDeviceNode,
+                                   IMG_DEV_VIRTADDR         psVHeapTableDevVAddr,
+                                   DEVMEMINT_RESERVATION2   *psPMMListsReservation,
+                                   DEVMEMINT_RESERVATION2   *psPMStateReservation,
+                                   DEVMEMINT_RESERVATION2   *psPMSecureStateReservation,
+                                   RGX_FREELIST             *apsFreeLists[RGXMKIF_NUM_RTDATA_FREELISTS],
+                                   IMG_DEV_VIRTADDR         asTailPtrsDevVAddr[RGXMKIF_NUM_GEOMDATAS],
+                                   IMG_UINT16               ui16MaxRTs,
+                                   RGX_KM_HW_RT_DATASET     *pasKMHWRTDataSet[RGXMKIF_NUM_RTDATAS]);
 
 /* Create HWRTDataSet */
 PVRSRV_ERROR RGXCreateHWRTDataSet(CONNECTION_DATA          *psConnection,
diff --git a/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.c b/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.c
index 4c40b8b..af54b86 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.c
@@ -497,23 +497,40 @@ int PVRSRVDeviceServicesOpen(PVRSRV_DEVICE_NODE *psDeviceNode,
 		goto out;
 	}
 
-	if (psDRMFile->driver_priv == NULL)
-	{
-		/* Allocate psConnectionPriv (stores private data and release pfn under driver_priv) */
-		psConnectionPriv = kzalloc(sizeof(*psConnectionPriv), GFP_KERNEL);
-		if (!psConnectionPriv)
-		{
-			PVR_DPF((PVR_DBG_ERROR, "%s: No memory to allocate driver_priv data", __func__));
-			iErr = -ENOMEM;
-			mutex_unlock(&sDeviceInitMutex);
-			goto fail_alloc_connection_priv;
-		}
-	}
-	else
+	if (psDRMFile->driver_priv != NULL)
 	{
 		psConnectionPriv = (PVRSRV_CONNECTION_PRIV*)psDRMFile->driver_priv;
+
+		/* If there is already a valid connection, we can reuse it */
+		if (psConnectionPriv->ui32Type & DKF_CONNECTION_FLAG_SERVICES)
+		{
+			PVR_DPF((PVR_DBG_WARNING, "%s: Reusing services connection", __func__));
+			iErr = 0;
+			mutex_unlock(&sDeviceInitMutex);
+			goto out;
+		}
+		else
+		{
+			PVR_DPF((PVR_DBG_ERROR,
+			         "%s: Connection has already been initialised",
+			         __func__));
+			iErr = -EINVAL;
+			mutex_unlock(&sDeviceInitMutex);
+			goto out;
+		}
 	}
 
+	/* Allocate psConnectionPriv (stores private data and release pfn under driver_priv) */
+	psConnectionPriv = kzalloc(sizeof(*psConnectionPriv), GFP_KERNEL);
+	if (!psConnectionPriv)
+	{
+		PVR_DPF((PVR_DBG_ERROR, "%s: No memory to allocate driver_priv data", __func__));
+		iErr = -ENOMEM;
+		mutex_unlock(&sDeviceInitMutex);
+		goto fail_alloc_connection_priv;
+	}
+	psConnectionPriv->ui32Type = DKF_CONNECTION_FLAG_SERVICES;
+
 	if (psDeviceNode->eDevState == PVRSRV_DEVICE_STATE_CREATED)
 	{
 		eError = PVRSRVCommonDeviceInitialise(psDeviceNode);
@@ -565,6 +582,7 @@ int PVRSRVDeviceServicesOpen(PVRSRV_DEVICE_NODE *psDeviceNode,
 
 fail_connect:
 fail_device_init:
+	psDRMFile->driver_priv = NULL;
 	kfree(psConnectionPriv);
 fail_alloc_connection_priv:
 out:
@@ -598,6 +616,36 @@ static int PVRSRVDeviceSyncOpen(PVRSRV_DEVICE_NODE *psDeviceNode,
 		goto out;
 	}
 
+	if (psDRMFile->driver_priv != NULL)
+	{
+		psConnectionPriv = (PVRSRV_CONNECTION_PRIV*)psDRMFile->driver_priv;
+
+		/* If there is already a valid connection, we can reuse it */
+		if (psConnectionPriv->ui32Type & DKF_CONNECTION_FLAG_SYNC)
+		{
+			PVR_DPF((PVR_DBG_WARNING, "%s: Reusing sync connection", __func__));
+			iErr = 0;
+			goto out;
+		}
+#if (PVRSRV_DEVICE_INIT_MODE == PVRSRV_LINUX_DEV_INIT_ON_CONNECT)
+		else
+		{
+			PVR_DPF((PVR_DBG_ERROR,
+			         "%s: Connection has already been initialised",
+			         __func__));
+			iErr = -EINVAL;
+			goto out;
+		}
+#endif
+	}
+
+	/* It's valid for the driver_priv to point to a services connection allocation,
+	 * when PVRSRV_DEVICE_INIT_MODE != PVRSRV_LINUX_DEV_INIT_ON_CONNECT. This
+	 * function will extend the driver_priv with further initialisation to
+	 * `psConnectionPriv->pvSyncConnectionData`.
+	 *
+	 * However, this case is invalid when PVRSRV_DEVICE_INIT_MODE == PVRSRV_LINUX_DEV_INIT_ON_CONNECT;
+	 * driver_priv should be NULL at this point and a new allocation be initialised. */
 	if (psDRMFile->driver_priv == NULL)
 	{
 		/* Allocate psConnectionPriv (stores private data and release pfn under driver_priv) */
@@ -609,10 +657,8 @@ static int PVRSRVDeviceSyncOpen(PVRSRV_DEVICE_NODE *psDeviceNode,
 			goto out;
 		}
 	}
-	else
-	{
-		psConnectionPriv = (PVRSRV_CONNECTION_PRIV*)psDRMFile->driver_priv;
-	}
+
+	psConnectionPriv->ui32Type = DKF_CONNECTION_FLAG_SYNC;
 
 	/* Allocate connection data area, no stats since process not registered yet */
 	psConnection = kzalloc(sizeof(*psConnection), GFP_KERNEL);
@@ -668,6 +714,7 @@ static int PVRSRVDeviceSyncOpen(PVRSRV_DEVICE_NODE *psDeviceNode,
 fail_private_data_init:
 	kfree(psConnection);
 fail_alloc_connection:
+	psDRMFile->driver_priv = NULL;
 	kfree(psConnectionPriv);
 out:
 	return iErr;
diff --git a/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.h b/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.h
index 811cacd..43588c6 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/env/linux/module_common.h
@@ -48,6 +48,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 /* DRVNAME is the name we use to register our driver. */
 #define DRVNAME PVR_LDM_DRIVER_REGISTRATION_NAME
 
+#define DKF_CONNECTION_FLAG_SYNC        BIT(0)
+#define DKF_CONNECTION_FLAG_SERVICES    BIT(1)
+
+#define DKF_CONNECTION_FLAG_INVALID     IMG_UINT32_C(0)
+
 struct _PVRSRV_DEVICE_NODE_;
 struct drm_file;
 struct drm_device;
@@ -87,6 +92,10 @@ typedef struct
 	void *pvGpuWorkPeriodEventStats;
 #endif /* defined(PVRSRV_ANDROID_TRACE_GPU_WORK_PERIOD) */
 
+	/* An integer representing the type of connection.
+	 */
+	uint32_t ui32Type;
+
 } PVRSRV_CONNECTION_PRIV;
 
 int PVRSRVDriverInit(void);
diff --git a/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_dmabuf.c b/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_dmabuf.c
index 1fbddd7..9c4b2b7 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_dmabuf.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_dmabuf.c
@@ -848,6 +848,19 @@ PhysmemExportDmaBuf(CONNECTION_DATA *psConnection,
 	IMG_DEVMEM_SIZE_T uiPMRSize;
 	PVRSRV_ERROR eError;
 	IMG_INT iFd;
+	IMG_INT iDmaBufFlags = 0;
+	PVRSRV_MEMALLOCFLAGS_T ui64Flags = 0;
+	IMG_BOOL bIsPMRReadable = IMG_FALSE;
+	IMG_BOOL bIsPMRWritable = IMG_FALSE;
+
+	/* Exporting a PMR which was originally created from an imported DmaBuf
+	 * is not supported.
+	 */
+	PVR_RETURN_IF_FALSE(PMR_GetType(psPMR) != PMR_TYPE_DMABUF,
+	                    PVRSRV_ERROR_PMR_WRONG_PMR_TYPE);
+
+	eError = PMR_IsExportable(psPMR);
+	PVR_LOG_RETURN_IF_ERROR(eError, "PMR_IsExportable");
 
 	PMRFactoryLock();
 
@@ -855,6 +868,30 @@ PhysmemExportDmaBuf(CONNECTION_DATA *psConnection,
 
 	PMR_LogicalSize(psPMR, &uiPMRSize);
 
+	ui64Flags = PMR_Flags(psPMR);
+	bIsPMRReadable = PVRSRV_CHECK_CPU_READABLE(ui64Flags)        ||
+	                 PVRSRV_CHECK_CPU_READ_PERMITTED(ui64Flags)  ||
+	                 PVRSRV_CHECK_GPU_READABLE(ui64Flags)        ||
+	                 PVRSRV_CHECK_GPU_READ_PERMITTED(ui64Flags);
+	bIsPMRWritable = PVRSRV_CHECK_CPU_WRITEABLE(ui64Flags)       ||
+	                 PVRSRV_CHECK_CPU_WRITE_PERMITTED(ui64Flags) ||
+	                 PVRSRV_CHECK_GPU_WRITEABLE(ui64Flags)       ||
+	                 PVRSRV_CHECK_GPU_WRITE_PERMITTED(ui64Flags);
+
+	if (bIsPMRReadable && bIsPMRWritable)
+
+	{
+		iDmaBufFlags = O_RDWR;
+	}
+	else if (bIsPMRWritable)
+	{
+		iDmaBufFlags = O_WRONLY;
+	}
+	else
+	{
+		iDmaBufFlags = O_RDONLY;
+	}
+
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
 	{
 		DEFINE_DMA_BUF_EXPORT_INFO(sDmaBufExportInfo);
@@ -862,16 +899,16 @@ PhysmemExportDmaBuf(CONNECTION_DATA *psConnection,
 		sDmaBufExportInfo.priv  = psPMR;
 		sDmaBufExportInfo.ops   = &sPVRDmaBufOps;
 		sDmaBufExportInfo.size  = uiPMRSize;
-		sDmaBufExportInfo.flags = O_RDWR;
+		sDmaBufExportInfo.flags = iDmaBufFlags;
 
 		psDmaBuf = dma_buf_export(&sDmaBufExportInfo);
 	}
 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0))
 	psDmaBuf = dma_buf_export(psPMR, &sPVRDmaBufOps,
-	                          uiPMRSize, O_RDWR, NULL);
+	                          uiPMRSize, iDmaBufFlags, NULL);
 #else
 	psDmaBuf = dma_buf_export(psPMR, &sPVRDmaBufOps,
-	                          uiPMRSize, O_RDWR);
+	                          uiPMRSize, iDmaBufFlags);
 #endif
 
 	if (IS_ERR_OR_NULL(psDmaBuf))
@@ -882,7 +919,7 @@ PhysmemExportDmaBuf(CONNECTION_DATA *psConnection,
 		goto fail_pmr_ref;
 	}
 
-	iFd = dma_buf_fd(psDmaBuf, O_RDWR);
+	iFd = dma_buf_fd(psDmaBuf, iDmaBufFlags);
 	if (iFd < 0)
 	{
 		PVR_DPF((PVR_DBG_ERROR, "%s: Failed to get dma-buf fd (err=%d)",
@@ -921,6 +958,62 @@ PhysmemExportDmaBuf(CONNECTION_DATA *psConnection,
 	return eError;
 }
 
+/* Validate permissions of dma_buf FD against PMR flags */
+static PVRSRV_ERROR
+ValidateDmaBufFdFlags(struct file *psFile,
+                      PVRSRV_MEMALLOCFLAGS_T uiFlags)
+{
+	PVRSRV_ERROR eError = PVRSRV_OK;
+	IMG_BOOL bIsPMRReadable = IMG_FALSE;
+	IMG_BOOL bIsPMRWritable = IMG_FALSE;
+
+	bIsPMRReadable = PVRSRV_CHECK_CPU_READABLE(uiFlags)        ||
+	                 PVRSRV_CHECK_CPU_READ_PERMITTED(uiFlags)  ||
+	                 PVRSRV_CHECK_GPU_READABLE(uiFlags)        ||
+	                 PVRSRV_CHECK_GPU_READ_PERMITTED(uiFlags);
+	bIsPMRWritable = PVRSRV_CHECK_CPU_WRITEABLE(uiFlags)       ||
+	                 PVRSRV_CHECK_CPU_WRITE_PERMITTED(uiFlags) ||
+	                 PVRSRV_CHECK_GPU_WRITEABLE(uiFlags)       ||
+	                 PVRSRV_CHECK_GPU_WRITE_PERMITTED(uiFlags);
+
+	/* Requested flags must have either READ or WRITE or both permissions */
+	if (!bIsPMRReadable && !bIsPMRWritable)
+	{
+		PVR_DPF((PVR_DBG_ERROR, "%s: Invalid flags! "
+		         "dma_buf cannot be imported to PMR without any R/W flags. "
+		         "uiFlags = 0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC,
+		         __func__,
+		         uiFlags));
+		return PVRSRV_ERROR_INVALID_FLAGS;
+	}
+
+	/* Check for read permission mismatch between DmaBuf and PMR */
+	if (!(psFile->f_mode & FMODE_READ) && bIsPMRReadable)
+	{
+		PVR_DPF((PVR_DBG_ERROR, "%s: Read permission does not match! "
+		         "psFile->f_mode = 0x%x, "
+		         "uiFlags = 0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC,
+		         __func__,
+		         psFile->f_mode,
+		         uiFlags));
+		eError = PVRSRV_ERROR_INVALID_FLAGS;
+	}
+
+	/* Check for write permission mismatch between DmaBuf and PMR */
+	if (!(psFile->f_mode & FMODE_WRITE) && bIsPMRWritable)
+	{
+		PVR_DPF((PVR_DBG_ERROR, "%s: Write permission does not match! "
+		         "psFile->f_mode = 0x%x, "
+		         "uiFlags = 0x%" PVRSRV_MEMALLOCFLAGS_FMTSPEC,
+		         __func__,
+		         psFile->f_mode,
+		         uiFlags));
+		eError = PVRSRV_ERROR_INVALID_FLAGS;
+	}
+
+	return eError;
+}
+
 PVRSRV_ERROR
 PhysmemImportDmaBuf(CONNECTION_DATA *psConnection,
                     PVRSRV_DEVICE_NODE *psDevNode,
@@ -948,6 +1041,8 @@ PhysmemImportDmaBuf(CONNECTION_DATA *psConnection,
 	}
 
 	uiSize = psDmaBuf->size;
+	eError = ValidateDmaBufFdFlags(psDmaBuf->file, uiFlags);
+	PVR_LOG_GOTO_IF_ERROR(eError, "ValidateDmaBufFdFlags", errDmaBufPut);
 
 	eError = PhysmemImportSparseDmaBuf(psConnection,
 	                                 psDevNode,
@@ -963,6 +1058,7 @@ PhysmemImportDmaBuf(CONNECTION_DATA *psConnection,
 	                                 puiSize,
 	                                 puiAlign);
 
+errDmaBufPut:
 	dma_buf_put(psDmaBuf);
 
 	return eError;
diff --git a/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_extmem_linux.c b/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_extmem_linux.c
index 7de1200..c01fa32 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_extmem_linux.c
+++ b/drivers/gpu/img-rogue/23.2/services/server/env/linux/physmem_extmem_linux.c
@@ -955,6 +955,7 @@ PhysmemWrapExtMemOS(CONNECTION_DATA * psConnection,
 	PMR_WRAP_DATA *psPrivData;
 	PMR *psPMR;
 	IMG_UINT uiTotalNumPages = (uiSize >> PAGE_SHIFT);
+	IMG_BOOL bIsPMRDestroyed = IMG_FALSE;
 	IMG_UINT i = 0;
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0))
@@ -1055,10 +1056,14 @@ PhysmemWrapExtMemOS(CONNECTION_DATA * psConnection,
 	return PVRSRV_OK;
 e3:
 	PMRUnrefPMR(psPMR);
+	bIsPMRDestroyed = IMG_TRUE;
 e2:
 	OSFreeMem(pui32MappingTable);
 e1:
-	_WrapExtMemReleasePages(psPrivData);
+	if (!bIsPMRDestroyed)
+	{
+		(void)_WrapExtMemReleasePages(psPrivData);
+	}
 e0:
 	return eError;
 }
diff --git a/drivers/gpu/img-rogue/23.2/services/server/include/device.h b/drivers/gpu/img-rogue/23.2/services/server/include/device.h
index e7cce64..96dd315 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/include/device.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/include/device.h
@@ -69,6 +69,7 @@ typedef struct _PVRSRV_POWER_DEV_TAG_ *PPVRSRV_POWER_DEV;
 struct SYNC_RECORD;
 
 struct _CONNECTION_DATA_;
+struct _DEVMEMINT_CTX_;
 
 /*************************************************************************/ /*!
  @Function      AllocUFOBlockCallback
@@ -399,6 +400,8 @@ typedef struct _PVRSRV_DEVICE_NODE_
 
 	MMU_DEVICEATTRIBS* (*pfnGetMMUDeviceAttributes)(struct _PVRSRV_DEVICE_NODE_ *psDevNode, IMG_BOOL bKernelMemoryCtx);
 
+	PVRSRV_DEVICE_SNOOP_MODE (*pfnGetDeviceSnoopMode)(struct _PVRSRV_DEVICE_NODE_ *psDevNode);
+
 	PVRSRV_DEVICE_CONFIG	*psDevConfig;
 
 	/* device post-finalise compatibility check */
@@ -477,9 +480,13 @@ typedef struct _PVRSRV_DEVICE_NODE_
 	/* Functions for notification about memory contexts */
 	PVRSRV_ERROR			(*pfnRegisterMemoryContext)(struct _PVRSRV_DEVICE_NODE_	*psDeviceNode,
 														MMU_CONTEXT					*psMMUContext,
+														struct _DEVMEMINT_CTX_		*psDevMemCtx,
 														IMG_HANDLE					*hPrivData);
 	void					(*pfnUnregisterMemoryContext)(IMG_HANDLE hPrivData);
 
+	/* Functions for validation flags for exportable PMRs */
+	IMG_BOOL (*pfnValidateExportableFlags)(PVRSRV_MEMALLOCFLAGS_T uiFlags);
+
 	/* Functions for allocation/freeing of UFOs */
 	AllocUFOBlockCallback	pfnAllocUFOBlock;	/*!< Callback for allocation of a block of UFO memory */
 	FreeUFOBlockCallback	pfnFreeUFOBlock;	/*!< Callback for freeing of a block of UFO memory */
@@ -601,6 +608,9 @@ typedef struct _PVRSRV_DEVICE_NODE_
 	ATOMIC_T                iFreezeCount;         /*< Number of blocked on frozen tasks */
 	ATOMIC_T                iTotalFreezes;        /*< Total number of times device frozen */
 	ATOMIC_T                iThreadsActive;       /*< Number of threads active on this device */
+#if defined(PVRSRV_MAX_REAL_TIME_CONTEXTS) && (PVRSRV_MAX_REAL_TIME_CONTEXTS > 1)
+	IMG_UINT32              *pui32RTContextCount;
+#endif
 } PVRSRV_DEVICE_NODE;
 
 /*
diff --git a/drivers/gpu/img-rogue/23.2/services/server/include/devicemem_server.h b/drivers/gpu/img-rogue/23.2/services/server/include/devicemem_server.h
index 7bd8a78..f4c741d 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/include/devicemem_server.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/include/devicemem_server.h
@@ -144,6 +144,20 @@ PVRSRV_ERROR
 DevmemIntCtxDestroy(DEVMEMINT_CTX *psDevmemCtx);
 
 /*
+ * DevmemIntCtxRef()
+ *
+ * Increases the reference count on the given DEVMEMINT_CTX by one.
+ */
+PVRSRV_ERROR DevmemIntCtxRef(DEVMEMINT_CTX *psDevmemCtx);
+
+/*
+ * DevmemIntCtxUnref()
+ *
+ * Decreases the reference count on the given DEVMEMINT_CTX by one.
+ */
+void DevmemIntCtxUnref(DEVMEMINT_CTX *psDevmemCtx);
+
+/*
  * DevmemIntHeapCreate()
  *
  * Creates a new heap in this device memory context.  This will cause a call
@@ -172,6 +186,7 @@ DevmemIntHeapCreate(DEVMEMINT_CTX *psDevmemCtx,
                     IMG_DEV_VIRTADDR sHeapBaseAddr,
                     IMG_UINT32 uiLog2DataPageSize,
                     DEVMEMINT_HEAP **ppsDevmemHeapPtr);
+
 /*
  * DevmemIntHeapDestroy()
  *
diff --git a/drivers/gpu/img-rogue/23.2/services/server/include/pmr.h b/drivers/gpu/img-rogue/23.2/services/server/include/pmr.h
index e4d64ea..18c77b1 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/include/pmr.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/include/pmr.h
@@ -627,6 +627,9 @@ PMR_GetTypeStr(const PMR *psPMR);
 IMG_INT32
 PMR_GetRefCount(const PMR *psPMR);
 
+PVRSRV_ERROR
+PMR_IsExportable(const PMR *psPMR);
+
 /* PMR usage type for callers of PMR_DevPhysAddr() */
 typedef enum _PMR_USAGE_TYPE_
 {
@@ -683,6 +686,14 @@ PVRSRV_ERROR
 PMRGetUID(PMR *psPMR,
           IMG_UINT64 *pui64UID);
 
+#if defined(PVRSRV_ENABLE_GPU_MEMORY_INFO)
+/* PMRGetSerialNum()
+ *
+ * Used by procfs code to retrieve a PMR serial number
+ * */
+IMG_UINT64 PMRGetSerialNum(PMR *psPMR);
+#endif
+
 #if defined(SUPPORT_PMR_DEFERRED_FREE)
 /*
  * PMR_IsZombie()
@@ -722,6 +733,10 @@ void
 PMRReviveZombieAndRef(PMR *psPMR);
 #endif /* defined(SUPPORT_PMR_DEFERRED_FREE) */
 
+
+IMG_BOOL
+PMR_SetExclusiveUse(PMR *psPMR, IMG_BOOL bFlag);
+
 /*
  * PMR_ChangeSparseMemUnlocked()
  *
diff --git a/drivers/gpu/img-rogue/23.2/services/server/include/srvcore.h b/drivers/gpu/img-rogue/23.2/services/server/include/srvcore.h
index 3316593..cbf84e9 100644
--- a/drivers/gpu/img-rogue/23.2/services/server/include/srvcore.h
+++ b/drivers/gpu/img-rogue/23.2/services/server/include/srvcore.h
@@ -66,7 +66,7 @@ CopyToUserWrapper(CONNECTION_DATA *psConnection,
                   void *pvSrc,
                   IMG_UINT32 ui32Size);
 
-IMG_INT
+size_t
 DummyBW(IMG_UINT32 ui32DispatchTableEntry,
         IMG_UINT8 *psBridgeIn,
         IMG_UINT8 *psBridgeOut,
@@ -74,7 +74,7 @@ DummyBW(IMG_UINT32 ui32DispatchTableEntry,
 
 typedef PVRSRV_ERROR (*ServerResourceDestroyFunction)(IMG_HANDLE, IMG_HANDLE);
 
-typedef IMG_INT (*BridgeWrapperFunction)(IMG_UINT32 ui32DispatchTableEntry,
+typedef size_t (*BridgeWrapperFunction)(IMG_UINT32 ui32DispatchTableEntry,
 									 IMG_UINT8 *psBridgeIn,
 									 IMG_UINT8 *psBridgeOut,
 									 CONNECTION_DATA *psConnection);
diff --git a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmi_ioctl.c b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmi_ioctl.c
index c29cd68..e9b8ed7 100644
--- a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmi_ioctl.c
+++ b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmi_ioctl.c
@@ -34,31 +34,6 @@
 #define HDMI_DEVNAME "hdmitx"
 DEFINE_SEMAPHORE(hdmi_update_mutex);
 
-#define HDMI_EMIT_HDMISTATE_TYPE_STR(x)  (                            \
-	(x) == EMIT_HDMISTATE_EDID_I2C_ERROR  ? "EDID_I2C_ERROR" : \
-	(x) == EMIT_HDMISTATE_EDID_HEAD_ERROR  ? "EDID_HEAD_ERROR" : \
-	(x) == EMIT_HDMISTATE_EDID_CHECKSUM_ERROR  ? "EDID_CHECKSUM_ERROR" : \
-	(x) == EMIT_HDMISTATE_EDID_DVI_DEVICE  ? "EDID_DVI_DEVICE" : \
-	(x) == EMIT_HDMISTATE_EDID_HDMI_DEVICE  ? "EDID_HDMI_DEVICE" : \
-	(x) == EMIT_HDMISTATE_HDCP_SUCCESS  ? "HDCP_SUCCESS" : \
-	(x) == EMIT_HDMISTATE_HDCP_FAILURE  ? "HDCP_FAILURE" : \
-	(x) == EMIT_HDMISTATE_HDCP_R0_MISMATCH  ? "HDCP_R0_MISMATCH" : \
-	(x) == EMIT_HDMISTATE_HDCP_NO_14_KEY  ? "HDCP_NO_14_KEY" : \
-	(x) == EMIT_HDMISTATE_HDCP_NO_22_KEY  ? "HDCP_NO_22_KEY" : \
-	(x) == EMIT_HDMISTATE_HDCP_BKSV_ERROR  ? "HDCP_BKSV_ERROR" : \
-	(x) == EMIT_HDMISTATE_HDCP_V_PRIME_MISMATCH  ? "HDCP_V_PRIME_MISMATCH" : \
-	(x) == EMIT_HDMISTATE_HDCP_TOPOLOGY_ERROR  ? "HDCP_TOPOLOGY_ERROR" : \
-	(x) == EMIT_HDMISTATE_HDCP_REPEATER_DELAY_ERROR  ? "HDCP_REPEATER_DELAY_ERROR" : \
-	(x) == EMIT_HDMISTATE_HDCP_DEVICE_NOT_READY  ? "HDCP_DEVICE_NOT_READY" : \
-	(x) == EMIT_HDMISTATE_HDCP_I2C_ERROR  ? "HDCP_I2C_ERROR" : \
-	(x) == EMIT_HDMISTATE_HDCP_DISABLE  ? "HDCP_DISABLE" : \
-	(x) == EMIT_HDMISTATE_HDCP_HDCP1_ENABLE  ? "HDCP_HDCP1_ENABLE" : \
-	(x) == EMIT_HDMISTATE_HDCP_HDCP2_ENABLE  ? "HDCP_HDCP2_ENABLE" : \
-	(x) == EMIT_HDMISTATE_SCDC_CH0_ERROR  ? "SCDC_CH0_ERROR" : \
-	(x) == EMIT_HDMISTATE_SCDC_CH1_ERROR  ? "SCDC_CH1_ERROR" : \
-	(x) == EMIT_HDMISTATE_SCDC_CH2_ERROR  ? "SCDC_CH2_ERROR" : \
-	"Unknown")
-
 struct extcon_dev *hdmi_extcon;
 static const unsigned int hdmi_cable[] = {
 	EXTCON_DISP_HDMI,
@@ -1838,6 +1813,7 @@ unsigned int hdmi_common_buf_offset;
 static ssize_t hdmi_common_status_show(struct device *dev,
 	struct device_attribute *devattr, char *buf)
 {
+	hdmi_hdmistatus();
 	return snprintf(buf, sizeof(hdmi_common_status),
 		"%s\n", hdmi_common_status);
 }
diff --git a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmicec.c b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmicec.c
index 68432d5..ec953f1 100644
--- a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmicec.c
+++ b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmicec.c
@@ -2051,9 +2051,7 @@ void hdmi_cec_mainloop(unsigned char u1rxmode)
 
 	_CEC_TX_Queue_Loop(cec);
 
-	/* NOTE: the priority between tx and rx */
-	if (!IsCECStatus(STATE_TXING_FRAME))
-		CEC_rx_msg_notify(u1rxmode);
+	CEC_rx_msg_notify(u1rxmode);
 
 }
 
diff --git a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmictrl.c b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmictrl.c
index f98ef28..e0c2123 100644
--- a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmictrl.c
+++ b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/hdmictrl.c
@@ -2321,6 +2321,9 @@ void hdmi_hdmistatus(void)
 		u4Addr = u4Addr + 4;
 		u4Count = u4Count - 4;
 	}
+
+	vshow_hdmi_emitstate_status();
+
 	HDMI_COM_SPRINTF("End\n");
 }
 
@@ -6613,6 +6616,17 @@ void vshow_audio_status(void)
 		bReadByteHdmiGRL(AIP_STA00), bReadByteHdmiGRL(AIP_STA01));
 }
 
+void vshow_hdmi_emitstate_status(void)
+{
+	unsigned int i = 0;
+
+	/* dump hdmi_emitstate */
+	HDMI_COM_SPRINTF("Dump hdmi_emitstate Start\n");
+	for (i = 0; i < sizeof(hdmi_emitstate) / sizeof(hdmi_emitstate[0]); i++)
+		HDMI_COM_SPRINTF("%s = %d\n",
+				 HDMI_EMIT_HDMISTATE_TYPE_STR(i), hdmi_emitstate[i]);
+}
+
 void vcommon_status(char *str)
 {
 	int len;
diff --git a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/hdmictrl.h b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/hdmictrl.h
index d9ba265..71a41c0 100644
--- a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/hdmictrl.h
+++ b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/hdmictrl.h
@@ -3448,6 +3448,7 @@ extern void vcommon_status(char *str);
 void vshow_hdr_status(void);
 void vshow_hdmi21_status(void);
 void vshow_audio_status(void);
+void vshow_hdmi_emitstate_status(void);
 void vResetAudioHDMI(unsigned char bRst);
 void vResetVideoHDMI(unsigned char bRst);
 void vAudioPacketOff(unsigned char bOn);
diff --git a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/internal_hdmi_drv.h b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/internal_hdmi_drv.h
index 9850b9a..6e90371 100644
--- a/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/internal_hdmi_drv.h
+++ b/drivers/misc/mediatek/hdmi/hdmitx/mt8696/inc/internal_hdmi_drv.h
@@ -63,6 +63,31 @@ do { \
 	} \
 } while (0)
 
+#define HDMI_EMIT_HDMISTATE_TYPE_STR(x)  (                            \
+			(x) == EMIT_HDMISTATE_EDID_I2C_ERROR  ? "EDID_I2C_ERROR" : \
+			(x) == EMIT_HDMISTATE_EDID_HEAD_ERROR  ? "EDID_HEAD_ERROR" : \
+			(x) == EMIT_HDMISTATE_EDID_CHECKSUM_ERROR  ? "EDID_CHECKSUM_ERROR" : \
+			(x) == EMIT_HDMISTATE_EDID_DVI_DEVICE  ? "EDID_DVI_DEVICE" : \
+			(x) == EMIT_HDMISTATE_EDID_HDMI_DEVICE	? "EDID_HDMI_DEVICE" : \
+			(x) == EMIT_HDMISTATE_HDCP_SUCCESS	? "HDCP_SUCCESS" : \
+			(x) == EMIT_HDMISTATE_HDCP_FAILURE	? "HDCP_FAILURE" : \
+			(x) == EMIT_HDMISTATE_HDCP_R0_MISMATCH	? "HDCP_R0_MISMATCH" : \
+			(x) == EMIT_HDMISTATE_HDCP_NO_14_KEY  ? "HDCP_NO_14_KEY" : \
+			(x) == EMIT_HDMISTATE_HDCP_NO_22_KEY  ? "HDCP_NO_22_KEY" : \
+			(x) == EMIT_HDMISTATE_HDCP_BKSV_ERROR  ? "HDCP_BKSV_ERROR" : \
+			(x) == EMIT_HDMISTATE_HDCP_V_PRIME_MISMATCH  ? "HDCP_V_PRIME_MISMATCH" : \
+			(x) == EMIT_HDMISTATE_HDCP_TOPOLOGY_ERROR  ? "HDCP_TOPOLOGY_ERROR" : \
+			(x) == EMIT_HDMISTATE_HDCP_REPEATER_DELAY_ERROR  ? "HDCP_REPEATER_DELAY_ERROR" : \
+			(x) == EMIT_HDMISTATE_HDCP_DEVICE_NOT_READY  ? "HDCP_DEVICE_NOT_READY" : \
+			(x) == EMIT_HDMISTATE_HDCP_I2C_ERROR  ? "HDCP_I2C_ERROR" : \
+			(x) == EMIT_HDMISTATE_HDCP_DISABLE	? "HDCP_DISABLE" : \
+			(x) == EMIT_HDMISTATE_HDCP_HDCP1_ENABLE  ? "HDCP_HDCP1_ENABLE" : \
+			(x) == EMIT_HDMISTATE_HDCP_HDCP2_ENABLE  ? "HDCP_HDCP2_ENABLE" : \
+			(x) == EMIT_HDMISTATE_SCDC_CH0_ERROR  ? "SCDC_CH0_ERROR" : \
+			(x) == EMIT_HDMISTATE_SCDC_CH1_ERROR  ? "SCDC_CH1_ERROR" : \
+			(x) == EMIT_HDMISTATE_SCDC_CH2_ERROR  ? "SCDC_CH2_ERROR" : \
+			"Unknown")
+
 enum HDMI_TASK_COMMAND_TYPE_T {
 	HDMI_CEC_CMD = 0,
 	HDMI_PLUG_DETECT_CMD,
diff --git a/drivers/misc/mediatek/video/mt8696/dispsys/fg/disp_fg_if.c b/drivers/misc/mediatek/video/mt8696/dispsys/fg/disp_fg_if.c
index 366d4cf..b48f81c 100644
--- a/drivers/misc/mediatek/video/mt8696/dispsys/fg/disp_fg_if.c
+++ b/drivers/misc/mediatek/video/mt8696/dispsys/fg/disp_fg_if.c
@@ -340,7 +340,9 @@ void disp_fg_config(u32 fg_hw_id, struct mtk_av1_film_grain_params *fg_param)
 			 fg_param->ar_coeff_shift,
 			 fg_param->grain_scale_shift);
 
-		if (fg_param->update_grain)
+		if (!fg_param->apply_grain)
+			goto bypass_fg;
+		else if (fg_param->update_grain)
 			memcpy(param, fg_param,
 			       sizeof(struct mtk_av1_film_grain_params));
 		else
@@ -358,6 +360,10 @@ void disp_fg_config(u32 fg_hw_id, struct mtk_av1_film_grain_params *fg_param)
 		disp_adl_cfg_client_en(adl_tbl->client, 1, 0);
 		disp_filmg_config_adl_table(adl_tbl);
 	}
+
+	return;
+bypass_fg:
+	fg_hal_bypass(fg_hw_id, true);
 }
 
 /***************** driver ************/
diff --git a/drivers/misc/mediatek/vq/mtk_di_m2m.c b/drivers/misc/mediatek/vq/mtk_di_m2m.c
index 6d5237e..92bdfb1 100644
--- a/drivers/misc/mediatek/vq/mtk_di_m2m.c
+++ b/drivers/misc/mediatek/vq/mtk_di_m2m.c
@@ -252,6 +252,8 @@ static void mtk_di_m2m_job_finish(struct mtk_di_ctx *ctx, int vb_state)
 			dst_vbuf->flags |= to_vb2_v4l2_buffer(
 				ctx->s_buf[S_IDX_CURR((ctx->s_idx_next))].vb)->flags
 				& V4L2_BUF_FLAG_LAST;
+			dst_vbuf->vb2_buf.planes[0].bytesused =
+			to_vb2_v4l2_buffer(ctx->s_buf[S_IDX_CURR((ctx->s_idx_next))].vb)->planes[0].bytesused;
 
 			DI_INFO("%s timestamp[0x%llx] flag[0x%x]\n",
 				__func__, dst_vbuf->vb2_buf.timestamp, dst_vbuf->flags);
@@ -272,9 +274,9 @@ static void mtk_di_m2m_job_finish(struct mtk_di_ctx *ctx, int vb_state)
 	}
 #endif
 
-	if ((dst_vbuf && (V4L2_BUF_FLAG_LAST & dst_vbuf->flags)) ||
-		((ctx->stop_flag == 2) && (ctx->process_idx == 0U))) {
-
+	if ((((dst_vbuf && (V4L2_BUF_FLAG_LAST & dst_vbuf->flags)) ||
+	    (ctx->stop_flag == 2)) && (ctx->process_idx == 0U)) ||
+	    (dst_vbuf->vb2_buf.planes[0].bytesused == 0)) {
 		src_vbuf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
 		src_vb = &src_vbuf->vb2_buf;
 
@@ -700,7 +702,7 @@ static void mtk_di_m2m_worker(struct work_struct *work)
 		goto put_device;
 	}
 
-	DI_INFO("%s ok to get buf\n");
+	DI_INFO("%s ok to get buf\n", __func__);
 
 	if (!((0U ==
 	       to_vb2_v4l2_buffer(
@@ -1201,14 +1203,29 @@ static int mtk_di_m2m_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
 {
 	int ret;
 	struct mtk_di_ctx *ctx = fh_to_ctx(fh);
+	struct vb2_queue *vq = NULL;
+	struct vb2_buffer *vb = NULL;
 
 	DI_INFO("qbuf [%d %d %d %d] [%d %d %d %d] [%d %d %d %ld]\n",
 		buf->index, buf->type, buf->bytesused, buf->flags,
 		buf->field, buf->sequence, buf->memory, buf->length,
-		buf->m.planes->bytesused, buf->m.planes->data_offset,
+		buf->m.planes[0].bytesused, buf->m.planes->data_offset,
 		buf->m.planes->length, buf->m.planes->m.userptr);
 
 	ret = v4l2_m2m_qbuf(file, ctx->m2m_ctx, buf);
+	if ((ret == 0) && (buf->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)) {
+		vq = v4l2_m2m_get_vq(ctx->m2m_ctx, buf->type);
+		if (!vq) {
+			DI_ERR("vq is NULL\n");
+			return -EINVAL;
+		}
+		if (buf->index >= vq->num_buffers) {
+			DI_ERR("out of range\n");
+			return -EINVAL;
+		}
+		vb = vq->bufs[buf->index];
+		vb->planes[0].bytesused = buf->m.planes[0].bytesused;
+	}
 
 	return ret;
 }
@@ -1221,7 +1238,7 @@ static int mtk_di_m2m_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf
 	DI_INFO("dq [%d %d %d %d] [%d %d %d %d] [%d %d %d %ld]\n",
 		buf->index, buf->type, buf->bytesused, buf->flags,
 		buf->field, buf->sequence, buf->memory, buf->length,
-		buf->m.planes->bytesused, buf->m.planes->data_offset,
+		buf->m.planes[0].bytesused, buf->m.planes->data_offset,
 		buf->m.planes->length, buf->m.planes->m.userptr);
 
 	ret = v4l2_m2m_dqbuf(file, ctx->m2m_ctx, buf);
@@ -1293,6 +1310,7 @@ static int mtk_di_m2m_queue_init(void *priv,
 	src_di->buf_struct_size = (unsigned int)sizeof(struct v4l2_m2m_buffer);
 	src_di->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
 	src_di->dev = &ctx->di_dev->pdev->dev;
+	src_di->allow_zero_bytesused = 1;
 
 	ret = vb2_queue_init(src_di);
 	if (ret)
@@ -1307,6 +1325,7 @@ static int mtk_di_m2m_queue_init(void *priv,
 	dst_di->buf_struct_size = (unsigned int)sizeof(struct v4l2_m2m_buffer);
 	dst_di->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
 	dst_di->dev = &ctx->di_dev->pdev->dev;
+	dst_di->allow_zero_bytesused = 1;
 
 	return vb2_queue_init(dst_di);
 }
diff --git a/drivers/misc/mediatek/vq/mtk_di_util.h b/drivers/misc/mediatek/vq/mtk_di_util.h
index 9ba1b68..03c4bd4 100644
--- a/drivers/misc/mediatek/vq/mtk_di_util.h
+++ b/drivers/misc/mediatek/vq/mtk_di_util.h
@@ -34,7 +34,7 @@
 #include <linux/ioctl.h>
 
 /* some define for features switch */
-#define DI_DROP_ONE_FIELD               1
+#define DI_DROP_ONE_FIELD               0
 #define DI_REDUCE_REF                   0
 
 #define DI_MVA_MAP_VA                   0
diff --git a/mgk.bzl b/mgk.bzl
index 7bbfa7c..a8df7d8 100644
--- a/mgk.bzl
+++ b/mgk.bzl
@@ -20,6 +20,7 @@
 )
 load(
     "//build/kernel/kleaf:kernel.bzl",
+    "kernel_abi",
     "kernel_build",
     "kernel_build_config",
     "kernel_images",
@@ -37,8 +38,15 @@
 
     inputs = []
     system_dlkm_archive = None
-    kernel_images = ["boot.img", "boot-lz4.img", "boot-gz.img", "Image", "Image.lz4", "Image.gz",
-                     "vmlinux"]
+    kernel_images = [
+        "boot.img",
+        "boot-lz4.img",
+        "boot-gz.img",
+        "Image",
+        "Image.lz4",
+        "Image.gz",
+        "vmlinux",
+    ]
     gki_artifacts = kernel_images + ctx.attr.gki_modules
 
     for f in ctx.files.images:
@@ -163,7 +171,7 @@
 
     for module in gki_modules:
         name = paths.basename(module).removesuffix(".ko")
-        insmod_cfg_strs += ["modprobe|system {}".format(name)]
+        insmod_cfg_strs.append("modprobe|system {}".format(name))
 
     return insmod_cfg_strs
 
@@ -175,7 +183,6 @@
         dtbo_names,
         gki_modules,
         in_tree_modules,
-        in_tree_modules_discard,
         kleaf_modules,
         insmod_cfgs = None):
     """Generates rules for building the kernel artifacts for a device.
@@ -205,9 +212,6 @@
             should not include the GKI modules required for the device.
 
 
-        in_tree_modules_discard: A list of in-tree modules that will be built
-            but are not required for the device and should be discarded.
-
         kleaf_modules: A list of labels referring to additional external
             modules that are required for the device.
 
@@ -252,8 +256,8 @@
             "arch/arm64/configs/{}_defconfig".format(name),
         ],
         module_outs = in_tree_modules,
-        module_implicit_outs = in_tree_modules_discard,
         kconfig_ext = "Kconfig.ext",
+        kmi_symbol_list = "//{}:android/abi_gki_aarch64_mtkott".format(common_kernel_dir),
         dtstree = "//kernel_device_modules-5.15/arch/arm64/boot/dts/mediatek:{}.dt".format(dtb_name),
         make_goals = [
             "modules",
@@ -293,6 +297,14 @@
         }),
     )
 
+    kernel_abi(
+        name = "{}_abi".format(name),
+        kernel_build = ":{}".format(name),
+        kernel_modules = [":{}_ext_modules".format(name)],
+        kmi_symbol_list_add_only = True,
+        module_grouping = False,
+    )
+
     kernel_modules_install(
         name = "{}_modules_install".format(name),
         kernel_modules = [":{}_ext_modules".format(name)],
diff --git a/mgk_modules.bzl b/mgk_modules.bzl
index e91d884..6bbc58e 100644
--- a/mgk_modules.bzl
+++ b/mgk_modules.bzl
@@ -27,7 +27,3 @@
     "mm/zsmalloc.ko",
     "net/rfkill/rfkill.ko",
 ]
-
-mgk_implicit_module_out = [
-    "drivers/cpufreq/mediatek-cpufreq-hw.ko",
-]
diff --git a/scripts/update_gki_kernel.sh b/scripts/update_gki_kernel.sh
index 8da64bb..7da7bf3 100755
--- a/scripts/update_gki_kernel.sh
+++ b/scripts/update_gki_kernel.sh
@@ -33,6 +33,8 @@
 KERNEL_PATCHLEVEL=""
 KERNEL_SUBLEVEL=""
 AOSP_COMMIT_INFO=""
+KERNEL_HASH=""
+KERNEL_VERSION_LABEL=""
 
 MANIFEST_DIR="../.repo/manifests"
 SDK_MANIFEST="sdk_only.xml"
@@ -107,6 +109,8 @@
   KERNEL_SUBLEVEL=$(grep -r -m 1 "SUBLEVEL =" Makefile | \
                     sed 's/.*SUBLEVEL = //g')
   AOSP_COMMIT_INFO=$(git log --pretty=format:'%h %s' -1)
+  KERNEL_HASH=$(git log --pretty=format:'%h' -1)
+  KERNEL_VERSION_LABEL=$(git tag --contains ${KERNEL_HASH})
 
   popd > /dev/null
 }
@@ -138,7 +142,14 @@
 }
 
 function commit_and_push_manifest_update() {
-  local merge_msg=$(printf "Update ${AOSP_BRANCH} sync point to (${KERNEL_VERSION}.${KERNEL_PATCHLEVEL}.${KERNEL_SUBLEVEL})\n\nSync SHA:\n${AOSP_COMMIT_INFO}\n\nBug: ${GKI_UPDATE_BUG}")
+  local merge_msg=$(printf "%s\n%s\n%s\n%s\n%s\n%s"\
+  "Update sync point to ${KERNEL_VERSION_LABEL}(${KERNEL_VERSION}.${KERNEL_PATCHLEVEL}.${KERNEL_SUBLEVEL})"\
+  ""\
+  "Sync LOG:"\
+  "${AOSP_COMMIT_INFO}"\
+  ""\
+  "Bug: ${GKI_UPDATE_BUG}"\
+  )
 
   pushd ${MANIFEST_DIR} > /dev/null
 
@@ -160,7 +171,9 @@
   echo -e "KERNEL_VERSION = [${Green}${KERNEL_VERSION}${Color_Off}]"
   echo -e "KERNEL_PATCHLEVEL = [${Green}${KERNEL_PATCHLEVEL}${Color_Off}]"
   echo -e "KERNEL_SUBLEVEL = [${Green}${KERNEL_SUBLEVEL}${Color_Off}]"
-  echo -e "AOSP_COMMIT_INFO = [${Green}${AOSP_COMMIT_INFO}${Color_Off}]\n"
+  echo -e "AOSP_COMMIT_INFO = [${Green}${AOSP_COMMIT_INFO}${Color_Off}]"
+  echo -e "KERNEL_HASH = [${Green}${KERNEL_HASH}${Color_Off}]"
+  echo -e "KERNEL_VERSION_LABEL = [${Green}${KERNEL_VERSION_LABEL}${Color_Off}]\n"
 
   update_manifest_and_sync_gki_kernel
 
@@ -170,13 +183,49 @@
   echo -e "KERNEL_PATCHLEVEL = [${Green}${KERNEL_PATCHLEVEL}${Color_Off}]"
   echo -e "KERNEL_SUBLEVEL = [${Green}${KERNEL_SUBLEVEL}${Color_Off}]"
   echo -e "AOSP_COMMIT_INFO = [${Green}${AOSP_COMMIT_INFO}${Color_Off}]"
+  echo -e "KERNEL_HASH = [${Green}${KERNEL_HASH}${Color_Off}]"
+  echo -e "KERNEL_VERSION_LABEL = [${Green}${KERNEL_VERSION_LABEL}${Color_Off}]\n"
 
   commit_and_push_manifest_update
 }
 
+function get_boot_image_build_time_info() {
+  local ci_url="https://ci.android.com/builds/submitted/${BOOT_IMAGE_BUILDID}/kernel_aarch64/latest/raw/COPIED"
+  wget ${ci_url}
+  exit_if_error $? "Unable to download COPIED"
+
+  local date_regex="([0-9]{4})-([0-9]{2})-([0-9]{2})"
+
+  local raw_content=$(grep -E "$date_regex" "COPIED" | head -n 1)
+  exit_if_error $? "Date information not found in the file."
+
+  rm COPIED
+
+  # --- Search for the date using regex ---
+  if [[ "$raw_content" =~ $date_regex ]]; then
+      local extracted_year="${BASH_REMATCH[1]}"
+      local extracted_month="${BASH_REMATCH[2]}"
+      local extracted_day="${BASH_REMATCH[3]}"
+      echo "${extracted_year}-${extracted_month}-${extracted_day}"
+  else
+      echo "NA"
+  fi
+}
+
 function update_gki_prebuilts_id() {
   local current_build_id
-  local merge_msg=$(printf "Update the GKI prebuilt build ID to ab/${BOOT_IMAGE_BUILDID}\n\nUse GKI prebuilt binaries from ab/${BOOT_IMAGE_BUILDID}\n\nBug: ${GKI_UPDATE_BUG}")
+  local boot_image_build_date=$(get_boot_image_build_time_info)
+  local merge_msg=$(printf "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s" \
+    "Update the GKI prebuilt build ID to ${AOSP_BRANCH}-ab/${BOOT_IMAGE_BUILDID}" \
+    "" \
+    "Use GKI prebuilt binaries from ab/${BOOT_IMAGE_BUILDID}" \
+    "" \
+    "AOSP branch name: ${AOSP_BRANCH}" \
+    "Build ID: ab/${BOOT_IMAGE_BUILDID}" \
+    "Boot image build date: ${boot_image_build_date}" \
+    "" \
+    "Bug: ${GKI_UPDATE_BUG}" \
+  )
 
   echo -e "\n${Yellow}Updating GKI prebuilts build ID to: ${BOOT_IMAGE_BUILDID} with SHA: ${REV_NEW_AOSP} ...${Color_Off}"
 
diff --git a/scripts/update_symbol_list.sh b/scripts/update_symbol_list.sh
new file mode 100755
index 0000000..acaaa12
--- /dev/null
+++ b/scripts/update_symbol_list.sh
@@ -0,0 +1,156 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+#
+# Update the symbol list and prepare a suitable commit message for AOSP
+# submission.
+
+readonly GKI_KERNEL_DIR="kernel-5.15"
+readonly GKI_KERNEL_REMOTE="gaosp"
+readonly GKI_KERNEL_BRANCH=$(. ${GKI_KERNEL_DIR}/build.config.constants && echo ${BRANCH})
+readonly SYMBOL_LIST="android/abi_gki_aarch64_mtkott"
+readonly SYMBOL_LIST_NAME="mtkott"
+PREPARE_AOSP_SYMLIST="0"
+BUG=""
+COMMIT_TEXT=""
+ARGS=()
+
+function usage() {
+  cat <<- EOF
+    USAGE: $0 [-p|--prepare-aosp-symlist BUG_NUMBER]
+    -p | --prepare-aosp-symlist BUG_NUMBER   Update the AOSP symbol list in ${GKI_KERNEL_DIR}/
+                                             and create a commit with the provided BUG_NUMBER.
+EOF
+}
+
+# Add a trap to remove the temporary vmlinux in case of an error occurs before
+# we finish.
+function cleanup_trap() {
+  rm -f ${COMMIT_TEXT}
+  exit $1
+}
+trap 'cleanup_trap' EXIT
+
+function exit_if_error() {
+  if [[ $1 -ne 0 ]]; then
+    echo "ERROR: $2: retval=$1" >&2
+    exit $1
+  fi
+}
+
+function verify_aosp_tree {
+  if [[ "${PREPARE_AOSP_SYMLIST}" = "0" ]]; then
+    return
+  fi
+
+  pushd ${GKI_KERNEL_DIR} > /dev/null
+
+  if ! git diff --quiet HEAD; then
+    exit_if_error 1 \
+    "Found uncommitted changes in ${GKI_KERNEL_DIR}/. Commit your changes before updating the symbol list"
+  fi
+
+  popd > /dev/null
+}
+
+function make_symbol_list_commit_text() {
+  COMMIT_TEXT=$(mktemp -t symlist_commit_text.XXXXX)
+  echo "ANDROID: GKI: Update symbol list for ${SYMBOL_LIST_NAME}" > ${COMMIT_TEXT}
+  echo >> ${COMMIT_TEXT}
+  echo "Add required symbols for mtkott." >> ${COMMIT_TEXT}
+  echo >> ${COMMIT_TEXT}
+  echo "Bug: ${BUG}" >> ${COMMIT_TEXT}
+}
+
+function commit_symbol_list_update() {
+  make_symbol_list_commit_text
+
+  pushd ${GKI_KERNEL_DIR} > /dev/null
+
+  if ! git cat-file -e \
+          ${GKI_KERNEL_REMOTE}/${GKI_KERNEL_BRANCH}:${SYMBOL_LIST} \
+          > /dev/null 2>&1; then
+    git add ${SYMBOL_LIST}
+  fi
+
+  git commit --quiet -s -F ${COMMIT_TEXT} -- android/
+  rm -f ${COMMIT_TEXT}
+
+  local curr_commit=$(git rev-parse HEAD)
+
+  git fetch -q ${GKI_KERNEL_REMOTE} ${GKI_KERNEL_BRANCH}
+  git checkout -q ${GKI_KERNEL_REMOTE}/${GKI_KERNEL_BRANCH}
+  git cherry-pick ${curr_commit}
+
+  cat <<- EOF
+    ========================================================
+    An ABI commit in ${GKI_KERNEL_DIR}/ was created for you on the tip of the
+    development branch.
+
+    Please verify your commit(s) before pushing. Here are the steps to perform:
+
+    cd ${GKI_KERNEL_DIR}
+    git log --oneline HEAD
+    git push ${GKI_KERNEL_REMOTE} HEAD:refs/for/${GKI_KERNEL_BRANCH}
+
+    To return the core kernel tree to the previous commit, use:
+    git checkout ${curr_commit}
+EOF
+
+  popd > /dev/null
+}
+
+function update_aosp_symlist() {
+  local config_parameters="--config=kirkwood_64 --config=fast"
+  local build_target="//kernel_device_modules-5.15:kirkwood_64_abi_update_symbol_list"
+
+  tools/bazel run ${config_parameters} ${build_target}
+
+  echo "========================================================"
+  echo " The symbol list has been updated locally in ${GKI_KERNEL_DIR}/."
+  echo " Compiling with BUILD_GKI_KERNEL=1 is now required until"
+  echo " the new symbol(s) are merged."
+}
+
+function read_args() {
+  local next
+
+  while [[ $# -gt 0 ]]; do
+    next="$1"
+
+    case ${next} in
+      -p|--prepare-aosp-symlist)
+        PREPARE_AOSP_SYMLIST="1"
+        BUG="$2"
+        if ! [[ "${BUG}" =~ ^[0-9]+$ ]]; then
+          exit_if_error 1 "Bug numbers should be digits."
+        fi
+        shift
+        ;;
+      -h|--help)
+        usage
+        exit 0
+        ;;
+      *)
+        ARGS+=("$1")
+        ;;
+    esac
+    shift
+  done
+}
+
+read_args "$@"
+
+# read_args() will ensure to store any arguments that should be passed on
+# to the build scripts into the $ARGS array. However, this must be done
+# outside of read_args() to affect the positional arguments for the invocation
+# of this script, and not just the invocation of read_args().
+set -- "${ARGS[@]}"
+
+# Verify the aosp tree is in a good state before compiling anything
+verify_aosp_tree
+
+update_aosp_symlist
+
+if [[ "${PREPARE_AOSP_SYMLIST}" != "0" ]]; then
+  commit_symbol_list_update
+fi
