{
        unsigned long flags;
        unsigned int count, start;
-#ifdef CONFIG_MIPS_GIC
-       unsigned int giccount = 0, gicstart = 0;
-#endif
+       cycle_t giccount = 0, gicstart = 0;
 
 #if defined(CONFIG_KVM_GUEST) && CONFIG_KVM_GUEST_TIMER_FREQ
        mips_hpt_frequency = CONFIG_KVM_GUEST_TIMER_FREQ * 1000000;
 
        /* Initialize counters. */
        start = read_c0_count();
-#ifdef CONFIG_MIPS_GIC
        if (gic_present)
-               GICREAD(GIC_REG(SHARED, GIC_SH_COUNTER_31_00), gicstart);
-#endif
+               gicstart = gic_read_count();
 
        /* Read counter exactly on falling edge of update flag. */
        while (CMOS_READ(RTC_REG_A) & RTC_UIP);
        while (!(CMOS_READ(RTC_REG_A) & RTC_UIP));
 
        count = read_c0_count();
-#ifdef CONFIG_MIPS_GIC
        if (gic_present)
-               GICREAD(GIC_REG(SHARED, GIC_SH_COUNTER_31_00), giccount);
-#endif
+               giccount = gic_read_count();
 
        local_irq_restore(flags);
 
        count -= start;
        mips_hpt_frequency = count;
 
-#ifdef CONFIG_MIPS_GIC
        if (gic_present) {
                giccount -= gicstart;
                gic_frequency = giccount;
        }
-#endif
 }
 
 void read_persistent_clock(struct timespec *ts)