[PATCH 2/3] drm/vc4: plane: Add support for DRM_FORMAT_P030
kernel test robot
lkp at intel.com
Fri Nov 26 02:18:25 UTC 2021
Hi Maxime,
I love your patch! Perhaps something to improve:
[auto build test WARNING on drm/drm-next]
[also build test WARNING on drm-intel/for-linux-next drm-tip/drm-tip v5.16-rc2 next-20211125]
[cannot apply to anholt/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/drm-vc4-Support-for-30-bits-YUV-formats/20211117-221106
base: git://anongit.freedesktop.org/drm/drm drm-next
config: x86_64-buildonly-randconfig-r004-20211118 (https://download.01.org/0day-ci/archive/20211126/202111261033.hgimGK21-lkp@intel.com/config)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/d4c05e7a5da7b65c5a37252cc9d2cac75f1f6d78
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Maxime-Ripard/drm-vc4-Support-for-30-bits-YUV-formats/20211117-221106
git checkout d4c05e7a5da7b65c5a37252cc9d2cac75f1f6d78
# save the config file to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
All warnings (new ones prefixed by >>):
>> drivers/gpu/drm/vc4/vc4_plane.c:811:4: warning: variable 'tile_w' is used uninitialized whenever switch default is taken [-Wsometimes-uninitialized]
default:
^~~~~~~
drivers/gpu/drm/vc4/vc4_plane.c:814:19: note: uninitialized use occurs here
pix_per_tile = tile_w / fb->format->cpp[0];
^~~~~~
drivers/gpu/drm/vc4/vc4_plane.c:777:13: note: initialize the variable 'tile_w' to silence this warning
u32 tile_w, tile, x_off, pix_per_tile;
^
= 0
>> drivers/gpu/drm/vc4/vc4_plane.c:816:6: warning: variable 'i' is uninitialized when used here [-Wuninitialized]
(i ? h_subsample : 1) * fb->format->cpp[i];
^
drivers/gpu/drm/vc4/vc4_plane.c:652:12: note: initialize the variable 'i' to silence this warning
int ret, i;
^
= 0
2 warnings generated.
vim +/tile_w +811 drivers/gpu/drm/vc4/vc4_plane.c
0a038c1c29a7a3 Boris Brezillon 2018-11-30 630
5c6799942003df Eric Anholt 2015-12-28 631 /* Writes out a full display list for an active plane to the plane's
5c6799942003df Eric Anholt 2015-12-28 632 * private dlist state.
5c6799942003df Eric Anholt 2015-12-28 633 */
5c6799942003df Eric Anholt 2015-12-28 634 static int vc4_plane_mode_set(struct drm_plane *plane,
5c6799942003df Eric Anholt 2015-12-28 635 struct drm_plane_state *state)
5c6799942003df Eric Anholt 2015-12-28 636 {
21af94cf1a4c2d Eric Anholt 2015-10-20 637 struct vc4_dev *vc4 = to_vc4_dev(plane->dev);
5c6799942003df Eric Anholt 2015-12-28 638 struct vc4_plane_state *vc4_state = to_vc4_plane_state(state);
5c6799942003df Eric Anholt 2015-12-28 639 struct drm_framebuffer *fb = state->fb;
5c6799942003df Eric Anholt 2015-12-28 640 u32 ctl0_offset = vc4_state->dlist_count;
438b74a5497c36 Ville Syrjälä 2016-12-14 641 const struct hvs_format *format = vc4_get_hvs_format(fb->format->format);
e065a8dd30af70 Dave Stevenson 2018-03-16 642 u64 base_format_mod = fourcc_mod_broadcom_mod(fb->modifier);
05c452c115bffa Maxime Ripard 2019-05-16 643 int num_planes = fb->format->num_planes;
f3e9632cb6241a Maxime Ripard 2019-05-16 644 u32 h_subsample = fb->format->hsub;
f3e9632cb6241a Maxime Ripard 2019-05-16 645 u32 v_subsample = fb->format->vsub;
22445f0316a253 Stefan Schake 2018-04-20 646 bool mix_plane_alpha;
3d67b68a6a3c2d Stefan Schake 2018-03-09 647 bool covers_screen;
98830d91da082b Eric Anholt 2017-06-07 648 u32 scl0, scl1, pitch0;
7cd3cf3540a370 Boris Brezillon 2018-12-07 649 u32 tiling, src_y;
e065a8dd30af70 Dave Stevenson 2018-03-16 650 u32 hvs_format = format->hvs;
7cd3cf3540a370 Boris Brezillon 2018-12-07 651 unsigned int rotation;
fc04023fafecf1 Eric Anholt 2015-12-30 652 int ret, i;
5c6799942003df Eric Anholt 2015-12-28 653
8d93844965c3d5 Boris Brezillon 2018-11-30 654 if (vc4_state->dlist_initialized)
8d93844965c3d5 Boris Brezillon 2018-11-30 655 return 0;
8d93844965c3d5 Boris Brezillon 2018-11-30 656
5c6799942003df Eric Anholt 2015-12-28 657 ret = vc4_plane_setup_clipping_and_scaling(state);
21af94cf1a4c2d Eric Anholt 2015-10-20 658 if (ret)
21af94cf1a4c2d Eric Anholt 2015-10-20 659 return ret;
21af94cf1a4c2d Eric Anholt 2015-10-20 660
fc04023fafecf1 Eric Anholt 2015-12-30 661 /* SCL1 is used for Cb/Cr scaling of planar formats. For RGB
fc04023fafecf1 Eric Anholt 2015-12-30 662 * and 4:4:4, scl1 should be set to scl0 so both channels of
fc04023fafecf1 Eric Anholt 2015-12-30 663 * the scaler do the same thing. For YUV, the Y plane needs
fc04023fafecf1 Eric Anholt 2015-12-30 664 * to be put in channel 1 and Cb/Cr in channel 0, so we swap
fc04023fafecf1 Eric Anholt 2015-12-30 665 * the scl fields here.
fc04023fafecf1 Eric Anholt 2015-12-30 666 */
fc04023fafecf1 Eric Anholt 2015-12-30 667 if (num_planes == 1) {
9a0e9802217291 Boris Brezillon 2018-05-07 668 scl0 = vc4_get_scl_field(state, 0);
fc04023fafecf1 Eric Anholt 2015-12-30 669 scl1 = scl0;
fc04023fafecf1 Eric Anholt 2015-12-30 670 } else {
fc04023fafecf1 Eric Anholt 2015-12-30 671 scl0 = vc4_get_scl_field(state, 1);
fc04023fafecf1 Eric Anholt 2015-12-30 672 scl1 = vc4_get_scl_field(state, 0);
fc04023fafecf1 Eric Anholt 2015-12-30 673 }
21af94cf1a4c2d Eric Anholt 2015-10-20 674
7cd3cf3540a370 Boris Brezillon 2018-12-07 675 rotation = drm_rotation_simplify(state->rotation,
7cd3cf3540a370 Boris Brezillon 2018-12-07 676 DRM_MODE_ROTATE_0 |
7cd3cf3540a370 Boris Brezillon 2018-12-07 677 DRM_MODE_REFLECT_X |
7cd3cf3540a370 Boris Brezillon 2018-12-07 678 DRM_MODE_REFLECT_Y);
7cd3cf3540a370 Boris Brezillon 2018-12-07 679
7cd3cf3540a370 Boris Brezillon 2018-12-07 680 /* We must point to the last line when Y reflection is enabled. */
7cd3cf3540a370 Boris Brezillon 2018-12-07 681 src_y = vc4_state->src_y;
7cd3cf3540a370 Boris Brezillon 2018-12-07 682 if (rotation & DRM_MODE_REFLECT_Y)
7cd3cf3540a370 Boris Brezillon 2018-12-07 683 src_y += vc4_state->src_h[0] - 1;
7cd3cf3540a370 Boris Brezillon 2018-12-07 684
e065a8dd30af70 Dave Stevenson 2018-03-16 685 switch (base_format_mod) {
98830d91da082b Eric Anholt 2017-06-07 686 case DRM_FORMAT_MOD_LINEAR:
98830d91da082b Eric Anholt 2017-06-07 687 tiling = SCALER_CTL0_TILING_LINEAR;
98830d91da082b Eric Anholt 2017-06-07 688 pitch0 = VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH);
a65511b1cd78e0 Boris Brezillon 2018-08-03 689
a65511b1cd78e0 Boris Brezillon 2018-08-03 690 /* Adjust the base pointer to the first pixel to be scanned
a65511b1cd78e0 Boris Brezillon 2018-08-03 691 * out.
a65511b1cd78e0 Boris Brezillon 2018-08-03 692 */
a65511b1cd78e0 Boris Brezillon 2018-08-03 693 for (i = 0; i < num_planes; i++) {
7cd3cf3540a370 Boris Brezillon 2018-12-07 694 vc4_state->offsets[i] += src_y /
a65511b1cd78e0 Boris Brezillon 2018-08-03 695 (i ? v_subsample : 1) *
a65511b1cd78e0 Boris Brezillon 2018-08-03 696 fb->pitches[i];
7cd3cf3540a370 Boris Brezillon 2018-12-07 697
a65511b1cd78e0 Boris Brezillon 2018-08-03 698 vc4_state->offsets[i] += vc4_state->src_x /
a65511b1cd78e0 Boris Brezillon 2018-08-03 699 (i ? h_subsample : 1) *
a65511b1cd78e0 Boris Brezillon 2018-08-03 700 fb->format->cpp[i];
a65511b1cd78e0 Boris Brezillon 2018-08-03 701 }
3e407417b1928e Boris Brezillon 2018-08-03 702
98830d91da082b Eric Anholt 2017-06-07 703 break;
652badb9458b41 Eric Anholt 2017-09-27 704
652badb9458b41 Eric Anholt 2017-09-27 705 case DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED: {
652badb9458b41 Eric Anholt 2017-09-27 706 u32 tile_size_shift = 12; /* T tiles are 4kb */
3e407417b1928e Boris Brezillon 2018-08-03 707 /* Whole-tile offsets, mostly for setting the pitch. */
3e407417b1928e Boris Brezillon 2018-08-03 708 u32 tile_w_shift = fb->format->cpp[0] == 2 ? 6 : 5;
652badb9458b41 Eric Anholt 2017-09-27 709 u32 tile_h_shift = 5; /* 16 and 32bpp are 32 pixels high */
3e407417b1928e Boris Brezillon 2018-08-03 710 u32 tile_w_mask = (1 << tile_w_shift) - 1;
3e407417b1928e Boris Brezillon 2018-08-03 711 /* The height mask on 32-bit-per-pixel tiles is 63, i.e. twice
3e407417b1928e Boris Brezillon 2018-08-03 712 * the height (in pixels) of a 4k tile.
3e407417b1928e Boris Brezillon 2018-08-03 713 */
3e407417b1928e Boris Brezillon 2018-08-03 714 u32 tile_h_mask = (2 << tile_h_shift) - 1;
3e407417b1928e Boris Brezillon 2018-08-03 715 /* For T-tiled, the FB pitch is "how many bytes from one row to
3e407417b1928e Boris Brezillon 2018-08-03 716 * the next, such that
3e407417b1928e Boris Brezillon 2018-08-03 717 *
3e407417b1928e Boris Brezillon 2018-08-03 718 * pitch * tile_h == tile_size * tiles_per_row
3e407417b1928e Boris Brezillon 2018-08-03 719 */
652badb9458b41 Eric Anholt 2017-09-27 720 u32 tiles_w = fb->pitches[0] >> (tile_size_shift - tile_h_shift);
3e407417b1928e Boris Brezillon 2018-08-03 721 u32 tiles_l = vc4_state->src_x >> tile_w_shift;
3e407417b1928e Boris Brezillon 2018-08-03 722 u32 tiles_r = tiles_w - tiles_l;
7cd3cf3540a370 Boris Brezillon 2018-12-07 723 u32 tiles_t = src_y >> tile_h_shift;
3e407417b1928e Boris Brezillon 2018-08-03 724 /* Intra-tile offsets, which modify the base address (the
3e407417b1928e Boris Brezillon 2018-08-03 725 * SCALER_PITCH0_TILE_Y_OFFSET tells HVS how to walk from that
3e407417b1928e Boris Brezillon 2018-08-03 726 * base address).
3e407417b1928e Boris Brezillon 2018-08-03 727 */
7cd3cf3540a370 Boris Brezillon 2018-12-07 728 u32 tile_y = (src_y >> 4) & 1;
7cd3cf3540a370 Boris Brezillon 2018-12-07 729 u32 subtile_y = (src_y >> 2) & 3;
7cd3cf3540a370 Boris Brezillon 2018-12-07 730 u32 utile_y = src_y & 3;
3e407417b1928e Boris Brezillon 2018-08-03 731 u32 x_off = vc4_state->src_x & tile_w_mask;
7cd3cf3540a370 Boris Brezillon 2018-12-07 732 u32 y_off = src_y & tile_h_mask;
7cd3cf3540a370 Boris Brezillon 2018-12-07 733
7cd3cf3540a370 Boris Brezillon 2018-12-07 734 /* When Y reflection is requested we must set the
7cd3cf3540a370 Boris Brezillon 2018-12-07 735 * SCALER_PITCH0_TILE_LINE_DIR flag to tell HVS that all lines
7cd3cf3540a370 Boris Brezillon 2018-12-07 736 * after the initial one should be fetched in descending order,
7cd3cf3540a370 Boris Brezillon 2018-12-07 737 * which makes sense since we start from the last line and go
7cd3cf3540a370 Boris Brezillon 2018-12-07 738 * backward.
7cd3cf3540a370 Boris Brezillon 2018-12-07 739 * Don't know why we need y_off = max_y_off - y_off, but it's
7cd3cf3540a370 Boris Brezillon 2018-12-07 740 * definitely required (I guess it's also related to the "going
7cd3cf3540a370 Boris Brezillon 2018-12-07 741 * backward" situation).
7cd3cf3540a370 Boris Brezillon 2018-12-07 742 */
7cd3cf3540a370 Boris Brezillon 2018-12-07 743 if (rotation & DRM_MODE_REFLECT_Y) {
7cd3cf3540a370 Boris Brezillon 2018-12-07 744 y_off = tile_h_mask - y_off;
7cd3cf3540a370 Boris Brezillon 2018-12-07 745 pitch0 = SCALER_PITCH0_TILE_LINE_DIR;
7cd3cf3540a370 Boris Brezillon 2018-12-07 746 } else {
7cd3cf3540a370 Boris Brezillon 2018-12-07 747 pitch0 = 0;
7cd3cf3540a370 Boris Brezillon 2018-12-07 748 }
652badb9458b41 Eric Anholt 2017-09-27 749
98830d91da082b Eric Anholt 2017-06-07 750 tiling = SCALER_CTL0_TILING_256B_OR_T;
7cd3cf3540a370 Boris Brezillon 2018-12-07 751 pitch0 |= (VC4_SET_FIELD(x_off, SCALER_PITCH0_SINK_PIX) |
3e407417b1928e Boris Brezillon 2018-08-03 752 VC4_SET_FIELD(y_off, SCALER_PITCH0_TILE_Y_OFFSET) |
3e407417b1928e Boris Brezillon 2018-08-03 753 VC4_SET_FIELD(tiles_l, SCALER_PITCH0_TILE_WIDTH_L) |
3e407417b1928e Boris Brezillon 2018-08-03 754 VC4_SET_FIELD(tiles_r, SCALER_PITCH0_TILE_WIDTH_R));
3e407417b1928e Boris Brezillon 2018-08-03 755 vc4_state->offsets[0] += tiles_t * (tiles_w << tile_size_shift);
3e407417b1928e Boris Brezillon 2018-08-03 756 vc4_state->offsets[0] += subtile_y << 8;
3e407417b1928e Boris Brezillon 2018-08-03 757 vc4_state->offsets[0] += utile_y << 4;
3e407417b1928e Boris Brezillon 2018-08-03 758
3e407417b1928e Boris Brezillon 2018-08-03 759 /* Rows of tiles alternate left-to-right and right-to-left. */
3e407417b1928e Boris Brezillon 2018-08-03 760 if (tiles_t & 1) {
3e407417b1928e Boris Brezillon 2018-08-03 761 pitch0 |= SCALER_PITCH0_TILE_INITIAL_LINE_DIR;
3e407417b1928e Boris Brezillon 2018-08-03 762 vc4_state->offsets[0] += (tiles_w - tiles_l) <<
3e407417b1928e Boris Brezillon 2018-08-03 763 tile_size_shift;
3e407417b1928e Boris Brezillon 2018-08-03 764 vc4_state->offsets[0] -= (1 + !tile_y) << 10;
3e407417b1928e Boris Brezillon 2018-08-03 765 } else {
3e407417b1928e Boris Brezillon 2018-08-03 766 vc4_state->offsets[0] += tiles_l << tile_size_shift;
3e407417b1928e Boris Brezillon 2018-08-03 767 vc4_state->offsets[0] += tile_y << 10;
3e407417b1928e Boris Brezillon 2018-08-03 768 }
98830d91da082b Eric Anholt 2017-06-07 769
98830d91da082b Eric Anholt 2017-06-07 770 break;
652badb9458b41 Eric Anholt 2017-09-27 771 }
652badb9458b41 Eric Anholt 2017-09-27 772
e065a8dd30af70 Dave Stevenson 2018-03-16 773 case DRM_FORMAT_MOD_BROADCOM_SAND64:
e065a8dd30af70 Dave Stevenson 2018-03-16 774 case DRM_FORMAT_MOD_BROADCOM_SAND128:
e065a8dd30af70 Dave Stevenson 2018-03-16 775 case DRM_FORMAT_MOD_BROADCOM_SAND256: {
e065a8dd30af70 Dave Stevenson 2018-03-16 776 uint32_t param = fourcc_mod_broadcom_param(fb->modifier);
8e75d582db02bc Boris Brezillon 2018-12-07 777 u32 tile_w, tile, x_off, pix_per_tile;
e065a8dd30af70 Dave Stevenson 2018-03-16 778
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 779 if (fb->format->format == DRM_FORMAT_P030) {
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 780 /*
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 781 * Spec says: bits [31:4] of the given address should point to
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 782 * the 128-bit word containing the desired starting pixel,
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 783 * and bits[3:0] should be between 0 and 11, indicating which
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 784 * of the 12-pixels in that 128-bit word is the first pixel to be used
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 785 */
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 786 u32 remaining_pixels = vc4_state->src_x % 96;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 787 u32 aligned = remaining_pixels / 12;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 788 u32 last_bits = remaining_pixels % 12;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 789
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 790 x_off = aligned * 16 + last_bits;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 791 hvs_format = HVS_PIXEL_FORMAT_YCBCR_10BIT;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 792 tiling = SCALER_CTL0_TILING_128B;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 793 tile_w = 128;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 794 pix_per_tile = 96;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 795 } else {
e065a8dd30af70 Dave Stevenson 2018-03-16 796 hvs_format = HVS_PIXEL_FORMAT_H264;
e065a8dd30af70 Dave Stevenson 2018-03-16 797
e065a8dd30af70 Dave Stevenson 2018-03-16 798 switch (base_format_mod) {
e065a8dd30af70 Dave Stevenson 2018-03-16 799 case DRM_FORMAT_MOD_BROADCOM_SAND64:
e065a8dd30af70 Dave Stevenson 2018-03-16 800 tiling = SCALER_CTL0_TILING_64B;
8e75d582db02bc Boris Brezillon 2018-12-07 801 tile_w = 64;
e065a8dd30af70 Dave Stevenson 2018-03-16 802 break;
e065a8dd30af70 Dave Stevenson 2018-03-16 803 case DRM_FORMAT_MOD_BROADCOM_SAND128:
e065a8dd30af70 Dave Stevenson 2018-03-16 804 tiling = SCALER_CTL0_TILING_128B;
8e75d582db02bc Boris Brezillon 2018-12-07 805 tile_w = 128;
e065a8dd30af70 Dave Stevenson 2018-03-16 806 break;
e065a8dd30af70 Dave Stevenson 2018-03-16 807 case DRM_FORMAT_MOD_BROADCOM_SAND256:
e065a8dd30af70 Dave Stevenson 2018-03-16 808 tiling = SCALER_CTL0_TILING_256B_OR_T;
8e75d582db02bc Boris Brezillon 2018-12-07 809 tile_w = 256;
e065a8dd30af70 Dave Stevenson 2018-03-16 810 break;
e065a8dd30af70 Dave Stevenson 2018-03-16 @811 default:
e065a8dd30af70 Dave Stevenson 2018-03-16 812 break;
e065a8dd30af70 Dave Stevenson 2018-03-16 813 }
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 814 pix_per_tile = tile_w / fb->format->cpp[0];
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 815 x_off = (vc4_state->src_x % pix_per_tile) /
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 @816 (i ? h_subsample : 1) * fb->format->cpp[i];
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 817 }
e065a8dd30af70 Dave Stevenson 2018-03-16 818 if (param > SCALER_TILE_HEIGHT_MASK) {
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 819 DRM_DEBUG_KMS("SAND height too large (%d)\n",
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 820 param);
e065a8dd30af70 Dave Stevenson 2018-03-16 821 return -EINVAL;
e065a8dd30af70 Dave Stevenson 2018-03-16 822 }
8e75d582db02bc Boris Brezillon 2018-12-07 823 tile = vc4_state->src_x / pix_per_tile;
8e75d582db02bc Boris Brezillon 2018-12-07 824 /* Adjust the base pointer to the first pixel to be scanned
8e75d582db02bc Boris Brezillon 2018-12-07 825 * out.
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 826 *
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 827 * For P030, y_ptr [31:4] is the 128bit word for the start pixel
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 828 * y_ptr [3:0] is the pixel (0-11) contained within that 128bit
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 829 * word that should be taken as the first pixel.
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 830 * Ditto uv_ptr [31:4] vs [3:0], however [3:0] contains the
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 831 * element within the 128bit word, eg for pixel 3 the value
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 832 * should be 6.
8e75d582db02bc Boris Brezillon 2018-12-07 833 */
8e75d582db02bc Boris Brezillon 2018-12-07 834 for (i = 0; i < num_planes; i++) {
8e75d582db02bc Boris Brezillon 2018-12-07 835 vc4_state->offsets[i] += param * tile_w * tile;
7cd3cf3540a370 Boris Brezillon 2018-12-07 836 vc4_state->offsets[i] += src_y /
8e75d582db02bc Boris Brezillon 2018-12-07 837 (i ? v_subsample : 1) *
8e75d582db02bc Boris Brezillon 2018-12-07 838 tile_w;
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 839 vc4_state->offsets[i] += x_off & ~(i ? 1 : 0);
8e75d582db02bc Boris Brezillon 2018-12-07 840 }
8e75d582db02bc Boris Brezillon 2018-12-07 841
e065a8dd30af70 Dave Stevenson 2018-03-16 842 pitch0 = VC4_SET_FIELD(param, SCALER_TILE_HEIGHT);
e065a8dd30af70 Dave Stevenson 2018-03-16 843 break;
e065a8dd30af70 Dave Stevenson 2018-03-16 844 }
e065a8dd30af70 Dave Stevenson 2018-03-16 845
98830d91da082b Eric Anholt 2017-06-07 846 default:
98830d91da082b Eric Anholt 2017-06-07 847 DRM_DEBUG_KMS("Unsupported FB tiling flag 0x%16llx",
98830d91da082b Eric Anholt 2017-06-07 848 (long long)fb->modifier);
98830d91da082b Eric Anholt 2017-06-07 849 return -EINVAL;
98830d91da082b Eric Anholt 2017-06-07 850 }
98830d91da082b Eric Anholt 2017-06-07 851
c54619b0bfb35c Dave Stevenson 2020-09-03 852 /* Don't waste cycles mixing with plane alpha if the set alpha
c54619b0bfb35c Dave Stevenson 2020-09-03 853 * is opaque or there is no per-pixel alpha information.
c54619b0bfb35c Dave Stevenson 2020-09-03 854 * In any case we use the alpha property value as the fixed alpha.
c54619b0bfb35c Dave Stevenson 2020-09-03 855 */
c54619b0bfb35c Dave Stevenson 2020-09-03 856 mix_plane_alpha = state->alpha != DRM_BLEND_ALPHA_OPAQUE &&
c54619b0bfb35c Dave Stevenson 2020-09-03 857 fb->format->has_alpha;
c54619b0bfb35c Dave Stevenson 2020-09-03 858
c54619b0bfb35c Dave Stevenson 2020-09-03 859 if (!vc4->hvs->hvs5) {
21af94cf1a4c2d Eric Anholt 2015-10-20 860 /* Control word */
c8b75bca92cbf0 Eric Anholt 2015-03-02 861 vc4_dlist_write(vc4_state,
c8b75bca92cbf0 Eric Anholt 2015-03-02 862 SCALER_CTL0_VALID |
7cd3cf3540a370 Boris Brezillon 2018-12-07 863 (rotation & DRM_MODE_REFLECT_X ? SCALER_CTL0_HFLIP : 0) |
7cd3cf3540a370 Boris Brezillon 2018-12-07 864 (rotation & DRM_MODE_REFLECT_Y ? SCALER_CTL0_VFLIP : 0) |
3257ec797d3a8c Maxime Ripard 2018-05-17 865 VC4_SET_FIELD(SCALER_CTL0_RGBA_EXPAND_ROUND, SCALER_CTL0_RGBA_EXPAND) |
c8b75bca92cbf0 Eric Anholt 2015-03-02 866 (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) |
e065a8dd30af70 Dave Stevenson 2018-03-16 867 (hvs_format << SCALER_CTL0_PIXEL_FORMAT_SHIFT) |
98830d91da082b Eric Anholt 2017-06-07 868 VC4_SET_FIELD(tiling, SCALER_CTL0_TILING) |
21af94cf1a4c2d Eric Anholt 2015-10-20 869 (vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) |
fc04023fafecf1 Eric Anholt 2015-12-30 870 VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) |
fc04023fafecf1 Eric Anholt 2015-12-30 871 VC4_SET_FIELD(scl1, SCALER_CTL0_SCL1));
c8b75bca92cbf0 Eric Anholt 2015-03-02 872
c8b75bca92cbf0 Eric Anholt 2015-03-02 873 /* Position Word 0: Image Positions and Alpha Value */
6674a904d68041 Eric Anholt 2015-12-30 874 vc4_state->pos0_offset = vc4_state->dlist_count;
c8b75bca92cbf0 Eric Anholt 2015-03-02 875 vc4_dlist_write(vc4_state,
22445f0316a253 Stefan Schake 2018-04-20 876 VC4_SET_FIELD(state->alpha >> 8, SCALER_POS0_FIXED_ALPHA) |
5c6799942003df Eric Anholt 2015-12-28 877 VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) |
5c6799942003df Eric Anholt 2015-12-28 878 VC4_SET_FIELD(vc4_state->crtc_y, SCALER_POS0_START_Y));
c8b75bca92cbf0 Eric Anholt 2015-03-02 879
21af94cf1a4c2d Eric Anholt 2015-10-20 880 /* Position Word 1: Scaled Image Dimensions. */
21af94cf1a4c2d Eric Anholt 2015-10-20 881 if (!vc4_state->is_unity) {
21af94cf1a4c2d Eric Anholt 2015-10-20 882 vc4_dlist_write(vc4_state,
21af94cf1a4c2d Eric Anholt 2015-10-20 883 VC4_SET_FIELD(vc4_state->crtc_w,
21af94cf1a4c2d Eric Anholt 2015-10-20 884 SCALER_POS1_SCL_WIDTH) |
21af94cf1a4c2d Eric Anholt 2015-10-20 885 VC4_SET_FIELD(vc4_state->crtc_h,
21af94cf1a4c2d Eric Anholt 2015-10-20 886 SCALER_POS1_SCL_HEIGHT));
21af94cf1a4c2d Eric Anholt 2015-10-20 887 }
c8b75bca92cbf0 Eric Anholt 2015-03-02 888
05202c241f1476 Stefan Schake 2018-03-09 889 /* Position Word 2: Source Image Size, Alpha */
6674a904d68041 Eric Anholt 2015-12-30 890 vc4_state->pos2_offset = vc4_state->dlist_count;
c8b75bca92cbf0 Eric Anholt 2015-03-02 891 vc4_dlist_write(vc4_state,
124e5dac9a596a Maxime Ripard 2017-12-22 892 VC4_SET_FIELD(fb->format->has_alpha ?
c8b75bca92cbf0 Eric Anholt 2015-03-02 893 SCALER_POS2_ALPHA_MODE_PIPELINE :
c8b75bca92cbf0 Eric Anholt 2015-03-02 894 SCALER_POS2_ALPHA_MODE_FIXED,
c8b75bca92cbf0 Eric Anholt 2015-03-02 895 SCALER_POS2_ALPHA_MODE) |
22445f0316a253 Stefan Schake 2018-04-20 896 (mix_plane_alpha ? SCALER_POS2_ALPHA_MIX : 0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 897 (fb->format->has_alpha ?
c54619b0bfb35c Dave Stevenson 2020-09-03 898 SCALER_POS2_ALPHA_PREMULT : 0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 899 VC4_SET_FIELD(vc4_state->src_w[0],
c54619b0bfb35c Dave Stevenson 2020-09-03 900 SCALER_POS2_WIDTH) |
c54619b0bfb35c Dave Stevenson 2020-09-03 901 VC4_SET_FIELD(vc4_state->src_h[0],
c54619b0bfb35c Dave Stevenson 2020-09-03 902 SCALER_POS2_HEIGHT));
c54619b0bfb35c Dave Stevenson 2020-09-03 903
c54619b0bfb35c Dave Stevenson 2020-09-03 904 /* Position Word 3: Context. Written by the HVS. */
c54619b0bfb35c Dave Stevenson 2020-09-03 905 vc4_dlist_write(vc4_state, 0xc0c0c0c0);
c54619b0bfb35c Dave Stevenson 2020-09-03 906
c54619b0bfb35c Dave Stevenson 2020-09-03 907 } else {
c54619b0bfb35c Dave Stevenson 2020-09-03 908 u32 hvs_pixel_order = format->pixel_order;
c54619b0bfb35c Dave Stevenson 2020-09-03 909
c54619b0bfb35c Dave Stevenson 2020-09-03 910 if (format->pixel_order_hvs5)
c54619b0bfb35c Dave Stevenson 2020-09-03 911 hvs_pixel_order = format->pixel_order_hvs5;
c54619b0bfb35c Dave Stevenson 2020-09-03 912
c54619b0bfb35c Dave Stevenson 2020-09-03 913 /* Control word */
c54619b0bfb35c Dave Stevenson 2020-09-03 914 vc4_dlist_write(vc4_state,
c54619b0bfb35c Dave Stevenson 2020-09-03 915 SCALER_CTL0_VALID |
c54619b0bfb35c Dave Stevenson 2020-09-03 916 (hvs_pixel_order << SCALER_CTL0_ORDER_SHIFT) |
c54619b0bfb35c Dave Stevenson 2020-09-03 917 (hvs_format << SCALER_CTL0_PIXEL_FORMAT_SHIFT) |
c54619b0bfb35c Dave Stevenson 2020-09-03 918 VC4_SET_FIELD(tiling, SCALER_CTL0_TILING) |
c54619b0bfb35c Dave Stevenson 2020-09-03 919 (vc4_state->is_unity ?
c54619b0bfb35c Dave Stevenson 2020-09-03 920 SCALER5_CTL0_UNITY : 0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 921 VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 922 VC4_SET_FIELD(scl1, SCALER_CTL0_SCL1) |
c54619b0bfb35c Dave Stevenson 2020-09-03 923 SCALER5_CTL0_ALPHA_EXPAND |
c54619b0bfb35c Dave Stevenson 2020-09-03 924 SCALER5_CTL0_RGB_EXPAND);
c54619b0bfb35c Dave Stevenson 2020-09-03 925
c54619b0bfb35c Dave Stevenson 2020-09-03 926 /* Position Word 0: Image Positions and Alpha Value */
c54619b0bfb35c Dave Stevenson 2020-09-03 927 vc4_state->pos0_offset = vc4_state->dlist_count;
c54619b0bfb35c Dave Stevenson 2020-09-03 928 vc4_dlist_write(vc4_state,
c54619b0bfb35c Dave Stevenson 2020-09-03 929 (rotation & DRM_MODE_REFLECT_Y ?
c54619b0bfb35c Dave Stevenson 2020-09-03 930 SCALER5_POS0_VFLIP : 0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 931 VC4_SET_FIELD(vc4_state->crtc_x,
c54619b0bfb35c Dave Stevenson 2020-09-03 932 SCALER_POS0_START_X) |
c54619b0bfb35c Dave Stevenson 2020-09-03 933 (rotation & DRM_MODE_REFLECT_X ?
c54619b0bfb35c Dave Stevenson 2020-09-03 934 SCALER5_POS0_HFLIP : 0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 935 VC4_SET_FIELD(vc4_state->crtc_y,
c54619b0bfb35c Dave Stevenson 2020-09-03 936 SCALER5_POS0_START_Y)
c54619b0bfb35c Dave Stevenson 2020-09-03 937 );
c54619b0bfb35c Dave Stevenson 2020-09-03 938
c54619b0bfb35c Dave Stevenson 2020-09-03 939 /* Control Word 2 */
c54619b0bfb35c Dave Stevenson 2020-09-03 940 vc4_dlist_write(vc4_state,
c54619b0bfb35c Dave Stevenson 2020-09-03 941 VC4_SET_FIELD(state->alpha >> 4,
c54619b0bfb35c Dave Stevenson 2020-09-03 942 SCALER5_CTL2_ALPHA) |
4494346392204a Nathan Chancellor 2020-09-10 943 (fb->format->has_alpha ?
4494346392204a Nathan Chancellor 2020-09-10 944 SCALER5_CTL2_ALPHA_PREMULT : 0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 945 (mix_plane_alpha ?
c54619b0bfb35c Dave Stevenson 2020-09-03 946 SCALER5_CTL2_ALPHA_MIX : 0) |
c54619b0bfb35c Dave Stevenson 2020-09-03 947 VC4_SET_FIELD(fb->format->has_alpha ?
c54619b0bfb35c Dave Stevenson 2020-09-03 948 SCALER5_CTL2_ALPHA_MODE_PIPELINE :
c54619b0bfb35c Dave Stevenson 2020-09-03 949 SCALER5_CTL2_ALPHA_MODE_FIXED,
c54619b0bfb35c Dave Stevenson 2020-09-03 950 SCALER5_CTL2_ALPHA_MODE)
c54619b0bfb35c Dave Stevenson 2020-09-03 951 );
c54619b0bfb35c Dave Stevenson 2020-09-03 952
c54619b0bfb35c Dave Stevenson 2020-09-03 953 /* Position Word 1: Scaled Image Dimensions. */
c54619b0bfb35c Dave Stevenson 2020-09-03 954 if (!vc4_state->is_unity) {
c54619b0bfb35c Dave Stevenson 2020-09-03 955 vc4_dlist_write(vc4_state,
c54619b0bfb35c Dave Stevenson 2020-09-03 956 VC4_SET_FIELD(vc4_state->crtc_w,
f6b57101a6b312 Dom Cobley 2021-01-21 957 SCALER5_POS1_SCL_WIDTH) |
c54619b0bfb35c Dave Stevenson 2020-09-03 958 VC4_SET_FIELD(vc4_state->crtc_h,
f6b57101a6b312 Dom Cobley 2021-01-21 959 SCALER5_POS1_SCL_HEIGHT));
c54619b0bfb35c Dave Stevenson 2020-09-03 960 }
c54619b0bfb35c Dave Stevenson 2020-09-03 961
c54619b0bfb35c Dave Stevenson 2020-09-03 962 /* Position Word 2: Source Image Size */
c54619b0bfb35c Dave Stevenson 2020-09-03 963 vc4_state->pos2_offset = vc4_state->dlist_count;
c54619b0bfb35c Dave Stevenson 2020-09-03 964 vc4_dlist_write(vc4_state,
c54619b0bfb35c Dave Stevenson 2020-09-03 965 VC4_SET_FIELD(vc4_state->src_w[0],
c54619b0bfb35c Dave Stevenson 2020-09-03 966 SCALER5_POS2_WIDTH) |
c54619b0bfb35c Dave Stevenson 2020-09-03 967 VC4_SET_FIELD(vc4_state->src_h[0],
c54619b0bfb35c Dave Stevenson 2020-09-03 968 SCALER5_POS2_HEIGHT));
c8b75bca92cbf0 Eric Anholt 2015-03-02 969
c8b75bca92cbf0 Eric Anholt 2015-03-02 970 /* Position Word 3: Context. Written by the HVS. */
c8b75bca92cbf0 Eric Anholt 2015-03-02 971 vc4_dlist_write(vc4_state, 0xc0c0c0c0);
c54619b0bfb35c Dave Stevenson 2020-09-03 972 }
c8b75bca92cbf0 Eric Anholt 2015-03-02 973
fc04023fafecf1 Eric Anholt 2015-12-30 974
fc04023fafecf1 Eric Anholt 2015-12-30 975 /* Pointer Word 0/1/2: RGB / Y / Cb / Cr Pointers
fc04023fafecf1 Eric Anholt 2015-12-30 976 *
fc04023fafecf1 Eric Anholt 2015-12-30 977 * The pointers may be any byte address.
fc04023fafecf1 Eric Anholt 2015-12-30 978 */
6674a904d68041 Eric Anholt 2015-12-30 979 vc4_state->ptr0_offset = vc4_state->dlist_count;
fc04023fafecf1 Eric Anholt 2015-12-30 980 for (i = 0; i < num_planes; i++)
fc04023fafecf1 Eric Anholt 2015-12-30 981 vc4_dlist_write(vc4_state, vc4_state->offsets[i]);
c8b75bca92cbf0 Eric Anholt 2015-03-02 982
fc04023fafecf1 Eric Anholt 2015-12-30 983 /* Pointer Context Word 0/1/2: Written by the HVS */
fc04023fafecf1 Eric Anholt 2015-12-30 984 for (i = 0; i < num_planes; i++)
c8b75bca92cbf0 Eric Anholt 2015-03-02 985 vc4_dlist_write(vc4_state, 0xc0c0c0c0);
c8b75bca92cbf0 Eric Anholt 2015-03-02 986
98830d91da082b Eric Anholt 2017-06-07 987 /* Pitch word 0 */
98830d91da082b Eric Anholt 2017-06-07 988 vc4_dlist_write(vc4_state, pitch0);
98830d91da082b Eric Anholt 2017-06-07 989
98830d91da082b Eric Anholt 2017-06-07 990 /* Pitch word 1/2 */
98830d91da082b Eric Anholt 2017-06-07 991 for (i = 1; i < num_planes; i++) {
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 992 if (hvs_format != HVS_PIXEL_FORMAT_H264 &&
d4c05e7a5da7b6 Dave Stevenson 2021-11-17 993 hvs_format != HVS_PIXEL_FORMAT_YCBCR_10BIT) {
c8b75bca92cbf0 Eric Anholt 2015-03-02 994 vc4_dlist_write(vc4_state,
e065a8dd30af70 Dave Stevenson 2018-03-16 995 VC4_SET_FIELD(fb->pitches[i],
e065a8dd30af70 Dave Stevenson 2018-03-16 996 SCALER_SRC_PITCH));
e065a8dd30af70 Dave Stevenson 2018-03-16 997 } else {
e065a8dd30af70 Dave Stevenson 2018-03-16 998 vc4_dlist_write(vc4_state, pitch0);
e065a8dd30af70 Dave Stevenson 2018-03-16 999 }
fc04023fafecf1 Eric Anholt 2015-12-30 1000 }
fc04023fafecf1 Eric Anholt 2015-12-30 1001
fc04023fafecf1 Eric Anholt 2015-12-30 1002 /* Colorspace conversion words */
fc04023fafecf1 Eric Anholt 2015-12-30 1003 if (vc4_state->is_yuv) {
fc04023fafecf1 Eric Anholt 2015-12-30 1004 vc4_dlist_write(vc4_state, SCALER_CSC0_ITR_R_601_5);
fc04023fafecf1 Eric Anholt 2015-12-30 1005 vc4_dlist_write(vc4_state, SCALER_CSC1_ITR_R_601_5);
fc04023fafecf1 Eric Anholt 2015-12-30 1006 vc4_dlist_write(vc4_state, SCALER_CSC2_ITR_R_601_5);
fc04023fafecf1 Eric Anholt 2015-12-30 1007 }
c8b75bca92cbf0 Eric Anholt 2015-03-02 1008
0a038c1c29a7a3 Boris Brezillon 2018-11-30 1009 vc4_state->lbm_offset = 0;
0a038c1c29a7a3 Boris Brezillon 2018-11-30 1010
658d8cbd07dae2 Boris Brezillon 2018-07-25 1011 if (vc4_state->x_scaling[0] != VC4_SCALING_NONE ||
658d8cbd07dae2 Boris Brezillon 2018-07-25 1012 vc4_state->x_scaling[1] != VC4_SCALING_NONE ||
658d8cbd07dae2 Boris Brezillon 2018-07-25 1013 vc4_state->y_scaling[0] != VC4_SCALING_NONE ||
658d8cbd07dae2 Boris Brezillon 2018-07-25 1014 vc4_state->y_scaling[1] != VC4_SCALING_NONE) {
0a038c1c29a7a3 Boris Brezillon 2018-11-30 1015 /* Reserve a slot for the LBM Base Address. The real value will
0a038c1c29a7a3 Boris Brezillon 2018-11-30 1016 * be set when calling vc4_plane_allocate_lbm().
0a038c1c29a7a3 Boris Brezillon 2018-11-30 1017 */
fc04023fafecf1 Eric Anholt 2015-12-30 1018 if (vc4_state->y_scaling[0] != VC4_SCALING_NONE ||
facd93f4285c40 Maxime Ripard 2021-01-29 1019 vc4_state->y_scaling[1] != VC4_SCALING_NONE) {
facd93f4285c40 Maxime Ripard 2021-01-29 1020 vc4_state->lbm_offset = vc4_state->dlist_count;
facd93f4285c40 Maxime Ripard 2021-01-29 1021 vc4_dlist_counter_increment(vc4_state);
facd93f4285c40 Maxime Ripard 2021-01-29 1022 }
21af94cf1a4c2d Eric Anholt 2015-10-20 1023
fc04023fafecf1 Eric Anholt 2015-12-30 1024 if (num_planes > 1) {
fc04023fafecf1 Eric Anholt 2015-12-30 1025 /* Emit Cb/Cr as channel 0 and Y as channel
fc04023fafecf1 Eric Anholt 2015-12-30 1026 * 1. This matches how we set up scl0/scl1
fc04023fafecf1 Eric Anholt 2015-12-30 1027 * above.
fc04023fafecf1 Eric Anholt 2015-12-30 1028 */
fc04023fafecf1 Eric Anholt 2015-12-30 1029 vc4_write_scaling_parameters(state, 1);
fc04023fafecf1 Eric Anholt 2015-12-30 1030 }
fc04023fafecf1 Eric Anholt 2015-12-30 1031 vc4_write_scaling_parameters(state, 0);
21af94cf1a4c2d Eric Anholt 2015-10-20 1032
21af94cf1a4c2d Eric Anholt 2015-10-20 1033 /* If any PPF setup was done, then all the kernel
21af94cf1a4c2d Eric Anholt 2015-10-20 1034 * pointers get uploaded.
21af94cf1a4c2d Eric Anholt 2015-10-20 1035 */
fc04023fafecf1 Eric Anholt 2015-12-30 1036 if (vc4_state->x_scaling[0] == VC4_SCALING_PPF ||
fc04023fafecf1 Eric Anholt 2015-12-30 1037 vc4_state->y_scaling[0] == VC4_SCALING_PPF ||
fc04023fafecf1 Eric Anholt 2015-12-30 1038 vc4_state->x_scaling[1] == VC4_SCALING_PPF ||
fc04023fafecf1 Eric Anholt 2015-12-30 1039 vc4_state->y_scaling[1] == VC4_SCALING_PPF) {
21af94cf1a4c2d Eric Anholt 2015-10-20 1040 u32 kernel = VC4_SET_FIELD(vc4->hvs->mitchell_netravali_filter.start,
21af94cf1a4c2d Eric Anholt 2015-10-20 1041 SCALER_PPF_KERNEL_OFFSET);
21af94cf1a4c2d Eric Anholt 2015-10-20 1042
21af94cf1a4c2d Eric Anholt 2015-10-20 1043 /* HPPF plane 0 */
21af94cf1a4c2d Eric Anholt 2015-10-20 1044 vc4_dlist_write(vc4_state, kernel);
21af94cf1a4c2d Eric Anholt 2015-10-20 1045 /* VPPF plane 0 */
21af94cf1a4c2d Eric Anholt 2015-10-20 1046 vc4_dlist_write(vc4_state, kernel);
21af94cf1a4c2d Eric Anholt 2015-10-20 1047 /* HPPF plane 1 */
21af94cf1a4c2d Eric Anholt 2015-10-20 1048 vc4_dlist_write(vc4_state, kernel);
21af94cf1a4c2d Eric Anholt 2015-10-20 1049 /* VPPF plane 1 */
21af94cf1a4c2d Eric Anholt 2015-10-20 1050 vc4_dlist_write(vc4_state, kernel);
21af94cf1a4c2d Eric Anholt 2015-10-20 1051 }
21af94cf1a4c2d Eric Anholt 2015-10-20 1052 }
21af94cf1a4c2d Eric Anholt 2015-10-20 1053
c8b75bca92cbf0 Eric Anholt 2015-03-02 1054 vc4_state->dlist[ctl0_offset] |=
c8b75bca92cbf0 Eric Anholt 2015-03-02 1055 VC4_SET_FIELD(vc4_state->dlist_count, SCALER_CTL0_SIZE);
c8b75bca92cbf0 Eric Anholt 2015-03-02 1056
3d67b68a6a3c2d Stefan Schake 2018-03-09 1057 /* crtc_* are already clipped coordinates. */
3d67b68a6a3c2d Stefan Schake 2018-03-09 1058 covers_screen = vc4_state->crtc_x == 0 && vc4_state->crtc_y == 0 &&
3d67b68a6a3c2d Stefan Schake 2018-03-09 1059 vc4_state->crtc_w == state->crtc->mode.hdisplay &&
3d67b68a6a3c2d Stefan Schake 2018-03-09 1060 vc4_state->crtc_h == state->crtc->mode.vdisplay;
3d67b68a6a3c2d Stefan Schake 2018-03-09 1061 /* Background fill might be necessary when the plane has per-pixel
22445f0316a253 Stefan Schake 2018-04-20 1062 * alpha content or a non-opaque plane alpha and could blend from the
22445f0316a253 Stefan Schake 2018-04-20 1063 * background or does not cover the entire screen.
3d67b68a6a3c2d Stefan Schake 2018-03-09 1064 */
22445f0316a253 Stefan Schake 2018-04-20 1065 vc4_state->needs_bg_fill = fb->format->has_alpha || !covers_screen ||
22445f0316a253 Stefan Schake 2018-04-20 1066 state->alpha != DRM_BLEND_ALPHA_OPAQUE;
3d67b68a6a3c2d Stefan Schake 2018-03-09 1067
8d93844965c3d5 Boris Brezillon 2018-11-30 1068 /* Flag the dlist as initialized to avoid checking it twice in case
8d93844965c3d5 Boris Brezillon 2018-11-30 1069 * the async update check already called vc4_plane_mode_set() and
8d93844965c3d5 Boris Brezillon 2018-11-30 1070 * decided to fallback to sync update because async update was not
8d93844965c3d5 Boris Brezillon 2018-11-30 1071 * possible.
8d93844965c3d5 Boris Brezillon 2018-11-30 1072 */
8d93844965c3d5 Boris Brezillon 2018-11-30 1073 vc4_state->dlist_initialized = 1;
8d93844965c3d5 Boris Brezillon 2018-11-30 1074
4686da83154d87 Boris Brezillon 2019-02-20 1075 vc4_plane_calc_load(state);
4686da83154d87 Boris Brezillon 2019-02-20 1076
c8b75bca92cbf0 Eric Anholt 2015-03-02 1077 return 0;
c8b75bca92cbf0 Eric Anholt 2015-03-02 1078 }
c8b75bca92cbf0 Eric Anholt 2015-03-02 1079
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
More information about the dri-devel
mailing list