mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-30 21:46:31 +00:00
drm/nva3/clk: minor improvements to fractional N calculation
Helps us to get identical numbers to the binary driver for (at least) Kepler memory PLLs, and fixes a rounding error. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
dceef5d87c
commit
da746d4ec9
@ -50,8 +50,15 @@ nva3_pll_calc(struct nouveau_subdev *subdev, struct nvbios_pll *info,
|
||||
u32 tmp = freq * *P * M;
|
||||
N = tmp / info->refclk;
|
||||
fN = tmp % info->refclk;
|
||||
if (!pfN && fN >= info->refclk / 2)
|
||||
N++;
|
||||
|
||||
if (!pfN) {
|
||||
if (fN >= info->refclk / 2)
|
||||
N++;
|
||||
} else {
|
||||
if (fN < info->refclk / 2)
|
||||
N--;
|
||||
fN = tmp - (N * info->refclk);
|
||||
}
|
||||
|
||||
if (N < info->vco1.min_n)
|
||||
continue;
|
||||
@ -66,7 +73,8 @@ nva3_pll_calc(struct nouveau_subdev *subdev, struct nvbios_pll *info,
|
||||
}
|
||||
|
||||
if (pfN) {
|
||||
*pfN = (((fN << 13) / info->refclk) - 4096) & 0xffff;
|
||||
*pfN = ((fN << 13) + info->refclk / 2) / info->refclk;
|
||||
*pfN = (*pfN - 4096) & 0xffff;
|
||||
return freq;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user