--- zzzz-none-000/linux-4.4.271/arch/mips/kernel/genex.S 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/arch/mips/kernel/genex.S 2023-04-19 10:22:28.000000000 +0000 @@ -53,7 +53,7 @@ */ NESTED(except_vec3_r4000, 0, sp) .set push - .set arch=r4000 + .set mips64r2 .set noat mfc0 k1, CP0_CAUSE li k0, 31<<2 @@ -274,6 +274,9 @@ .set push .set noreorder PTR_LA v1, except_vec_vi_handler +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + move a0, sp +#endif /*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ FEXPORT(except_vec_vi_lui) lui v0, 0 /* Patched */ jr v1 @@ -364,7 +367,7 @@ ejtag_return: MFC0 k0, CP0_DESAVE - .set mips32 + .set mips64r2 deret .set pop END(ejtag_debug_handler) @@ -387,11 +390,26 @@ * unconditional jump to this vector. */ NESTED(except_vec_nmi, 0, sp) +#ifdef CONFIG_QCA_NMI_RESERVE + /* + * The following code will be linked in the kseg0 (0x8xxx_xxxx) range. + * However, it will get executed from kseg2 (0xCxxx_xxxx) range. Hence, + * this has to be position independent. + */ + MTC0 k0, CP0_DESAVE /* Save k0 for nmi_handler */ + la k0, nmi_handler + j k0 + nop +#else j nmi_handler #ifdef CONFIG_CPU_MICROMIPS nop #endif +#endif END(except_vec_nmi) +#ifdef CONFIG_QCA_NMI_RESERVE +EXPORT(except_vec_nmi_end) +#endif __FINIT @@ -408,6 +426,9 @@ and k0, k0, k1 mtc0 k0, CP0_STATUS _ehb +#ifdef CONFIG_QCA_NMI_RESERVE + MFC0 k0, CP0_DESAVE /* Restore k0 saved by except_vec_nmi */ +#endif SAVE_ALL move a0, sp jal nmi_exception_handler @@ -433,7 +454,7 @@ TRACE_IRQS_OFF .set push /* gas fails to assemble cfc1 for some archs (octeon).*/ \ - .set mips1 + .set mips64r2 SET_HARDFLOAT cfc1 a1, fcr31 .set pop @@ -601,7 +622,7 @@ ori k1, _THREAD_MASK xori k1, _THREAD_MASK LONG_L v1, TI_TP_VALUE(k1) - .set arch=r4000 + .set mips64r2 eret .set mips0 #endif