要了解具体芯片的DMA使用和管理,首先要看一下硬件的设计。图4-44DM 3730 SDMA与其他模块联系系统框图从图4-44可见,SDMA共有96个DMA请求,用于设备请求DMA进行数据传输处理。SDMA可以访问到外设并可以响应芯片外部的DMA请求。为了提高整个的DMA性能,DMA提供多个中断信号给处理器,来加速系统对DMA处理数据过程的响应。DMA是很多驱动都需要使用的基础功能之一,以上进行了详细的代码级分析。......
2025-09-30
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为例看看具体的操作:
(https://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系列)也都可以使用该架构实现电源管理功能。
相关文章
要了解具体芯片的DMA使用和管理,首先要看一下硬件的设计。图4-44DM 3730 SDMA与其他模块联系系统框图从图4-44可见,SDMA共有96个DMA请求,用于设备请求DMA进行数据传输处理。SDMA可以访问到外设并可以响应芯片外部的DMA请求。为了提高整个的DMA性能,DMA提供多个中断信号给处理器,来加速系统对DMA处理数据过程的响应。DMA是很多驱动都需要使用的基础功能之一,以上进行了详细的代码级分析。......
2025-09-30
DM 3730的MMC控制器框架如图7-11所示。图7-11DM 3730 MMC框架图从图7-11可见,MMC控制器中有复杂的命令和数据管理,控制器内部带有buffer用于数据缓冲,数据主要通过DMA读写。关于DM 3730 MMC的驱动部分,主要分析其相关的初始化和总线传输以及card状态变化的操作。......
2025-09-30
下面以4.1.1节所介绍的系统初始化流程为例,来看看不同的处理器启动流程的区别。图4-4和图4-5分别是DM 816X和DM 3730的启动流程。其中原因是芯片内部片内内存大小。接下来以TI芯片为基础进行整个系统的初始化过程详解。之前讨论内核初始化需求的时候,提到初始化代码应该在初始化之后释放相应的内存空间,这里可以看出Linux内核已经将初始化相关的代码统一存放并管理,一方面方便初始化时调用,另一方面可以在系统初始化之后将这部分空间释放。......
2025-09-30
TI芯片GPIO管理的具体实现仍是以DM 3730为例,关于GPIO模块本身,DM81XX等处理器与DM 3730是相同的,只是一些寄存器地址和参数不同。图4-50DM 3730GPIO子系统框图从图4-50可见,DM 3730一共有6组GPIO管理单元,每组管理32个GPIO。1重要的初始化实现对于GPIO功能芯片特殊的实现和GPIO lib的接口就是gpio_chip。3GPIO中断相关实现GPIO中断相关的实现,最主要的是中断控制器相关的接口实现以及中断级联中GPIO组的中断处理函数。......
2025-09-30
接下来分步说明中断处理的具体实现。Linux内核irqdesc.h中有如下定义:这里可见宏NR_IRQS描述了所有中断的个数,这个数目应该是和处理器相关的。具体的级联中断的解决办法留到相应模块中进行详细说明。3中断控制器的处理接下来看看DM 3730的内核是如何实现中断控制器的管理的。图4-30引自《DM 3730芯片手册》中第2411页的框图。电源管理没有中断控制器唤醒的相关实现,由于这部分是在ARM主处理器的电源域中,并不需要这部分功能。......
2025-09-30
1芯片片内内存使用TI芯片相关的内存管理,对片外内存来说,可以通过启动参数将需要内核管理的内存进行设置。这样做的原因是由于需要连续的物理内存空间,并且对内核的物理内存管理影响最小。3独立cmem管理之前简单说明芯片厂商的独立内存管理,针对于TI的视频芯片,TI提供了cmem的内存管理驱动,主要是连续内存管理。有了该内存管理功能,TI的多媒体框架和编解码库就可以使用连续的物理内存空间,高效地完成多媒体处理相关的功能。......
2025-09-30
对DM 3730的开发板,相关的输入设备是电源管理芯片中的键盘矩阵,这里对相关的输入设备驱动进行分析。在硬件介绍中已经见到DM 3730与电源管理芯片是通过I2C总线进行连接的,所以该键盘驱动需要建立在I2C总线操作之上。具体获得相关信息的方法都是通过类似twl4030_read_kp_matrix_state的操作完成的,其中会进行实际的I2C总线操作,具体的细节会在总线部分进行介绍。在驱动获得硬件的信息后就是向输入设备框架汇报相应的事件,框架会上传给even than-dler,最终被用户读取。......
2025-09-30
相关推荐