Merge tag 'drm-misc-next-2016-12-30' of git://anongit.freedesktop.org/git/drm-misc into drm-intel-next-queued
Directly merge drm-misc into drm-intel since Dave is on vacation and we need the various drm-misc patches (fb format rework, drm mm fixes, selftest framework and others). Also pulled back -rc2 in first to resync with drm-intel-fixes and make sure I can reuse the exact rerere solutions from drm-tip for safety, and because I'm lazy. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
This commit is contained in:
@@ -2275,7 +2275,7 @@ u32 intel_fb_xy_to_linear(int x, int y,
|
||||
int plane)
|
||||
{
|
||||
const struct drm_framebuffer *fb = state->base.fb;
|
||||
unsigned int cpp = drm_format_plane_cpp(fb->pixel_format, plane);
|
||||
unsigned int cpp = fb->format->cpp[plane];
|
||||
unsigned int pitch = fb->pitches[plane];
|
||||
|
||||
return y * pitch + x * cpp;
|
||||
@@ -2344,7 +2344,7 @@ static u32 intel_adjust_tile_offset(int *x, int *y,
|
||||
{
|
||||
const struct drm_i915_private *dev_priv = to_i915(state->base.plane->dev);
|
||||
const struct drm_framebuffer *fb = state->base.fb;
|
||||
unsigned int cpp = drm_format_plane_cpp(fb->pixel_format, plane);
|
||||
unsigned int cpp = fb->format->cpp[plane];
|
||||
unsigned int rotation = state->base.rotation;
|
||||
unsigned int pitch = intel_fb_pitch(fb, plane, rotation);
|
||||
|
||||
@@ -2400,7 +2400,7 @@ static u32 _intel_compute_tile_offset(const struct drm_i915_private *dev_priv,
|
||||
u32 alignment)
|
||||
{
|
||||
uint64_t fb_modifier = fb->modifier;
|
||||
unsigned int cpp = drm_format_plane_cpp(fb->pixel_format, plane);
|
||||
unsigned int cpp = fb->format->cpp[plane];
|
||||
u32 offset, offset_aligned;
|
||||
|
||||
if (alignment)
|
||||
@@ -2455,7 +2455,7 @@ u32 intel_compute_tile_offset(int *x, int *y,
|
||||
u32 alignment;
|
||||
|
||||
/* AUX_DIST needs only 4K alignment */
|
||||
if (fb->pixel_format == DRM_FORMAT_NV12 && plane == 1)
|
||||
if (fb->format->format == DRM_FORMAT_NV12 && plane == 1)
|
||||
alignment = 4096;
|
||||
else
|
||||
alignment = intel_surf_alignment(dev_priv, fb->modifier);
|
||||
@@ -2468,7 +2468,7 @@ u32 intel_compute_tile_offset(int *x, int *y,
|
||||
static void intel_fb_offset_to_xy(int *x, int *y,
|
||||
const struct drm_framebuffer *fb, int plane)
|
||||
{
|
||||
unsigned int cpp = drm_format_plane_cpp(fb->pixel_format, plane);
|
||||
unsigned int cpp = fb->format->cpp[plane];
|
||||
unsigned int pitch = fb->pitches[plane];
|
||||
u32 linear_offset = fb->offsets[plane];
|
||||
|
||||
@@ -2496,8 +2496,7 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv,
|
||||
struct intel_rotation_info *rot_info = &intel_fb->rot_info;
|
||||
u32 gtt_offset_rotated = 0;
|
||||
unsigned int max_size = 0;
|
||||
uint32_t format = fb->pixel_format;
|
||||
int i, num_planes = drm_format_num_planes(format);
|
||||
int i, num_planes = fb->format->num_planes;
|
||||
unsigned int tile_size = intel_tile_size(dev_priv);
|
||||
|
||||
for (i = 0; i < num_planes; i++) {
|
||||
@@ -2506,9 +2505,9 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv,
|
||||
u32 offset;
|
||||
int x, y;
|
||||
|
||||
cpp = drm_format_plane_cpp(format, i);
|
||||
width = drm_format_plane_width(fb->width, format, i);
|
||||
height = drm_format_plane_height(fb->height, format, i);
|
||||
cpp = fb->format->cpp[i];
|
||||
width = drm_framebuffer_plane_width(fb->width, fb, i);
|
||||
height = drm_framebuffer_plane_height(fb->height, fb, i);
|
||||
|
||||
intel_fb_offset_to_xy(&x, &y, fb, i);
|
||||
|
||||
@@ -2701,7 +2700,7 @@ intel_alloc_initial_plane_obj(struct intel_crtc *crtc,
|
||||
if (plane_config->tiling == I915_TILING_X)
|
||||
obj->tiling_and_stride = fb->pitches[0] | I915_TILING_X;
|
||||
|
||||
mode_cmd.pixel_format = fb->pixel_format;
|
||||
mode_cmd.pixel_format = fb->format->format;
|
||||
mode_cmd.width = fb->width;
|
||||
mode_cmd.height = fb->height;
|
||||
mode_cmd.pitches[0] = fb->pitches[0];
|
||||
@@ -2833,7 +2832,7 @@ valid_fb:
|
||||
static int skl_max_plane_width(const struct drm_framebuffer *fb, int plane,
|
||||
unsigned int rotation)
|
||||
{
|
||||
int cpp = drm_format_plane_cpp(fb->pixel_format, plane);
|
||||
int cpp = fb->format->cpp[plane];
|
||||
|
||||
switch (fb->modifier) {
|
||||
case DRM_FORMAT_MOD_NONE:
|
||||
@@ -2912,7 +2911,7 @@ static int skl_check_main_surface(struct intel_plane_state *plane_state)
|
||||
* TODO: linear and Y-tiled seem fine, Yf untested,
|
||||
*/
|
||||
if (fb->modifier == I915_FORMAT_MOD_X_TILED) {
|
||||
int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
|
||||
int cpp = fb->format->cpp[0];
|
||||
|
||||
while ((x + w) * cpp > fb->pitches[0]) {
|
||||
if (offset == 0) {
|
||||
@@ -2977,7 +2976,7 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state)
|
||||
* Handle the AUX surface first since
|
||||
* the main surface setup depends on it.
|
||||
*/
|
||||
if (fb->pixel_format == DRM_FORMAT_NV12) {
|
||||
if (fb->format->format == DRM_FORMAT_NV12) {
|
||||
ret = skl_check_nv12_aux_surface(plane_state);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -3032,7 +3031,7 @@ static void i9xx_update_primary_plane(struct drm_plane *primary,
|
||||
I915_WRITE(PRIMCNSTALPHA(plane), 0);
|
||||
}
|
||||
|
||||
switch (fb->pixel_format) {
|
||||
switch (fb->format->format) {
|
||||
case DRM_FORMAT_C8:
|
||||
dspcntr |= DISPPLANE_8BPP;
|
||||
break;
|
||||
@@ -3147,7 +3146,7 @@ static void ironlake_update_primary_plane(struct drm_plane *primary,
|
||||
if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
|
||||
dspcntr |= DISPPLANE_PIPE_CSC_ENABLE;
|
||||
|
||||
switch (fb->pixel_format) {
|
||||
switch (fb->format->format) {
|
||||
case DRM_FORMAT_C8:
|
||||
dspcntr |= DISPPLANE_8BPP;
|
||||
break;
|
||||
@@ -3278,12 +3277,12 @@ u32 skl_plane_stride(const struct drm_framebuffer *fb, int plane,
|
||||
* linear buffers or in number of tiles for tiled buffers.
|
||||
*/
|
||||
if (drm_rotation_90_or_270(rotation)) {
|
||||
int cpp = drm_format_plane_cpp(fb->pixel_format, plane);
|
||||
int cpp = fb->format->cpp[plane];
|
||||
|
||||
stride /= intel_tile_height(dev_priv, fb->modifier, cpp);
|
||||
} else {
|
||||
stride /= intel_fb_stride_alignment(dev_priv, fb->modifier,
|
||||
fb->pixel_format);
|
||||
fb->format->format);
|
||||
}
|
||||
|
||||
return stride;
|
||||
@@ -3398,7 +3397,7 @@ static void skylake_update_primary_plane(struct drm_plane *plane,
|
||||
PLANE_CTL_PIPE_GAMMA_ENABLE |
|
||||
PLANE_CTL_PIPE_CSC_ENABLE;
|
||||
|
||||
plane_ctl |= skl_plane_ctl_format(fb->pixel_format);
|
||||
plane_ctl |= skl_plane_ctl_format(fb->format->format);
|
||||
plane_ctl |= skl_plane_ctl_tiling(fb->modifier);
|
||||
plane_ctl |= PLANE_CTL_PLANE_GAMMA_DISABLE;
|
||||
plane_ctl |= skl_plane_ctl_rotation(rotation);
|
||||
@@ -4769,7 +4768,7 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state,
|
||||
}
|
||||
|
||||
/* Check src format */
|
||||
switch (fb->pixel_format) {
|
||||
switch (fb->format->format) {
|
||||
case DRM_FORMAT_RGB565:
|
||||
case DRM_FORMAT_XBGR8888:
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
@@ -4785,7 +4784,7 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state,
|
||||
default:
|
||||
DRM_DEBUG_KMS("[PLANE:%d:%s] FB:%d unsupported scaling format 0x%x\n",
|
||||
intel_plane->base.base.id, intel_plane->base.name,
|
||||
fb->base.id, fb->pixel_format);
|
||||
fb->base.id, fb->format->format);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -8743,6 +8742,8 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
|
||||
fb = &intel_fb->base;
|
||||
|
||||
fb->dev = dev;
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 4) {
|
||||
if (val & DISPPLANE_TILED) {
|
||||
plane_config->tiling = I915_TILING_X;
|
||||
@@ -8752,8 +8753,7 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
|
||||
pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
|
||||
fourcc = i9xx_format_to_fourcc(pixel_format);
|
||||
fb->pixel_format = fourcc;
|
||||
fb->bits_per_pixel = drm_format_plane_cpp(fourcc, 0) * 8;
|
||||
fb->format = drm_format_info(fourcc);
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 4) {
|
||||
if (plane_config->tiling)
|
||||
@@ -8774,14 +8774,14 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
fb->pitches[0] = val & 0xffffffc0;
|
||||
|
||||
aligned_height = intel_fb_align_height(dev, fb->height,
|
||||
fb->pixel_format,
|
||||
fb->format->format,
|
||||
fb->modifier);
|
||||
|
||||
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",
|
||||
pipe_name(pipe), plane, fb->width, fb->height,
|
||||
fb->bits_per_pixel, base, fb->pitches[0],
|
||||
fb->format->cpp[0] * 8, base, fb->pitches[0],
|
||||
plane_config->size);
|
||||
|
||||
plane_config->fb = intel_fb;
|
||||
@@ -9768,6 +9768,8 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
|
||||
fb = &intel_fb->base;
|
||||
|
||||
fb->dev = dev;
|
||||
|
||||
val = I915_READ(PLANE_CTL(pipe, 0));
|
||||
if (!(val & PLANE_CTL_ENABLE))
|
||||
goto error;
|
||||
@@ -9776,8 +9778,7 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
fourcc = skl_format_to_fourcc(pixel_format,
|
||||
val & PLANE_CTL_ORDER_RGBX,
|
||||
val & PLANE_CTL_ALPHA_MASK);
|
||||
fb->pixel_format = fourcc;
|
||||
fb->bits_per_pixel = drm_format_plane_cpp(fourcc, 0) * 8;
|
||||
fb->format = drm_format_info(fourcc);
|
||||
|
||||
tiling = val & PLANE_CTL_TILED_MASK;
|
||||
switch (tiling) {
|
||||
@@ -9810,18 +9811,18 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
|
||||
val = I915_READ(PLANE_STRIDE(pipe, 0));
|
||||
stride_mult = intel_fb_stride_alignment(dev_priv, fb->modifier,
|
||||
fb->pixel_format);
|
||||
fb->format->format);
|
||||
fb->pitches[0] = (val & 0x3ff) * stride_mult;
|
||||
|
||||
aligned_height = intel_fb_align_height(dev, fb->height,
|
||||
fb->pixel_format,
|
||||
fb->format->format,
|
||||
fb->modifier);
|
||||
|
||||
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",
|
||||
pipe_name(pipe), fb->width, fb->height,
|
||||
fb->bits_per_pixel, base, fb->pitches[0],
|
||||
fb->format->cpp[0] * 8, base, fb->pitches[0],
|
||||
plane_config->size);
|
||||
|
||||
plane_config->fb = intel_fb;
|
||||
@@ -9880,6 +9881,8 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
|
||||
fb = &intel_fb->base;
|
||||
|
||||
fb->dev = dev;
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 4) {
|
||||
if (val & DISPPLANE_TILED) {
|
||||
plane_config->tiling = I915_TILING_X;
|
||||
@@ -9889,8 +9892,7 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
|
||||
pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
|
||||
fourcc = i9xx_format_to_fourcc(pixel_format);
|
||||
fb->pixel_format = fourcc;
|
||||
fb->bits_per_pixel = drm_format_plane_cpp(fourcc, 0) * 8;
|
||||
fb->format = drm_format_info(fourcc);
|
||||
|
||||
base = I915_READ(DSPSURF(pipe)) & 0xfffff000;
|
||||
if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
|
||||
@@ -9911,14 +9913,14 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||
fb->pitches[0] = val & 0xffffffc0;
|
||||
|
||||
aligned_height = intel_fb_align_height(dev, fb->height,
|
||||
fb->pixel_format,
|
||||
fb->format->format,
|
||||
fb->modifier);
|
||||
|
||||
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",
|
||||
pipe_name(pipe), fb->width, fb->height,
|
||||
fb->bits_per_pixel, base, fb->pitches[0],
|
||||
fb->format->cpp[0] * 8, base, fb->pitches[0],
|
||||
plane_config->size);
|
||||
|
||||
plane_config->fb = intel_fb;
|
||||
@@ -11075,7 +11077,7 @@ mode_fits_in_fbdev(struct drm_device *dev,
|
||||
|
||||
fb = &dev_priv->fbdev->fb->base;
|
||||
if (fb->pitches[0] < intel_framebuffer_pitch_for_width(mode->hdisplay,
|
||||
fb->bits_per_pixel))
|
||||
fb->format->cpp[0] * 8))
|
||||
return NULL;
|
||||
|
||||
if (obj->base.size < mode->vdisplay * fb->pitches[0])
|
||||
@@ -12177,7 +12179,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
|
||||
return -EBUSY;
|
||||
|
||||
/* Can't change pixel format via MI display flips. */
|
||||
if (fb->pixel_format != crtc->primary->fb->pixel_format)
|
||||
if (fb->format != crtc->primary->fb->format)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
@@ -12843,7 +12845,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
|
||||
DRM_DEBUG_KMS("[PLANE:%d:%s] FB:%d, fb = %ux%u format = %s\n",
|
||||
plane->base.id, plane->name,
|
||||
fb->base.id, fb->width, fb->height,
|
||||
drm_get_format_name(fb->pixel_format, &format_name));
|
||||
drm_get_format_name(fb->format->format, &format_name));
|
||||
if (INTEL_GEN(dev_priv) >= 9)
|
||||
DRM_DEBUG_KMS("\tscaler:%d src %dx%d+%d+%d dst %dx%d+%d+%d\n",
|
||||
state->scaler_id,
|
||||
@@ -14998,6 +15000,136 @@ const struct drm_plane_funcs intel_plane_funcs = {
|
||||
.atomic_destroy_state = intel_plane_destroy_state,
|
||||
};
|
||||
|
||||
static int
|
||||
intel_legacy_cursor_update(struct drm_plane *plane,
|
||||
struct drm_crtc *crtc,
|
||||
struct drm_framebuffer *fb,
|
||||
int crtc_x, int crtc_y,
|
||||
unsigned int crtc_w, unsigned int crtc_h,
|
||||
uint32_t src_x, uint32_t src_y,
|
||||
uint32_t src_w, uint32_t src_h)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->dev);
|
||||
int ret;
|
||||
struct drm_plane_state *old_plane_state, *new_plane_state;
|
||||
struct intel_plane *intel_plane = to_intel_plane(plane);
|
||||
struct drm_framebuffer *old_fb;
|
||||
struct drm_crtc_state *crtc_state = crtc->state;
|
||||
|
||||
/*
|
||||
* When crtc is inactive or there is a modeset pending,
|
||||
* wait for it to complete in the slowpath
|
||||
*/
|
||||
if (!crtc_state->active || needs_modeset(crtc_state) ||
|
||||
to_intel_crtc_state(crtc_state)->update_pipe)
|
||||
goto slow;
|
||||
|
||||
old_plane_state = plane->state;
|
||||
|
||||
/*
|
||||
* If any parameters change that may affect watermarks,
|
||||
* take the slowpath. Only changing fb or position should be
|
||||
* in the fastpath.
|
||||
*/
|
||||
if (old_plane_state->crtc != crtc ||
|
||||
old_plane_state->src_w != src_w ||
|
||||
old_plane_state->src_h != src_h ||
|
||||
old_plane_state->crtc_w != crtc_w ||
|
||||
old_plane_state->crtc_h != crtc_h ||
|
||||
!old_plane_state->visible ||
|
||||
old_plane_state->fb->modifier != fb->modifier)
|
||||
goto slow;
|
||||
|
||||
new_plane_state = intel_plane_duplicate_state(plane);
|
||||
if (!new_plane_state)
|
||||
return -ENOMEM;
|
||||
|
||||
drm_atomic_set_fb_for_plane(new_plane_state, fb);
|
||||
|
||||
new_plane_state->src_x = src_x;
|
||||
new_plane_state->src_y = src_y;
|
||||
new_plane_state->src_w = src_w;
|
||||
new_plane_state->src_h = src_h;
|
||||
new_plane_state->crtc_x = crtc_x;
|
||||
new_plane_state->crtc_y = crtc_y;
|
||||
new_plane_state->crtc_w = crtc_w;
|
||||
new_plane_state->crtc_h = crtc_h;
|
||||
|
||||
ret = intel_plane_atomic_check_with_state(to_intel_crtc_state(crtc->state),
|
||||
to_intel_plane_state(new_plane_state));
|
||||
if (ret)
|
||||
goto out_free;
|
||||
|
||||
/* Visibility changed, must take slowpath. */
|
||||
if (!new_plane_state->visible)
|
||||
goto slow_free;
|
||||
|
||||
ret = mutex_lock_interruptible(&dev_priv->drm.struct_mutex);
|
||||
if (ret)
|
||||
goto out_free;
|
||||
|
||||
if (INTEL_INFO(dev_priv)->cursor_needs_physical) {
|
||||
int align = IS_I830(dev_priv) ? 16 * 1024 : 256;
|
||||
|
||||
ret = i915_gem_object_attach_phys(intel_fb_obj(fb), align);
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("failed to attach phys object\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
} else {
|
||||
struct i915_vma *vma;
|
||||
|
||||
vma = intel_pin_and_fence_fb_obj(fb, new_plane_state->rotation);
|
||||
if (IS_ERR(vma)) {
|
||||
DRM_DEBUG_KMS("failed to pin object\n");
|
||||
|
||||
ret = PTR_ERR(vma);
|
||||
goto out_unlock;
|
||||
}
|
||||
}
|
||||
|
||||
old_fb = old_plane_state->fb;
|
||||
|
||||
i915_gem_track_fb(intel_fb_obj(old_fb), intel_fb_obj(fb),
|
||||
intel_plane->frontbuffer_bit);
|
||||
|
||||
/* Swap plane state */
|
||||
new_plane_state->fence = old_plane_state->fence;
|
||||
*to_intel_plane_state(old_plane_state) = *to_intel_plane_state(new_plane_state);
|
||||
new_plane_state->fence = NULL;
|
||||
new_plane_state->fb = old_fb;
|
||||
|
||||
intel_plane->update_plane(plane,
|
||||
to_intel_crtc_state(crtc->state),
|
||||
to_intel_plane_state(plane->state));
|
||||
|
||||
intel_cleanup_plane_fb(plane, new_plane_state);
|
||||
|
||||
out_unlock:
|
||||
mutex_unlock(&dev_priv->drm.struct_mutex);
|
||||
out_free:
|
||||
intel_plane_destroy_state(plane, new_plane_state);
|
||||
return ret;
|
||||
|
||||
slow_free:
|
||||
intel_plane_destroy_state(plane, new_plane_state);
|
||||
slow:
|
||||
return drm_atomic_helper_update_plane(plane, crtc, fb,
|
||||
crtc_x, crtc_y, crtc_w, crtc_h,
|
||||
src_x, src_y, src_w, src_h);
|
||||
}
|
||||
|
||||
static const struct drm_plane_funcs intel_cursor_plane_funcs = {
|
||||
.update_plane = intel_legacy_cursor_update,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
.destroy = intel_plane_destroy,
|
||||
.set_property = drm_atomic_helper_plane_set_property,
|
||||
.atomic_get_property = intel_plane_atomic_get_property,
|
||||
.atomic_set_property = intel_plane_atomic_set_property,
|
||||
.atomic_duplicate_state = intel_plane_duplicate_state,
|
||||
.atomic_destroy_state = intel_plane_destroy_state,
|
||||
};
|
||||
|
||||
static struct intel_plane *
|
||||
intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
|
||||
{
|
||||
@@ -15244,7 +15376,7 @@ intel_cursor_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
|
||||
cursor->disable_plane = intel_disable_cursor_plane;
|
||||
|
||||
ret = drm_universal_plane_init(&dev_priv->drm, &cursor->base,
|
||||
0, &intel_plane_funcs,
|
||||
0, &intel_cursor_plane_funcs,
|
||||
intel_cursor_formats,
|
||||
ARRAY_SIZE(intel_cursor_formats),
|
||||
DRM_PLANE_TYPE_CURSOR,
|
||||
@@ -15924,7 +16056,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
|
||||
if (mode_cmd->offsets[0] != 0)
|
||||
return -EINVAL;
|
||||
|
||||
drm_helper_mode_fill_fb_struct(&intel_fb->base, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, &intel_fb->base, mode_cmd);
|
||||
intel_fb->obj = obj;
|
||||
|
||||
ret = intel_fill_fb_info(dev_priv, &intel_fb->base);
|
||||
|
Reference in New Issue
Block a user