MTK Linux DRM分析(二十二)- MTK mtk_drm_crtc.c(Part1)

一、代碼分析

mtk_drm_crtc.c以mtk_crtc_comp_is_busy函數為界限進行拆分分析

static const struct drm_crtc_funcs mtk_crtc_funcs = {.set_config = drm_atomic_helper_set_config,.page_flip = drm_atomic_helper_page_flip,.destroy = mtk_drm_crtc_destroy,.reset = mtk_drm_crtc_reset,.atomic_duplicate_state = mtk_drm_crtc_duplicate_state,.atomic_destroy_state = mtk_drm_crtc_destroy_state,.atomic_set_property = mtk_drm_crtc_set_property,.atomic_get_property = mtk_drm_crtc_get_property,.enable_vblank = mtk_drm_crtc_enable_vblank,.disable_vblank = mtk_drm_crtc_disable_vblank,.get_vblank_timestamp = mtk_crtc_get_vblank_timestamp,
};static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {.mode_fixup = mtk_drm_crtc_mode_fixup,.mode_set_nofb = mtk_drm_crtc_mode_set_nofb,.atomic_enable = mtk_drm_crtc_atomic_resume,.disable = mtk_drm_crtc_suspend,.atomic_begin = mtk_drm_crtc_atomic_begin,.atomic_flush = mtk_drm_crtc_atomic_flush,
};

mtk_drm_crtc.c (Part1)中主要函數的基本作用分析,基于提供的代碼片段。這些函數主要與 MediaTek DRM (Direct Rendering Manager) 驅動相關,用于管理顯示控制器(CRTC)的行為、硬件配置、事件處理等。以下是每個函數的簡要說明,按功能分組并避免過多技術細節,保持清晰簡潔:


1. 上下文管理

  • _get_context
    • 作用: 創建并返回一個靜態的 drm_crtc 上下文對象,確保全局只有一個上下文實例(單例模式)。用于初始化和管理 CRTC 相關的全局狀態。
    • 關鍵點: 通過靜態變量 is_context_inited 確保只初始化一次,并使用 memset 清空上下文結構。

2. CRTC 生命周期管理

  • mtk_drm_crtc_destroy
    • 作用: 銷毀 CRTC 對象,釋放相關資源。
    • 關鍵點: 釋放顯示互斥鎖(mtk_disp_mutex_put)并調用 drm_crtc_cleanup 清理 DRM 框架中的 CRTC 資源。
  • mtk_drm_crtc_reset
    • 作用: 重置 CRTC 狀態,恢復到初始狀態。
    • 關鍵點: 如果已有狀態,銷毀舊狀態并分配新的 mtk_crtc_state 結構,初始化 CRTC 狀態并綁定到 DRM 框架。

3. VBlank 和頁面翻轉

  • mtk_drm_crtc_finish_page_flip
    • 作用: 處理頁面翻轉完成后的邏輯,發送 VBlank 事件并清理相關狀態。
    • 關鍵點: 在事件鎖保護下,調用 drm_crtc_send_vblank_event 發送 VBlank 事件,釋放 VBlank 引用,并清除 mtk_crtc->event。
  • mtk_drm_finish_page_flip
    • 作用: 完成頁面翻轉的處理,觸發 VBlank 處理并在需要時調用 mtk_drm_crtc_finish_page_flip。
    • 關鍵點: 檢查 pending_needs_vblank 標志以決定是否需要完成頁面翻轉。

4. 等待和同步

  • mtk_drm_wait_blank
    • 作用: 等待 CRTC 的空白(blank)狀態變為指定值,帶有超時機制。
    • 關鍵點: 使用 wait_event_timeout 等待 crtc_blank 狀態變化,通常用于確保顯示狀態穩定(如 TUI 相關場景)。
  • mtk_drm_crtc_wait_blank
    • 作用: 確保 CRTC 完成空白狀態的切換(如退出 TUI 模式)。
    • 關鍵點: 循環等待 crtc_blank

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95102.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stm32f103c8t6 led閃燈實驗

