Honour the ttm backend cant-use-aperture flag.
unsigned long bus_offset;
unsigned long num_pages;
uint32_t vm_flags;
+ void *iomap;
} drm_buffer_object_t;
agp_be->destroy = drm_agp_destroy_ttm;
DRM_MASK_VAL(agp_be->flags, DRM_BE_FLAG_NEEDS_FREE,
(backend == NULL) ? DRM_BE_FLAG_NEEDS_FREE : 0);
- DRM_MASK_VAL(agp_be->flags, DRM_BE_FLAG_CBA,
- (dev->agp->cant_use_aperture) ? DRM_BE_FLAG_CBA : 0);
+ DRM_MASK_VAL(agp_be->flags, DRM_BE_FLAG_CMA,
+ (dev->agp->cant_use_aperture) ? DRM_BE_FLAG_CMA : 0);
agp_be->drm_map_type = _DRM_AGP;
return agp_be;
}
drm_ttm_t *ttm = (drm_ttm_t *) map->offset;
int ret = 0;
- if (ttm->page_flags & DRM_TTM_PAGE_UNCACHED) {
+ if ((ttm->page_flags & DRM_TTM_PAGE_UNCACHED) &&
+ !(ttm->be->flags & DRM_BE_FLAG_CMA)) {
+
unsigned long pfn = ttm->aper_offset +
(ttm->be->aperture_base >> PAGE_SHIFT);
pgprot_t pgprot = drm_io_prot(ttm->be->drm_map_type, vma);
vma->vm_end - vma->vm_start,
pgprot);
}
+
return ret;
}
vma_entry_t *v_entry;
int ret = 0;
- list_for_each_entry(v_entry, &ttm->vma_list, head) {
- ret = drm_ttm_map_bound(v_entry->vma);
- if (ret)
- break;
+ if ((ttm->page_flags & DRM_TTM_PAGE_UNCACHED) &&
+ !(ttm->be->flags & DRM_BE_FLAG_CMA)) {
+
+ list_for_each_entry(v_entry, &ttm->vma_list, head) {
+ ret = drm_ttm_map_bound(v_entry->vma);
+ if (ret)
+ break;
+ }
}
drm_ttm_unlock_mm(ttm);
DRM_DEBUG("Destroying a ttm\n");
-#ifdef DRM_TTM_ODD_COMPAT
+#ifdef DRM_ODD_MM_COMPAT
BUG_ON(!list_empty(&ttm->vma_list));
BUG_ON(!list_empty(&ttm->p_mm_list));
#endif
ret = drm_ttm_populate(ttm);
if (ret)
return ret;
+
if (ttm->state == ttm_unbound && !cached) {
ret = unmap_vma_pages(ttm);
if (ret)
#define DRM_BE_FLAG_NEEDS_FREE 0x00000001
#define DRM_BE_FLAG_BOUND_CACHED 0x00000002
-#define DRM_BE_FLAG_CBA 0x00000004
+#define DRM_BE_FLAG_CMA 0x00000004 /* Don't map through aperture */
typedef struct drm_ttm_backend {
unsigned long aperture_base;
#endif
}
- if (ttm->page_flags & DRM_TTM_PAGE_UNCACHED) {
-
- /*
- * FIXME: Check can't map aperture flag.
- */
+ if ((ttm->page_flags & DRM_TTM_PAGE_UNCACHED) &&
+ !(ttm->be->flags & DRM_BE_FLAG_CMA)) {
pfn = ttm->aper_offset + page_offset +
(ttm->be->aperture_base >> PAGE_SHIFT);
#ifdef DRM_ODD_MM_COMPAT
drm_ttm_map_bound(vma);
#endif
+ drm_vm_ttm_open_locked(vma);
return 0;
}
default: