summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Daenzer <michel@daenzer.net>2005-07-29 19:45:14 +0000
committerMichel Daenzer <michel@daenzer.net>2005-07-29 19:45:14 +0000
commitee45e1fb5da793fa14770b28fd662e69d52b2c6a (patch)
tree04a1205e821255e1fed8a577332c0a9d6ddc6f44
parent44a66ec5a01c3b4dfa046a66b80a3b7e9dfff537 (diff)
bugzilla #3911 (https://bugs.freedesktop.org/show_bug.cgi?id=3911)
attachment #3191 (http://bugs.freedesktop.org/attachment.cgi?id=3191) Disable bus mastering while updating MC_FB_LOCATION and friends to prevent the X server from hanging on startup every now and then under some circumstances. (ATI Technologies Inc.)
-rw-r--r--src/radeon_driver.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 15a94e72..63ea9dfa 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -2211,7 +2211,10 @@ RADEONSetFBLocation(ScrnInfoPtr pScrn)
unsigned char *RADEONMMIO = info->MMIO;
CARD32 mc_fb_location;
CARD32 mc_agp_location = INREG(RADEON_MC_AGP_LOCATION);
-
+ CARD32 bus_cntl = INREG(RADEON_BUS_CNTL);
+
+ OUTREG (RADEON_BUS_CNTL, bus_cntl | RADEON_BUS_MASTER_DIS);
+ RADEONWaitForIdleMMIO(pScrn);
/* This function has many problems with newer cards.
* Even with older cards, all registers changed here are not
@@ -2231,6 +2234,9 @@ RADEONSetFBLocation(ScrnInfoPtr pScrn)
OUTREG(RADEON_DISPLAY2_BASE_ADDR, info->fbLocation);
OUTREG(RADEON_OV0_BASE_ADDR, info->fbLocation);
}
+ OUTREG (RADEON_BUS_CNTL, bus_cntl);
+ RADEONWaitForIdleMMIO(pScrn);
+
return;
}
@@ -2271,6 +2277,8 @@ RADEONSetFBLocation(ScrnInfoPtr pScrn)
OUTREG(RADEON_DISPLAY2_BASE_ADDR, info->fbLocation);
OUTREG(RADEON_OV0_BASE_ADDR, info->fbLocation);
+ OUTREG (RADEON_BUS_CNTL, bus_cntl);
+ RADEONWaitForIdleMMIO(pScrn);
/* Set display0/1 priority up on r3/4xx in the memory controller for
* high res modes if the user specifies HIGH for displaypriority