mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
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>
This commit is contained in:
committed by
Dom Cobley
parent
2837b07658
commit
3e2550d7c9
@@ -103,6 +103,13 @@ static const struct encoder_constraint vc5_encoder_constraints[] = {
|
|||||||
ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI1, 0, 1, 2),
|
ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI1, 0, 1, 2),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct encoder_constraint vc6_encoder_constraints[] = {
|
||||||
|
ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI0, 0),
|
||||||
|
ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_HDMI1, 1),
|
||||||
|
ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_TXP1, 1),
|
||||||
|
ENCODER_CONSTRAINT(VC4_ENCODER_TYPE_TXP0, 2),
|
||||||
|
};
|
||||||
|
|
||||||
static bool check_vc4_encoder_constraints(enum vc4_encoder_type type, unsigned int channel)
|
static bool check_vc4_encoder_constraints(enum vc4_encoder_type type, unsigned int channel)
|
||||||
{
|
{
|
||||||
return __check_encoder_constraints(vc4_encoder_constraints,
|
return __check_encoder_constraints(vc4_encoder_constraints,
|
||||||
@@ -117,6 +124,13 @@ static bool check_vc5_encoder_constraints(enum vc4_encoder_type type, unsigned i
|
|||||||
type, channel);
|
type, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool check_vc6_encoder_constraints(enum vc4_encoder_type type, unsigned int channel)
|
||||||
|
{
|
||||||
|
return __check_encoder_constraints(vc6_encoder_constraints,
|
||||||
|
ARRAY_SIZE(vc6_encoder_constraints),
|
||||||
|
type, channel);
|
||||||
|
}
|
||||||
|
|
||||||
static struct vc4_crtc_state *
|
static struct vc4_crtc_state *
|
||||||
get_vc4_crtc_state_for_encoder(struct kunit *test,
|
get_vc4_crtc_state_for_encoder(struct kunit *test,
|
||||||
const struct drm_atomic_state *state,
|
const struct drm_atomic_state *state,
|
||||||
@@ -194,6 +208,9 @@ static void vc4_test_pv_muxing_desc(const struct pv_muxing_param *t, char *desc)
|
|||||||
#define VC5_PV_MUXING_TEST(_name, ...) \
|
#define VC5_PV_MUXING_TEST(_name, ...) \
|
||||||
PV_MUXING_TEST(_name, vc5_mock_device, check_vc5_encoder_constraints, __VA_ARGS__)
|
PV_MUXING_TEST(_name, vc5_mock_device, check_vc5_encoder_constraints, __VA_ARGS__)
|
||||||
|
|
||||||
|
#define VC6_PV_MUXING_TEST(_name, ...) \
|
||||||
|
PV_MUXING_TEST(_name, vc6_mock_device, check_vc6_encoder_constraints, __VA_ARGS__)
|
||||||
|
|
||||||
static const struct pv_muxing_param vc4_test_pv_muxing_params[] = {
|
static const struct pv_muxing_param vc4_test_pv_muxing_params[] = {
|
||||||
VC4_PV_MUXING_TEST("1 output: DSI0",
|
VC4_PV_MUXING_TEST("1 output: DSI0",
|
||||||
VC4_ENCODER_TYPE_DSI0),
|
VC4_ENCODER_TYPE_DSI0),
|
||||||
@@ -672,6 +689,54 @@ KUNIT_ARRAY_PARAM(vc5_test_pv_muxing_invalid,
|
|||||||
vc5_test_pv_muxing_invalid_params,
|
vc5_test_pv_muxing_invalid_params,
|
||||||
vc4_test_pv_muxing_desc);
|
vc4_test_pv_muxing_desc);
|
||||||
|
|
||||||
|
static const struct pv_muxing_param vc6_test_pv_muxing_params[] = {
|
||||||
|
VC6_PV_MUXING_TEST("1 output: HDMI0",
|
||||||
|
VC4_ENCODER_TYPE_HDMI0),
|
||||||
|
VC6_PV_MUXING_TEST("1 output: HDMI1",
|
||||||
|
VC4_ENCODER_TYPE_HDMI1),
|
||||||
|
VC6_PV_MUXING_TEST("1 output: MOPLET",
|
||||||
|
VC4_ENCODER_TYPE_TXP1),
|
||||||
|
VC6_PV_MUXING_TEST("1 output: MOP",
|
||||||
|
VC4_ENCODER_TYPE_TXP0),
|
||||||
|
VC6_PV_MUXING_TEST("2 outputs: HDMI0, HDMI1",
|
||||||
|
VC4_ENCODER_TYPE_HDMI0,
|
||||||
|
VC4_ENCODER_TYPE_HDMI1),
|
||||||
|
VC6_PV_MUXING_TEST("2 outputs: HDMI0, MOPLET",
|
||||||
|
VC4_ENCODER_TYPE_HDMI0,
|
||||||
|
VC4_ENCODER_TYPE_TXP1),
|
||||||
|
VC6_PV_MUXING_TEST("2 outputs: HDMI0, MOP",
|
||||||
|
VC4_ENCODER_TYPE_HDMI0,
|
||||||
|
VC4_ENCODER_TYPE_TXP0),
|
||||||
|
VC6_PV_MUXING_TEST("2 outputs: HDMI1, MOP",
|
||||||
|
VC4_ENCODER_TYPE_HDMI1,
|
||||||
|
VC4_ENCODER_TYPE_TXP0),
|
||||||
|
VC6_PV_MUXING_TEST("2 outputs: MOPLET, MOP",
|
||||||
|
VC4_ENCODER_TYPE_TXP1,
|
||||||
|
VC4_ENCODER_TYPE_TXP0),
|
||||||
|
VC6_PV_MUXING_TEST("3 outputs: HDMI0, HDMI1, MOP",
|
||||||
|
VC4_ENCODER_TYPE_HDMI0,
|
||||||
|
VC4_ENCODER_TYPE_HDMI1,
|
||||||
|
VC4_ENCODER_TYPE_TXP0),
|
||||||
|
VC6_PV_MUXING_TEST("3 outputs: HDMI0, MOPLET, MOP",
|
||||||
|
VC4_ENCODER_TYPE_HDMI0,
|
||||||
|
VC4_ENCODER_TYPE_TXP1,
|
||||||
|
VC4_ENCODER_TYPE_TXP0),
|
||||||
|
};
|
||||||
|
|
||||||
|
KUNIT_ARRAY_PARAM(vc6_test_pv_muxing,
|
||||||
|
vc6_test_pv_muxing_params,
|
||||||
|
vc4_test_pv_muxing_desc);
|
||||||
|
|
||||||
|
static const struct pv_muxing_param vc6_test_pv_muxing_invalid_params[] = {
|
||||||
|
VC6_PV_MUXING_TEST("HDMI1/MOPLET Conflict",
|
||||||
|
VC4_ENCODER_TYPE_HDMI1,
|
||||||
|
VC4_ENCODER_TYPE_TXP1),
|
||||||
|
};
|
||||||
|
|
||||||
|
KUNIT_ARRAY_PARAM(vc6_test_pv_muxing_invalid,
|
||||||
|
vc6_test_pv_muxing_invalid_params,
|
||||||
|
vc4_test_pv_muxing_desc);
|
||||||
|
|
||||||
static void drm_vc4_test_pv_muxing(struct kunit *test)
|
static void drm_vc4_test_pv_muxing(struct kunit *test)
|
||||||
{
|
{
|
||||||
const struct pv_muxing_param *params = test->param_value;
|
const struct pv_muxing_param *params = test->param_value;
|
||||||
@@ -820,6 +885,21 @@ static struct kunit_suite vc5_pv_muxing_test_suite = {
|
|||||||
.test_cases = vc5_pv_muxing_tests,
|
.test_cases = vc5_pv_muxing_tests,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct kunit_case vc6_pv_muxing_tests[] = {
|
||||||
|
KUNIT_CASE_PARAM(drm_vc4_test_pv_muxing,
|
||||||
|
vc6_test_pv_muxing_gen_params),
|
||||||
|
KUNIT_CASE_PARAM(drm_vc4_test_pv_muxing_invalid,
|
||||||
|
vc6_test_pv_muxing_invalid_gen_params),
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct kunit_suite vc6_pv_muxing_test_suite = {
|
||||||
|
.name = "vc6-pv-muxing-combinations",
|
||||||
|
.init = vc4_pv_muxing_test_init,
|
||||||
|
.exit = vc4_pv_muxing_test_exit,
|
||||||
|
.test_cases = vc6_pv_muxing_tests,
|
||||||
|
};
|
||||||
|
|
||||||
/* See
|
/* See
|
||||||
* https://lore.kernel.org/all/3e113525-aa89-b1e2-56b7-ca55bd41d057@samsung.com/
|
* https://lore.kernel.org/all/3e113525-aa89-b1e2-56b7-ca55bd41d057@samsung.com/
|
||||||
* and
|
* and
|
||||||
@@ -1141,5 +1221,6 @@ static struct kunit_suite vc5_pv_muxing_bugs_test_suite = {
|
|||||||
kunit_test_suites(
|
kunit_test_suites(
|
||||||
&vc4_pv_muxing_test_suite,
|
&vc4_pv_muxing_test_suite,
|
||||||
&vc5_pv_muxing_test_suite,
|
&vc5_pv_muxing_test_suite,
|
||||||
|
&vc6_pv_muxing_test_suite,
|
||||||
&vc5_pv_muxing_bugs_test_suite
|
&vc5_pv_muxing_bugs_test_suite
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user