aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
index 1f590f839f76..f4611e3f0971 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
@@ -577,9 +577,6 @@ init_reserved(struct nvbios_init *init)
577 u8 length, i; 577 u8 length, i;
578 578
579 switch (opcode) { 579 switch (opcode) {
580 case 0x59:
581 length = 7;
582 break;
583 case 0xaa: 580 case 0xaa:
584 length = 4; 581 length = 4;
585 break; 582 break;
@@ -1288,6 +1285,25 @@ init_zm_reg_sequence(struct nvbios_init *init)
1288} 1285}
1289 1286
1290/** 1287/**
1288 * INIT_PLL_INDIRECT - opcode 0x59
1289 *
1290 */
1291static void
1292init_pll_indirect(struct nvbios_init *init)
1293{
1294 struct nvkm_bios *bios = init->bios;
1295 u32 reg = nv_ro32(bios, init->offset + 1);
1296 u16 addr = nv_ro16(bios, init->offset + 5);
1297 u32 freq = (u32)nv_ro16(bios, addr) * 1000;
1298
1299 trace("PLL_INDIRECT\tR[0x%06x] =PLL= VBIOS[%04x] = %dkHz\n",
1300 reg, addr, freq);
1301 init->offset += 7;
1302
1303 init_prog_pll(init, reg, freq);
1304}
1305
1306/**
1291 * INIT_ZM_REG_INDIRECT - opcode 0x5a 1307 * INIT_ZM_REG_INDIRECT - opcode 0x5a
1292 * 1308 *
1293 */ 1309 */
@@ -2167,7 +2183,7 @@ static struct nvbios_init_opcode {
2167 [0x56] = { init_condition_time }, 2183 [0x56] = { init_condition_time },
2168 [0x57] = { init_ltime }, 2184 [0x57] = { init_ltime },
2169 [0x58] = { init_zm_reg_sequence }, 2185 [0x58] = { init_zm_reg_sequence },
2170 [0x59] = { init_reserved }, 2186 [0x59] = { init_pll_indirect },
2171 [0x5a] = { init_zm_reg_indirect }, 2187 [0x5a] = { init_zm_reg_indirect },
2172 [0x5b] = { init_sub_direct }, 2188 [0x5b] = { init_sub_direct },
2173 [0x5c] = { init_jump }, 2189 [0x5c] = { init_jump },