|
@@ -2371,13 +2371,19 @@ intel_alloc_plane_obj(struct intel_crtc *crtc,
|
|
|
struct drm_device *dev = crtc->base.dev;
|
|
struct drm_device *dev = crtc->base.dev;
|
|
|
struct drm_i915_gem_object *obj = NULL;
|
|
struct drm_i915_gem_object *obj = NULL;
|
|
|
struct drm_mode_fb_cmd2 mode_cmd = { 0 };
|
|
struct drm_mode_fb_cmd2 mode_cmd = { 0 };
|
|
|
- u32 base = plane_config->base;
|
|
|
|
|
|
|
+ u32 base_aligned = round_down(plane_config->base, PAGE_SIZE);
|
|
|
|
|
+ u32 size_aligned = round_up(plane_config->base + plane_config->size,
|
|
|
|
|
+ PAGE_SIZE);
|
|
|
|
|
+
|
|
|
|
|
+ size_aligned -= base_aligned;
|
|
|
|
|
|
|
|
if (plane_config->size == 0)
|
|
if (plane_config->size == 0)
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
- obj = i915_gem_object_create_stolen_for_preallocated(dev, base, base,
|
|
|
|
|
- plane_config->size);
|
|
|
|
|
|
|
+ obj = i915_gem_object_create_stolen_for_preallocated(dev,
|
|
|
|
|
+ base_aligned,
|
|
|
|
|
+ base_aligned,
|
|
|
|
|
+ size_aligned);
|
|
|
if (!obj)
|
|
if (!obj)
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
@@ -6636,7 +6642,7 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
|
|
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
|
|
plane_config->tiling);
|
|
plane_config->tiling);
|
|
|
|
|
|
|
|
- plane_config->size = PAGE_ALIGN(fb->pitches[0] * aligned_height);
|
|
|
|
|
|
|
+ plane_config->size = fb->pitches[0] * aligned_height;
|
|
|
|
|
|
|
|
DRM_DEBUG_KMS("pipe/plane %c/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
|
DRM_DEBUG_KMS("pipe/plane %c/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
|
|
pipe_name(pipe), plane, fb->width, fb->height,
|
|
pipe_name(pipe), plane, fb->width, fb->height,
|
|
@@ -7673,7 +7679,7 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc,
|
|
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
|
|
plane_config->tiling);
|
|
plane_config->tiling);
|
|
|
|
|
|
|
|
- plane_config->size = ALIGN(fb->pitches[0] * aligned_height, PAGE_SIZE);
|
|
|
|
|
|
|
+ plane_config->size = fb->pitches[0] * aligned_height;
|
|
|
|
|
|
|
|
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
|
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
|
|
pipe_name(pipe), fb->width, fb->height,
|
|
pipe_name(pipe), fb->width, fb->height,
|
|
@@ -7764,7 +7770,7 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc,
|
|
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
|
|
plane_config->tiling);
|
|
plane_config->tiling);
|
|
|
|
|
|
|
|
- plane_config->size = PAGE_ALIGN(fb->pitches[0] * aligned_height);
|
|
|
|
|
|
|
+ plane_config->size = fb->pitches[0] * aligned_height;
|
|
|
|
|
|
|
|
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
|
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
|
|
pipe_name(pipe), fb->width, fb->height,
|
|
pipe_name(pipe), fb->width, fb->height,
|