configure.ac | 5 man/Makefile.am | 1 man/radeon.man | 8 src/Makefile.am | 3 src/ati_pciids_gen.h | 19 + src/atombios_crtc.c | 173 +++++++++---- src/atombios_output.c | 333 ++++++++++++++++++++++++-- src/legacy_crtc.c | 19 - src/pcidb/ati_pciids.csv | 31 +- src/radeon.h | 12 src/radeon_atombios.c | 23 + src/radeon_bios.c | 27 ++ src/radeon_chipinfo_gen.h | 19 + src/radeon_chipset_gen.h | 31 +- src/radeon_commonfuncs.c | 10 src/radeon_crtc.c | 53 +++- src/radeon_driver.c | 479 ++++++++++++++++++++++++++++---------- src/radeon_exa_funcs.c | 2 src/radeon_exa_render.c | 8 src/radeon_pci_chipset_gen.h | 19 + src/radeon_pci_device_match_gen.h | 19 + src/radeon_probe.c | 2 src/radeon_probe.h | 28 +- src/radeon_textured_videofuncs.c | 8 src/theatre.c | 32 +- src/theatre.h | 70 ++--- src/theatre200.c | 28 +- src/theatre_detect.c | 2 src/theatre_detect.h | 4 29 files changed, 1134 insertions(+), 334 deletions(-)
New commits: commit 38606b08b68842fbcc81c233009c1117269f3be9 Author: Matthieu Herrb <[EMAIL PROTECTED]> Date: Sat Mar 8 23:22:59 2008 +0100 Makefile.am: nuke RCS Id diff --git a/man/Makefile.am b/man/Makefile.am index 2d11006..93ff52c 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -1,4 +1,3 @@ -# $Id$ # # Copyright 2005 Sun Microsystems, Inc. All rights reserved. # commit 9d710ee1a44cf2f3a948fbdbe17ef09521cbe744 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Fri Mar 7 15:09:14 2008 -0500 AVIVO: clean up some unused variables diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index ad7fd54..7c628bf 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -401,27 +401,25 @@ atombios_crtc_mode_set(xf86CrtcPtr crtc, adjusted_mode->CrtcHTotal, adjusted_mode->CrtcVTotal, adjusted_mode->Flags); if (IS_AVIVO_VARIANT) { - radeon_crtc->fb_width = mode->CrtcHDisplay; - radeon_crtc->fb_height = pScrn->virtualY; - radeon_crtc->fb_pitch = mode->CrtcHDisplay; - radeon_crtc->fb_length = radeon_crtc->fb_pitch * radeon_crtc->fb_height * 4; + CARD32 fb_format; + switch (crtc->scrn->bitsPerPixel) { case 15: - radeon_crtc->fb_format = AVIVO_D1GRPH_CONTROL_DEPTH_16BPP | AVIVO_D1GRPH_CONTROL_16BPP_ARGB1555; + fb_format = AVIVO_D1GRPH_CONTROL_DEPTH_16BPP | AVIVO_D1GRPH_CONTROL_16BPP_ARGB1555; break; case 16: - radeon_crtc->fb_format = AVIVO_D1GRPH_CONTROL_DEPTH_16BPP | AVIVO_D1GRPH_CONTROL_16BPP_RGB565; + fb_format = AVIVO_D1GRPH_CONTROL_DEPTH_16BPP | AVIVO_D1GRPH_CONTROL_16BPP_RGB565; break; case 24: case 32: - radeon_crtc->fb_format = AVIVO_D1GRPH_CONTROL_DEPTH_32BPP | AVIVO_D1GRPH_CONTROL_32BPP_ARGB8888; + fb_format = AVIVO_D1GRPH_CONTROL_DEPTH_32BPP | AVIVO_D1GRPH_CONTROL_32BPP_ARGB8888; break; default: FatalError("Unsupported screen depth: %d\n", xf86GetDepth()); } if (info->tilingEnabled && (crtc->rotatedData == NULL)) { - radeon_crtc->fb_format |= AVIVO_D1GRPH_MACRO_ADDRESS_MODE; + fb_format |= AVIVO_D1GRPH_MACRO_ADDRESS_MODE; } if (radeon_crtc->crtc_id == 0) @@ -443,8 +441,7 @@ atombios_crtc_mode_set(xf86CrtcPtr crtc, OUTREG(AVIVO_D1GRPH_PRIMARY_SURFACE_ADDRESS + radeon_crtc->crtc_offset, fb_location); OUTREG(AVIVO_D1GRPH_SECONDARY_SURFACE_ADDRESS + radeon_crtc->crtc_offset, fb_location); - OUTREG(AVIVO_D1GRPH_CONTROL + radeon_crtc->crtc_offset, - radeon_crtc->fb_format); + OUTREG(AVIVO_D1GRPH_CONTROL + radeon_crtc->crtc_offset, fb_format); OUTREG(AVIVO_D1GRPH_SURFACE_OFFSET_X + radeon_crtc->crtc_offset, 0); OUTREG(AVIVO_D1GRPH_SURFACE_OFFSET_Y + radeon_crtc->crtc_offset, 0); diff --git a/src/radeon_probe.h b/src/radeon_probe.h index 4ba6a32..ae24003 100644 --- a/src/radeon_probe.h +++ b/src/radeon_probe.h @@ -191,13 +191,6 @@ typedef struct _RADEONCrtcPrivateRec { CARD8 lut_r[256], lut_g[256], lut_b[256]; uint32_t crtc_offset; - int h_total, h_blank, h_sync_wid, h_sync_pol; - int v_total, v_blank, v_sync_wid, v_sync_pol; - int fb_format, fb_length; - int fb_pitch, fb_width, fb_height; - INT16 cursor_x; - INT16 cursor_y; - int can_tile; } RADEONCrtcPrivateRec, *RADEONCrtcPrivatePtr; commit c28c30c9f3d7bfebfd56a5c982c96f0090982054 Author: Alex Deucher <[EMAIL PROTECTED]> Date: Fri Mar 7 14:10:49 2008 -0500 RADEON: Fix crash in last commit diff --git a/src/legacy_crtc.c b/src/legacy_crtc.c index 63f536c..0689114 100644 --- a/src/legacy_crtc.c +++ b/src/legacy_crtc.c @@ -1665,7 +1665,7 @@ legacy_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, Bool tilingChanged = FALSE; if (info->allowColorTiling) { - radeon_crtc->can_tile = (adjusted_mode->Flags & (V_DBLSCAN | V_INTERLACE)) ? FALSE : TRUE; + radeon_crtc->can_tile = (adjusted_mode->Flags & (V_DBLSCAN | V_INTERLACE)) ? FALSE : TRUE; tilingChanged = RADEONSetTiling(pScrn); } diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c index 3628d96..87514b0 100644 --- a/src/radeon_crtc.c +++ b/src/radeon_crtc.c @@ -537,11 +537,12 @@ static const xf86CrtcFuncsRec radeon_crtc_funcs = { Bool RADEONAllocateControllers(ScrnInfoPtr pScrn, int mask) { RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); + RADEONInfoPtr info = RADEONPTR(pScrn); if (mask & 1) { if (pRADEONEnt->Controller[0]) return TRUE; - + pRADEONEnt->pCrtc[0] = xf86CrtcCreate(pScrn, &radeon_crtc_funcs); if (!pRADEONEnt->pCrtc[0]) return FALSE; @@ -553,16 +554,20 @@ Bool RADEONAllocateControllers(ScrnInfoPtr pScrn, int mask) pRADEONEnt->pCrtc[0]->driver_private = pRADEONEnt->Controller[0]; pRADEONEnt->Controller[0]->crtc_id = 0; pRADEONEnt->Controller[0]->crtc_offset = 0; + if (info->allowColorTiling) + pRADEONEnt->Controller[0]->can_tile = 1; + else + pRADEONEnt->Controller[0]->can_tile = 0; } if (mask & 2) { if (!pRADEONEnt->HasCRTC2) return TRUE; - + pRADEONEnt->pCrtc[1] = xf86CrtcCreate(pScrn, &radeon_crtc_funcs); if (!pRADEONEnt->pCrtc[1]) return FALSE; - + pRADEONEnt->Controller[1] = xnfcalloc(sizeof(RADEONCrtcPrivateRec), 1); if (!pRADEONEnt->Controller[1]) { @@ -573,6 +578,10 @@ Bool RADEONAllocateControllers(ScrnInfoPtr pScrn, int mask) pRADEONEnt->pCrtc[1]->driver_private = pRADEONEnt->Controller[1]; pRADEONEnt->Controller[1]->crtc_id = 1; pRADEONEnt->Controller[1]->crtc_offset = AVIVO_D2CRTC_H_TOTAL - AVIVO_D1CRTC_H_TOTAL; + if (info->allowColorTiling) + pRADEONEnt->Controller[1]->can_tile = 1; + else + pRADEONEnt->Controller[1]->can_tile = 0; } return TRUE; @@ -738,9 +747,11 @@ RADEONSetTiling(ScrnInfoPtr pScrn) crtc = xf86_config->crtc[c]; radeon_crtc = crtc->driver_private; - if (!radeon_crtc->can_tile) - can_tile = 0; - } + if (crtc->enabled) { + if (!radeon_crtc->can_tile) + can_tile = 0; + } + } if (info->tilingEnabled != can_tile) changed = TRUE; @@ -748,7 +759,7 @@ RADEONSetTiling(ScrnInfoPtr pScrn) #ifdef XF86DRI if (info->directRenderingEnabled && (info->tilingEnabled != can_tile)) { RADEONSAREAPrivPtr pSAREAPriv; - if (RADEONDRISetParam(pScrn, RADEON_SETPARAM_SWITCH_TILING, (info->tilingEnabled ? 1 : 0)) < 0) + if (RADEONDRISetParam(pScrn, RADEON_SETPARAM_SWITCH_TILING, (can_tile ? 1 : 0)) < 0) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[drm] failed changing tiling status\n"); /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */ diff --git a/src/radeon_driver.c b/src/radeon_driver.c index f7fc191..de81b2d 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -2220,7 +2220,7 @@ static void RADEONPreInitColorTiling(ScrnInfoPtr pScrn) info->pKernelDRMVersion->version_minor, info->pKernelDRMVersion->version_patchlevel); info->allowColorTiling = FALSE; - return; + return; } #endif /* XF86DRI */ @@ -2687,7 +2687,7 @@ Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags) if (!RADEONPreInitWeight(pScrn)) goto fail; - info->DispPriority = 1; + info->DispPriority = 1; if ((s = xf86GetOptValString(info->Options, OPTION_DISP_PRIORITY))) { if (strcmp(s, "AUTO") == 0) { info->DispPriority = 1; @@ -2696,7 +2696,7 @@ Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags) } else if (strcmp(s, "HIGH") == 0) { info->DispPriority = 2; } else - info->DispPriority = 1; + info->DispPriority = 1; } if (!RADEONPreInitInt10(pScrn, &pInt10)) commit c3a3635865e380c784a226c8ead069d4716d6b75 Author: Dave Airlie <[EMAIL PROTECTED]> Date: Thu Mar 6 20:17:45 2008 -0500 RADEON: fix tiling/interlaced interaction with randr 1.2 diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index a4703c5..ad7fd54 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -330,22 +330,13 @@ atombios_crtc_mode_set(xf86CrtcPtr crtc, int need_tv_timings = 0; int i, ret; SET_CRTC_TIMING_PARAMETERS_PS_ALLOCATION crtc_timing; + Bool tilingChanged = FALSE; memset(&crtc_timing, 0, sizeof(crtc_timing)); if (info->allowColorTiling) { - info->tilingEnabled = (adjusted_mode->Flags & (V_DBLSCAN | V_INTERLACE)) ? FALSE : TRUE; -#ifdef XF86DRI - if (info->directRenderingEnabled && (info->tilingEnabled != tilingOld)) { - RADEONSAREAPrivPtr pSAREAPriv; - if (RADEONDRISetParam(pScrn, RADEON_SETPARAM_SWITCH_TILING, (info->tilingEnabled ? 1 : 0)) < 0) - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] failed changing tiling status\n"); - /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */ - pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]); - info->tilingEnabled = pSAREAPriv->tiling_enabled ? TRUE : FALSE; - } -#endif + radeon_crtc->can_tile = (adjusted_mode->Flags & (V_DBLSCAN | V_INTERLACE)) ? FALSE : TRUE; + tilingChanged = RADEONSetTiling(pScrn); } for (i = 0; i < xf86_config->num_output; i++) { @@ -487,7 +478,7 @@ atombios_crtc_mode_set(xf86CrtcPtr crtc, atombios_set_crtc_timing(info->atomBIOS, &crtc_timing); - if (info->tilingEnabled != tilingOld) { + if (tilingChanged) { /* need to redraw front buffer, I guess this can be considered a hack ? */ /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */ if (pScrn->pScreen) diff --git a/src/legacy_crtc.c b/src/legacy_crtc.c index dec14a4..63f536c 100644 --- a/src/legacy_crtc.c +++ b/src/legacy_crtc.c @@ -1658,26 +1658,15 @@ legacy_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private; RADEONInfoPtr info = RADEONPTR(pScrn); - Bool tilingOld = info->tilingEnabled; int i = 0; double dot_clock = 0; int pll_flags = RADEON_PLL_LEGACY; Bool update_tv_routing = FALSE; - + Bool tilingChanged = FALSE; if (info->allowColorTiling) { - info->tilingEnabled = (adjusted_mode->Flags & (V_DBLSCAN | V_INTERLACE)) ? FALSE : TRUE; -#ifdef XF86DRI - if (info->directRenderingEnabled && (info->tilingEnabled != tilingOld)) { - RADEONSAREAPrivPtr pSAREAPriv; - if (RADEONDRISetParam(pScrn, RADEON_SETPARAM_SWITCH_TILING, (info->tilingEnabled ? 1 : 0)) < 0) - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] failed changing tiling status\n"); - /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */ - pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]); - info->tilingEnabled = pSAREAPriv->tiling_enabled ? TRUE : FALSE; - } -#endif + radeon_crtc->can_tile = (adjusted_mode->Flags & (V_DBLSCAN | V_INTERLACE)) ? FALSE : TRUE; + tilingChanged = RADEONSetTiling(pScrn); } for (i = 0; i < xf86_config->num_output; i++) { @@ -1771,7 +1760,7 @@ legacy_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, if (info->DispPriority) RADEONInitDispBandwidth(pScrn); - if (info->tilingEnabled != tilingOld) { + if (tilingChanged) { /* need to redraw front buffer, I guess this can be considered a hack ? */ /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */ if (pScrn->pScreen) diff --git a/src/radeon.h b/src/radeon.h index 57786c8..fe45428 100644 --- a/src/radeon.h +++ b/src/radeon.h @@ -850,7 +850,7 @@ extern void RADEONGetPanelInfo(ScrnInfoPtr pScrn); extern void RADEONUnblank(ScrnInfoPtr pScrn); extern void RADEONUnblank(ScrnInfoPtr pScrn); extern void RADEONBlank(ScrnInfoPtr pScrn); - +extern Bool RADEONSetTiling(ScrnInfoPtr pScrn); extern Bool RADEONAllocateControllers(ScrnInfoPtr pScrn, int mask); extern Bool RADEONAllocateConnectors(ScrnInfoPtr pScrn); diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c index 7164138..3628d96 100644 --- a/src/radeon_crtc.c +++ b/src/radeon_crtc.c @@ -723,3 +723,39 @@ RADEONUnblank(ScrnInfoPtr pScrn) } } +Bool +RADEONSetTiling(ScrnInfoPtr pScrn) +{ + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); + RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONCrtcPrivatePtr radeon_crtc; + xf86CrtcPtr crtc; + int c; + int can_tile = 1; + Bool changed = FALSE; + + for (c = 0; c < xf86_config->num_crtc; c++) { + crtc = xf86_config->crtc[c]; + radeon_crtc = crtc->driver_private; + + if (!radeon_crtc->can_tile) + can_tile = 0; + } + + if (info->tilingEnabled != can_tile) + changed = TRUE; + +#ifdef XF86DRI + if (info->directRenderingEnabled && (info->tilingEnabled != can_tile)) { + RADEONSAREAPrivPtr pSAREAPriv; + if (RADEONDRISetParam(pScrn, RADEON_SETPARAM_SWITCH_TILING, (info->tilingEnabled ? 1 : 0)) < 0) + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] failed changing tiling status\n"); + /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */ + pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]); + info->tilingEnabled = pSAREAPriv->tiling_enabled ? TRUE : FALSE; + } +#endif + + return changed; +} diff --git a/src/radeon_probe.h b/src/radeon_probe.h index 935b6b8..4ba6a32 100644 --- a/src/radeon_probe.h +++ b/src/radeon_probe.h @@ -197,6 +197,8 @@ typedef struct _RADEONCrtcPrivateRec { int fb_pitch, fb_width, fb_height; INT16 cursor_x; INT16 cursor_y; + + int can_tile; } RADEONCrtcPrivateRec, *RADEONCrtcPrivatePtr; typedef struct { commit df1b94dc4eb1f35b636dbf2ec0ab1c2da9937c0d Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 19:22:08 2008 -0500 DCE3: Ignore outputs with DIN connectors for now diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c index add81d0..4494775 100644 --- a/src/radeon_atombios.c +++ b/src/radeon_atombios.c @@ -1564,7 +1564,13 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn) break; case ENCODER_OBJECT_ID_INTERNAL_DAC1: case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1: - info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_CRT1_INDEX); + if (info->BiosConnector[i].ConnectorType == CONNECTOR_DIN || + info->BiosConnector[i].ConnectorType == CONNECTOR_STV || + info->BiosConnector[i].ConnectorType == CONNECTOR_CTV) + //info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX); + info->BiosConnector[i].valid = FALSE; + else + info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_CRT1_INDEX); info->BiosConnector[i].DACType = DAC_PRIMARY; break; case ENCODER_OBJECT_ID_INTERNAL_DAC2: commit cb2dc19387c7b6494c47c76d683cf38a48700768 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 18:33:12 2008 -0500 AVIVO: fix typo from a previous commit Leave tv dpms hook disabled or you may get bad interactions with the shared DAC diff --git a/src/atombios_output.c b/src/atombios_output.c index 06e5a77..7ae004c 100644 --- a/src/atombios_output.c +++ b/src/atombios_output.c @@ -720,8 +720,8 @@ atombios_output_dpms(xf86OutputPtr output, int mode) ErrorF("AGD: cv dpms\n"); if (radeon_output->devices & ATOM_DEVICE_CV_SUPPORT) atombios_device_dpms(output, ATOM_DEVICE_CV_SUPPORT, mode); - } else if (radeon_output->MonType == MT_STV || - radeon_output->MonType == MT_CTV) { + } else if (0 /*radeon_output->MonType == MT_STV || + radeon_output->MonType == MT_CTV*/) { ErrorF("AGD: tv dpms\n"); if (radeon_output->devices & ATOM_DEVICE_TV1_SUPPORT) atombios_device_dpms(output, ATOM_DEVICE_TV1_SUPPORT, mode); commit 77355de48057e5e7e0d5b3f3cf5a7a92220a53b1 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 17:46:00 2008 -0500 AVIVO: don't add outputs for invalid connectors diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c index 91160f9..add81d0 100644 --- a/src/radeon_atombios.c +++ b/src/radeon_atombios.c @@ -1530,7 +1530,10 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn) ErrorF("object id %04x %02x\n", obj_id, SrcDstTable->ucNumberOfSrc); info->BiosConnector[i].ConnectorType = object_connector_convert[obj_id]; - info->BiosConnector[i].valid = TRUE; + if (info->BiosConnector[i].ConnectorType == CONNECTOR_NONE) + info->BiosConnector[i].valid = FALSE; + else + info->BiosConnector[i].valid = TRUE; info->BiosConnector[i].devices = 0; for (j = 0; j < SrcDstTable->ucNumberOfSrc; j++) { commit 594743a99811a8b0f391412892414fcd158eeb56 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 17:30:21 2008 -0500 AVIVO: fix up memsize detection for IGP chips diff --git a/src/radeon_driver.c b/src/radeon_driver.c index b46f09c..04c9d3a 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -1453,24 +1453,20 @@ static Bool RADEONPreInitVRAM(ScrnInfoPtr pScrn) MessageType from = X_PROBED; CARD32 accessible, bar_size; - if ((info->ChipFamily == CHIP_FAMILY_RS690) || - (info->ChipFamily == CHIP_FAMILY_RS740)) { - pScrn->videoRam = INREG(RADEON_CONFIG_MEMSIZE); - } else if (info->IsIGP) { - CARD32 tom = INREG(RADEON_NB_TOM); + if ((!IS_AVIVO_VARIANT) && info->IsIGP) { + CARD32 tom = INREG(RADEON_NB_TOM); pScrn->videoRam = (((tom >> 16) - (tom & 0xffff) + 1) << 6); OUTREG(RADEON_CONFIG_MEMSIZE, pScrn->videoRam * 1024); } else { - if (info->ChipFamily >= CHIP_FAMILY_R600) pScrn->videoRam = INREG(R600_CONFIG_MEMSIZE) / 1024; else { /* Read VRAM size from card */ pScrn->videoRam = INREG(RADEON_CONFIG_MEMSIZE) / 1024; - + /* Some production boards of m6 will return 0 if it's 8 MB */ if (pScrn->videoRam == 0) { pScrn->videoRam = 8192; commit 5b7875d0cbfbdbcd1515c4e942d30de298b49dff Author: Doug Chapman <[EMAIL PROTECTED]> Date: Thu Mar 6 14:31:06 2008 -0500 Bug #14826: Fix a bogus check around xf86SetOperatingState. diff --git a/src/radeon_driver.c b/src/radeon_driver.c index 7b9c242..b0daa7c 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -2639,8 +2639,7 @@ Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags) if (xf86RegisterResources(info->pEnt->index, 0, ResExclusive)) goto fail; - if (xf86SetOperatingState(resVga, info->pEnt->index, ResUnusedOpr)) - goto fail; + xf86SetOperatingState(resVga, info->pEnt->index, ResUnusedOpr); pScrn->racMemFlags = RAC_FB | RAC_COLORMAP | RAC_VIEWPORT | RAC_CURSOR; pScrn->monitor = pScrn->confScreen->monitor; commit 41171c25cd235bafad26bcbabced16ead4b8c54b Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 14:05:18 2008 -0500 DCE3.0: add support for crtc memreq table diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index f144e42..a4703c5 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -48,7 +48,7 @@ #include "sarea.h" #endif -AtomBiosResult +static AtomBiosResult atombios_enable_crtc(atomBiosHandlePtr atomBIOS, int crtc, int state) { ENABLE_CRTC_PS_ALLOCATION crtc_data; @@ -71,7 +71,30 @@ atombios_enable_crtc(atomBiosHandlePtr atomBIOS, int crtc, int state) return ATOM_NOT_IMPLEMENTED; } -AtomBiosResult +static AtomBiosResult +atombios_enable_crtc_memreq(atomBiosHandlePtr atomBIOS, int crtc, int state) +{ + ENABLE_CRTC_PS_ALLOCATION crtc_data; + AtomBiosArgRec data; + unsigned char *space; + + crtc_data.ucCRTC = crtc; + crtc_data.ucEnable = state; + + data.exec.index = GetIndexIntoMasterTable(COMMAND, EnableCRTCMemReq); + data.exec.dataSpace = (void *)&space; + data.exec.pspace = &crtc_data; + + if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) { + ErrorF("%s CRTC memreq %d success\n", state? "Enable":"Disable", crtc); + return ATOM_SUCCESS ; + } + + ErrorF("Enable CRTC memreq failed\n"); + return ATOM_NOT_IMPLEMENTED; +} + +static AtomBiosResult atombios_blank_crtc(atomBiosHandlePtr atomBIOS, int crtc, int state) { BLANK_CRTC_PS_ALLOCATION crtc_data; @@ -95,19 +118,6 @@ atombios_blank_crtc(atomBiosHandlePtr atomBIOS, int crtc, int state) return ATOM_NOT_IMPLEMENTED; } -#if 0 -static void -atombios_crtc_enable(xf86CrtcPtr crtc, int enable) -{ - RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private; - RADEONInfoPtr info = RADEONPTR(crtc->scrn); - - atombios_enable_crtc(info->atomBIOS, radeon_crtc->crtc_id, enable); - - //TODOavivo_wait_idle(avivo); -} -#endif - void atombios_crtc_dpms(xf86CrtcPtr crtc, int mode) { @@ -117,12 +127,16 @@ atombios_crtc_dpms(xf86CrtcPtr crtc, int mode) case DPMSModeOn: case DPMSModeStandby: case DPMSModeSuspend: + if (IS_DCE3_VARIANT) + atombios_enable_crtc_memreq(info->atomBIOS, radeon_crtc->crtc_id, 1); atombios_enable_crtc(info->atomBIOS, radeon_crtc->crtc_id, 1); atombios_blank_crtc(info->atomBIOS, radeon_crtc->crtc_id, 0); break; case DPMSModeOff: atombios_blank_crtc(info->atomBIOS, radeon_crtc->crtc_id, 1); atombios_enable_crtc(info->atomBIOS, radeon_crtc->crtc_id, 0); + if (IS_DCE3_VARIANT) + atombios_enable_crtc_memreq(info->atomBIOS, radeon_crtc->crtc_id, 0); break; } } commit 766f464dfdfccadef23e4232f2bce5db22195513 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 13:35:43 2008 -0500 RADEON: take 2 on proper pragma pack support for bsds See bug 14594. Based on suggestion by Henry Zhao diff --git a/configure.ac b/configure.ac index 8321915..b644348 100644 --- a/configure.ac +++ b/configure.ac @@ -233,14 +233,9 @@ fi AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes) case $host_os in - *freebsd*) - AC_DEFINE(ALT_PRAGMA_PACK, 1, [Use alternate pragma pack]) ;; - *netbsd*) - AC_DEFINE(ALT_PRAGMA_PACK, 1, [Use alternate pragma pack]) ;; - *openbsd*) - AC_DEFINE(ALT_PRAGMA_PACK, 1, [Use alternate pragma pack]) ;; + *linux*) + AC_DEFINE(FGL_LINUX, 1, [Use linux pragma pack]) ;; esac -AM_CONDITIONAL(ALT_PRAGMA_PACK, test "x$ALT_PRAGMA_PACK" = xyes) AC_SUBST([XORG_CFLAGS]) AC_SUBST([DRI_CFLAGS]) diff --git a/src/Makefile.am b/src/Makefile.am index 6fe0695..5333495 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -66,11 +66,8 @@ if USE_EXA RADEON_EXA_SOURCES = radeon_exa.c endif -if ALT_PRAGMA_PACK AM_CFLAGS = @XORG_CFLAGS@ @DRI_CFLAGS@ @XMODES_CFLAGS@ -DDISABLE_EASF -DENABLE_ALL_SERVICE_FUNCTIONS -DATOM_BIOS -DATOM_BIOS_PARSER -DDRIVER_PARSER -else -AM_CFLAGS = @XORG_CFLAGS@ @DRI_CFLAGS@ @XMODES_CFLAGS@ -DDISABLE_EASF -DENABLE_ALL_SERVICE_FUNCTIONS -DATOM_BIOS -DATOM_BIOS_PARSER -DFGL_LINUX -DDRIVER_PARSER -endif + INCLUDES = -I$(srcdir)/AtomBios/includes ati_drv_la_LTLIBRARIES = ati_drv.la diff --git a/src/atombios_output.c b/src/atombios_output.c index 8e0776d..06e5a77 100644 --- a/src/atombios_output.c +++ b/src/atombios_output.c @@ -398,7 +398,6 @@ atombios_output_dig1_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode disp_data.ucAction = ATOM_TRANSMITTER_ACTION_ENABLE; disp_data.usPixelClock = mode->Clock / 10; - // not sure on clk src... disp_data.ucConfig = ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER | ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; if (mode->Clock > 165000) disp_data.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK | @@ -476,7 +475,6 @@ atombios_output_dig2_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode disp_data.ucAction = ATOM_TRANSMITTER_ACTION_ENABLE; disp_data.usPixelClock = mode->Clock / 10; - // not sure on clk src... disp_data.ucConfig = ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER | ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; if (mode->Clock > 165000) disp_data.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK | commit a842ce9ca6494e724a7828cead9b61c9ef02b6aa Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 12:32:18 2008 -0500 DCE3.0: Minor fixups diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index 8f76e30..f144e42 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -1,10 +1,5 @@ /* * Copyright © 2007 Red Hat, Inc. - * - * PLL code is: - * Copyright 2007 Luc Verhaegen <[EMAIL PROTECTED]> - * Copyright 2007 Matthias Hopf <[EMAIL PROTECTED]> - * Copyright 2007 Egbert Eich <[EMAIL PROTECTED]> * Copyright 2007 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -28,6 +23,7 @@ * * Authors: * Dave Airlie <[EMAIL PROTECTED]> + * Alex Deucher <[EMAIL PROTECTED]> * */ /* diff --git a/src/atombios_output.c b/src/atombios_output.c index 81740a8..8e0776d 100644 --- a/src/atombios_output.c +++ b/src/atombios_output.c @@ -474,10 +474,10 @@ atombios_output_dig2_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode AtomBiosArgRec data; unsigned char *space; - disp_data.ucAction = ATOM_TRANSMITTER_ACTION_SETUP; + disp_data.ucAction = ATOM_TRANSMITTER_ACTION_ENABLE; disp_data.usPixelClock = mode->Clock / 10; // not sure on clk src... - disp_data.ucConfig = ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER | ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; + disp_data.ucConfig = ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER | ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; if (mode->Clock > 165000) disp_data.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK | ATOM_TRANSMITTER_CONFIG_LINKA_B | @@ -492,11 +492,8 @@ atombios_output_dig2_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode data.exec.pspace = &disp_data; if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) { - disp_data.ucAction = ATOM_TRANSMITTER_ACTION_ENABLE; - if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) { - ErrorF("Output DIG2 transmitter setup success\n"); - return ATOM_SUCCESS; - } + ErrorF("Output DIG2 transmitter setup success\n"); + return ATOM_SUCCESS; } ErrorF("Output DIG2 transmitter setup failed\n"); diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c index 3efe4c9..91160f9 100644 --- a/src/radeon_atombios.c +++ b/src/radeon_atombios.c @@ -1545,6 +1545,7 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn) break; case ENCODER_OBJECT_ID_INTERNAL_TMDS1: case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_DFP1_INDEX); info->BiosConnector[i].TMDSType = TMDS_INT; break; commit 8a1ba374033591c725a78923aa30829e4de2a5ae Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Thu Mar 6 09:53:51 2008 -0500 RADEON: option to override TVDAC adj values from bios with driver defaults If you have a washed out image on the tv dac, try this option. Option "DefaultTVDACAdj" "TRUE" diff --git a/man/radeon.man b/man/radeon.man index 86be965..ac6ea40 100644 --- a/man/radeon.man +++ b/man/radeon.man @@ -422,6 +422,14 @@ internal TMDS controller. The default is .B off. .TP +.BI "Option \*qDefaultTVDACAdj\*q \*q" boolean \*q +Use the default driver provided TVDAC Adj values rather than the ones +provided by the bios. This option has no effect on Mac cards. Enable +this option if you are having problems with a washed out display on +the secondary DAC. +The default is +.B off. +.TP .BI "Option \*qDRI\*q \*q" boolean \*q Enable DRI support. This option allows you to enable to disable the DRI. The default is diff --git a/src/radeon.h b/src/radeon.h index 787a851..57786c8 100644 --- a/src/radeon.h +++ b/src/radeon.h @@ -167,7 +167,8 @@ typedef enum { OPTION_TVDAC_LOAD_DETECT, OPTION_FORCE_TVOUT, OPTION_TVSTD, - OPTION_IGNORE_LID_STATUS + OPTION_IGNORE_LID_STATUS, + OPTION_DEFAULT_TVDAC_ADJ } RADEONOpts; diff --git a/src/radeon_bios.c b/src/radeon_bios.c index 3848e60..a32188d 100644 --- a/src/radeon_bios.c +++ b/src/radeon_bios.c @@ -620,6 +620,9 @@ Bool RADEONGetDAC2InfoFromBIOS (xf86OutputPtr output) if (!info->VBIOS) return FALSE; + if (xf86ReturnOptValBool(info->Options, OPTION_DEFAULT_TVDAC_ADJ, FALSE)) + return FALSE; + if (info->IsAtomBios) { /* not implemented yet */ return FALSE; diff --git a/src/radeon_driver.c b/src/radeon_driver.c index d1cbf49..b46f09c 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -221,6 +221,7 @@ static const OptionInfoRec RADEONOptions[] = { { OPTION_FORCE_TVOUT, "ForceTVOut", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_TVSTD, "TVStandard", OPTV_STRING, {0}, FALSE }, { OPTION_IGNORE_LID_STATUS, "IgnoreLidStatus", OPTV_BOOLEAN, {0}, FALSE }, + { OPTION_DEFAULT_TVDAC_ADJ, "DefaultTVDACAdj", OPTV_BOOLEAN, {0}, FALSE }, { -1, NULL, OPTV_NONE, {0}, FALSE } }; commit 0ed48f8f651a28e189f9fee8c6b593da0178d21c Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Wed Mar 5 18:41:01 2008 -0500 AVIVO: Initial support for DCE 3.0 using atombios DACs are working well, DIG support (DVI, HDMI, LVDS, etc.) still has some issues. diff --git a/src/ati_pciids_gen.h b/src/ati_pciids_gen.h index 330d1a9..b6b79c1 100644 --- a/src/ati_pciids_gen.h +++ b/src/ati_pciids_gen.h @@ -356,3 +356,22 @@ #define PCI_CHIP_RV630_958C 0x958C #define PCI_CHIP_RV630_958D 0x958D #define PCI_CHIP_RV630_958E 0x958E +#define PCI_CHIP_RV620_95C0 0x95C0 +#define PCI_CHIP_RV620_95C5 0x95C5 +#define PCI_CHIP_RV620_95C7 0x95C7 +#define PCI_CHIP_RV620_95C2 0x95C2 +#define PCI_CHIP_RV620_95C4 0x95C4 +#define PCI_CHIP_RV620_95CD 0x95CD +#define PCI_CHIP_RV620_95CE 0x95CE +#define PCI_CHIP_RV620_95CF 0x95CF +#define PCI_CHIP_RV635_9590 0x9590 +#define PCI_CHIP_RV635_9596 0x9596 +#define PCI_CHIP_RV635_9597 0x9597 +#define PCI_CHIP_RV635_9598 0x9598 +#define PCI_CHIP_RV635_9599 0x9599 +#define PCI_CHIP_RV635_9591 0x9591 +#define PCI_CHIP_RV635_9593 0x9593 +#define PCI_CHIP_RS780_9610 0x9610 +#define PCI_CHIP_RS780_9611 0x9611 +#define PCI_CHIP_RS780_9612 0x9612 +#define PCI_CHIP_RS780_9613 0x9613 diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index f7d9c37..8f76e30 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -155,12 +155,19 @@ atombios_crtc_set_pll(xf86CrtcPtr crtc, DisplayModePtr mode) { RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private; RADEONInfoPtr info = RADEONPTR(crtc->scrn); + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn); unsigned char *RADEONMMIO = info->MMIO; int index = GetIndexIntoMasterTable(COMMAND, SetPixelClock); CARD32 sclock = mode->Clock; CARD32 ref_div = 0, fb_div = 0, post_div = 0; - int major, minor; + int major, minor, i; SET_PIXEL_CLOCK_PS_ALLOCATION spc_param; + PIXEL_CLOCK_PARAMETERS_V2 *spc2_ptr; + PIXEL_CLOCK_PARAMETERS_V3 *spc3_ptr; + + xf86OutputPtr output; + RADEONOutputPrivatePtr radeon_output = NULL; + void *ptr; AtomBiosArgRec data; unsigned char *space; @@ -193,6 +200,20 @@ atombios_crtc_set_pll(xf86CrtcPtr crtc, DisplayModePtr mode) "crtc(%d) PLL : refdiv %u, fbdiv 0x%X(%u), pdiv %u\n", radeon_crtc->crtc_id, (unsigned int)ref_div, (unsigned int)fb_div, (unsigned int)fb_div, (unsigned int)post_div); + /* Can't really do cloning easily on DCE3 cards */ + for (i = 0; i < xf86_config->num_output; i++) { + output = xf86_config->output[i]; + if (output->crtc == crtc) { + radeon_output = output->driver_private; + break; + } + } + + if (radeon_output == NULL) { + xf86DrvMsg(crtc->scrn->scrnIndex, X_ERROR, "No output assigned to crtc!\n"); + return; + } + atombios_get_command_table_version(info->atomBIOS, index, &major, &minor); ErrorF("table is %d %d\n", major, minor); @@ -200,18 +221,66 @@ atombios_crtc_set_pll(xf86CrtcPtr crtc, DisplayModePtr mode) case 1: switch(minor) { case 1: - case 2: { - spc_param.sPCLKInput.usPixelClock = sclock; - spc_param.sPCLKInput.usRefDiv = ref_div; - spc_param.sPCLKInput.usFbDiv = fb_div; - spc_param.sPCLKInput.ucPostDiv = post_div; - spc_param.sPCLKInput.ucPpll = radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; - spc_param.sPCLKInput.ucCRTC = radeon_crtc->crtc_id; - spc_param.sPCLKInput.ucRefDivSrc = 1; + case 2: + spc2_ptr = &spc_param.sPCLKInput; + spc2_ptr->usPixelClock = sclock; + spc2_ptr->usRefDiv = ref_div; + spc2_ptr->usFbDiv = fb_div; + spc2_ptr->ucPostDiv = post_div; + spc2_ptr->ucPpll = radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; + spc2_ptr->ucCRTC = radeon_crtc->crtc_id; + spc2_ptr->ucRefDivSrc = 1; + ptr = &spc_param; + break; + case 3: + spc3_ptr = &spc_param.sPCLKInput; + + spc3_ptr->usPixelClock = sclock; + spc3_ptr->usRefDiv = ref_div; + spc3_ptr->usFbDiv = fb_div; + spc3_ptr->ucPostDiv = post_div; + spc3_ptr->ucPpll = radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; + spc3_ptr->ucMiscInfo = (radeon_crtc->crtc_id << 2); + + if (radeon_output->MonType == MT_CRT) { + if (radeon_output->DACType == DAC_PRIMARY) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1; + else if (radeon_output->DACType == DAC_TVDAC) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2; + spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_CRT; + } else if (radeon_output->MonType == MT_DFP) { + if (radeon_output->devices & ATOM_DEVICE_DFP1_SUPPORT) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_UNIPHY; + else if (radeon_output->devices & ATOM_DEVICE_DFP2_SUPPORT) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1; + else if (radeon_output->devices & ATOM_DEVICE_DFP3_SUPPORT) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA; + if (OUTPUT_IS_DVI) + spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_DVI; + else if (radeon_output->type == OUTPUT_HDMI) + spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_HDMI; + else if (radeon_output->type == OUTPUT_DP) + spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_DP; + } else if (radeon_output->MonType == MT_LCD) { + if (radeon_output->devices & ATOM_DEVICE_LCD1_SUPPORT) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA; + spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_LVDS; + } else if (OUTPUT_IS_TV) { + if (radeon_output->DACType == DAC_PRIMARY) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1; + else if (radeon_output->DACType == DAC_TVDAC) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2; + spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_TV; + } else if (radeon_output->MonType == MT_CV) { + if (radeon_output->DACType == DAC_PRIMARY) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1; + else if (radeon_output->DACType == DAC_TVDAC) + spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2; + spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_CV; + } ptr = &spc_param; break; - } default: ErrorF("Unknown table version\n"); exit(-1); diff --git a/src/atombios_output.c b/src/atombios_output.c index da3f533..81740a8 100644 --- a/src/atombios_output.c -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]