diff options
Diffstat (limited to 'linux-core')
| -rw-r--r-- | linux-core/drmP.h | 1 | ||||
| -rw-r--r-- | linux-core/drm_compat.c | 3 | ||||
| -rw-r--r-- | linux-core/drm_vm.c | 4 | ||||
| -rw-r--r-- | linux-core/i915_buffer.c | 4 | 
4 files changed, 9 insertions, 3 deletions
| diff --git a/linux-core/drmP.h b/linux-core/drmP.h index c472689b..e070c073 100644 --- a/linux-core/drmP.h +++ b/linux-core/drmP.h @@ -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; diff --git a/linux-core/drm_compat.c b/linux-core/drm_compat.c index eeda4e4a..3bb35997 100644 --- a/linux-core/drm_compat.c +++ b/linux-core/drm_compat.c @@ -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); diff --git a/linux-core/drm_vm.c b/linux-core/drm_vm.c index 4a340b57..f3b1088f 100644 --- a/linux-core/drm_vm.c +++ b/linux-core/drm_vm.c @@ -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; diff --git a/linux-core/i915_buffer.c b/linux-core/i915_buffer.c index 3ccfab38..374b28df 100644 --- a/linux-core/i915_buffer.c +++ b/linux-core/i915_buffer.c @@ -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); | 
