nouveau: backport s/r fix for some boards

This commit is contained in:
Ben Skeggs 2011-03-23 16:39:30 +10:00
parent 20692ec6bc
commit e372080592
2 changed files with 78 additions and 1 deletions

72
drm-nouveau-init5c.patch Normal file
View File

@ -0,0 +1,72 @@
From 2120b3b32d96d523b18c82beb99a2d1c6135eb49 Mon Sep 17 00:00:00 2001
From: Ben Skeggs <bskeggs@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@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

View File

@ -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@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@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!