[kernel/f14/master] nouveau: backport s/r fix for some boards

Ben Skeggs bskeggs at fedoraproject.org
Wed Mar 23 06:41:09 UTC 2011


commit e372080592a904b5b06ec499a4eaab9dd31d219e
Author: Ben Skeggs <bskeggs at redhat.com>
Date:   Wed Mar 23 16:39:30 2011 +1000

    nouveau: backport s/r fix for some boards

 drm-nouveau-init5c.patch |   72 ++++++++++++++++++++++++++++++++++++++++++++++
 kernel.spec              |    7 ++++-
 2 files changed, 78 insertions(+), 1 deletions(-)
---
diff --git a/drm-nouveau-init5c.patch b/drm-nouveau-init5c.patch
new file mode 100644
index 0000000..a17cfde
--- /dev/null
+++ b/drm-nouveau-init5c.patch
@@ -0,0 +1,72 @@
+From 2120b3b32d96d523b18c82beb99a2d1c6135eb49 Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs at redhat.com>
+Date: Mon, 21 Mar 2011 21:31:21 +1000
+Subject: [PATCH] drm/nouveau: implement init table opcode 0x5c
+
+Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
+---
+ drivers/gpu/drm/nouveau/nouveau_bios.c |   27 ++++++++++++++++++++++++---
+ 1 files changed, 24 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
+index 8314a49..eca191a 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
++++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
+@@ -269,7 +269,7 @@ struct init_tbl_entry {
+ 	int (*handler)(struct nvbios *, uint16_t, struct init_exec *);
+ };
+ 
+-static int parse_init_table(struct nvbios *, unsigned int, struct init_exec *);
++static int parse_init_table(struct nvbios *, uint16_t, struct init_exec *);
+ 
+ #define MACRO_INDEX_SIZE	2
+ #define MACRO_SIZE		8
+@@ -2011,6 +2011,27 @@ init_sub_direct(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ }
+ 
+ static int
++init_jump(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
++{
++	/*
++	 * INIT_JUMP   opcode: 0x5C ('\')
++	 *
++	 * offset      (8  bit): opcode
++	 * offset + 1  (16 bit): offset (in bios)
++	 *
++	 * Continue execution of init table from 'offset'
++	 */
++
++	uint16_t jmp_offset = ROM16(bios->data[offset + 1]);
++
++	if (!iexec->execute)
++		return 3;
++
++	BIOSLOG(bios, "0x%04X: Jump to 0x%04X\n", offset, jmp_offset);
++	return jmp_offset - offset;
++}
++
++static int
+ init_i2c_if(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ {
+ 	/*
+@@ -3659,6 +3680,7 @@ static struct init_tbl_entry itbl_entry[] = {
+ 	{ "INIT_ZM_REG_SEQUENCE"              , 0x58, init_zm_reg_sequence            },
+ 	/* INIT_INDIRECT_REG (0x5A, 7, 0, 0) removed due to no example of use */
+ 	{ "INIT_SUB_DIRECT"                   , 0x5B, init_sub_direct                 },
++	{ "INIT_JUMP"                         , 0x5C, init_jump                       },
+ 	{ "INIT_I2C_IF"                       , 0x5E, init_i2c_if                     },
+ 	{ "INIT_COPY_NV_REG"                  , 0x5F, init_copy_nv_reg                },
+ 	{ "INIT_ZM_INDEX_IO"                  , 0x62, init_zm_index_io                },
+@@ -3700,8 +3722,7 @@ static struct init_tbl_entry itbl_entry[] = {
+ #define MAX_TABLE_OPS 1000
+ 
+ static int
+-parse_init_table(struct nvbios *bios, unsigned int offset,
+-		 struct init_exec *iexec)
++parse_init_table(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ {
+ 	/*
+ 	 * Parses all commands in an init table.
+-- 
+1.7.4.1
+
diff --git a/kernel.spec b/kernel.spec
index 12d7fb3..9ffe1b4 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -48,7 +48,7 @@ Summary: The Linux kernel
 # reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec).
 # scripts/rebase.sh should be made to do that for you, actually.
 #
-%global baserelease 86
+%global baserelease 87
 %global fedora_build %{baserelease}
 
 # base_sublevel is the kernel version we're starting with and patching
@@ -697,6 +697,7 @@ Patch1816: drm-nouveau-imac-g4.patch
 Patch1817: drm-nouveau-evo-hang.patch
 Patch1818: drm-nouveau-nvaf-grclass.patch
 Patch1819: drm-intel-big-hammer.patch
+Patch1820: drm-nouveau-init5c.patch
 # intel drm is all merged upstream
 Patch1824: drm-intel-next.patch
 # make sure the lvds comes back on lid open
@@ -1440,6 +1441,7 @@ ApplyPatch drm-nouveau-connector-fix.patch
 ApplyPatch drm-nouveau-imac-g4.patch
 ApplyPatch drm-nouveau-evo-hang.patch
 ApplyPatch drm-nouveau-nvaf-grclass.patch
+ApplyPatch drm-nouveau-init5c.patch
 
 ApplyPatch drm-intel-big-hammer.patch
 ApplyOptionalPatch drm-intel-next.patch
@@ -2191,6 +2193,9 @@ fi
 # and build.
 
 %changelog
+* Wed Mar 23 2011 Ben Skeggs <bskeggs at redhat.com> 2.6.35.11-87
+- nouveau: fix s/r on some boards (f14 port of #688569)
+
 * Wed Mar 16 2011 Kyle McMartin <kmcmartin at redhat.com> 2.6.35.11-86
 - Fix a regression in cfg80211 ht40 support from 2.6.35, patch from
   Mark Mentovai and Stanislaw Gruszka. Thanks!


More information about the scm-commits mailing list