Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -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)