linux/arch/ppc/platforms
Benjamin Herrenschmidt 0086b5ec78 [PATCH] ppc32: Fix nasty sleep/wakeup problem
Despite all the care lately in making the powermac sleep/wakeup as
robust as possible, there is still a nasty related to the use of cpufreq
on PMU based machines.  Unfortunately, it affects paulus old powerbook
so I have to fix it :)

We didn't manage to understand what is precisely going on, it leads to
memory corruption and might have to do with RAM not beeing properly
refreshed when a cpufreq transition is done right before the sleep.

The best workaround (and less intrusive at this point) we could come up
with is included in this patch.  We basically do _not_ force a switch to
high speed on suspend anymore (that is what is causing the problem) on
those machines.  We still force a speed switch on wakeup (since we don't
know what speed we are coming back from sleep at, and that seems to work
fine).

Since, during this short interval, the actual CPU speed might be
incorrect, we also hack around by multiplying loops_per_jiffy by 2 (max
speed factor on those machines) during early wakeup stage to make sure
udelay's during that time aren't too short.

For after 2.6.12, we'll change udelay implementation to use the CPU
timebase (which is always constant) instead like we do on ppc64 and thus
get rid of all those problems.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-06-09 21:33:35 -07:00
..
4xx [PATCH] ppc iomem annotations: ebony_setup_pcix() 2005-04-25 07:55:58 -07:00
83xx [PATCH] ppc32: Add soft reset to MPC834x 2005-05-28 16:46:16 -07:00
85xx [PATCH] ppc32: i8259 PIC should not be initialized if PCI is not configured 2005-05-28 16:46:16 -07:00
adir_pci.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
adir_pic.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
adir_setup.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
adir.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
apus_pci.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
apus_pci.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
apus_setup.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bseip.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ccm.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
chestnut.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
chestnut.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
chrp_pci.c [PATCH] ppc trivial iomem annotations: chrp 2005-04-24 14:58:08 -07:00
chrp_pegasos_eth.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
chrp_setup.c [PATCH] ppc trivial iomem annotations: chrp 2005-04-24 14:58:08 -07:00
chrp_smp.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
chrp_time.c [PATCH] ppc32: Fix a problem with NTP on !(chrp||gemini) 2005-04-16 15:24:24 -07:00
cpci690.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cpci690.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
est8260.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ev64260.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ev64260.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
fads.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gemini_pci.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gemini_prom.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gemini_serial.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gemini_setup.c [PATCH] ppc32: Fix a problem with NTP on !(chrp||gemini) 2005-04-16 15:24:24 -07:00
gemini.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hdpu.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hdpu.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hermes.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ip860.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ivms8.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
k2.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
k2.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
katana.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
katana.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
lantec.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
lite5200.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
lite5200.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
lopec.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
lopec.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
lwmon.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
Makefile Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mbx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mcpn765.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mcpn765.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mpc5200.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mvme5100.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mvme5100.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pal4_pci.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pal4_serial.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pal4_setup.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pal4.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pcore.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pcore.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pcu_e.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmac_backlight.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmac_cache.S [PATCH] ppc32: Workaround a cache flush issue on sleep 2005-05-01 18:22:34 -07:00
pmac_cpufreq.c [PATCH] ppc32: Fix nasty sleep/wakeup problem 2005-06-09 21:33:35 -07:00
pmac_feature.c [PATCH] ppc32: Fix might_sleep() warning with clock spreading 2005-05-02 08:15:22 -07:00
pmac_low_i2c.c [PATCH] ppc iomem annotations: pmac_low_i2c 2005-04-25 07:55:58 -07:00
pmac_nvram.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmac_pci.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmac_pic.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmac_pic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmac_setup.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmac_sleep.S [PATCH] ppc32: Fix errata for some G3 CPUs 2005-05-01 08:58:40 -07:00
pmac_smp.c [PATCH] ppc trivial iomem annotations: pmac_smp.c 2005-04-24 14:58:08 -07:00
pmac_time.c [PATCH] ppc trivial iomem annotations: pmac_time.c 2005-04-24 14:58:08 -07:00
powerpmc250.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
powerpmc250.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pplus.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pplus.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pq2ads.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pq2ads.h [PATCH] ppc32: Support for 82xx PQII on-chip PCI bridge 2005-05-28 16:46:15 -07:00
prep_pci.c [PATCH] ppc32: Make the Powerstack II Pro4000 boot again 2005-04-16 15:24:26 -07:00
prep_setup.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
prpmc750.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
prpmc750.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
prpmc800.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
prpmc800.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
radstone_ppc7d.c [PATCH] ppc32: add rtc hooks in PPC7D platform file 2005-05-01 08:58:41 -07:00
radstone_ppc7d.h [PATCH] ppc32: fix for misreported SDRAM size on Radstone PPC7D platform 2005-05-01 08:58:40 -07:00
residual.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rpx8260.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rpxclassic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rpxhiox.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rpxlite.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sandpoint.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sandpoint.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sbc82xx.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sbc82xx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sbs8260.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
spd8xx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
spruce.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
spruce.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
tqm8xx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
tqm8260_setup.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
tqm8260.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00