From patchwork Wed Apr 7 10:21:30 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Glisse X-Patchwork-Id: 91007 Received: from lists.sourceforge.net (lists.sourceforge.net [216.34.181.88]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o37AN2ou022201 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 7 Apr 2010 10:23:48 GMT Received: from localhost ([127.0.0.1] helo=sfs-ml-1.v29.ch3.sourceforge.com) by sfs-ml-1.v29.ch3.sourceforge.com with esmtp (Exim 4.69) (envelope-from ) id 1NzSOP-0000n5-3A; Wed, 07 Apr 2010 10:21:53 +0000 Received: from sfi-mx-3.v28.ch3.sourceforge.com ([172.29.28.123] helo=mx.sourceforge.net) by sfs-ml-1.v29.ch3.sourceforge.com with esmtp (Exim 4.69) (envelope-from ) id 1NzSON-0000mX-LJ for dri-devel@lists.sourceforge.net; Wed, 07 Apr 2010 10:21:51 +0000 Received-SPF: fail (sfi-mx-3.v28.ch3.sourceforge.com: domain of redhat.com does not designate 88.191.38.29 as permitted sender) client-ip=88.191.38.29; envelope-from=jglisse@redhat.com; helo=nox.protox.org; Received: from nox.protox.org ([88.191.38.29]) by sfi-mx-3.v28.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.69) id 1NzSOM-0008FJ-Em for dri-devel@lists.sourceforge.net; Wed, 07 Apr 2010 10:21:51 +0000 Received: from localhost.localdomain (lag77-1-82-238-106-69.fbx.proxad.net [82.238.106.69]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by nox.protox.org (Postfix) with ESMTPSA id 0B4E4169E4A; Wed, 7 Apr 2010 12:21:39 +0200 (CEST) From: Jerome Glisse To: airlied@gmail.com Subject: [PATCH 12/13] drm/ttm: remove io_ field from TTM V5 Date: Wed, 7 Apr 2010 12:21:30 +0200 Message-Id: <1270635691-2933-13-git-send-email-jglisse@redhat.com> X-Mailer: git-send-email 1.6.6.1 In-Reply-To: <1270635691-2933-12-git-send-email-jglisse@redhat.com> References: <1270635691-2933-1-git-send-email-jglisse@redhat.com> <1270635691-2933-2-git-send-email-jglisse@redhat.com> <1270635691-2933-3-git-send-email-jglisse@redhat.com> <1270635691-2933-4-git-send-email-jglisse@redhat.com> <1270635691-2933-5-git-send-email-jglisse@redhat.com> <1270635691-2933-6-git-send-email-jglisse@redhat.com> <1270635691-2933-7-git-send-email-jglisse@redhat.com> <1270635691-2933-8-git-send-email-jglisse@redhat.com> <1270635691-2933-9-git-send-email-jglisse@redhat.com> <1270635691-2933-10-git-send-email-jglisse@redhat.com> <1270635691-2933-11-git-send-email-jglisse@redhat.com> <1270635691-2933-12-git-send-email-jglisse@redhat.com> X-Spam-Score: 5.0 (+++++) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. 4.0 SPF_CHECK_FAIL SPF reports sender host as NOT permitted to send mails from 1.0 SPF_FAIL SPF: sender does not match SPF record (fail) X-Headers-End: 1NzSOM-0008FJ-Em Cc: Jerome Glisse , dri-devel@lists.sf.net X-BeenThere: dri-devel@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.sourceforge.net X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Wed, 07 Apr 2010 10:23:48 +0000 (UTC) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 2171f86..1f27cf2 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -79,8 +79,6 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, int mem_type) printk(KERN_ERR TTM_PFX " use_type: %d\n", man->use_type); printk(KERN_ERR TTM_PFX " flags: 0x%08X\n", man->flags); printk(KERN_ERR TTM_PFX " gpu_offset: 0x%08lX\n", man->gpu_offset); - printk(KERN_ERR TTM_PFX " io_offset: 0x%08lX\n", man->io_offset); - printk(KERN_ERR TTM_PFX " io_size: %ld\n", man->io_size); printk(KERN_ERR TTM_PFX " size: %llu\n", man->size); printk(KERN_ERR TTM_PFX " available_caching: 0x%08X\n", man->available_caching); @@ -1563,26 +1561,6 @@ bool ttm_mem_reg_is_pci(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) return true; } -int ttm_bo_pci_offset(struct ttm_bo_device *bdev, - struct ttm_mem_reg *mem, - unsigned long *bus_base, - unsigned long *bus_offset, unsigned long *bus_size) -{ - struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; - - *bus_size = 0; - if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE)) - return -EINVAL; - - if (ttm_mem_reg_is_pci(bdev, mem)) { - *bus_offset = mem->mm_node->start << PAGE_SHIFT; - *bus_size = mem->num_pages << PAGE_SHIFT; - *bus_base = man->io_offset + (uintptr_t)man->io_addr; - } - - return 0; -} - void ttm_bo_unmap_virtual(struct ttm_buffer_object *bo) { struct ttm_bo_device *bdev = bo->bdev; diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index 8493f39..15d1bf3 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -83,61 +83,33 @@ EXPORT_SYMBOL(ttm_bo_move_ttm); int ttm_mem_io_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) { - struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; - int ret; + int ret = 0; - if (bdev->driver->io_mem_reserve) { - if (!mem->bus.io_reserved) { - mem->bus.io_reserved = true; - ret = bdev->driver->io_mem_reserve(bdev, mem); - if (unlikely(ret != 0)) - return ret; - } - } else { - ret = ttm_bo_pci_offset(bdev, mem, &mem->bus.base, &mem->bus.offset, &mem->bus.size); - if (unlikely(ret != 0)) - return ret; - mem->bus.addr = man->io_addr; - mem->bus.is_iomem = (mem->bus.size > 0) ? 1 : 0; + if (!mem->bus.io_reserved) { + mem->bus.io_reserved = true; + ret = bdev->driver->io_mem_reserve(bdev, mem); } - return 0; + return ret; } void ttm_mem_io_free(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) { - if (bdev->driver->io_mem_reserve) { - if (mem->bus.io_reserved) { - mem->bus.io_reserved = false; - bdev->driver->io_mem_free(bdev, mem); - } + if (mem->bus.io_reserved) { + mem->bus.io_reserved = false; + bdev->driver->io_mem_free(bdev, mem); } } int ttm_mem_reg_ioremap(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem, void **virtual) { - struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; int ret; - void *addr; *virtual = NULL; ret = ttm_mem_io_reserve(bdev, mem); if (ret) return ret; - - if (!(man->flags & TTM_MEMTYPE_FLAG_NEEDS_IOREMAP)) { - addr = mem->bus.addr; - } else { - if (mem->placement & TTM_PL_FLAG_WC) - addr = ioremap_wc(mem->bus.base + mem->bus.offset, mem->bus.size); - else - addr = ioremap_nocache(mem->bus.base + mem->bus.offset, mem->bus.size); - if (!addr) { - ttm_mem_io_free(bdev, mem); - return -ENOMEM; - } - } - *virtual = addr; + *virtual = mem->bus.addr; return 0; } @@ -147,9 +119,6 @@ void ttm_mem_reg_iounmap(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem, struct ttm_mem_type_manager *man; man = &bdev->man[mem->mem_type]; - - if (virtual && (man->flags & TTM_MEMTYPE_FLAG_NEEDS_IOREMAP)) - iounmap(virtual); ttm_mem_io_free(bdev, mem); } @@ -401,30 +370,6 @@ pgprot_t ttm_io_prot(uint32_t caching_flags, pgprot_t tmp) } EXPORT_SYMBOL(ttm_io_prot); -static int ttm_bo_ioremap(struct ttm_buffer_object *bo, - unsigned long offset, - unsigned long size, - struct ttm_bo_kmap_obj *map) -{ - struct ttm_bo_device *bdev = bo->bdev; - struct ttm_mem_reg *mem = &bo->mem; - struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; - - if (!(man->flags & TTM_MEMTYPE_FLAG_NEEDS_IOREMAP)) { - map->bo_kmap_type = ttm_bo_map_premapped; - map->virtual = (void *)(((u8 *) bo->mem.bus.addr) + offset); - } else { - map->bo_kmap_type = ttm_bo_map_iomap; - if (mem->placement & TTM_PL_FLAG_WC) - map->virtual = ioremap_wc(bo->mem.bus.base + bo->mem.bus.offset + offset, - size); - else - map->virtual = ioremap_nocache(bo->mem.bus.base + bo->mem.bus.offset + offset, - size); - } - return (!map->virtual) ? -ENOMEM : 0; -} - static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo, unsigned long start_page, unsigned long num_pages, @@ -495,7 +440,9 @@ int ttm_bo_kmap(struct ttm_buffer_object *bo, } else { offset = start_page << PAGE_SHIFT; size = num_pages << PAGE_SHIFT; - return ttm_bo_ioremap(bo, offset, size, map); + map->bo_kmap_type = ttm_bo_map_iomap; + map->virtual = (void *)(((u8 *) bo->mem.bus.addr) + offset); + return 0; } } EXPORT_SYMBOL(ttm_bo_kmap); @@ -506,7 +453,6 @@ void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map) return; switch (map->bo_kmap_type) { case ttm_bo_map_iomap: - iounmap(map->virtual); ttm_mem_io_free(map->bo->bdev, &map->bo->mem); break; case ttm_bo_map_vmap: @@ -515,8 +461,6 @@ void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map) case ttm_bo_map_kmap: kunmap(map->page); break; - case ttm_bo_map_premapped: - break; default: BUG(); } diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index 3e273e0..f3171a2 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h @@ -282,8 +282,7 @@ struct ttm_buffer_object { * * Object describing a kernel mapping. Since a TTM bo may be located * in various memory types with various caching policies, the - * mapping can either be an ioremap, a vmap, a kmap or part of a - * premapped region. + * mapping can either be an ioremap, a vmap, a kmap. */ #define TTM_BO_MAP_IOMEM_MASK 0x80 @@ -294,7 +293,6 @@ struct ttm_bo_kmap_obj { ttm_bo_map_iomap = 1 | TTM_BO_MAP_IOMEM_MASK, ttm_bo_map_vmap = 2, ttm_bo_map_kmap = 3, - ttm_bo_map_premapped = 4 | TTM_BO_MAP_IOMEM_MASK, } bo_kmap_type; struct ttm_buffer_object *bo; }; diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index da39865..7720b17 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h @@ -176,8 +176,6 @@ struct ttm_tt { #define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */ #define TTM_MEMTYPE_FLAG_MAPPABLE (1 << 1) /* Memory mappable */ -#define TTM_MEMTYPE_FLAG_NEEDS_IOREMAP (1 << 2) /* Fixed memory needs ioremap - before kernel access. */ #define TTM_MEMTYPE_FLAG_CMA (1 << 3) /* Can't map aperture */ /** @@ -189,13 +187,6 @@ struct ttm_tt { * managed by this memory type. * @gpu_offset: If used, the GPU offset of the first managed page of * fixed memory or the first managed location in an aperture. - * @io_offset: The io_offset of the first managed page of IO memory or - * the first managed location in an aperture. For TTM_MEMTYPE_FLAG_CMA - * memory, this should be set to NULL. - * @io_size: The size of a managed IO region (fixed memory or aperture). - * @io_addr: Virtual kernel address if the io region is pre-mapped. For - * TTM_MEMTYPE_FLAG_NEEDS_IOREMAP there is no pre-mapped io map and - * @io_addr should be set to NULL. * @size: Size of the managed region. * @available_caching: A mask of available caching types, TTM_PL_FLAG_XX, * as defined in ttm_placement_common.h @@ -221,9 +212,6 @@ struct ttm_mem_type_manager { bool use_type; uint32_t flags; unsigned long gpu_offset; - unsigned long io_offset; - unsigned long io_size; - void *io_addr; uint64_t size; uint32_t available_caching; uint32_t default_caching;