aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2011-07-21 02:12:58 -0400
committerBen Skeggs <bskeggs@redhat.com>2011-09-20 02:08:54 -0400
commitafb0c796d8002a0052662ff337dbd18b5dc5ff97 (patch)
tree0db6a5f9a315b3934ee94025bffde939f6d6eb61 /drivers/gpu/drm
parent378f85ed54a424bc7e1edb9c3c7cd3a7efef9f9c (diff)
drm/nouveau/tmr: fix miscalculation of ratio on pre-nv4x chipsets
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>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/nouveau/nv04_timer.c28
1 files changed, 2 insertions, 26 deletions
diff --git a/drivers/gpu/drm/nouveau/nv04_timer.c b/drivers/gpu/drm/nouveau/nv04_timer.c
index afb9d4b6a029..263301b809dd 100644
--- a/drivers/gpu/drm/nouveau/nv04_timer.c
+++ b/drivers/gpu/drm/nouveau/nv04_timer.c
@@ -3,30 +3,6 @@
3#include "nouveau_drv.h" 3#include "nouveau_drv.h"
4#include "nouveau_drm.h" 4#include "nouveau_drm.h"
5 5
6static u32
7nv04_crystal_freq(struct drm_device *dev)
8{
9 struct drm_nouveau_private *dev_priv = dev->dev_private;
10 u32 extdev_boot0 = nv_rd32(dev, 0x101000);
11 int type;
12
13 type = !!(extdev_boot0 & 0x00000040);
14 if ((dev_priv->chipset >= 0x17 && dev_priv->chipset < 0x20) ||
15 dev_priv->chipset >= 0x25)
16 type |= (extdev_boot0 & 0x00400000) ? 2 : 0;
17
18 switch (type) {
19 case 0: return 13500000;
20 case 1: return 14318180;
21 case 2: return 27000000;
22 case 3: return 25000000;
23 default:
24 break;
25 }
26
27 return 0;
28}
29
30int 6int
31nv04_timer_init(struct drm_device *dev) 7nv04_timer_init(struct drm_device *dev)
32{ 8{
@@ -37,7 +13,7 @@ nv04_timer_init(struct drm_device *dev)
37 nv_wr32(dev, NV04_PTIMER_INTR_0, 0xFFFFFFFF); 13 nv_wr32(dev, NV04_PTIMER_INTR_0, 0xFFFFFFFF);
38 14
39 /* aim for 31.25MHz, which gives us nanosecond timestamps */ 15 /* aim for 31.25MHz, which gives us nanosecond timestamps */
40 d = 1000000000 / 32; 16 d = 1000000 / 32;
41 17
42 /* determine base clock for timer source */ 18 /* determine base clock for timer source */
43 if (dev_priv->chipset < 0x40) { 19 if (dev_priv->chipset < 0x40) {
@@ -47,7 +23,7 @@ nv04_timer_init(struct drm_device *dev)
47 /*XXX: figure this out */ 23 /*XXX: figure this out */
48 n = 0; 24 n = 0;
49 } else { 25 } else {
50 n = nv04_crystal_freq(dev); 26 n = dev_priv->crystal;
51 m = 1; 27 m = 1;
52 while (n < (d * 2)) { 28 while (n < (d * 2)) {
53 n += (n / m); 29 n += (n / m);