|
@@ -319,7 +319,8 @@ static char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len)
|
|
|
static void arc_chk_core_config(void)
|
|
|
{
|
|
|
struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()];
|
|
|
- int fpu_enabled;
|
|
|
+ int saved = 0, present = 0;
|
|
|
+ char *opt_nm = NULL;;
|
|
|
|
|
|
if (!cpu->extn.timer0)
|
|
|
panic("Timer0 is not present!\n");
|
|
@@ -346,17 +347,28 @@ static void arc_chk_core_config(void)
|
|
|
|
|
|
/*
|
|
|
* FP hardware/software config sanity
|
|
|
- * -If hardware contains DPFP, kernel needs to save/restore FPU state
|
|
|
+ * -If hardware present, kernel needs to save/restore FPU state
|
|
|
* -If not, it will crash trying to save/restore the non-existant regs
|
|
|
- *
|
|
|
- * (only DPDP checked since SP has no arch visible regs)
|
|
|
*/
|
|
|
- fpu_enabled = IS_ENABLED(CONFIG_ARC_FPU_SAVE_RESTORE);
|
|
|
|
|
|
- if (cpu->extn.fpu_dp && !fpu_enabled)
|
|
|
- pr_warn("CONFIG_ARC_FPU_SAVE_RESTORE needed for working apps\n");
|
|
|
- else if (!cpu->extn.fpu_dp && fpu_enabled)
|
|
|
- panic("FPU non-existent, disable CONFIG_ARC_FPU_SAVE_RESTORE\n");
|
|
|
+ if (is_isa_arcompact()) {
|
|
|
+ opt_nm = "CONFIG_ARC_FPU_SAVE_RESTORE";
|
|
|
+ saved = IS_ENABLED(CONFIG_ARC_FPU_SAVE_RESTORE);
|
|
|
+
|
|
|
+ /* only DPDP checked since SP has no arch visible regs */
|
|
|
+ present = cpu->extn.fpu_dp;
|
|
|
+ } else {
|
|
|
+ opt_nm = "CONFIG_ARC_HAS_ACCL_REGS";
|
|
|
+ saved = IS_ENABLED(CONFIG_ARC_HAS_ACCL_REGS);
|
|
|
+
|
|
|
+ /* Accumulator Low:High pair (r58:59) present if DSP MPY or FPU */
|
|
|
+ present = cpu->extn_mpy.dsp | cpu->extn.fpu_sp | cpu->extn.fpu_dp;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (present && !saved)
|
|
|
+ pr_warn("Enable %s for working apps\n", opt_nm);
|
|
|
+ else if (!present && saved)
|
|
|
+ panic("Disable %s, hardware NOT present\n", opt_nm);
|
|
|
}
|
|
|
|
|
|
/*
|