Skip to content

Commit 5f309f2

Browse files
mripardpopcornmix
authored andcommitted
drm/vc4: tests: Add tests for BCM2712 PixelValve Muxing
The BCM2712 has a simpler pipeline than the BCM2711, and thus the muxing requirements are different. Create some tests to make sure we get proper muxing decisions. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
1 parent c3d4d18 commit 5f309f2

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,13 @@ static const struct encoder_constraint vc5_encoder_constraints[] = {
104104
ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI1, 0, 1, 2),
105105
};
106106

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+
107114
static bool check_vc4_encoder_constraints(enum vc4_encoder_type type, unsigned int channel)
108115
{
109116
return __check_encoder_constraints(vc4_encoder_constraints,
@@ -118,6 +125,13 @@ static bool check_vc5_encoder_constraints(enum vc4_encoder_type type, unsigned i
118125
type, channel);
119126
}
120127

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+
121135
static struct vc4_crtc_state *
122136
get_vc4_crtc_state_for_encoder(struct kunit *test,
123137
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)
195209
#define VC5_PV_MUXING_TEST(_name, ...) \
196210
PV_MUXING_TEST(_name, vc5_mock_device, check_vc5_encoder_constraints, __VA_ARGS__)
197211

212+
#define VC6_PV_MUXING_TEST(_name, ...) \
213+
PV_MUXING_TEST(_name, vc6_mock_device, check_vc6_encoder_constraints, __VA_ARGS__)
214+
198215
static const struct pv_muxing_param vc4_test_pv_muxing_params[] = {
199216
VC4_PV_MUXING_TEST("1 output: DSI0",
200217
VC4_ENCODER_TYPE_DSI0),
@@ -673,6 +690,54 @@ KUNIT_ARRAY_PARAM(vc5_test_pv_muxing_invalid,
673690
vc5_test_pv_muxing_invalid_params,
674691
vc4_test_pv_muxing_desc);
675692

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+
676741
static void drm_vc4_test_pv_muxing(struct kunit *test)
677742
{
678743
const struct pv_muxing_param *params = test->param_value;
@@ -777,6 +842,21 @@ static struct kunit_suite vc5_pv_muxing_test_suite = {
777842
.test_cases = vc5_pv_muxing_tests,
778843
};
779844

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+
780860
/* See
781861
* https://lore.kernel.org/all/3e113525-aa89-b1e2-56b7-ca55bd41d057@samsung.com/
782862
* and
@@ -1009,5 +1089,6 @@ static struct kunit_suite vc5_pv_muxing_bugs_test_suite = {
10091089
kunit_test_suites(
10101090
&vc4_pv_muxing_test_suite,
10111091
&vc5_pv_muxing_test_suite,
1092+
&vc6_pv_muxing_test_suite,
10121093
&vc5_pv_muxing_bugs_test_suite
10131094
);

0 commit comments

Comments
 (0)