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

Tom Rini trini at konsulko.com
Fri Jul 29 02:34:37 CEST 2016


On Fri, Jul 29, 2016 at 07:34:09AM +0800, Ziyuan Xu wrote:
> 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?

Well, I'd rather not have ISB and isb, just ISB, which means we might
have to fix other places too.  If that starts looking too huge, we can
do this in steps and just do what you suggested for now and for next
release move everything over.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160728/33977d6f/attachment.sig>


More information about the U-Boot mailing list