[U-Boot] [PATCH v3 06/11] arm:reset: call the reset_misc() before the cpu reset

Przemyslaw Marczak
2014-07-01T14:36:47Z

Hello Minkyu,

On 06/27/2014 01:34 PM, Przemyslaw Marczak wrote:
> On 06/27/2014 11:40 AM, Minkyu Kang wrote:
>> Dear Przemyslaw Marczak,
>>
>> On 26/06/14 23:15, Przemyslaw Marczak wrote:
>>> On an Odroid U3 board, the SOC is unable to reset the eMMC card
>>> in the DWMMC mode by the cpu software reset. Manual reset of the card
>>> by switching proper gpio pin - fixes this issue.
>>>
>>> Such solution needs to add a call to pre reset function.
>>> This is done by the reset_misc() function, which is called before
>>> reset_cpu().
>>> The function reset_misc() is a weak function.
>>>
>>> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
>>> Cc: Minkyu Kang <mk7.kang@samsung.com>
>>> Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
>>> Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
>>> Cc: Tom Rini <trini@ti.com>
>>> ---
>>> arch/arm/lib/reset.c | 7 +++++++
>>> include/common.h | 1 +
>>> 2 files changed, 8 insertions(+)
>>>
>>> diff --git a/arch/arm/lib/reset.c b/arch/arm/lib/reset.c
>>> index 7a03580..3b39466 100644
>>> --- a/arch/arm/lib/reset.c
>>> +++ b/arch/arm/lib/reset.c
>>> @@ -23,6 +23,11 @@
>>>
>>> #include <common.h>
>>>
>>> +void __reset_misc(void) {}
>>> +
>>> +void reset_misc(void)
>>> + __attribute((weak, alias("__reset_misc")));
>>> +
>>> int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const
>>> argv[])
>>> {
>>> puts ("resetting ...\n");
>>> @@ -30,6 +35,8 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc,
>>> char * const argv[])
>>> udelay (50000); /* wait 50 ms */
>>>
>>> disable_interrupts();
>>> +
>>> + reset_misc();
>>> reset_cpu(0);
>>>
>>> /*NOTREACHED*/
>>> diff --git a/include/common.h b/include/common.h
>>> index 232136c..04bab78 100644
>>> --- a/include/common.h
>>> +++ b/include/common.h
>>> @@ -629,6 +629,7 @@ int checkicache (void);
>>> int checkdcache (void);
>>> void upmconfig (unsigned int, unsigned int *, unsigned int);
>>> ulong get_tbclk (void);
>>> +void reset_misc (void);
>>> void reset_cpu (ulong addr);
>>> #if defined (CONFIG_OF_LIBFDT) && defined (CONFIG_OF_BOARD_SETUP)
>>> void ft_cpu_setup(void *blob, bd_t *bd);
>>>
>>
>> I'm not sure that we really need to add this function to arm common.
>> We can do this in reset_cpu (arch/arm/cpu/armv7/exynos/soc.c).
>> But if other SoCs also need to add such things then, it can be added
>> as arm common.
>>
>> Thanks,
>> Minkyu Kang.
>>
>
> No one used this before, so probably better is to move it into exynos
> soc.c code.
>
> Thank you,

I'm working on a next patch set version. And the idea with calling
reset_misc() from soc.c is quite bad. Function reset_cpu() is actually
dedicated only for cpu software reset - as its name suggest.
So I prefer leave the reset_misc call inside do_reset().

Thanks,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com