mirror of
https://github.com/torvalds/linux
synced 2024-09-22 20:37:18 +00:00
drm/v3d: Handle errors from IRQ setup.
Noted in review by Dave Emett for V3D 4.2 support. Signed-off-by: Eric Anholt <eric@anholt.net> Link: https://patchwork.freedesktop.org/patch/msgid/20190308174336.7866-1-eric@anholt.net Reviewed-by: Dave Emett <david.emett@broadcom.com>
This commit is contained in:
parent
935f3d8843
commit
fc22771547
|
@ -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);
|
||||||
|
|
||||||
ret = drm_dev_register(drm, 0);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
goto gem_destroy;
|
goto gem_destroy;
|
||||||
|
|
||||||
|
ret = drm_dev_register(drm, 0);
|
||||||
|
if (ret)
|
||||||
|
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);
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue