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

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
...@@ -45,14 +45,11 @@ void emergency_stack_init(void); ...@@ -45,14 +45,11 @@ void emergency_stack_init(void);
static inline void emergency_stack_init(void) { }; static inline void emergency_stack_init(void) { };
#endif #endif
#ifdef CONFIG_PPC64
void record_spr_defaults(void);
#else
static inline void record_spr_defaults(void) { };
#endif
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
u64 ppc64_bolted_size(void); u64 ppc64_bolted_size(void);
/* Default SPR values from firmware/kexec */
extern unsigned long spr_default_dscr;
#endif #endif
/* /*
......
...@@ -254,6 +254,14 @@ static void cpu_ready_for_interrupts(void) ...@@ -254,6 +254,14 @@ static void cpu_ready_for_interrupts(void)
get_paca()->kernel_msr = MSR_KERNEL; 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 * Early initialization entry point. This is called by head.S
* with MMU translation disabled. We rely on the "feature" of * with MMU translation disabled. We rely on the "feature" of
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <asm/firmware.h> #include <asm/firmware.h>
#include "cacheinfo.h" #include "cacheinfo.h"
#include "setup.h"
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
#include <asm/paca.h> #include <asm/paca.h>
...@@ -588,21 +589,18 @@ static DEVICE_ATTR(dscr_default, 0600, ...@@ -588,21 +589,18 @@ static DEVICE_ATTR(dscr_default, 0600,
static void sysfs_create_dscr_default(void) static void sysfs_create_dscr_default(void)
{ {
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)) { if (cpu_has_feature(CPU_FTR_DSCR)) {
dscr_default = mfspr(SPRN_DSCR); int err = 0;
for (cpu = 0; cpu < nr_cpu_ids; cpu++) int cpu;
dscr_default = spr_default_dscr;
for_each_possible_cpu(cpu)
paca_ptrs[cpu]->dscr_default = dscr_default; paca_ptrs[cpu]->dscr_default = dscr_default;
err = device_create_file(cpu_subsys.dev_root, &dev_attr_dscr_default);
} }
} }
#endif /* CONFIG_PPC64 */ #endif /* CONFIG_PPC64 */
#ifdef HAS_PPC_PMC_PA6T #ifdef HAS_PPC_PMC_PA6T
......
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