| From 6d60792ec059d9f2139828f9f017679abb81aa73 Mon Sep 17 00:00:00 2001 |
| From: Ilia Mirkin <imirkin@alum.mit.edu> |
| Date: Sun, 5 Jan 2014 20:07:02 -0500 |
| Subject: drm/nouveau/bios: make jump conditional |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Ilia Mirkin <imirkin@alum.mit.edu> |
| |
| commit 6d60792ec059d9f2139828f9f017679abb81aa73 upstream. |
| |
| This fixes a hang in VBIOS scripts of the form "condition; jump". |
| The jump used to always be executed, while now it will only be |
| executed if the condition is true. |
| |
| See https://bugs.freedesktop.org/show_bug.cgi?id=72943 |
| |
| Reported-by: Darcy Brรกs da Silva <dardevelin@cidadecool.com> |
| Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/nouveau/core/subdev/bios/init.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/gpu/drm/nouveau/core/subdev/bios/init.c |
| +++ b/drivers/gpu/drm/nouveau/core/subdev/bios/init.c |
| @@ -1295,7 +1295,11 @@ init_jump(struct nvbios_init *init) |
| u16 offset = nv_ro16(bios, init->offset + 1); |
| |
| trace("JUMP\t0x%04x\n", offset); |
| - init->offset = offset; |
| + |
| + if (init_exec(init)) |
| + init->offset = offset; |
| + else |
| + init->offset += 3; |
| } |
| |
| /** |