1. 程式人生 > >[RK3399][Android7.1] 除錯筆記 --- DDR中clock相關配置

[RK3399][Android7.1] 除錯筆記 --- DDR中clock相關配置

OS: Android 7.1
Board: Firefly-RK3399
Kernel: v4.4.55

把這個拎出來說是因為在除錯ddr default rate的時候對這部分有些誤區。

dmc中clock相關的配置有:

    dmc: dmc {
        compatible = "rockchip,rk3399-dmc";
        ......
        clocks = <&cru SCLK_DDRCLK>;
        clock-names = "dmc_clk";
        ......
    };

clocks:


clocks的第一個表示值”cru“表示clock provider, 即由叫”cru“的模組提供,對應的id是”SCLK_DDRCLK“。
一個clock模組如果有多個不同型別的clock輸出時,可由id表示,這裡的id定義在rk3399-cru.h中:

......
#define SCLK_RMII_SRC           166
#define SCLK_PCIEPHY_REF100M        167
#define SCLK_USBPHY0_480M_SRC       168
#define SCLK_USBPHY1_480M_SRC       169
#define
SCLK_DDRCLK 170
.....

clock-names:
對於此值,一開始以為這個一定是在clk驅動模組和id對應寫好的,於是去查詢”SCLK_DDRCLK“相關的內容:

static struct rockchip_clk_branch rk3399_clk_branches[] __initdata = {
    ......
    COMPOSITE_DDRCLK(SCLK_DDRCLK, "sclk_ddrc", mux_ddrclk_p, 0,
               RK3399_CLKSEL_CON(6), 4, 2, 0, 0, ROCKCHIP_DDRCLK_SIP),
};

然後並沒有找到,後來瞭解得知clock-names只是用於對clocks的對映,意思就是說我現在想查詢id為SCLK_DDRCLK的clock,那麼通過clock-names定義的名字就可以,clk驅動在解析dts的時候完成相應的對映。

例子:
rockchip_dmc.c:

static int rockchip_dmcfreq_probe(struct platform_device *pdev)
{
    //通過clock-names得到對應的struct clk
    data->dmc_clk = devm_clk_get(dev, "dmc_clk");
}

因此clock-names的名字可以隨便取,只要在驅動get clk的引數和它保持一致就可以。