xf86-video-ati: Branch 'master' - 4 commits
Alex Deucher
agd5f at kemper.freedesktop.org
Tue Mar 31 12:54:18 PDT 2009
src/radeon.h | 2 ++
src/radeon_bios.c | 7 +++++--
src/radeon_driver.c | 50 ++++++++++++++++++++++++++++++++++++++------------
src/radeon_macros.h | 4 +++-
src/radeon_reg.h | 3 +++
5 files changed, 51 insertions(+), 15 deletions(-)
New commits:
commit 0c6f20a9404c6a4210c5180bdca61c13fc186754
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Mar 31 15:51:11 2009 -0400
Add PCIE register accessors
diff --git a/src/radeon.h b/src/radeon.h
index 2b354ae..d488429 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -1056,8 +1056,10 @@ extern RADEONEntPtr RADEONEntPriv(ScrnInfoPtr pScrn);
extern int RADEONMinBits(int val);
extern unsigned RADEONINMC(ScrnInfoPtr pScrn, int addr);
extern unsigned RADEONINPLL(ScrnInfoPtr pScrn, int addr);
+extern unsigned RADEONINPCIE(ScrnInfoPtr pScrn, int addr);
extern void RADEONOUTMC(ScrnInfoPtr pScrn, int addr, uint32_t data);
extern void RADEONOUTPLL(ScrnInfoPtr pScrn, int addr, uint32_t data);
+extern void RADEONOUTPCIE(ScrnInfoPtr pScrn, int addr, uint32_t data);
extern void RADEONPllErrataAfterData(RADEONInfoPtr info);
extern void RADEONPllErrataAfterIndex(RADEONInfoPtr info);
extern void RADEONWaitForVerticalSync(ScrnInfoPtr pScrn);
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index b0b2e77..8673f5e 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -668,6 +668,29 @@ void RADEONOUTMC(ScrnInfoPtr pScrn, int addr, uint32_t data)
}
}
+/* Read PCIE register */
+unsigned RADEONINPCIE(ScrnInfoPtr pScrn, int addr)
+{
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ unsigned char *RADEONMMIO = info->MMIO;
+ CARD32 data;
+
+ OUTREG(RADEON_PCIE_INDEX, addr & 0xff);
+ data = INREG(RADEON_PCIE_DATA);
+
+ return data;
+}
+
+/* Write PCIE register */
+void RADEONOUTPCIE(ScrnInfoPtr pScrn, int addr, uint32_t data)
+{
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ unsigned char *RADEONMMIO = info->MMIO;
+
+ OUTREG(RADEON_PCIE_INDEX, ((addr) & 0xff));
+ OUTREG(RADEON_PCIE_DATA, data);
+}
+
static Bool radeon_get_mc_idle(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
diff --git a/src/radeon_macros.h b/src/radeon_macros.h
index 387e5f5..b7056b0 100644
--- a/src/radeon_macros.h
+++ b/src/radeon_macros.h
@@ -152,7 +152,9 @@ do { \
} while (0)
#define INMC(pScrn, addr) RADEONINMC(pScrn, addr)
-
#define OUTMC(pScrn, addr, val) RADEONOUTMC(pScrn, addr, val)
+#define INPCIE(pScrn, addr) RADEONINPCIE(pScrn, addr)
+#define OUTPCIE(pScrn, addr, val) RADEONOUTPCIE(pScrn, addr, val
+
#endif
diff --git a/src/radeon_reg.h b/src/radeon_reg.h
index e0d89af..a130794 100644
--- a/src/radeon_reg.h
+++ b/src/radeon_reg.h
@@ -274,6 +274,9 @@
#define RADEON_BUS_CNTL1 0x0034
# define RADEON_BUS_WAIT_ON_LOCK_EN (1 << 4)
+#define RADEON_PCIE_INDEX 0x0030
+#define RADEON_PCIE_DATA 0x0034
+
#define RADEON_CACHE_CNTL 0x1724
#define RADEON_CACHE_LINE 0x0f0c /* PCI */
#define RADEON_CAPABILITIES_ID 0x0f50 /* PCI */
commit 229d4e20e5adcdf9207944c19ca721477936ff02
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Mar 31 15:39:42 2009 -0400
Unify mc_idle()
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index fffb924..b0b2e77 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -668,7 +668,7 @@ void RADEONOUTMC(ScrnInfoPtr pScrn, int addr, uint32_t data)
}
}
-static Bool avivo_get_mc_idle(ScrnInfoPtr pScrn)
+static Bool radeon_get_mc_idle(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
unsigned char *RADEONMMIO = info->MMIO;
@@ -694,11 +694,21 @@ static Bool avivo_get_mc_idle(ScrnInfoPtr pScrn)
return TRUE;
else
return FALSE;
- } else {
+ } else if (info->ChipFamily >= CHIP_FAMILY_R520) {
if (INMC(pScrn, R520_MC_STATUS) & R520_MC_STATUS_IDLE)
return TRUE;
else
return FALSE;
+ } else if (IS_R300_VARIANT) {
+ if (INREG(RADEON_MC_STATUS) & R300_MC_IDLE)
+ return TRUE;
+ else
+ return FALSE;
+ } else {
+ if (INREG(RADEON_MC_STATUS) & RADEON_MC_IDLE)
+ return TRUE;
+ else
+ return FALSE;
}
}
@@ -3821,7 +3831,7 @@ void RADEONRestoreMemMapRegisters(ScrnInfoPtr pScrn,
usleep(10000);
timeout = 0;
- while (!(avivo_get_mc_idle(pScrn))) {
+ while (!(radeon_get_mc_idle(pScrn))) {
if (++timeout > 1000000) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Timeout trying to update memory controller settings !\n");
@@ -3861,7 +3871,7 @@ void RADEONRestoreMemMapRegisters(ScrnInfoPtr pScrn,
if (mc_fb_loc != restore->mc_fb_location ||
mc_agp_loc != restore->mc_agp_location) {
uint32_t crtc_ext_cntl, crtc_gen_cntl, crtc2_gen_cntl=0, ov0_scale_cntl;
- uint32_t old_mc_status, status_idle;
+ uint32_t old_mc_status;
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
" Map Changed ! Applying ...\n");
@@ -3900,15 +3910,8 @@ void RADEONRestoreMemMapRegisters(ScrnInfoPtr pScrn,
/* Make sure the chip settles down (paranoid !) */
usleep(100000);
-
- /* Wait for MC idle */
- if (IS_R300_VARIANT)
- status_idle = R300_MC_IDLE;
- else
- status_idle = RADEON_MC_IDLE;
-
timeout = 0;
- while (!(INREG(RADEON_MC_STATUS) & status_idle)) {
+ while (!(radeon_get_mc_idle(pScrn))) {
if (++timeout > 1000000) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Timeout trying to update memory controller settings !\n");
commit f44b486848094b75479abef61c1aa075aede835c
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Mar 31 15:33:11 2009 -0400
COMBIS: Clarify case 0 for LCD DDC table
diff --git a/src/radeon_bios.c b/src/radeon_bios.c
index 432e323..9b5cb88 100644
--- a/src/radeon_bios.c
+++ b/src/radeon_bios.c
@@ -740,6 +740,9 @@ static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
if (tmp1) {
DDCType = tmp1;
switch (DDCType) {
+ case DDC_NONE_DETECTED:
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "No DDC for LCD\n");
+ break;
case DDC_MONID:
info->BiosConnector[4].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_MONID);
break;
commit e6f3c48899a92174a55f6fe7327412bc88039d87
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Mar 31 15:30:40 2009 -0400
COMBIOS: fix default sclk/mclk from bios
diff --git a/src/radeon_bios.c b/src/radeon_bios.c
index 6fc0cf4..432e323 100644
--- a/src/radeon_bios.c
+++ b/src/radeon_bios.c
@@ -973,8 +973,8 @@ Bool RADEONGetClockInfoFromBIOS (ScrnInfoPtr pScrn)
pll->xclk = RADEON_BIOS16(pll_info_block + 0x08);
- info->sclk = RADEON_BIOS16(pll_info_block + 8) / 100.0;
- info->mclk = RADEON_BIOS16(pll_info_block + 10) / 100.0;
+ info->sclk = RADEON_BIOS16(pll_info_block + 10) / 100.0;
+ info->mclk = RADEON_BIOS16(pll_info_block + 8) / 100.0;
}
if (info->sclk == 0) info->sclk = 200;
More information about the xorg-commit
mailing list