}
 
 static u32
-read_pll_ref(struct drm_device *dev, u32 base)
+read_pll_src(struct drm_device *dev, u32 base)
 {
        struct drm_nouveau_private *dev_priv = dev->dev_private;
        u32 coef, ref = read_clk(dev, clk_src_crystal);
 }
 
 static u32
-read_pll(struct drm_device *dev, u32 base)
+read_pll_ref(struct drm_device *dev, u32 base)
 {
-       struct drm_nouveau_private *dev_priv = dev->dev_private;
-       u32 mast = nv_rd32(dev, 0x00c040);
-       u32 src = 0, ref = 0, clk = 0;
-       u32 ctrl, coef;
-       int N1, N2, M1, M2;
+       u32 src, mast = nv_rd32(dev, 0x00c040);
 
        switch (base) {
        case 0x004028:
-               if (mast & 0x00100000) {
-                       /* wtf, appears to only disable post-divider on nva0 */
-                       if (dev_priv->chipset != 0xa0)
-                               return read_clk(dev, clk_src_dom6);
-               }
                src = !!(mast & 0x00200000);
                break;
        case 0x004020:
                src = !!(mast & 0x02000000);
                break;
        case 0x00e810:
-               ref = read_clk(dev, clk_src_crystal);
-               break;
+               return read_clk(dev, clk_src_crystal);
        default:
                NV_ERROR(dev, "bad pll 0x%06x\n", base);
                return 0;
        }
 
-       if (ref == 0) {
-               if (src)
-                       ref = read_clk(dev, clk_src_href);
-               else
-                       ref = read_pll_ref(dev, base);
-       }
+       if (src)
+               return read_clk(dev, clk_src_href);
+       return read_pll_src(dev, base);
+}
 
-       ctrl = nv_rd32(dev, base + 0);
-       coef = nv_rd32(dev, base + 4);
+static u32
+read_pll(struct drm_device *dev, u32 base)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       u32 mast = nv_rd32(dev, 0x00c040);
+       u32 ctrl = nv_rd32(dev, base + 0);
+       u32 coef = nv_rd32(dev, base + 4);
+       u32 ref = read_pll_ref(dev, base);
+       u32 clk = 0;
+       int N1, N2, M1, M2;
+
+       if (base == 0x004028 && (mast & 0x00100000)) {
+               /* wtf, appears to only disable post-divider on nva0 */
+               if (dev_priv->chipset != 0xa0)
+                       return read_clk(dev, clk_src_dom6);
+       }
 
        N2 = (coef & 0xff000000) >> 24;
        M2 = (coef & 0x00ff0000) >> 16;