DEC: Limit PMAX memory probing to R3k systems
authorMaciej W. Rozycki <macro@orcam.me.uk>
Fri, 4 Mar 2022 20:16:23 +0000 (20:16 +0000)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Mon, 7 Mar 2022 12:10:44 +0000 (13:10 +0100)
Recent tightening of the opcode table in binutils so as to consistently
disallow the assembly or disassembly of CP0 instructions not supported
by the processor architecture chosen has caused a regression like below:

arch/mips/dec/prom/locore.S: Assembler messages:
arch/mips/dec/prom/locore.S:29: Error: opcode not supported on this processor: r4600 (mips3) `rfe'

in a piece of code used to probe for memory with PMAX DECstation models,
which have non-REX firmware.  Those computers always have an R2000 CPU
and consequently the exception handler used in memory probing uses the
RFE instruction, which those processors use.

While adding 64-bit support this code was correctly excluded for 64-bit
configurations, however it should have also been excluded for irrelevant
32-bit configurations.  Do this now then, and only enable PMAX memory
probing for R3k systems.

Reported-by: Jan-Benedict Glaw <jbglaw@lug-owl.de>
Reported-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org # v2.6.12+
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
arch/mips/dec/prom/Makefile
arch/mips/include/asm/dec/prom.h

index d95016016b42bef365d7b8bb6348888df9e386f2..2bad87551203b2714529f7bbd38a832bf2b30a1e 100644 (file)
@@ -6,4 +6,4 @@
 
 lib-y                  += init.o memory.o cmdline.o identify.o console.o
 
-lib-$(CONFIG_32BIT)    += locore.o
+lib-$(CONFIG_CPU_R3000)        += locore.o
index 62c7dfb90e06c35afa168fa999e408f3b240004d..1e1247add1cf802b9abe3a5216b3a785f83e5988 100644 (file)
  */
 #define REX_PROM_MAGIC         0x30464354
 
-#ifdef CONFIG_64BIT
-
-#define prom_is_rex(magic)     1       /* KN04 and KN05 are REX PROMs.  */
-
-#else /* !CONFIG_64BIT */
-
-#define prom_is_rex(magic)     ((magic) == REX_PROM_MAGIC)
-
-#endif /* !CONFIG_64BIT */
-
+/* KN04 and KN05 are REX PROMs, so only do the check for R3k systems.  */
+static inline bool prom_is_rex(u32 magic)
+{
+       return !IS_ENABLED(CONFIG_CPU_R3000) || magic == REX_PROM_MAGIC;
+}
 
 /*
  * 3MIN/MAXINE PROM entry points for DS5000/1xx's, DS5000/xx's and