Commit 2552e2c1 authored by Vineet Gupta's avatar Vineet Gupta Committed by Greg Kroah-Hartman

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


[ Upstream commit 78f824d4 ]

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>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8cb6045e
......@@ -90,10 +90,23 @@ void __init smp_cpus_done(unsigned int max_cpus)
*/
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)
{
BUG_ON(cpu == 0);
wake_flag = cpu;
__boot_write(wake_flag, cpu);
}
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))
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)
......
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