Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 296185ef authored by Paolo Pisati's avatar Paolo Pisati Committed by Greg Kroah-Hartman
Browse files

m68k: amiga: Turn off Warp1260 interrupts during boot

commit 1d8491d3e726984343dd8c3cdbe2f2b47cfdd928 upstream.

On an Amiga 1200 equipped with a Warp1260 accelerator, an interrupt
storm coming from the accelerator board causes the machine to crash in
local_irq_enable() or auto_irq_enable().  Disabling interrupts for the
Warp1260 in amiga_parse_bootinfo() fixes the problem.

Link: https://lore.kernel.org/r/ZkjwzVwYeQtyAPrL@amaterasu.local


Cc: stable <stable@kernel.org>
Signed-off-by: default avatarPaolo Pisati <p.pisati@gmail.com>
Reviewed-by: default avatarMichael Schmitz <schmitzmic@gmail.com>
Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/20240601153254.186225-1-p.pisati@gmail.com


Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 13b5f3ee
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -181,6 +181,15 @@ int __init amiga_parse_bootinfo(const struct bi_record *record)
			dev->slotsize = be16_to_cpu(cd->cd_SlotSize);
			dev->boardaddr = be32_to_cpu(cd->cd_BoardAddr);
			dev->boardsize = be32_to_cpu(cd->cd_BoardSize);

			/* CS-LAB Warp 1260 workaround */
			if (be16_to_cpu(dev->rom.er_Manufacturer) == ZORRO_MANUF(ZORRO_PROD_CSLAB_WARP_1260) &&
			    dev->rom.er_Product == ZORRO_PROD(ZORRO_PROD_CSLAB_WARP_1260)) {

				/* turn off all interrupts */
				pr_info("Warp 1260 card detected: applying interrupt storm workaround\n");
				*(uint32_t *)(dev->boardaddr + 0x1000) = 0xfff;
			}
		} else
			pr_warn("amiga_parse_bootinfo: too many AutoConfig devices\n");
#endif /* CONFIG_ZORRO */
+3 −0
Original line number Diff line number Diff line
@@ -449,6 +449,9 @@
#define  ZORRO_PROD_VMC_ISDN_BLASTER_Z2				ZORRO_ID(VMC, 0x01, 0)
#define  ZORRO_PROD_VMC_HYPERCOM_4				ZORRO_ID(VMC, 0x02, 0)

#define ZORRO_MANUF_CSLAB					0x1400
#define  ZORRO_PROD_CSLAB_WARP_1260				ZORRO_ID(CSLAB, 0x65, 0)

#define ZORRO_MANUF_INFORMATION					0x157C
#define  ZORRO_PROD_INFORMATION_ISDN_ENGINE_I			ZORRO_ID(INFORMATION, 0x64, 0)