前段时间查看了uboot的时钟,kernel的也稍微了解了下,记录于此,以后再来补充完善。

board-mx6q_sabresd.c

MACHINE_START(MX6Q_SABRESD, "Freescale i.MX 6Quad/DualLite/Solo Sabre-SD Board")
/* Maintainer: Freescale Semiconductor, Inc. */
.boot_params = MX6_PHYS_OFFSET + 0x100,
.fixup = fixup_mxc_board,
.map_io = mx6_map_io,
.init_irq = mx6_init_irq,
.init_machine = mx6_sabresd_board_init,
.timer = &mx6_sabresd_timer, ---------+
.reserve = mx6q_sabresd_reserve, |
MACHINE_END |
|
static struct sys_timer mx6_sabresd_timer = { <----+
.init = mx6_sabresd_timer_init, -----+
}; |
|
static void __init mx6_sabresd_timer_init(void) <----+
{
struct clk *uart_clk;
#ifdef CONFIG_LOCAL_TIMERS
twd_base = ioremap(LOCAL_TWD_ADDR, SZ_256);
BUG_ON(!twd_base);
#endif
mx6_clocks_init(32768, 24000000, 0, 0); -------------+
|
uart_clk = clk_get_sys("imx-uart.0", NULL); |
early_console_setup(UART1_BASE_ADDR, uart_clk); |
} |
|
int __init mx6_clocks_init(unsigned long ckil, unsigned long osc, <---+
unsigned long ckih1, unsigned long ckih2)
{
__iomem void *base;
int i, reg;
u32 parent_rate, rate;
unsigned long ipg_clk_rate, max_arm_wait_clk; external_low_reference = ckil; //32768
external_high_reference = ckih1; //0
ckih2_reference = ckih2; //0
oscillator_reference = osc; //24000000
// 2080000 + 18000 = 2098000
timer_base = ioremap(GPT_BASE_ADDR, SZ_4K);
// 208000 + 48000 = 20C8000
apll_base = ioremap(ANATOP_BASE_ADDR, SZ_4K); for (i = 0; i < ARRAY_SIZE(lookups); i++) {
clkdev_add(&lookups[i]);
clk_debug_register(lookups[i].clk);
}
...... /*
* We don't set ipu1_di_clk[1]'s parent clock to
* pll5_video_main_clk as bootloader may need
* the parent to be ldb_di1_clk to support LVDS
* panel splashimage.
*/
clk_set_parent(&ipu1_di_clk[0], &pll5_video_main_clk); -----------+
#ifndef CONFIG_MX6_CLK_FOR_BOOTUI_TRANS |
clk_set_parent(&ipu1_di_clk[1], &pll5_video_main_clk); |
#endif |
clk_set_parent(&ipu2_di_clk[0], &pll5_video_main_clk); |
clk_set_parent(&ipu2_di_clk[1], &pll5_video_main_clk); |
|
clk_set_parent(&emi_clk, &pll2_pfd_400M); |
clk_set_rate(&emi_clk, 200000000); |
|
........... |
} |
|
static struct clk ipu1_di_clk[] = { <------------------+
{ __INIT_CLK_DEBUG(ipu1_di_clk_0)
.id = 0,
.parent = &pll5_video_main_clk,
.enable_reg = MXC_CCM_CCGR3,
.enable_shift = MXC_CCM_CCGRx_CG1_OFFSET,
.enable = _clk_enable,
.disable = _clk_disable,
.set_parent = _clk_ipu1_di0_set_parent, -------+
.set_rate = _clk_ipu1_di0_set_rate, |
.round_rate = _clk_ipu_di_round_rate, |
.get_rate = _clk_ipu1_di0_get_rate, |
.flags = AHB_HIGH_SET_POINT | CPU_FREQ_TRIG_UPDATE, |
}, |
{ |
__INIT_CLK_DEBUG(ipu1_di_clk_1) |
.id = 1, |
.parent = &pll5_video_main_clk, |
.enable_reg = MXC_CCM_CCGR3, |
.enable_shift = MXC_CCM_CCGRx_CG2_OFFSET, |
.enable = _clk_enable, |
.disable = _clk_disable, |
.set_parent = _clk_ipu1_di1_set_parent, |
.set_rate = _clk_ipu1_di1_set_rate, |
.round_rate = _clk_ipu_di_round_rate, |
.get_rate = _clk_ipu1_di1_get_rate, |
.flags = AHB_HIGH_SET_POINT | CPU_FREQ_TRIG_UPDATE, |
}, |
}; |
|
static int _clk_ipu1_di0_set_parent(struct clk *clk, struct clk *parent) <----+
{
u32 reg, mux; if (parent == &ldb_di0_clk)
mux = 0x3;
else if (parent == &ldb_di1_clk)
mux = 0x4;
else {
reg = __raw_readl(MXC_CCM_CHSCCDR)
& ~MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_MASK; mux = _get_mux6(parent, &mmdc_ch0_axi_clk[0],
&pll3_usb_otg_main_clk, &pll5_video_main_clk,
&pll2_pfd_352M, &pll2_pfd_400M, &pll3_pfd_540M);
reg |= (mux << MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_OFFSET); __raw_writel(reg, MXC_CCM_CHSCCDR); /* Derive clock from divided pre-muxed ipu1_di0 clock.*/
mux = 0;
} reg = __raw_readl(MXC_CCM_CHSCCDR)
& ~MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK;
__raw_writel(reg | (mux << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET),
MXC_CCM_CHSCCDR); return 0;
}

