.match = gic_ipi_domain_match,
 };
 
+static void __init gic_map_single_int(struct device_node *node,
+                                     unsigned int irq)
+{
+       unsigned int linux_irq;
+       struct irq_fwspec local_int_fwspec = {
+               .fwnode         = &node->fwnode,
+               .param_count    = 3,
+               .param          = {
+                       [0]     = GIC_LOCAL,
+                       [1]     = irq,
+                       [2]     = IRQ_TYPE_NONE,
+               },
+       };
+
+       if (!gic_local_irq_is_routable(irq))
+               return;
+
+       linux_irq = irq_create_fwspec_mapping(&local_int_fwspec);
+       WARN_ON(!linux_irq);
+}
+
+static void __init gic_map_interrupts(struct device_node *node)
+{
+       gic_map_single_int(node, GIC_LOCAL_INT_TIMER);
+       gic_map_single_int(node, GIC_LOCAL_INT_PERFCTR);
+       gic_map_single_int(node, GIC_LOCAL_INT_FDC);
+}
+
 static void __init __gic_init(unsigned long gic_base_addr,
                              unsigned long gic_addrspace_size,
                              unsigned int cpu_vec, unsigned int irqbase,
        }
 
        gic_basic_init();
+       gic_map_interrupts(node);
 }
 
 void __init gic_init(unsigned long gic_base_addr,