static int gic_cpu_startup(unsigned int cpu)
 {
+       /* Enable or disable EIC */
+       change_gic_vl_ctl(GIC_VX_CTL_EIC,
+                         cpu_has_veic ? GIC_VX_CTL_EIC : 0);
+
        /* Clear all local IRQ masks (ie. disable all local interrupts) */
        write_gic_vl_rmask(~0);
 
 static int __init gic_of_init(struct device_node *node,
                              struct device_node *parent)
 {
-       unsigned int cpu_vec, i, gicconfig, cpu, v[2];
+       unsigned int cpu_vec, i, gicconfig, v[2];
        unsigned long reserved;
        phys_addr_t gic_base;
        struct resource res;
        gic_vpes = gic_vpes + 1;
 
        if (cpu_has_veic) {
-               /* Set EIC mode for all VPEs */
-               for_each_present_cpu(cpu) {
-                       write_gic_vl_other(mips_cm_vp_id(cpu));
-                       write_gic_vo_ctl(GIC_VX_CTL_EIC);
-               }
-
                /* Always use vector 1 in EIC mode */
                gic_cpu_pin = 0;
                timer_cpu_pin = gic_cpu_pin;