drm/nouveau/clk/gf100: Read secondary bypass postdiv when required
v2: fix typo it's -> its Signed-off-by: Roy Spliet <nouveau@spliet.org> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Родитель
0f7fbb990c
Коммит
f8fa2e4b37
|
@ -99,7 +99,7 @@ read_div(struct gf100_clk *clk, int doff, u32 dsrc, u32 dctl)
|
|||
{
|
||||
struct nvkm_device *device = clk->base.subdev.device;
|
||||
u32 ssrc = nvkm_rd32(device, dsrc + (doff * 4));
|
||||
u32 sctl = nvkm_rd32(device, dctl + (doff * 4));
|
||||
u32 sclk, sctl, sdiv = 2;
|
||||
|
||||
switch (ssrc & 0x00000003) {
|
||||
case 0:
|
||||
|
@ -109,13 +109,21 @@ read_div(struct gf100_clk *clk, int doff, u32 dsrc, u32 dctl)
|
|||
case 2:
|
||||
return 100000;
|
||||
case 3:
|
||||
if (sctl & 0x80000000) {
|
||||
u32 sclk = read_vco(clk, dsrc + (doff * 4));
|
||||
u32 sdiv = (sctl & 0x0000003f) + 2;
|
||||
return (sclk * 2) / sdiv;
|
||||
sclk = read_vco(clk, dsrc + (doff * 4));
|
||||
|
||||
/* Memclk has doff of 0 despite its alt. location */
|
||||
if (doff <= 2) {
|
||||
sctl = nvkm_rd32(device, dctl + (doff * 4));
|
||||
|
||||
if (sctl & 0x80000000) {
|
||||
if (ssrc & 0x100)
|
||||
sctl >>= 8;
|
||||
|
||||
sdiv = (sctl & 0x3f) + 2;
|
||||
}
|
||||
}
|
||||
|
||||
return read_vco(clk, dsrc + (doff * 4));
|
||||
return (sclk * 2) / sdiv;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче