exynos4_setup_clocks();
 }
 
-static void exynos4_gic_irq_eoi(struct irq_data *d)
+static void exynos4_gic_irq_fix_base(struct irq_data *d)
 {
        struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d);
 
        gic_data->cpu_base = S5P_VA_GIC_CPU +
                            (EXYNOS4_GIC_BANK_OFFSET * smp_processor_id());
+
+       gic_data->dist_base = S5P_VA_GIC_DIST +
+                           (EXYNOS4_GIC_BANK_OFFSET * smp_processor_id());
 }
 
 void __init exynos4_init_irq(void)
 {
        int irq;
 
-       gic_init(0, IRQ_SPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU);
-       gic_arch_extn.irq_eoi = exynos4_gic_irq_eoi;
+       gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU);
+       gic_arch_extn.irq_eoi = exynos4_gic_irq_fix_base;
+       gic_arch_extn.irq_unmask = exynos4_gic_irq_fix_base;
+       gic_arch_extn.irq_mask = exynos4_gic_irq_fix_base;
 
        for (irq = 0; irq < MAX_COMBINER_NR; irq++) {