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

Tom Rini trini at konsulko.com
Sun Jul 31 16:27:07 CEST 2016


On Sun, Jul 31, 2016 at 11:59:19AM +0800, Ziyuan Xu wrote:
> Hi Tom,
> 
> 
> On 2016年07月29日 09:12, Tom Rini wrote:
> >On Fri, Jul 29, 2016 at 09:06:29AM +0800, Ziyuan Xu wrote:
> >>Hi Tom,
> >>
> >>On 2016年07月29日 08:34, Tom Rini wrote:
> >>>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.
> >>As I mentioned before, arch/arm/include/asm/barriers.h defined ISB
> >>macro.  If I only want to fix the issue which I hit on rk3288 board,
> >>I just use ISB in arch/arm/include/asm/system.h::set_cr() instead of
> >>isb(). But isb() had been invoked in some places.
> >>
> >>I can't verify integrallty after all revision, it involve some
> >>boards and feature. But this does fix for rk3288, if you agree with
> >>me, could you apply it provisionally?:-)
> >I would really like to try and fix the other possibly latent issues that
> >we have by not calling a real ISB.  Please try moving towards all places
> >that need an isb calling the correct one from barriers.h and giving it a
> >spin on the hardware you have available.
> I used ISB instead of isb(), everything works sane on my rockchip
> rk3288 boards.:-)
> Will you send a patch to fix it and other possibly latent issues? Or
> apply this temporarily?

Please send a patch of all of the changes you did, thanks!

-- 
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/20160731/c879eec1/attachment.sig>


More information about the U-Boot mailing list