]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
m68k: amiga: Turn off Warp1260 interrupts during boot
authorPaolo Pisati <p.pisati@gmail.com>
Sat, 1 Jun 2024 15:32:54 +0000 (17:32 +0200)
committerGeert Uytterhoeven <geert@linux-m68k.org>
Tue, 4 Jun 2024 06:59:58 +0000 (08:59 +0200)
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: Paolo Pisati <p.pisati@gmail.com>
Reviewed-by: Michael Schmitz <schmitzmic@gmail.com>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/20240601153254.186225-1-p.pisati@gmail.com
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
arch/m68k/amiga/config.c
include/uapi/linux/zorro_ids.h

index d4b170c861bf029b068c1d6fa9af2a98123a4419..0147130dc34e3901b03d95b05c5e4b42e38231d3 100644 (file)
@@ -180,6 +180,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 */
index 6e574d7b7d79cdfbff8adcea7e822e35295e9115..393f2ee9c042281ac93ae611790b1c1dc55bd723 100644 (file)
 #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)