diff options
Diffstat (limited to 'drivers/gpu/drm/msm/adreno/adreno_gpu.c')
-rw-r--r-- | drivers/gpu/drm/msm/adreno/adreno_gpu.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index 10838943d4ab..0e995f12e362 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -313,6 +313,12 @@ static inline bool _rev_match(uint8_t entry, uint8_t id) return (entry == ANY_ID) || (entry == id); } +static irqreturn_t irq_handler(int irq, void *data) +{ + struct adreno_gpu *gpu = data; + return gpu->funcs->irq(gpu); +} + static void __iomem *adreno_ioremap(struct platform_device *pdev, const char *name, const char *dbgname) { @@ -405,6 +411,21 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev, if (IS_ERR(gpu->mmio)) return PTR_ERR(gpu->mmio); + /* Get Interrupt: */ + gpu->irq = platform_get_irq_byname(pdev, "kgsl_3d0_irq"); + if (gpu->irq < 0) { + ret = gpu->irq; + dev_err(drm->dev, "failed to get irq: %d\n", ret); + return ret; + } + + ret = devm_request_irq(&pdev->dev, gpu->irq, irq_handler, + IRQF_TRIGGER_HIGH, adreno_get_name(gpu), gpu); + if (ret) { + dev_err(drm->dev, "failed to request IRQ%u: %d\n", gpu->irq, ret); + return ret; + } + ret = msm_gpu_init(drm, pdev, &gpu->base, funcs, "kgsl_3d0_reg_memory", "kgsl_3d0_irq", RB_SIZE); |