@@ -74,13 +74,19 @@ static const uint32_t gen4_primary_formats[] = {
DRM_FORMAT_VYUY,
};
-
-static const uint32_t skl_primary_formats[] = {
- COMMON_PRIMARY_FORMATS, \
- DRM_FORMAT_XBGR8888,
+static uint32_t skl_plane_formats[] = {
+ DRM_FORMAT_C8,
+ DRM_FORMAT_RGB565,
DRM_FORMAT_ABGR8888,
- DRM_FORMAT_XRGB2101010,
+ DRM_FORMAT_ARGB8888,
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_XRGB8888,
DRM_FORMAT_XBGR2101010,
+ DRM_FORMAT_XRGB2101010,
+ DRM_FORMAT_YUYV,
+ DRM_FORMAT_YVYU,
+ DRM_FORMAT_UYVY,
+ DRM_FORMAT_VYUY,
};
/* Cursor formats */
@@ -2503,6 +2509,13 @@ static int i9xx_format_to_fourcc(int format)
}
}
+void skl_plane_get_formats(int pipe, int plane,
+ const uint32_t **formats, int *n_formats)
+{
+ *formats = skl_plane_formats;
+ *n_formats = ARRAY_SIZE(skl_plane_formats);
+}
+
static int skl_format_to_fourcc(int format, bool rgb_order, bool alpha)
{
switch (format) {
@@ -13301,8 +13314,8 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
primary->plane = !pipe;
if (INTEL_INFO(dev)->gen >= 9) {
- intel_primary_formats = skl_primary_formats;
- num_formats = ARRAY_SIZE(skl_primary_formats);
+ skl_plane_get_formats(pipe, 0,
+ &intel_primary_formats, &num_formats);
} else if (INTEL_INFO(dev)->gen >= 4) {
intel_primary_formats = gen4_primary_formats;
num_formats = ARRAY_SIZE(gen4_primary_formats);
@@ -1143,6 +1143,8 @@ int skl_max_scale(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state);
unsigned long intel_plane_obj_offset(struct intel_plane *intel_plane,
struct drm_i915_gem_object *obj);
+void skl_plane_get_formats(int pipe, int plane,
+ const uint32_t **formats, int *n_formats);
u32 skl_plane_ctl_format(uint32_t pixel_format);
u32 skl_plane_ctl_tiling(uint64_t fb_modifier);
u32 skl_plane_ctl_rotation(unsigned int rotation);
@@ -1083,21 +1083,6 @@ static uint32_t vlv_plane_formats[] = {
DRM_FORMAT_VYUY,
};
-static uint32_t skl_plane_formats[] = {
- DRM_FORMAT_C8,
- DRM_FORMAT_RGB565,
- DRM_FORMAT_ABGR8888,
- DRM_FORMAT_ARGB8888,
- DRM_FORMAT_XBGR8888,
- DRM_FORMAT_XRGB8888,
- DRM_FORMAT_XBGR2101010,
- DRM_FORMAT_XRGB2101010,
- DRM_FORMAT_YUYV,
- DRM_FORMAT_YVYU,
- DRM_FORMAT_UYVY,
- DRM_FORMAT_VYUY,
-};
-
int
intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
{
@@ -1169,8 +1154,9 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
intel_plane->disable_plane = skl_disable_plane;
state->scaler_id = -1;
- plane_formats = skl_plane_formats;
- num_plane_formats = ARRAY_SIZE(skl_plane_formats);
+ /* plane + 1 because plane is the sprite number here */
+ skl_plane_get_formats(pipe, plane + 1,
+ &plane_formats, &num_plane_formats);
break;
default:
kfree(intel_plane);
We can have a single function returns the list of formats. It's rather simple for now but will be augmented with the NV12 work. Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> --- drivers/gpu/drm/i915/intel_display.c | 27 ++++++++++++++++++++------- drivers/gpu/drm/i915/intel_drv.h | 2 ++ drivers/gpu/drm/i915/intel_sprite.c | 20 +++----------------- 3 files changed, 25 insertions(+), 24 deletions(-)