MTK Linux DRM分析(十七)- MTK KMS实现mtk_drm_fb.c
一、MTK FB代码分析
mtk_drm_fb.c 和 mtk_drm_fb.h 代码分析
这个代码模块是 MediaTek DRM (Direct Rendering Manager) 驱动程序的帧缓冲区(framebuffer)管理部分,主要负责创建、管理和操作 DRM 帧缓冲区对象(drm_framebuffer)。帧缓冲区是 DRM 框架中用于存储显示内容的缓冲区,通常与 GEM 对象(mtk_drm_gem_obj)关联,支持像素格式、DMA 地址访问、fence 同步和 secure buffer(用于内容保护)。该模块针对 MediaTek SoC(如 MT6885、MT6983)优化,扩展了 DRM 核心功能以支持特定硬件特性(如 M4U/IOMMU、secure buffer)。代码依赖 DRM 核心(如 drm_framebuffer_funcs)和其他 MediaTek 模块(如 mtk_drm_gem.h、mtk_drm_drv.h)。
下面我将代码分为几个主要部分,分析其实现内容和作用。分析基于提供的 mtk_drm_fb.c 和 mtk_drm_fb.h 文件。
1. 头文件定义和结构(mtk_drm_fb.h 和 mtk_drm_fb.c 中的结构)
- 实现:
- 定义 mtk_drm_fb 结构:扩展 drm_framebuffer,包含单一 gem_obj(支持单 plane)。
- 宏定义:to_mtk_fb(容器转换)。
- 函数声明(mtk_drm_fb.h):
- mtk_fb_get_size:获取帧缓冲区大小。
- mtk_fb_get_gem_obj:获取关联的 GEM 对象。
- mtk_fb_get_dma:获取 DMA 地址。
- mtk_drm_fb_is_secure:检查是否为 secure buffer。
- mtk_fb_wait:等待 fence 完成。
- mtk_drm_framebuffer_create:创建帧缓冲区。
- mtk_drm_mode_fb_create:处理用户空间创建请求。
- 作用:
- 提供 MediaTek 特定的帧缓冲区结构和接口,桥接 DRM 核心和硬件。
- 支持用户空间 ioctl(如 DRM_IOCTL_MODE_ADDFB2)和内核内部帧缓冲区操作。
- 集成 secure buffer 和 fence 机制,确保内容保护和同步。