Loading drivers/gpu/msm/adreno_a2xx.c +3 −2 Original line number Diff line number Diff line Loading @@ -1352,7 +1352,8 @@ static int a2xx_create_gmem_shadow(struct adreno_device *adreno_dev, calc_gmemsize(&drawctxt->context_gmem_shadow, adreno_dev->gmem_size); tmp_ctx.gmem_base = adreno_dev->gmem_base; result = kgsl_allocate(&drawctxt->context_gmem_shadow.gmemshadow, result = kgsl_allocate(&(adreno_dev->dev), &drawctxt->context_gmem_shadow.gmemshadow, drawctxt->base.proc_priv->pagetable, drawctxt->context_gmem_shadow.size); Loading Loading @@ -1450,7 +1451,7 @@ static int a2xx_drawctxt_create(struct adreno_device *adreno_dev, * and texture and vertex buffer storage too */ ret = kgsl_allocate(&drawctxt->gpustate, ret = kgsl_allocate(&(adreno_dev->dev), &drawctxt->gpustate, drawctxt->base.proc_priv->pagetable, _context_size(adreno_dev)); if (ret) Loading drivers/gpu/msm/adreno_a3xx.c +3 −2 Original line number Diff line number Diff line Loading @@ -2404,7 +2404,8 @@ static int a3xx_create_gmem_shadow(struct adreno_device *adreno_dev, calc_gmemsize(&drawctxt->context_gmem_shadow, adreno_dev->gmem_size); tmp_ctx.gmem_base = adreno_dev->gmem_base; result = kgsl_allocate(&drawctxt->context_gmem_shadow.gmemshadow, result = kgsl_allocate(&(adreno_dev->dev), &drawctxt->context_gmem_shadow.gmemshadow, drawctxt->base.proc_priv->pagetable, drawctxt->context_gmem_shadow.size); Loading Loading @@ -2460,7 +2461,7 @@ static int a3xx_drawctxt_create(struct adreno_device *adreno_dev, } drawctxt->ops = &a3xx_legacy_ctx_ops; ret = kgsl_allocate(&drawctxt->gpustate, ret = kgsl_allocate(&(adreno_dev->dev), &drawctxt->gpustate, drawctxt->base.proc_priv->pagetable, CONTEXT_SIZE); if (ret) Loading drivers/gpu/msm/kgsl.c +5 −4 Original line number Diff line number Diff line Loading @@ -2675,7 +2675,7 @@ static long kgsl_ioctl_map_user_mem(struct kgsl_device_private *dev_priv, | KGSL_MEMFLAGS_USE_CPU_MAP; entry->memdesc.flags = param->flags; if (!kgsl_mmu_use_cpu_map(private->pagetable->mmu)) if (!kgsl_mmu_use_cpu_map(&dev_priv->device->mmu)) entry->memdesc.flags &= ~KGSL_MEMFLAGS_USE_CPU_MAP; if (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_IOMMU) Loading Loading @@ -3007,8 +3007,8 @@ _gpumem_alloc(struct kgsl_device_private *dev_priv, if (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_IOMMU) entry->memdesc.priv |= KGSL_MEMDESC_GUARD_PAGE; result = kgsl_allocate_user(&entry->memdesc, private->pagetable, size, flags); result = kgsl_allocate_user(dev_priv->device, &entry->memdesc, private->pagetable, size, flags); if (result != 0) goto err; Loading Loading @@ -3058,11 +3058,12 @@ kgsl_ioctl_gpumem_alloc_id(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data) { struct kgsl_process_private *private = dev_priv->process_priv; struct kgsl_device *device = dev_priv->device; struct kgsl_gpumem_alloc_id *param = data; struct kgsl_mem_entry *entry = NULL; int result; if (!kgsl_mmu_use_cpu_map(private->pagetable->mmu)) if (!kgsl_mmu_use_cpu_map(&device->mmu)) param->flags &= ~KGSL_MEMFLAGS_USE_CPU_MAP; result = _gpumem_alloc(dev_priv, &entry, param->size, param->flags); Loading drivers/gpu/msm/kgsl.h +1 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ struct kgsl_memdesc { unsigned int sglen_alloc; /* Allocated entries in the sglist */ struct kgsl_memdesc_ops *ops; unsigned int flags; /* Flags set from userspace */ struct device *dev; }; /* List of different memory entry types */ Loading drivers/gpu/msm/kgsl_mmu.c +7 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <linux/iommu.h> #include <mach/iommu.h> #include <mach/socinfo.h> #include <linux/types.h> #include "kgsl.h" #include "kgsl_mmu.h" Loading Loading @@ -378,6 +379,8 @@ int kgsl_mmu_init(struct kgsl_device *device) if (KGSL_MMU_TYPE_NONE == kgsl_mmu_type) { dev_info(device->dev, "|%s| MMU type set for device is " "NOMMU\n", __func__); status = dma_set_coherent_mask(device->dev->parent, DMA_BIT_MASK(sizeof(dma_addr_t)*8)); goto done; } else if (KGSL_MMU_TYPE_GPU == kgsl_mmu_type) mmu->mmu_ops = &gpummu_ops; Loading Loading @@ -717,6 +720,10 @@ kgsl_mmu_map(struct kgsl_pagetable *pagetable, if (!kgsl_memdesc_is_global(memdesc) && (KGSL_MEMDESC_MAPPED & memdesc->priv)) return -EINVAL; if (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_NONE) return 0; /* Add space for the guard page when allocating the mmu VA. */ size = memdesc->size; if (kgsl_memdesc_has_guard_page(memdesc)) Loading Loading
drivers/gpu/msm/adreno_a2xx.c +3 −2 Original line number Diff line number Diff line Loading @@ -1352,7 +1352,8 @@ static int a2xx_create_gmem_shadow(struct adreno_device *adreno_dev, calc_gmemsize(&drawctxt->context_gmem_shadow, adreno_dev->gmem_size); tmp_ctx.gmem_base = adreno_dev->gmem_base; result = kgsl_allocate(&drawctxt->context_gmem_shadow.gmemshadow, result = kgsl_allocate(&(adreno_dev->dev), &drawctxt->context_gmem_shadow.gmemshadow, drawctxt->base.proc_priv->pagetable, drawctxt->context_gmem_shadow.size); Loading Loading @@ -1450,7 +1451,7 @@ static int a2xx_drawctxt_create(struct adreno_device *adreno_dev, * and texture and vertex buffer storage too */ ret = kgsl_allocate(&drawctxt->gpustate, ret = kgsl_allocate(&(adreno_dev->dev), &drawctxt->gpustate, drawctxt->base.proc_priv->pagetable, _context_size(adreno_dev)); if (ret) Loading
drivers/gpu/msm/adreno_a3xx.c +3 −2 Original line number Diff line number Diff line Loading @@ -2404,7 +2404,8 @@ static int a3xx_create_gmem_shadow(struct adreno_device *adreno_dev, calc_gmemsize(&drawctxt->context_gmem_shadow, adreno_dev->gmem_size); tmp_ctx.gmem_base = adreno_dev->gmem_base; result = kgsl_allocate(&drawctxt->context_gmem_shadow.gmemshadow, result = kgsl_allocate(&(adreno_dev->dev), &drawctxt->context_gmem_shadow.gmemshadow, drawctxt->base.proc_priv->pagetable, drawctxt->context_gmem_shadow.size); Loading Loading @@ -2460,7 +2461,7 @@ static int a3xx_drawctxt_create(struct adreno_device *adreno_dev, } drawctxt->ops = &a3xx_legacy_ctx_ops; ret = kgsl_allocate(&drawctxt->gpustate, ret = kgsl_allocate(&(adreno_dev->dev), &drawctxt->gpustate, drawctxt->base.proc_priv->pagetable, CONTEXT_SIZE); if (ret) Loading
drivers/gpu/msm/kgsl.c +5 −4 Original line number Diff line number Diff line Loading @@ -2675,7 +2675,7 @@ static long kgsl_ioctl_map_user_mem(struct kgsl_device_private *dev_priv, | KGSL_MEMFLAGS_USE_CPU_MAP; entry->memdesc.flags = param->flags; if (!kgsl_mmu_use_cpu_map(private->pagetable->mmu)) if (!kgsl_mmu_use_cpu_map(&dev_priv->device->mmu)) entry->memdesc.flags &= ~KGSL_MEMFLAGS_USE_CPU_MAP; if (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_IOMMU) Loading Loading @@ -3007,8 +3007,8 @@ _gpumem_alloc(struct kgsl_device_private *dev_priv, if (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_IOMMU) entry->memdesc.priv |= KGSL_MEMDESC_GUARD_PAGE; result = kgsl_allocate_user(&entry->memdesc, private->pagetable, size, flags); result = kgsl_allocate_user(dev_priv->device, &entry->memdesc, private->pagetable, size, flags); if (result != 0) goto err; Loading Loading @@ -3058,11 +3058,12 @@ kgsl_ioctl_gpumem_alloc_id(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data) { struct kgsl_process_private *private = dev_priv->process_priv; struct kgsl_device *device = dev_priv->device; struct kgsl_gpumem_alloc_id *param = data; struct kgsl_mem_entry *entry = NULL; int result; if (!kgsl_mmu_use_cpu_map(private->pagetable->mmu)) if (!kgsl_mmu_use_cpu_map(&device->mmu)) param->flags &= ~KGSL_MEMFLAGS_USE_CPU_MAP; result = _gpumem_alloc(dev_priv, &entry, param->size, param->flags); Loading
drivers/gpu/msm/kgsl.h +1 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ struct kgsl_memdesc { unsigned int sglen_alloc; /* Allocated entries in the sglist */ struct kgsl_memdesc_ops *ops; unsigned int flags; /* Flags set from userspace */ struct device *dev; }; /* List of different memory entry types */ Loading
drivers/gpu/msm/kgsl_mmu.c +7 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <linux/iommu.h> #include <mach/iommu.h> #include <mach/socinfo.h> #include <linux/types.h> #include "kgsl.h" #include "kgsl_mmu.h" Loading Loading @@ -378,6 +379,8 @@ int kgsl_mmu_init(struct kgsl_device *device) if (KGSL_MMU_TYPE_NONE == kgsl_mmu_type) { dev_info(device->dev, "|%s| MMU type set for device is " "NOMMU\n", __func__); status = dma_set_coherent_mask(device->dev->parent, DMA_BIT_MASK(sizeof(dma_addr_t)*8)); goto done; } else if (KGSL_MMU_TYPE_GPU == kgsl_mmu_type) mmu->mmu_ops = &gpummu_ops; Loading Loading @@ -717,6 +720,10 @@ kgsl_mmu_map(struct kgsl_pagetable *pagetable, if (!kgsl_memdesc_is_global(memdesc) && (KGSL_MEMDESC_MAPPED & memdesc->priv)) return -EINVAL; if (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_NONE) return 0; /* Add space for the guard page when allocating the mmu VA. */ size = memdesc->size; if (kgsl_memdesc_has_guard_page(memdesc)) Loading