On 15 April 2014 23:18, Sergei Antonov <[email protected]> wrote:
> Commit 457e77b26428ab4a24998eecfb99f27fa4195397 added two checks applied to a
> value received from nv_rd32(bios, 0x619f04). But after this new piece of code
> is executed, the addr local variable does not hold the same value it used to
> hold before the commit. Here is what is was assigned in the original code:
>         (u64)(nv_rd32(bios, 0x619f04) & 0xffffff00) << 8
> in the committed code it ends up with this value:
>         (u64)(nv_rd32(bios, 0x619f04) >> 8) << 8
> These expressions are obviously not equivalent.
>
> My Nvidia video card does not show anything on the display when I boot a
> kernel containing this commit.
>
> The patch fixes the code so that the new checks are still done, but the
> side effect of an incorrect addr value is gone.
>
> Cc: Ben Skeggs <[email protected]>
> Cc: Dave Airlie <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Signed-off-by: Sergei Antonov <[email protected]>
> ---
>  drivers/gpu/drm/nouveau/core/subdev/bios/base.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c 
> b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c
> index e9df94f..291adb6 100644
> --- a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c
> +++ b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c
> @@ -109,7 +109,7 @@ nouveau_bios_shadow_pramin(struct nouveau_bios *bios)
>                         return;
>                 }
>
> -               addr = (u64)(addr >> 8) << 8;
> +               addr = (u64)(addr & 0xffffff00) << 8;

I just noticed that "(u64)" is redundant here. Can it be removed in
the patch without resubmitting, Andrew?

>                 if (!addr) {
>                         addr  = (u64)nv_rd32(bios, 0x001700) << 16;
>                         addr += 0xf0000;
> --
> 1.9.0
>
_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to