Merge tag 'drm-misc-next-2018-06-21' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next for 4.19: UAPI Changes: - Add writeback connector (Brian Starkey/Liviu Dudau) - Add "content type" property to HDMI connectors (Stanislav Lisovskiy) Cross-subsystem Changes: - some devicetree Docs update - fix compile breakage on ION due to the dma-buf cleanups (Christian König) Core Changes: - Reject over-sized allocation requests early (Chris Wilson) - gem-fb-helper: Always do implicit sync (Daniel Vetter) - dma-buf cleanups (Christian König) Driver Changes: - Fixes for the otm8009a panel driver (Philippe Cornu) - Add Innolux TV123WAM panel driver support (Sandeep Panda) - Move GEM BO to drm_framebuffer in few drivers (Daniel Stone) - i915 pinning improvements (Chris Wilson) - Stop consulting plane->fb/crtc in a few drivers (Ville Syrjälä) Signed-off-by: Dave Airlie <airlied@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180621105428.GA20795@juma
This commit is contained in:
@@ -1241,8 +1241,17 @@ static const uint64_t skl_plane_format_modifiers_ccs[] = {
|
||||
DRM_FORMAT_MOD_INVALID
|
||||
};
|
||||
|
||||
static bool g4x_mod_supported(uint32_t format, uint64_t modifier)
|
||||
static bool g4x_sprite_format_mod_supported(struct drm_plane *_plane,
|
||||
u32 format, u64 modifier)
|
||||
{
|
||||
switch (modifier) {
|
||||
case DRM_FORMAT_MOD_LINEAR:
|
||||
case I915_FORMAT_MOD_X_TILED:
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (format) {
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
case DRM_FORMAT_YUYV:
|
||||
@@ -1258,8 +1267,17 @@ static bool g4x_mod_supported(uint32_t format, uint64_t modifier)
|
||||
}
|
||||
}
|
||||
|
||||
static bool snb_mod_supported(uint32_t format, uint64_t modifier)
|
||||
static bool snb_sprite_format_mod_supported(struct drm_plane *_plane,
|
||||
u32 format, u64 modifier)
|
||||
{
|
||||
switch (modifier) {
|
||||
case DRM_FORMAT_MOD_LINEAR:
|
||||
case I915_FORMAT_MOD_X_TILED:
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (format) {
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
case DRM_FORMAT_XBGR8888:
|
||||
@@ -1276,8 +1294,17 @@ static bool snb_mod_supported(uint32_t format, uint64_t modifier)
|
||||
}
|
||||
}
|
||||
|
||||
static bool vlv_mod_supported(uint32_t format, uint64_t modifier)
|
||||
static bool vlv_sprite_format_mod_supported(struct drm_plane *_plane,
|
||||
u32 format, u64 modifier)
|
||||
{
|
||||
switch (modifier) {
|
||||
case DRM_FORMAT_MOD_LINEAR:
|
||||
case I915_FORMAT_MOD_X_TILED:
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (format) {
|
||||
case DRM_FORMAT_RGB565:
|
||||
case DRM_FORMAT_ABGR8888:
|
||||
@@ -1299,8 +1326,26 @@ static bool vlv_mod_supported(uint32_t format, uint64_t modifier)
|
||||
}
|
||||
}
|
||||
|
||||
static bool skl_mod_supported(uint32_t format, uint64_t modifier)
|
||||
static bool skl_plane_format_mod_supported(struct drm_plane *_plane,
|
||||
u32 format, u64 modifier)
|
||||
{
|
||||
struct intel_plane *plane = to_intel_plane(_plane);
|
||||
|
||||
switch (modifier) {
|
||||
case DRM_FORMAT_MOD_LINEAR:
|
||||
case I915_FORMAT_MOD_X_TILED:
|
||||
case I915_FORMAT_MOD_Y_TILED:
|
||||
case I915_FORMAT_MOD_Yf_TILED:
|
||||
break;
|
||||
case I915_FORMAT_MOD_Y_TILED_CCS:
|
||||
case I915_FORMAT_MOD_Yf_TILED_CCS:
|
||||
if (!plane->has_ccs)
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (format) {
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
case DRM_FORMAT_XBGR8888:
|
||||
@@ -1332,30 +1377,7 @@ static bool skl_mod_supported(uint32_t format, uint64_t modifier)
|
||||
}
|
||||
}
|
||||
|
||||
static bool intel_sprite_plane_format_mod_supported(struct drm_plane *plane,
|
||||
uint32_t format,
|
||||
uint64_t modifier)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(plane->dev);
|
||||
|
||||
if (WARN_ON(modifier == DRM_FORMAT_MOD_INVALID))
|
||||
return false;
|
||||
|
||||
if ((modifier >> 56) != DRM_FORMAT_MOD_VENDOR_INTEL &&
|
||||
modifier != DRM_FORMAT_MOD_LINEAR)
|
||||
return false;
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 9)
|
||||
return skl_mod_supported(format, modifier);
|
||||
else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
|
||||
return vlv_mod_supported(format, modifier);
|
||||
else if (INTEL_GEN(dev_priv) >= 6)
|
||||
return snb_mod_supported(format, modifier);
|
||||
else
|
||||
return g4x_mod_supported(format, modifier);
|
||||
}
|
||||
|
||||
static const struct drm_plane_funcs intel_sprite_plane_funcs = {
|
||||
static const struct drm_plane_funcs g4x_sprite_funcs = {
|
||||
.update_plane = drm_atomic_helper_update_plane,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
.destroy = intel_plane_destroy,
|
||||
@@ -1363,7 +1385,40 @@ static const struct drm_plane_funcs intel_sprite_plane_funcs = {
|
||||
.atomic_set_property = intel_plane_atomic_set_property,
|
||||
.atomic_duplicate_state = intel_plane_duplicate_state,
|
||||
.atomic_destroy_state = intel_plane_destroy_state,
|
||||
.format_mod_supported = intel_sprite_plane_format_mod_supported,
|
||||
.format_mod_supported = g4x_sprite_format_mod_supported,
|
||||
};
|
||||
|
||||
static const struct drm_plane_funcs snb_sprite_funcs = {
|
||||
.update_plane = drm_atomic_helper_update_plane,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
.destroy = intel_plane_destroy,
|
||||
.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,
|
||||
.format_mod_supported = snb_sprite_format_mod_supported,
|
||||
};
|
||||
|
||||
static const struct drm_plane_funcs vlv_sprite_funcs = {
|
||||
.update_plane = drm_atomic_helper_update_plane,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
.destroy = intel_plane_destroy,
|
||||
.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,
|
||||
.format_mod_supported = vlv_sprite_format_mod_supported,
|
||||
};
|
||||
|
||||
static const struct drm_plane_funcs skl_plane_funcs = {
|
||||
.update_plane = drm_atomic_helper_update_plane,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
.destroy = intel_plane_destroy,
|
||||
.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,
|
||||
.format_mod_supported = skl_plane_format_mod_supported,
|
||||
};
|
||||
|
||||
bool skl_plane_has_ccs(struct drm_i915_private *dev_priv,
|
||||
@@ -1389,6 +1444,7 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
{
|
||||
struct intel_plane *intel_plane = NULL;
|
||||
struct intel_plane_state *state = NULL;
|
||||
const struct drm_plane_funcs *plane_funcs;
|
||||
unsigned long possible_crtcs;
|
||||
const uint32_t *plane_formats;
|
||||
const uint64_t *modifiers;
|
||||
@@ -1413,6 +1469,9 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
intel_plane->can_scale = true;
|
||||
state->scaler_id = -1;
|
||||
|
||||
intel_plane->has_ccs = skl_plane_has_ccs(dev_priv, pipe,
|
||||
PLANE_SPRITE0 + plane);
|
||||
|
||||
intel_plane->update_plane = skl_update_plane;
|
||||
intel_plane->disable_plane = skl_disable_plane;
|
||||
intel_plane->get_hw_state = skl_plane_get_hw_state;
|
||||
@@ -1426,10 +1485,12 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
num_plane_formats = ARRAY_SIZE(skl_plane_formats);
|
||||
}
|
||||
|
||||
if (skl_plane_has_ccs(dev_priv, pipe, PLANE_SPRITE0 + plane))
|
||||
if (intel_plane->has_ccs)
|
||||
modifiers = skl_plane_format_modifiers_ccs;
|
||||
else
|
||||
modifiers = skl_plane_format_modifiers_noccs;
|
||||
|
||||
plane_funcs = &skl_plane_funcs;
|
||||
} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
|
||||
intel_plane->can_scale = false;
|
||||
intel_plane->max_downscale = 1;
|
||||
@@ -1441,6 +1502,8 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
plane_formats = vlv_plane_formats;
|
||||
num_plane_formats = ARRAY_SIZE(vlv_plane_formats);
|
||||
modifiers = i9xx_plane_format_modifiers;
|
||||
|
||||
plane_funcs = &vlv_sprite_funcs;
|
||||
} else if (INTEL_GEN(dev_priv) >= 7) {
|
||||
if (IS_IVYBRIDGE(dev_priv)) {
|
||||
intel_plane->can_scale = true;
|
||||
@@ -1457,6 +1520,8 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
plane_formats = snb_plane_formats;
|
||||
num_plane_formats = ARRAY_SIZE(snb_plane_formats);
|
||||
modifiers = i9xx_plane_format_modifiers;
|
||||
|
||||
plane_funcs = &snb_sprite_funcs;
|
||||
} else {
|
||||
intel_plane->can_scale = true;
|
||||
intel_plane->max_downscale = 16;
|
||||
@@ -1469,9 +1534,13 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
if (IS_GEN6(dev_priv)) {
|
||||
plane_formats = snb_plane_formats;
|
||||
num_plane_formats = ARRAY_SIZE(snb_plane_formats);
|
||||
|
||||
plane_funcs = &snb_sprite_funcs;
|
||||
} else {
|
||||
plane_formats = g4x_plane_formats;
|
||||
num_plane_formats = ARRAY_SIZE(g4x_plane_formats);
|
||||
|
||||
plane_funcs = &g4x_sprite_funcs;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1498,14 +1567,14 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 9)
|
||||
ret = drm_universal_plane_init(&dev_priv->drm, &intel_plane->base,
|
||||
possible_crtcs, &intel_sprite_plane_funcs,
|
||||
possible_crtcs, plane_funcs,
|
||||
plane_formats, num_plane_formats,
|
||||
modifiers,
|
||||
DRM_PLANE_TYPE_OVERLAY,
|
||||
"plane %d%c", plane + 2, pipe_name(pipe));
|
||||
else
|
||||
ret = drm_universal_plane_init(&dev_priv->drm, &intel_plane->base,
|
||||
possible_crtcs, &intel_sprite_plane_funcs,
|
||||
possible_crtcs, plane_funcs,
|
||||
plane_formats, num_plane_formats,
|
||||
modifiers,
|
||||
DRM_PLANE_TYPE_OVERLAY,
|
||||
|
Reference in New Issue
Block a user