Project import generated by Copybara.

GitOrigin-RevId: 5918e1975c72738f6a3aacdef5c90d1d9ab535d5
Change-Id: Ia0840b6513ea1e8123ab9703af5dfc281529e848
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