summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/adreno/adreno_gpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/msm/adreno/adreno_gpu.c')
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index 5e10446f7798..10838943d4ab 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -313,6 +313,39 @@ static inline bool _rev_match(uint8_t entry, uint8_t id)
return (entry == ANY_ID) || (entry == id);
}
+static void __iomem *adreno_ioremap(struct platform_device *pdev,
+ const char *name, const char *dbgname)
+{
+ struct resource *res;
+ unsigned long size;
+ void __iomem *ptr;
+
+ if (name)
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
+ else
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
+ if (!res) {
+ dev_err(&pdev->dev, "failed to get memory resource: %s\n", name);
+ return ERR_PTR(-EINVAL);
+ }
+
+ size = resource_size(res);
+
+ ptr = devm_ioremap_nocache(&pdev->dev, res->start, size);
+ if (!ptr) {
+ dev_err(&pdev->dev, "failed to ioremap: %s\n", name);
+ return ERR_PTR(-ENOMEM);
+ }
+
+ if (IS_ENABLED(CONFIG_DRM_MSM_REGISTER_LOGGING) &&
+ unlikely(adreno_reglog))
+ printk(KERN_DEBUG "IO:region %s %08x %08lx\n", dbgname,
+ (u32)ptr, size);
+
+ return ptr;
+}
+
int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
struct adreno_gpu *gpu, const struct adreno_gpu_funcs *funcs,
struct adreno_gem *gem, struct workqueue_struct *wq,
@@ -366,6 +399,12 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
return ret;
}
+ /* Map registers: */
+ gpu->mmio = adreno_ioremap(pdev, "kgsl_3d0_reg_memory",
+ adreno_get_name(gpu));
+ if (IS_ERR(gpu->mmio))
+ return PTR_ERR(gpu->mmio);
+
ret = msm_gpu_init(drm, pdev, &gpu->base, funcs,
"kgsl_3d0_reg_memory", "kgsl_3d0_irq",
RB_SIZE);