[PATCH i-g-t,v2] tests/amdgpu/amd_replay: Add some page flips before test start
Leo Li
sunpeng.li at amd.com
Mon Nov 4 13:20:44 UTC 2024
On 2024-10-30 11:15, Tom Chung wrote:
> [Why]
> New panel replay driver behavior skip some atomic commits before
> enable the panel replay.
>
> This is because a kms client needs to submit fb updates via kms
> in order for amdgpu to flush updates to the panel.
>
> If a client updates the fb without going through kms (by directly
> blitting to it, for example), then any panel self-refresh feature
> needs to be disabled. Therefore, the driver vets the client by
> counting an adequate amount of atomic updates before enabling
> self-refresh features.
>
> [How]
> Add some page flips before test to let the panel replay can be
> enabled first.
> (This change can be backward compatible with old driver)
>
> Signed-off-by: Tom Chung <chiahsuan.chung at amd.com>
Reviewed-by: Leo Li <sunpeng.li at amd.com
> ---
> v2: Add some more information in the commit messages
>
> tests/amdgpu/amd_replay.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/tests/amdgpu/amd_replay.c b/tests/amdgpu/amd_replay.c
> index b5bb10b34..db2ac2de9 100644
> --- a/tests/amdgpu/amd_replay.c
> +++ b/tests/amdgpu/amd_replay.c
> @@ -14,6 +14,7 @@
> IGT_TEST_DESCRIPTION("Basic test for enabling Panel Replay for eDP displays");
>
> #define REPLAY_SETTLE_DELAY 10
> +#define FLIP_FRAME_BEFORE_TEST 60
>
> /* Common test data. */
> struct test_data {
> @@ -50,6 +51,7 @@ enum test_mode {
> TEST_MODE_INTERMITTENT_LIVE,
> TEST_MODE_CONSTANT_LIVE,
> TEST_MODE_SUSPEND,
> + TEST_MODE_FLIP_ONLY,
> TEST_MODE_COUNT
> };
>
> @@ -282,6 +284,9 @@ static void run_check_replay(struct test_data *data, enum test_mode test_mode)
> data->flip_fb->fb_id, DRM_MODE_PAGE_FLIP_EVENT, NULL);
> kmstest_wait_for_pageflip(data->fd);
>
> + /* Do some page flips and let the replay enable */
> + page_flip_test(data, output, TEST_MODE_FLIP_ONLY, FLIP_FRAME_BEFORE_TEST);
> +
> /* Panel Replay state takes some time to settle its value on static screen */
> sleep(REPLAY_SETTLE_DELAY);
>
> @@ -366,7 +371,7 @@ static void run_check_replay_suspend(struct test_data *data)
> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>
> /* Do some page flip and let the replay go into live mode */
> - page_flip_test(data, output, TEST_MODE_SUSPEND, 10);
> + page_flip_test(data, output, TEST_MODE_SUSPEND, FLIP_FRAME_BEFORE_TEST);
>
> /* Panel Replay state takes some time to settle its value on static screen */
> sleep(REPLAY_SETTLE_DELAY);
More information about the igt-dev
mailing list