[U-Boot] [PATCH 4/6] EEYNOS: Add SMDK5250 board support
Chander Kashyap
chander.kashyap at linaro.org
Fri Jan 6 13:50:03 CET 2012
Dear Minkyu Kang,
On 6 January 2012 07:10, Minkyu Kang <promsoft at gmail.com> wrote:
> Dear Chander Kashyap,
>
> On 5 January 2012 19:31, Chander Kashyap <chander.kashyap at linaro.org> wrote:
>> 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 ?
>>
>
> Using same clock's name is acceptable.
>
> But exynos4 clock structure and exynos5 clock structure are different.
> I requested removing all ifdefs in your patch.
> So, I will not allow such cases.
In that case S5PC1XX approach is suitable.
>
> +#ifdef CONFIG_EXYNOS4
> +#include<asm/arch/clock_exynos4.h>
> +#elif defined CONFIG_EXYNOS5
> +#include<asm/arch/clock_exynos5.h>
> #endif
>
> Then, we should do like this,
>
> struct exynos4_clock *clk =
> (struct exynos4_clock *)samsung_get_base_clock();
>
> struct exynos5_clock *clk =
> (struct exynos5_clock *)samsung_get_base_clock();
>
> how solve it?
>
> And you should consider variation by cpu revision.
> If Exynos5 revision1 is different from Exynos4 revision1, then?
>
I will resend patche based on s5pc1xx approch.
> Thanks.
> Minkyu Kang.
> --
> from. prom.
> www.promsoft.net
--
with warm regards,
Chander Kashyap
More information about the U-Boot
mailing list