diff --git a/src/i830_dri.c b/src/i830_dri.c index 9318669..5d8a272 100644 --- a/src/i830_dri.c +++ b/src/i830_dri.c @@ -1637,8 +1637,9 @@ i830_do_addmap(ScrnInfoPtr pScrn, i830_memory *mem, *sarea_offset = mem->offset; } else { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] failed to map %s at 0x%08lx\n", - mem->name, mem->offset + pI830->LinearAddr); + "[drm] failed to map %s at 0x%08lx: %s\n", + mem->name, mem->offset + pI830->LinearAddr, + strerror(-ret)); return FALSE; } } diff --git a/src/i830_driver.c b/src/i830_driver.c index 1418464..57a7a78 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -2467,12 +2467,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) #ifdef XF86DRI /* Try to init DRI if it's enabled */ - if (pI830->directRendering) { - if (I830CheckDRIAvailable(pScrn)) - pI830->directRendering = I830DRIScreenInit(pScreen); - else - pI830->directRendering = FALSE; - } + pI830->directRendering = I830DRIScreenInit(pScreen); #endif /* Set up our video memory allocator for the chosen videoRam */ diff --git a/src/i830_memory.c b/src/i830_memory.c index 8b769bd..13158b1 100644 --- a/src/i830_memory.c +++ b/src/i830_memory.c @@ -484,7 +484,8 @@ i830_allocator_init(ScrnInfoPtr pScrn, unsigned long offset, unsigned long size) DRM_BO_MEM_TT); if (ret != 0) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Failed to initialize kernel memory manager\n"); + "Failed to initialize kernel memory manager: %s\n", + strerror(-ret)); i830_free_memory(pScrn, pI830->memory_manager); pI830->memory_manager = NULL; } @@ -829,8 +830,7 @@ i830_allocate_memory(ScrnInfoPtr pScrn, const char *name, #ifdef XF86DRI_MM I830Ptr pI830 = I830PTR(pScrn); - if (pI830->memory_manager && !(flags & NEED_PHYSICAL_ADDR) && - !(flags & NEED_LIFETIME_FIXED)) + if (pI830->memory_manager && !(flags & NEED_PHYSICAL_ADDR)) { return i830_allocate_memory_bo(pScrn, name, size, alignment, flags); } else @@ -981,7 +981,7 @@ i830_describe_allocations(ScrnInfoPtr pScrn, int verbosity, const char *prefix) mem->size / 1024, tile_suffix); } else { xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, verbosity, - "%sunpinned : %s (%ld kB)%s\n", prefix, + "%sunpinned : %s (%ld kB)%s\n", prefix, mem->name, mem->size / 1024, tile_suffix); } } @@ -1003,10 +1003,40 @@ i830_allocate_ringbuffer(ScrnInfoPtr pScrn) /* We don't have any mechanism in the DRM yet to alert it that we've moved * the ringbuffer since init time, so allocate it fixed for its lifetime. */ +#if 0 pI830->LpRing->mem = i830_allocate_memory(pScrn, "ring buffer", PRIMARY_RINGBUFFER_SIZE, GTT_PAGE_SIZE, NEED_LIFETIME_FIXED); +#else + { + i830_memory *mem; + + mem = xcalloc(1, sizeof(*mem)); + if (mem == NULL) + return FALSE; + mem->name = xstrdup("ring buffer"); + if (!mem->name) { + xfree(mem); + return FALSE; + } + + mem->offset = 0; + mem->end = PRIMARY_RINGBUFFER_SIZE; + mem->size = PRIMARY_RINGBUFFER_SIZE; + mem->allocated_size = mem->size; + mem->lifetime_fixed_offset = TRUE; + mem->bound = 1; + i830_refresh_ring(pScrn); + + mem->prev = NULL; + mem->next = pI830->bo_list; + if (pI830->bo_list != NULL) + pI830->bo_list->prev = mem; + pI830->bo_list = mem; + pI830->LpRing->mem = mem; + } +#endif if (pI830->LpRing->mem == NULL) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Failed to allocate Ring Buffer space\n"); @@ -1925,7 +1955,7 @@ i830_bind_all_memory(ScrnInfoPtr pScrn) } #ifdef XF86DRI_MM for (mem = pI830->bo_list; mem != NULL; mem = mem->next) { - if (!mem->lifetime_fixed_offset && !i830_bind_memory(pScrn, mem)) + if (!i830_bind_memory(pScrn, mem)) FatalError("Couldn't bind memory for BO %s\n", mem->name); } #endif @@ -1957,8 +1987,7 @@ i830_unbind_all_memory(ScrnInfoPtr pScrn) /* Don't unpin objects which require that their offsets never * change. */ - if (!mem->lifetime_fixed_offset) - i830_unbind_memory(pScrn, mem); + i830_unbind_memory(pScrn, mem); } #endif