Skip to content

Commit 441bfb7

Browse files
Elaine Zhangkeveryang
authored andcommitted
clk: rockchip: rk3188: print arm enter and init rate
Change-Id: I604c18050e8ccbbc9aa25ecd8f4379a877239d49 Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
1 parent 14262c5 commit 441bfb7

2 files changed

Lines changed: 100 additions & 1 deletion

File tree

arch/arm/include/asm/arch-rockchip/cru_rk3188.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ struct rk3188_clk_priv {
2929
struct rk3188_cru *cru;
3030
ulong rate;
3131
bool has_bwadj;
32+
ulong armclk_hz;
33+
ulong armclk_enter_hz;
34+
ulong armclk_init_hz;
35+
bool sync_kernel;
36+
bool set_armclk_rate;
3237
};
3338

3439
struct rk3188_cru {
@@ -52,6 +57,12 @@ struct rk3188_cru {
5257
};
5358
check_member(rk3188_cru, cru_glb_cnt_th, 0x0140);
5459

60+
struct rk3188_clk_info {
61+
unsigned long id;
62+
char *name;
63+
bool is_cru;
64+
};
65+
5566
/* CRU_CLKSEL0_CON */
5667
enum {
5768
/* a9_core_div: core = core_src / (a9_core_div + 1) */

drivers/clk/rockchip/clk_rk3188.c

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,22 @@ struct rk3188_clk_plat {
3737
#endif
3838
};
3939

40+
#ifndef CONFIG_SPL_BUILD
41+
#define RK3188_CLK_DUMP(_id, _name, _iscru) \
42+
{ \
43+
.id = _id, \
44+
.name = _name, \
45+
.is_cru = _iscru, \
46+
}
47+
48+
static const struct rk3188_clk_info clks_dump[] = {
49+
RK3188_CLK_DUMP(PLL_APLL, "apll", true),
50+
RK3188_CLK_DUMP(PLL_DPLL, "dpll", true),
51+
RK3188_CLK_DUMP(PLL_CPLL, "cpll", true),
52+
RK3188_CLK_DUMP(PLL_GPLL, "gpll", true),
53+
};
54+
#endif
55+
4056
struct pll_div {
4157
u32 nr;
4258
u32 nf;
@@ -593,8 +609,14 @@ static int rk3188_clk_probe(struct udevice *dev)
593609

594610
priv->cru = map_sysmem(plat->dtd.reg[0], plat->dtd.reg[1]);
595611
#endif
596-
612+
priv->sync_kernel = false;
613+
if (!priv->armclk_enter_hz)
614+
priv->armclk_enter_hz = rkclk_pll_get_rate(priv->cru,
615+
CLK_ARM);
597616
rkclk_init(priv->cru, priv->grf, priv->has_bwadj);
617+
if (!priv->armclk_init_hz)
618+
priv->armclk_init_hz = rkclk_pll_get_rate(priv->cru,
619+
CLK_ARM);
598620
#endif
599621

600622
return 0;
@@ -653,3 +675,69 @@ U_BOOT_DRIVER(rockchip_rk3188_cru) = {
653675
.ofdata_to_platdata = rk3188_clk_ofdata_to_platdata,
654676
.probe = rk3188_clk_probe,
655677
};
678+
679+
#ifndef CONFIG_SPL_BUILD
680+
/**
681+
* soc_clk_dump() - Print clock frequencies
682+
* Returns zero on success
683+
*
684+
* Implementation for the clk dump command.
685+
*/
686+
int soc_clk_dump(void)
687+
{
688+
struct udevice *cru_dev;
689+
struct rk3188_clk_priv *priv;
690+
const struct rk3188_clk_info *clk_dump;
691+
struct clk clk;
692+
unsigned long clk_count = ARRAY_SIZE(clks_dump);
693+
unsigned long rate;
694+
int i, ret;
695+
696+
ret = uclass_get_device_by_driver(UCLASS_CLK,
697+
DM_GET_DRIVER(rockchip_rk3188_cru),
698+
&cru_dev);
699+
if (ret) {
700+
printf("%s failed to get cru device\n", __func__);
701+
return ret;
702+
}
703+
704+
priv = dev_get_priv(cru_dev);
705+
printf("CLK: (%s. arm: enter %lu KHz, init %lu KHz, kernel %lu%s)\n",
706+
priv->sync_kernel ? "sync kernel" : "uboot",
707+
priv->armclk_enter_hz / 1000,
708+
priv->armclk_init_hz / 1000,
709+
priv->set_armclk_rate ? priv->armclk_hz / 1000 : 0,
710+
priv->set_armclk_rate ? " KHz" : "N/A");
711+
for (i = 0; i < clk_count; i++) {
712+
clk_dump = &clks_dump[i];
713+
if (clk_dump->name) {
714+
clk.id = clk_dump->id;
715+
if (clk_dump->is_cru)
716+
ret = clk_request(cru_dev, &clk);
717+
if (ret < 0)
718+
return ret;
719+
720+
rate = clk_get_rate(&clk);
721+
clk_free(&clk);
722+
if (i == 0) {
723+
if (rate < 0)
724+
printf(" %s %s\n", clk_dump->name,
725+
"unknown");
726+
else
727+
printf(" %s %lu KHz\n", clk_dump->name,
728+
rate / 1000);
729+
} else {
730+
if (rate < 0)
731+
printf(" %s %s\n", clk_dump->name,
732+
"unknown");
733+
else
734+
printf(" %s %lu KHz\n", clk_dump->name,
735+
rate / 1000);
736+
}
737+
}
738+
}
739+
740+
return 0;
741+
}
742+
#endif
743+

0 commit comments

Comments
 (0)