msm: clock-debug: Print dependency chains
Print the dependency chains in the debug_suspend output. This
allows us to accurately see which clock is using which PLL or XO.
Sample output:
Enabled clocks:
pll8_clk -> pxo_clk
pll4_clk -> pxo_clk
afab_clk
afab_a_clk
dfab_clk
dfab_a_clk
ebi1_clk
ebi1_a_clk
gsbi5_uart_clk -> pll8_clk -> pxo_clk
gsbi3_qup_clk -> pll8_clk -> pxo_clk
gsbi4_qup_clk -> pll8_clk -> pxo_clk
pmem_clk
sdc1_clk -> pll8_clk -> pxo_clk
dma_bam_p_clk
gsbi3_p_clk
gsbi4_p_clk
gsbi5_p_clk
usb_hs1_p_clk
sdc1_p_clk
audio_slimbus_clk -> pll4_clk -> pxo_clk
dfab_usb_hs_clk -> dfab_clk
dfab_sdc1_clk -> dfab_clk
Enabled clock count: 22
Change-Id: I53ba720348c4b86a3d24aa83a970d91ca0637b43
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
diff --git a/arch/arm/mach-msm/clock-debug.c b/arch/arm/mach-msm/clock-debug.c
index ab4d8c1..78586a8 100644
--- a/arch/arm/mach-msm/clock-debug.c
+++ b/arch/arm/mach-msm/clock-debug.c
@@ -141,9 +141,24 @@
return ret;
}
+
+static int clock_debug_print_clock(struct clk *c)
+{
+ size_t ln = 0;
+ char s[128];
+
+ if (!c || !c->count)
+ return 0;
+
+ ln += snprintf(s, sizeof(s), "\t%s", c->dbg_name);
+ while (ln < sizeof(s) && (c = clk_get_parent(c)))
+ ln += snprintf(s + ln, sizeof(s) - ln, " -> %s", c->dbg_name);
+ pr_info("%s\n", s);
+ return 1;
+}
+
void clock_debug_print_enabled(void)
{
- struct clk *clk;
unsigned i;
int cnt = 0;
@@ -151,14 +166,8 @@
return;
pr_info("Enabled clocks:\n");
- for (i = 0; i < num_msm_clocks; i++) {
- clk = msm_clocks[i].clk;
-
- if (clk && clk->ops->is_enabled && clk->ops->is_enabled(clk)) {
- pr_info("\t%s\n", clk->dbg_name);
- cnt++;
- }
- }
+ for (i = 0; i < num_msm_clocks; i++)
+ cnt += clock_debug_print_clock(msm_clocks[i].clk);
if (cnt)
pr_info("Enabled clock count: %d\n", cnt);