@@ -486,6 +486,7 @@ static void mtk_drm_crtc_hw_config(struct mtk_drm_crtc *mtk_crtc)
486
486
}
487
487
#if IS_REACHABLE (CONFIG_MTK_CMDQ )
488
488
if (mtk_crtc -> cmdq_client ) {
489
+ mbox_flush (mtk_crtc -> cmdq_client -> chan , 2000 );
489
490
cmdq_handle = cmdq_pkt_create (mtk_crtc -> cmdq_client , PAGE_SIZE );
490
491
cmdq_pkt_clear_event (cmdq_handle , mtk_crtc -> cmdq_event );
491
492
cmdq_pkt_wfe (cmdq_handle , mtk_crtc -> cmdq_event );
@@ -636,10 +637,18 @@ static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {
636
637
637
638
static int mtk_drm_crtc_init (struct drm_device * drm ,
638
639
struct mtk_drm_crtc * mtk_crtc ,
639
- struct drm_plane * primary ,
640
- struct drm_plane * cursor , unsigned int pipe )
640
+ unsigned int pipe )
641
641
{
642
- int ret ;
642
+ struct drm_plane * primary = NULL ;
643
+ struct drm_plane * cursor = NULL ;
644
+ int i , ret ;
645
+
646
+ for (i = 0 ; i < mtk_crtc -> layer_nr ; i ++ ) {
647
+ if (mtk_crtc -> planes [i ].type == DRM_PLANE_TYPE_PRIMARY )
648
+ primary = & mtk_crtc -> planes [i ];
649
+ else if (mtk_crtc -> planes [i ].type == DRM_PLANE_TYPE_CURSOR )
650
+ cursor = & mtk_crtc -> planes [i ];
651
+ }
643
652
644
653
ret = drm_crtc_init_with_planes (drm , & mtk_crtc -> base , primary , cursor ,
645
654
& mtk_crtc_funcs , NULL );
@@ -689,11 +698,12 @@ static int mtk_drm_crtc_num_comp_planes(struct mtk_drm_crtc *mtk_crtc,
689
698
}
690
699
691
700
static inline
692
- enum drm_plane_type mtk_drm_crtc_plane_type (unsigned int plane_idx )
701
+ enum drm_plane_type mtk_drm_crtc_plane_type (unsigned int plane_idx ,
702
+ unsigned int num_planes )
693
703
{
694
704
if (plane_idx == 0 )
695
705
return DRM_PLANE_TYPE_PRIMARY ;
696
- else if (plane_idx == 1 )
706
+ else if (plane_idx == ( num_planes - 1 ) )
697
707
return DRM_PLANE_TYPE_CURSOR ;
698
708
else
699
709
return DRM_PLANE_TYPE_OVERLAY ;
@@ -712,7 +722,8 @@ static int mtk_drm_crtc_init_comp_planes(struct drm_device *drm_dev,
712
722
ret = mtk_plane_init (drm_dev ,
713
723
& mtk_crtc -> planes [mtk_crtc -> layer_nr ],
714
724
BIT (pipe ),
715
- mtk_drm_crtc_plane_type (mtk_crtc -> layer_nr ),
725
+ mtk_drm_crtc_plane_type (mtk_crtc -> layer_nr ,
726
+ num_planes ),
716
727
mtk_ddp_comp_supported_rotations (comp ));
717
728
if (ret )
718
729
return ret ;
@@ -807,9 +818,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
807
818
return ret ;
808
819
}
809
820
810
- ret = mtk_drm_crtc_init (drm_dev , mtk_crtc , & mtk_crtc -> planes [0 ],
811
- mtk_crtc -> layer_nr > 1 ? & mtk_crtc -> planes [1 ] :
812
- NULL , pipe );
821
+ ret = mtk_drm_crtc_init (drm_dev , mtk_crtc , pipe );
813
822
if (ret < 0 )
814
823
return ret ;
815
824
@@ -828,7 +837,8 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
828
837
drm_crtc_index (& mtk_crtc -> base ));
829
838
mtk_crtc -> cmdq_client = NULL ;
830
839
}
831
- ret = of_property_read_u32_index (dev -> of_node , "mediatek,gce-events" ,
840
+ ret = of_property_read_u32_index (priv -> mutex_node ,
841
+ "mediatek,gce-events" ,
832
842
drm_crtc_index (& mtk_crtc -> base ),
833
843
& mtk_crtc -> cmdq_event );
834
844
if (ret )
0 commit comments