]> git.ipfire.org Git - thirdparty/openwrt.git/blob
ff680c350fa2fc12e0c7c6e1f382b50069d0064d
[thirdparty/openwrt.git] /
1 From 88356ed698e8720673405babf92d1bf2029b86fc Mon Sep 17 00:00:00 2001
2 From: Maxime Ripard <maxime@cerno.tech>
3 Date: Fri, 14 Apr 2023 11:14:22 +0200
4 Subject: [PATCH 0627/1085] drm/vc4: tests: Add tests for BCM2712 PixelValve
5 Muxing
6
7 The BCM2712 has a simpler pipeline than the BCM2711, and thus the muxing
8 requirements are different. Create some tests to make sure we get proper
9 muxing decisions.
10
11 Signed-off-by: Maxime Ripard <maxime@cerno.tech>
12 ---
13 .../gpu/drm/vc4/tests/vc4_test_pv_muxing.c | 81 +++++++++++++++++++
14 1 file changed, 81 insertions(+)
15
16 --- a/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c
17 +++ b/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c
18 @@ -104,6 +104,13 @@ static const struct encoder_constraint v
19 ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI1, 0, 1, 2),
20 };
21
22 +static const struct encoder_constraint vc6_encoder_constraints[] = {
23 + ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI0, 0),
24 + ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI1, 1),
25 + ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_TXP1, 1),
26 + ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_TXP0, 2),
27 +};
28 +
29 static bool check_vc4_encoder_constraints(enum vc4_encoder_type type, unsigned int channel)
30 {
31 return __check_encoder_constraints(vc4_encoder_constraints,
32 @@ -118,6 +125,13 @@ static bool check_vc5_encoder_constraint
33 type, channel);
34 }
35
36 +static bool check_vc6_encoder_constraints(enum vc4_encoder_type type, unsigned int channel)
37 +{
38 + return __check_encoder_constraints(vc6_encoder_constraints,
39 + ARRAY_SIZE(vc6_encoder_constraints),
40 + type, channel);
41 +}
42 +
43 static struct vc4_crtc_state *
44 get_vc4_crtc_state_for_encoder(struct kunit *test,
45 const struct drm_atomic_state *state,
46 @@ -195,6 +209,9 @@ static void vc4_test_pv_muxing_desc(cons
47 #define VC5_PV_MUXING_TEST(_name, ...) \
48 PV_MUXING_TEST(_name, vc5_mock_device, check_vc5_encoder_constraints, __VA_ARGS__)
49
50 +#define VC6_PV_MUXING_TEST(_name, ...) \
51 + PV_MUXING_TEST(_name, vc6_mock_device, check_vc6_encoder_constraints, __VA_ARGS__)
52 +
53 static const struct pv_muxing_param vc4_test_pv_muxing_params[] = {
54 VC4_PV_MUXING_TEST("1 output: DSI0",
55 VC4_ENCODER_TYPE_DSI0),
56 @@ -673,6 +690,54 @@ KUNIT_ARRAY_PARAM(vc5_test_pv_muxing_inv
57 vc5_test_pv_muxing_invalid_params,
58 vc4_test_pv_muxing_desc);
59
60 +static const struct pv_muxing_param vc6_test_pv_muxing_params[] = {
61 + VC6_PV_MUXING_TEST("1 output: HDMI0",
62 + VC4_ENCODER_TYPE_HDMI0),
63 + VC6_PV_MUXING_TEST("1 output: HDMI1",
64 + VC4_ENCODER_TYPE_HDMI1),
65 + VC6_PV_MUXING_TEST("1 output: MOPLET",
66 + VC4_ENCODER_TYPE_TXP1),
67 + VC6_PV_MUXING_TEST("1 output: MOP",
68 + VC4_ENCODER_TYPE_TXP0),
69 + VC6_PV_MUXING_TEST("2 outputs: HDMI0, HDMI1",
70 + VC4_ENCODER_TYPE_HDMI0,
71 + VC4_ENCODER_TYPE_HDMI1),
72 + VC6_PV_MUXING_TEST("2 outputs: HDMI0, MOPLET",
73 + VC4_ENCODER_TYPE_HDMI0,
74 + VC4_ENCODER_TYPE_TXP1),
75 + VC6_PV_MUXING_TEST("2 outputs: HDMI0, MOP",
76 + VC4_ENCODER_TYPE_HDMI0,
77 + VC4_ENCODER_TYPE_TXP0),
78 + VC6_PV_MUXING_TEST("2 outputs: HDMI1, MOP",
79 + VC4_ENCODER_TYPE_HDMI1,
80 + VC4_ENCODER_TYPE_TXP0),
81 + VC6_PV_MUXING_TEST("2 outputs: MOPLET, MOP",
82 + VC4_ENCODER_TYPE_TXP1,
83 + VC4_ENCODER_TYPE_TXP0),
84 + VC6_PV_MUXING_TEST("3 outputs: HDMI0, HDMI1, MOP",
85 + VC4_ENCODER_TYPE_HDMI0,
86 + VC4_ENCODER_TYPE_HDMI1,
87 + VC4_ENCODER_TYPE_TXP0),
88 + VC6_PV_MUXING_TEST("3 outputs: HDMI0, MOPLET, MOP",
89 + VC4_ENCODER_TYPE_HDMI0,
90 + VC4_ENCODER_TYPE_TXP1,
91 + VC4_ENCODER_TYPE_TXP0),
92 +};
93 +
94 +KUNIT_ARRAY_PARAM(vc6_test_pv_muxing,
95 + vc6_test_pv_muxing_params,
96 + vc4_test_pv_muxing_desc);
97 +
98 +static const struct pv_muxing_param vc6_test_pv_muxing_invalid_params[] = {
99 + VC6_PV_MUXING_TEST("HDMI1/MOPLET Conflict",
100 + VC4_ENCODER_TYPE_HDMI1,
101 + VC4_ENCODER_TYPE_TXP1),
102 +};
103 +
104 +KUNIT_ARRAY_PARAM(vc6_test_pv_muxing_invalid,
105 + vc6_test_pv_muxing_invalid_params,
106 + vc4_test_pv_muxing_desc);
107 +
108 static void drm_vc4_test_pv_muxing(struct kunit *test)
109 {
110 const struct pv_muxing_param *params = test->param_value;
111 @@ -777,6 +842,21 @@ static struct kunit_suite vc5_pv_muxing_
112 .test_cases = vc5_pv_muxing_tests,
113 };
114
115 +static struct kunit_case vc6_pv_muxing_tests[] = {
116 + KUNIT_CASE_PARAM(drm_vc4_test_pv_muxing,
117 + vc6_test_pv_muxing_gen_params),
118 + KUNIT_CASE_PARAM(drm_vc4_test_pv_muxing_invalid,
119 + vc6_test_pv_muxing_invalid_gen_params),
120 + {}
121 +};
122 +
123 +static struct kunit_suite vc6_pv_muxing_test_suite = {
124 + .name = "vc6-pv-muxing-combinations",
125 + .init = vc4_pv_muxing_test_init,
126 + .exit = vc4_pv_muxing_test_exit,
127 + .test_cases = vc6_pv_muxing_tests,
128 +};
129 +
130 /* See
131 * https://lore.kernel.org/all/3e113525-aa89-b1e2-56b7-ca55bd41d057@samsung.com/
132 * and
133 @@ -1009,5 +1089,6 @@ static struct kunit_suite vc5_pv_muxing_
134 kunit_test_suites(
135 &vc4_pv_muxing_test_suite,
136 &vc5_pv_muxing_test_suite,
137 + &vc6_pv_muxing_test_suite,
138 &vc5_pv_muxing_bugs_test_suite
139 );