Skip to content

Commit

Permalink
pmdomain: ti-sci: Fix duplicate PD referrals
Browse files Browse the repository at this point in the history
[ Upstream commit 670c900 ]

When the dts file has multiple referrers to a single PD (e.g.
simple-framebuffer and dss nodes both point to the DSS power-domain) the
ti-sci driver will create two power domains, both with the same ID, and
that will cause problems as one of the power domains will hide the other
one.

Fix this checking if a PD with the ID has already been created, and only
create a PD for new IDs.

Fixes: efa5c01 ("soc: ti: ti_sci_pm_domains: switch to use multiple genpds instead of one")
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240415-ti-sci-pd-v1-1-a0e56b8ad897@ideasonboard.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
tomba authored and gregkh committed Jul 5, 2024
1 parent 5fe1b2c commit f77c8a2
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion drivers/soc/ti/ti_sci_pm_domains.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,18 @@ static const struct of_device_id ti_sci_pm_domain_matches[] = {
};
MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches);

static bool ti_sci_pm_idx_exists(struct ti_sci_genpd_provider *pd_provider, u32 idx)
{
struct ti_sci_pm_domain *pd;

list_for_each_entry(pd, &pd_provider->pd_list, node) {
if (pd->idx == idx)
return true;
}

return false;
}

static int ti_sci_pm_domain_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
Expand Down Expand Up @@ -153,8 +165,14 @@ static int ti_sci_pm_domain_probe(struct platform_device *pdev)
break;

if (args.args_count >= 1 && args.np == dev->of_node) {
if (args.args[0] > max_id)
if (args.args[0] > max_id) {
max_id = args.args[0];
} else {
if (ti_sci_pm_idx_exists(pd_provider, args.args[0])) {
index++;
continue;
}
}

pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL);
if (!pd)
Expand Down

0 comments on commit f77c8a2

Please sign in to comment.