summaryrefslogtreecommitdiff
path: root/src/radeon_driver.c
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2009-07-23 13:28:36 -0400
committerAlex Deucher <alexdeucher@gmail.com>2009-07-23 13:28:36 -0400
commit328e4c816348b6f867df30b39856dbe78c8e0dcc (patch)
treedcc0def6ce13174f0af563272ca28f3b9b1a4b66 /src/radeon_driver.c
parentf96d5b255425fbd02be2cad26edb590d474a5640 (diff)
RS780: fill in MC access functions
Also, r6xx/r7xx don't have indirect MC space, so don't try to access it.
Diffstat (limited to 'src/radeon_driver.c')
-rw-r--r--src/radeon_driver.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 535b3166..37913051 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -621,6 +621,12 @@ unsigned RADEONINMC(ScrnInfoPtr pScrn, int addr)
} else if (info->ChipFamily == CHIP_FAMILY_RS600) {
OUTREG(RS600_MC_INDEX, ((addr & RS600_MC_ADDR_MASK) | RS600_MC_IND_CITF_ARB0));
data = INREG(RS600_MC_DATA);
+ } else if ((info->ChipFamily == CHIP_FAMILY_RS780) ||
+ (info->ChipFamily == CHIP_FAMILY_RS880)) {
+ OUTREG(RS780_MC_INDEX, (addr & RS780_MC_INDEX_MASK));
+ data = INREG(RS780_MC_DATA);
+ } else if (info->ChipFamily >= CHIP_FAMILY_R600) {
+ data = 0;
} else if (IS_AVIVO_VARIANT) {
OUTREG(AVIVO_MC_INDEX, (addr & 0xff) | 0x7f0000);
(void)INREG(AVIVO_MC_INDEX);
@@ -657,6 +663,13 @@ void RADEONOUTMC(ScrnInfoPtr pScrn, int addr, uint32_t data)
RS600_MC_IND_CITF_ARB0 |
RS600_MC_IND_WR_EN));
OUTREG(RS600_MC_DATA, data);
+ } else if ((info->ChipFamily == CHIP_FAMILY_RS780) ||
+ (info->ChipFamily == CHIP_FAMILY_RS880)) {
+ OUTREG(RS780_MC_INDEX, ((addr & RS780_MC_INDEX_MASK) |
+ RS780_MC_INDEX_WR_EN));
+ OUTREG(RS780_MC_DATA, data);
+ } else if (info->ChipFamily >= CHIP_FAMILY_R600) {
+ // do nothing
} else if (IS_AVIVO_VARIANT) {
OUTREG(AVIVO_MC_INDEX, (addr & 0xff) | 0xff0000);
(void)INREG(AVIVO_MC_INDEX);