diff --git a/src/revenge_detect.c b/src/revenge_detect.c index bfeb3fa..da5aeb0 100644 --- a/src/revenge_detect.c +++ b/src/revenge_detect.c @@ -117,18 +117,27 @@ void detect_fb_aperture (void) { /* R300 */ - fb_addr = (register_read (RADEON_MC_FB_LOCATION) & 0xffff) << 16; - fb_len = - ((register_read (RADEON_MC_FB_LOCATION) & 0xffff0000) + 0x10000) - - fb_addr; - - if (!fb_addr) + if (option_interface == INTERFACE_RS690) + { + unsigned int tmp = register_read_rs690 (RADEON_RS690FB_LOCATION); + fb_addr = (tmp & 0xffff) << 16; + fb_len = (tmp & 0xffff0000) - fb_addr + 0x10000; + } + else + { + fb_addr = (register_read (RADEON_MC_FB_LOCATION) & 0xffff) << 16; + fb_len = + ((register_read (RADEON_MC_FB_LOCATION) & 0xffff0000) + 0x10000) - + fb_addr; + + if (!fb_addr) { /* R500 */ fb_addr = register_read (AVIVO_CRTC1_FB_LOCATION); fb_len = register_read (AVIVO_CRTC1_FB_END) - fb_addr; } - + } + if (option_debug) { printf ("%s: fb_addr = 0x%08x fb_len = 0x%08x\n", __func__, fb_addr, diff --git a/src/revenge_main.h b/src/revenge_main.h index fd7f443..2584ba4 100644 --- a/src/revenge_main.h +++ b/src/revenge_main.h @@ -115,6 +115,7 @@ #define RADEON_RS690GART_DATA 0x7c #define RADEON_RS690GART_BASE_ADDR 0x2c +#define RADEON_RS690FB_LOCATION 0x100 #define RADEON_RS690GART_LOCATION 0x101 #define R300_TX_SIZE_0 0x4480