diff options
author | Lucas Stach <dev@lynxeye.de> | 2014-05-14 22:45:31 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-05-15 14:17:12 +0200 |
commit | ee493a6152a57ca56cace80fada726e5bf4f4bd5 (patch) | |
tree | 83f86a504df41a048e6f757f97c6a4fdb86f40c5 /drivers/clk | |
parent | 77d45d43c22ca5aa0a6bcf97e88508355073959b (diff) | |
download | barebox-ee493a6152a57ca56cace80fada726e5bf4f4bd5.tar.gz barebox-ee493a6152a57ca56cace80fada726e5bf4f4bd5.tar.xz |
clk: tegra: reset UARTS from clock controller
The console devices are the only ones that can't
use the reset controller properly, as they get
registered from platform code. Reset those devices
from the clock controller.
Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/clk')
-rw-r--r-- | drivers/clk/tegra/clk-tegra20.c | 1 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra30.c | 1 | ||||
-rw-r--r-- | drivers/clk/tegra/clk.c | 11 | ||||
-rw-r--r-- | drivers/clk/tegra/clk.h | 2 |
4 files changed, 15 insertions, 0 deletions
diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c index 7c7a915b40..cb0a57181d 100644 --- a/drivers/clk/tegra/clk-tegra20.c +++ b/drivers/clk/tegra/clk-tegra20.c @@ -348,6 +348,7 @@ static int tegra20_car_probe(struct device_d *dev) &clk_data); tegra_clk_init_rst_controller(car_base, dev->device_node, 3 * 32); + tegra_clk_reset_uarts(); return 0; } diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c index adb5824e4b..9536288f89 100644 --- a/drivers/clk/tegra/clk-tegra30.c +++ b/drivers/clk/tegra/clk-tegra30.c @@ -342,6 +342,7 @@ static int tegra30_car_probe(struct device_d *dev) &clk_data); tegra_clk_init_rst_controller(car_base, dev->device_node, 6 * 32); + tegra_clk_reset_uarts(); return 0; } diff --git a/drivers/clk/tegra/clk.c b/drivers/clk/tegra/clk.c index a6b81d029b..cb4d920203 100644 --- a/drivers/clk/tegra/clk.c +++ b/drivers/clk/tegra/clk.c @@ -187,3 +187,14 @@ void tegra_clk_init_rst_controller(void __iomem *base, struct device_node *np, rst_ctlr.nr_resets = num; reset_controller_register(&rst_ctlr); } + +void tegra_clk_reset_uarts(void) { + int i; + int console_device_ids[] = {6, 7, 55, 65, 66}; + + for (i = 0; i < ARRAY_SIZE(console_device_ids); i++) { + rst_ops.assert(&rst_ctlr, console_device_ids[i]); + udelay(2); + rst_ops.deassert(&rst_ctlr, console_device_ids[i]); + } +}; diff --git a/drivers/clk/tegra/clk.h b/drivers/clk/tegra/clk.h index 29d5249b2e..6ce9f7e26d 100644 --- a/drivers/clk/tegra/clk.h +++ b/drivers/clk/tegra/clk.h @@ -160,3 +160,5 @@ struct tegra_clk_periph_regs { void tegra_clk_init_rst_controller(void __iomem *base, struct device_node *np, unsigned int num); + +void tegra_clk_reset_uarts(void); |