[igt-dev] [PATCH] [i-g-t] tests/kms_cursor_crc: Fix test intermittent failures on AMD gpu

Wu, Hersen hersenxs.wu at amd.com
Tue Oct 3 13:49:42 UTC 2023


[AMD Official Use Only - General]

Here is more data for debug this intermittent issue on AMD GPU.

With removal cursor_h extra line with IGT for AMD GPU, all kms_cursor_crc tests pass consistently on 3 of 4 displays. Test fails on one non-PSR 1080p eDP.
After debugging, I find the video timing of eDP causing AMD display HW not generate stable CRC within one vblank.

For this "eDP with IGT intermittent failures", if use overwrite EDID from another eDP on which IGT pass, then IGT test pass.


Original EDID from eDP (IGT kms_cursor_crc fails)

Cd /sys/class/drm/card0-eDP-1#
xxd edid
00000000: 00ff ffff ffff ff00 06af ed20 0000 0000  ........... ....
00000010: 011a 0104 9522 1378 0205 b594 5959 9228  .....".x....YY.(
00000020: 1d50 5400 0000 0101 0101 0101 0101 0101  .PT.............
00000030: 0101 0101 0101 7837 80b4 7038 2e40 6c30  ......x7..p8. at l0
00000040: aa00 58c1 1000 0018 0000 000f 0000 0000  ..X.............
00000050: 0000 0000 0000 0000 0020 0000 00fe 0041  ......... .....A
00000060: 554f 0a20 2020 2020 2020 2020 0000 00fe  UO.         ....
00000070: 0042 3135 3648 414b 3032 2e30 200a 00ff  .B156HAK02.0 ...


Overwrite EDID:

00000000: 00ff ffff ffff ff00 06af 3d13 0000 0000  ..........=.....
00000010: 0018 0104 951f 1178 0287 e5a4 5650 9e26  .......x....VP.&
00000020: 0d50 5400 0000 0101 0101 0101 0101 0101  .PT.............
00000030: 0101 0101 0101 1437 80b8 7038 2440 1010  .......7..p8$@..
00000040: 3e00 35ad 1000 0018 0000 000f 0000 0000  >.5.............
00000050: 0000 0000 0000 0000 0020 0000 0000 0000  ......... ......
00000060: 0000 0000 0000 0000 0000 0000 0000 0002  ................
00000070: 000c 33ff 103c 961b 1028 9620 2020 00d9  ..3..<...(.   ..


Thanks!
Hersen



-----Original Message-----
From: Wu, Hersen
Sent: Tuesday, October 3, 2023 9:33 AM
To: 'juhapekka.heikkila at gmail.com' <juhapekka.heikkila at gmail.com>; igt-dev at lists.freedesktop.org; Siqueira, Rodrigo <Rodrigo.Siqueira at amd.com>; Pillai, Aurabindo <Aurabindo.Pillai at amd.com>; Hung, Alex <Alex.Hung at amd.com>; Mahfooz, Hamza <Hamza.Mahfooz at amd.com>; Li, Sun peng (Leo) <Sunpeng.Li at amd.com>
Cc: markyacoub at google.com
Subject: RE: [PATCH] [i-g-t] tests/kms_cursor_crc: Fix test intermittent failures on AMD gpu

Hi Juhapekka,

My understanding is as below.
Set drm.debug = 0x256, cursor atomic checks are showed within kernel dmesg.
HW cursor, user mode component pass cursor image to kernel. Kernel will composite cursor with primary surface.
SW cursor, user mode components have already composited cursor with primary surface. Kernel will render primary surface.

For IGT kms_cursor_crc subtests, like onscreen_test, the test read crc from hw_test and sw_test, then compare them.
For sw_test, even kernel renders primary surface (cursor already composited with primary surface), by AMD SW kernel driver and HW implementation, it still needs to wait for 2 vblanks to get crtc or pipe CRC stable.  -- This should be applied to all CRC reading locations for AMD GPU. I will run more tests for other IGT test and then do changes one test cases by one check.

This is reason to add wait vblank within sw_test.



Dmesg captured with drm.debug= 0x256

HW cursor:

[ 3178.487799] amdgpu 0000:03:00.0: [drm:drm_atomic_set_fb_for_plane [drm]] Set [FB:143] for [PLANE:88:plane-8] state 00000000b6cd65df [ 3178.487862] amdgpu 0000:03:00.0: [drm:drm_atomic_print_new_state [drm]] checking 0000000021852135 [ 3178.487926] amdgpu 0000:03:00.0: [drm] plane[88]: plane-8
[ 3178.487930] amdgpu 0000:03:00.0: [drm]       crtc=crtc-0
[ 3178.487933] amdgpu 0000:03:00.0: [drm]       fb=143
[ 3178.487936] amdgpu 0000:03:00.0: [drm]               allocated by = kms_cursor_crc
[ 3178.487941] amdgpu 0000:03:00.0: [drm]               refcount=2
[ 3178.487945] amdgpu 0000:03:00.0: [drm]               format=AR24 little-endian (0x34325241)
[ 3178.487950] amdgpu 0000:03:00.0: [drm]               modifier=0x0
[ 3178.487954] amdgpu 0000:03:00.0: [drm]               size=128x128
[ 3178.487957] amdgpu 0000:03:00.0: [drm]               layers:
[ 3178.487960] amdgpu 0000:03:00.0: [drm]                       size[0]=128x128
[ 3178.487964] amdgpu 0000:03:00.0: [drm]                       pitch[0]=512
[ 3178.487967] amdgpu 0000:03:00.0: [drm]                       offset[0]=0
[ 3178.487971] amdgpu 0000:03:00.0: [drm]                       obj[0]:
[ 3178.487974] amdgpu 0000:03:00.0: [drm]                               name=0
[ 3178.487977] amdgpu 0000:03:00.0: [drm]                               refcount=3
[ 3178.487980] amdgpu 0000:03:00.0: [drm]                               start=00101fa4
[ 3178.487984] amdgpu 0000:03:00.0: [drm]                               size=65536
[ 3178.487987] amdgpu 0000:03:00.0: [drm]                               imported=no
[ 3178.487990] amdgpu 0000:03:00.0: [drm]       crtc-pos=128x128+0+0
[ 3178.487995] amdgpu 0000:03:00.0: [drm]       src-pos=128.000000x128.000000+0.000000+0.000000
[ 3178.488000] amdgpu 0000:03:00.0: [drm]       rotation=1
[ 3178.488003] amdgpu 0000:03:00.0: [drm]       normalized-zpos=ff
[ 3178.488007] amdgpu 0000:03:00.0: [drm]       color-encoding=ITU-R BT.601 YCbCr
[ 3178.488010] amdgpu 0000:03:00.0: [drm]       color-range=YCbCr limited range


SW cursor:

[ 4397.475822] amdgpu 0000:03:00.0: [drm:drm_atomic_print_new_state [drm]] checking 000000008bd035aa [ 4397.475897] amdgpu 0000:03:00.0: [drm] plane[70]: plane-5
[ 4397.475901] amdgpu 0000:03:00.0: [drm]       crtc=crtc-0
[ 4397.475904] amdgpu 0000:03:00.0: [drm]       fb=147
[ 4397.475908] amdgpu 0000:03:00.0: [drm]               allocated by = kms_cursor_crc
[ 4397.475912] amdgpu 0000:03:00.0: [drm]               refcount=4
[ 4397.475916] amdgpu 0000:03:00.0: [drm]               format=XR24 little-endian (0x34325258)
[ 4397.475921] amdgpu 0000:03:00.0: [drm]               modifier=0x0
[ 4397.475925] amdgpu 0000:03:00.0: [drm]               size=3840x2160
[ 4397.475929] amdgpu 0000:03:00.0: [drm]               layers:
[ 4397.475932] amdgpu 0000:03:00.0: [drm]                       size[0]=3840x2160
[ 4397.475937] amdgpu 0000:03:00.0: [drm]                       pitch[0]=15360
[ 4397.475940] amdgpu 0000:03:00.0: [drm]                       offset[0]=0
[ 4397.475944] amdgpu 0000:03:00.0: [drm]                       obj[0]:
[ 4397.475948] amdgpu 0000:03:00.0: [drm]                               name=0
[ 4397.475952] amdgpu 0000:03:00.0: [drm]                               refcount=2
[ 4397.475955] amdgpu 0000:03:00.0: [drm]                               start=00103f58
[ 4397.475959] amdgpu 0000:03:00.0: [drm]                               size=33177600
[ 4397.475963] amdgpu 0000:03:00.0: [drm]                               imported=no
[ 4397.475966] amdgpu 0000:03:00.0: [drm]       crtc-pos=3840x2160+0+0
[ 4397.475971] amdgpu 0000:03:00.0: [drm]       src-pos=3840.000000x2160.000000+0.000000+0.000000
[ 4397.475977] amdgpu 0000:03:00.0: [drm]       rotation=1
[ 4397.475981] amdgpu 0000:03:00.0: [drm]       normalized-zpos=0
[ 4397.475984] amdgpu 0000:03:00.0: [drm]       color-encoding=ITU-R BT.709 YCbCr
[ 4397.475988] amdgpu 0000:03:00.0: [drm]       color-range=YCbCr limited range


Thanks!
Hersen


-----Original Message-----
From: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
Sent: Tuesday, October 3, 2023 3:38 AM
To: Wu, Hersen <hersenxs.wu at amd.com>; igt-dev at lists.freedesktop.org; Siqueira, Rodrigo <Rodrigo.Siqueira at amd.com>; Pillai, Aurabindo <Aurabindo.Pillai at amd.com>; Hung, Alex <Alex.Hung at amd.com>; Mahfooz, Hamza <Hamza.Mahfooz at amd.com>; Li, Sun peng (Leo) <Sunpeng.Li at amd.com>
Cc: markyacoub at google.com
Subject: Re: [PATCH] [i-g-t] tests/kms_cursor_crc: Fix test intermittent failures on AMD gpu

Hi Hersen,

On 2.10.2023 17.20, Hersen Wu wrote:
> Wait for two more vblanks before reading crc on AMD gpu.
>
> Without waiting for two vblanks, AMD cursor updates may not
> synchronized to the same frame of pipe, crc generated may not be
> reliable.
>
> Signed-off-by: Hersen Wu <hersenxs.wu at amd.com>
> ---
>   tests/kms_cursor_crc.c | 15 ++++++++++++++-
>   1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c index
> ba29ff65d..e3259e147 100644
> --- a/tests/kms_cursor_crc.c
> +++ b/tests/kms_cursor_crc.c
> @@ -276,6 +276,15 @@ static void do_single_test(data_t *data, int x, int y, bool hw_test,
>               restore_image(data, swbufidx, &((cursorarea){x, y, data->curw, data->curh}));
>               igt_plane_set_fb(data->primary, &data->primary_fb[swbufidx]);
>               igt_display_commit(display);
> +
> +             /* Wait for two more vblanks since cursor updates may not
> +              * synchronized to the same frame on AMD HW
> +              */
> +             if (is_amdgpu_device(data->drm_fd))
> +                     igt_wait_for_vblank_count(data->drm_fd,
> +                             display->pipes[data->pipe].crtc_offset,
> +                             data->vblank_wait_count);
> +

I did mention earlier this has nothing to do with cursor. Here cursor plane is not in use, here is just being generated reference crcs and the below igt_assert_crc_equal check against earlier hw cursor generated crcs. Ie. you are here adding extra wait for normal flip where there is no cursor changes, if this is problem then other flip tests should also fail.

>               igt_pipe_crc_get_current(data->drm_fd, pipe_crc, &crc);
>               igt_assert_crc_equal(&crc, hwcrc);
>       }
> @@ -1079,7 +1088,11 @@ igt_main_args("e", NULL, help_str, opt_handler,
> NULL)
>
>               igt_require_pipe_crc(data.drm_fd);
>
> -             data.vblank_wait_count = is_msm_device(data.drm_fd) ? 2 : 1;
> +             /* Wait for two more vblanks since cursor updates may not
> +              * synchronized to the same frame on AMD HW
> +              */
> +             data.vblank_wait_count =
> +                     (is_msm_device(data.drm_fd) || is_amdgpu_device(data.drm_fd)) ? 2
> +: 1;
>       }
>
>       data.cursor_max_w = cursor_width;



More information about the igt-dev mailing list