Commit 78f824d4 authored by Vineet Gupta's avatar Vineet Gupta

ARCv2: smp-boot: wake_flag polling by non-Masters needs to be uncached

This is needed on HS38 cores, for setting up IO-Coherency aperture properly

The polling could perturb the caches and coherecy fabric which could be
wrong in the small window when Master is setting up IOC aperture etc
in arc_cache_init()

We do it only for ARCv2 based builds to not affect EZChip ARCompact
based platform.
Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent bf02454a
...@@ -90,10 +90,23 @@ void __init smp_cpus_done(unsigned int max_cpus) ...@@ -90,10 +90,23 @@ void __init smp_cpus_done(unsigned int max_cpus)
*/ */
static volatile int wake_flag; static volatile int wake_flag;
#ifdef CONFIG_ISA_ARCOMPACT
#define __boot_read(f) f
#define __boot_write(f, v) f = v
#else
#define __boot_read(f) arc_read_uncached_32(&f)
#define __boot_write(f, v) arc_write_uncached_32(&f, v)
#endif
static void arc_default_smp_cpu_kick(int cpu, unsigned long pc) static void arc_default_smp_cpu_kick(int cpu, unsigned long pc)
{ {
BUG_ON(cpu == 0); BUG_ON(cpu == 0);
wake_flag = cpu;
__boot_write(wake_flag, cpu);
} }
void arc_platform_smp_wait_to_boot(int cpu) void arc_platform_smp_wait_to_boot(int cpu)
...@@ -102,10 +115,10 @@ void arc_platform_smp_wait_to_boot(int cpu) ...@@ -102,10 +115,10 @@ void arc_platform_smp_wait_to_boot(int cpu)
if (IS_ENABLED(CONFIG_ARC_SMP_HALT_ON_RESET)) if (IS_ENABLED(CONFIG_ARC_SMP_HALT_ON_RESET))
return; return;
while (wake_flag != cpu) while (__boot_read(wake_flag) != cpu)
; ;
wake_flag = 0; __boot_write(wake_flag, 0);
} }
const char *arc_platform_smp_cpuinfo(void) const char *arc_platform_smp_cpuinfo(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment