Clock
芯片名称 | 内核版本 |
---|---|
RK303X | LINUX4.4 & 4.19 & 5.10 |
RK312X | LINUX4.4 & 4.19 & 5.10 |
RK322X | LINUX4.4 & 4.19 & 5.10 |
RK3288X | LINUX4.4 & 4.19 & 5.10 |
RK3328 | LINUX4.4 & 4.19 & 5.10 |
RK3368 | LINUX4.4 & 4.19 & 5.10 |
RK3399 | LINUX4.4 & 4.19 & 5.10 |
RV1108 | LINUX4.4 & 4.19 & 5.10 |
PX30 | LINUX4.4 & 4.19 & 5.10 |
RV1126 | LINUX4.19 & 5.10 |
RK356X | LINUX4.19 & 5.10 |
RK3588 | LINUX5.10 |
RK3576 | LINUX6.1 |
RV1103B | LINUX5.10 |
RK3506 | LINUX6.1 |
前言
本文档主要介绍 RK 平台时钟子系统框架介绍以及配置。
读者对象
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
1. 方案概述
1.1 概述
本章主要描述时钟子系统相关的重要概念、时钟方案、总体流程、代码结构。
1.2 重要概念
时钟子系统
这里讲的时钟是给 SOC 各组件提供时钟的树状框架,并不是内核使用的时间,和其他模块一样,CLOCK 也有框架,用于适配不同的平台。适配层之上是客户代码和接口,也就是各模块(如需要时钟信号的外设,USB 等)的驱动。适配层之下是具体的 SOC 级的时钟操作细节。
时钟树结构
可运行 LINUX 的主流处理器平台,都有非常复杂的 CLOCK TREE,我们随便拿一个处理器的 SPEC,查看 CLOCK 相关的章节,一定会有非常庞大和复杂的树状图,这个图由 CLOCK 相关的器件,以及这些器件输出的 CLOCK 组成。
相关器件
CLOCK 相关的器件包括:用于产生 CLOCK 的 Oscillator(有源振荡器,也称作谐振荡器)或者 Crystal(无源振荡器,也称晶振);用于倍频的 PLL(锁相环,Phase Locked Loop);用于分频的 Divider;用于多路选择的 MUX;用于 CLOCK ENABLE 控制的与门;使用 CLOCK 的硬件模块(可称作 CONSUMER);等等。
1.3 时钟方案
每一个 SOC 都有自己的时钟分配方案,主要是包括 PLL 的设置,各个 CLOCK 的父属性、DIV、MUX 等。芯片不同,时钟方案是有差异的。
图表 1‑1 时钟树的示例图
项目 | 功能 | 路径 |
---|---|---|
clk | rk3xxx.c 中主要是 CLOCK 的寄存器描述、CLOCK 之间的树状关系描述等 | drivers/clk/rockchip/clk-rk3xxx.c |
rk3xxx.c | .h 中是 CLOCK 的 ID 定义,通过 ID 匹配 CLOCK Name | include/dt-bindings/clock/rk3xxx-cru.h |
RK 特别的处理 | 处理 RK 的 PLL 时钟,处理 RK 的一些特殊时钟如 LCDC、I2S 等 | drivers/clk/rockchip/clk-xxx.c |
CLK API | 提供 Linux 环境下供 Driver 调用的接口 | drivers/clk/clk-xxx.x |