DCN 模块¶
在本节中,您将找到有关某些 DCN 模块和代码文档的更多详细信息,这些文档在自动生成时提供。
DCHUBBUB¶
只有一个公共的 DCHUBBUB。它包含数据结构接口的公共请求和返回块,这些块不是时钟/电源门控的。
HUBP¶
显示控制器中心 (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
MPC 树的顶部 MPCC 层,输出到 OPP 端点
描述
-
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 (*get_3dlut_fast_load_status)(struct mpc *mpc, int mpcc_id, uint32_t *done, uint32_t *soft_underflow, uint32_t *hard_underflow);
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);
};
成员
read_mpcc_state
从给定的 MPCC 物理实例读取寄存器内容。
参数
[in/out] mpc - MPC 上下文
[in] mpcc_instance - MPC 上下文实例
[in] mpcc_state - MPC 上下文状态
返回
void
insert_plane
根据指定的混合位置将 DPP 插入 MPC 树。仅用于属于 OPP 输出混合链的平面
参数
[in/out] mpc - MPC 上下文。
[in/out] tree - 将添加平面的 MPC 树结构。
[in] blnd_cfg - 新混合层的 MPCC 混合配置。
- [in] sm_cfg - 新混合层的 MPCC 立体混合配置。
立体混合必须禁用树配置的最底层。
- [in] insert_above_mpcc - 在此 MPCC 上方插入新平面。
如果为 NULL,则作为底部平面插入。
[in] dpp_id - 要添加的平面的 DPP 实例。
[in] mpcc_id - 用于混合的 MPCC 物理实例。
返回
struct mpcc
* - 添加的 MPCC。remove_mpcc
从 MPC 树中删除指定的 MPCC。
参数
[in/out] mpc - MPC 上下文。
[in/out] tree - 将从中删除平面的 MPC 树结构。
[in/out] mpcc - 要从树中删除的 MPCC。
返回
void
mpc_init
通过断开所有多路复用器来重置 MPCC HW 状态。
参数
[in/out] mpc - MPC 上下文。
返回
void
mpc_init_single_inst
初始化给定的 MPCC 物理实例。
参数:- [in/out] mpc - MPC 上下文。- [in] mpcc_id - 要初始化的 MPCC 物理实例。
update_blending
更新指定 MPCC 的混合配置。
参数
[in/out] mpc - MPC 上下文。
[in] blnd_cfg - MPCC 混合配置。
[in] mpcc_id - MPCC 物理实例。
返回
void
cursor_lock
锁定指定 OPP 的光标更新。OPP 定义为光标一起锁定的 MPCC 集。
参数
[in] mpc - MPC 上下文。
[in] opp_id - 要锁定光标更新的 OPP
[in] lock - 锁定/解锁 OPP
返回
void
insert_plane_to_secondary
根据指定的混合位置将 DPP 添加到辅助 MPC 树。仅用于属于 DWB 输出混合链的平面
参数
[in/out] mpc - MPC 上下文。
[in/out] tree - 将添加平面的 MPC 树结构。
[in] blnd_cfg - 新混合层的 MPCC 混合配置。
- [in] sm_cfg - 新混合层的 MPCC 立体混合配置。
立体混合必须禁用树配置的最底层。
- [in] insert_above_mpcc - 在此 MPCC 上方插入新平面。如果
为 NULL,则作为底部平面插入。
[in] dpp_id - 要添加的平面的 DPP 实例。
[in] mpcc_id - 用于混合的 MPCC 物理实例。
返回
struct mpcc
* - 添加的 MPCC。remove_mpcc_from_secondary
从“辅助”MPC 树中删除指定的 DPP。
参数
[in/out] mpc - MPC 上下文。
[in/out] tree - 将从中删除平面的 MPC 树结构。
[in] mpcc - 要从树中删除的 MPCC。
返回
void
get_mpcc_for_dpp_from_secondary
如果存在,请从与指定平面关联的给定“辅助”MPC 树中查找 MPCC。
参数:- [in/out] tree - 要搜索平面的 MPC 树结构。- [in] dpp_id - 要搜索的 DPP。
返回
struct mpcc
* - 指向平面的指针,如果未找到平面,则为 NULL。get_mpcc_for_dpp
如果存在,请从与指定平面关联的给定 MPC 树中查找 MPCC。
参数:- [in/out] tree - 要搜索平面的 MPC 树结构。- [in] dpp_id - 要搜索的 DPP。
返回
struct mpcc
* - 指向平面的指针,如果未找到平面,则为 NULL。wait_for_idle
等待 MPC 上下文中的 MPCC 进入空闲状态。
参数:- [in/out] mpc - MPC 上下文。- [in] id - 要等待空闲状态的 MPCC。
返回
void
assert_mpcc_idle_before_connect
断言 MPC 上下文中的 MPCC 是否处于空闲状态。
参数:- [in/out] mpc - MPC 上下文。- [in] id - 要断言空闲状态的 MPCC。
返回
void
init_mpcc_list_from_hw
从给定的 MPC 上下文结构迭代 MPCC 数组,并根据其寄存器值配置每个 MPCC。
参数:- [in/out] mpc - 要初始化 MPCC 数组的 MPC 上下文。- [in/out] tree - 包含要初始化的 MPCC 上下文的 MPC 树结构。
返回
void
set_denorm
根据给定的颜色深度,将相应的 OPP DENORM_CONTROL 寄存器值设置为特定的 denorm_mode。
参数:- [in/out] mpc - MPC 上下文。- [in] opp_id - 要更新寄存器的相应 OPP。- [in] output_depth - 要设置 denorm_mode 的任意颜色深度。
返回
void
set_denorm_clamp
在相应的 OPP DENORM CONTROL 寄存器上设置 denorm 钳位值。
参数:- [in/out] mpc - MPC 上下文。- [in] opp_id - 要更新寄存器的相应 OPP。- [in] denorm_clamp - 要设置的任意 denorm 钳位。
返回
void
set_output_csc
使用给定的值和模式设置输出颜色空间转换矩阵。
参数:- [in/out] mpc - MPC 上下文。- [in] opp_id - 要更新寄存器的相应 OPP。- [in] regval - 要在 CSC 矩阵中设置的值。- [in] ocsc_mode - 要设置 CSC 的模式。
返回
void
set_ocsc_default
根据颜色空间将输出颜色空间转换矩阵设置为默认值。
参数:- [in/out] mpc - MPC 上下文。- [in] opp_id - 要更新寄存器的相应 OPP。- [in] color_space - OCSC 颜色空间。- [in] ocsc_mode - 要设置 CSC 的模式。
返回
void
set_output_gamma
使用给定的曲线参数设置输出伽玛。
参数:- [in/out] mpc - MPC 上下文。- [in] mpcc_id - 要更新寄存器的相应 MPC。- [in] params - 参数。
返回
void
power_on_mpc_mem_pwr
打开/关闭给定 MPCC 的内存 LUT 电源。打开电源可更新 LUT。关闭电源允许进入低功耗模式。
参数:- [in/out] mpc - MPC 上下文。- [in] mpcc_id - 要打开电源的 MPCC。- [in] power_on
返回
void
set_dwb_mux
将相应的显示写回多路复用器 MPC 寄存器字段设置为给定的 MPCC id。
参数:- [in/out] mpc - MPC 上下文。- [in] dwb_id - 要设置的 DWB。- [in] mpcc_id - 要存储在 DWB 多路复用器寄存器中的 MPCC id。
返回
void
disable_dwb_mux
重置相应的显示写回多路复用器 MPC 寄存器字段。
参数:- [in/out] mpc - MPC 上下文。- [in] 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 - 要将 MPCC 复用到的给定 RMU 单元。
返回
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
get_3dlut_fast_load_status
获取 3D LUT 快速加载状态,并使用 done、soft_underflow 和 hard_underflow 指针引用它们。
参数: - [输入/输出] mpc - MPC 上下文。 - [输入] mpcc_id - [输入/输出] done - [输入/输出] soft_underflow - [输入/输出] hard_underflow
返回
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 - 是否为 17x17x17 的 3dlut - [输入] 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
引用一个包含一个或多个接收器和连接状态的 link 结构。
const struct link_resource *link_res
用于启用链路的可映射硬件资源。
返回
如果可以从 link 访问链路编码器,则返回 true。
-
const struct link_hwss *get_dio_link_hwss(void)¶
返回 link_hwss 引用
参数
void
无参数
描述
此函数的作用类似于 get 函数,用于返回在 link_hwss_dio.c 文件中填充的 link_hwss。
返回
返回已填充的 link_hwss 结构的引用。