Ilia Mirkin
2017-Jan-20 03:56 UTC
[Nouveau] [PATCH] nv1a,nv1f/disp: fix memory clock rate retrieval
Based on the xf86-video-nv code, NFORCE (NV1A) and NFORCE2 (NV1F) have a different way of retrieving clocks. See the nv_hw.c:nForceUpdateArbitrationSettings function in the original code for how these clocks were accessed. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54587 Cc: stable at vger.kernel.org Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu> --- According to several users this improves the flickering situation substantially, but does not fix the problems entirely. I'm guessing there's more, but this is pretty easy to compare with the old logic. drm/nouveau/dispnv04/hw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drm/nouveau/dispnv04/hw.c b/drm/nouveau/dispnv04/hw.c index 48ad4be..b985990 100644 --- a/drm/nouveau/dispnv04/hw.c +++ b/drm/nouveau/dispnv04/hw.c @@ -222,6 +222,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype) uint32_t mpllP; pci_read_config_dword(pci_get_bus_and_slot(0, 3), 0x6c, &mpllP); + mpllP = (mpllP >> 8) & 0xf; if (!mpllP) mpllP = 4; @@ -232,7 +233,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype) uint32_t clock; pci_read_config_dword(pci_get_bus_and_slot(0, 5), 0x4c, &clock); - return clock; + return clock / 1000; } ret = nouveau_hw_get_pllvals(dev, plltype, &pllvals); -- 2.10.2
Possibly Parallel Threads
- [PATCH] nouveau: Fix declarations with incorrect variables.
- [PATCH] drm/nouveau: remove redundant check
- [PATCH V3 10/29] drm/nouveau: deprecate pci_get_bus_and_slot()
- [PATCH V2 10/29] drm/nouveau: deprecate pci_get_bus_and_slot()
- [PATCH V4 09/26] drm/nouveau: deprecate pci_get_bus_and_slot()