From: Boris Brezillon <[email protected]>

This refactors the VM map flags for FW sections into a new function
called section_vm_map_flags().
This comes in handly for future handling of protected FW sections
(type CSF_FW_BINARY_IFACE_ENTRY_PROT).

Signed-off-by: Boris Brezillon <[email protected]>
Co-developed-by: Ketil Johnsen <[email protected]>
Signed-off-by: Ketil Johnsen <[email protected]>

---

v4:
- First version of this change as a separate commit
---
 drivers/gpu/drm/panthor/panthor_fw.c | 44 ++++++++++++++++------------
 1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/panthor/panthor_fw.c 
b/drivers/gpu/drm/panthor/panthor_fw.c
index e639ffeac7a32..7b8c90b19f4fe 100644
--- a/drivers/gpu/drm/panthor/panthor_fw.c
+++ b/drivers/gpu/drm/panthor/panthor_fw.c
@@ -543,6 +543,31 @@ panthor_fw_alloc_suspend_buf_mem(struct panthor_device 
*ptdev, size_t size)
                                        "FW suspend buffer");
 }
 
+static u32 section_vm_map_flags(const struct panthor_fw_section *section)
+{
+       u32 cache_mode = section->flags &
+                        CSF_FW_BINARY_IFACE_ENTRY_CACHE_MODE_MASK;
+       u32 vm_map_flags = 0;
+
+       if (!(section->flags & CSF_FW_BINARY_IFACE_ENTRY_WR))
+               vm_map_flags |= DRM_PANTHOR_VM_BIND_OP_MAP_READONLY;
+
+       if (!(section->flags & CSF_FW_BINARY_IFACE_ENTRY_EX))
+               vm_map_flags |= DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC;
+
+       /* TODO: CSF_FW_BINARY_IFACE_ENTRY_CACHE_MODE_*_COHERENT are mapped to
+        * non-cacheable for now. We might want to introduce a new
+        * IOMMU_xxx flag (or abuse IOMMU_MMIO, which maps to device
+        * memory and is currently not used by our driver) for
+        * AS_MEMATTR_AARCH64_SHARED memory, so we can take benefit
+        * of IO-coherent systems.
+        */
+       if (cache_mode != CSF_FW_BINARY_IFACE_ENTRY_CACHE_MODE_CACHED)
+               vm_map_flags |= DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED;
+
+       return vm_map_flags;
+}
+
 static int panthor_fw_load_section_entry(struct panthor_device *ptdev,
                                         const struct firmware *fw,
                                         struct panthor_fw_binary_iter *iter,
@@ -645,26 +670,9 @@ static int panthor_fw_load_section_entry(struct 
panthor_device *ptdev,
        }
 
        if (section_size) {
-               u32 cache_mode = hdr.flags & 
CSF_FW_BINARY_IFACE_ENTRY_CACHE_MODE_MASK;
-               u32 vm_map_flags = 0;
+               u32 vm_map_flags = section_vm_map_flags(section);
                u64 va = hdr.va.start;
 
-               if (!(hdr.flags & CSF_FW_BINARY_IFACE_ENTRY_WR))
-                       vm_map_flags |= DRM_PANTHOR_VM_BIND_OP_MAP_READONLY;
-
-               if (!(hdr.flags & CSF_FW_BINARY_IFACE_ENTRY_EX))
-                       vm_map_flags |= DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC;
-
-               /* TODO: CSF_FW_BINARY_IFACE_ENTRY_CACHE_MODE_*_COHERENT are 
mapped to
-                * non-cacheable for now. We might want to introduce a new
-                * IOMMU_xxx flag (or abuse IOMMU_MMIO, which maps to device
-                * memory and is currently not used by our driver) for
-                * AS_MEMATTR_AARCH64_SHARED memory, so we can take benefit
-                * of IO-coherent systems.
-                */
-               if (cache_mode != CSF_FW_BINARY_IFACE_ENTRY_CACHE_MODE_CACHED)
-                       vm_map_flags |= DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED;
-
                section->mem = panthor_kernel_bo_create(ptdev, 
panthor_fw_vm(ptdev),
                                                        section_size,
                                                        DRM_PANTHOR_BO_NO_MMAP,
-- 
2.43.0

Reply via email to