5

我正在阅读以下关于 Linux 内核中的新时钟框架的文章。

http://lwn.net/Articles/489668/

  • 我不清楚的是新 API 的clk_prepare/unprepare的用法,它补充了clk_enable/disable API。
  • 还提到虽然可以从原子上下文调用 API 的clk_enable/disable,但这不适用于clk_prepare/unprepare(可以休眠)。为什么会有这种功能和行为的分离?
  • 我很想了解我们需要准备/取消准备的时钟是什么?

谢谢,

~vj

4

1 回答 1

6

在 clk_enable 之前,时钟可能需要设置和锁定 PLL、设置电压 OPP 或其他先决操作。例如:drivers/clk/clk-highbank.c clk_pll_prepare()

这个程序有等待循环,直到硬件 PLL 显示锁定。不能从原子上下文中做到这一点。另一篇 LWN 文章谈到了 prepare() 与 enable() 的分离。

PLL 和时钟详细信息特定于所讨论的处理器/SoC。框图将显示通向各种 PLL 的 SoC 输入引脚的时钟树,然后是从每个 PLL 驱动的各种时钟(也可能具有可以打开/关闭的电源域),以及在“准备”完成后单独启用的时钟。长话短说,但我希望以上内容可能会有所帮助。

于 2013-06-24T18:44:34.390 回答