On Fri, 09 Aug 2024, Thomas Zimmermann <tzimmermann@xxxxxxx> wrote: > Hi, > > thanks a lot for the bugfix. > > Am 09.08.24 um 14:33 schrieb Dan Carpenter: >> The test for "Link training failed" expect the loop to exit with "i" >> set to zero but it exits when "i" is set to -1. Change this from a >> post-op to a pre-op so that it exits with "i" set to zero. This >> changes the number of iterations from 10 to 9 but probably that's >> okay. > > Yes, that's ok. > >> >> Fixes: 2281475168d2 ("drm/ast: astdp: Perform link training during atomic_enable") >> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> >> --- >> drivers/gpu/drm/ast/ast_dp.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/gpu/drm/ast/ast_dp.c b/drivers/gpu/drm/ast/ast_dp.c >> index 5d07678b502c..4329ab680f62 100644 >> --- a/drivers/gpu/drm/ast/ast_dp.c >> +++ b/drivers/gpu/drm/ast/ast_dp.c >> @@ -148,7 +148,7 @@ void ast_dp_link_training(struct ast_device *ast) >> struct drm_device *dev = &ast->base; >> unsigned int i = 10; >> >> - while (i--) { >> + while (--i) { > > If this loop ever starts with i = 0, it would break again. Can we use > > while (i) { > --i; > ... > } > > instead? FWIW, I personally *always* use for loops when there isn't a compelling reason to do otherwise. You know at a glance that for (i = 0; i < N; i++) gets run N times and what i is going to be afterwards. Sure, you may have to restructure other things, but I think it's almost always worth it. BR, Jani. > > Best regards > Thomas > >> u8 vgacrdc = ast_get_index_reg(ast, AST_IO_VGACRI, 0xdc); >> >> if (vgacrdc & AST_IO_VGACRDC_LINK_SUCCESS) -- Jani Nikula, Intel