Correctly pick cache flags for cache-coherent memory

The MT8167 doesn't support cache snooping in the GPU, so use
DevmemCPUCacheMode to check whether cached memory requests need to be
downgraded to uncached.

Change-Id: I0ea06c2d0d924c372d014db5ff3e8f8f8e678a0c
diff --git a/services/server/env/fuchsia/physmem_osmem_fuchsia.cc b/services/server/env/fuchsia/physmem_osmem_fuchsia.cc
index a5bfe0c..ee16293 100644
--- a/services/server/env/fuchsia/physmem_osmem_fuchsia.cc
+++ b/services/server/env/fuchsia/physmem_osmem_fuchsia.cc
@@ -211,20 +211,34 @@
 	pmr->psDevNode = psDevNode;
 
 	pmr->buffer = magma::PlatformBuffer::Create(uiSize, pszAnnotation);
-	if (PVRSRV_CHECK_CPU_UNCACHED(uiFlags))
+	uint32_t cpu_cache_flags;
+	PVRSRV_ERROR eError;
+	eError = DevmemCPUCacheMode(psDevNode, uiFlags, &cpu_cache_flags);
+	if (eError != PVRSRV_OK)
+	{
+		return DRET(eError);
+	}
+	if (PVRSRV_CHECK_CPU_UNCACHED(cpu_cache_flags))
 	{
 		if (!pmr->buffer->SetCachePolicy(MAGMA_CACHE_POLICY_UNCACHED))
 		{
 			return DRET(PVRSRV_ERROR_OUT_OF_MEMORY);
 		}
 	}
-	if (PVRSRV_CHECK_CPU_WRITE_COMBINE(uiFlags))
+	else if (PVRSRV_CHECK_CPU_WRITE_COMBINE(cpu_cache_flags))
 	{
 		if (!pmr->buffer->SetCachePolicy(MAGMA_CACHE_POLICY_WRITE_COMBINING))
 		{
 			return DRET(PVRSRV_ERROR_OUT_OF_MEMORY);
 		}
 	}
+	else if (PVRSRV_CHECK_CPU_CACHE_CLEAN(uiFlags))
+	{
+		if (!pmr->buffer->CleanCache(0u, pmr->buffer->size(), true))
+		{
+			return DRET(PVRSRV_ERROR_OUT_OF_MEMORY);
+		}
+	}
 
 	PHYS_HEAP *psPhysHeap = psDevNode->apsPhysHeap[PVRSRV_DEVICE_PHYS_HEAP_CPU_LOCAL];
 	return PMRCreatePMR(psDevNode,