@@ -350,7 +350,8 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
350350 .formats = formats_smart ,
351351 .nformats = ARRAY_SIZE (formats_smart ),
352352 .format_modifiers = format_modifiers ,
353- .layer_sel_id = 3 ,
353+ /* 0xf means this layer can't attached to this VP */
354+ .layer_sel_id = { 3 , 3 , 3 , 0xf },
354355 .supported_rotations = DRM_MODE_REFLECT_Y ,
355356 .type = DRM_PLANE_TYPE_PRIMARY ,
356357 .max_upscale_factor = 8 ,
@@ -363,7 +364,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
363364 .nformats = ARRAY_SIZE (formats_smart ),
364365 .format_modifiers = format_modifiers ,
365366 .base = 0x1e00 ,
366- .layer_sel_id = 7 ,
367+ .layer_sel_id = { 7 , 7 , 7 , 0xf } ,
367368 .supported_rotations = DRM_MODE_REFLECT_Y ,
368369 .type = DRM_PLANE_TYPE_PRIMARY ,
369370 .max_upscale_factor = 8 ,
@@ -376,7 +377,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
376377 .nformats = ARRAY_SIZE (formats_rk356x_esmart ),
377378 .format_modifiers = format_modifiers ,
378379 .base = 0x1a00 ,
379- .layer_sel_id = 6 ,
380+ .layer_sel_id = { 6 , 6 , 6 , 0xf } ,
380381 .supported_rotations = DRM_MODE_REFLECT_Y ,
381382 .type = DRM_PLANE_TYPE_PRIMARY ,
382383 .max_upscale_factor = 8 ,
@@ -389,7 +390,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
389390 .nformats = ARRAY_SIZE (formats_rk356x_esmart ),
390391 .format_modifiers = format_modifiers ,
391392 .base = 0x1800 ,
392- .layer_sel_id = 2 ,
393+ .layer_sel_id = { 2 , 2 , 2 , 0xf } ,
393394 .supported_rotations = DRM_MODE_REFLECT_Y ,
394395 .type = DRM_PLANE_TYPE_PRIMARY ,
395396 .max_upscale_factor = 8 ,
@@ -402,7 +403,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
402403 .formats = formats_cluster ,
403404 .nformats = ARRAY_SIZE (formats_cluster ),
404405 .format_modifiers = format_modifiers_afbc ,
405- .layer_sel_id = 0 ,
406+ .layer_sel_id = { 0 , 0 , 0 , 0xf } ,
406407 .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
407408 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y ,
408409 .max_upscale_factor = 4 ,
@@ -417,7 +418,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
417418 .formats = formats_cluster ,
418419 .nformats = ARRAY_SIZE (formats_cluster ),
419420 .format_modifiers = format_modifiers_afbc ,
420- .layer_sel_id = 1 ,
421+ .layer_sel_id = { 1 , 1 , 1 , 0xf } ,
421422 .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
422423 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y ,
423424 .type = DRM_PLANE_TYPE_OVERLAY ,
@@ -582,7 +583,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
582583 .formats = formats_cluster ,
583584 .nformats = ARRAY_SIZE (formats_cluster ),
584585 .format_modifiers = format_modifiers_afbc ,
585- .layer_sel_id = 0 ,
586+ .layer_sel_id = { 0 , 0 , 0 , 0 } ,
586587 .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
587588 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y ,
588589 .axi_bus_id = 0 ,
@@ -600,7 +601,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
600601 .formats = formats_cluster ,
601602 .nformats = ARRAY_SIZE (formats_cluster ),
602603 .format_modifiers = format_modifiers_afbc ,
603- .layer_sel_id = 1 ,
604+ .layer_sel_id = { 1 , 1 , 1 , 1 } ,
604605 .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
605606 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y ,
606607 .type = DRM_PLANE_TYPE_PRIMARY ,
@@ -618,7 +619,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
618619 .formats = formats_cluster ,
619620 .nformats = ARRAY_SIZE (formats_cluster ),
620621 .format_modifiers = format_modifiers_afbc ,
621- .layer_sel_id = 4 ,
622+ .layer_sel_id = { 4 , 4 , 4 , 4 } ,
622623 .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
623624 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y ,
624625 .type = DRM_PLANE_TYPE_PRIMARY ,
@@ -636,7 +637,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
636637 .formats = formats_cluster ,
637638 .nformats = ARRAY_SIZE (formats_cluster ),
638639 .format_modifiers = format_modifiers_afbc ,
639- .layer_sel_id = 5 ,
640+ .layer_sel_id = { 5 , 5 , 5 , 5 } ,
640641 .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
641642 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y ,
642643 .type = DRM_PLANE_TYPE_PRIMARY ,
@@ -654,7 +655,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
654655 .nformats = ARRAY_SIZE (formats_esmart ),
655656 .format_modifiers = format_modifiers ,
656657 .base = 0x1800 ,
657- .layer_sel_id = 2 ,
658+ .layer_sel_id = { 2 , 2 , 2 , 2 } ,
658659 .supported_rotations = DRM_MODE_REFLECT_Y ,
659660 .type = DRM_PLANE_TYPE_OVERLAY ,
660661 .axi_bus_id = 0 ,
@@ -670,7 +671,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
670671 .nformats = ARRAY_SIZE (formats_esmart ),
671672 .format_modifiers = format_modifiers ,
672673 .base = 0x1a00 ,
673- .layer_sel_id = 3 ,
674+ .layer_sel_id = { 3 , 3 , 3 , 3 } ,
674675 .supported_rotations = DRM_MODE_REFLECT_Y ,
675676 .type = DRM_PLANE_TYPE_OVERLAY ,
676677 .axi_bus_id = 0 ,
@@ -686,7 +687,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
686687 .formats = formats_esmart ,
687688 .nformats = ARRAY_SIZE (formats_esmart ),
688689 .format_modifiers = format_modifiers ,
689- .layer_sel_id = 6 ,
690+ .layer_sel_id = { 6 , 6 , 6 , 6 } ,
690691 .supported_rotations = DRM_MODE_REFLECT_Y ,
691692 .type = DRM_PLANE_TYPE_OVERLAY ,
692693 .axi_bus_id = 1 ,
@@ -702,7 +703,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
702703 .nformats = ARRAY_SIZE (formats_esmart ),
703704 .format_modifiers = format_modifiers ,
704705 .base = 0x1e00 ,
705- .layer_sel_id = 7 ,
706+ .layer_sel_id = { 7 , 7 , 7 , 7 } ,
706707 .supported_rotations = DRM_MODE_REFLECT_Y ,
707708 .type = DRM_PLANE_TYPE_OVERLAY ,
708709 .axi_bus_id = 1 ,
@@ -1454,7 +1455,7 @@ static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
14541455 */
14551456 for (old_layer_id = 0 ; old_layer_id < vop2 -> data -> win_size ; old_layer_id ++ ) {
14561457 layer_sel_id = (layer_sel >> (4 * old_layer_id )) & 0xf ;
1457- if (layer_sel_id == win -> data -> layer_sel_id )
1458+ if (layer_sel_id == win -> data -> layer_sel_id [ vp -> id ] )
14581459 break ;
14591460 }
14601461
@@ -1464,7 +1465,7 @@ static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
14641465 for (i = 0 ; i < vop2 -> data -> win_size ; i ++ ) {
14651466 old_win = & vop2 -> win [i ];
14661467 layer_sel_id = (layer_sel >> (4 * layer_id )) & 0xf ;
1467- if (layer_sel_id == old_win -> data -> layer_sel_id )
1468+ if (layer_sel_id == old_win -> data -> layer_sel_id [ vp -> id ] )
14681469 break ;
14691470 }
14701471
@@ -1512,13 +1513,14 @@ static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
15121513 }
15131514
15141515 layer_sel &= ~RK3568_OVL_LAYER_SEL__LAYER (layer_id , 0x7 );
1515- layer_sel |= RK3568_OVL_LAYER_SEL__LAYER (layer_id , win -> data -> layer_sel_id );
1516+ layer_sel |= RK3568_OVL_LAYER_SEL__LAYER (layer_id , win -> data -> layer_sel_id [ vp -> id ] );
15161517 /*
15171518 * When we bind a window from layerM to layerN, we also need to move the old
15181519 * window on layerN to layerM to avoid one window selected by two or more layers.
15191520 */
15201521 layer_sel &= ~RK3568_OVL_LAYER_SEL__LAYER (old_layer_id , 0x7 );
1521- layer_sel |= RK3568_OVL_LAYER_SEL__LAYER (old_layer_id , old_win -> data -> layer_sel_id );
1522+ layer_sel |= RK3568_OVL_LAYER_SEL__LAYER (old_layer_id ,
1523+ old_win -> data -> layer_sel_id [vp -> id ]);
15221524 }
15231525
15241526 vop2_writel (vop2 , RK3568_OVL_LAYER_SEL , layer_sel );
0 commit comments