drm/i915: Detect invalid scanout pitches
Report back the user error of attempting to setup a CRTC with an invalid framebuffer pitch. This is trickier than it should be as on gen4, there is a restriction that tiled surfaces must have a stride less than 16k - which is less than the largest supported CRTC size. v2: Fix the limits for gen3 v3: Move check into intel_framebuffer_init() and fix VLV limits. (vsyrjala) v4: Use idiomatic '>=' for generation checks References: https://bugs.freedesktop.org/show_bug.cgi?id=65099 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Родитель
e4e9222d4b
Коммит
a35cdaa0e1
|
@ -9121,6 +9121,7 @@ int intel_framebuffer_init(struct drm_device *dev,
|
|||
struct drm_mode_fb_cmd2 *mode_cmd,
|
||||
struct drm_i915_gem_object *obj)
|
||||
{
|
||||
int pitch_limit;
|
||||
int ret;
|
||||
|
||||
if (obj->tiling_mode == I915_TILING_Y) {
|
||||
|
@ -9134,10 +9135,26 @@ int intel_framebuffer_init(struct drm_device *dev,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* FIXME <= Gen4 stride limits are bit unclear */
|
||||
if (mode_cmd->pitches[0] > 32768) {
|
||||
DRM_DEBUG("pitch (%d) must be at less than 32768\n",
|
||||
mode_cmd->pitches[0]);
|
||||
if (INTEL_INFO(dev)->gen >= 5 && !IS_VALLEYVIEW(dev)) {
|
||||
pitch_limit = 32*1024;
|
||||
} else if (INTEL_INFO(dev)->gen >= 4) {
|
||||
if (obj->tiling_mode)
|
||||
pitch_limit = 16*1024;
|
||||
else
|
||||
pitch_limit = 32*1024;
|
||||
} else if (INTEL_INFO(dev)->gen >= 3) {
|
||||
if (obj->tiling_mode)
|
||||
pitch_limit = 8*1024;
|
||||
else
|
||||
pitch_limit = 16*1024;
|
||||
} else
|
||||
/* XXX DSPC is limited to 4k tiled */
|
||||
pitch_limit = 8*1024;
|
||||
|
||||
if (mode_cmd->pitches[0] > pitch_limit) {
|
||||
DRM_DEBUG("%s pitch (%d) must be at less than %d\n",
|
||||
obj->tiling_mode ? "tiled" : "linear",
|
||||
mode_cmd->pitches[0], pitch_limit);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче