static void __init gic_init_irq(void) { if (core_tile_eb11mp() || core_tile_a9mp()) { unsigned int pldctrl; /* new irq mode */ writel(0x0000a05f, __io_address(REALVIEW_SYS_LOCK)); pldctrl = readl(__io_address(REALVIEW_SYS_BASE) + REALVIEW_EB11MP_SYS_PLD_CTRL1); pldctrl |= 0x00800000; writel(pldctrl, __io_address(REALVIEW_SYS_BASE) + REALVIEW_EB11MP_SYS_PLD_CTRL1); writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); /* core tile GIC, primary */ gic_init(0, 29, __io_address(REALVIEW_EB11MP_GIC_DIST_BASE), __io_address(REALVIEW_EB11MP_GIC_CPU_BASE)); #ifndef CONFIG_REALVIEW_EB_ARM11MP_REVB /* board GIC, secondary */ gic_init(1, 96, __io_address(REALVIEW_EB_GIC_DIST_BASE), __io_address(REALVIEW_EB_GIC_CPU_BASE)); gic_cascade_irq(1, IRQ_EB11MP_EB_IRQ1); #endif } else { /* board GIC, primary */ gic_init(0, 29, __io_address(REALVIEW_EB_GIC_DIST_BASE), __io_address(REALVIEW_EB_GIC_CPU_BASE)); } }
static int __init gic_devtree_init(struct vmm_devtree_node *node, struct vmm_devtree_node *parent, bool eoimode) { int rc; u32 irq, irq_start = 0; physical_size_t cpu_sz; virtual_addr_t cpu_base; virtual_addr_t cpu2_base; virtual_addr_t dist_base; if (WARN_ON(!node)) { return VMM_ENODEV; } rc = vmm_devtree_request_regmap(node, &dist_base, 0, "GIC Dist"); WARN(rc, "unable to map gic dist registers\n"); rc = vmm_devtree_request_regmap(node, &cpu_base, 1, "GIC CPU"); WARN(rc, "unable to map gic cpu registers\n"); rc = vmm_devtree_request_regmap(node, &cpu2_base, 4, "GIC CPU2"); if (rc) { rc = vmm_devtree_regsize(node, &cpu_sz, 1); if (rc) { return rc; } if (cpu_sz >= 0x20000) { cpu2_base = cpu_base + 0x10000; } else if (cpu_sz >= 0x2000) { cpu2_base = cpu_base + 0x1000; } else { cpu2_base = 0x0; } } if (vmm_devtree_read_u32(node, "irq_start", &irq_start)) { irq_start = 0; } rc = gic_init_bases(node, gic_cnt, eoimode, irq_start, cpu_base, cpu2_base, dist_base); if (rc) { return rc; } if (parent) { if (vmm_devtree_read_u32(node, "parent_irq", &irq)) { irq = 1020; } gic_cascade_irq(gic_cnt, irq); } else { vmm_host_irq_set_active_callback(gic_active_irq); } gic_cnt++; return VMM_OK; }
static void __init gic_init_irq(void) { gic_cpu_base_addr = __io_address(REALVIEW_DC1176_GIC_CPU_BASE); gic_dist_init(0, __io_address(REALVIEW_DC1176_GIC_DIST_BASE), IRQ_DC1176_GIC_START); gic_cpu_init(0, gic_cpu_base_addr); gic_dist_init(1, __io_address(REALVIEW_PB1176_GIC_DIST_BASE), IRQ_PB1176_GIC_START); gic_cpu_init(1, __io_address(REALVIEW_PB1176_GIC_CPU_BASE)); gic_cascade_irq(1, IRQ_DC1176_PB_IRQ1); }
static void __init gic_init_irq(void) { /* ARM1176 DevChip GIC, primary */ gic_cpu_base_addr = __io_address(REALVIEW_DC1176_GIC_CPU_BASE); gic_dist_init(0, __io_address(REALVIEW_DC1176_GIC_DIST_BASE), IRQ_DC1176_GIC_START); gic_cpu_init(0, gic_cpu_base_addr); /* board GIC, secondary */ gic_dist_init(1, __io_address(REALVIEW_PB1176_GIC_DIST_BASE), IRQ_PB1176_GIC_START); gic_cpu_init(1, __io_address(REALVIEW_PB1176_GIC_CPU_BASE)); gic_cascade_irq(1, IRQ_DC1176_PB_IRQ1); }
static void __init gic_init_irq(void) { #ifdef CONFIG_REALVIEW_MPCORE unsigned int pldctrl; writel(0x0000a05f, __io_address(REALVIEW_SYS_LOCK)); pldctrl = readl(__io_address(REALVIEW_SYS_BASE) + REALVIEW_MPCORE_SYS_PLD_CTRL1); pldctrl |= 0x00800000; /* New irq mode */ writel(pldctrl, __io_address(REALVIEW_SYS_BASE) + REALVIEW_MPCORE_SYS_PLD_CTRL1); writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); #endif gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29); gic_cpu_init(0, __io_address(REALVIEW_GIC_CPU_BASE)); #if defined(CONFIG_REALVIEW_MPCORE) && !defined(CONFIG_REALVIEW_MPCORE_REVB) gic_dist_init(1, __io_address(REALVIEW_GIC1_DIST_BASE), 64); gic_cpu_init(1, __io_address(REALVIEW_GIC1_CPU_BASE)); gic_cascade_irq(1, IRQ_EB_IRQ1); #endif }
static void __init gic_init_irq(void) { unsigned int pldctrl; /* new irq mode with no DCC */ writel(0x0000a05f, __io_address(REALVIEW_SYS_LOCK)); pldctrl = readl(__io_address(REALVIEW_SYS_BASE) + REALVIEW_PB11MP_SYS_PLD_CTRL1); pldctrl |= 2 << 22; writel(pldctrl, __io_address(REALVIEW_SYS_BASE) + REALVIEW_PB11MP_SYS_PLD_CTRL1); writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); /* ARM11MPCore test chip GIC, primary */ gic_init(0, 29, __io_address(REALVIEW_TC11MP_GIC_DIST_BASE), __io_address(REALVIEW_TC11MP_GIC_CPU_BASE)); /* board GIC, secondary */ gic_init(1, IRQ_PB11MP_GIC_START, __io_address(REALVIEW_PB11MP_GIC_DIST_BASE), __io_address(REALVIEW_PB11MP_GIC_CPU_BASE)); gic_cascade_irq(1, IRQ_TC11MP_PB_IRQ1); }