|
Ben Skeggs |
e372080 |
From 2120b3b32d96d523b18c82beb99a2d1c6135eb49 Mon Sep 17 00:00:00 2001
|
|
Ben Skeggs |
e372080 |
From: Ben Skeggs <bskeggs@redhat.com>
|
|
Ben Skeggs |
e372080 |
Date: Mon, 21 Mar 2011 21:31:21 +1000
|
|
Ben Skeggs |
e372080 |
Subject: [PATCH] drm/nouveau: implement init table opcode 0x5c
|
|
Ben Skeggs |
e372080 |
|
|
Ben Skeggs |
e372080 |
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
|
Ben Skeggs |
e372080 |
---
|
|
Ben Skeggs |
e372080 |
drivers/gpu/drm/nouveau/nouveau_bios.c | 27 ++++++++++++++++++++++++---
|
|
Ben Skeggs |
e372080 |
1 files changed, 24 insertions(+), 3 deletions(-)
|
|
Ben Skeggs |
e372080 |
|
|
Ben Skeggs |
e372080 |
diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
|
|
Ben Skeggs |
e372080 |
index 8314a49..eca191a 100644
|
|
Ben Skeggs |
e372080 |
--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
|
|
Ben Skeggs |
e372080 |
+++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
|
|
Ben Skeggs |
e372080 |
@@ -269,7 +269,7 @@ struct init_tbl_entry {
|
|
Ben Skeggs |
e372080 |
int (*handler)(struct nvbios *, uint16_t, struct init_exec *);
|
|
Ben Skeggs |
e372080 |
};
|
|
Ben Skeggs |
e372080 |
|
|
Ben Skeggs |
e372080 |
-static int parse_init_table(struct nvbios *, unsigned int, struct init_exec *);
|
|
Ben Skeggs |
e372080 |
+static int parse_init_table(struct nvbios *, uint16_t, struct init_exec *);
|
|
Ben Skeggs |
e372080 |
|
|
Ben Skeggs |
e372080 |
#define MACRO_INDEX_SIZE 2
|
|
Ben Skeggs |
e372080 |
#define MACRO_SIZE 8
|
|
Ben Skeggs |
e372080 |
@@ -2011,6 +2011,27 @@ init_sub_direct(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
|
|
Ben Skeggs |
e372080 |
}
|
|
Ben Skeggs |
e372080 |
|
|
Ben Skeggs |
e372080 |
static int
|
|
Ben Skeggs |
e372080 |
+init_jump(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
|
|
Ben Skeggs |
e372080 |
+{
|
|
Ben Skeggs |
e372080 |
+ /*
|
|
Ben Skeggs |
e372080 |
+ * INIT_JUMP opcode: 0x5C ('\')
|
|
Ben Skeggs |
e372080 |
+ *
|
|
Ben Skeggs |
e372080 |
+ * offset (8 bit): opcode
|
|
Ben Skeggs |
e372080 |
+ * offset + 1 (16 bit): offset (in bios)
|
|
Ben Skeggs |
e372080 |
+ *
|
|
Ben Skeggs |
e372080 |
+ * Continue execution of init table from 'offset'
|
|
Ben Skeggs |
e372080 |
+ */
|
|
Ben Skeggs |
e372080 |
+
|
|
Ben Skeggs |
e372080 |
+ uint16_t jmp_offset = ROM16(bios->data[offset + 1]);
|
|
Ben Skeggs |
e372080 |
+
|
|
Ben Skeggs |
e372080 |
+ if (!iexec->execute)
|
|
Ben Skeggs |
e372080 |
+ return 3;
|
|
Ben Skeggs |
e372080 |
+
|
|
Ben Skeggs |
e372080 |
+ BIOSLOG(bios, "0x%04X: Jump to 0x%04X\n", offset, jmp_offset);
|
|
Ben Skeggs |
e372080 |
+ return jmp_offset - offset;
|
|
Ben Skeggs |
e372080 |
+}
|
|
Ben Skeggs |
e372080 |
+
|
|
Ben Skeggs |
e372080 |
+static int
|
|
Ben Skeggs |
e372080 |
init_i2c_if(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
|
|
Ben Skeggs |
e372080 |
{
|
|
Ben Skeggs |
e372080 |
/*
|
|
Ben Skeggs |
e372080 |
@@ -3659,6 +3680,7 @@ static struct init_tbl_entry itbl_entry[] = {
|
|
Ben Skeggs |
e372080 |
{ "INIT_ZM_REG_SEQUENCE" , 0x58, init_zm_reg_sequence },
|
|
Ben Skeggs |
e372080 |
/* INIT_INDIRECT_REG (0x5A, 7, 0, 0) removed due to no example of use */
|
|
Ben Skeggs |
e372080 |
{ "INIT_SUB_DIRECT" , 0x5B, init_sub_direct },
|
|
Ben Skeggs |
e372080 |
+ { "INIT_JUMP" , 0x5C, init_jump },
|
|
Ben Skeggs |
e372080 |
{ "INIT_I2C_IF" , 0x5E, init_i2c_if },
|
|
Ben Skeggs |
e372080 |
{ "INIT_COPY_NV_REG" , 0x5F, init_copy_nv_reg },
|
|
Ben Skeggs |
e372080 |
{ "INIT_ZM_INDEX_IO" , 0x62, init_zm_index_io },
|
|
Ben Skeggs |
e372080 |
@@ -3700,8 +3722,7 @@ static struct init_tbl_entry itbl_entry[] = {
|
|
Ben Skeggs |
e372080 |
#define MAX_TABLE_OPS 1000
|
|
Ben Skeggs |
e372080 |
|
|
Ben Skeggs |
e372080 |
static int
|
|
Ben Skeggs |
e372080 |
-parse_init_table(struct nvbios *bios, unsigned int offset,
|
|
Ben Skeggs |
e372080 |
- struct init_exec *iexec)
|
|
Ben Skeggs |
e372080 |
+parse_init_table(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
|
|
Ben Skeggs |
e372080 |
{
|
|
Ben Skeggs |
e372080 |
/*
|
|
Ben Skeggs |
e372080 |
* Parses all commands in an init table.
|
|
Ben Skeggs |
e372080 |
--
|
|
Ben Skeggs |
e372080 |
1.7.4.1
|
|
Ben Skeggs |
e372080 |
|