[U-Boot] [PATCH 4/6] EEYNOS: Add SMDK5250 board support

Minkyu Kang promsoft at gmail.com
Fri Jan 6 02:40:40 CET 2012


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.

+#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?

Thanks.
Minkyu Kang.
-- 
from. prom.
www.promsoft.net


More information about the U-Boot mailing list