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 接口等。它还包括这些接口的控制和状态通道。

检查 link_hwss 是否可访问

参数

const struct dc_link *link

引用一个包含一个或多个接收器和连接状态的 link 结构。

const struct link_resource *link_res

用于启用链路的可映射硬件资源。

返回

如果可以从 link 访问链路编码器,则返回 true。

返回 link_hwss 引用

参数

void

无参数

描述

此函数的作用类似于 get 函数,用于返回在 link_hwss_dio.c 文件中填充的 link_hwss。

返回

返回已填充的 link_hwss 结构的引用。