[U-Boot] [PATCH 4/6] EEYNOS: Add SMDK5250 board support
Chander Kashyap
chander.kashyap at linaro.org
Thu Jan 5 11:31:09 CET 2012
Hi Minkyu Kang,
On 5 January 2012 12:13, Minkyu Kang <promsoft at gmail.com> wrote:
> Dear Chander Kashyap,
>
> On 27 December 2011 17:48, Chander Kashyap <chander.kashyap at linaro.org> wrote:
>>>> > Torsten Koschorrek <koschorrek at synertronixx.de>
>>>> > scb9328 ARM920T (i.MXL)
>>>> > diff --git a/arch/arm/cpu/armv7/exynos/clock.c b/arch/arm/cpu/armv7/exynos/clock.c
>>>> > index b101f96..88e2fc0 100644
>>>> > --- a/arch/arm/cpu/armv7/exynos/clock.c
>>>> > +++ b/arch/arm/cpu/armv7/exynos/clock.c
>>>> > @@ -125,10 +125,14 @@ static unsigned long exynos_get_pwm_clk(void)
>>>> >
>>>> > if (s5p_get_cpu_rev() == 0) {
>>>> > /*
>>>> > - * CLK_SRC_PERIL0
>>>> > + * CLK_SRC_{PERIL0 | PERIC0}
>>>> > * PWM_SEL [27:24]
>>>> > */
>>>> > +#ifdef CONFIG_EXYNOS5
>>>> > + sel = readl(&clk->src_peric0);
>>>> > +#else
>>>> > sel = readl(&clk->src_peril0);
>>>> > +#endif
>>>>
>>>> NAK.
>>>> We don't allow to using ifdef for separating SoCs.
>>>> Please refer s5pc1xx case for solve it.
>>>> This comment apply to this patch globally.
>>>> Please remove '#ifdef CONFIG_EXYNOS5'.
>>>>
>>> I have tried to reuse the code. It is possible to remove
>>> #ifdef CONFIG_EXYNOS5' in clock.c with cpu_is_s5pcXXX check.
>>> Is it a acceptable solution? Or is it necessary to write SoC specific function
>>> in clock.c as done in case of s5pc1xx/clock.c.
>>>
>>> Please Advice
>> Removing CONFIG_EXYNOS5 and following s5pc1xx case will not allow to
>> reuse the code in clock.c.
>> What is the technical hindrance of not using ifdefs?
>
> No need to reuse the code, if SoCs are different.
> If need, please separate the functions.
Yes, though SoC's are different, the functionality in clock.c is
similar. The only difference is the clock name in the clock structure
for Exynos4 and Exynos5 but the functionality is exactly same in
clock.c. To accommodate this change in clock name #ifdef is used.
Following is the function in clock .c which uses #ifdef to accommodate
the different clock name in SoC's.
static unsigned long exynos_get_pwm_clk(void)
{
struct exynos_clock *clk =
(struct exynos_clock *)samsung_get_base_clock();
unsigned long pclk, sclk;
unsigned int sel;
unsigned int ratio;
if (s5p_get_cpu_rev() == 0) {
/*
* CLK_SRC_{PERIL0 | PERIC0}
* PWM_SEL [27:24]
*/
#ifdef CONFIG_EXYNOS5
sel = readl(&clk->src_peric0);
#else
sel = readl(&clk->src_peril0);
#endif
sel = (sel >> 24) & 0xf;
if (sel == 0x6)
sclk = get_pll_clk(MPLL);
else if (sel == 0x7)
sclk = get_pll_clk(EPLL);
else if (sel == 0x8)
sclk = get_pll_clk(VPLL);
else
return 0;
/*
* CLK_DIV_{PERIL3 | PERIC3}
* PWM_RATIO [3:0]
*/
#ifdef CONFIG_EXYNOS5
ratio = readl(&clk->div_peric3);
#else
ratio = readl(&clk->div_peril3);
#endif
ratio = ratio & 0xf;
} else if (s5p_get_cpu_rev() == 1) {
sclk = get_pll_clk(MPLL);
ratio = 8;
} else
return 0;
pclk = sclk / (ratio + 1);
return pclk;
}
As listed above, the exynos_get_pwm_clk(() function is fully reusable
for both Exynos4 and Exynos5. The #ifdef was used to get around the
different clock names of Exynos4 and Exynos5.
Another option here could be, that the differing clock name
(src_peril0 for Exynos4 and src_peric0 for Exynos5) is resolved by
change the src_peric0 to src_peril0 for Exynos5, and clearly
commenting the reason for the deviation from the user manual. Would
this approach be acceptable ?
Thanks for your comments. Please let know your opinion about the
points listed in this email.
>
> like this,
>
> unsigned long get_arm_clk(void)
> {
> if (cpu_is_s5pc110())
> return s5pc110_get_arm_clk();
> else
> return s5pc100_get_arm_clk();
> }
>
> Thanks.
> Minkyu Kang
> --
> from. prom.
> www.promsoft.net
--
with warm regards,
Chander Kashyap
More information about the U-Boot
mailing list