[PATCH] ARM: S5PV210: allow clk to use clksrc as parents
Kukjin Kim
kgene.kim at samsung.com
Fri Jul 9 06:29:18 EDT 2010
MyungJoo Ham wrote:
>
Hi,
Cc'ed Ben Dooks.
> This patch allows clk in init_clocks[] and init_clocks_disable[] to use
> clksrc_clk.clk in clksrcs[].
>
> For example, clk "lcd" may need to set "sclk-fimd" as a parent if
> the div and src settting of sclk-fimd changes and a user of "lcd" wants
> to get the exact information about the rate. If "sclk-fimd" is set as a
> parent of "lcd", then the clk framework can provide the wanted
> information; otherwise, the change in "sclk-fimd" does not update "lcd"
> properly.
>
I don't think so.
This can be problem because the parent clock of LCD(FIMD) is not always
SCLK_FIMD. And LCD block is on DSYS clock domain, so the parent clock of
'lcd' should be dsys clock, not sclk_fimd.
Basically used dsys bus clock as LCD IP clock and can be used sclk_fimd or
not. So should separate them and need to separate control.
As I still saying, the CLK_GATE_IP1[0] for LCD block can gate clock of
SCLK_ACLK and SCLK_FIMD which can be source of LCD block, and
CLK_SRC_MASK0[5] can gate only SCLK_FIMD, output clock of MUX FIMD.
> To do so, we have relocated clksrcs[] and put enum indexes to clksrcs in
> order to allow clk in init_clocks[] and init_clocks_disable[] may refer
> one of clksrcs[] as its parent. (enum clksrc_refer)
>
> For example, "lcd" may set "sclk-fimd" as a parent if the following line
> replaces the line 878:
>
> .parent = &clk_hclk_dsys.clk,
>
> to
>
> .parent = &clksrcs[_clksrc_sclk_fimd],
>
> Signed-off-by: MyungJoo Ham <myungjoo.ham at samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> ---
> arch/arm/mach-s5pv210/clock.c | 986
++++++++++++++++++++++-------------------
> 1 files changed, 520 insertions(+), 466 deletions(-)
>
> diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c
> index aa2b1c5..e33c6ed 100644
> --- a/arch/arm/mach-s5pv210/clock.c
> +++ b/arch/arm/mach-s5pv210/clock.c
> @@ -264,6 +264,526 @@ static struct clksrc_clk clk_sclk_vpll = {
> .reg_src = { .reg = S5P_CLK_SRC0, .shift = 12, .size = 1 },
> };
>
And...hmm...maybe made this patch with wrong way...
> +static struct clk *clkset_uart_list[] = {
> + [6] = &clk_mout_mpll.clk,
> + [7] = &clk_mout_epll.clk,
> +};
> +
Following is from this patch...
-static struct clk *clkset_uart_list[] = {
- [6] = &clk_mout_mpll.clk,
- [7] = &clk_mout_epll.clk,
-};
-
Same? :-(
Why did you remove and add same code?
(snip)
And...see the below.
Added like below...
> +static struct clksrc_clk clksrcs[] = {
> + [_clksrc_sclk_dmc] = {
> + .clk = {
> + .name = "sclk_dmc",
> + .id = -1,
> + },
> + .sources = &clkset_group1,
> + .reg_src = { .reg = S5P_CLK_SRC6, .shift = 24, .size = 2 },
> + .reg_div = { .reg = S5P_CLK_DIV6, .shift = 28, .size = 4 },
> + },
> + [_clksrc_sclk_onenand] = {
> + .clk = {
> + .name = "sclk_onenand",
> + .id = -1,
> + },
> + .sources = &clkset_sclk_onenand,
> + .reg_src = { .reg = S5P_CLK_SRC0, .shift = 28, .size = 1 },
> + .reg_div = { .reg = S5P_CLK_DIV6, .shift = 12, .size = 3 },
> + },
(snip)
And removed like below...
> -static struct clksrc_clk clksrcs[] = {
> - {
> - .clk = {
> - .name = "sclk_dmc",
> - .id = -1,
> - },
> - .sources = &clkset_group1,
> - .reg_src = { .reg = S5P_CLK_SRC6, .shift = 24, .size = 2 },
> - .reg_div = { .reg = S5P_CLK_DIV6, .shift = 28, .size = 4 },
> - }, {
> - .clk = {
> - .name = "sclk_onenand",
> - .id = -1,
> - },
> - .sources = &clkset_sclk_onenand,
> - .reg_src = { .reg = S5P_CLK_SRC0, .shift = 28, .size = 1 },
> - .reg_div = { .reg = S5P_CLK_DIV6, .shift = 12, .size = 3 },
> - }, {
But only changed small lines not every.
Following is from my local machine.
@@ -665,7 +665,7 @@ static struct clksrc_sources clkset_group2 = {
};
static struct clksrc_clk clksrcs[] = {
- {
+ [_clksrc_sclk_dmc] = {
.clk = {
.name = "sclk_dmc",
.id = -1,
@@ -673,7 +673,8 @@ static struct clksrc_clk clksrcs[] = {
.sources = &clkset_group1,
.reg_src = { .reg = S5P_CLK_SRC6, .shift = 24, .size = 2 },
.reg_div = { .reg = S5P_CLK_DIV6, .shift = 28, .size = 4 },
- }, {
+ },
+ [_clksrc_sclk_onenand] = {
.clk = {
.name = "sclk_onenand",
.id = -1,
(snip)
Please make sure your patch has no problem before submitting.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <kgene.kim at samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
More information about the linux-arm-kernel
mailing list