Hi Peng,

On 13/04/2017 05:05, Peng Fan wrote:

>> Anyway, it looks to me wrong to fix this in i.MX code, as this must be fixed 
>> for
>> all Cortex-A7. It should be fixed in general ARM code.
>>
>> And Andre has already sent patches for this (at least for sunxi), but with 
>> the
>> opposite rule (default is set if not specific requested).
> 
> Thanks for correcting me. I see Andre's patch
> https://lists.denx.de/pipermail/u-boot/2017-February/279918.html
> 
> It only handles sunxi platform. If we need fix i.MX A7 cores, do you prefer I 
> set the SMP bit in s_init for i.MX6UL/7?
> Or you prefer this should be handled by common ARM code?

As far as I understand, this issue is common to all A7 cores ==> fix
should be in common ARM code.

Best regards,
Stefano

> I do not see code the detect A7/A9 in U-Boot now.
> 
> Thanks,
> Peng.
>>
>> Regards,
>> Stefano
>>
>>> Signed-off-by: Peng Fan <peng....@nxp.com>
>>> Signed-off-by: Ye Li <ye...@nxp.com>
>>> Cc: Stefano Babic <sba...@denx.de>
>>> ---
>>>  arch/arm/cpu/armv7/mx7/soc.c |  7 -------
>>> arch/arm/imx-common/cache.c  | 42
>>> ++++++++++++++++++++++++++++++++++++++++++
>>>  2 files changed, 42 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/arch/arm/cpu/armv7/mx7/soc.c
>>> b/arch/arm/cpu/armv7/mx7/soc.c index 8422f24..b847cf8 100644
>>> --- a/arch/arm/cpu/armv7/mx7/soc.c
>>> +++ b/arch/arm/cpu/armv7/mx7/soc.c
>>> @@ -446,13 +446,6 @@ int mmc_get_env_dev(void)
>>>
>>>  void s_init(void)
>>>  {
>>> -#if !defined CONFIG_SPL_BUILD
>>> -   /* Enable SMP mode for CPU0, by setting bit 6 of Auxiliary Ctl reg */
>>> -   asm volatile(
>>> -                   "mrc p15, 0, r0, c1, c0, 1\n"
>>> -                   "orr r0, r0, #1 << 6\n"
>>> -                   "mcr p15, 0, r0, c1, c0, 1\n");
>>> -#endif
>>>     /* clock configuration. */
>>>     clock_init();
>>>
>>> diff --git a/arch/arm/imx-common/cache.c b/arch/arm/imx-common/cache.c
>>> index 1c4a9a2..ed17f9e 100644
>>> --- a/arch/arm/imx-common/cache.c
>>> +++ b/arch/arm/imx-common/cache.c
>>> @@ -10,6 +10,34 @@
>>>  #include <asm/io.h>
>>>  #include <asm/imx-common/sys_proto.h>
>>>
>>> +static void enable_ca7_smp(void)
>>> +{
>>> +   uint32_t val;
>>> +
>>> +   /* Read MIDR */
>>> +   asm volatile ("mrc p15, 0, %0, c0, c0, 0\r\n" : "=r"(val));
>>> +   val = (val >> 4);
>>> +   val &= 0xfff;
>>> +
>>> +   /* Only set the SMP for Cortex A7 */
>>> +   if (val == 0xC07) {
>>> +           /* Read auxiliary control register */
>>> +           asm volatile ("mrc p15, 0, %0, c1, c0, 1\r\n" : "=r"(val));
>>> +
>>> +           if (val & (1 << 6))
>>> +                   return;
>>> +
>>> +           /* Enable SMP */
>>> +           val |= (1 << 6);
>>> +
>>> +           /* Write auxiliary control register */
>>> +           asm volatile ("mcr p15, 0, %0, c1, c0, 1\r\n" : : "r"(val));
>>> +
>>> +           DSB;
>>> +           ISB;
>>> +   }
>>> +}
>>> +
>>>  #ifndef CONFIG_SYS_DCACHE_OFF
>>>  void enable_caches(void)
>>>  {
>>> @@ -18,6 +46,9 @@ void enable_caches(void)  #else
>>>     enum dcache_option option = DCACHE_WRITEBACK;  #endif
>>> +   /* Set ACTLR.SMP bit for Cortex-A7 */
>>> +   enable_ca7_smp();
>>> +
>>>     /* Avoid random hang when download by usb */
>>>     invalidate_dcache_all();
>>>
>>> @@ -32,6 +63,17 @@ void enable_caches(void)
>>>                                     IRAM_SIZE,
>>>                                     option);
>>>  }
>>> +#else
>>> +void enable_caches(void)
>>> +{
>>> +   /*
>>> +    * Set ACTLR.SMP bit for Cortex-A7, even the
>>> +    * caches not enabled.
>>> +    */
>>> +   enable_ca7_smp();
>>> +
>>> +   puts("WARNING: Caches not enabled\n"); }
>>>  #endif
>>>
>>>  #ifndef CONFIG_SYS_L2CACHE_OFF
>>>
>>
>>
>> --
>> ============================================================
>> =========
>> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
>> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>> Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de
>> ============================================================
>> =========

-- 
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de
=====================================================================
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to