static void __alpha_pll_vote_disable(struct alpha_pll_clk *pll) { u32 ena; ena = readl_relaxed(VOTE_REG(pll)); ena &= ~pll->fsm_en_mask; writel_relaxed(ena, VOTE_REG(pll)); }
static int __alpha_pll_vote_enable(struct alpha_pll_clk *pll) { u32 ena; ena = readl_relaxed(VOTE_REG(pll)); ena |= pll->fsm_en_mask; writel_relaxed(ena, VOTE_REG(pll)); mb(); return wait_for_update(pll); }
static void local_vote_clk_disable(struct clk *c) { unsigned long flags; u32 ena; struct local_vote_clk *vclk = to_local_vote_clk(c); spin_lock_irqsave(&local_clock_reg_lock, flags); ena = readl_relaxed(VOTE_REG(vclk)); ena &= ~vclk->en_mask; writel_relaxed(ena, VOTE_REG(vclk)); spin_unlock_irqrestore(&local_clock_reg_lock, flags); }
static int local_vote_clk_enable(struct clk *c) { unsigned long flags; u32 ena; struct local_vote_clk *vclk = to_local_vote_clk(c); spin_lock_irqsave(&local_clock_reg_lock, flags); ena = readl_relaxed(VOTE_REG(vclk)); ena |= vclk->en_mask; writel_relaxed(ena, VOTE_REG(vclk)); spin_unlock_irqrestore(&local_clock_reg_lock, flags); branch_clk_halt_check(vclk->halt_check, c->dbg_name, CBCR_REG(vclk), BRANCH_ON); return 0; }
static enum handoff local_vote_clk_handoff(struct clk *c) { struct local_vote_clk *vclk = to_local_vote_clk(c); u32 vote_regval; /* Is the branch voted on by apps? */ vote_regval = readl_relaxed(VOTE_REG(vclk)); if (!(vote_regval & vclk->en_mask)) return HANDOFF_DISABLED_CLK; return HANDOFF_ENABLED_CLK; }