Commit 12221d43 authored by Murali Karicheri's avatar Murali Karicheri Committed by Sekhar Nori

ARM: davinci: add support for multiple power domains

On a new SoC based on DaVinci, there are multiple power
domains similar to that in C6670 (c6x). Currently the
clock module assumes that there are only two power domains
(0 and 1).

This patch removes this restriction to allow porting on to
the new SoC.

Reviewed-by :Sergei Shtylyov <sshtylyov@mvista.com>
Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
Signed-off-by: default avatarSekhar Nori <nsekhar@ti.com>
parent caca6a03
...@@ -31,19 +31,12 @@ static LIST_HEAD(clocks); ...@@ -31,19 +31,12 @@ static LIST_HEAD(clocks);
static DEFINE_MUTEX(clocks_mutex); static DEFINE_MUTEX(clocks_mutex);
static DEFINE_SPINLOCK(clockfw_lock); static DEFINE_SPINLOCK(clockfw_lock);
static unsigned psc_domain(struct clk *clk)
{
return (clk->flags & PSC_DSP)
? DAVINCI_GPSC_DSPDOMAIN
: DAVINCI_GPSC_ARMDOMAIN;
}
static void __clk_enable(struct clk *clk) static void __clk_enable(struct clk *clk)
{ {
if (clk->parent) if (clk->parent)
__clk_enable(clk->parent); __clk_enable(clk->parent);
if (clk->usecount++ == 0 && (clk->flags & CLK_PSC)) if (clk->usecount++ == 0 && (clk->flags & CLK_PSC))
davinci_psc_config(psc_domain(clk), clk->gpsc, clk->lpsc, davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
true, clk->flags); true, clk->flags);
} }
...@@ -53,7 +46,7 @@ static void __clk_disable(struct clk *clk) ...@@ -53,7 +46,7 @@ static void __clk_disable(struct clk *clk)
return; return;
if (--clk->usecount == 0 && !(clk->flags & CLK_PLL) && if (--clk->usecount == 0 && !(clk->flags & CLK_PLL) &&
(clk->flags & CLK_PSC)) (clk->flags & CLK_PSC))
davinci_psc_config(psc_domain(clk), clk->gpsc, clk->lpsc, davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
false, clk->flags); false, clk->flags);
if (clk->parent) if (clk->parent)
__clk_disable(clk->parent); __clk_disable(clk->parent);
...@@ -237,7 +230,7 @@ static int __init clk_disable_unused(void) ...@@ -237,7 +230,7 @@ static int __init clk_disable_unused(void)
pr_debug("Clocks: disable unused %s\n", ck->name); pr_debug("Clocks: disable unused %s\n", ck->name);
davinci_psc_config(psc_domain(ck), ck->gpsc, ck->lpsc, davinci_psc_config(ck->domain, ck->gpsc, ck->lpsc,
false, ck->flags); false, ck->flags);
} }
spin_unlock_irq(&clockfw_lock); spin_unlock_irq(&clockfw_lock);
......
...@@ -93,6 +93,7 @@ struct clk { ...@@ -93,6 +93,7 @@ struct clk {
u8 usecount; u8 usecount;
u8 lpsc; u8 lpsc;
u8 gpsc; u8 gpsc;
u8 domain;
u32 flags; u32 flags;
struct clk *parent; struct clk *parent;
struct list_head children; /* list of children */ struct list_head children; /* list of children */
...@@ -107,11 +108,10 @@ struct clk { ...@@ -107,11 +108,10 @@ struct clk {
/* Clock flags: SoC-specific flags start at BIT(16) */ /* Clock flags: SoC-specific flags start at BIT(16) */
#define ALWAYS_ENABLED BIT(1) #define ALWAYS_ENABLED BIT(1)
#define CLK_PSC BIT(2) #define CLK_PSC BIT(2)
#define PSC_DSP BIT(3) /* PSC uses DSP domain, not ARM */ #define CLK_PLL BIT(3) /* PLL-derived clock */
#define CLK_PLL BIT(4) /* PLL-derived clock */ #define PRE_PLL BIT(4) /* source is before PLL mult/div */
#define PRE_PLL BIT(5) /* source is before PLL mult/div */ #define PSC_SWRSTDISABLE BIT(5) /* Disable state is SwRstDisable */
#define PSC_SWRSTDISABLE BIT(6) /* Disable state is SwRstDisable */ #define PSC_FORCE BIT(6) /* Force module state transtition */
#define PSC_FORCE BIT(7) /* Force module state transtition */
#define CLK(dev, con, ck) \ #define CLK(dev, con, ck) \
{ \ { \
......
...@@ -130,7 +130,7 @@ static struct clk dsp_clk = { ...@@ -130,7 +130,7 @@ static struct clk dsp_clk = {
.name = "dsp", .name = "dsp",
.parent = &pll1_sysclk1, .parent = &pll1_sysclk1,
.lpsc = DAVINCI_LPSC_GEM, .lpsc = DAVINCI_LPSC_GEM,
.flags = PSC_DSP, .domain = DAVINCI_GPSC_DSPDOMAIN,
.usecount = 1, /* REVISIT how to disable? */ .usecount = 1, /* REVISIT how to disable? */
}; };
...@@ -145,7 +145,7 @@ static struct clk vicp_clk = { ...@@ -145,7 +145,7 @@ static struct clk vicp_clk = {
.name = "vicp", .name = "vicp",
.parent = &pll1_sysclk2, .parent = &pll1_sysclk2,
.lpsc = DAVINCI_LPSC_IMCOP, .lpsc = DAVINCI_LPSC_IMCOP,
.flags = PSC_DSP, .domain = DAVINCI_GPSC_DSPDOMAIN,
.usecount = 1, /* REVISIT how to disable? */ .usecount = 1, /* REVISIT how to disable? */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment