@@ -104,6 +104,13 @@ static const struct encoder_constraint vc5_encoder_constraints[] = {
104
104
ENCODER_CONSTRAINT (VC4_ENCODER_TYPE_HDMI1 , 0 , 1 , 2 ),
105
105
};
106
106
107
+ static const struct encoder_constraint vc6_encoder_constraints [] = {
108
+ ENCODER_CONSTRAINT (VC4_ENCODER_TYPE_HDMI0 , 0 ),
109
+ ENCODER_CONSTRAINT (VC4_ENCODER_TYPE_HDMI1 , 1 ),
110
+ ENCODER_CONSTRAINT (VC4_ENCODER_TYPE_TXP1 , 1 ),
111
+ ENCODER_CONSTRAINT (VC4_ENCODER_TYPE_TXP0 , 2 ),
112
+ };
113
+
107
114
static bool check_vc4_encoder_constraints (enum vc4_encoder_type type , unsigned int channel )
108
115
{
109
116
return __check_encoder_constraints (vc4_encoder_constraints ,
@@ -118,6 +125,13 @@ static bool check_vc5_encoder_constraints(enum vc4_encoder_type type, unsigned i
118
125
type , channel );
119
126
}
120
127
128
+ static bool check_vc6_encoder_constraints (enum vc4_encoder_type type , unsigned int channel )
129
+ {
130
+ return __check_encoder_constraints (vc6_encoder_constraints ,
131
+ ARRAY_SIZE (vc6_encoder_constraints ),
132
+ type , channel );
133
+ }
134
+
121
135
static struct vc4_crtc_state *
122
136
get_vc4_crtc_state_for_encoder (struct kunit * test ,
123
137
const struct drm_atomic_state * state ,
@@ -195,6 +209,9 @@ static void vc4_test_pv_muxing_desc(const struct pv_muxing_param *t, char *desc)
195
209
#define VC5_PV_MUXING_TEST (_name , ...) \
196
210
PV_MUXING_TEST(_name, vc5_mock_device, check_vc5_encoder_constraints, __VA_ARGS__)
197
211
212
+ #define VC6_PV_MUXING_TEST (_name , ...) \
213
+ PV_MUXING_TEST(_name, vc6_mock_device, check_vc6_encoder_constraints, __VA_ARGS__)
214
+
198
215
static const struct pv_muxing_param vc4_test_pv_muxing_params [] = {
199
216
VC4_PV_MUXING_TEST ("1 output: DSI0" ,
200
217
VC4_ENCODER_TYPE_DSI0 ),
@@ -673,6 +690,54 @@ KUNIT_ARRAY_PARAM(vc5_test_pv_muxing_invalid,
673
690
vc5_test_pv_muxing_invalid_params ,
674
691
vc4_test_pv_muxing_desc );
675
692
693
+ static const struct pv_muxing_param vc6_test_pv_muxing_params [] = {
694
+ VC6_PV_MUXING_TEST ("1 output: HDMI0" ,
695
+ VC4_ENCODER_TYPE_HDMI0 ),
696
+ VC6_PV_MUXING_TEST ("1 output: HDMI1" ,
697
+ VC4_ENCODER_TYPE_HDMI1 ),
698
+ VC6_PV_MUXING_TEST ("1 output: MOPLET" ,
699
+ VC4_ENCODER_TYPE_TXP1 ),
700
+ VC6_PV_MUXING_TEST ("1 output: MOP" ,
701
+ VC4_ENCODER_TYPE_TXP0 ),
702
+ VC6_PV_MUXING_TEST ("2 outputs: HDMI0, HDMI1" ,
703
+ VC4_ENCODER_TYPE_HDMI0 ,
704
+ VC4_ENCODER_TYPE_HDMI1 ),
705
+ VC6_PV_MUXING_TEST ("2 outputs: HDMI0, MOPLET" ,
706
+ VC4_ENCODER_TYPE_HDMI0 ,
707
+ VC4_ENCODER_TYPE_TXP1 ),
708
+ VC6_PV_MUXING_TEST ("2 outputs: HDMI0, MOP" ,
709
+ VC4_ENCODER_TYPE_HDMI0 ,
710
+ VC4_ENCODER_TYPE_TXP0 ),
711
+ VC6_PV_MUXING_TEST ("2 outputs: HDMI1, MOP" ,
712
+ VC4_ENCODER_TYPE_HDMI1 ,
713
+ VC4_ENCODER_TYPE_TXP0 ),
714
+ VC6_PV_MUXING_TEST ("2 outputs: MOPLET, MOP" ,
715
+ VC4_ENCODER_TYPE_TXP1 ,
716
+ VC4_ENCODER_TYPE_TXP0 ),
717
+ VC6_PV_MUXING_TEST ("3 outputs: HDMI0, HDMI1, MOP" ,
718
+ VC4_ENCODER_TYPE_HDMI0 ,
719
+ VC4_ENCODER_TYPE_HDMI1 ,
720
+ VC4_ENCODER_TYPE_TXP0 ),
721
+ VC6_PV_MUXING_TEST ("3 outputs: HDMI0, MOPLET, MOP" ,
722
+ VC4_ENCODER_TYPE_HDMI0 ,
723
+ VC4_ENCODER_TYPE_TXP1 ,
724
+ VC4_ENCODER_TYPE_TXP0 ),
725
+ };
726
+
727
+ KUNIT_ARRAY_PARAM (vc6_test_pv_muxing ,
728
+ vc6_test_pv_muxing_params ,
729
+ vc4_test_pv_muxing_desc );
730
+
731
+ static const struct pv_muxing_param vc6_test_pv_muxing_invalid_params [] = {
732
+ VC6_PV_MUXING_TEST ("HDMI1/MOPLET Conflict" ,
733
+ VC4_ENCODER_TYPE_HDMI1 ,
734
+ VC4_ENCODER_TYPE_TXP1 ),
735
+ };
736
+
737
+ KUNIT_ARRAY_PARAM (vc6_test_pv_muxing_invalid ,
738
+ vc6_test_pv_muxing_invalid_params ,
739
+ vc4_test_pv_muxing_desc );
740
+
676
741
static void drm_vc4_test_pv_muxing (struct kunit * test )
677
742
{
678
743
const struct pv_muxing_param * params = test -> param_value ;
@@ -777,6 +842,21 @@ static struct kunit_suite vc5_pv_muxing_test_suite = {
777
842
.test_cases = vc5_pv_muxing_tests ,
778
843
};
779
844
845
+ static struct kunit_case vc6_pv_muxing_tests [] = {
846
+ KUNIT_CASE_PARAM (drm_vc4_test_pv_muxing ,
847
+ vc6_test_pv_muxing_gen_params ),
848
+ KUNIT_CASE_PARAM (drm_vc4_test_pv_muxing_invalid ,
849
+ vc6_test_pv_muxing_invalid_gen_params ),
850
+ {}
851
+ };
852
+
853
+ static struct kunit_suite vc6_pv_muxing_test_suite = {
854
+ .name = "vc6-pv-muxing-combinations" ,
855
+ .init = vc4_pv_muxing_test_init ,
856
+ .exit = vc4_pv_muxing_test_exit ,
857
+ .test_cases = vc6_pv_muxing_tests ,
858
+ };
859
+
780
860
/* See
781
861
* https://lore.kernel.org/all/3e113525-aa89-b1e2-56b7-ca55bd41d057@samsung.com/
782
862
* and
@@ -1009,5 +1089,6 @@ static struct kunit_suite vc5_pv_muxing_bugs_test_suite = {
1009
1089
kunit_test_suites (
1010
1090
& vc4_pv_muxing_test_suite ,
1011
1091
& vc5_pv_muxing_test_suite ,
1092
+ & vc6_pv_muxing_test_suite ,
1012
1093
& vc5_pv_muxing_bugs_test_suite
1013
1094
);
0 commit comments