diff --git a/drivers/mxc/amd-gpu/include/gsl_halconfig.h b/drivers/mxc/amd-gpu/include/gsl_halconfig.h index d75032c201a..658c4219807 100755 --- a/drivers/mxc/amd-gpu/include/gsl_halconfig.h +++ b/drivers/mxc/amd-gpu/include/gsl_halconfig.h @@ -34,22 +34,13 @@ #define __GSL_HALCONFIG_H #define GSL_HAL_GPUBASE_REG_YDX 0x30000000 -#define GSL_HAL_SIZE_REG_YDX 0x00020000 /* 128KB */ +#define GSL_HAL_SIZE_REG_YDX SZ_128K /* 128KB */ -#define GSL_HAL_SIZE_REG_G12 0x00001000 /* 4KB */ +#define GSL_HAL_SIZE_REG_G12 SZ_4K /* 4KB */ -/* generic, virtualized allocation pool */ -#define GSL_HAL_SHMEM_SIZE_EMEM1_MMU 0x08000000 /* 128MB */ -/* contiguous pool: - * these two values absolutely have to fit inside the gpu_mem - * reserved area, don't make them bigger (will explode) or - * smaller (wasting memory)! - */ -#define GSL_HAL_SHMEM_SIZE_EMEM2_MMU 0x00800000 /* 8MB */ -#define GSL_HAL_SHMEM_SIZE_PHYS_MMU 0x01800000 /* 24MB */ +#define GSL_HAL_SHMEM_SIZE_EMEM_MMU SZ_128M -#define GSL_HAL_SHMEM_SIZE_EMEM1_NOMMU 0x00A00000 /* 10MB */ -#define GSL_HAL_SHMEM_SIZE_EMEM2_NOMMU 0x00200000 /* 2MB */ -#define GSL_HAL_SHMEM_SIZE_PHYS_NOMMU 0x00100000 /* 1MB */ +#define GSL_HAL_SHMEM_SIZE_EMEM_NOMMU (10*SZ_1M) +#define GSL_HAL_SHMEM_SIZE_PHYS_NOMMU SZ_1M #endif /* __GSL_HALCONFIG_H */ diff --git a/drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c index 8ee966484ca..a55d8a64ca5 100644 --- a/drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c +++ b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c @@ -36,9 +36,9 @@ #define GSL_HAL_MEM1 0 #define GSL_HAL_MEM2 1 -#define GSL_HAL_MEM3 2 +//#define GSL_HAL_MEM3 2 -/* #define GSL_HAL_DEBUG */ +#define GSL_HAL_DEBUG extern phys_addr_t gpu_2d_regbase; extern int gpu_2d_regsize; @@ -90,7 +90,7 @@ KGSLHAL_API int kgsl_hal_init(void) { gsl_hal_t *hal; - unsigned long totalsize, mem1size; + unsigned long physsize, virtsize; unsigned int va, pa; if (gsl_driver.hal) { @@ -156,94 +156,85 @@ kgsl_hal_init(void) #endif } + physsize = SZ_8M; + if (gsl_driver.enable_mmu) { - printk(KERN_INFO "gpu mmu enabled\n"); - totalsize = GSL_HAL_SHMEM_SIZE_EMEM2_MMU + GSL_HAL_SHMEM_SIZE_PHYS_MMU; - mem1size = GSL_HAL_SHMEM_SIZE_EMEM1_MMU; - if (gpu_reserved_mem && gpu_reserved_mem_size >= totalsize) { + printk(KERN_INFO "GPU MMU enabled\n"); + virtsize = GSL_HAL_SHMEM_SIZE_EMEM_MMU; + if (gpu_reserved_mem && gpu_reserved_mem_size >= physsize) { pa = gpu_reserved_mem; - va = (unsigned int)ioremap(gpu_reserved_mem, totalsize); + va = (unsigned int)ioremap/*_wc*/(gpu_reserved_mem, gpu_reserved_mem_size); + physsize = gpu_reserved_mem_size; } else { - va = (unsigned int)dma_alloc_coherent(0, totalsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL); + if (gpu_reserved_mem_size > 0) { + printk(KERN_INFO "Reallocating PHYS aperture: reserved memory going to waste\n"); + } + gpu_reserved_mem = 0; + va = (unsigned int)dma_alloc_coherent(0, physsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL); } } else { - printk(KERN_INFO "gpu mmu disabled\n"); - if (gpu_reserved_mem && gpu_reserved_mem_size >= SZ_8M) { - totalsize = gpu_reserved_mem_size; + printk(KERN_INFO "GPU MMU disabled\n"); + if (gpu_reserved_mem && gpu_reserved_mem_size >= physsize) { + physsize = gpu_reserved_mem_size; pa = gpu_reserved_mem; va = (unsigned int)ioremap(gpu_reserved_mem, gpu_reserved_mem_size); } else { + if (gpu_reserved_mem_size > 0) { + printk(KERN_INFO "Reallocating PHYS aperture: reserved memory going to waste\n"); + } gpu_reserved_mem = 0; - totalsize = GSL_HAL_SHMEM_SIZE_EMEM1_NOMMU + GSL_HAL_SHMEM_SIZE_EMEM2_NOMMU + GSL_HAL_SHMEM_SIZE_PHYS_NOMMU; - va = (unsigned int)dma_alloc_coherent(0, totalsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL); + physsize = GSL_HAL_SHMEM_SIZE_PHYS_NOMMU; + va = (unsigned int)dma_alloc_coherent(0, physsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL); } - mem1size = totalsize - (GSL_HAL_SHMEM_SIZE_EMEM2_NOMMU + GSL_HAL_SHMEM_SIZE_PHYS_NOMMU); + virtsize = physsize - GSL_HAL_SHMEM_SIZE_PHYS_NOMMU; } if (va) { - kos_memset((void *)va, 0, totalsize); + kos_memset((void *)va, 0, physsize); hal->memchunk.mmio_virt_base = (void *)va; hal->memchunk.mmio_phys_base = pa; - hal->memchunk.sizebytes = totalsize; + hal->memchunk.sizebytes = physsize; #ifdef GSL_HAL_DEBUG - printk(KERN_INFO "%s: hal->memchunk.mmio_phys_base = 0x%p\n", __func__, (void *)hal->memchunk.mmio_phys_base); - printk(KERN_INFO "%s: hal->memchunk.mmio_virt_base = 0x%p\n", __func__, (void *)hal->memchunk.mmio_virt_base); - printk(KERN_INFO "%s: hal->memchunk.sizebytes = 0x%08x\n", __func__, hal->memchunk.sizebytes); + printk(KERN_INFO "Reserved memory: pa = 0x%p va = 0x%p size = 0x%08x\n", + (void *)hal->memchunk.mmio_phys_base, + (void *)hal->memchunk.mmio_virt_base, + hal->memchunk.sizebytes + ); #endif - hal->memspace[GSL_HAL_MEM2].mmio_virt_base = (void *) va; - hal->memspace[GSL_HAL_MEM2].gpu_base = pa; - if (gsl_driver.enable_mmu) { - hal->memspace[GSL_HAL_MEM2].sizebytes = GSL_HAL_SHMEM_SIZE_EMEM2_MMU; - va += GSL_HAL_SHMEM_SIZE_EMEM2_MMU; - pa += GSL_HAL_SHMEM_SIZE_EMEM2_MMU; - } else { - hal->memspace[GSL_HAL_MEM2].sizebytes = GSL_HAL_SHMEM_SIZE_EMEM2_NOMMU; - va += GSL_HAL_SHMEM_SIZE_EMEM2_NOMMU; - pa += GSL_HAL_SHMEM_SIZE_EMEM2_NOMMU; - } + hal->memspace[GSL_HAL_MEM2].mmio_virt_base = (void *) va; + hal->memspace[GSL_HAL_MEM2].gpu_base = pa; + hal->memspace[GSL_HAL_MEM2].sizebytes = physsize; + va += physsize; + pa += physsize; #ifdef GSL_HAL_DEBUG - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].gpu_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM2].gpu_base); - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].mmio_virt_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM2].mmio_virt_base); - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM2].sizebytes); -#endif - - hal->memspace[GSL_HAL_MEM3].mmio_virt_base = (void *) va; - hal->memspace[GSL_HAL_MEM3].gpu_base = pa; - if (gsl_driver.enable_mmu) { - hal->memspace[GSL_HAL_MEM3].sizebytes = GSL_HAL_SHMEM_SIZE_PHYS_MMU; - va += GSL_HAL_SHMEM_SIZE_PHYS_MMU; - pa += GSL_HAL_SHMEM_SIZE_PHYS_MMU; - } else { - hal->memspace[GSL_HAL_MEM3].sizebytes = GSL_HAL_SHMEM_SIZE_PHYS_NOMMU; - va += GSL_HAL_SHMEM_SIZE_PHYS_NOMMU; - pa += GSL_HAL_SHMEM_SIZE_PHYS_NOMMU; - } - -#ifdef GSL_HAL_DEBUG - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].gpu_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM3].gpu_base); - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].mmio_virt_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM3].mmio_virt_base); - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM3].sizebytes); + printk(KERN_INFO "GSL_HAL_MEM2 aperture (PHYS) pa = 0x%p va = 0x%p size = 0x%08x\n", + (void *)hal->memspace[GSL_HAL_MEM2].gpu_base, + (void *)hal->memspace[GSL_HAL_MEM2].mmio_virt_base, + hal->memspace[GSL_HAL_MEM2].sizebytes + ); #endif if (gsl_driver.enable_mmu) { gsl_linux_map_init(); hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *)GSL_LINUX_MAP_RANGE_START; hal->memspace[GSL_HAL_MEM1].gpu_base = GSL_LINUX_MAP_RANGE_START; - hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size; } else { hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *) va; hal->memspace[GSL_HAL_MEM1].gpu_base = pa; - hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size; } + hal->memspace[GSL_HAL_MEM1].sizebytes = virtsize; #ifdef GSL_HAL_DEBUG - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].gpu_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM1].gpu_base); - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].mmio_virt_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM1].mmio_virt_base); - printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM1].sizebytes); + printk(KERN_INFO "GSL_HAL_MEM1 aperture (%s) pa = 0x%p va = 0x%p size = 0x%08x\n", + gsl_driver.enable_mmu ? "MMU" : "EMEM", + (void *)hal->memspace[GSL_HAL_MEM1].gpu_base, + (void *)hal->memspace[GSL_HAL_MEM1].mmio_virt_base, + hal->memspace[GSL_HAL_MEM1].sizebytes + ); #endif } else { kgsl_hal_close(); @@ -316,18 +307,12 @@ kgsl_hal_getshmemconfig(gsl_shmemconfig_t *config) config->apertures[0].gpubase = hal->memspace[GSL_HAL_MEM1].gpu_base; config->apertures[0].sizebytes = hal->memspace[GSL_HAL_MEM1].sizebytes; - config->apertures[1].id = GSL_APERTURE_EMEM; - config->apertures[1].channel = GSL_CHANNEL_2; + config->apertures[1].id = GSL_APERTURE_PHYS; + config->apertures[1].channel = GSL_CHANNEL_1; config->apertures[1].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM2].mmio_virt_base; config->apertures[1].gpubase = hal->memspace[GSL_HAL_MEM2].gpu_base; config->apertures[1].sizebytes = hal->memspace[GSL_HAL_MEM2].sizebytes; - config->apertures[2].id = GSL_APERTURE_PHYS; - config->apertures[2].channel = GSL_CHANNEL_1; - config->apertures[2].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM3].mmio_virt_base; - config->apertures[2].gpubase = hal->memspace[GSL_HAL_MEM3].gpu_base; - config->apertures[2].sizebytes = hal->memspace[GSL_HAL_MEM3].sizebytes; - status = GSL_SUCCESS; } diff --git a/drivers/mxc/amd-gpu/platform/hal/linux/gsl_linux_map.h b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_linux_map.h index ebbe94a75e1..bdab64e9737 100644 --- a/drivers/mxc/amd-gpu/platform/hal/linux/gsl_linux_map.h +++ b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_linux_map.h @@ -32,7 +32,7 @@ #include "gsl_halconfig.h" #define GSL_LINUX_MAP_RANGE_START (1024*1024) -#define GSL_LINUX_MAP_RANGE_END (GSL_LINUX_MAP_RANGE_START+GSL_HAL_SHMEM_SIZE_EMEM1_MMU) +#define GSL_LINUX_MAP_RANGE_END (GSL_LINUX_MAP_RANGE_START+GSL_HAL_SHMEM_SIZE_EMEM_MMU) int gsl_linux_map_init(void); void *gsl_linux_map_alloc(unsigned int gpu_addr, unsigned int size);