Mercurial > mplayer.hg
changeset 1951:b2b85982fc0e
MTRR autoconfigure
author | nick |
---|---|
date | Tue, 25 Sep 2001 07:20:42 +0000 |
parents | 940c467eae09 |
children | b55163894e30 |
files | drivers/radeon/radeonfb.c |
diffstat | 1 files changed, 45 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/drivers/radeon/radeonfb.c Mon Sep 24 21:08:40 2001 +0000 +++ b/drivers/radeon/radeonfb.c Tue Sep 25 07:20:42 2001 +0000 @@ -31,7 +31,7 @@ * Disable SURFACE_CNTL because mplayer doesn't work * propertly (by NK) * 0.1.0-ve.1 - * + * 2001-09-25 MTRR support (by NK) * Special thanks to ATI DevRel team for their hardware donations. * * LIMITATIONS: on dualhead Radeons (VE, M6, M7) driver doesn't work in @@ -75,6 +75,10 @@ #include <video/fbcon-cfb24.h> #include <video/fbcon-cfb32.h> +#ifdef CONFIG_MTRR +#include <asm/mtrr.h> +#endif + #include "radeon.h" @@ -281,7 +285,9 @@ u32 hack_crtc_ext_cntl; u32 hack_crtc_v_sync_strt_wid; - +#ifdef CONFIG_MTRR + struct { int vram; int vram_valid; } mtrr; +#endif #if defined(FBCON_HAS_CFB16) || defined(FBCON_HAS_CFB32) union { #if defined(FBCON_HAS_CFB16) @@ -529,6 +535,7 @@ static char fontname[40] __initdata; static char *mode_option __initdata; static char noaccel __initdata = 0; +static int nomtrr __initdata = 0; #if 0 #ifdef FBCON_HAS_CFB8 @@ -536,6 +543,10 @@ #endif #endif +#ifdef CONFIG_MTRR +static int mtrr = 1; +#endif + /* * prototypes */ @@ -606,7 +617,13 @@ int __init radeonfb_init (void) { - return pci_module_init (&radeonfb_driver); +#ifdef CONFIG_MTRR + if (nomtrr) { + mtrr = 0; + printk("radeonfb: Parameter NOMTRR set\n"); + } +#endif + return pci_module_init (&radeonfb_driver); } @@ -637,6 +654,11 @@ } else if (!strncmp(this_opt, "noaccel", 7)) { noaccel = 1; } +#ifdef CONFIG_MTRR + else if(!strncmp(this_opt, "nomtrr", 6)) { + mtrr = 0; + } +#endif else mode_option = this_opt; } @@ -651,6 +673,10 @@ MODULE_AUTHOR("Ani Joshi. (Radeon VE extensions by Nick Kurshev)"); MODULE_DESCRIPTION("framebuffer driver for ATI Radeon chipset. Ver: "RADEON_VERSION); +#ifdef CONFIG_MTRR +MODULE_PARM(nomtrr, "i"); +MODULE_PARM_DESC(nomtrr, "Don't touch MTRR (touch=0(default))"); +#endif static char * GET_MON_NAME(int type) { @@ -951,6 +977,15 @@ else printk("radeonfb: CRT port has %s monitor connected\n",GET_MON_NAME(rinfo->crtDispType)); printk("radeonfb: This card has %sTVout\n",rinfo->hasTVout ? "" : "no "); +#ifdef CONFIG_MTRR + if (mtrr) { + rinfo->mtrr.vram = mtrr_add(rinfo->fb_base_phys, + rinfo->video_ram, MTRR_TYPE_WRCOMB, 1); + rinfo->mtrr.vram_valid = 1; + /* let there be speed */ + printk("radeonfb: MTRR set to ON\n"); + } +#endif /* CONFIG_MTRR */ return 0; } @@ -968,7 +1003,11 @@ radeon_write_mode (rinfo, &rinfo->init_state); unregister_framebuffer ((struct fb_info *) rinfo); - +#ifdef CONFIG_MTRR + if (rinfo->mtrr.vram_valid) + mtrr_del(rinfo->mtrr.vram, rinfo->fb_base_phys, + rinfo->video_ram); +#endif /* CONFIG_MTRR */ iounmap ((void*)rinfo->mmio_base); iounmap ((void*)rinfo->fb_base); @@ -1940,8 +1979,8 @@ newmode.dac_cntl = INREG(DAC_CNTL) | DAC_MASK_ALL | DAC_VGA_ADR_EN | DAC_8BIT_EN; - newmode.crtc_h_total_disp = ((((hTotal / 8) - 1) & 0xffff) | - (((mode->xres / 8) - 1) << 16)); + newmode.crtc_h_total_disp = ((((hTotal / 8) - 1) & 0x3ff) | + ((((mode->xres / 8) - 1) & 0x1ff) << 16)); newmode.crtc_h_sync_strt_wid = ((hsync_start & 0x1fff) | (hsync_wid << 16) | (h_sync_pol << 23)); @@ -2061,7 +2100,6 @@ OUTREG(CRTC_EXT_CNTL, rinfo->hack_crtc_ext_cntl); OUTREG(CRTC_V_SYNC_STRT_WID, rinfo->hack_crtc_v_sync_strt_wid); } - return; }