#include "pwrcal-env.h" #include "pwrcal-clk.h" #include "pwrcal-vclk.h" #include "pwrcal-pmu.h" #include "pwrcal-rae.h" static void cal_vclk_grpgate_info(struct vclk *vclk) { struct pwrcal_vclk_grpgate *grpgate = to_grpgate(vclk); int i; pr_info("GRPGATE : %s\n", vclk->name); pr_info("- ref : %d\n", vclk->ref_count); if (!vclk->ref_count) goto out; for (i = 0; grpgate->gates[i] != CLK_NONE; i++) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", grpgate->gates[i]->name, pwrcal_clk_get_rate(grpgate->gates[i]), (unsigned int)(unsigned long)(grpgate->gates[i]->offset), grpgate->gates[i]->shift, grpgate->gates[i]->id); out: return; } static void cal_vclk_m1d1g1_info(struct vclk *vclk) { struct pwrcal_vclk_m1d1g1 *m1d1g1 = to_m1d1g1(vclk); pr_info("M1D1G1 : %s\n", vclk->name); pr_info("- ref : %d vfreq : %ld]\n", vclk->ref_count, vclk->vfreq); if (!vclk->ref_count) goto out; if (m1d1g1->mux != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", m1d1g1->mux->name, pwrcal_clk_get_rate(m1d1g1->mux), (unsigned int)(unsigned long)(m1d1g1->mux->offset), m1d1g1->mux->shift, m1d1g1->mux->id); if (m1d1g1->div != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", m1d1g1->div->name, pwrcal_clk_get_rate(m1d1g1->div), (unsigned int)(unsigned long)(m1d1g1->div->offset), m1d1g1->div->shift, m1d1g1->div->id); if (m1d1g1->gate != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", m1d1g1->gate->name, pwrcal_clk_get_rate(m1d1g1->gate), (unsigned int)(unsigned long)(m1d1g1->gate->offset), m1d1g1->gate->shift, m1d1g1->gate->id); if (m1d1g1->extramux != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", m1d1g1->extramux->name, pwrcal_clk_get_rate(m1d1g1->extramux), (unsigned int)(unsigned long)(m1d1g1->extramux->offset), m1d1g1->extramux->shift, m1d1g1->extramux->id); out: return; } static void cal_vclk_p1_info(struct vclk *vclk) { struct pwrcal_vclk_p1 *p1 = to_p1(vclk); pr_info("P1 : %s\n", vclk->name); pr_info("- ref : %d vfreq : %ld]\n", vclk->ref_count, vclk->vfreq); if (!vclk->ref_count) goto out; if (p1->pll != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", p1->pll->name, pwrcal_clk_get_rate(p1->pll), (unsigned int)(unsigned long)(p1->pll->offset), p1->pll->shift, p1->pll->id); out: return; } static void cal_vclk_m1_info(struct vclk *vclk) { struct pwrcal_vclk_m1 *m1 = to_m1(vclk); pr_info("M1 : %s\n", vclk->name); pr_info("- ref : %d vfreq : %ld]\n", vclk->ref_count, vclk->vfreq); if (!vclk->ref_count) goto out; if (m1->mux != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", m1->mux->name, pwrcal_clk_get_rate(m1->mux), (unsigned int)(unsigned long)(m1->mux->offset), m1->mux->shift, m1->mux->id); out: return; } static void cal_vclk_d1_info(struct vclk *vclk) { struct pwrcal_vclk_d1 *d1 = to_d1(vclk); pr_info("M1 : %s\n", vclk->name); pr_info("- ref : %d vfreq : %ld]\n", vclk->ref_count, vclk->vfreq); if (!vclk->ref_count) goto out; if (d1->div != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", d1->div->name, pwrcal_clk_get_rate(d1->div), (unsigned int)(unsigned long)(d1->div->offset), d1->div->shift, d1->div->id); out: return; } static void cal_vclk_umux_info(struct vclk *vclk) { struct pwrcal_vclk_umux *umux = to_umux(vclk); pr_info("M1 : %s\n", vclk->name); pr_info("- ref : %d vfreq : %ld]\n", vclk->ref_count, vclk->vfreq); if (!vclk->ref_count) goto out; if (umux->umux != CLK_NONE) pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", umux->umux->name, pwrcal_clk_get_rate(umux->umux), (unsigned int)(unsigned long)(umux->umux->offset), umux->umux->shift, umux->umux->id); out: return; } static void cal_vclk_pxmxdx_info(struct vclk *vclk) { struct pwrcal_vclk_pxmxdx *pxmxdx = to_pxmxdx(vclk); struct pwrcal_clk *clk; int i; pr_info("M1 : %s\n", vclk->name); pr_info("- ref : %d vfreq : %ld]\n", vclk->ref_count, vclk->vfreq); if (!vclk->ref_count) goto out; for (i = 0; pxmxdx->clk_list[i].clk != CLK_NONE; i++) { clk = pxmxdx->clk_list[i].clk; pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", clk->name, pwrcal_clk_get_rate(clk), (unsigned int)(unsigned long)(clk->offset), clk->shift, clk->id); } out: return; } static void cal_vclk_dfs_info(struct vclk *vclk) { struct pwrcal_vclk_dfs *dfs = to_dfs(vclk); struct pwrcal_clk *clk; int i; pr_info("DFS : %s\n", vclk->name); pr_info("- ref : %d vfreq : %ld]\n", vclk->ref_count, vclk->vfreq); if (!vclk->ref_count) goto out; for (i = 1; i < dfs->table->num_of_members; i++) { clk = dfs->table->members[i]; pr_info("- %s\t%lldHz\tSFR: 0x%08X[%d]\tID[0x%08X]\n", clk->name, pwrcal_clk_get_rate(clk), (unsigned int)(unsigned long)(clk->offset), clk->shift, clk->id); } out: return; } void cal_vclk_dbg_info(unsigned int id) { struct vclk *vclk = cal_get_vclk(id); if ((id & mask_of_type) != vclk_type) { pr_err("cal_vclk_dbg_info : invalid id (0x%08X)\n", id); return; } switch (id & (mask_of_type | mask_of_group)) { case vclk_group_grpgate: cal_vclk_grpgate_info(vclk); break; case vclk_group_m1d1g1: cal_vclk_m1d1g1_info(vclk); break; case vclk_group_p1: cal_vclk_p1_info(vclk); break; case vclk_group_m1: cal_vclk_m1_info(vclk); break; case vclk_group_d1: cal_vclk_d1_info(vclk); break; case vclk_group_pxmxdx: cal_vclk_pxmxdx_info(vclk); break; case vclk_group_umux: cal_vclk_umux_info(vclk); break; case vclk_group_dfs: cal_vclk_dfs_info(vclk); break; default: break; } return; }