[Nouveau] [PATCH] drm/nouveau/bios: fix a bit shift error introduced by 457e77b

Sergei Antonov saproj at gmail.com
Tue Apr 15 14:49:33 PDT 2014


On 15 April 2014 23:18, Sergei Antonov <saproj at gmail.com> 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 <bskeggs at redhat.com>
> Cc: Dave Airlie <airlied at redhat.com>
> Cc: Andrew Morton <akpm at linux-foundation.org>
> Signed-off-by: Sergei Antonov <saproj at gmail.com>
> ---
>  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
>


More information about the Nouveau mailing list