From 0c541b4406a68e74d94ddb667c69d9e03bce8681 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Sat, 16 Apr 2005 15:24:19 -0700 Subject: [PATCH] ppc32: Fix AGP and sleep again My previous patch that added sleep support for uninorth-agp and some AGP "off" stuff in radeonfb and aty128fb is breaking some configs. More specifically, it has problems with rage128 setups since the DRI code for these in X doesn't properly re-enable AGP on wakeup or console switch (unlike the radeon DRM). This patch fixes the problem for pmac once for all by using a different approach. The AGP driver "registers" special suspend/resume callbacks with some arch code that the fbdev's can later on call to suspend and resume AGP, making sure it's resumed back in the same state it was when suspended. This is platform specific for now. It would be too complicated to try to do a generic implementation of this at this point due to all sort of weird things going on with AGP on other architectures. We'll re-work that whole problem cleanly once we finally merge fbdev's and DRI. In the meantime, please apply this patch which brings back some r128 based laptops into working condition as far as system sleep is concerned. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- include/asm-ppc/pmac_feature.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'include/asm-ppc') diff --git a/include/asm-ppc/pmac_feature.h b/include/asm-ppc/pmac_feature.h index 98c206d8c02..639b690ce6f 100644 --- a/include/asm-ppc/pmac_feature.h +++ b/include/asm-ppc/pmac_feature.h @@ -305,6 +305,17 @@ extern void pmac_call_early_video_resume(void); #define PMAC_FTR_DEF(x) ((_MACH_Pmac << 16) | (x)) +/* The AGP driver registers itself here */ +extern void pmac_register_agp_pm(struct pci_dev *bridge, + int (*suspend)(struct pci_dev *bridge), + int (*resume)(struct pci_dev *bridge)); + +/* Those are meant to be used by video drivers to deal with AGP + * suspend resume properly + */ +extern void pmac_suspend_agp_for_card(struct pci_dev *dev); +extern void pmac_resume_agp_for_card(struct pci_dev *dev); + /* * The part below is for use by macio_asic.c only, do not rely -- cgit v1.2.2