mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-01-03 18:40:20 +01:00
Set the drm bus map type for each buffer object memory type.
This commit is contained in:
parent
7bcb62b45d
commit
04760563b8
4 changed files with 9 additions and 3 deletions
|
|
@ -664,6 +664,7 @@ typedef struct drm_mem_type_manager {
|
|||
struct list_head lru;
|
||||
struct list_head pinned;
|
||||
uint32_t flags;
|
||||
uint32_t drm_bus_maptype;
|
||||
unsigned long io_offset;
|
||||
unsigned long io_size;
|
||||
void *io_addr;
|
||||
|
|
|
|||
|
|
@ -306,8 +306,9 @@ int drm_bo_map_bound(struct vm_area_struct *vma)
|
|||
BUG_ON(ret);
|
||||
|
||||
if (bus_size) {
|
||||
drm_mem_type_manager_t *man = &dev->bm.man[bo->mem.mem_type];
|
||||
unsigned long pfn = (bus_base + bus_offset) >> PAGE_SHIFT;
|
||||
pgprot_t pgprot = drm_io_prot(_DRM_AGP, vma);
|
||||
pgprot_t pgprot = drm_io_prot(man->drm_bus_maptype, vma);
|
||||
ret = io_remap_pfn_range(vma, vma->vm_start, pfn,
|
||||
vma->vm_end - vma->vm_start,
|
||||
pgprot);
|
||||
|
|
|
|||
|
|
@ -816,8 +816,10 @@ struct page *drm_bo_vm_fault(struct vm_area_struct *vma,
|
|||
page_offset = (address - vma->vm_start) >> PAGE_SHIFT;
|
||||
|
||||
if (bus_size) {
|
||||
drm_mem_type_manager_t *man = &dev->bm.man[bo->mem.mem_type];
|
||||
|
||||
pfn = ((bus_base + bus_offset) >> PAGE_SHIFT) + page_offset;
|
||||
vma->vm_page_prot = drm_io_prot(_DRM_AGP, vma);
|
||||
vma->vm_page_prot = drm_io_prot(man->drm_bus_maptype, vma);
|
||||
} else {
|
||||
ttm = bo->ttm;
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ int i915_init_mem_type(drm_device_t * dev, uint32_t type,
|
|||
case DRM_BO_MEM_LOCAL:
|
||||
man->flags = _DRM_FLAG_MEMTYPE_MAPPABLE |
|
||||
_DRM_FLAG_MEMTYPE_CACHED;
|
||||
man->drm_bus_maptype = 0;
|
||||
break;
|
||||
case DRM_BO_MEM_TT:
|
||||
if (!(drm_core_has_AGP(dev) && dev->agp)) {
|
||||
|
|
@ -83,6 +84,7 @@ int i915_init_mem_type(drm_device_t * dev, uint32_t type,
|
|||
man->io_addr = NULL;
|
||||
man->flags = _DRM_FLAG_MEMTYPE_MAPPABLE |
|
||||
_DRM_FLAG_MEMTYPE_CSELECT | _DRM_FLAG_NEEDS_IOREMAP;
|
||||
man->drm_bus_maptype = _DRM_AGP;
|
||||
break;
|
||||
case DRM_BO_MEM_PRIV0:
|
||||
if (!(drm_core_has_AGP(dev) && dev->agp)) {
|
||||
|
|
@ -95,7 +97,7 @@ int i915_init_mem_type(drm_device_t * dev, uint32_t type,
|
|||
man->io_addr = NULL;
|
||||
man->flags = _DRM_FLAG_MEMTYPE_MAPPABLE |
|
||||
_DRM_FLAG_MEMTYPE_FIXED | _DRM_FLAG_NEEDS_IOREMAP;
|
||||
|
||||
man->drm_bus_maptype = _DRM_AGP;
|
||||
break;
|
||||
default:
|
||||
DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue