<p>First Please accept my apologies,I have no email client on my compute, I will install thunderbird later after my network speed is normal.<br></p><p><br></p><p>This bug is trigged on r5230, and we also find this bug on latest kernel,If you want trigger this bug, execute shell:   <br></p><p><br></p><p>#!/bin/bash</p>cnt=0;<br>while [ 1 ]<br>do<br>xrandr --output HDMI-0 --right-of VGA-0 --auto<br>echo "hdmi----vga"<br>sleep  8<br>xrandr --output VGA-0 --auto --output HDMI-0 --off<br>sleep 3<br>let cnt+=1;<br>echo $cnt<br>done<br><p><br></p><p>at the same time, open a new terminal, press F11 to fast switch this window between maximize size and normal size to improve the possibility,attachement picture</p><p>shows the phenomenon.</p><p><br></p><p>I add some debug messages:</p><p>[   89.065206] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:589, set->crtc->primary->fb: 0xffffffa0e5956100, set->fb: 0xffffffa0e701e400<br>[   89.065209] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:601<br>[   89.065213] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:713, fb_changed: 1, mode_changed: 0<br>[   89.065216] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1148, x: 0: y: 0, crtc: 0xffffffa0e62dc000, atomic: 0<br>[   89.065222] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1426, fb_location: 0x117f2000, target_fb->width: 1920, target_fb->height: 1080<br>[   89.065223] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1430, fb_pitch_pixels: 1920, target_fb->pitches[0]: 7680, target_fb->format->cpp[0]: 4<br>[   89.065240] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:752*****************************************************************<br>[   92.079288] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:589, set->crtc->primary->fb: 0xffffffa0e701e400, set->fb: 0xffffffa0eafced00<br>[   92.079291] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:601<br>[   92.079295] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:713, fb_changed: 1, mode_changed: 0<br>[   92.079298] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1148, x: 0: y: 0, crtc: 0xffffffa0e62dc000, atomic: 0<br>[   92.079304] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1426, fb_location: 0x10000000, target_fb->width: 3840, target_fb->height: 1080<br>[   92.079306] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1430, fb_pitch_pixels: 3840, target_fb->pitches[0]: 15360, target_fb->format->cpp[0]: 4<br>[   92.079323] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:752*****************************************************************<br>[   92.080382] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:589, set->crtc->primary->fb: 0x0, set->fb: 0xffffffa0eafced00<br>[   92.080384] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:595<br>[   92.080387] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:713, fb_changed: 0, mode_changed: 1<br>[   92.080389] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:715<br>[   92.083143] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1148, x: 1920: y: 0, crtc: 0xffffffa0e62db000, atomic: 0<br>[   92.083149] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1426, fb_location: 0x10000000, target_fb->width: 3840, target_fb->height: 1080<br>[   92.083164] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1430, fb_pitch_pixels: 3840, target_fb->pitches[0]: 15360, target_fb->format->cpp[0]: 4<br>[   92.120595] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:752*****************************************************************<br>[  100.157744] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:589, set->crtc->primary->fb: 0xffffffa0eafced00, set->fb: 0xffffffa0f3a5bb00<br>[  100.157746] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:601<br>[  100.157749] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:713, fb_changed: 1, mode_changed: 0<br>[  100.157752] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1148, x: 0: y: 0, crtc: 0xffffffa0e62dc000, atomic: 0<br>[  100.157758] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1426, fb_location: 0x1790c000, target_fb->width: 1920, target_fb->height: 1080<br>[  100.157760] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1430, fb_pitch_pixels: 1920, target_fb->pitches[0]: 7680, target_fb->format->cpp[0]: 4<br>[  100.157777] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:752*****************************************************************<br>[  103.166751] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:589, set->crtc->primary->fb: 0xffffffa0e9a0cd00, set->fb: 0xffffffa0e9a0cd00<br>[  103.166757] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:713, fb_changed: 0, mode_changed: 0<br>[  103.166758] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:752*****************************************************************<br>[  103.169353] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:589, set->crtc->primary->fb: 0x0, set->fb: 0xffffffa0e9a0cd00<br>[  103.169355] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:595<br>[  103.169359] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:713, fb_changed: 0, mode_changed: 1<br>[  103.169360] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:715<br>[  103.170396] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1148, x: 1920: y: 0, crtc: 0xffffffa0e62db000, atomic: 0<br>[  103.170403] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1426, fb_location: 0x11fea000, target_fb->width: 3840, target_fb->height: 1080<br>[  103.170404] lzn debug, drivers/gpu/drm/radeon/atombios_crtc.c:dce4_crtc_do_set_base:1430, fb_pitch_pixels: 3840, target_fb->pitches[0]: 15360, target_fb->format->cpp[0]: 4<br>[  103.224592] lzn debug, drivers/gpu/drm/drm_crtc_helper.c:drm_crtc_helper_set_config:752*****************************************************************<br>when bug is triggerd, fb_changed and mode_changed are zero, and crtc's pitch may not be updated.</p><p>you can refer to dce_v6_0_page_flip in amdgpu,all amdgpu driver update pitch in page_flip.<br></p><p><br></p><br>

    <p>----</p><p><br></p><p><br></p><p><br></p><p><br><br><br>
        </p><p><strong>主 题:</strong><span id="subject">Re: [PATCH] drm/radeon: Update pitch for page flip</span>
            <br><strong>日 期:</strong><span id="date">2021-08-02 16:31</span>
            <br><strong>发件人:</strong><span id="from">Daniel Vetter</span>
            <br><strong>收件人:</strong><span id="to">Christian König</span>
            
        </p><p><br>
        </p><p>On Mon, Aug 02, 2021 at 10:12:47AM +0200, Christian König wrote:<br>> Am 02.08.21 um 09:43 schrieb Zhenneng Li:<br>> > When primary bo is updated, crtc's pitch may<br>> > have not been updated, this will lead to show<br>> > disorder content when user changes display mode,<br>> > we update crtc's pitch in page flip to avoid<br>> > this bug.<br>> > This refers to amdgpu's pageflip.<br>> <br>> Alex is the expert to ask about that code, but I'm not sure if that is<br>> really correct for the old hardware.<br>> <br>> As far as I know the crtc's pitch should not change during a page flip, but<br>> only during a full mode set.<br>> <br>> So could you elaborate a bit more how you trigger this?<br><br>legacy page_flip ioctl only verifies that the fb->format stays the same.<br>It doesn't check anything else (afair never has), this is all up to<br>drivers to verify.<br><br>Personally I'd say add a check to reject this, since testing this and<br>making sure it really works everywhere is probably a bit much on this old<br>hw.<br></p><p>-Daniel</p><p><br>> <br>> Thanks,<br>> Christian.<br>> <br>> > <br>> > Cc: Alex Deucher<alexander.deucher@amd.com><br>> > Cc: "Christian König"<christian.koenig@amd.com><br>> > Cc: "Pan, Xinhui"<xinhui.pan@amd.com><br>> > Cc: David Airlie<airlied@linux.ie><br>> > Cc: Daniel Vetter<daniel@ffwll.ch><br>> > Cc: amd-gfx@lists.freedesktop.org<br>> > Cc: dri-devel@lists.freedesktop.org<br>> > Cc: linux-kernel@vger.kernel.org<br>> > Signed-off-by: Zhenneng Li<lizhenneng@kylinos.cn><br>> > ---<br>> >   drivers/gpu/drm/radeon/evergreen.c | 8 +++++++-<br>> >   1 file changed, 7 insertions(+), 1 deletion(-)<br>> > <br>> > diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c<br>> > index 36a888e1b179..eeb590d2dec2 100644<br>> > --- a/drivers/gpu/drm/radeon/evergreen.c<br>> > +++ b/drivers/gpu/drm/radeon/evergreen.c<br>> > @@ -28,6 +28,7 @@<br>> >   #include<drm drm_vblank.h=""><br>> >   #include<drm radeon_drm.h=""><br>> > +#include<drm drm_fourcc.h=""><br>> >   #include "atom.h"<br>> >   #include "avivod.h"<br>> > @@ -1414,10 +1415,15 @@ void evergreen_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base,<br>> >                          bool async)<br>> >   {<br>> >        struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id];<br>> > +       struct drm_framebuffer *fb = radeon_crtc->base.primary->fb;<br>> > -  /* update the scanout addresses */<br>> > + /* flip at hsync for async, default is vsync */<br>> >         WREG32(EVERGREEN_GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset,<br>> >              async ? EVERGREEN_GRPH_SURFACE_UPDATE_H_RETRACE_EN : 0);<br>> > +     /* update pitch */<br>> > + WREG32(EVERGREEN_GRPH_PITCH + radeon_crtc->crtc_offset,<br>> > +        fb->pitches[0] / fb->format->cpp[0]);<br>> > +       /* update the scanout addresses */<br>> >      WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH + radeon_crtc->crtc_offset,<br>> >              upper_32_bits(crtc_base));<br>> >        WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + radeon_crtc->crtc_offset,<br>> > <br>> > No virus found<br>> >           Checked by Hillstone Network AntiVirus<br>> <br><br>-- <br>Daniel Vetter<br>Software Engineer, Intel Corporation<br>http://blog.ffwll.ch<br></drm></drm></drm></lizhenneng@kylinos.cn></daniel@ffwll.ch></airlied@linux.ie></xinhui.pan@amd.com></christian.koenig@amd.com></alexander.deucher@amd.com></p>