1*91a6c3ceSAndrew Jones /* 2*91a6c3ceSAndrew Jones * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com> 3*91a6c3ceSAndrew Jones * 4*91a6c3ceSAndrew Jones * This work is licensed under the terms of the GNU LGPL, version 2. 5*91a6c3ceSAndrew Jones */ 6*91a6c3ceSAndrew Jones #include <asm/gic.h> 7*91a6c3ceSAndrew Jones #include <asm/io.h> 8*91a6c3ceSAndrew Jones 9*91a6c3ceSAndrew Jones void gicv2_enable_defaults(void) 10*91a6c3ceSAndrew Jones { 11*91a6c3ceSAndrew Jones void *dist = gicv2_dist_base(); 12*91a6c3ceSAndrew Jones void *cpu_base = gicv2_cpu_base(); 13*91a6c3ceSAndrew Jones unsigned int i; 14*91a6c3ceSAndrew Jones 15*91a6c3ceSAndrew Jones gicv2_data.irq_nr = GICD_TYPER_IRQS(readl(dist + GICD_TYPER)); 16*91a6c3ceSAndrew Jones if (gicv2_data.irq_nr > 1020) 17*91a6c3ceSAndrew Jones gicv2_data.irq_nr = 1020; 18*91a6c3ceSAndrew Jones 19*91a6c3ceSAndrew Jones for (i = 0; i < gicv2_data.irq_nr; i += 4) 20*91a6c3ceSAndrew Jones writel(GICD_INT_DEF_PRI_X4, dist + GICD_IPRIORITYR + i); 21*91a6c3ceSAndrew Jones 22*91a6c3ceSAndrew Jones writel(GICD_INT_EN_SET_SGI, dist + GICD_ISENABLER + 0); 23*91a6c3ceSAndrew Jones writel(GICD_ENABLE, dist + GICD_CTLR); 24*91a6c3ceSAndrew Jones 25*91a6c3ceSAndrew Jones writel(GICC_INT_PRI_THRESHOLD, cpu_base + GICC_PMR); 26*91a6c3ceSAndrew Jones writel(GICC_ENABLE, cpu_base + GICC_CTLR); 27*91a6c3ceSAndrew Jones } 28