From dd77690c434f02b985c9c30be66943ffc1fea48c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Beh=C3=BAn?= Date: Tue, 24 Apr 2018 17:21:27 +0200 Subject: [PATCH] clk: armada-37xx: Support soc_clk_dump Add support for the clk dump command on Armada 37xx. Signed-off-by: Marek Behun Reviewed-by: Stefan Roese Signed-off-by: Stefan Roese --- drivers/clk/mvebu/armada-37xx-periph.c | 36 +++++++++++++++++++++++++- drivers/clk/mvebu/armada-37xx-tbg.c | 2 ++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/drivers/clk/mvebu/armada-37xx-periph.c b/drivers/clk/mvebu/armada-37xx-periph.c index af08e3df08..902a6cc9ef 100644 --- a/drivers/clk/mvebu/armada-37xx-periph.c +++ b/drivers/clk/mvebu/armada-37xx-periph.c @@ -337,7 +337,8 @@ static int armada_37xx_periph_clk_disable(struct clk *clk) return periph_clk_enable(clk, 0); } -int armada_37xx_periph_clk_dump(struct udevice *dev) +#if defined(CONFIG_CMD_CLK) && defined(CONFIG_CLK_ARMADA_3720) +static int armada_37xx_periph_clk_dump(struct udevice *dev) { struct a37xx_periphclk *priv = dev_get_priv(dev); const struct clk_periph *clks; @@ -356,6 +357,39 @@ int armada_37xx_periph_clk_dump(struct udevice *dev) return 0; } +static int clk_dump(const char *name, int (*func)(struct udevice *)) +{ + struct udevice *dev; + + if (uclass_get_device_by_name(UCLASS_CLK, name, &dev)) { + printf("Cannot find device %s\n", name); + return -ENODEV; + } + + return func(dev); +} + +int armada_37xx_tbg_clk_dump(struct udevice *); + +int soc_clk_dump(void) +{ + printf(" xtal at %u000000 Hz\n\n", get_ref_clk()); + + if (clk_dump("tbg@13200", armada_37xx_tbg_clk_dump)) + return 1; + + if (clk_dump("nb-periph-clk@13000", + armada_37xx_periph_clk_dump)) + return 1; + + if (clk_dump("sb-periph-clk@18000", + armada_37xx_periph_clk_dump)) + return 1; + + return 0; +} +#endif + static int armada_37xx_periph_clk_probe(struct udevice *dev) { struct a37xx_periphclk *priv = dev_get_priv(dev); diff --git a/drivers/clk/mvebu/armada-37xx-tbg.c b/drivers/clk/mvebu/armada-37xx-tbg.c index c035b8f1fa..aa7ccd690f 100644 --- a/drivers/clk/mvebu/armada-37xx-tbg.c +++ b/drivers/clk/mvebu/armada-37xx-tbg.c @@ -93,6 +93,7 @@ static ulong armada_37xx_tbg_clk_get_rate(struct clk *clk) return priv->rates[clk->id]; } +#if defined(CONFIG_CMD_CLK) && defined(CONFIG_CLK_ARMADA_3720) int armada_37xx_tbg_clk_dump(struct udevice *dev) { struct a37xx_tbgclk *priv = dev_get_priv(dev); @@ -105,6 +106,7 @@ int armada_37xx_tbg_clk_dump(struct udevice *dev) return 0; } +#endif static int armada_37xx_tbg_clk_probe(struct udevice *dev) {