@@ -1454,16 +1454,18 @@ static void vop2_plane_atomic_update(struct drm_plane *plane,
1454
1454
vop2_win_write (win , VOP2_WIN_AFBC_HALF_BLOCK_EN , half_block_en );
1455
1455
1456
1456
if (afbc_en ) {
1457
- u32 stride ;
1457
+ u32 stride , block_w ;
1458
+
1459
+ /* the afbc superblock is 16 x 16 or 32 x 8 */
1460
+ block_w = fb -> modifier & AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 ? 32 : 16 ;
1458
1461
1459
- /* the afbc superblock is 16 x 16 */
1460
1462
afbc_format = vop2_convert_afbc_format (fb -> format -> format );
1461
1463
1462
1464
/* Enable color transform for YTR */
1463
1465
if (fb -> modifier & AFBC_FORMAT_MOD_YTR )
1464
1466
afbc_format |= (1 << 4 );
1465
1467
1466
- afbc_tile_num = ALIGN (actual_w , 16 ) >> 4 ;
1468
+ afbc_tile_num = ALIGN (actual_w , block_w ) / block_w ;
1467
1469
1468
1470
/*
1469
1471
* AFBC pic_vir_width is count by pixel, this is different
@@ -1474,6 +1476,9 @@ static void vop2_plane_atomic_update(struct drm_plane *plane,
1474
1476
drm_dbg_kms (vop2 -> drm , "vp%d %s stride[%d] not 64 pixel aligned\n" ,
1475
1477
vp -> id , win -> data -> name , stride );
1476
1478
1479
+ /* It's for head stride, each head size is 16 byte */
1480
+ stride = ALIGN (stride , block_w ) / block_w * 16 ;
1481
+
1477
1482
uv_swap = vop2_afbc_uv_swap (fb -> format -> format );
1478
1483
/*
1479
1484
* This is a workaround for crazy IC design, Cluster
@@ -1504,7 +1509,11 @@ static void vop2_plane_atomic_update(struct drm_plane *plane,
1504
1509
else
1505
1510
vop2_win_write (win , VOP2_WIN_AFBC_AUTO_GATING_EN , 1 );
1506
1511
1507
- vop2_win_write (win , VOP2_WIN_AFBC_BLOCK_SPLIT_EN , 0 );
1512
+ if (fb -> modifier & AFBC_FORMAT_MOD_SPLIT )
1513
+ vop2_win_write (win , VOP2_WIN_AFBC_BLOCK_SPLIT_EN , 1 );
1514
+ else
1515
+ vop2_win_write (win , VOP2_WIN_AFBC_BLOCK_SPLIT_EN , 0 );
1516
+
1508
1517
transform_offset = vop2_afbc_transform_offset (pstate , half_block_en );
1509
1518
vop2_win_write (win , VOP2_WIN_AFBC_HDR_PTR , yrgb_mst );
1510
1519
vop2_win_write (win , VOP2_WIN_AFBC_PIC_SIZE , act_info );
0 commit comments