]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915: Lookup the memory region first in the BIOS FB takeover
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 13 Mar 2025 14:08:36 +0000 (16:08 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 1 Apr 2025 23:22:19 +0000 (02:22 +0300)
When doing the BIOS FB takeover let's look up the appropriate
memory region first. If it doesn't exist there's not much point
in doing the PTE read/etc either.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250313140838.29742-9-ville.syrjala@linux.intel.com
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
drivers/gpu/drm/i915/display/intel_plane_initial.c

index 5f75ef4ba3b14d34458fdeb56cfdef8ea87131cb..d522da7000ff0fb73c88981d1bb8860af65c50a5 100644 (file)
@@ -75,6 +75,15 @@ initial_plane_phys_lmem(struct intel_display *display,
        dma_addr_t dma_addr;
        u32 base;
 
+       mem_type = initial_plane_memory_type(i915);
+       mem = intel_memory_region_by_type(i915, mem_type);
+       if (!mem) {
+               drm_dbg_kms(display->drm,
+                           "Initial plane memory region (type %s) not initialized\n",
+                           intel_memory_type_str(mem_type));
+               return false;
+       }
+
        base = round_down(plane_config->base, I915_GTT_MIN_ALIGNMENT);
 
        dma_addr = intel_ggtt_read_entry(&ggtt->vm, base, &is_present, &is_local);
@@ -91,15 +100,6 @@ initial_plane_phys_lmem(struct intel_display *display,
                return false;
        }
 
-       mem_type = initial_plane_memory_type(i915);
-       mem = intel_memory_region_by_type(i915, mem_type);
-       if (!mem) {
-               drm_dbg_kms(display->drm,
-                           "Initial plane memory region (type %s) not initialized\n",
-                           intel_memory_type_str(mem_type));
-               return false;
-       }
-
        /*
         * On lmem we don't currently expect this to
         * ever be placed in the stolen portion.
@@ -133,6 +133,15 @@ initial_plane_phys_smem(struct intel_display *display,
        dma_addr_t dma_addr;
        u32 base;
 
+       mem_type = initial_plane_memory_type(i915);
+       mem = intel_memory_region_by_type(i915, mem_type);
+       if (!mem) {
+               drm_dbg_kms(display->drm,
+                           "Initial plane memory region (type %s) not initialized\n",
+                           intel_memory_type_str(mem_type));
+               return false;
+       }
+
        base = round_down(plane_config->base, I915_GTT_MIN_ALIGNMENT);
 
        dma_addr = intel_ggtt_read_entry(&ggtt->vm, base, &is_present, &is_local);
@@ -149,15 +158,6 @@ initial_plane_phys_smem(struct intel_display *display,
                return false;
        }
 
-       mem_type = initial_plane_memory_type(i915);
-       mem = intel_memory_region_by_type(i915, mem_type);
-       if (!mem) {
-               drm_dbg_kms(display->drm,
-                           "Initial plane memory region (type %s) not initialized\n",
-                           intel_memory_type_str(mem_type));
-               return false;
-       }
-
        if (dma_addr < mem->region.start || dma_addr > mem->region.end) {
                drm_err(display->drm,
                        "Initial plane programming using invalid range, dma_addr=%pa (%s [%pa-%pa])\n",