Ядро Linux — Clock Framework — Какова роль clk_prepare/unprepare?

Я читаю следующую статью о новой платформе часов, присутствующей в ядре Linux.

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

  • Что мне непонятно, так это использование новых API clk_prepare/unprepare, которые дополняют API clk_enable/disable.
  • Также упоминается, что, хотя clk_enable/disable API можно вызывать из атомарного контекста, это не относится к clk_prepare/unprepare (которые могут спать). Почему существует такое разделение функциональности и поведения?
  • Мне очень хочется понять, что такого в часах, что нам нужно подготовить/отменить их?

Спасибо,

~vj


person TheLoneJoker    schedule 23.06.2013    source источник


Ответы (1)


Для часов может потребоваться установка и блокировка PLL, установка OPP напряжения или другие предварительные действия перед clk_enable. Например: drivers/clk/clk-highbank.c clk_pll_prepare()

Эта процедура имеет циклы ожидания, которые вращаются до тех пор, пока аппаратная PLL не покажет блокировку. Невозможно сделать это из атомарного контекста. Другая статья LWN немного говорит о разделении prepare() и enable().

Детали PLL и часов зависят от рассматриваемого процессора / SoC. На блок-схемах будет показано дерево тактовых импульсов входных контактов SoC, ведущих к различным PLL, затем различные тактовые сигналы, управляемые от каждого PLL (могут также иметь домены питания, которые можно включать/выключать), и тактовые импульсы, включенные по отдельности после завершения «подготовки». Долгая история, но я надеюсь, что вышеизложенное может быть полезным.

person Joe Kul    schedule 24.06.2013