Ãhel kenal pÃeval (esmaspÃev, 24. jaanuar 2005, 16:01-0500), kirjutas Volker Braun: > Hi, > > This does the trick. In fact, i only need to get rid of the second > OUTREG() call. No idea what that is good for. I'll update the bugzilla > kernel entry with your patch and some additional information.
Ok, Great! I have made another patch that disables this call altogether. As far as I can understand it programs some registers that are related to AGP clocking and according to some guys inside ATI, it is North Bridge and Radeon chip dependent, but I don't know jack about ATI HW programming so I might be seriously off here. My laptop seems to do well without reprogramming this register and it manages to crash Yours (and crashed mine with old driver) so I think it should be left untouched until we get more information on how to do it properly. Can You please upload this patch to bugzilla instead? If anyone tests the patch on some other thinkpad model please post it to bugzilla so I we can get an impression how well it performs as well as update the whitelist. -- Antti Andreimann - Security Expert Using Linux since 1993 Member of ELUG since 29.01.2000
--- linux-2.6.11-rc2-tank/drivers/video/aty/radeon_pm.c.orig 2005-01-24 23:52:17.000000000 +0200 +++ linux-2.6.11-rc2-tank/drivers/video/aty/radeon_pm.c 2005-01-25 00:00:24.000000000 +0200 @@ -25,8 +25,39 @@ #include <asm/pmac_feature.h> #endif +/* For detecting supported PC laptops */ +#ifdef CONFIG_X86 +#include <linux/dmi.h> +#endif + #include "ati_ids.h" +#ifdef CONFIG_X86 +/* This array holds a list of supported PC laptops. + * Currently only few IBM models are tested. + * If you want to experiment, use dmidecode to find out + * vendor and product codes for Your laptop. + */ +static struct dmi_system_id __devinitdata radeonfb_dmi_table[] = { + { + .ident = "IBM ThinkPad T41 (2373-2FG)", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "IBM"), + DMI_MATCH(DMI_PRODUCT_NAME, "23732FG"), + }, + }, + { + /* Reported by Volker Braun <[EMAIL PROTECTED]> */ + .ident = "IBM ThinkPad T41 (2379-DJU)", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "IBM"), + DMI_MATCH(DMI_PRODUCT_NAME, "2379DJU"), + }, + }, + { }, +}; +#endif + void radeon_pm_disable_dynamic_mode(struct radeonfb_info *rinfo) { u32 tmp; @@ -853,6 +884,13 @@ tmp = INPLL( pllMCLK_MISC) | MCLK_MISC__EN_MCLK_TRISTATE_IN_SUSPEND; OUTPLL( pllMCLK_MISC, tmp); + /* BUS_CNTL1__MOBILE_PLATORM_SEL setting is northbridge chipset + * and radeon chip dependent. Thus we only enable it on Mac for + * now (until we get more info on how to compute the correct + * value for various X86 bridges). + */ + +#ifdef CONFIG_PPC_PMAC /* AGP PLL control */ if (rinfo->family <= CHIP_FAMILY_RV280) { OUTREG(BUS_CNTL1, INREG(BUS_CNTL1) | BUS_CNTL1__AGPCLK_VALID); @@ -864,6 +902,7 @@ OUTREG(BUS_CNTL1, INREG(BUS_CNTL1)); OUTREG(BUS_CNTL1, (INREG(BUS_CNTL1) & ~0x4000) | 0x8000); } +#endif OUTREG(CRTC_OFFSET_CNTL, (INREG(CRTC_OFFSET_CNTL) & ~CRTC_OFFSET_CNTL__CRTC_STEREO_SYNC_OUT_EN)); @@ -2748,6 +2787,24 @@ OUTREG(TV_DAC_CNTL, INREG(TV_DAC_CNTL) | 0x07000000); } #endif /* defined(CONFIG_PM) && defined(CONFIG_PPC_OF) */ + +/* The PM code also works on some PC laptops. + * Only a few models are actually tested so Your mileage may vary. + * We can do D2 on at least M7 and M9 on some IBM ThinkPad T41 models. + */ +#if defined(CONFIG_PM) && defined(CONFIG_X86) + if (dmi_check_system(radeonfb_dmi_table)) { + if (rinfo->is_mobility && rinfo->pm_reg && + rinfo->family <= CHIP_FAMILY_RV250) + rinfo->pm_mode |= radeon_pm_d2; + + /* Power down TV DAC, that saves a significant amount of power, + * we'll have something better once we actually have some TVOut + * support + */ + OUTREG(TV_DAC_CNTL, INREG(TV_DAC_CNTL) | 0x07000000); + } +#endif /* defined(CONFIG_PM) && defined(CONFIG_X86) */ } void radeonfb_pm_exit(struct radeonfb_info *rinfo)