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

Commit c0abd0c7 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

powerpc/64: move default SPR recording



Move this into the early setup code, and don't iterate over CPU masks.
We don't want to call into sysfs so early from setup, and a future patch
won't initialize CPU masks by the time this is called.

Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
[mpe: Fold in incremental fix from Nick for DSCR handling]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 9bd9be00
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -45,14 +45,11 @@ void emergency_stack_init(void);
static inline void emergency_stack_init(void) { };
#endif

#ifdef CONFIG_PPC64
void record_spr_defaults(void);
#else
static inline void record_spr_defaults(void) { };
#endif

#ifdef CONFIG_PPC64
u64 ppc64_bolted_size(void);

/* Default SPR values from firmware/kexec */
extern unsigned long spr_default_dscr;
#endif

/*
+8 −0
Original line number Diff line number Diff line
@@ -254,6 +254,14 @@ static void cpu_ready_for_interrupts(void)
	get_paca()->kernel_msr = MSR_KERNEL;
}

unsigned long spr_default_dscr = 0;

void __init record_spr_defaults(void)
{
	if (early_cpu_has_feature(CPU_FTR_DSCR))
		spr_default_dscr = mfspr(SPRN_DSCR);
}

/*
 * Early initialization entry point. This is called by head.S
 * with MMU translation disabled. We rely on the "feature" of
+9 −11
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <asm/firmware.h>

#include "cacheinfo.h"
#include "setup.h"

#ifdef CONFIG_PPC64
#include <asm/paca.h>
@@ -588,21 +589,18 @@ static DEVICE_ATTR(dscr_default, 0600,

static void sysfs_create_dscr_default(void)
{
	if (cpu_has_feature(CPU_FTR_DSCR)) {
		int err = 0;
	if (cpu_has_feature(CPU_FTR_DSCR))
		err = device_create_file(cpu_subsys.dev_root, &dev_attr_dscr_default);
}

void __init record_spr_defaults(void)
{
		int cpu;

	if (cpu_has_feature(CPU_FTR_DSCR)) {
		dscr_default = mfspr(SPRN_DSCR);
		for (cpu = 0; cpu < nr_cpu_ids; cpu++)
		dscr_default = spr_default_dscr;
		for_each_possible_cpu(cpu)
			paca_ptrs[cpu]->dscr_default = dscr_default;

		err = device_create_file(cpu_subsys.dev_root, &dev_attr_dscr_default);
	}
}

#endif /* CONFIG_PPC64 */

#ifdef HAS_PPC_PMC_PA6T