From 005c8d358182f0c5feb4efb03bb6a641b37cfbe6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E6=9D=9C=E5=9D=A4=E6=98=8E?= Date: Tue, 22 Feb 2011 18:14:03 +0800 Subject: [PATCH] change gpu's memory from cache to writecombine --- .../rk29/vivante/hal/inc/gc_hal_options.h | 7 ++++-- .../os/linux/kernel/gc_hal_kernel_driver.c | 6 ++++- .../hal/os/linux/kernel/gc_hal_kernel_os.c | 22 ++++++++++++++----- 3 files changed, 27 insertions(+), 8 deletions(-) mode change 100755 => 100644 drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c diff --git a/drivers/staging/rk29/vivante/hal/inc/gc_hal_options.h b/drivers/staging/rk29/vivante/hal/inc/gc_hal_options.h index 69f502aea631..6e480912cd9c 100755 --- a/drivers/staging/rk29/vivante/hal/inc/gc_hal_options.h +++ b/drivers/staging/rk29/vivante/hal/inc/gc_hal_options.h @@ -267,9 +267,12 @@ /* gcdENABLE_MEM_CACHE - ÅäÖÃGPUËùʹÓõÄmemoryÊÇ·ñ±»ARM Cacheס + ÅäÖÃGPUËùʹÓõÄmemoryÊÇ·ñ±»ARM Cache»òWriteCombineס + 1: Cached + 2: WriteCombine + */ -#define gcdENABLE_MEM_CACHE 1 +#define gcdENABLE_MEM_CACHE 2 #endif /* __gc_hal_options_h_ */ diff --git a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c index 09eff0c3cd9e..e2b3d9df485f 100755 --- a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c +++ b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c @@ -466,7 +466,11 @@ static int drv_mmap(struct file * filp, struct vm_area_struct * vma) return -ENOTTY; } -#if !gcdENABLE_MEM_CACHE +#if (2==gcdENABLE_MEM_CACHE) + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); +#elif (1==gcdENABLE_MEM_CACHE) + // NULL +#else vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); #endif vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND; diff --git a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c old mode 100755 new mode 100644 index 4ff31449956a..e6e62a41d6b9 --- a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c +++ b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c @@ -1023,7 +1023,11 @@ gckOS_MapMemory( } #else -#if !gcdENABLE_MEM_CACHE +#if (2==gcdENABLE_MEM_CACHE) + mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot); +#elif (1==gcdENABLE_MEM_CACHE) + // NULL +#else mdlMap->vma->vm_page_prot = pgprot_noncached(mdlMap->vma->vm_page_prot); #endif mdlMap->vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED; @@ -1394,7 +1398,11 @@ gckOS_AllocateNonPagedMemory( } #else -#if !gcdENABLE_MEM_CACHE +#if (2==gcdENABLE_MEM_CACHE) + mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot); +#elif (1==gcdENABLE_MEM_CACHE) + // NULL +#else mdlMap->vma->vm_page_prot = pgprot_noncached(mdlMap->vma->vm_page_prot); #endif mdlMap->vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED; @@ -3014,7 +3022,11 @@ gceSTATUS gckOS_LockPages( mdlMap->vma->vm_flags |= VM_RESERVED; /* Make this mapping non-cached. */ -#if !gcdENABLE_MEM_CACHE +#if (2==gcdENABLE_MEM_CACHE) + mdlMap->vma->vm_page_prot = pgprot_writecombine(mdlMap->vma->vm_page_prot); +#elif (1==gcdENABLE_MEM_CACHE) + // NULL +#else mdlMap->vma->vm_page_prot = pgprot_noncached(mdlMap->vma->vm_page_prot); #endif @@ -5403,7 +5415,7 @@ gckOS_CacheFlush( IN gctSIZE_T Bytes ) { -#if gcdENABLE_MEM_CACHE +#if (1==gcdENABLE_MEM_CACHE) dmac_clean_range(Logical, Logical+Bytes); #endif return gcvSTATUS_OK; @@ -5439,7 +5451,7 @@ gckOS_CacheInvalidate( IN gctSIZE_T Bytes ) { -#if gcdENABLE_MEM_CACHE +#if (1==gcdENABLE_MEM_CACHE) dmac_flush_range(Logical, Logical+Bytes); #endif return gcvSTATUS_OK; -- 2.34.1