/* AMBA's biosfood */
#define AMBA_DEVICE 0xb105f00d
+extern struct irqchip_ops irqchip;
+
void *gicd_base;
unsigned long gicd_size;
* per-cpu setup, which means that a bool must be set by the master CPU
*/
static bool irqchip_is_init;
-static struct irqchip_ops irqchip;
bool spi_in_cell(struct cell *cell, unsigned int spi)
{
int irqchip_cpu_init(struct per_cpu *cpu_data)
{
- if (irqchip.cpu_init)
- return irqchip.cpu_init(cpu_data);
-
- return 0;
+ return irqchip.cpu_init(cpu_data);
}
int irqchip_cpu_reset(struct per_cpu *cpu_data)
{
cpu_data->pending_irqs_head = cpu_data->pending_irqs_tail = 0;
- if (irqchip.cpu_reset)
- return irqchip.cpu_reset(cpu_data, false);
-
- return 0;
+ return irqchip.cpu_reset(cpu_data, false);
}
void irqchip_cpu_shutdown(struct per_cpu *cpu_data)
* it has been initialised: this function may be executed during the
* setup phase.
*/
- if (irqchip.cpu_reset)
- irqchip.cpu_reset(cpu_data, true);
+ irqchip.cpu_reset(cpu_data, true);
}
static const struct jailhouse_irqchip *
root_cell.arch.spis &= ~(cell->arch.spis);
}
-/* Only the GIC is implemented */
-extern struct irqchip_ops gic_irqchip;
-
int irqchip_init(void)
{
int i, err;
case 0x2:
case 0x3:
case 0x4:
- memcpy(&irqchip, &gic_irqchip, sizeof(struct irqchip_ops));
break;
+ default:
+ goto err_no_distributor;
}
if (irqchip.init) {
}
err_no_distributor:
- printk("GIC: no distributor found\n");
+ printk("GIC: no supported distributor found\n");
arch_unmap_device(gicd_base, gicd_size);
return -ENODEV;