mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
ARM64: Round-Robin dispatch IRQs between CPUs.
IRQ-CPU mapping is round robined on ARM64 to increase concurrency and allow multiple interrupts to be serviced at a time. This reduces the need for FIQ. Signed-off-by: Michael Zoran <mzoran@crowfest.net>
This commit is contained in:
committed by
popcornmix
parent
dc7adb1fa6
commit
5661b69cf4
@@ -154,10 +154,23 @@ static void armctrl_unmask_irq(struct irq_data *d)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
void bcm2836_arm_irqchip_spin_gpu_irq(void);
|
||||
|
||||
static void armctrl_ack_irq(struct irq_data *d)
|
||||
{
|
||||
bcm2836_arm_irqchip_spin_gpu_irq();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static struct irq_chip armctrl_chip = {
|
||||
.name = "ARMCTRL-level",
|
||||
.irq_mask = armctrl_mask_irq,
|
||||
.irq_unmask = armctrl_unmask_irq
|
||||
.irq_unmask = armctrl_unmask_irq,
|
||||
#ifdef CONFIG_ARM64
|
||||
.irq_ack = armctrl_ack_irq
|
||||
#endif
|
||||
};
|
||||
|
||||
static int armctrl_xlate(struct irq_domain *d, struct device_node *ctrlr,
|
||||
|
||||
@@ -87,6 +87,27 @@ static void bcm2836_arm_irqchip_unmask_gpu_irq(struct irq_data *d)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
|
||||
void bcm2836_arm_irqchip_spin_gpu_irq(void)
|
||||
{
|
||||
u32 i;
|
||||
void __iomem *gpurouting = (intc.base + LOCAL_GPU_ROUTING);
|
||||
u32 routing_val = readl(gpurouting);
|
||||
|
||||
for (i = 1; i <= 3; i++) {
|
||||
u32 new_routing_val = (routing_val + i) & 3;
|
||||
|
||||
if (cpu_active(new_routing_val)) {
|
||||
writel(new_routing_val, gpurouting);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(bcm2836_arm_irqchip_spin_gpu_irq);
|
||||
|
||||
#endif
|
||||
|
||||
static struct irq_chip bcm2836_arm_irqchip_gpu = {
|
||||
.name = "bcm2836-gpu",
|
||||
.irq_mask = bcm2836_arm_irqchip_mask_gpu_irq,
|
||||
|
||||
Reference in New Issue
Block a user