src/drmmode_display.c | 25 ++--------------- src/drmmode_display.h | 2 - src/radeon_accelfuncs.c | 1 src/radeon_kms.c | 68 +++++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 66 insertions(+), 30 deletions(-)
New commits: commit 5c256808cb5fea955eea96ffe9196473715156aa Author: Alex Deucher <[email protected]> Date: Wed Mar 17 23:47:50 2010 -0400 XAA: disable render accel It's been reported broken for a while. Should fix fdo bug 27151, others. diff --git a/src/radeon_accelfuncs.c b/src/radeon_accelfuncs.c index dd1defd..36f25e7 100644 --- a/src/radeon_accelfuncs.c +++ b/src/radeon_accelfuncs.c @@ -1332,6 +1332,7 @@ FUNC_NAME(RADEONAccelInit)(ScreenPtr pScreen, XAAInfoRecPtr a) #endif #ifdef RENDER + info->RenderAccel = FALSE; if (info->RenderAccel && info->xaaReq.minorversion >= 2) { a->CPUToScreenAlphaTextureFlags = XAA_RENDER_POWER_OF_2_TILE_ONLY; commit a0683be5cc082bdbdd3bc4e9b52f39f423650946 Author: Dave Airlie <[email protected]> Date: Thu Mar 18 12:36:25 2010 +1000 radeon: avoid using DRI1 init path on DRI2 driver. I was playing with multi-seat and found this code, fixed it up to be sane and more DRI2 like. Signed-off-by: Dave Airlie <[email protected]> diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 1121044..399a6a7 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -1151,31 +1151,11 @@ static const xf86CrtcConfigFuncsRec drmmode_xf86crtc_config_funcs = { }; -Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, char *busId, char *driver_name, int cpp) +Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp) { xf86CrtcConfigPtr xf86_config; - RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); int i; - Bool ret; - - /* Create a bus Id */ - /* Low level DRM open */ - if (!pRADEONEnt->fd) { - ret = DRIOpenDRMMaster(pScrn, SAREA_MAX, busId, driver_name); - if (!ret) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[dri] DRIGetVersion failed to open the DRM\n" - "[dri] Disabling DRI.\n"); - return FALSE; - } - drmmode->fd = DRIMasterFD(pScrn); - pRADEONEnt->fd = drmmode->fd; - } else { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - " reusing fd for second head\n"); - drmmode->fd = pRADEONEnt->fd; - } xf86CrtcConfigInit(pScrn, &drmmode_xf86crtc_config_funcs); xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); diff --git a/src/drmmode_display.h b/src/drmmode_display.h index 1576d49..2e76259 100644 --- a/src/drmmode_display.h +++ b/src/drmmode_display.h @@ -74,7 +74,7 @@ typedef struct { } drmmode_output_private_rec, *drmmode_output_private_ptr; -extern Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, char *busId, char *driver_name, int cpp); +extern Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp); extern Bool drmmode_set_bufmgr(ScrnInfoPtr pScrn, drmmode_ptr drmmode, struct radeon_bo_manager *bufmgr); extern void drmmode_set_cursor(ScrnInfoPtr scrn, drmmode_ptr drmmode, int id, struct radeon_bo *bo); void drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y, int flags); diff --git a/src/radeon_kms.c b/src/radeon_kms.c index 1f9c5d4..15e5e3f 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -362,12 +362,67 @@ static Bool radeon_alloc_dri(ScrnInfoPtr pScrn) return TRUE; } +static Bool radeon_open_drm_master(ScrnInfoPtr pScrn) +{ + RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); + struct pci_device *dev = info->PciInfo; + char *busid; + drmSetVersion sv; + int err; + + if (pRADEONEnt->fd) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + " reusing fd for second head\n"); + + info->dri2.drm_fd = pRADEONEnt->fd; + goto out; + } + + busid = XNFprintf("pci:%04x:%02x:%02x.%d", + dev->domain, dev->bus, dev->dev, dev->func); + + info->dri2.drm_fd = drmOpen("radeon", busid); + if (info->dri2.drm_fd == -1) { + + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] Failed to open DRM device for %s: %s\n", + busid, strerror(errno)); + xfree(busid); + return FALSE; + } + xfree(busid); + + /* Check that what we opened was a master or a master-capable FD, + * by setting the version of the interface we'll use to talk to it. + * (see DRIOpenDRMMaster() in DRI1) + */ + sv.drm_di_major = 1; + sv.drm_di_minor = 1; + sv.drm_dd_major = -1; + sv.drm_dd_minor = -1; + err = drmSetInterfaceVersion(info->dri2.drm_fd, &sv); + if (err != 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] failed to set drm interface version.\n"); + drmClose(info->dri2.drm_fd); + info->dri2.drm_fd = -1; + + return FALSE; + } + + pRADEONEnt->fd = info->dri2.drm_fd; + out: + info->drmmode.fd = info->dri2.drm_fd; + info->dri->drmFD = info->dri2.drm_fd; + return TRUE; +} + Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags) { RADEONInfoPtr info; RADEONEntPtr pRADEONEnt; DevUnion* pPriv; - char *bus_id; Gamma zeros = { 0.0, 0.0, 0.0 }; xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG, @@ -434,17 +489,16 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, X_INFO, "KMS Color Tiling: %sabled\n", info->allowColorTiling ? "en" : "dis"); - bus_id = DRICreatePCIBusID(info->PciInfo); - if (drmmode_pre_init(pScrn, &info->drmmode, bus_id, "radeon", pScrn->bitsPerPixel / 8) == FALSE) { - xfree(bus_id); + if (radeon_open_drm_master(pScrn) == FALSE) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Kernel modesetting setup failed\n"); + goto fail; + } + if (drmmode_pre_init(pScrn, &info->drmmode, pScrn->bitsPerPixel / 8) == FALSE) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Kernel modesetting setup failed\n"); goto fail; } - info->dri->drmFD = info->drmmode.fd; - info->dri2.drm_fd = info->drmmode.fd; info->dri2.enabled = FALSE; - xfree(bus_id); info->dri->pKernelDRMVersion = drmGetVersion(info->dri->drmFD); if (info->dri->pKernelDRMVersion == NULL) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, commit 080a5414593e9b59ed923f26aa6057747b0c868f Author: Alex Deucher <[email protected]> Date: Tue Mar 16 12:33:39 2010 -0400 kms: fix ums naming compat for DisplayPort diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 253ec1e..1121044 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -844,7 +844,7 @@ const char *output_names[] = { "None", "LVDS", "CTV", "DIN", - "DP", + "DisplayPort", "HDMI", "HDMI", "TV", @@ -889,6 +889,7 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num) case DRM_MODE_CONNECTOR_DVIA: case DRM_MODE_CONNECTOR_HDMIA: case DRM_MODE_CONNECTOR_HDMIB: + case DRM_MODE_CONNECTOR_DisplayPort: snprintf(name, 32, "%s-%d", output_names[koutput->connector_type], koutput->connector_type_id - 1); break; default: -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

