Skip to content

Commit

Permalink
drm/vc4: drv: Call component_unbind_all()
Browse files Browse the repository at this point in the history
[ Upstream commit 6cf61bf ]

While we were using the component framework to deal with all the DRM
subdevices, we were not calling component_unbind_all().

This leads to none of the subdevices freeing up their resources as part of
their unbind() or device managed hooks.

Fixes: c8b75bc ("drm/vc4: Add KMS support for Raspberry Pi.")
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20220711173939.1132294-13-maxime@cerno.tech
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
mripard authored and gregkh committed Oct 21, 2022
1 parent 6fc2cd4 commit 98c02a0
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
14 changes: 12 additions & 2 deletions drivers/gpu/drm/vc4/vc4_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,13 @@ static void vc4_match_add_drivers(struct device *dev,
}
}

static void vc4_component_unbind_all(void *ptr)
{
struct vc4_dev *vc4 = ptr;

component_unbind_all(vc4->dev, &vc4->base);
}

static const struct of_device_id vc4_dma_range_matches[] = {
{ .compatible = "brcm,bcm2711-hvs" },
{ .compatible = "brcm,bcm2835-hvs" },
Expand Down Expand Up @@ -310,6 +317,7 @@ static int vc4_drm_bind(struct device *dev)
if (IS_ERR(vc4))
return PTR_ERR(vc4);
vc4->is_vc5 = is_vc5;
vc4->dev = dev;

drm = &vc4->base;
platform_set_drvdata(pdev, drm);
Expand Down Expand Up @@ -360,6 +368,10 @@ static int vc4_drm_bind(struct device *dev)
if (ret)
return ret;

ret = devm_add_action_or_reset(dev, vc4_component_unbind_all, vc4);
if (ret)
return ret;

ret = vc4_plane_create_additional_planes(drm);
if (ret)
goto unbind_all;
Expand All @@ -380,8 +392,6 @@ static int vc4_drm_bind(struct device *dev)
return 0;

unbind_all:
component_unbind_all(dev, drm);

return ret;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/vc4/vc4_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ struct vc4_perfmon {

struct vc4_dev {
struct drm_device base;
struct device *dev;

bool is_vc5;

Expand Down

0 comments on commit 98c02a0

Please sign in to comment.