From: Ville Syrjälä Date: Thu, 13 Mar 2025 14:08:36 +0000 (+0200) Subject: drm/i915: Lookup the memory region first in the BIOS FB takeover X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a47720c545065aef972fba78c50bf1bdc6f89d02;p=linux.git drm/i915: Lookup the memory region first in the BIOS FB takeover 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ä Link: https://patchwork.freedesktop.org/patch/msgid/20250313140838.29742-9-ville.syrjala@linux.intel.com Reviewed-by: Jouni Högander --- diff --git a/drivers/gpu/drm/i915/display/intel_plane_initial.c b/drivers/gpu/drm/i915/display/intel_plane_initial.c index 5f75ef4ba3b1..d522da7000ff 100644 --- a/drivers/gpu/drm/i915/display/intel_plane_initial.c +++ b/drivers/gpu/drm/i915/display/intel_plane_initial.c @@ -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",