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;
};
成员
lut0
ALPHA_2BIT_LUT. ALPHA_2BIT_LUT0. 默认值: 0b00000000
lut1
ALPHA_2BIT_LUT. ALPHA_2BIT_LUT1. 默认值: 0b01010101
lut2
ALPHA_2BIT_LUT. ALPHA_2BIT_LUT2. 默认值: 0b10101010
lut3
ALPHA_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_id
MPCC 物理实例。
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 结构的引用。