From: Rajendra Nayak <rnayak@ti.com> To: linux-omap@vger.kernel.org Cc: paul@pwsan.com, b-cousson@ti.com, khilman@ti.com, santosh.shilimkar@ti.com, linux-arm-kernel@lists.infradead.org, Rajendra Nayak <rnayak@ti.com> Subject: [PATCH 6/7] omap4: dpll: Add dpll api to control GATE_CTRL Date: Tue, 8 Feb 2011 15:40:37 +0530 [thread overview] Message-ID: <1297159838-30282-7-git-send-email-rnayak@ti.com> (raw) In-Reply-To: <1297159838-30282-6-git-send-email-rnayak@ti.com> On OMAP4, the dpll post divider outputs (MX outputs) provide a way to allow/deny hardware level autogating. Allowing autoidle would mean that the hw would autogate this clock when there is no dependency for it. Denying idle would mean that this clock output will be forced to stay enabled. Add dpll api's to read/allow/deny idle control for these dpll mx postdividers. NOTE: The gatectrl bit set to 0 allows gatectrl, and the bit set to 1 denies gatectrl. Signed-off-by: Rajendra Nayak <rnayak@ti.com> --- arch/arm/mach-omap2/clock.h | 3 ++ arch/arm/mach-omap2/dpll3xxx.c | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index 2a939e5..c450d69 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h @@ -65,6 +65,9 @@ u32 omap3_dpll_autoidle_read(struct clk *clk); int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate); int omap3_noncore_dpll_enable(struct clk *clk); void omap3_noncore_dpll_disable(struct clk *clk); +int omap4_dpllmx_gatectrl_read(struct clk *clk); +void omap4_dpllmx_allow_gatectrl(struct clk *clk); +void omap4_dpllmx_deny_gatectrl(struct clk *clk); #ifdef CONFIG_OMAP_RESET_CLOCKS void omap2_clk_disable_unused(struct clk *clk); diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index f77022b..4571e94 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c @@ -34,6 +34,7 @@ #include "clock.h" #include "cm2xxx_3xxx.h" #include "cm-regbits-34xx.h" +#include "cm-regbits-44xx.h" /* CM_AUTOIDLE_PLL*.AUTO_* bit values */ #define DPLL_AUTOIDLE_DISABLE 0x0 @@ -612,3 +613,44 @@ unsigned long omap3_clkoutx2_recalc(struct clk *clk) rate = clk->parent->rate * 2; return rate; } + +/* Supported only on OMAP4 */ +int omap4_dpllmx_gatectrl_read(struct clk *clk) +{ + u32 v; + + if (!clk || !clk->clksel_reg || !cpu_is_omap44xx()) + return -EINVAL; + + v = __raw_readl(clk->clksel_reg); + v &= OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; + v >>= __ffs(OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK); + + return v; +} + +void omap4_dpllmx_allow_gatectrl(struct clk *clk) +{ + u32 v; + + if (!clk || !clk->clksel_reg || !cpu_is_omap44xx()) + return; + + v = __raw_readl(clk->clksel_reg); + /* Clear the bit to allow gatectrl */ + v &= ~OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; + __raw_writel(v, clk->clksel_reg); +} + +void omap4_dpllmx_deny_gatectrl(struct clk *clk) +{ + u32 v; + + if (!clk || !clk->clksel_reg || !cpu_is_omap44xx()) + return; + + v = __raw_readl(clk->clksel_reg); + /* Set the bit to deny gatectrl */ + v |= OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; + __raw_writel(v, clk->clksel_reg); +} -- 1.7.0.4
WARNING: multiple messages have this Message-ID (diff)
From: rnayak@ti.com (Rajendra Nayak) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 6/7] omap4: dpll: Add dpll api to control GATE_CTRL Date: Tue, 8 Feb 2011 15:40:37 +0530 [thread overview] Message-ID: <1297159838-30282-7-git-send-email-rnayak@ti.com> (raw) In-Reply-To: <1297159838-30282-6-git-send-email-rnayak@ti.com> On OMAP4, the dpll post divider outputs (MX outputs) provide a way to allow/deny hardware level autogating. Allowing autoidle would mean that the hw would autogate this clock when there is no dependency for it. Denying idle would mean that this clock output will be forced to stay enabled. Add dpll api's to read/allow/deny idle control for these dpll mx postdividers. NOTE: The gatectrl bit set to 0 allows gatectrl, and the bit set to 1 denies gatectrl. Signed-off-by: Rajendra Nayak <rnayak@ti.com> --- arch/arm/mach-omap2/clock.h | 3 ++ arch/arm/mach-omap2/dpll3xxx.c | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index 2a939e5..c450d69 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h @@ -65,6 +65,9 @@ u32 omap3_dpll_autoidle_read(struct clk *clk); int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate); int omap3_noncore_dpll_enable(struct clk *clk); void omap3_noncore_dpll_disable(struct clk *clk); +int omap4_dpllmx_gatectrl_read(struct clk *clk); +void omap4_dpllmx_allow_gatectrl(struct clk *clk); +void omap4_dpllmx_deny_gatectrl(struct clk *clk); #ifdef CONFIG_OMAP_RESET_CLOCKS void omap2_clk_disable_unused(struct clk *clk); diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index f77022b..4571e94 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c @@ -34,6 +34,7 @@ #include "clock.h" #include "cm2xxx_3xxx.h" #include "cm-regbits-34xx.h" +#include "cm-regbits-44xx.h" /* CM_AUTOIDLE_PLL*.AUTO_* bit values */ #define DPLL_AUTOIDLE_DISABLE 0x0 @@ -612,3 +613,44 @@ unsigned long omap3_clkoutx2_recalc(struct clk *clk) rate = clk->parent->rate * 2; return rate; } + +/* Supported only on OMAP4 */ +int omap4_dpllmx_gatectrl_read(struct clk *clk) +{ + u32 v; + + if (!clk || !clk->clksel_reg || !cpu_is_omap44xx()) + return -EINVAL; + + v = __raw_readl(clk->clksel_reg); + v &= OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; + v >>= __ffs(OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK); + + return v; +} + +void omap4_dpllmx_allow_gatectrl(struct clk *clk) +{ + u32 v; + + if (!clk || !clk->clksel_reg || !cpu_is_omap44xx()) + return; + + v = __raw_readl(clk->clksel_reg); + /* Clear the bit to allow gatectrl */ + v &= ~OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; + __raw_writel(v, clk->clksel_reg); +} + +void omap4_dpllmx_deny_gatectrl(struct clk *clk) +{ + u32 v; + + if (!clk || !clk->clksel_reg || !cpu_is_omap44xx()) + return; + + v = __raw_readl(clk->clksel_reg); + /* Set the bit to deny gatectrl */ + v |= OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; + __raw_writel(v, clk->clksel_reg); +} -- 1.7.0.4
next prev parent reply other threads:[~2011-02-08 10:10 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-02-08 10:10 [PATCH 0/7] clock/dpll autoidle support Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak 2011-02-08 10:10 ` [PATCH 1/7] omap: clock: Check for enable/disable ops support Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak 2011-02-08 10:10 ` [PATCH 2/7] omap3: dpll: Populate clkops for dpll1_ck Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak 2011-02-08 10:10 ` [PATCH 3/7] omap: clock: Add allow_idle/deny_idle support in clkops Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak 2011-02-08 10:10 ` [PATCH 4/7] omap: dpll: Add allow_idle/deny_idle support for all DPLL's Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak 2011-02-08 10:10 ` [PATCH 5/7] omap: dpll: Enable all OMAP3/4 dpll autoidle late at boot Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak [this message] 2011-02-08 10:10 ` [PATCH 6/7] omap4: dpll: Add dpll api to control GATE_CTRL Rajendra Nayak 2011-02-08 10:10 ` [PATCH 7/7] omap4: dpll: Enable auto gate control for all MX postdividers Rajendra Nayak 2011-02-08 10:10 ` Rajendra Nayak 2011-02-12 23:18 ` [PATCH 2/7] omap3: dpll: Populate clkops for dpll1_ck Paul Walmsley 2011-02-12 23:18 ` Paul Walmsley 2011-02-12 23:17 ` [PATCH 1/7] omap: clock: Check for enable/disable ops support Paul Walmsley 2011-02-12 23:17 ` Paul Walmsley 2011-02-14 12:15 ` Rajendra Nayak 2011-02-14 12:15 ` Rajendra Nayak 2011-02-14 16:49 ` Paul Walmsley 2011-02-14 16:49 ` Paul Walmsley 2011-02-10 8:59 ` [PATCH 0/7] clock/dpll autoidle support Rajendra Nayak 2011-02-10 8:59 ` Rajendra Nayak
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1297159838-30282-7-git-send-email-rnayak@ti.com \ --to=rnayak@ti.com \ --cc=b-cousson@ti.com \ --cc=khilman@ti.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-omap@vger.kernel.org \ --cc=paul@pwsan.com \ --cc=santosh.shilimkar@ti.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.