七路PLL:
root@(none):/sys/kernel/debug/clk# cat clk_summary
clock enable_cnt prepare_cnt rate accuracy phase
----------------------------------------------------------------------------------------
osc48m 0 0 48000000 0 0
osc48md4 0 0 12000000 0 0
usbohci0_12m 0 0 12000000 0 0
pll_periph0div25m 0 0 25000000 0 0
ephy_25m 0 0 25000000 0 0
hosc 11 11 24000000 0 0
csi_master0 0 0 24000000 0 0
sdmmc0_mod 0 0 800000 0 0
dcxo_out 0 0 24000000 0 0
spwm 0 0 24000000 0 0
cpurapbs2 0 0 24000000 0 0
cpurcpus 1 1 24000000 0 0
cpurahbs 1 1 24000000 0 0
cpurapbs1 2 2 24000000 0 0
cpurpio 1 1 24000000 0 0
stwi 1 1 24000000 0 0
csi_master1 0 0 24000000 0 0
mipi_host0 1 1 24000000 0 0
usbphy0 1 1 24000000 0 0
ths 1 1 24000000 0 0
gpadc 1 1 24000000 0 0
spi2 0 0 24000000 0 0
spi1 0 0 24000000 0 0
sdmmc2_rst 0 0 24000000 0 0
sdmmc2_bus 0 0 24000000 0 0
sdmmc2_mod 0 0 24000000 0 0
sdmmc1_rst 0 0 24000000 0 0
sdmmc1_bus 0 0 24000000 0 0
sdmmc1_mod 0 0 24000000 0 0
sdmmc0_rst 0 0 24000000 0 0
sdmmc0_bus 0 0 24000000 0 0
dbgsys 0 0 24000000 0 0
avs 0 0 24000000 0 0
apb2 1 1 24000000 0 0
twi3 0 0 24000000 0 0
twi2 0 0 24000000 0 0
twi1 0 0 24000000 0 0
twi0 0 0 24000000 0 0
uart3 0 0 24000000 0 0
uart2 0 0 24000000 0 0
uart1 0 0 24000000 0 0
uart0 1 1 24000000 0 0
hoscd2 0 0 12000000 0 0
pll_csi 0 0 336000000 0 0
csi_top 0 0 336000000 0 0
pll_audio 4 4 22579200 0 0
codec_1x 1 1 22579200 0 0
i2s0 1 1 22579200 0 0
codec_4x 0 0 22579200 0 0
i2s1 0 0 22579200 0 0
pll_audiox2 0 0 45158400 0 0
pll_audiox4 0 0 90316800 0 0
pll_video0 2 2 99000000 0 0
dspo 0 0 99000000 0 0
tcon_lcd 1 1 99000000 0 0
mipi_dphy0 1 1 24750000 0 0
pll_video0x4 0 0 396000000 0 0
pll_uni 2 3 600000000 0 0
eise 0 0 600000000 0 0
isp 0 0 300000000 0 0
ve 0 1 600000000 0 0
de 1 1 300000000 0 0
g2d 1 1 300000000 0 0
pll_unix2 0 0 1200000000 0 0
pll_periph0 4 4 600000000 0 0
spi0 1 1 100000000 0 0
cpurapbs2_pll 0 0 600000000 0 0
cpurcpus_pll 0 0 600000000 0 0
nna_rst 0 0 600000000 0 0
apb1 2 2 100000000 0 0
pio 1 1 100000000 0 0
pwm 1 1 100000000 0 0
ahb3 2 2 200000000 0 0
display_top 1 1 200000000 0 0
usbotg 1 1 200000000 0 0
usbehci0 0 0 200000000 0 0
usbohci0 0 0 200000000 0 0
gmac 0 0 200000000 0 0
psi 1 1 200000000 0 0
ahb2 0 0 200000000 0 0
ahb1 2 2 200000000 0 0
iommu 1 1 200000000 0 0
hstimer 0 0 200000000 0 0
dma 1 1 200000000 0 0
periph32k 0 0 32768 0 0
pll_periph0x2 0 0 1200000000 0 0
nna 0 0 1200000000 0 0
ce 0 0 300000000 0 0
pll_ddr0 0 0 1584000000 0 0
sdram 0 0 1584000000 0 0
mbus 0 0 396000000 0 0
pll_cpu 0 0 600000000 0 0
cpu 0 0 600000000 0 0
cpuapb 0 0 150000000 0 0
axi 0 0 200000000 0 0
iosc 0 0 16000000 0 0
losc 1 1 32768 0 0
losc_out 1 1 32768 0 0
cpurowc 0 0 32768 0 0
root@(none):/sys/kernel/debug/clk#
下图是Melis的时钟分布:
一般都有多路PLL,这多路PLL是由同一个晶振源驱动的,都是参考24M晶振时钟驱动的,一带多的哪种,后面那个其实是一个pll输出两个频率.还是一个PLL。
FIX_SRC是表示固定时钟源24M这些,FIX_FACTOR是指pllx4/pllx2这种由pll固定分频的时钟源
Melis下的实际分析:
在Tina上进行以下分析时,需要注意需要先通过DS5 关闭MMU功能,否则无法直接读取CCMU物理地址.
CPU主频获取:
CCMU基地址是0x03001000,PLL_CPUX控制寄存器偏移为0,读出来是0x8A003100,解析出N,M值分别为0x31和0x0,外部激励时钟是HOSC=24M,所以 CPU主频跑
Tina上则不同,由于Tina支持动态调频调压,在系统负荷不重的情况下,得到的寄存器如下图所示:
解析出N,M值分别为0x18和0x0,外部激励时钟是HOSC=24M,所以 CPU主频跑
和上文的clk_summary的输出是吻合的。
但是当执行
dd if=/dev/zero of=/dev/null
后,DS5连接获取到的寄存器如下图所示:
这个值和上面melis的分析是一致的,所以,它是1.2G.也就是这个时候随着负荷变重,CPU 满负荷运行。如下图所示.
root@(none):/sys/kernel/debug/clk# cat clk_summary
clock enable_cnt prepare_cnt rate accuracy phase
----------------------------------------------------------------------------------------
osc48m 0 0 48000000 0 0
osc48md4 0 0 12000000 0 0
usbohci0_12m 0 0 12000000 0 0
pll_periph0div25m 0 0 25000000 0 0
ephy_25m 0 0 25000000 0 0
hosc 11 11 24000000 0 0
csi_master0 0 0 24000000 0 0
sdmmc0_mod 0 0 800000 0 0
dcxo_out 0 0 24000000 0 0
spwm 0 0 24000000 0 0
cpurapbs2 0 0 24000000 0 0
cpurcpus 1 1 24000000 0 0
cpurahbs 1 1 24000000 0 0
cpurapbs1 2 2 24000000 0 0
cpurpio 1 1 24000000 0 0
stwi 1 1 24000000 0 0
csi_master1 0 0 24000000 0 0
mipi_host0 1 1 24000000 0 0
usbphy0 1 1 24000000 0 0
ths 1 1 24000000 0 0
gpadc 1 1 24000000 0 0
spi2 0 0 24000000 0 0
spi1 0 0 24000000 0 0
sdmmc2_rst 0 0 24000000 0 0
sdmmc2_bus 0 0 24000000 0 0
sdmmc2_mod 0 0 24000000 0 0
sdmmc1_rst 0 0 24000000 0 0
sdmmc1_bus 0 0 24000000 0 0
sdmmc1_mod 0 0 24000000 0 0
sdmmc0_rst 0 0 24000000 0 0
sdmmc0_bus 0 0 24000000 0 0
dbgsys 0 0 24000000 0 0
avs 0 0 24000000 0 0
apb2 1 1 24000000 0 0
twi3 0 0 24000000 0 0
twi2 0 0 24000000 0 0
twi1 0 0 24000000 0 0
twi0 0 0 24000000 0 0
uart3 0 0 24000000 0 0
uart2 0 0 24000000 0 0
uart1 0 0 24000000 0 0
uart0 1 1 24000000 0 0
hoscd2 0 0 12000000 0 0
pll_csi 0 0 336000000 0 0
csi_top 0 0 336000000 0 0
pll_audio 4 4 22579200 0 0
codec_1x 1 1 22579200 0 0
i2s0 1 1 22579200 0 0
codec_4x 0 0 22579200 0 0
i2s1 0 0 22579200 0 0
pll_audiox2 0 0 45158400 0 0
pll_audiox4 0 0 90316800 0 0
pll_video0 2 2 99000000 0 0
dspo 0 0 99000000 0 0
tcon_lcd 1 1 99000000 0 0
mipi_dphy0 1 1 24750000 0 0
pll_video0x4 0 0 396000000 0 0
pll_uni 2 3 600000000 0 0
eise 0 0 600000000 0 0
isp 0 0 300000000 0 0
ve 0 1 600000000 0 0
de 1 1 300000000 0 0
g2d 1 1 300000000 0 0
pll_unix2 0 0 1200000000 0 0
pll_periph0 4 4 600000000 0 0
spi0 1 1 100000000 0 0
cpurapbs2_pll 0 0 600000000 0 0
cpurcpus_pll 0 0 600000000 0 0
nna_rst 0 0 600000000 0 0
apb1 2 2 100000000 0 0
pio 1 1 100000000 0 0
pwm 1 1 100000000 0 0
ahb3 2 2 200000000 0 0
display_top 1 1 200000000 0 0
usbotg 1 1 200000000 0 0
usbehci0 0 0 200000000 0 0
usbohci0 0 0 200000000 0 0
gmac 0 0 200000000 0 0
psi 1 1 200000000 0 0
ahb2 0 0 200000000 0 0
ahb1 2 2 200000000 0 0
iommu 1 1 200000000 0 0
hstimer 0 0 200000000 0 0
dma 1 1 200000000 0 0
periph32k 0 0 32768 0 0
pll_periph0x2 0 0 1200000000 0 0
nna 0 0 1200000000 0 0
ce 0 0 300000000 0 0
pll_ddr0 0 0 1584000000 0 0
sdram 0 0 1584000000 0 0
mbus 0 0 396000000 0 0
pll_cpu 0 0 1200000000 0 0
cpu 0 0 1200000000 0 0
cpuapb 0 0 300000000 0 0
axi 0 0 400000000 0 0
iosc 0 0 16000000 0 0
losc 1 1 32768 0 0
losc_out 1 1 32768 0 0
cpurowc 0 0 32768 0 0
root@(none):/sys/kernel/debug/clk#
当杀掉dd测试, 重新获取clk_summary信息:
root@(none):/sys/kernel/debug/clk# cat clk_summary
clock enable_cnt prepare_cnt rate accuracy phase
----------------------------------------------------------------------------------------
osc48m 0 0 48000000 0 0
osc48md4 0 0 12000000 0 0
usbohci0_12m 0 0 12000000 0 0
pll_periph0div25m 0 0 25000000 0 0
ephy_25m 0 0 25000000 0 0
hosc 11 11 24000000 0 0
csi_master0 0 0 24000000 0 0
sdmmc0_mod 0 0 800000 0 0
dcxo_out 0 0 24000000 0 0
spwm 0 0 24000000 0 0
cpurapbs2 0 0 24000000 0 0
cpurcpus 1 1 24000000 0 0
cpurahbs 1 1 24000000 0 0
cpurapbs1 2 2 24000000 0 0
cpurpio 1 1 24000000 0 0
stwi 1 1 24000000 0 0
csi_master1 0 0 24000000 0 0
mipi_host0 1 1 24000000 0 0
usbphy0 1 1 24000000 0 0
ths 1 1 24000000 0 0
gpadc 1 1 24000000 0 0
spi2 0 0 24000000 0 0
spi1 0 0 24000000 0 0
sdmmc2_rst 0 0 24000000 0 0
sdmmc2_bus 0 0 24000000 0 0
sdmmc2_mod 0 0 24000000 0 0
sdmmc1_rst 0 0 24000000 0 0
sdmmc1_bus 0 0 24000000 0 0
sdmmc1_mod 0 0 24000000 0 0
sdmmc0_rst 0 0 24000000 0 0
sdmmc0_bus 0 0 24000000 0 0
dbgsys 0 0 24000000 0 0
avs 0 0 24000000 0 0
apb2 1 1 24000000 0 0
twi3 0 0 24000000 0 0
twi2 0 0 24000000 0 0
twi1 0 0 24000000 0 0
twi0 0 0 24000000 0 0
uart3 0 0 24000000 0 0
uart2 0 0 24000000 0 0
uart1 0 0 24000000 0 0
uart0 1 1 24000000 0 0
hoscd2 0 0 12000000 0 0
pll_csi 0 0 336000000 0 0
csi_top 0 0 336000000 0 0
pll_audio 4 4 22579200 0 0
codec_1x 1 1 22579200 0 0
i2s0 1 1 22579200 0 0
codec_4x 0 0 22579200 0 0
i2s1 0 0 22579200 0 0
pll_audiox2 0 0 45158400 0 0
pll_audiox4 0 0 90316800 0 0
pll_video0 2 2 99000000 0 0
dspo 0 0 99000000 0 0
tcon_lcd 1 1 99000000 0 0
mipi_dphy0 1 1 24750000 0 0
pll_video0x4 0 0 396000000 0 0
pll_uni 2 3 600000000 0 0
eise 0 0 600000000 0 0
isp 0 0 300000000 0 0
ve 0 1 600000000 0 0
de 1 1 300000000 0 0
g2d 1 1 300000000 0 0
pll_unix2 0 0 1200000000 0 0
pll_periph0 4 4 600000000 0 0
spi0 1 1 100000000 0 0
cpurapbs2_pll 0 0 600000000 0 0
cpurcpus_pll 0 0 600000000 0 0
nna_rst 0 0 600000000 0 0
apb1 2 2 100000000 0 0
pio 1 1 100000000 0 0
pwm 1 1 100000000 0 0
ahb3 2 2 200000000 0 0
display_top 1 1 200000000 0 0
usbotg 1 1 200000000 0 0
usbehci0 0 0 200000000 0 0
usbohci0 0 0 200000000 0 0
gmac 0 0 200000000 0 0
psi 1 1 200000000 0 0
ahb2 0 0 200000000 0 0
ahb1 2 2 200000000 0 0
iommu 1 1 200000000 0 0
hstimer 0 0 200000000 0 0
dma 1 1 200000000 0 0
periph32k 0 0 32768 0 0
pll_periph0x2 0 0 1200000000 0 0
nna 0 0 1200000000 0 0
ce 0 0 300000000 0 0
pll_ddr0 0 0 1584000000 0 0
sdram 0 0 1584000000 0 0
mbus 0 0 396000000 0 0
pll_cpu 0 0 600000000 0 0
cpu 0 0 600000000 0 0
cpuapb 0 0 150000000 0 0
axi 0 0 200000000 0 0
iosc 0 0 16000000 0 0
losc 1 1 32768 0 0
losc_out 1 1 32768 0 0
cpurowc 0 0 32768 0 0
root@(none):/sys/kernel/debug/clk#
对比后,发现只有PLL_CPU这路PLL发生了调压调频的变化:
所以,以上我们直观的感受了动态调频调压.
关于如何关闭Tina的动态调频调压,可以看这篇博客:
Tina关闭动态调压调频_tugouxp的专栏-CSDN博客
DDR频率获取:
CCMU基地址是0x03001000,PLL_DDR0控制寄存器偏移为0x10,值为0xB8004100(看上一幅图),计算公式是
,这个频率看起来是DDR3.
VE频率的获取:
CCMU基地址是0x03001000,VE Clock控制寄存器偏移为0x690,值为0x81000003
根据寄存器的定义
其中clocksource选择的是PLL_UNI(2X).(bit [25:24] = 0b01).
所以,要算出VE的工作频率,首先要得到clocksource的工作频率,而VE在V833上最多有4个clock source,根据当前配置,选择的是PLL_UNI(2X)
PLL_UNI的寄存器偏移为:0x0028
PLL_UNI(1X)的计算公式为:
根据配置信息,N=0x31,M0=M1=0
相应的PLL_UNI(2X)为
所以
所以,VPU在V833项目中跑的频率是300M.
PLL_PERI0频率获取:
PLL_PERI0_1X =
PLL_PERI0_2X =
参考spec,PLL_PERI0寄存器地址偏移是0x0020
N=50,M0=1,M1=1
所以
PLL_PERI0_1X主频是600M
PLL_PERI0_2X主频是1.2G
PLL_VIDEO频率获取:
计算公式:
PLL_VIDEO_1X=
PLL_VIDEO_4X=
N=33,M=2
所以
PLL_VIDOE_1X=24*33/2/4=99M;
PLL_VIDEO_4X=24*33/2=396M.
PLL_CSI频率获取:
计算公式
PLL_CSI=24*N/M0/M1
N=28,M1=1,M0=2;
PLL_CSI=24*28/2/1 = 336M;
PLL_AUDIO频率获取:
PLL_AUDIO=24*N/M0/M1/P
PLL_AUDIO_4X=24*N/M1/2
PLL_AUDIO_2X=24*N/M1/4
N=43,P=21,M0=2,M1=1;
所以
PLL_AUDIO=24*43/2/1/21 = 24.5714MHZ.
PLL_AUDIO_4X=24*43/1/2=516MHZ.
PLL_AUDIO_2X=24*43/1/4=258MHZ.
NNA时钟统计:
NNA挂在pll_periph0x2时钟源上,寄存器信息如下:
根据bit24~26给出的信息,确认当前使用的是pll_periph0x2 1.2HZ的时钟源.
M=2;
所以,根据计算公式,NNA的时钟速度是
以上所有这些时钟树的主干时钟均在 boot0阶段都已配好。