···730730731731config SPARSE_IRQ732732 def_bool y733733- depends on SUPERH32 && !SH_DREAMCAST && !SH_HIGHLANDER && \734734- !SH_RTS7751R2D733733+ depends on SUPERH32 && !SH_HIGHLANDER && !SH_RTS7751R2D735734 help736735 This enables support for sparse irqs. This is useful in general737736 as most CPUs have a fairly sparse array of IRQ vectors, which
+27
arch/sh/boards/mach-dreamcast/irq.c
···135135 /* Not reached */136136 return irq;137137}138138+139139+void systemasic_irq_init(void)140140+{141141+ int i, nid = cpu_to_node(boot_cpu_data);142142+143143+ /* Assign all virtual IRQs to the System ASIC int. handler */144144+ for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) {145145+ unsigned int irq;146146+147147+ irq = create_irq_nr(i, nid);148148+ if (unlikely(irq == 0)) {149149+ pr_err("%s: failed hooking irq %d for systemasic\n",150150+ __func__, i);151151+ return;152152+ }153153+154154+ if (unlikely(irq != i)) {155155+ pr_err("%s: got irq %d but wanted %d, bailing.\n",156156+ __func__, irq, i);157157+ destroy_irq(irq);158158+ return;159159+ }160160+161161+ set_irq_chip_and_handler(i, &systemasic_int,162162+ handle_level_irq);163163+ }164164+}
+1-17
arch/sh/boards/mach-dreamcast/setup.c
···2828#include <asm/machvec.h>2929#include <mach/sysasic.h>30303131-extern struct irq_chip systemasic_int;3232-extern void aica_time_init(void);3333-extern int systemasic_irq_demux(int);3434-3531static void __init dreamcast_setup(char **cmdline_p)3632{3737- int i;3838-3939- /* Mask all hardware events */4040- /* XXX */4141-4242- /* Acknowledge any previous events */4343- /* XXX */4444-4545- /* Assign all virtual IRQs to the System ASIC int. handler */4646- for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++)4747- set_irq_chip_and_handler(i, &systemasic_int,4848- handle_level_irq);4949-5033 board_time_init = aica_time_init;5134}5235···3754 .mv_name = "Sega Dreamcast",3855 .mv_setup = dreamcast_setup,3956 .mv_irq_demux = systemasic_irq_demux,5757+ .mv_init_irq = systemasic_irq_init,4058};