drm_atomic_commit函数在提交state之前,会先通过drm_atomic_check_only检查state是否符合要求。如果state参数不正确,该函数会立即返回并报告错误。提交流程包括检查状态、准备更新、触发异步提交和清理资源。详细来说,如果state标记为异步更新,先调用drm_atomic_helper_prepare_planes准备更新平面,然后调用drm_atomic_...
前面讲完drm_atomic_commit函数先调用drm_atomic_check_only检查完参数的合法性;最后调用config->funcs->atomic_commit,此函数是drm驱动初始化drm_mode_config时创建的。可以由SOC厂商实现,也可以使用drm-core中的helper函数:drm_atomic_helper_commit。 为了方便我们更好的理解atomic_commit函数,先得搞清楚drm_atomic_...
给driver_features 添加上 DRIVER_ATOMIC 标志位,告诉 DRM Core 该驱动支持 Atomic 操作。 drm_mode_config_funcs.atomic_commit() 接口是 atomic 操作的主要入口函数,必须实现。这里直接使用 drm_atomic_helper_commit() 函数实现。 Atomic 操作依赖 VSYNC 中断(即 VBLANK 事件),因此需要使用 hrtimer 来提供软件中...
* drm_atomic_helper_check() --> drm_atomic_helper_check_planes()会调用 */ int (*atomic_check)(struct drm_crtc *crtc, struct drm_atomic_state *state); //多plane的atomic update之前需要调用该接口(drm_atomic_helper_commit_planes中调用) void (*atomic_begin)(struct drm_crtc *crtc, struct ...
property_crtc_id, crtc_id); drmModeAtomicCommit(fd, req, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL); drmModeAtomicFree(req); } 第15-31行,可以看到与drm-planes.c的初始化代码框架是一样的,这里就不进行过多的讲解了。 第33行, drmSetClientCap(fd, DRM_CLIENT_CAP_ATOMIC, 1); If set DRM_...
*/ void (*atomic_disable)(struct drm_encoder *encoder, struct drm_atomic_state *state); /** * @atomic_enable: * * This callback should be used to enable the encoder. It is called * after this encoder's CRTC has been enabled using their own * &drm_crtc_helper_funcs.atomic_enable ...
drm_atomic_commit ! hasFramebufferConsole funcsTable->allocateDevice = AllocateDevice; 将Direct Rendering Manager (DRM) 设备注册到 DRM 子系统 用于管理对 CRTC 等显示资源的访问权限。IOCTL(输入输出控制)是设备驱动程序与用户空间进行通信的一种方式,通过特殊的设备文件来执行各种操作。
* commit operations as implemented in the atomic helpers, see * &struct drm_crtc_commit. */structdrm_plane_state*state;/** * @alpha_property: * Optional alpha property for this plane. See * drm_plane_create_alpha_property(). */structdrm_property*alpha_property;/** ...
.atomic_commit = drm_atomic_helper_commit, }; DEFINE_DRM_GEM_CMA_FOPS(drv_driver_fops); static struct drm_driver virtsoc_drm_driver = { .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, .name = "virtsoc", .desc = "virtual SoC DRM", ...
planes which go off the screen. Changes in v2: - Apply the clip to src as well (taking into account scaling) Changes in v3: - Use drm_atomic_helper_check_plane_state() to clip src/dst Cc: Sravanthi Kollukuduru <skolluku@codeaurora.org> Cc: Jeykumar Sankaran <jsanka@codeaurora.org>...