__setup("nowait", wait_disable);
 
+static int __cpuinitdata mips_fpu_disabled;
+
+static int __init fpu_disable(char *s)
+{
+       cpu_data[0].options &= ~MIPS_CPU_FPU;
+       mips_fpu_disabled = 1;
+
+       return 1;
+}
+
+__setup("nofpu", fpu_disable);
+
+int __cpuinitdata mips_dsp_disabled;
+
+static int __init dsp_disable(char *s)
+{
+       cpu_data[0].ases &= ~MIPS_ASE_DSP;
+       mips_dsp_disabled = 1;
+
+       return 1;
+}
+
+__setup("nodsp", dsp_disable);
+
 void __init check_wait(void)
 {
        struct cpuinfo_mips *c = ¤t_cpu_data;
         */
        BUG_ON(current_cpu_type() != c->cputype);
 
+       if (mips_fpu_disabled)
+               c->options &= ~MIPS_CPU_FPU;
+
+       if (mips_dsp_disabled)
+               c->ases &= ~MIPS_ASE_DSP;
+
        if (c->options & MIPS_CPU_FPU) {
                c->fpu_id = cpu_get_fpu_id();
 
 
        plat_smp_setup();
 }
 
-static int __init fpu_disable(char *s)
-{
-       int i;
-
-       for (i = 0; i < NR_CPUS; i++)
-               cpu_data[i].options &= ~MIPS_CPU_FPU;
-
-       return 1;
-}
-
-__setup("nofpu", fpu_disable);
-
-static int __init dsp_disable(char *s)
-{
-       cpu_data[0].ases &= ~MIPS_ASE_DSP;
-
-       return 1;
-}
-
-__setup("nodsp", dsp_disable);
-
 unsigned long kernelsp[NR_CPUS];
 unsigned long fw_arg0, fw_arg1, fw_arg2, fw_arg3;