| From a525c6e2e4321eb261986d9fc98e9702d2b58451 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 28 Nov 2019 11:25:31 +0100 |
| Subject: clk: at91: fix possible deadlock |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Alexandre Belloni <alexandre.belloni@bootlin.com> |
| |
| [ Upstream commit 6956eb33abb5deab2cd916b4c31226b57736bc3c ] |
| |
| 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: Michał Mirosław <mirq-linux@rere.qmqm.pl> |
| Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> |
| Link: https://lkml.kernel.org/r/20191128102531.817549-1-alexandre.belloni@bootlin.com |
| Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> |
| Signed-off-by: Stephen Boyd <sboyd@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/clk/at91/at91sam9260.c | 2 +- |
| drivers/clk/at91/at91sam9rl.c | 2 +- |
| drivers/clk/at91/at91sam9x5.c | 2 +- |
| drivers/clk/at91/pmc.c | 2 +- |
| drivers/clk/at91/sama5d2.c | 2 +- |
| drivers/clk/at91/sama5d4.c | 2 +- |
| 6 files changed, 6 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/clk/at91/at91sam9260.c b/drivers/clk/at91/at91sam9260.c |
| index 0aabe49aed09..a9d4234758d7 100644 |
| --- a/drivers/clk/at91/at91sam9260.c |
| +++ b/drivers/clk/at91/at91sam9260.c |
| @@ -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; |
| |
| diff --git a/drivers/clk/at91/at91sam9rl.c b/drivers/clk/at91/at91sam9rl.c |
| index 0ac34cdaa106..77fe83a73bf4 100644 |
| --- a/drivers/clk/at91/at91sam9rl.c |
| +++ b/drivers/clk/at91/at91sam9rl.c |
| @@ -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; |
| |
| diff --git a/drivers/clk/at91/at91sam9x5.c b/drivers/clk/at91/at91sam9x5.c |
| index 0855f3a80cc7..086cf0b4955c 100644 |
| --- a/drivers/clk/at91/at91sam9x5.c |
| +++ b/drivers/clk/at91/at91sam9x5.c |
| @@ -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; |
| |
| diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c |
| index 0b03cfae3a9d..b71515acdec1 100644 |
| --- a/drivers/clk/at91/pmc.c |
| +++ b/drivers/clk/at91/pmc.c |
| @@ -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); |
| |
| diff --git a/drivers/clk/at91/sama5d2.c b/drivers/clk/at91/sama5d2.c |
| index 0de1108737db..ff7e3f727082 100644 |
| --- a/drivers/clk/at91/sama5d2.c |
| +++ b/drivers/clk/at91/sama5d2.c |
| @@ -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; |
| |
| diff --git a/drivers/clk/at91/sama5d4.c b/drivers/clk/at91/sama5d4.c |
| index 25b156d4e645..a6dee4a3b6e4 100644 |
| --- a/drivers/clk/at91/sama5d4.c |
| +++ b/drivers/clk/at91/sama5d4.c |
| @@ -136,7 +136,7 @@ static void __init sama5d4_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; |
| |
| -- |
| 2.20.1 |
| |