drm/nouveau/tmr: fix miscalculation of ratio on pre-nv4x chipsets
authorBen Skeggs <bskeggs@redhat.com>
Thu, 21 Jul 2011 06:12:58 +0000 (16:12 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 20 Sep 2011 06:08:54 +0000 (16:08 +1000)
The clock_get() hook returns KHz, not Hz.

Also fixed to use crystal freq from dev_priv.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nv04_timer.c

index afb9d4b..263301b 100644 (file)
@@ -3,30 +3,6 @@
 #include "nouveau_drv.h"
 #include "nouveau_drm.h"
 
-static u32
-nv04_crystal_freq(struct drm_device *dev)
-{
-       struct drm_nouveau_private *dev_priv = dev->dev_private;
-       u32 extdev_boot0 = nv_rd32(dev, 0x101000);
-       int type;
-
-       type = !!(extdev_boot0 & 0x00000040);
-       if ((dev_priv->chipset >= 0x17 && dev_priv->chipset < 0x20) ||
-           dev_priv->chipset >= 0x25)
-               type |= (extdev_boot0 & 0x00400000) ? 2 : 0;
-
-       switch (type) {
-       case 0: return 13500000;
-       case 1: return 14318180;
-       case 2: return 27000000;
-       case 3: return 25000000;
-       default:
-               break;
-       }
-
-       return 0;
-}
-
 int
 nv04_timer_init(struct drm_device *dev)
 {
@@ -37,7 +13,7 @@ nv04_timer_init(struct drm_device *dev)
        nv_wr32(dev, NV04_PTIMER_INTR_0, 0xFFFFFFFF);
 
        /* aim for 31.25MHz, which gives us nanosecond timestamps */
-       d = 1000000000 / 32;
+       d = 1000000 / 32;
 
        /* determine base clock for timer source */
        if (dev_priv->chipset < 0x40) {
@@ -47,7 +23,7 @@ nv04_timer_init(struct drm_device *dev)
                /*XXX: figure this out */
                n = 0;
        } else {
-               n = nv04_crystal_freq(dev);
+               n = dev_priv->crystal;
                m = 1;
                while (n < (d * 2)) {
                        n += (n / m);