drm/nv50/pm: stabilise transition to 100MHz mclk a bit
authorBen Skeggs <bskeggs@redhat.com>
Mon, 31 Oct 2011 01:59:07 +0000 (11:59 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 21 Dec 2011 09:01:29 +0000 (19:01 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nv50_pm.c

index 0b82c6075666d13d2f5daa74b4323e93dd0c4f96..961d8f20d27f359cf4b5cedd3dc37612dd472c6d 100644 (file)
@@ -465,7 +465,7 @@ nv50_pm_clocks_pre(struct drm_device *dev, struct nouveau_pm_level *perflvl)
        /* memory: use pcie refclock if possible, otherwise use mpll */
        info->mscript = perflvl->memscript;
        if (clk_same(perflvl->memory, read_clk(dev, clk_src_href))) {
-               info->mctrl = nv_rd32(dev, 0x4008) | 0x00000200;
+               info->mctrl = 0x00000200 | (pll.log2p_bias << 19);
                info->mcoef = nv_rd32(dev, 0x400c);
        } else
        if (perflvl->memory) {
@@ -606,7 +606,7 @@ nv50_pm_clocks_set(struct drm_device *dev, void *data)
 
        /* modify mpll */
        nv_mask(dev, 0x00c040, 0x0000c000, 0x0000c000);
-       nv_mask(dev, 0x004008, 0x81ff0200, 0x00000200 | info->mctrl);
+       nv_mask(dev, 0x004008, 0x01ff0200, 0x00000200 | info->mctrl);
        nv_wr32(dev, 0x00400c, info->mcoef);
        udelay(100);
        nv_mask(dev, 0x004008, 0x81ff0200, info->mctrl);