ret = xe_mmio_wait32_not(xe_root_tile_mmio(xe), pipe_frmtmstmp, ~0U, timestamp, 40000U, ×tamp, false); if (ret < 0)
drm_warn(&xe->drm, "waiting for early vblank failed with %i\n", ret);
}
/* * We don't currently expect this to ever be placed in the * stolen portion.
*/ if (phys_base >= xe_vram_region_usable_size(tile0->mem.vram)) {
drm_err(&xe->drm, "Initial plane programming using invalid range, phys_base=%pa\n",
&phys_base); return NULL;
}
drm_dbg(&xe->drm, "Using phys_base=%pa, based on initial plane programming\n",
&phys_base);
} else { struct ttm_resource_manager *stolen = ttm_manager_type(&xe->ttm, XE_PL_STOLEN);
if (!stolen) return NULL;
phys_base = base;
flags |= XE_BO_FLAG_STOLEN;
if (XE_WA(xe_root_mmio_gt(xe), 22019338487_display)) return NULL;
/* * If the FB is too big, just don't use it since fbdev is not very * important and we should probably use that space with FBC or other * features.
*/ if (IS_ENABLED(CONFIG_FRAMEBUFFER_CONSOLE) &&
plane_config->size * 2 >> PAGE_SHIFT >= stolen->size) return NULL;
}
switch (fb->modifier) { case DRM_FORMAT_MOD_LINEAR: case I915_FORMAT_MOD_X_TILED: case I915_FORMAT_MOD_Y_TILED: case I915_FORMAT_MOD_4_TILED: break; default:
drm_dbg_kms(&xe->drm, "Unsupported modifier for initial FB: 0x%llx\n",
fb->modifier); returnfalse;
}
/* * TODO: * Disable planes if get_initial_plane_config() failed. * Make sure things work if the surface base is not page aligned.
*/ if (!plane_config->fb) return;
nofb: /* * We've failed to reconstruct the BIOS FB. Current display state * indicates that the primary plane is visible, but has a NULL FB, * which will lead to problems later if we don't fix it up. The * simplest solution is to just disable the primary plane now and * pretend the BIOS never had it enabled.
*/
intel_plane_disable_noatomic(crtc, plane);
}
if (!to_intel_crtc_state(crtc->base.state)->uapi.active) continue;
/* * Note that reserving the BIOS fb up front prevents us * from stuffing other stolen allocations like the ring * on top. This prevents some ugliness at boot time, and * can even allow for smooth boot transitions if the BIOS * fb is large enough for the active pipe configuration.
*/
display->funcs.display->get_initial_plane_config(crtc, plane_config);
/* * If the fb is shared between multiple heads, we'll * just get the first one.
*/
intel_find_initial_plane_obj(crtc, plane_configs);
if (display->funcs.display->fixup_initial_plane_config(crtc, plane_config))
intel_plane_initial_vblank_wait(crtc);
plane_config_fini(plane_config);
}
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.