Index: linux-work/arch/ppc/platforms/pmac_cpufreq.c =================================================================== --- linux-work.orig/arch/ppc/platforms/pmac_cpufreq.c 2005-05-28 10:29:52.000000000 +1000 +++ linux-work/arch/ppc/platforms/pmac_cpufreq.c 2005-05-28 10:30:17.000000000 +1000 @@ -271,6 +271,8 @@ #ifdef DEBUG_FREQ printk(KERN_DEBUG "HID1, before: %x\n", mfspr(SPRN_HID1)); #endif + pmu_suspend(); + /* Disable all interrupt sources on openpic */ pic_prio = openpic_get_priority(); openpic_set_priority(0xf); @@ -345,6 +347,8 @@ debug_calc_bogomips(); #endif + pmu_resume(); + preempt_enable(); return 0; Index: linux-work/drivers/macintosh/via-pmu.c =================================================================== --- linux-work.orig/drivers/macintosh/via-pmu.c 2005-05-28 10:29:53.000000000 +1000 +++ linux-work/drivers/macintosh/via-pmu.c 2005-05-28 10:30:17.000000000 +1000 @@ -2431,7 +2431,7 @@ /* Re-enable local CPU interrupts */ local_irq_enable(); - mdelay(100); + mdelay(10); preempt_enable(); /* Re-enable clock spreading on some machines */ @@ -2559,7 +2559,9 @@ return ret; } - printk(KERN_DEBUG "HID1, before: %x\n", mfspr(SPRN_HID1)); + /* Stop environment and ADB interrupts */ + pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, 0); + pmu_wait_complete(&req); /* Tell PMU what events will wake us up */ pmu_request(&req, NULL, 4, PMU_POWER_EVENTS, PMU_PWR_CLR_WAKEUP_EVENTS, @@ -2621,8 +2623,6 @@ pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, pmu_intr_mask); pmu_wait_complete(&req); - printk(KERN_DEBUG "HID1, after: %x\n", mfspr(SPRN_HID1)); - pmac_wakeup_devices(); return 0; Index: linux-work/arch/ppc/syslib/open_pic.c =================================================================== --- linux-work.orig/arch/ppc/syslib/open_pic.c 2005-05-28 10:29:53.000000000 +1000 +++ linux-work/arch/ppc/syslib/open_pic.c 2005-05-28 10:30:17.000000000 +1000 @@ -25,6 +25,7 @@ #include #include #include +#include #include "open_pic_defs.h" @@ -275,7 +276,7 @@ } #endif -#if defined(CONFIG_EPIC_SERIAL_MODE) || defined(CONFIG_PM) +#if defined(CONFIG_EPIC_SERIAL_MODE) static void openpic_reset(void) { openpic_setfield(&OpenPIC->Global.Global_Configuration0, @@ -1005,8 +1006,6 @@ return 0; } - openpic_reset(); - /* OpenPIC sometimes seem to need some time to be fully back up... */ do { openpic_set_spurious(OPENPIC_VEC_SPURIOUS);