xf86-video-ati: Branch 'master'

Dave Airlie airlied at kemper.freedesktop.org
Sun Dec 30 04:45:51 PST 2007


 src/radeon_driver.c |   34 +++++++++++++++++++++++++++++-----
 src/radeon_reg.h    |    9 +++++++++
 2 files changed, 38 insertions(+), 5 deletions(-)

New commits:
commit f65374f5e15bfd391a1838a686cd87d3bab8043d
Author: Maciej Cencora <m.cencora at gmail.com>
Date:   Mon Dec 31 09:44:34 2007 +1000

    atombios: initial rs690 patches

diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 6e10282..d68b18f 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -784,7 +784,11 @@ unsigned RADEONINMC(ScrnInfoPtr pScrn, int addr)
     unsigned char *RADEONMMIO = info->MMIO;
     CARD32         data;
 
-    if (IS_AVIVO_VARIANT) {
+    if (info->ChipFamily == CHIP_FAMILY_RS690)
+    {
+        OUTREG(RS690_MC_INDEX, (addr & RS690_MC_INDEX_MASK));
+        data = INREG(RS690_MC_DATA);
+    } else if (IS_AVIVO_VARIANT) {
 	OUTREG(AVIVO_MC_INDEX, (addr & 0xff) | 0x7f0000);
 	(void)INREG(AVIVO_MC_INDEX);
 	data = INREG(AVIVO_MC_DATA);
@@ -809,7 +813,13 @@ void RADEONOUTMC(ScrnInfoPtr pScrn, int addr, CARD32 data)
     RADEONInfoPtr  info       = RADEONPTR(pScrn);
     unsigned char *RADEONMMIO = info->MMIO;
 
-    if (IS_AVIVO_VARIANT) {
+    if (info->ChipFamily == CHIP_FAMILY_RS690)
+    {
+        OUTREG(RS690_MC_INDEX, ((addr & RS690_MC_INDEX_MASK) |
+                        RS690_MC_INDEX_WR_EN));
+        OUTREG(RS690_MC_DATA, data);
+        OUTREG(RS690_MC_INDEX, RS690_MC_INDEX_WR_ACK);
+    } else if (IS_AVIVO_VARIANT) {
 	OUTREG(AVIVO_MC_INDEX, (addr & 0xff) | 0xff0000);
 	(void)INREG(AVIVO_MC_INDEX);
 	OUTREG(AVIVO_MC_DATA, data);
@@ -865,6 +875,11 @@ void radeon_write_mc_fb_agp_location(ScrnInfoPtr pScrn, int mask, CARD32 fb_loc,
 	if (mask & LOC_AGP)
 	    OUTMC(pScrn, RV515_MC_AGP_LOCATION, agp_loc);
 	(void)INMC(pScrn, RV515_MC_AGP_LOCATION);
+    } else if (info->ChipFamily == CHIP_FAMILY_RS690) {
+	if (mask & LOC_FB)
+	    OUTMC(pScrn, RS690_MC_FB_LOCATION, fb_loc);
+	if (mask & LOC_AGP)
+	    OUTMC(pScrn, RS690_MC_AGP_LOCATION, agp_loc);
     } else if (info->ChipFamily >= CHIP_FAMILY_R520) { 
 	if (mask & LOC_FB)
 	    OUTMC(pScrn, R520_MC_FB_LOCATION, fb_loc);
@@ -898,6 +913,13 @@ void radeon_read_mc_fb_agp_location(ScrnInfoPtr pScrn, int mask, CARD32 *fb_loc,
 	    *agp_loc = INMC(pScrn, RV515_MC_AGP_LOCATION);
 	    *agp_loc_hi = 0;
 	}
+    } else if (info->ChipFamily == CHIP_FAMILY_RS690) {
+	if (mask & LOC_FB)
+	    *fb_loc = INMC(pScrn, RS690_MC_FB_LOCATION);
+	if (mask & LOC_AGP) {
+	    *agp_loc = INMC(pScrn, RS690_MC_AGP_LOCATION);
+	    *agp_loc_hi = 0;
+	}
     } else if (info->ChipFamily >= CHIP_FAMILY_R520) {
 	if (mask & LOC_FB)
 	    *fb_loc = INMC(pScrn, R520_MC_FB_LOCATION);
@@ -1416,7 +1438,7 @@ static void RADEONInitMemoryMap(ScrnInfoPtr pScrn)
     }
 
     if (mem_size == 0)
-	    mem_size = 0x800000;
+	mem_size = 0x800000;
 
     /* Fix for RN50, M6, M7 with 8/16/32(??) MBs of VRAM - 
        Novell bug 204882 + along with lots of ubuntu ones */
@@ -1431,7 +1453,7 @@ static void RADEONInitMemoryMap(ScrnInfoPtr pScrn)
     }
 #endif
 
-    {
+    if (info->ChipFamily != CHIP_FAMILY_RS690) {
 	if (info->IsIGP)
 	    info->mc_fb_location = INREG(RADEON_NB_TOM);
 	else
@@ -1626,7 +1648,9 @@ static Bool RADEONPreInitVRAM(ScrnInfoPtr pScrn)
     MessageType    from = X_PROBED;
     CARD32         accessible, bar_size;
 
-    if ((info->IsIGP)) {
+    if (info->ChipFamily == CHIP_FAMILY_RS690) {
+	pScrn->videoRam = INREG(RADEON_CONFIG_MEMSIZE);
+    } else if (info->IsIGP) {
         CARD32 tom = INREG(RADEON_NB_TOM);
 
 	pScrn->videoRam = (((tom >> 16) -
diff --git a/src/radeon_reg.h b/src/radeon_reg.h
index d1ef0a9..09be229 100644
--- a/src/radeon_reg.h
+++ b/src/radeon_reg.h
@@ -3272,6 +3272,15 @@
 #define RADEON_RS480_UNK_e38			0xe38
 #define RADEON_RS480_UNK_e3c			0xe3c
 
+#define RS690_MC_INDEX				0x78
+#	define RS690_MC_INDEX_MASK		0x1ff
+#	define RS690_MC_INDEX_WR_EN		(1 << 9)
+#	define RS690_MC_INDEX_WR_ACK		0x7f
+#define RS690_MC_DATA				0x7c
+
+#define RS690_MC_FB_LOCATION			0x100
+#define RS690_MC_AGP_LOCATION			0x101
+#define RS690_MC_AGP_BASE			0x102
 
 #define AVIVO_MC_INDEX						0x0070
 #define R520_MC_STATUS 0x00


More information about the xorg-commit mailing list