{
        struct mtk_clk_pll *pll = to_mtk_clk_pll(hw);
        u32 r;
+       u32 div_en_mask;
 
        r = readl(pll->pwr_addr) | CON0_PWR_ON;
        writel(r, pll->pwr_addr);
        writel(r, pll->pwr_addr);
        udelay(1);
 
-       r = readl(pll->base_addr + REG_CON0);
-       r |= pll->data->en_mask;
+       r = readl(pll->base_addr + REG_CON0) | CON0_BASE_EN;
        writel(r, pll->base_addr + REG_CON0);
 
+       div_en_mask = pll->data->en_mask & ~CON0_BASE_EN;
+       if (div_en_mask) {
+               r = readl(pll->base_addr + REG_CON0) | div_en_mask;
+               writel(r, pll->base_addr + REG_CON0);
+       }
+
        __mtk_pll_tuner_enable(pll);
 
        udelay(20);
 {
        struct mtk_clk_pll *pll = to_mtk_clk_pll(hw);
        u32 r;
+       u32 div_en_mask;
 
        if (pll->data->flags & HAVE_RST_BAR) {
                r = readl(pll->base_addr + REG_CON0);
 
        __mtk_pll_tuner_disable(pll);
 
-       r = readl(pll->base_addr + REG_CON0);
-       r &= ~CON0_BASE_EN;
+       div_en_mask = pll->data->en_mask & ~CON0_BASE_EN;
+       if (div_en_mask) {
+               r = readl(pll->base_addr + REG_CON0) & ~div_en_mask;
+               writel(r, pll->base_addr + REG_CON0);
+       }
+
+       r = readl(pll->base_addr + REG_CON0) & ~CON0_BASE_EN;
        writel(r, pll->base_addr + REG_CON0);
 
        r = readl(pll->pwr_addr) | CON0_ISO_EN;