#define OSC_CTRL                       0x50
 #define OSC_CTRL_OSC_FREQ_SHIFT                28
 #define OSC_CTRL_PLL_REF_DIV_SHIFT     26
+#define OSC_CTRL_MASK                  (0x3f2 |        \
+                                       (0xf << OSC_CTRL_OSC_FREQ_SHIFT))
+
+static u32 osc_ctrl_ctx;
 
 int __init tegra_osc_clk_init(void __iomem *clk_base, struct tegra_clk *clks,
                              unsigned long *input_freqs, unsigned int num,
        unsigned osc_idx;
 
        val = readl_relaxed(clk_base + OSC_CTRL);
+       osc_ctrl_ctx = val & OSC_CTRL_MASK;
        osc_idx = val >> OSC_CTRL_OSC_FREQ_SHIFT;
 
        if (osc_idx < num)
                *dt_clk = clk;
        }
 }
+
+void tegra_clk_osc_resume(void __iomem *clk_base)
+{
+       u32 val;
+
+       val = readl_relaxed(clk_base + OSC_CTRL) & ~OSC_CTRL_MASK;
+       val |= osc_ctrl_ctx;
+       writel_relaxed(val, clk_base + OSC_CTRL);
+       fence_udelay(2, clk_base);
+}
 
 int tegra_pll_p_div_to_hw(struct tegra_clk_pll *pll, u8 p_div);
 int div_frac_get(unsigned long rate, unsigned parent_rate, u8 width,
                 u8 frac_width, u8 flags);
+void tegra_clk_osc_resume(void __iomem *clk_base);
 
 
 /* Combined read fence with delay */