Question about Raspberry Pi bspstarthooks.c - potential patch

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Jul 5 05:43:26 UTC 2021


On 02/07/2021 21:07, Alan Cudmore wrote:
> I tried to implement the deprecated cp15 ARMv6 data sync and
> instruction sync barriers in the code below. I'm not sure if I got it
> right.
> The samples run on the single core models, but they also run without
> the sync instructions (the commented out code).
> 
> For the conditional code, I chose the __ARM_ARCH_6KZ__ define, since
> it is set by the arch switch the Pi 1 BSP uses. Not all ARMv6 models
> have the CP15 VBAR, so in the unlikely event we added an even older
> ARMv6 it would break. I can change it to __ARM_ARCH == 6 if that is
> preferred.
> 
> At this point, my questions are:
> 1. Is the define OK?

Yes, the define is good.

> 2. Include the sync barriers for ARMv6 or not?
> 3. If we keep the sync barriers, are they good enough, or do they need
> more work?

I would keep the barriers. It seems the opcodes are the right ones:

/* CP15DSB, Data Synchronization Barrier System instruction */

static inline void _AArch32_Write_cp15dsb( uint32_t value )
{
   __asm__ volatile (
     "mcr p15, 0, %0, c7, c10, 4" : : "r" ( value ) : "memory"
   );
}

/* CP15ISB, Instruction Synchronization Barrier System instruction */

static inline void _AArch32_Write_cp15isb( uint32_t value )
{
   __asm__ volatile (
     "mcr p15, 0, %0, c7, c5, 4" : : "r" ( value ) : "memory"
   );
}

> 
> Thanks,
> Alan
> 
> Patch:
> 
> diff --git a/bsps/arm/shared/start/start.S b/bsps/arm/shared/start/start.S
> index 698495d32e..bb8ad24e96 100644
> --- a/bsps/arm/shared/start/start.S
> +++ b/bsps/arm/shared/start/start.S
> @@ -482,16 +482,26 @@ bsp_start_hook_0_done:
> 
>   .Lvector_table_copy_done:
> 
> -#if (__ARM_ARCH >= 7 && __ARM_ARCH_PROFILE == 'A') || __ARM_ARCH >= 8
>          /*
>           * This code path is only executed by the primary processor.  Set the
>           * VBAR to the normal vector table.  For secondary processors, this is
>           * done by bsp_start_hook_0().
>           */
> +#if (__ARM_ARCH >= 7 && __ARM_ARCH_PROFILE == 'A') || __ARM_ARCH >= 8
>          ldr     r0, =bsp_vector_table_begin
>          dsb
>          mcr     p15, 0, r0, c12, c0, 0
>          isb
> +#elif defined __ARM_ARCH_6KZ__
> +/*
> +**     ldr     r0, =bsp_vector_table_begin
> +**     mcr     p15, 0, r0, c12, c0, 0
> +*/
> +        mov     r1, #0
> +        ldr     r0, =bsp_vector_table_begin
> +        mcr     p15, 0, r1, c7, c10, 4      /* DataSync */
> +        mcr     p15, 0, r0, c12, c0, 0      /* Load VBAR */
> +        mcr     p15, 0, r1, c7, c5, 4       /* Flush Prefetch */
>   #endif
> 
>          SWITCH_FROM_ARM_TO_THUMB        r3
> 
> On Thu, Jul 1, 2021 at 10:02 AM Sebastian Huber
> <sebastian.huber at embedded-brains.de> wrote:
>>
>> On 01/07/2021 15:43, Alan Cudmore wrote:
>>> The define works, but Armv6 does not implement dsb and isb.
>>
>> Ok, I think there are some (now deprecated) CP15 registers for dsb and isb.
>>
>>> I created a separate #if block for Armv6 without the dsb and isb
>>> instructions and it seems to work on the Raspberry Pi Zero.
>>> Do you think the equivalent synchronization operations are necessary
>>> here? If so, I can research and test them. I found some references on
>>> Raspberry Pi forums that I can follow (also had links to the ARM
>>> manuals)
>>>
>>> Also, for the #if blocks, would you prefer this style:
>>> #if (7A or 8)
>>> ..
>>> #else if (6)
>>> ..
>>> #endif
>>
>> Yes, this would be good.
>>
>> --
>> embedded brains GmbH
>> Herr Sebastian HUBER
>> Dornierstr. 4
>> 82178 Puchheim
>> Germany
>> email: sebastian.huber at embedded-brains.de
>> phone: +49-89-18 94 741 - 16
>> fax:   +49-89-18 94 741 - 08
>>
>> Registergericht: Amtsgericht München
>> Registernummer: HRB 157899
>> Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
>> Unsere Datenschutzerklärung finden Sie hier:
>> https://embedded-brains.de/datenschutzerklaerung/

-- 
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/


More information about the devel mailing list