[RK3399][Android7.1] 除錯筆記 --- DDR中clock相關配置
阿新 • • 發佈:2019-01-22
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的引數和它保持一致就可以。