Lines Matching +full:display +full:- +full:pipe

51 static char sprite_name(struct intel_display *display, enum pipe pipe, int sprite)  in sprite_name()  argument
53 return pipe * DISPLAY_RUNTIME_INFO(display)->num_sprites[pipe] + sprite + 'A'; in sprite_name()
69 struct intel_display *display = to_intel_display(plane_state); in chv_sprite_update_csc() local
70 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in chv_sprite_update_csc()
71 const struct drm_framebuffer *fb = plane_state->hw.fb; in chv_sprite_update_csc()
72 enum plane_id plane_id = plane->id; in chv_sprite_update_csc()
84 /* BT.601 full range YCbCr -> full range RGB */ in chv_sprite_update_csc()
87 -2925, 4096, -1410, in chv_sprite_update_csc()
90 /* BT.709 full range YCbCr -> full range RGB */ in chv_sprite_update_csc()
93 -1917, 4096, -767, in chv_sprite_update_csc()
97 const s16 *csc = csc_matrix[plane_state->hw.color_encoding]; in chv_sprite_update_csc()
100 if (!fb->format->is_yuv) in chv_sprite_update_csc()
103 intel_de_write_fw(display, SPCSCYGOFF(plane_id), in chv_sprite_update_csc()
105 intel_de_write_fw(display, SPCSCCBOFF(plane_id), in chv_sprite_update_csc()
107 intel_de_write_fw(display, SPCSCCROFF(plane_id), in chv_sprite_update_csc()
110 intel_de_write_fw(display, SPCSCC01(plane_id), in chv_sprite_update_csc()
112 intel_de_write_fw(display, SPCSCC23(plane_id), in chv_sprite_update_csc()
114 intel_de_write_fw(display, SPCSCC45(plane_id), in chv_sprite_update_csc()
116 intel_de_write_fw(display, SPCSCC67(plane_id), in chv_sprite_update_csc()
118 intel_de_write_fw(display, SPCSCC8(plane_id), SPCSC_C0(csc[8])); in chv_sprite_update_csc()
120 intel_de_write_fw(display, SPCSCYGICLAMP(plane_id), in chv_sprite_update_csc()
122 intel_de_write_fw(display, SPCSCCBICLAMP(plane_id), in chv_sprite_update_csc()
123 SPCSC_IMAX(512) | SPCSC_IMIN(-512)); in chv_sprite_update_csc()
124 intel_de_write_fw(display, SPCSCCRICLAMP(plane_id), in chv_sprite_update_csc()
125 SPCSC_IMAX(512) | SPCSC_IMIN(-512)); in chv_sprite_update_csc()
127 intel_de_write_fw(display, SPCSCYGOCLAMP(plane_id), in chv_sprite_update_csc()
129 intel_de_write_fw(display, SPCSCCBOCLAMP(plane_id), in chv_sprite_update_csc()
131 intel_de_write_fw(display, SPCSCCROCLAMP(plane_id), in chv_sprite_update_csc()
141 struct intel_display *display = to_intel_display(plane_state); in vlv_sprite_update_clrc() local
142 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in vlv_sprite_update_clrc()
143 const struct drm_framebuffer *fb = plane_state->hw.fb; in vlv_sprite_update_clrc()
144 enum pipe pipe = plane->pipe; in vlv_sprite_update_clrc() local
145 enum plane_id plane_id = plane->id; in vlv_sprite_update_clrc()
148 if (fb->format->is_yuv && in vlv_sprite_update_clrc()
149 plane_state->hw.color_range == DRM_COLOR_YCBCR_LIMITED_RANGE) { in vlv_sprite_update_clrc()
156 contrast = DIV_ROUND_CLOSEST(255 << 6, 235 - 16); in vlv_sprite_update_clrc()
157 brightness = -DIV_ROUND_CLOSEST(16 * 255, 235 - 16); in vlv_sprite_update_clrc()
158 sh_scale = DIV_ROUND_CLOSEST(128 << 7, 240 - 128); in vlv_sprite_update_clrc()
162 /* Pass-through everything. */ in vlv_sprite_update_clrc()
171 intel_de_write_fw(display, SPCLRC0(pipe, plane_id), in vlv_sprite_update_clrc()
173 intel_de_write_fw(display, SPCLRC1(pipe, plane_id), in vlv_sprite_update_clrc()
182 u8 active_planes = crtc_state->active_planes & ~BIT(PLANE_CURSOR); in vlv_plane_ratio()
183 const struct drm_framebuffer *fb = plane_state->hw.fb; in vlv_plane_ratio()
184 unsigned int cpp = fb->format->cpp[0]; in vlv_plane_ratio()
243 * Note that crtc_state->pixel_rate accounts for both in vlv_plane_min_cdclk()
245 * Pre-HSW bspec tells us to only consider the horizontal in vlv_plane_min_cdclk()
249 pixel_rate = crtc_state->pixel_rate; in vlv_plane_min_cdclk()
260 if (crtc_state->gamma_enable) in vlv_sprite_ctl_crtc()
269 const struct drm_framebuffer *fb = plane_state->hw.fb; in vlv_sprite_ctl()
270 unsigned int rotation = plane_state->hw.rotation; in vlv_sprite_ctl()
271 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in vlv_sprite_ctl()
276 switch (fb->format->format) { in vlv_sprite_ctl()
320 MISSING_CASE(fb->format->format); in vlv_sprite_ctl()
324 if (plane_state->hw.color_encoding == DRM_COLOR_YCBCR_BT709) in vlv_sprite_ctl()
327 if (fb->modifier == I915_FORMAT_MOD_X_TILED) in vlv_sprite_ctl()
336 if (key->flags & I915_SET_COLORKEY_SOURCE) in vlv_sprite_ctl()
344 struct intel_display *display = to_intel_display(plane_state); in vlv_sprite_update_gamma() local
345 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in vlv_sprite_update_gamma()
346 const struct drm_framebuffer *fb = plane_state->hw.fb; in vlv_sprite_update_gamma()
347 enum pipe pipe = plane->pipe; in vlv_sprite_update_gamma() local
348 enum plane_id plane_id = plane->id; in vlv_sprite_update_gamma()
353 if (!fb->format->is_yuv) in vlv_sprite_update_gamma()
360 for (i = 1; i < 8 - 1; i++) in vlv_sprite_update_gamma()
361 intel_de_write_fw(display, SPGAMC(pipe, plane_id, i - 1), in vlv_sprite_update_gamma()
371 struct intel_display *display = to_intel_display(plane); in vlv_sprite_update_noarm() local
372 enum pipe pipe = plane->pipe; in vlv_sprite_update_noarm() local
373 enum plane_id plane_id = plane->id; in vlv_sprite_update_noarm()
374 int crtc_x = plane_state->uapi.dst.x1; in vlv_sprite_update_noarm()
375 int crtc_y = plane_state->uapi.dst.y1; in vlv_sprite_update_noarm()
376 u32 crtc_w = drm_rect_width(&plane_state->uapi.dst); in vlv_sprite_update_noarm()
377 u32 crtc_h = drm_rect_height(&plane_state->uapi.dst); in vlv_sprite_update_noarm()
379 intel_de_write_fw(display, SPSTRIDE(pipe, plane_id), in vlv_sprite_update_noarm()
380 plane_state->view.color_plane[0].mapping_stride); in vlv_sprite_update_noarm()
381 intel_de_write_fw(display, SPPOS(pipe, plane_id), in vlv_sprite_update_noarm()
383 intel_de_write_fw(display, SPSIZE(pipe, plane_id), in vlv_sprite_update_noarm()
384 SP_HEIGHT(crtc_h - 1) | SP_WIDTH(crtc_w - 1)); in vlv_sprite_update_noarm()
393 struct intel_display *display = to_intel_display(plane); in vlv_sprite_update_arm() local
394 enum pipe pipe = plane->pipe; in vlv_sprite_update_arm() local
395 enum plane_id plane_id = plane->id; in vlv_sprite_update_arm()
396 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in vlv_sprite_update_arm()
397 u32 sprsurf_offset = plane_state->view.color_plane[0].offset; in vlv_sprite_update_arm()
398 u32 x = plane_state->view.color_plane[0].x; in vlv_sprite_update_arm()
399 u32 y = plane_state->view.color_plane[0].y; in vlv_sprite_update_arm()
402 sprctl = plane_state->ctl | vlv_sprite_ctl_crtc(crtc_state); in vlv_sprite_update_arm()
406 if (display->platform.cherryview && pipe == PIPE_B) in vlv_sprite_update_arm()
409 if (key->flags) { in vlv_sprite_update_arm()
410 intel_de_write_fw(display, SPKEYMINVAL(pipe, plane_id), in vlv_sprite_update_arm()
411 key->min_value); in vlv_sprite_update_arm()
412 intel_de_write_fw(display, SPKEYMSK(pipe, plane_id), in vlv_sprite_update_arm()
413 key->channel_mask); in vlv_sprite_update_arm()
414 intel_de_write_fw(display, SPKEYMAXVAL(pipe, plane_id), in vlv_sprite_update_arm()
415 key->max_value); in vlv_sprite_update_arm()
418 intel_de_write_fw(display, SPCONSTALPHA(pipe, plane_id), 0); in vlv_sprite_update_arm()
420 intel_de_write_fw(display, SPLINOFF(pipe, plane_id), linear_offset); in vlv_sprite_update_arm()
421 intel_de_write_fw(display, SPTILEOFF(pipe, plane_id), in vlv_sprite_update_arm()
425 * The control register self-arms if the plane was previously in vlv_sprite_update_arm()
429 intel_de_write_fw(display, SPCNTR(pipe, plane_id), sprctl); in vlv_sprite_update_arm()
430 intel_de_write_fw(display, SPSURF(pipe, plane_id), in vlv_sprite_update_arm()
442 struct intel_display *display = to_intel_display(plane); in vlv_sprite_disable_arm() local
443 enum pipe pipe = plane->pipe; in vlv_sprite_disable_arm() local
444 enum plane_id plane_id = plane->id; in vlv_sprite_disable_arm()
446 intel_de_write_fw(display, SPCNTR(pipe, plane_id), 0); in vlv_sprite_disable_arm()
447 intel_de_write_fw(display, SPSURF(pipe, plane_id), 0); in vlv_sprite_disable_arm()
454 struct intel_display *display = to_intel_display(plane); in vlv_sprite_capture_error() local
456 error->ctl = intel_de_read(display, SPCNTR(crtc->pipe, plane->id)); in vlv_sprite_capture_error()
457 error->surf = intel_de_read(display, SPSURF(crtc->pipe, plane->id)); in vlv_sprite_capture_error()
458 error->surflive = intel_de_read(display, SPSURFLIVE(crtc->pipe, plane->id)); in vlv_sprite_capture_error()
463 enum pipe *pipe) in vlv_sprite_get_hw_state() argument
465 struct intel_display *display = to_intel_display(plane); in vlv_sprite_get_hw_state() local
467 enum plane_id plane_id = plane->id; in vlv_sprite_get_hw_state()
471 power_domain = POWER_DOMAIN_PIPE(plane->pipe); in vlv_sprite_get_hw_state()
472 wakeref = intel_display_power_get_if_enabled(display, power_domain); in vlv_sprite_get_hw_state()
476 ret = intel_de_read(display, SPCNTR(plane->pipe, plane_id)) & SP_ENABLE; in vlv_sprite_get_hw_state()
478 *pipe = plane->pipe; in vlv_sprite_get_hw_state()
480 intel_display_power_put(display, power_domain, wakeref); in vlv_sprite_get_hw_state()
489 u8 active_planes = crtc_state->active_planes & ~BIT(PLANE_CURSOR); in ivb_plane_ratio()
490 const struct drm_framebuffer *fb = plane_state->hw.fb; in ivb_plane_ratio()
491 unsigned int cpp = fb->format->cpp[0]; in ivb_plane_ratio()
526 const struct drm_framebuffer *fb = plane_state->hw.fb; in ivb_plane_ratio_scaling()
527 unsigned int cpp = fb->format->cpp[0]; in ivb_plane_ratio_scaling()
556 * Note that crtc_state->pixel_rate accounts for both in ivb_plane_min_cdclk()
558 * Pre-HSW bspec tells us to only consider the horizontal in ivb_plane_min_cdclk()
562 pixel_rate = crtc_state->pixel_rate; in ivb_plane_min_cdclk()
576 * Note that crtc_state->pixel_rate accounts for both in ivb_sprite_min_cdclk()
578 * Pre-HSW bspec tells us to only consider the horizontal in ivb_sprite_min_cdclk()
582 pixel_rate = crtc_state->pixel_rate; in ivb_sprite_min_cdclk()
584 src_w = drm_rect_width(&plane_state->uapi.src) >> 16; in ivb_sprite_min_cdclk()
585 dst_w = drm_rect_width(&plane_state->uapi.dst); in ivb_sprite_min_cdclk()
603 u8 active_planes = crtc_state->active_planes & ~BIT(PLANE_CURSOR); in hsw_plane_ratio()
604 const struct drm_framebuffer *fb = plane_state->hw.fb; in hsw_plane_ratio()
605 unsigned int cpp = fb->format->cpp[0]; in hsw_plane_ratio()
635 unsigned int pixel_rate = crtc_state->pixel_rate; in hsw_plane_min_cdclk()
647 if (crtc_state->gamma_enable) in ivb_sprite_ctl_crtc()
650 if (crtc_state->csc_enable) in ivb_sprite_ctl_crtc()
658 struct intel_display *display = to_intel_display(plane_state); in ivb_need_sprite_gamma() local
659 const struct drm_framebuffer *fb = plane_state->hw.fb; in ivb_need_sprite_gamma()
661 return fb->format->cpp[0] == 8 && in ivb_need_sprite_gamma()
662 (display->platform.ivybridge || display->platform.haswell); in ivb_need_sprite_gamma()
668 struct intel_display *display = to_intel_display(plane_state); in ivb_sprite_ctl() local
669 const struct drm_framebuffer *fb = plane_state->hw.fb; in ivb_sprite_ctl()
670 unsigned int rotation = plane_state->hw.rotation; in ivb_sprite_ctl()
671 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in ivb_sprite_ctl()
676 if (display->platform.ivybridge) in ivb_sprite_ctl()
679 switch (fb->format->format) { in ivb_sprite_ctl()
711 MISSING_CASE(fb->format->format); in ivb_sprite_ctl()
718 if (plane_state->hw.color_encoding == DRM_COLOR_YCBCR_BT709) in ivb_sprite_ctl()
721 if (plane_state->hw.color_range == DRM_COLOR_YCBCR_FULL_RANGE) in ivb_sprite_ctl()
724 if (fb->modifier == I915_FORMAT_MOD_X_TILED) in ivb_sprite_ctl()
730 if (key->flags & I915_SET_COLORKEY_DESTINATION) in ivb_sprite_ctl()
732 else if (key->flags & I915_SET_COLORKEY_SOURCE) in ivb_sprite_ctl()
745 * "Workaround : When using the 64-bit format, the sprite output in ivb_sprite_linear_gamma()
748 * correction, pipe gamma correction, or pipe color space in ivb_sprite_linear_gamma()
754 gamma[i] = min((scale * i << 10) / 16, (1 << 10) - 1); in ivb_sprite_linear_gamma()
765 struct intel_display *display = to_intel_display(plane_state); in ivb_sprite_update_gamma() local
766 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in ivb_sprite_update_gamma()
767 enum pipe pipe = plane->pipe; in ivb_sprite_update_gamma() local
778 intel_de_write_fw(display, SPRGAMC(pipe, i), in ivb_sprite_update_gamma()
781 intel_de_write_fw(display, SPRGAMC16(pipe, 0), gamma[i]); in ivb_sprite_update_gamma()
782 intel_de_write_fw(display, SPRGAMC16(pipe, 1), gamma[i]); in ivb_sprite_update_gamma()
783 intel_de_write_fw(display, SPRGAMC16(pipe, 2), gamma[i]); in ivb_sprite_update_gamma()
786 intel_de_write_fw(display, SPRGAMC17(pipe, 0), gamma[i]); in ivb_sprite_update_gamma()
787 intel_de_write_fw(display, SPRGAMC17(pipe, 1), gamma[i]); in ivb_sprite_update_gamma()
788 intel_de_write_fw(display, SPRGAMC17(pipe, 2), gamma[i]); in ivb_sprite_update_gamma()
798 struct intel_display *display = to_intel_display(plane); in ivb_sprite_update_noarm() local
799 enum pipe pipe = plane->pipe; in ivb_sprite_update_noarm() local
800 int crtc_x = plane_state->uapi.dst.x1; in ivb_sprite_update_noarm()
801 int crtc_y = plane_state->uapi.dst.y1; in ivb_sprite_update_noarm()
802 u32 crtc_w = drm_rect_width(&plane_state->uapi.dst); in ivb_sprite_update_noarm()
803 u32 crtc_h = drm_rect_height(&plane_state->uapi.dst); in ivb_sprite_update_noarm()
804 u32 src_w = drm_rect_width(&plane_state->uapi.src) >> 16; in ivb_sprite_update_noarm()
805 u32 src_h = drm_rect_height(&plane_state->uapi.src) >> 16; in ivb_sprite_update_noarm()
810 SPRITE_SRC_WIDTH(src_w - 1) | in ivb_sprite_update_noarm()
811 SPRITE_SRC_HEIGHT(src_h - 1); in ivb_sprite_update_noarm()
813 intel_de_write_fw(display, SPRSTRIDE(pipe), in ivb_sprite_update_noarm()
814 plane_state->view.color_plane[0].mapping_stride); in ivb_sprite_update_noarm()
815 intel_de_write_fw(display, SPRPOS(pipe), in ivb_sprite_update_noarm()
817 intel_de_write_fw(display, SPRSIZE(pipe), in ivb_sprite_update_noarm()
818 SPRITE_HEIGHT(crtc_h - 1) | SPRITE_WIDTH(crtc_w - 1)); in ivb_sprite_update_noarm()
819 if (display->platform.ivybridge) in ivb_sprite_update_noarm()
820 intel_de_write_fw(display, SPRSCALE(pipe), sprscale); in ivb_sprite_update_noarm()
829 struct intel_display *display = to_intel_display(plane); in ivb_sprite_update_arm() local
830 enum pipe pipe = plane->pipe; in ivb_sprite_update_arm() local
831 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in ivb_sprite_update_arm()
832 u32 sprsurf_offset = plane_state->view.color_plane[0].offset; in ivb_sprite_update_arm()
833 u32 x = plane_state->view.color_plane[0].x; in ivb_sprite_update_arm()
834 u32 y = plane_state->view.color_plane[0].y; in ivb_sprite_update_arm()
837 sprctl = plane_state->ctl | ivb_sprite_ctl_crtc(crtc_state); in ivb_sprite_update_arm()
841 if (key->flags) { in ivb_sprite_update_arm()
842 intel_de_write_fw(display, SPRKEYVAL(pipe), key->min_value); in ivb_sprite_update_arm()
843 intel_de_write_fw(display, SPRKEYMSK(pipe), in ivb_sprite_update_arm()
844 key->channel_mask); in ivb_sprite_update_arm()
845 intel_de_write_fw(display, SPRKEYMAX(pipe), key->max_value); in ivb_sprite_update_arm()
850 if (display->platform.haswell || display->platform.broadwell) { in ivb_sprite_update_arm()
851 intel_de_write_fw(display, SPROFFSET(pipe), in ivb_sprite_update_arm()
854 intel_de_write_fw(display, SPRLINOFF(pipe), linear_offset); in ivb_sprite_update_arm()
855 intel_de_write_fw(display, SPRTILEOFF(pipe), in ivb_sprite_update_arm()
860 * The control register self-arms if the plane was previously in ivb_sprite_update_arm()
864 intel_de_write_fw(display, SPRCTL(pipe), sprctl); in ivb_sprite_update_arm()
865 intel_de_write_fw(display, SPRSURF(pipe), in ivb_sprite_update_arm()
876 struct intel_display *display = to_intel_display(plane); in ivb_sprite_disable_arm() local
877 enum pipe pipe = plane->pipe; in ivb_sprite_disable_arm() local
879 intel_de_write_fw(display, SPRCTL(pipe), 0); in ivb_sprite_disable_arm()
881 if (display->platform.ivybridge) in ivb_sprite_disable_arm()
882 intel_de_write_fw(display, SPRSCALE(pipe), 0); in ivb_sprite_disable_arm()
883 intel_de_write_fw(display, SPRSURF(pipe), 0); in ivb_sprite_disable_arm()
890 struct intel_display *display = to_intel_display(plane); in ivb_sprite_capture_error() local
892 error->ctl = intel_de_read(display, SPRCTL(crtc->pipe)); in ivb_sprite_capture_error()
893 error->surf = intel_de_read(display, SPRSURF(crtc->pipe)); in ivb_sprite_capture_error()
894 error->surflive = intel_de_read(display, SPRSURFLIVE(crtc->pipe)); in ivb_sprite_capture_error()
899 enum pipe *pipe) in ivb_sprite_get_hw_state() argument
901 struct intel_display *display = to_intel_display(plane); in ivb_sprite_get_hw_state() local
906 power_domain = POWER_DOMAIN_PIPE(plane->pipe); in ivb_sprite_get_hw_state()
907 wakeref = intel_display_power_get_if_enabled(display, power_domain); in ivb_sprite_get_hw_state()
911 ret = intel_de_read(display, SPRCTL(plane->pipe)) & SPRITE_ENABLE; in ivb_sprite_get_hw_state()
913 *pipe = plane->pipe; in ivb_sprite_get_hw_state()
915 intel_display_power_put(display, power_domain, wakeref); in ivb_sprite_get_hw_state()
923 const struct drm_framebuffer *fb = plane_state->hw.fb; in g4x_sprite_min_cdclk()
928 * Note that crtc_state->pixel_rate accounts for both in g4x_sprite_min_cdclk()
930 * Pre-HSW bspec tells us to only consider the horizontal in g4x_sprite_min_cdclk()
934 pixel_rate = crtc_state->pixel_rate; in g4x_sprite_min_cdclk()
937 hscale = drm_rect_calc_hscale(&plane_state->uapi.src, in g4x_sprite_min_cdclk()
938 &plane_state->uapi.dst, in g4x_sprite_min_cdclk()
949 /* -10% per decimation step */ in g4x_sprite_min_cdclk()
950 limit -= decimate; in g4x_sprite_min_cdclk()
952 /* -10% for RGB */ in g4x_sprite_min_cdclk()
953 if (!fb->format->is_yuv) in g4x_sprite_min_cdclk()
954 limit--; in g4x_sprite_min_cdclk()
957 * We should also do -10% if sprite scaling is enabled in g4x_sprite_min_cdclk()
958 * on the other pipe, but we can't really check for that, in g4x_sprite_min_cdclk()
972 int cpp = info->cpp[0]; in g4x_sprite_max_stride()
987 int cpp = info->cpp[0]; in hsw_sprite_max_stride()
997 struct intel_display *display = to_intel_display(plane); in g4x_sprite_min_alignment() local
999 if (intel_scanout_needs_vtd_wa(display)) in g4x_sprite_min_alignment()
1009 if (crtc_state->gamma_enable) in g4x_sprite_ctl_crtc()
1012 if (crtc_state->csc_enable) in g4x_sprite_ctl_crtc()
1021 struct intel_display *display = to_intel_display(plane_state); in g4x_sprite_ctl() local
1022 const struct drm_framebuffer *fb = plane_state->hw.fb; in g4x_sprite_ctl()
1023 unsigned int rotation = plane_state->hw.rotation; in g4x_sprite_ctl()
1024 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in g4x_sprite_ctl()
1029 if (display->platform.sandybridge) in g4x_sprite_ctl()
1032 switch (fb->format->format) { in g4x_sprite_ctl()
1064 MISSING_CASE(fb->format->format); in g4x_sprite_ctl()
1068 if (plane_state->hw.color_encoding == DRM_COLOR_YCBCR_BT709) in g4x_sprite_ctl()
1071 if (plane_state->hw.color_range == DRM_COLOR_YCBCR_FULL_RANGE) in g4x_sprite_ctl()
1074 if (fb->modifier == I915_FORMAT_MOD_X_TILED) in g4x_sprite_ctl()
1080 if (key->flags & I915_SET_COLORKEY_DESTINATION) in g4x_sprite_ctl()
1082 else if (key->flags & I915_SET_COLORKEY_SOURCE) in g4x_sprite_ctl()
1090 struct intel_display *display = to_intel_display(plane_state); in g4x_sprite_update_gamma() local
1091 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in g4x_sprite_update_gamma()
1092 const struct drm_framebuffer *fb = plane_state->hw.fb; in g4x_sprite_update_gamma()
1093 enum pipe pipe = plane->pipe; in g4x_sprite_update_gamma() local
1098 if (!fb->format->is_yuv) in g4x_sprite_update_gamma()
1105 for (i = 1; i < 8 - 1; i++) in g4x_sprite_update_gamma()
1106 intel_de_write_fw(display, DVSGAMC_G4X(pipe, i - 1), in g4x_sprite_update_gamma()
1120 struct intel_display *display = to_intel_display(plane_state); in ilk_sprite_update_gamma() local
1121 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in ilk_sprite_update_gamma()
1122 const struct drm_framebuffer *fb = plane_state->hw.fb; in ilk_sprite_update_gamma()
1123 enum pipe pipe = plane->pipe; in ilk_sprite_update_gamma() local
1128 if (!fb->format->is_yuv) in ilk_sprite_update_gamma()
1135 intel_de_write_fw(display, DVSGAMC_ILK(pipe, i), in ilk_sprite_update_gamma()
1138 intel_de_write_fw(display, DVSGAMCMAX_ILK(pipe, 0), gamma[i]); in ilk_sprite_update_gamma()
1139 intel_de_write_fw(display, DVSGAMCMAX_ILK(pipe, 1), gamma[i]); in ilk_sprite_update_gamma()
1140 intel_de_write_fw(display, DVSGAMCMAX_ILK(pipe, 2), gamma[i]); in ilk_sprite_update_gamma()
1150 struct intel_display *display = to_intel_display(plane); in g4x_sprite_update_noarm() local
1151 enum pipe pipe = plane->pipe; in g4x_sprite_update_noarm() local
1152 int crtc_x = plane_state->uapi.dst.x1; in g4x_sprite_update_noarm()
1153 int crtc_y = plane_state->uapi.dst.y1; in g4x_sprite_update_noarm()
1154 u32 crtc_w = drm_rect_width(&plane_state->uapi.dst); in g4x_sprite_update_noarm()
1155 u32 crtc_h = drm_rect_height(&plane_state->uapi.dst); in g4x_sprite_update_noarm()
1156 u32 src_w = drm_rect_width(&plane_state->uapi.src) >> 16; in g4x_sprite_update_noarm()
1157 u32 src_h = drm_rect_height(&plane_state->uapi.src) >> 16; in g4x_sprite_update_noarm()
1162 DVS_SRC_WIDTH(src_w - 1) | in g4x_sprite_update_noarm()
1163 DVS_SRC_HEIGHT(src_h - 1); in g4x_sprite_update_noarm()
1165 intel_de_write_fw(display, DVSSTRIDE(pipe), in g4x_sprite_update_noarm()
1166 plane_state->view.color_plane[0].mapping_stride); in g4x_sprite_update_noarm()
1167 intel_de_write_fw(display, DVSPOS(pipe), in g4x_sprite_update_noarm()
1169 intel_de_write_fw(display, DVSSIZE(pipe), in g4x_sprite_update_noarm()
1170 DVS_HEIGHT(crtc_h - 1) | DVS_WIDTH(crtc_w - 1)); in g4x_sprite_update_noarm()
1171 intel_de_write_fw(display, DVSSCALE(pipe), dvsscale); in g4x_sprite_update_noarm()
1180 struct intel_display *display = to_intel_display(plane); in g4x_sprite_update_arm() local
1181 enum pipe pipe = plane->pipe; in g4x_sprite_update_arm() local
1182 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; in g4x_sprite_update_arm()
1183 u32 dvssurf_offset = plane_state->view.color_plane[0].offset; in g4x_sprite_update_arm()
1184 u32 x = plane_state->view.color_plane[0].x; in g4x_sprite_update_arm()
1185 u32 y = plane_state->view.color_plane[0].y; in g4x_sprite_update_arm()
1188 dvscntr = plane_state->ctl | g4x_sprite_ctl_crtc(crtc_state); in g4x_sprite_update_arm()
1192 if (key->flags) { in g4x_sprite_update_arm()
1193 intel_de_write_fw(display, DVSKEYVAL(pipe), key->min_value); in g4x_sprite_update_arm()
1194 intel_de_write_fw(display, DVSKEYMSK(pipe), in g4x_sprite_update_arm()
1195 key->channel_mask); in g4x_sprite_update_arm()
1196 intel_de_write_fw(display, DVSKEYMAX(pipe), key->max_value); in g4x_sprite_update_arm()
1199 intel_de_write_fw(display, DVSLINOFF(pipe), linear_offset); in g4x_sprite_update_arm()
1200 intel_de_write_fw(display, DVSTILEOFF(pipe), in g4x_sprite_update_arm()
1204 * The control register self-arms if the plane was previously in g4x_sprite_update_arm()
1208 intel_de_write_fw(display, DVSCNTR(pipe), dvscntr); in g4x_sprite_update_arm()
1209 intel_de_write_fw(display, DVSSURF(pipe), in g4x_sprite_update_arm()
1212 if (display->platform.g4x) in g4x_sprite_update_arm()
1223 struct intel_display *display = to_intel_display(plane); in g4x_sprite_disable_arm() local
1224 enum pipe pipe = plane->pipe; in g4x_sprite_disable_arm() local
1226 intel_de_write_fw(display, DVSCNTR(pipe), 0); in g4x_sprite_disable_arm()
1228 intel_de_write_fw(display, DVSSCALE(pipe), 0); in g4x_sprite_disable_arm()
1229 intel_de_write_fw(display, DVSSURF(pipe), 0); in g4x_sprite_disable_arm()
1236 struct intel_display *display = to_intel_display(plane); in g4x_sprite_capture_error() local
1238 error->ctl = intel_de_read(display, DVSCNTR(crtc->pipe)); in g4x_sprite_capture_error()
1239 error->surf = intel_de_read(display, DVSSURF(crtc->pipe)); in g4x_sprite_capture_error()
1240 error->surflive = intel_de_read(display, DVSSURFLIVE(crtc->pipe)); in g4x_sprite_capture_error()
1245 enum pipe *pipe) in g4x_sprite_get_hw_state() argument
1247 struct intel_display *display = to_intel_display(plane); in g4x_sprite_get_hw_state() local
1252 power_domain = POWER_DOMAIN_PIPE(plane->pipe); in g4x_sprite_get_hw_state()
1253 wakeref = intel_display_power_get_if_enabled(display, power_domain); in g4x_sprite_get_hw_state()
1257 ret = intel_de_read(display, DVSCNTR(plane->pipe)) & DVS_ENABLE; in g4x_sprite_get_hw_state()
1259 *pipe = plane->pipe; in g4x_sprite_get_hw_state()
1261 intel_display_power_put(display, power_domain, wakeref); in g4x_sprite_get_hw_state()
1271 switch (fb->format->format) { in g4x_fb_scalable()
1287 struct intel_display *display = to_intel_display(plane_state); in g4x_sprite_check_scaling() local
1288 const struct drm_framebuffer *fb = plane_state->hw.fb; in g4x_sprite_check_scaling()
1289 const struct drm_rect *src = &plane_state->uapi.src; in g4x_sprite_check_scaling()
1290 const struct drm_rect *dst = &plane_state->uapi.dst; in g4x_sprite_check_scaling()
1293 &crtc_state->hw.adjusted_mode; in g4x_sprite_check_scaling()
1294 unsigned int stride = plane_state->view.color_plane[0].mapping_stride; in g4x_sprite_check_scaling()
1295 unsigned int cpp = fb->format->cpp[0]; in g4x_sprite_check_scaling()
1302 src_x = src->x1 >> 16; in g4x_sprite_check_scaling()
1311 if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { in g4x_sprite_check_scaling()
1313 drm_dbg_kms(display->drm, in g4x_sprite_check_scaling()
1315 return -EINVAL; in g4x_sprite_check_scaling()
1326 drm_dbg_kms(display->drm, in g4x_sprite_check_scaling()
1327 "Source dimensions (%dx%d) exceed hardware limits (%dx%d - %dx%d)\n", in g4x_sprite_check_scaling()
1329 return -EINVAL; in g4x_sprite_check_scaling()
1333 drm_dbg_kms(display->drm, in g4x_sprite_check_scaling()
1336 return -EINVAL; in g4x_sprite_check_scaling()
1340 drm_dbg_kms(display->drm, in g4x_sprite_check_scaling()
1343 return -EINVAL; in g4x_sprite_check_scaling()
1353 struct intel_display *display = to_intel_display(plane_state); in g4x_sprite_check() local
1358 if (g4x_fb_scalable(plane_state->hw.fb)) { in g4x_sprite_check()
1359 if (DISPLAY_VER(display) < 7) { in g4x_sprite_check()
1362 } else if (display->platform.ivybridge) { in g4x_sprite_check()
1377 if (!plane_state->uapi.visible) in g4x_sprite_check()
1388 if (DISPLAY_VER(display) >= 7) in g4x_sprite_check()
1389 plane_state->ctl = ivb_sprite_ctl(crtc_state, plane_state); in g4x_sprite_check()
1391 plane_state->ctl = g4x_sprite_ctl(crtc_state, plane_state); in g4x_sprite_check()
1398 struct intel_display *display = to_intel_display(plane_state); in chv_plane_check_rotation() local
1399 unsigned int rotation = plane_state->hw.rotation; in chv_plane_check_rotation()
1402 if (display->platform.cherryview && in chv_plane_check_rotation()
1405 drm_dbg_kms(display->drm, in chv_plane_check_rotation()
1407 return -EINVAL; in chv_plane_check_rotation()
1434 if (!plane_state->uapi.visible) in vlv_sprite_check()
1441 plane_state->ctl = vlv_sprite_ctl(crtc_state, plane_state); in vlv_sprite_check()
1604 intel_sprite_plane_create(struct intel_display *display, in intel_sprite_plane_create() argument
1605 enum pipe pipe, int sprite) in intel_sprite_plane_create() argument
1619 if (display->platform.valleyview || display->platform.cherryview) { in intel_sprite_plane_create()
1620 plane->update_noarm = vlv_sprite_update_noarm; in intel_sprite_plane_create()
1621 plane->update_arm = vlv_sprite_update_arm; in intel_sprite_plane_create()
1622 plane->disable_arm = vlv_sprite_disable_arm; in intel_sprite_plane_create()
1623 plane->capture_error = vlv_sprite_capture_error; in intel_sprite_plane_create()
1624 plane->get_hw_state = vlv_sprite_get_hw_state; in intel_sprite_plane_create()
1625 plane->check_plane = vlv_sprite_check; in intel_sprite_plane_create()
1626 plane->max_stride = i965_plane_max_stride; in intel_sprite_plane_create()
1627 plane->min_alignment = vlv_plane_min_alignment; in intel_sprite_plane_create()
1628 plane->min_cdclk = vlv_plane_min_cdclk; in intel_sprite_plane_create()
1631 if (intel_scanout_needs_vtd_wa(display)) in intel_sprite_plane_create()
1632 plane->vtd_guard = 128; in intel_sprite_plane_create()
1634 if (display->platform.cherryview && pipe == PIPE_B) { in intel_sprite_plane_create()
1643 } else if (DISPLAY_VER(display) >= 7) { in intel_sprite_plane_create()
1644 plane->update_noarm = ivb_sprite_update_noarm; in intel_sprite_plane_create()
1645 plane->update_arm = ivb_sprite_update_arm; in intel_sprite_plane_create()
1646 plane->disable_arm = ivb_sprite_disable_arm; in intel_sprite_plane_create()
1647 plane->capture_error = ivb_sprite_capture_error; in intel_sprite_plane_create()
1648 plane->get_hw_state = ivb_sprite_get_hw_state; in intel_sprite_plane_create()
1649 plane->check_plane = g4x_sprite_check; in intel_sprite_plane_create()
1651 if (display->platform.broadwell || display->platform.haswell) { in intel_sprite_plane_create()
1652 plane->max_stride = hsw_sprite_max_stride; in intel_sprite_plane_create()
1653 plane->min_cdclk = hsw_plane_min_cdclk; in intel_sprite_plane_create()
1655 plane->max_stride = g4x_sprite_max_stride; in intel_sprite_plane_create()
1656 plane->min_cdclk = ivb_sprite_min_cdclk; in intel_sprite_plane_create()
1659 plane->min_alignment = g4x_sprite_min_alignment; in intel_sprite_plane_create()
1661 if (intel_scanout_needs_vtd_wa(display)) in intel_sprite_plane_create()
1662 plane->vtd_guard = 64; in intel_sprite_plane_create()
1669 plane->update_noarm = g4x_sprite_update_noarm; in intel_sprite_plane_create()
1670 plane->update_arm = g4x_sprite_update_arm; in intel_sprite_plane_create()
1671 plane->disable_arm = g4x_sprite_disable_arm; in intel_sprite_plane_create()
1672 plane->capture_error = g4x_sprite_capture_error; in intel_sprite_plane_create()
1673 plane->get_hw_state = g4x_sprite_get_hw_state; in intel_sprite_plane_create()
1674 plane->check_plane = g4x_sprite_check; in intel_sprite_plane_create()
1675 plane->max_stride = g4x_sprite_max_stride; in intel_sprite_plane_create()
1676 plane->min_alignment = g4x_sprite_min_alignment; in intel_sprite_plane_create()
1677 plane->min_cdclk = g4x_sprite_min_cdclk; in intel_sprite_plane_create()
1679 if (intel_scanout_needs_vtd_wa(display)) in intel_sprite_plane_create()
1680 plane->vtd_guard = 64; in intel_sprite_plane_create()
1682 if (display->platform.sandybridge) { in intel_sprite_plane_create()
1695 if (display->platform.cherryview && pipe == PIPE_B) { in intel_sprite_plane_create()
1704 plane->pipe = pipe; in intel_sprite_plane_create()
1705 plane->id = PLANE_SPRITE0 + sprite; in intel_sprite_plane_create()
1706 plane->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, plane->id); in intel_sprite_plane_create()
1708 modifiers = intel_fb_plane_get_modifiers(display, INTEL_PLANE_CAP_TILING_X); in intel_sprite_plane_create()
1710 ret = drm_universal_plane_init(display->drm, &plane->base, in intel_sprite_plane_create()
1714 "sprite %c", sprite_name(display, pipe, sprite)); in intel_sprite_plane_create()
1720 drm_plane_create_rotation_property(&plane->base, in intel_sprite_plane_create()
1724 drm_plane_create_color_properties(&plane->base, in intel_sprite_plane_create()
1733 drm_plane_create_zpos_immutable_property(&plane->base, zpos); in intel_sprite_plane_create()