static u32 slew_done_gpio;
 static int no_schedule;
 static int has_cpu_l2lve;
-
+static int is_pmu_based;
 
 /* There are only two frequency states for each processor. Values
  * are in kHz for the time being.
         */
        no_schedule = 1;
        sleep_freq = cur_freq;
-       if (cur_freq == low_freq)
+       if (cur_freq == low_freq && !is_pmu_based)
                do_set_cpu_speed(CPUFREQ_HIGH, 0);
        return 0;
 }
                return 1;
        hi_freq = (*value) / 1000;
        set_speed_proc = pmu_set_cpu_speed;
+       is_pmu_based = 1;
 
        return 0;
 }
                hi_freq = cur_freq;
                low_freq = 400000;
                set_speed_proc = pmu_set_cpu_speed;
+               is_pmu_based = 1;
        }
        /* Else check for TiPb 400 & 500 */
        else if (machine_is_compatible("PowerBook3,2")) {
                hi_freq = cur_freq;
                low_freq = 300000;
                set_speed_proc = pmu_set_cpu_speed;
+               is_pmu_based = 1;
        }
        /* Else check for 750FX */
        else if (PVR_VER(mfspr(SPRN_PVR)) == 0x7000)
 
        /* Restore VIA */
        restore_via_state();
 
+       /* tweak LPJ before cpufreq is there */
+       loops_per_jiffy *= 2;
+
        /* Restore video */
        pmac_call_early_video_resume();
 
        pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, pmu_intr_mask);
        pmu_wait_complete(&req);
 
+       /* Restore LPJ, cpufreq will adjust the cpu frequency */
+       loops_per_jiffy /= 2;
+
        pmac_wakeup_devices();
 
        return 0;