[U-Boot] [PATCH] arm: re-implement proper ISB instruction for ARMv7-A

Ziyuan Xu xzy.xu at rock-chips.com
Fri Jul 29 01:34:09 CEST 2016


Hi Tom,

On 2016年07月29日 06:15, Tom Rini wrote:
> On Thu, Jul 28, 2016 at 07:03:17PM +0800, Chen-Yu Tsai wrote:
>> Hi,
>>
>> On Thu, Jul 28, 2016 at 6:13 PM, Ziyuan Xu <xzy.xu at rock-chips.com> wrote:
>>> For ARMv7-A architecture, the valid ISB instruction is asm volatile("isb").
>>>
>>> This patch fixes the U-Boot was stuck in invalidate_dcache_all() before
>>> booting linux kernel, which occurred on rk3288-base development board
>>> such as evb-rk3288, rock2-rk3288. And something output via console like:
>>>
>>> => bootz 0x2000000
>>> 0x02000000
>>>     ramdisk start = 0x00000000, ramdisk end = 0x00000000
>>>     Continuing to boot without FDT
>>>     Initial value for argc=3
>>>     Final value for argc=3
>>>     using: ATAGS
>>>
>>>     Starting kernel ...
>>>
>>> Linux kernel exactly the same way(see arch/arm/include/asm/barrier.h).
>>>
>>> Signed-off-by: Ziyuan Xu <xzy.xu at rock-chips.com>
>>> ---
>>>
>>>   arch/arm/include/asm/system.h | 6 ++++--
>>>   1 file changed, 4 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
>>> index 2bdc0be..12d4ba0 100644
>>> --- a/arch/arm/include/asm/system.h
>>> +++ b/arch/arm/include/asm/system.h
>>> @@ -227,13 +227,15 @@ void __noreturn psci_system_reset(bool smc);
>>>    */
>>>   void save_boot_params_ret(void);
>>>
>>> -#define isb() __asm__ __volatile__ ("" : : : "memory")
>>> -
>>>   #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
>>>
>>>   #ifdef __ARM_ARCH_7A__
>>> +#define isb() __asm__ __volatile__ ("isb" : : : "memory")
>>> +
>>>   #define wfi() __asm__ __volatile__ ("wfi" : : : "memory")
>>>   #else
>>> +#define isb() __asm__ __volatile__ ("" : : : "memory")
>>> +
>>>   #define wfi()
>>>   #endif
>>>
>> arch/arm/include/asm/barriers.h already has a proper set of
>> ISB/DSB macros. Please consider using those instead.
> Please fix arch/arm/include/asm/system.h to use the macros found in
> barriers.h rather than have their own versions.  Thanks!

If I understand correctly, I can change into as bellow:
#define isb() ISB
How about it?
>
>
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot




More information about the U-Boot mailing list