Commit fc227715 authored by Eric Anholt's avatar Eric Anholt

drm/v3d: Handle errors from IRQ setup.

Noted in review by Dave Emett for V3D 4.2 support.
Signed-off-by: default avatarEric Anholt <eric@anholt.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20190308174336.7866-1-eric@anholt.netReviewed-by: default avatarDave Emett <david.emett@broadcom.com>
parent 935f3d88
...@@ -311,14 +311,18 @@ static int v3d_platform_drm_probe(struct platform_device *pdev) ...@@ -311,14 +311,18 @@ static int v3d_platform_drm_probe(struct platform_device *pdev)
if (ret) if (ret)
goto dev_destroy; goto dev_destroy;
v3d_irq_init(v3d); ret = v3d_irq_init(v3d);
if (ret)
goto gem_destroy;
ret = drm_dev_register(drm, 0); ret = drm_dev_register(drm, 0);
if (ret) if (ret)
goto gem_destroy; goto irq_disable;
return 0; return 0;
irq_disable:
v3d_irq_disable(v3d);
gem_destroy: gem_destroy:
v3d_gem_destroy(drm); v3d_gem_destroy(drm);
dev_destroy: dev_destroy:
......
...@@ -304,7 +304,7 @@ void v3d_reset(struct v3d_dev *v3d); ...@@ -304,7 +304,7 @@ void v3d_reset(struct v3d_dev *v3d);
void v3d_invalidate_caches(struct v3d_dev *v3d); void v3d_invalidate_caches(struct v3d_dev *v3d);
/* v3d_irq.c */ /* v3d_irq.c */
void v3d_irq_init(struct v3d_dev *v3d); int v3d_irq_init(struct v3d_dev *v3d);
void v3d_irq_enable(struct v3d_dev *v3d); void v3d_irq_enable(struct v3d_dev *v3d);
void v3d_irq_disable(struct v3d_dev *v3d); void v3d_irq_disable(struct v3d_dev *v3d);
void v3d_irq_reset(struct v3d_dev *v3d); void v3d_irq_reset(struct v3d_dev *v3d);
......
...@@ -156,7 +156,7 @@ v3d_hub_irq(int irq, void *arg) ...@@ -156,7 +156,7 @@ v3d_hub_irq(int irq, void *arg)
return status; return status;
} }
void int
v3d_irq_init(struct v3d_dev *v3d) v3d_irq_init(struct v3d_dev *v3d)
{ {
int ret, core; int ret, core;
...@@ -173,13 +173,22 @@ v3d_irq_init(struct v3d_dev *v3d) ...@@ -173,13 +173,22 @@ v3d_irq_init(struct v3d_dev *v3d)
ret = devm_request_irq(v3d->dev, platform_get_irq(v3d->pdev, 0), ret = devm_request_irq(v3d->dev, platform_get_irq(v3d->pdev, 0),
v3d_hub_irq, IRQF_SHARED, v3d_hub_irq, IRQF_SHARED,
"v3d_hub", v3d); "v3d_hub", v3d);
if (ret)
goto fail;
ret = devm_request_irq(v3d->dev, platform_get_irq(v3d->pdev, 1), ret = devm_request_irq(v3d->dev, platform_get_irq(v3d->pdev, 1),
v3d_irq, IRQF_SHARED, v3d_irq, IRQF_SHARED,
"v3d_core0", v3d); "v3d_core0", v3d);
if (ret) if (ret)
dev_err(v3d->dev, "IRQ setup failed: %d\n", ret); goto fail;
v3d_irq_enable(v3d); v3d_irq_enable(v3d);
return 0;
fail:
if (ret != -EPROBE_DEFER)
dev_err(v3d->dev, "IRQ setup failed: %d\n", ret);
return ret;
} }
void void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment