Nori, Sekhar <nsek...@ti.com> writes: > The patch allows Async3 clock source to be selected between PLL1 SYSCLK2 > and PLL0 SYSCLK2. > > Having Async3 source from PLL1 SYSCLK2 allows peripherals on that > domain to remain unaffected by frequency scaling on PLL0. > > Signed-off-by: Sekhar Nori <nsek...@ti.com> > > --- > arch/arm/mach-davinci/clock.h | 4 +- > arch/arm/mach-davinci/da850.c | 39 > ++++++++++++++++++++++++++++ > arch/arm/mach-davinci/include/mach/da8xx.h | 1 + > 3 files changed, 42 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h > index 74e0389..0b06121 100644 > --- a/arch/arm/mach-davinci/clock.h > +++ b/arch/arm/mach-davinci/clock.h > @@ -69,9 +69,9 @@ struct clk { > const char *name; > unsigned long rate; > u8 usecount; > - u8 flags; > u8 lpsc; > u8 psc_ctlr; > + u32 flags; > struct clk *parent; > struct pll_data *pll_data; > u32 div_reg; > @@ -79,7 +79,7 @@ struct clk { > int (*round_rate) (struct clk *clk, unsigned long rate); > }; > > -/* Clock flags */ > +/* Clock flags: SoC-specific flags start at BIT(16) */ > #define ALWAYS_ENABLED BIT(1) > #define CLK_PSC BIT(2) > #define PSC_DSP BIT(3) /* PSC uses DSP domain, not ARM */ > diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c > index 192d719..4123ea5 100644 > --- a/arch/arm/mach-davinci/da850.c > +++ b/arch/arm/mach-davinci/da850.c > @@ -30,12 +30,17 @@ > #include "clock.h" > #include "mux.h" > > +/* SoC specific clock flags */ > +#define DA850_CLK_ASYNC3 BIT(16) > + > #define DA850_PLL1_BASE 0x01e1a000 > #define DA850_TIMER64P2_BASE 0x01f0c000 > #define DA850_TIMER64P3_BASE 0x01f0d000 > > #define DA850_REF_FREQ 24000000 > > +#define CFGCHIP3_ASYNC3_CLKSRC BIT(4) > + > static struct pll_data pll0_data = { > .num = 1, > .phys_base = DA8XX_PLL0_BASE, > @@ -232,6 +237,7 @@ static struct clk uart1_clk = { > .name = "uart1", > .parent = &pll0_sysclk2, > .lpsc = DA8XX_LPSC1_UART1, > + .flags = DA850_CLK_ASYNC3, > .psc_ctlr = 1, > }; > > @@ -239,6 +245,7 @@ static struct clk uart2_clk = { > .name = "uart2", > .parent = &pll0_sysclk2, > .lpsc = DA8XX_LPSC1_UART2, > + .flags = DA850_CLK_ASYNC3, > .psc_ctlr = 1, > }; > > @@ -790,6 +797,36 @@ static struct davinci_timer_info da850_timer_info = { > .clocksource_id = T0_TOP, > }; > > +#ifdef CONFIG_CPU_FREQ
How about leave this without an #ifdef, and make da850_init() have the #ifdef so it is always called on boot. BTW, is there a reason to not have the CPUfreq settings be the default? > +static void da850_set_async3_src(int pllnum) > +{ > + struct clk *clk, *newparent = pllnum ? &pll1_sysclk2 : &pll0_sysclk2; > + struct davinci_clk *c; > + unsigned int v; > + int ret; > + > + for (c = da850_clks; c->lk.clk; c++) { > + clk = c->lk.clk; > + if (clk->flags & DA850_CLK_ASYNC3) { > + ret = clk_set_parent(clk, newparent); > + WARN(ret, "DA850: unable to re-parent clock %s", > + clk->name); > + } > + } > + > + v = __raw_readl(IO_ADDRESS(DA8XX_CFGCHIP3_REG)); > + if (pllnum) > + v |= CFGCHIP3_ASYNC3_CLKSRC; > + else > + v &= ~CFGCHIP3_ASYNC3_CLKSRC; > + __raw_writel(v, IO_ADDRESS(DA8XX_CFGCHIP3_REG)); We're moving to getting rid of IO_ADDRESS() macro. Instead, define the *_REG values as offsets from the base, ioremap() the base address and then use read*/write* to access using 'base + offset' values. You'll probably want to ioremap() in init instead of each time, but you can make that call. > +} > +#else > +static void da850_set_async3_src(int pllnum) > +{ > +} > +#endif > + > static struct davinci_soc_info davinci_soc_info_da850 = { > .io_desc = da850_io_desc, > .io_desc_num = ARRAY_SIZE(da850_io_desc), > @@ -817,4 +854,6 @@ static struct davinci_soc_info davinci_soc_info_da850 = { > void __init da850_init(void) > { > davinci_common_init(&davinci_soc_info_da850); > + > + da850_set_async3_src(1); > } > diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h > b/arch/arm/mach-davinci/include/mach/da8xx.h > index d4095d0..e3eb953 100644 > --- a/arch/arm/mach-davinci/include/mach/da8xx.h > +++ b/arch/arm/mach-davinci/include/mach/da8xx.h > @@ -30,6 +30,7 @@ > #define DA8XX_CP_INTC_VIRT (IO_VIRT - DA8XX_CP_INTC_SIZE - SZ_4K) > > #define DA8XX_BOOT_CFG_BASE (IO_PHYS + 0x14000) > +#define DA8XX_CFGCHIP3_REG (DA8XX_BOOT_CFG_BASE + 0x188) > > #define DA8XX_PSC0_BASE 0x01c10000 > #define DA8XX_PLL0_BASE 0x01c11000 _______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source