diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2011-07-21 02:12:58 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-09-20 02:08:54 -0400 |
commit | afb0c796d8002a0052662ff337dbd18b5dc5ff97 (patch) | |
tree | 0db6a5f9a315b3934ee94025bffde939f6d6eb61 /drivers/gpu/drm | |
parent | 378f85ed54a424bc7e1edb9c3c7cd3a7efef9f9c (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.c | 28 |
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 | ||
6 | static u32 | ||
7 | nv04_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 | |||
30 | int | 6 | int |
31 | nv04_timer_init(struct drm_device *dev) | 7 | nv04_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); |