drm/nouveau/bios: add proper support for opcode 0x59
More analysis shows that this is identical to 0x79 except that it loads the frequency indirectly from elsewhere in the VBIOS. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91025 Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Родитель
360ccb8436
Коммит
d31b11d858
|
@ -577,9 +577,6 @@ init_reserved(struct nvbios_init *init)
|
||||||
u8 length, i;
|
u8 length, i;
|
||||||
|
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
case 0x59:
|
|
||||||
length = 7;
|
|
||||||
break;
|
|
||||||
case 0xaa:
|
case 0xaa:
|
||||||
length = 4;
|
length = 4;
|
||||||
break;
|
break;
|
||||||
|
@ -1287,6 +1284,25 @@ init_zm_reg_sequence(struct nvbios_init *init)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* INIT_PLL_INDIRECT - opcode 0x59
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
init_pll_indirect(struct nvbios_init *init)
|
||||||
|
{
|
||||||
|
struct nvkm_bios *bios = init->bios;
|
||||||
|
u32 reg = nv_ro32(bios, init->offset + 1);
|
||||||
|
u16 addr = nv_ro16(bios, init->offset + 5);
|
||||||
|
u32 freq = (u32)nv_ro16(bios, addr) * 1000;
|
||||||
|
|
||||||
|
trace("PLL_INDIRECT\tR[0x%06x] =PLL= VBIOS[%04x] = %dkHz\n",
|
||||||
|
reg, addr, freq);
|
||||||
|
init->offset += 7;
|
||||||
|
|
||||||
|
init_prog_pll(init, reg, freq);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* INIT_ZM_REG_INDIRECT - opcode 0x5a
|
* INIT_ZM_REG_INDIRECT - opcode 0x5a
|
||||||
*
|
*
|
||||||
|
@ -2167,7 +2183,7 @@ static struct nvbios_init_opcode {
|
||||||
[0x56] = { init_condition_time },
|
[0x56] = { init_condition_time },
|
||||||
[0x57] = { init_ltime },
|
[0x57] = { init_ltime },
|
||||||
[0x58] = { init_zm_reg_sequence },
|
[0x58] = { init_zm_reg_sequence },
|
||||||
[0x59] = { init_reserved },
|
[0x59] = { init_pll_indirect },
|
||||||
[0x5a] = { init_zm_reg_indirect },
|
[0x5a] = { init_zm_reg_indirect },
|
||||||
[0x5b] = { init_sub_direct },
|
[0x5b] = { init_sub_direct },
|
||||||
[0x5c] = { init_jump },
|
[0x5c] = { init_jump },
|
||||||
|
|
Загрузка…
Ссылка в новой задаче