DCN 模組¶
在本節中,您將找到一些關於 DCN 模組的額外細節,以及自動生成的程式碼文件。
DCHUBBUB¶
只有一個通用的 DCHUBBUB。它包含資料結構介面的通用請求和返回模組,這些模組不是時鐘/電源門控的。
HUBP¶
顯示控制器Hub(DCHUB)是可擴充套件資料埠(SDP)和DCN之間的閘道器。 此元件具有多種功能,例如儲存器仲裁、旋轉和游標操作。
每個管道分配一個 HUBP,它提取資料並將不同的畫素格式(即 ARGB8888、NV12 等)轉換為畫素資料的線性、交錯和固定深度流。
DPP¶
DPP(顯示管道和平面)塊是 DCN 中統一的顯示資料處理引擎,用於處理每個 DPP 矩形上的圖形或影片資料。 這個矩形可以是 SLS(單個大表面)的一部分,也可以是要與其他 DPP 混合的圖層,也可以是與顯示瓦片關聯的矩形。
它提供各種功能,包括:- 圖形顏色鍵控器 - 圖形游標合成 - 圖形或影片影像源到目標縮放 - 影像銳化 - 影片格式轉換(從 4:2:0 或 4:2:2 到 4:4:4)- 色彩空間轉換 - 主機 LUT 伽馬調整 - 色域重對映 - 亮度和對比度調整。
DPP 管道由轉換器和游標 (CNVC)、縮放器 (DSCL)、顏色管理 (CM)、輸出緩衝區 (OBUF) 和數字旁路 (DPB) 模組組成,這些模組以影片/圖形管道連線。
-
struct cnv_alpha_2bit_lut¶
基於 2 位 alpha 設定 8 位 alpha 值
定義:
struct cnv_alpha_2bit_lut {
int lut0;
int lut1;
int lut2;
int lut3;
};
成員
lut0ALPHA_2BIT_LUT. ALPHA_2BIT_LUT0. 預設值: 0b00000000
lut1ALPHA_2BIT_LUT. ALPHA_2BIT_LUT1. 預設值: 0b01010101
lut2ALPHA_2BIT_LUT. ALPHA_2BIT_LUT2. 預設值: 0b10101010
lut3ALPHA_2BIT_LUT. ALPHA_2BIT_LUT3. 預設值: 0b11111111
MPC¶
多管道/平面組合器 (MPC) 是硬體管道中的一個元件,它使用全域性和逐畫素 alpha 執行多個平面的混合。 它還根據硬體功能執行混合後顏色校正操作,例如顏色轉換矩陣以及伽馬 1D 和 3D LUT。
MPC 接收來自所有 DPP 管道的輸出,並將它們組合成多個輸出,支援 “M MPC 輸入 -> N MPC 輸出” 的靈活組合架構。 它的特點是
可程式設計混合結構,允許軟體控制的混合和級聯;
每個 DPP 在顯示活動區域中的可程式設計視窗位置;
當單個 DPP 管道無法處理非常大的表面時,將多個 DPP 管道組合在一個活動區域中;
混合來自不同 SLS 的多個 DPP;
來自單個 DPP 的自上而下或並排模式的立體格式;
來自 2 個 DPP 的立體格式;
來自不同 DPP 管道的多個圖層的 Alpha 混合;
可程式設計背景顏色;
-
struct mpcc¶
單個 MPCC 例項的 MPCC 連線和混合配置。
定義:
struct mpcc {
int mpcc_id;
int dpp_id;
struct mpcc *mpcc_bot;
struct mpcc_blnd_cfg blnd_cfg;
struct mpcc_sm_cfg sm_cfg;
bool shared_bottom;
};
成員
mpcc_idMPCC 物理例項。
dpp_id此 MPCC 的 DPP 輸入
mpcc_bot指向底層 MPCC 的指標。未連線時為 NULL。
blnd_cfg此 MPCC 的混合配置。
sm_cfg此 MPCC 的立體混合設定
shared_bottom如果 MPCC 輸出到 OPP 和 DWB 端點,則為 true。 否則為 false。
描述
此結構用作 MPC 樹中的節點。
-
struct mpc_tree¶
MPC 樹表示管道的所有 MPCC 連線。
定義:
struct mpc_tree {
int opp_id;
struct mpcc *opp_list;
};
成員
opp_id擁有此 MPC 樹的 OPP 例項。
opp_list輸出到 OPP 端點的 MPC 樹的頂層 MPCC
-
struct mpc_funcs¶
funcs
定義:
struct mpc_funcs {
void (*read_mpcc_state)(struct mpc *mpc,int mpcc_inst, struct mpcc_state *s);
struct mpcc* (*insert_plane)(struct mpc *mpc,struct mpc_tree *tree,struct mpcc_blnd_cfg *blnd_cfg,struct mpcc_sm_cfg *sm_cfg,struct mpcc *insert_above_mpcc,int dpp_id, int mpcc_id);
void (*remove_mpcc)(struct mpc *mpc,struct mpc_tree *tree, struct mpcc *mpcc);
void (*mpc_init)(struct mpc *mpc);
void (*mpc_init_single_inst)(struct mpc *mpc, unsigned int mpcc_id);
void (*update_blending)(struct mpc *mpc,struct mpcc_blnd_cfg *blnd_cfg, int mpcc_id);
void (*cursor_lock)(struct mpc *mpc,int opp_id, bool lock);
struct mpcc* (*insert_plane_to_secondary)(struct mpc *mpc,struct mpc_tree *tree,struct mpcc_blnd_cfg *blnd_cfg,struct mpcc_sm_cfg *sm_cfg,struct mpcc *insert_above_mpcc,int dpp_id, int mpcc_id);
void (*remove_mpcc_from_secondary)(struct mpc *mpc,struct mpc_tree *tree, struct mpcc *mpcc);
struct mpcc* (*get_mpcc_for_dpp_from_secondary)(struct mpc_tree *tree, int dpp_id);
struct mpcc* (*get_mpcc_for_dpp)(struct mpc_tree *tree, int dpp_id);
void (*wait_for_idle)(struct mpc *mpc, int id);
void (*assert_mpcc_idle_before_connect)(struct mpc *mpc, int mpcc_id);
void (*init_mpcc_list_from_hw)(struct mpc *mpc, struct mpc_tree *tree);
void (*set_denorm)(struct mpc *mpc,int opp_id, enum dc_color_depth output_depth);
void (*set_denorm_clamp)(struct mpc *mpc,int opp_id, struct mpc_denorm_clamp denorm_clamp);
void (*set_output_csc)(struct mpc *mpc,int opp_id,const uint16_t *regval, enum mpc_output_csc_mode ocsc_mode);
void (*set_ocsc_default)(struct mpc *mpc,int opp_id,enum dc_color_space color_space, enum mpc_output_csc_mode ocsc_mode);
void (*set_output_gamma)(struct mpc *mpc,int mpcc_id, const struct pwl_params *params);
void (*power_on_mpc_mem_pwr)(struct mpc *mpc,int mpcc_id, bool power_on);
void (*set_dwb_mux)(struct mpc *mpc,int dwb_id, int mpcc_id);
void (*disable_dwb_mux)(struct mpc *mpc, int dwb_id);
bool (*is_dwb_idle)(struct mpc *mpc, int dwb_id);
void (*set_out_rate_control)(struct mpc *mpc,int opp_id,bool enable,bool rate_2x_mode, struct mpc_dwb_flow_control *flow_control);
void (*set_gamut_remap)(struct mpc *mpc,int mpcc_id, const struct mpc_grph_gamut_adjustment *adjust);
bool (*program_1dlut)(struct mpc *mpc,const struct pwl_params *params, uint32_t rmu_idx);
bool (*program_shaper)(struct mpc *mpc,const struct pwl_params *params, uint32_t rmu_idx);
uint32_t (*acquire_rmu)(struct mpc *mpc, int mpcc_id, int rmu_idx);
bool (*program_3dlut)(struct mpc *mpc,const struct tetrahedral_params *params, int rmu_idx);
int (*release_rmu)(struct mpc *mpc, int mpcc_id);
unsigned int (*get_mpc_out_mux)(struct mpc *mpc, int opp_id);
void (*set_bg_color)(struct mpc *mpc,struct tg_color *bg_color, int mpcc_id);
void (*set_mpc_mem_lp_mode)(struct mpc *mpc);
void (*set_movable_cm_location)(struct mpc *mpc, enum mpcc_movable_cm_location location, int mpcc_id);
void (*update_3dlut_fast_load_select)(struct mpc *mpc, int mpcc_id, int hubp_idx);
void (*populate_lut)(struct mpc *mpc, const enum MCM_LUT_ID id, const union mcm_lut_params params, bool lut_bank_a, int mpcc_id);
void (*program_lut_read_write_control)(struct mpc *mpc, const enum MCM_LUT_ID id, bool lut_bank_a, int mpcc_id);
void (*program_lut_mode)(struct mpc *mpc, const enum MCM_LUT_ID id, const enum MCM_LUT_XABLE xable, bool lut_bank_a, int mpcc_id);
void (*program_3dlut_size)(struct mpc *mpc, bool is_17x17x17, int mpcc_id);
struct {
void (*program_3dlut_size)(struct mpc *mpc, uint32_t width, int mpcc_id);
void (*program_bias_scale)(struct mpc *mpc, uint16_t bias, uint16_t scale, int mpcc_id);
void (*program_bit_depth)(struct mpc *mpc, uint16_t bit_depth, int mpcc_id);
bool (*is_config_supported)(uint32_t width);
void (*program_lut_read_write_control)(struct mpc *mpc, const enum MCM_LUT_ID id, bool lut_bank_a, bool enabled, int mpcc_id);
void (*populate_lut)(struct mpc *mpc, const union mcm_lut_params params, bool lut_bank_a, int mpcc_id);
} mcm;
struct {
void (*enable_3dlut_fl)(struct mpc *mpc, bool enable, int mpcc_id);
void (*update_3dlut_fast_load_select)(struct mpc *mpc, int mpcc_id, int hubp_idx);
void (*program_lut_read_write_control)(struct mpc *mpc, const enum MCM_LUT_ID id, bool lut_bank_a, bool enabled, int mpcc_id);
void (*program_lut_mode)(struct mpc *mpc, const enum MCM_LUT_XABLE xable, bool lut_bank_a, int mpcc_id);
void (*program_3dlut_size)(struct mpc *mpc, uint32_t width, int mpcc_id);
void (*program_bias_scale)(struct mpc *mpc, uint16_t bias, uint16_t scale, int mpcc_id);
void (*program_bit_depth)(struct mpc *mpc, uint16_t bit_depth, int mpcc_id);
bool (*is_config_supported)(uint32_t width);
void (*power_on_shaper_3dlut)(struct mpc *mpc, uint32_t mpcc_id, bool power_on);
void (*populate_lut)(struct mpc *mpc, const union mcm_lut_params params, bool lut_bank_a, int mpcc_id);
} rmcm;
};
成員
read_mpcc_state從給定的 MPCC 物理例項讀取暫存器內容。
引數
[輸入/輸出] mpc - MPC 上下文
[輸入] mpcc_instance - MPC 上下文例項
[輸入] mpcc_state - MPC 上下文狀態
返回
void
insert_plane根據指定的混合位置將 DPP 插入到 MPC 樹中。 僅用於作為 OPP 輸出的混合鏈的一部分的平面
引數
[輸入/輸出] mpc - MPC 上下文。
[輸入/輸出] tree - 將要新增平面的 MPC 樹結構。
[輸入] blnd_cfg - 新混合層的 MPCC 混合配置。
- [輸入] sm_cfg - 新混合層的 MPCC 立體混合配置。
立體混合必須停用樹配置的最底層。
- [輸入] insert_above_mpcc - 在此 MPCC 之上插入新平面。
如果為 NULL,則作為底層平面插入。
[輸入] dpp_id - 要新增的平面的 DPP 例項。
[輸入] mpcc_id - 用於混合的 MPCC 物理例項。
返回
struct mpcc* - 新增的 MPCC。remove_mpcc從 MPC 樹中刪除指定的 MPCC。
引數
[輸入/輸出] mpc - MPC 上下文。
[輸入/輸出] tree - 將從中刪除平面的 MPC 樹結構。
[輸入/輸出] mpcc - 要從樹中刪除的 MPCC。
返回
void
mpc_init透過斷開所有多路複用器來重置 MPCC HW 狀態。
引數
[輸入/輸出] mpc - MPC 上下文。
返回
void
mpc_init_single_inst初始化給定的 MPCC 物理例項。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] mpcc_id - 要初始化的 MPCC 物理例項。
update_blending更新指定 MPCC 的混合配置。
引數
[輸入/輸出] mpc - MPC 上下文。
[輸入] blnd_cfg - MPCC 混合配置。
[輸入] mpcc_id - MPCC 物理例項。
返回
void
cursor_lock鎖定指定 OPP 的游標更新。 OPP 定義了一組一起鎖定以用於游標的 MPCC。
引數
[輸入] mpc - MPC 上下文。
[輸入] opp_id - 要在其上鎖定游標更新的 OPP
[輸入] lock - 鎖定/解鎖 OPP
返回
void
insert_plane_to_secondary根據指定的混合位置將 DPP 新增到輔助 MPC 樹中。 僅用於作為 DWB 輸出的混合鏈的一部分的平面
引數
[輸入/輸出] mpc - MPC 上下文。
[輸入/輸出] tree - 將要新增平面的 MPC 樹結構。
[輸入] blnd_cfg - 新混合層的 MPCC 混合配置。
- [輸入] sm_cfg - 新混合層的 MPCC 立體混合配置。
立體混合必須停用樹配置的最底層。
- [輸入] insert_above_mpcc - 在此 MPCC 之上插入新平面。 如果
NULL,則作為底層平面插入。
[輸入] dpp_id - 要新增的平面的 DPP 例項。
[輸入] mpcc_id - 用於混合的 MPCC 物理例項。
返回
struct mpcc* - 新增的 MPCC。remove_mpcc_from_secondary從 “輔助” MPC 樹中刪除指定的 DPP。
引數
[輸入/輸出] mpc - MPC 上下文。
[輸入/輸出] tree - 將從中刪除平面的 MPC 樹結構。
[輸入] mpcc - 要從樹中刪除的 MPCC。
返回
void
get_mpcc_for_dpp_from_secondary如果存在,則從與指定平面關聯的給定 “輔助” MPC 樹中查詢 MPCC。
引數:- [輸入/輸出] tree - 要搜尋平面的 MPC 樹結構。 - [輸入] dpp_id - 要搜尋的 DPP。
返回
struct mpcc* - 指向平面的指標;如果未找到平面,則為 NULL。get_mpcc_for_dpp如果存在,則從與指定平面關聯的給定 MPC 樹中查詢 MPCC。
引數:- [輸入/輸出] tree - 要搜尋平面的 MPC 樹結構。 - [輸入] dpp_id - 要搜尋的 DPP。
返回
struct mpcc* - 指向平面的指標;如果未找到平面,則為 NULL。wait_for_idle等待 MPC 上下文中的 MPCC 進入空閒狀態。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] id - 要等待空閒狀態的 MPCC。
返回
void
assert_mpcc_idle_before_connect斷言 MPC 上下文中的 MPCC 是否處於空閒狀態。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] id - 要斷言空閒狀態的 MPCC。
返回
void
init_mpcc_list_from_hw從給定的 MPC 上下文結構迭代 MPCC 陣列,並根據其暫存器的值配置每個 MPCC。
引數:- [輸入/輸出] mpc - 要初始化 MPCC 陣列的 MPC 上下文。 - [輸入/輸出] tree - 包含要初始化的 MPCC 上下文的 MPC 樹結構。
返回
void
set_denorm基於給定的顏色深度,將相應的 OPP DENORM_CONTROL 暫存器值設定為特定的 denorm_mode。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] opp_id - 要更新暫存器的相應 OPP。 - [輸入] output_depth - 設定 denorm_mode 的任意顏色深度。
返回
void
set_denorm_clamp在相應的 OPP DENORM CONTROL 暫存器上設定 denorm 鉗位值。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] opp_id - 要更新暫存器的相應 OPP。 - [輸入] denorm_clamp - 要設定的任意 denorm 鉗位。
返回
void
set_output_csc使用給定的值和模式設定輸出顏色空間轉換矩陣。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] opp_id - 要更新暫存器的相應 OPP。 - [輸入] regval - 要在 CSC 矩陣中設定的值。 - [輸入] ocsc_mode - 要設定 CSC 的模式。
返回
void
set_ocsc_default根據顏色空間將輸出顏色空間轉換矩陣設定為預設值。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] opp_id - 要更新暫存器的相應 OPP。 - [輸入] color_space - OCSC 顏色空間。 - [輸入] ocsc_mode - 要設定 CSC 的模式。
返回
void
set_output_gamma使用給定的曲線引數設定輸出伽馬。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] mpcc_id - 要更新暫存器的相應 MPC。 - [輸入] params - 引數。
返回
void
power_on_mpc_mem_pwr開啟/關閉給定 MPCC 的記憶體 LUT 電源。 開啟電源啟用 LUT 進行更新。 關閉電源允許進入低功耗模式。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] mpcc_id - 要開啟電源的 MPCC。 - [輸入] power_on
返回
void
set_dwb_mux將相應的顯示寫回多路複用器 MPC 暫存器欄位設定為給定的 MPCC id。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] dwb_id - 要設定的 DWB。 - [輸入] mpcc_id - 要儲存在 DWB 多路複用器暫存器中的 MPCC id。
返回
void
disable_dwb_mux重置相應的顯示寫回多路複用器 MPC 暫存器欄位.
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] dwb_id - 要設定的 DWB。
返回
void
is_dwb_idle檢查 MPC_DWB0_MUX_STATUS 暫存器欄位上的 DWB 狀態。 如果為空,則返回。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] dwb_id - 要檢查的 DWB。
返回
bool - DWB 是否空閒
set_out_rate_control設定顯示輸出速率控制。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] opp_id - 要設定的 OPP。 - [輸入] enable - [輸入] rate_2x_mode - [輸入] flow_control
返回
void
set_gamut_remap為給定的 MPCC 設定混合後 CTM。
引數:- [輸入] mpc - MPC 上下文。 - [輸入] mpcc_id - 要設定色域對映的 MPCC。 - [輸入] adjust
返回
void
program_1dlut設定一維查詢表。
引數:- [輸入/輸出] mpc - MPC 上下文 - [輸入] params - LUT 配置的曲線引數 - [輸入] rmu_idx
bool - LUT 是否已設定(使用給定的引數設定)或未設定(params 為 NULL 並且 LUT 已停用)。
program_shaper設定整形器。
引數:- [輸入/輸出] mpc - MPC 上下文 - [輸入] params - 要設定的曲線引數 - [輸入] rmu_idx
返回
bool - 整形器是否已設定(使用給定的引數設定)或未設定(params 為 NULL 並且 LUT 已停用)。
acquire_rmu設定給定的 MPCC 以多路複用到給定的 RMU 單元。
引數:- [輸入/輸出] mpc - MPC 上下文 - [輸入] mpcc_id - MPCC - [輸入] rmu_idx - 給定的 RMU 單元以設定 MPCC 以多路複用到。
返回
unit32_t - 如果操作成功,則為 rmu_idx,否則為 -1。
program_3dlut設定三維查詢表。
引數:- [輸入/輸出] mpc - MPC 上下文 - [輸入] params - LUT 配置的四面體引數 - [輸入] rmu_idx
bool - LUT 是否已設定(使用給定的引數設定)或未設定(params 為 NULL 並且 LUT 已停用)。
release_rmu對於給定的 MPCC,釋放它多路複用到的 RMU 單元。
引數:- [輸入/輸出] mpc - MPC 上下文 - [輸入] mpcc_id - MPCC
返回
int - 表示已釋放的 RMU 單元的有效 rmu_idx,如果不存在要釋放的 RMU 單元,則為 -1。
get_mpc_out_mux返回 MPC 輸出多路複用器。
引數:- [輸入] mpc - MPC 上下文。 - [輸入] opp_id - OPP
返回
unsigned int - 輸出多路複用器
set_bg_color查詢相應的最底層 MPCC 並設定其背景顏色。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] bg_color - 要設定的背景顏色。 - [輸入] mpcc_id
返回
void
set_mpc_mem_lp_mode設定 mpc_mem_lp_mode。
引數:- [輸入/輸出] mpc - MPC 上下文。
返回
void
set_movable_cm_location設定可移動 CM 位置。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] location - [輸入] mpcc_id
返回
void
update_3dlut_fast_load_select更新 3D LUT 快速載入選擇。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] mpcc_id - [輸入] hubp_idx
返回
void
populate_lut使用給定的四面體引數填充 LUT。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] id - [輸入] params - [輸入] lut_bank_a - [輸入] mpcc_id
返回
void
program_lut_read_write_control程式 LUT RW 控制。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] id - [輸入] lut_bank_a - [輸入] mpcc_id
返回
void
program_lut_mode程式 LUT 模式。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] id - [輸入] xable - [輸入] lut_bank_a - [輸入] mpcc_id
返回
void
program_3dlut_size程式 3D LUT 大小。
引數:- [輸入/輸出] mpc - MPC 上下文。 - [輸入] is_17x17x17 - 3dlut 是否為 17x17x17 - [輸入] mpcc_id
返回
void
OPP¶
輸出平面處理器 (OPP) 塊組具有格式化畫素流的功能,使其適合在顯示裝置上顯示。 OPP 中包含的關鍵功能是
自適應背光調製 (ABM)
格式化程式 (FMT),它為格式化傳入的畫素流提供逐畫素操作。
提供畫素複製和重疊的輸出緩衝區。
MPC 和 OPTC 之間的介面。
時鐘和復位生成。
CRC 生成。
-
struct pwl_float_data¶
定點 RGB 顏色
定義:
struct pwl_float_data {
struct fixed31_32 r;
struct fixed31_32 g;
struct fixed31_32 b;
};
成員
r分量紅色。
g分量綠色。
b分量藍色。
DIO¶
顯示輸入輸出 (DIO) 是 DCN 中的顯示輸入和輸出單元。 它包括輸出編碼器,以支援不同的顯示輸出,如 DisplayPort、HDMI、DVI 介面等。 它還包括這些介面的控制和狀態通道。
-
bool can_use_dio_link_hwss(const struct dc_link *link, const struct link_resource *link_res)¶
檢查 link_hwss 是否可訪問
引數
const struct dc_link *link引用包含一個或多個接收器和連線狀態的連結結構。
const struct link_resource *link_res用於啟用連結的可對映硬體資源。
返回
如果連結編碼器可以從連結訪問,則返回 true。
-
const struct link_hwss *get_dio_link_hwss(void)¶
返回 link_hwss 引用
引數
void無引數
描述
此函式的作用類似於 get 函式,用於返回在 link_hwss_dio.c 檔案中填充的 link_hwss。
返回
返回指向填充的 link_hwss 結構的引用。