@@ -209,7 +209,7 @@ ivb_get_colorkey(struct drm_plane *plane, struct drm_intel_sprite_colorkey *key)
209
209
}
210
210
211
211
static void
212
- snb_update_plane (struct drm_plane * plane , struct drm_framebuffer * fb ,
212
+ ilk_update_plane (struct drm_plane * plane , struct drm_framebuffer * fb ,
213
213
struct drm_i915_gem_object * obj , int crtc_x , int crtc_y ,
214
214
unsigned int crtc_w , unsigned int crtc_h ,
215
215
uint32_t x , uint32_t y ,
@@ -263,8 +263,8 @@ snb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
263
263
if (obj -> tiling_mode != I915_TILING_NONE )
264
264
dvscntr |= DVS_TILED ;
265
265
266
- /* must disable */
267
- dvscntr |= DVS_TRICKLE_FEED_DISABLE ;
266
+ if ( IS_GEN6 ( dev ))
267
+ dvscntr |= DVS_TRICKLE_FEED_DISABLE ; /* must disable */
268
268
dvscntr |= DVS_ENABLE ;
269
269
270
270
/* Sizes are 0 based */
@@ -296,7 +296,7 @@ snb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
296
296
}
297
297
298
298
static void
299
- snb_disable_plane (struct drm_plane * plane )
299
+ ilk_disable_plane (struct drm_plane * plane )
300
300
{
301
301
struct drm_device * dev = plane -> dev ;
302
302
struct drm_i915_private * dev_priv = dev -> dev_private ;
@@ -334,7 +334,7 @@ intel_disable_primary(struct drm_crtc *crtc)
334
334
}
335
335
336
336
static int
337
- snb_update_colorkey (struct drm_plane * plane ,
337
+ ilk_update_colorkey (struct drm_plane * plane ,
338
338
struct drm_intel_sprite_colorkey * key )
339
339
{
340
340
struct drm_device * dev = plane -> dev ;
@@ -363,7 +363,7 @@ snb_update_colorkey(struct drm_plane *plane,
363
363
}
364
364
365
365
static void
366
- snb_get_colorkey (struct drm_plane * plane , struct drm_intel_sprite_colorkey * key )
366
+ ilk_get_colorkey (struct drm_plane * plane , struct drm_intel_sprite_colorkey * key )
367
367
{
368
368
struct drm_device * dev = plane -> dev ;
369
369
struct drm_i915_private * dev_priv = dev -> dev_private ;
@@ -617,6 +617,14 @@ static const struct drm_plane_funcs intel_plane_funcs = {
617
617
.destroy = intel_destroy_plane ,
618
618
};
619
619
620
+ static uint32_t ilk_plane_formats [] = {
621
+ DRM_FORMAT_XRGB8888 ,
622
+ DRM_FORMAT_YUYV ,
623
+ DRM_FORMAT_YVYU ,
624
+ DRM_FORMAT_UYVY ,
625
+ DRM_FORMAT_VYUY ,
626
+ };
627
+
620
628
static uint32_t snb_plane_formats [] = {
621
629
DRM_FORMAT_XBGR8888 ,
622
630
DRM_FORMAT_XRGB8888 ,
@@ -631,34 +639,56 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
631
639
{
632
640
struct intel_plane * intel_plane ;
633
641
unsigned long possible_crtcs ;
642
+ const uint32_t * plane_formats ;
643
+ int num_plane_formats ;
634
644
int ret ;
635
645
636
- if (!( IS_GEN6 ( dev ) || IS_GEN7 ( dev )) )
646
+ if (INTEL_INFO ( dev )-> gen < 5 )
637
647
return - ENODEV ;
638
648
639
649
intel_plane = kzalloc (sizeof (struct intel_plane ), GFP_KERNEL );
640
650
if (!intel_plane )
641
651
return - ENOMEM ;
642
652
643
- if (IS_GEN6 (dev )) {
653
+ switch (INTEL_INFO (dev )-> gen ) {
654
+ case 5 :
655
+ case 6 :
644
656
intel_plane -> max_downscale = 16 ;
645
- intel_plane -> update_plane = snb_update_plane ;
646
- intel_plane -> disable_plane = snb_disable_plane ;
647
- intel_plane -> update_colorkey = snb_update_colorkey ;
648
- intel_plane -> get_colorkey = snb_get_colorkey ;
649
- } else if (IS_GEN7 (dev )) {
657
+ intel_plane -> update_plane = ilk_update_plane ;
658
+ intel_plane -> disable_plane = ilk_disable_plane ;
659
+ intel_plane -> update_colorkey = ilk_update_colorkey ;
660
+ intel_plane -> get_colorkey = ilk_get_colorkey ;
661
+
662
+ if (IS_GEN6 (dev )) {
663
+ plane_formats = snb_plane_formats ;
664
+ num_plane_formats = ARRAY_SIZE (snb_plane_formats );
665
+ } else {
666
+ plane_formats = ilk_plane_formats ;
667
+ num_plane_formats = ARRAY_SIZE (ilk_plane_formats );
668
+ }
669
+ break ;
670
+
671
+ case 7 :
650
672
intel_plane -> max_downscale = 2 ;
651
673
intel_plane -> update_plane = ivb_update_plane ;
652
674
intel_plane -> disable_plane = ivb_disable_plane ;
653
675
intel_plane -> update_colorkey = ivb_update_colorkey ;
654
676
intel_plane -> get_colorkey = ivb_get_colorkey ;
677
+
678
+ plane_formats = snb_plane_formats ;
679
+ num_plane_formats = ARRAY_SIZE (snb_plane_formats );
680
+ break ;
681
+
682
+ default :
683
+ return - ENODEV ;
655
684
}
656
685
657
686
intel_plane -> pipe = pipe ;
658
687
possible_crtcs = (1 << pipe );
659
688
ret = drm_plane_init (dev , & intel_plane -> base , possible_crtcs ,
660
- & intel_plane_funcs , snb_plane_formats ,
661
- ARRAY_SIZE (snb_plane_formats ), false);
689
+ & intel_plane_funcs ,
690
+ plane_formats , num_plane_formats ,
691
+ false);
662
692
if (ret )
663
693
kfree (intel_plane );
664
694
0 commit comments