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

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.comTested-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent d3ab06f4
...@@ -348,7 +348,7 @@ static void __init at91sam926x_pmc_setup(struct device_node *np, ...@@ -348,7 +348,7 @@ static void __init at91sam926x_pmc_setup(struct device_node *np,
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); 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)) if (IS_ERR(regmap))
return; return;
......
...@@ -83,7 +83,7 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np) ...@@ -83,7 +83,7 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np)
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); 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)) if (IS_ERR(regmap))
return; return;
......
...@@ -146,7 +146,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np, ...@@ -146,7 +146,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np,
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); 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)) if (IS_ERR(regmap))
return; return;
......
...@@ -275,7 +275,7 @@ static int __init pmc_register_ops(void) ...@@ -275,7 +275,7 @@ static int __init pmc_register_ops(void)
np = of_find_matching_node(NULL, sama5d2_pmc_dt_ids); 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)) if (IS_ERR(pmcreg))
return PTR_ERR(pmcreg); return PTR_ERR(pmcreg);
......
...@@ -162,7 +162,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np) ...@@ -162,7 +162,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); 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)) if (IS_ERR(regmap))
return; return;
......
...@@ -136,7 +136,7 @@ static void __init sama5d4_pmc_setup(struct device_node *np) ...@@ -136,7 +136,7 @@ static void __init sama5d4_pmc_setup(struct device_node *np)
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); 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)) if (IS_ERR(regmap))
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment