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