Commit 6956eb33 authored by Alexandre Belloni's avatar Alexandre Belloni Committed by Stephen Boyd
Browse files

clk: at91: fix possible deadlock



Lockdep warns about a possible circular locking dependency because using
syscon_node_to_regmap() will make the created regmap get and enable the
first clock it can parse from the device tree. This clock is not needed to
access the registers and should not be enabled at that time.

Use the recently introduced device_node_to_regmap to solve that as it looks
up the regmap in the same list but doesn't care about the clocks.

Reported-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lkml.kernel.org/r/20191128102531.817549-1-alexandre.belloni@bootlin.com


Tested-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent d3ab06f4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -348,7 +348,7 @@ static void __init at91sam926x_pmc_setup(struct device_node *np,
		return;
	mainxtal_name = of_clk_get_parent_name(np, i);

	regmap = syscon_node_to_regmap(np);
	regmap = device_node_to_regmap(np);
	if (IS_ERR(regmap))
		return;

+1 −1
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np)
		return;
	mainxtal_name = of_clk_get_parent_name(np, i);

	regmap = syscon_node_to_regmap(np);
	regmap = device_node_to_regmap(np);
	if (IS_ERR(regmap))
		return;

+1 −1
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np,
		return;
	mainxtal_name = of_clk_get_parent_name(np, i);

	regmap = syscon_node_to_regmap(np);
	regmap = device_node_to_regmap(np);
	if (IS_ERR(regmap))
		return;

+1 −1
Original line number Diff line number Diff line
@@ -275,7 +275,7 @@ static int __init pmc_register_ops(void)

	np = of_find_matching_node(NULL, sama5d2_pmc_dt_ids);

	pmcreg = syscon_node_to_regmap(np);
	pmcreg = device_node_to_regmap(np);
	if (IS_ERR(pmcreg))
		return PTR_ERR(pmcreg);

+1 −1
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
		return;
	mainxtal_name = of_clk_get_parent_name(np, i);

	regmap = syscon_node_to_regmap(np);
	regmap = device_node_to_regmap(np);
	if (IS_ERR(regmap))
		return;

Loading