diff options
author | Michel Daenzer <michel@daenzer.net> | 2005-07-29 19:45:14 +0000 |
---|---|---|
committer | Michel Daenzer <michel@daenzer.net> | 2005-07-29 19:45:14 +0000 |
commit | ee45e1fb5da793fa14770b28fd662e69d52b2c6a (patch) | |
tree | 04a1205e821255e1fed8a577332c0a9d6ddc6f44 /src/radeon_driver.c | |
parent | 44a66ec5a01c3b4dfa046a66b80a3b7e9dfff537 (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.)
Diffstat (limited to 'src/radeon_driver.c')
-rw-r--r-- | src/radeon_driver.c | 10 |
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 |