Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 473bc1af authored by Eric Anholt's avatar Eric Anholt Committed by Greg Kroah-Hartman
Browse files

drm/v3d: Handle errors from IRQ setup.



[ Upstream commit fc22771547e7e8a63679f0218e943d72b107de65 ]

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.net


Reviewed-by: default avatarDave Emett <david.emett@broadcom.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent b9c8f86f
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -305,14 +305,18 @@ static int v3d_platform_drm_probe(struct platform_device *pdev)
	if (ret)
		goto dev_destroy;

	v3d_irq_init(v3d);
	ret = v3d_irq_init(v3d);
	if (ret)
		goto gem_destroy;

	ret = drm_dev_register(drm, 0);
	if (ret)
		goto gem_destroy;
		goto irq_disable;

	return 0;

irq_disable:
	v3d_irq_disable(v3d);
gem_destroy:
	v3d_gem_destroy(drm);
dev_destroy:
+1 −1
Original line number Diff line number Diff line
@@ -284,7 +284,7 @@ void v3d_invalidate_caches(struct v3d_dev *v3d);
void v3d_flush_caches(struct v3d_dev *v3d);

/* 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_disable(struct v3d_dev *v3d);
void v3d_irq_reset(struct v3d_dev *v3d);
+11 −2
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@ v3d_hub_irq(int irq, void *arg)
	return status;
}

void
int
v3d_irq_init(struct v3d_dev *v3d)
{
	int ret, core;
@@ -154,13 +154,22 @@ v3d_irq_init(struct v3d_dev *v3d)
	ret = devm_request_irq(v3d->dev, platform_get_irq(v3d->pdev, 0),
			       v3d_hub_irq, IRQF_SHARED,
			       "v3d_hub", v3d);
	if (ret)
		goto fail;

	ret = devm_request_irq(v3d->dev, platform_get_irq(v3d->pdev, 1),
			       v3d_irq, IRQF_SHARED,
			       "v3d_core0", v3d);
	if (ret)
		dev_err(v3d->dev, "IRQ setup failed: %d\n", ret);
		goto fail;

	v3d_irq_enable(v3d);
	return 0;

fail:
	if (ret != -EPROBE_DEFER)
		dev_err(v3d->dev, "IRQ setup failed: %d\n", ret);
	return ret;
}

void