Tony Liu

2016-8-30, Shenzhen

imx6 kernel clock的更多相关文章

  1. imx6 lvds 代码分析

    查看imx6 kernel中lvds设备和驱动的初始化过程. 相关文档: arm/arm/mach-mx6/board-mx6q_sabresd.c kernel/drivers/video/mxc/ ...

  2. Minix2.0操作系统kernel文件分析

    详细分析  MINIX消息机制的核心: mpx386.s start.c proc.c 保护模式分析: src/kernel/exception.c src/kernel/protect.c src/ ...

  3. imx6 18bit display

    imx6 kernel中使用18bit的lcd,uboot中bootargs参数bpp=32,lcd才能够正常显示. "bootargs=console=ttymxc0,115200 ini ...

  4. kernel对NTP的API,系统调用函数

    kenrel API for NTP kernel 提供两个API(即系统调用 system call)给应用程序NTP,去校准kernel system clock Kernel Applicati ...

  5. minix2.0内核组织结构与公用头文件说明

    Minix2.0操作系统的源代码由两个目录组成:include/目录和src/目录 include/目录包含了操作系统所有的头文件(即.h文件) src/目录下包含了操作系统所有的源文件(.c或.s文 ...

  6. saltstack实战4--综合练习1

    规范配置管理 实际工作中可能会有现网环境,基线环境,开发环境. 需要使用saltstack统一管理.机器多了,业务多了,可能配置文件存放的会比较乱,因此可以统一管理起来 我们可以再加2个目录,test ...

  7. #定位系统性能瓶颈# perf

    perf是一个基于Linux 2.6+的调优工具,在liunx性能測量抽象出一套适应于各种不同CPU硬件的通用測量方法,其数据来源于比較新的linux内核提供的 perf_event 接口 系统事件: ...

  8. 学习linux命令,看这篇2w多字的linux命令详解

    用心分享,共同成长 没有什么比每天进步一点点更重要了 本文已收录到我的github:https://github.com/midou-tech/articles/tree/master/docs/li ...

  9. imx6 uboot lvds clock

    在uboot中添加logo,lvds接口的lcd显示不正常,出现波动.网上说是lvds时钟频率的问题. 使用示波器测量之后,发现频率是60M,而lcd最大频率才46.8M. 因此就需要更改uboot中 ...

随机推荐

  1. 【BZOJ】2648: SJY摆棋子 & 2716: [Violet 3]天使玩偶(kdtree)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2716 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  2. 【BZOJ】2049: [Sdoi2008]Cave 洞穴勘测(lct/并查集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2049 bzoj挂了..在wikioi提交,,1A-写lct的速度越来越快了-都不用debug-- 新 ...

  3. COJ968 WZJ的数据结构(负三十二)

    WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...

  4. c++ vector 的使用

    vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1. 首先在程 ...

  5. List 中对象属性排序

    有几个方法可以实现:让 Student 实现Comparable接口,或是实例化一 个比较器, 现在用 Comparator 比较器实例来做一个:ComparableTest.java import  ...

  6. 禁止ViewState的3种解决方法

    默认情况下,ViewState是被启用的,比如提交表单后,表单中输入的值会自动保留.但是如果不需要保留,也可以将其禁用,这样可以节省资源.   下面3种方式就可以分别禁用某一个控件.某一个页面和整个应 ...

  7. QTabWiget Change Color 改变颜色

    Qt中的QTabWiget 类提供了一个标签控件,但是这个控件默认初始化的颜色是白色,和原窗口的颜色不同,看起来非常的违和,所以我们希望将其的背景颜色设为当前窗口的背景颜色.我们所要做的就是先将应用程 ...

  8. Qt OpenCV Support Image Type 支持读写的图像格式

    Qt 支持的图片格式如下: Format Description Qt's support BMP Windows Bitmap Read/write GIF Graphic Interchange ...

  9. 使用Eclipse自带的Axis1插件生成WSDL文件

    首先创建一个web工程,创建过程如下: 如果选择Apache Tomcat v5.5,Dynamic web module version最高只能选择2.4,填写完成后点击“下一步”: 填写默认输出文 ...

  10. MSF命令 收集

    一.msfconsole ?   帮助菜单 back 从当前环境返回 banner   显示一个MSF banner cd   切换目录 color   颜色转换 connect   连接一个主机 e ...