【摘要】:SoC电源管理框架与SoC的设计息息相关。platform总线相关的电源管理功能已经在设备模型部分进行了介绍。接下来主要以DM 3730为例对TI芯片SoC电源管理实现进行介绍。从图8-1可见,DM 3730 SoC电源管理的核心是omap_device,其中包含了platform_de-vice和hwmod,platform_device部分包含了与platform bus相关的部分,而hwmod包含了DM3730中各个控制器的硬件信息。
SoC电源管理框架与SoC的设计息息相关。Linux内核在设备模型中提供了platform总线来关联SoC中的各个子模块,这样就可以利用platform总线框架实现SoC电源管理的功能。platform总线相关的电源管理功能已经在设备模型部分进行了介绍。接下来主要以DM 3730为例对TI芯片SoC电源管理实现进行介绍。
DM 3730 SoC电源管理整体框架如图8-1所示。
从图8-1可见,DM 3730 SoC电源管理的核心是omap_device,其中包含了platform_de-vice和hwmod,platform_device部分包含了与platform bus相关的部分,而hwmod包含了DM3730中各个控制器的硬件信息(如时钟、中断、DMA和片内总线的关联)。这样就将系统框架的platform设备到具体芯片内部控制器的信息关联起来,再与具体的操作结合就可以实现电源管理功能。
关于初始化阶段如何将DM 3730电源管理功能与platform bus以及设备模型结合可以参见图8-2。
从图8-2中可见,在各个模块的init操作中通过omap_device_build来读取hwmod的信息并创建相关实体和platform device,从而与设备模型结合,这样在整个框架上,就完整了。
platform device的电源管理操作会涉及platform bus。下面来看看DM 3730做了什么处理:
图8-1 DM 3730 SoC电源管理整体架构
图8-2 DM 3730 SoC电源管理初始化阶段架构
可见其修改了platform bus电源管理操作的部分接口,以omap_pm_runtime_suspend和omap_pm_suspend_noirq为例看看具体的操作:
(www.chuimin.cn)
可见主要还是围绕omap device的操作来执行。而omap device会调用omap_device_pm_latency中的操作,细节如下:
这里既包括了操作也包括了pm QoS的内容,实现了比较全的功能。相应的操作接口如下:
整体的电源管理初始化由omap3_pm_init完成,详细内容如下:
这里除了信息加载外,最重要的就是调用omap_push_sram_idle与操作suspend_set_ops(omap_pm_ops)。omap_push_sram_idle是将系统进入待机状态的最后操作以及从待机状态恢复的开始操作的代码放入片内RAM中,这样才能保证系统正确进入低功耗状态并且能正确恢复;而suspend_set_ops(omap_pm_ops)是修改系统设备模型中SLM整体进入待机状态的操作接口,详细内容如下:
在omap3_pm_enter中会通过omap3_pm_suspend来完成最后的操作,细节如下:
至此,对DM 3730芯片电源管理整体实现进行了完整说明。该架构整体比较清晰,将共性的部分做了完整抽象,从而简化了各个功能模块的实现过程。
该框架可以在DM 3730中使用,TI的其他系列芯片(包括DM 81XX和Sitara系列)也都可以使用该架构实现电源管理功能。
相关推荐