目錄 閃燈原理 2種接線方式控制閃燈 使用推挽接法 使用開漏接法 看原理圖 寫代碼 閃燈原理 LED燈有個2-10mA的電流就可以點亮 3.3/5100.006A6mA 2種接線方式控制閃燈 使用推挽接法 當設置推挽模式時,CPU控制寄存器寫0,IO引腳輸出低電壓&#xff0…

“我同意”按鈕別亂點——你的“職業EULA”漏洞掃描報告

尊敬的審核: 本人文章《“我同意”按鈕別亂點——你的“職業EULA”漏洞掃描報告》 1. 純屬技術交流,無任何違法內容 2. 所有法律引用均來自公開條文 3. 請依據《網絡安全法》第12條“不得無故刪除合法內容”處理 附:本文結構已通過區塊鏈存證…

Product Hunt 每日熱榜 | 2025-09-01

1. A01 標語:你個人的新聞助手 介紹:A01 是你的新聞助手,可以幫你關注你關心的任何話題。只需告訴它你想了解什么,它就能為你帶來最新的文章。 產品網站: 立即訪問 Product Hunt: View on Product Hunt…

【OpenFeign】基礎使用

【OpenFeign】基礎使用1. Feign介紹1.1 使用示例1.2 Feign與RPC對比1.3 SpringCloud Alibaba快速整合OpenFeign1.3.1 詳細代碼1. Feign介紹 1.什么是 Feign Feign 是 Netflix 開發的一個 聲明式的 HTTP 客戶端,在 Spring Cloud 中被廣泛使用。它的目標是&#xff…

訪問相同的url,相同入參的請求,Apifox/Postman可以正常響應結果,而本地調用不行(或結果不同)

文章目錄問題概述Apifox查看實際請求總結問題概述 開發中有一個需求需要去別的系統中拿數據,配置好相關參數后發起請求時發現響應結果和在Apifox上不同,Apifox上正常顯示數據,而本地調用后返回數據不存在。 這就很奇怪了,想了很多…

數據結構(C語言篇):(七)雙向鏈表

目錄 前言 一、概念與結構 二、雙向鏈表的實現 2.1 頭文件的準備 2.2 函數的實現 2.2.1 LTPushBack( )函數(尾插) (1)LTBuyNode( ) (2)LTInit( ) (3)LTPrint( ) &#x…

從拿起簡歷(resume)重新找工作開始聊起

經濟蕭條或經濟衰退在經濟相關學術上似乎有著嚴格的定義,我不知道我們的經濟是否已經走向了衰退或者蕭條,但有一點那是肯定的,那就現在我們的經濟肯定是不景氣的。經濟不景氣會怎么樣?是的,會有很多人失業,…

OS+MySQL+(其他)八股小記

魯迅先生曾經說過,每天進步一點點,媽媽夸我小天才。 依舊今日八股,這是我在多個文檔整合一起的,可能格式有些問題,請諒解。 操作系統 1.進程和線程的區別? 進程是代碼在數據集合的一次執行活動,…

Transformer的并行計算與長序列處理瓶頸總結

🌟 第0層:極簡版(30秒理解)一句話核心:Transformer像圓桌會議——所有人都能同時交流(并行優勢),但人越多會議越混亂(長序列瓶頸)。核心問題 并行優勢&#x…

Vue 3 useId 完全指南:生成唯一標識符的最佳實踐

📖 概述 useId() 是 Vue 3 中的一個組合式 API 函數,用于生成唯一的標識符。它確保在服務端渲染(SSR)和客戶端渲染之間生成一致的 ID,避免水合不匹配的問題。 🎯 基本概念 什么是 useId? useId…

CGroup 資源控制組 + Docker 網絡模式

1 CGroup 資源控制組1.1 為什么需要 CGroup - 容器本質 宿主機上一組進程 - 若無資源邊界,一個暴走容器即可拖垮整機 - CGroup 提供**內核級硬限制**,比 ulimit、nice 更可靠1.2 核心概念 3 件套 | 概念 | 一句話解釋 | 查看方式 | | Hierarchy | 樹…

【ArcGIS微課1000例】0150:如何根據地名獲取經緯度坐標

本文介紹了三種獲取地理坐標的方法:1)在ArcGIS Pro中通過搜索功能定位目標點(如月牙泉)并查看其WGS84坐標;2)使用ArcGIS內置工具獲取坐標;3)推薦三個在線工具(maplocation、地球在線、yanue)支持批量查詢和多地圖源坐標轉換。強調了使用WGS84坐標系以減少誤差,并展示…

HTML應用指南:利用GET請求獲取MSN財經股價數據并可視化

隨著數字化金融服務的不斷深化,及時、準確的財經信息已成為投資者決策與市場分析的重要支撐。MSN財經股價數據服務作為廣受信賴的金融信息平臺,依托微軟強大的技術架構與數據整合能力,持續為全球用戶提供全面、可靠的證券市場數據。平臺不僅提…

雅思聽力第四課:配對題核心技巧與詞匯深化

現在,請拿出劍橋真題,開始你的刻意練習! 內容大綱 課程核心目標舊題回顧與基礎鞏固配對題/匹配題核心解題策略考點總結與精聽訓練表 一、課程核心目標 掌握第二部分配對題的解題策略攻克第三部分匹配題的改寫難點系統整理高頻場景詞匯與特…

SQL Server從入門到項目實踐(超值版)讀書筆記 25

第12章 存儲過程的應用 🎉學習指引 存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL語句集,存儲過程時數據庫中的一個重要對象,它代替了傳統的逐條執行SQL語句的方式。本章就來…

20.29 QLoRA適配器實戰:24GB顯卡輕松微調650億參數大模型

QLoRA適配器實戰:24GB顯卡輕松微調650億參數大模型 QLoRA 適配器配置深度解析 一、QLoRA 適配器核心原理 QLoRA 作為當前大模型微調領域的前沿技術,通過量化與低秩適配的協同設計,在保證模型效果的前提下實現了顯存占用的革命性降低。其核心由三大技術支柱構成: 4位量化…

QMainWindow使用QTabWidget添加多個QWidget

QTabWidget添加其它Wdiget的2個函數如下&#xff1a; QTabWidget的介紹可參考官網QTabWidget Class | Qt Widgets | Qt 6.9.1 直接上代碼&#xff0c;代碼如下&#xff1a; #include <QMainWindow>#include <QApplication> #include <QVBoxLayout> #includ…

AI學習機哪個好?選這幾款步步高就對了

隨著新教改政策的推進&#xff0c;教育對孩子的綜合素養提出了更高要求。英語更重聽說、數學更重思維&#xff0c;這讓許多家長在輔導孩子時感到壓力倍增。因此&#xff0c;如何選擇一款能真正幫助孩子提升能力的學習機&#xff0c;成為了大家普遍關心的問題。面對市場上功能各…

【設計模式】--重點知識點總結

題1 1、工廠和產品之間是依賴關系 2、工廠方法模式&#xff1a;工廠方法不能為靜態方法。如果是靜態方法&#xff0c;子類無法重寫行為。 簡單工廠可以用靜態方法 3、采用設計模式&#xff0c;以保證成功的設計和體系結構 4、建造者模式&#xff1a;&#xff08;1&#xf…

輕量實現 OCPP 1.6 JSON 協議(歐洲版)的充電樁調試平臺

1 項目概覽 1.1 目標與適用場景 1.1.1 簡介 本文介紹的開源項目 ocpp_charge&#xff0c;是一個 自研輕量實現 OCPP 1.6 JSON 協議&#xff08;歐洲版&#xff09; 的充電樁調試平臺。 它沒有依賴官方 OCPP 1.6J 庫&#xff0c;而是從零實現協議解析與會話管理&#xff0c;適…