Documentation/gpu: Add kernel doc entry for MPC

This commit adds a kernel-doc entry for the MPC block. Since it enabled
the kernel-doc to parse some of the documentation in the mpc.h file,
fixing some of the comments was required.

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Harry Wentland <Harry.Wentland@amd.com>
Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Rodrigo Siqueira 2024-01-22 14:24:57 -07:00 committed by Alex Deucher
parent c371aa12d8
commit b8c1c3a82e
3 changed files with 183 additions and 78 deletions

View File

@ -40,3 +40,15 @@ DPP
.. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h
:internal:
MPC
---
.. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
:doc: overview
.. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
:export:
.. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
:internal:

View File

@ -131,9 +131,6 @@ The DRM blend mode and its elements are then mapped by AMDGPU display manager
(DM) to program the blending configuration of the Multiple Pipe/Plane Combined
(MPC), as follows:
.. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
:doc: mpc-overview
.. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
:functions: mpcc_blnd_cfg

View File

@ -23,13 +23,28 @@
*/
/**
* DOC: mpc-overview
* DOC: overview
*
* Multiple Pipe/Plane Combined (MPC) is a component in the hardware pipeline
* Multiple Pipe/Plane Combiner (MPC) is a component in the hardware pipeline
* that performs blending of multiple planes, using global and per-pixel alpha.
* It also performs post-blending color correction operations according to the
* hardware capabilities, such as color transformation matrix and gamma 1D and
* 3D LUT.
*
* MPC receives output from all DPP pipes and combines them to multiple outputs
* supporting "M MPC inputs -> N MPC outputs" flexible composition
* architecture. It features:
*
* - Programmable blending structure to allow software controlled blending and
* cascading;
* - Programmable window location of each DPP in active region of display;
* - Combining multiple DPP pipes in one active region when a single DPP pipe
* cannot process very large surface;
* - Combining multiple DPP from different SLS with blending;
* - Stereo formats from single DPP in top-bottom or side-by-side modes;
* - Stereo formats from 2 DPPs;
* - Alpha blending of multiple layers from different DPP pipes;
* - Programmable background color;
*/
#ifndef __DC_MPCC_H__
@ -83,34 +98,66 @@ enum mpcc_alpha_blend_mode {
/**
* struct mpcc_blnd_cfg - MPCC blending configuration
*
* @black_color: background color
* @alpha_mode: alpha blend mode (MPCC_ALPHA_BLND_MODE)
* @pre_multiplied_alpha: whether pixel color values were pre-multiplied by the
* alpha channel (MPCC_ALPHA_MULTIPLIED_MODE)
* @global_gain: used when blend mode considers both pixel alpha and plane
* alpha value and assumes the global alpha value.
* @global_alpha: plane alpha value
* @overlap_only: whether overlapping of different planes is allowed
* @bottom_gain_mode: blend mode for bottom gain setting
* @background_color_bpc: background color for bpc
* @top_gain: top gain setting
* @bottom_inside_gain: blend mode for bottom inside
* @bottom_outside_gain: blend mode for bottom outside
*/
struct mpcc_blnd_cfg {
struct tg_color black_color; /* background color */
enum mpcc_alpha_blend_mode alpha_mode; /* alpha blend mode */
bool pre_multiplied_alpha; /* alpha pre-multiplied mode flag */
/**
* @black_color: background color.
*/
struct tg_color black_color;
/**
* @alpha_mode: alpha blend mode (MPCC_ALPHA_BLND_MODE).
*/
enum mpcc_alpha_blend_mode alpha_mode;
/***
* @@pre_multiplied_alpha:
*
* Whether pixel color values were pre-multiplied by the alpha channel
* (MPCC_ALPHA_MULTIPLIED_MODE).
*/
bool pre_multiplied_alpha;
/**
* @global_gain: Used when blend mode considers both pixel alpha and plane.
*/
int global_gain;
/**
* @global_alpha: Plane alpha value.
*/
int global_alpha;
/**
* @@overlap_only: Whether overlapping of different planes is allowed.
*/
bool overlap_only;
/* MPCC top/bottom gain settings */
/**
* @bottom_gain_mode: Blend mode for bottom gain setting.
*/
int bottom_gain_mode;
/**
* @background_color_bpc: Background color for bpc.
*/
int background_color_bpc;
/**
* @top_gain: Top gain setting.
*/
int top_gain;
/**
* @bottom_inside_gain: Blend mode for bottom inside.
*/
int bottom_inside_gain;
/**
* @bottom_outside_gain: Blend mode for bottom outside.
*/
int bottom_outside_gain;
};
@ -150,34 +197,58 @@ struct mpc_dwb_flow_control {
/**
* struct mpcc - MPCC connection and blending configuration for a single MPCC instance.
* @mpcc_id: MPCC physical instance
* @dpp_id: DPP input to this MPCC
* @mpcc_bot: pointer to bottom layer MPCC. NULL when not connected.
* @blnd_cfg: the blending configuration for this MPCC
* @sm_cfg: stereo mix setting for this MPCC
* @shared_bottom: if MPCC output to both OPP and DWB endpoints, true. Otherwise, false.
*
* This struct is used as a node in an MPC tree.
*/
struct mpcc {
int mpcc_id; /* MPCC physical instance */
int dpp_id; /* DPP input to this MPCC */
struct mpcc *mpcc_bot; /* pointer to bottom layer MPCC. NULL when not connected */
struct mpcc_blnd_cfg blnd_cfg; /* The blending configuration for this MPCC */
struct mpcc_sm_cfg sm_cfg; /* stereo mix setting for this MPCC */
bool shared_bottom; /* TRUE if MPCC output to both OPP and DWB endpoints, else FALSE */
/**
* @mpcc_id: MPCC physical instance.
*/
int mpcc_id;
/**
* @dpp_id: DPP input to this MPCC
*/
int dpp_id;
/**
* @mpcc_bot: Pointer to bottom layer MPCC. NULL when not connected.
*/
struct mpcc *mpcc_bot;
/**
* @blnd_cfg: The blending configuration for this MPCC.
*/
struct mpcc_blnd_cfg blnd_cfg;
/**
* @sm_cfg: stereo mix setting for this MPCC
*/
struct mpcc_sm_cfg sm_cfg;
/**
* @shared_bottom:
*
* If MPCC output to both OPP and DWB endpoints, true. Otherwise, false.
*/
bool shared_bottom;
};
/**
* struct mpc_tree - MPC tree represents all MPCC connections for a pipe.
*
* @opp_id: the OPP instance that owns this MPC tree
* @opp_list: the top MPCC layer of the MPC tree that outputs to OPP endpoint
*
*/
struct mpc_tree {
int opp_id; /* The OPP instance that owns this MPC tree */
struct mpcc *opp_list; /* The top MPCC layer of the MPC tree that outputs to OPP endpoint */
/**
* @opp_id: The OPP instance that owns this MPC tree.
*/
int opp_id;
/**
* @opp_list: the top MPCC layer of the MPC tree that outputs to OPP endpoint
*/
struct mpcc *opp_list;
};
struct mpc {
@ -224,16 +295,20 @@ struct mpc_funcs {
* Only used for planes that are part of blending chain for OPP output
*
* Parameters:
* [in/out] mpc - MPC context.
* [in/out] tree - MPC tree structure that plane will be added to.
* [in] blnd_cfg - MPCC blending configuration for the new blending layer.
* [in] sm_cfg - MPCC stereo mix configuration for the new blending layer.
* stereo mix must disable for the very bottom layer of the tree config.
* [in] insert_above_mpcc - Insert new plane above this MPCC. If NULL, insert as bottom plane.
* [in] dpp_id - DPP instance for the plane to be added.
* [in] mpcc_id - The MPCC physical instance to use for blending.
*
* Return: struct mpcc* - MPCC that was added.
* - [in/out] mpc - MPC context.
* - [in/out] tree - MPC tree structure that plane will be added to.
* - [in] blnd_cfg - MPCC blending configuration for the new blending layer.
* - [in] sm_cfg - MPCC stereo mix configuration for the new blending layer.
* stereo mix must disable for the very bottom layer of the tree config.
* - [in] insert_above_mpcc - Insert new plane above this MPCC.
* If NULL, insert as bottom plane.
* - [in] dpp_id - DPP instance for the plane to be added.
* - [in] mpcc_id - The MPCC physical instance to use for blending.
*
* Return:
*
* struct mpcc* - MPCC that was added.
*/
struct mpcc* (*insert_plane)(
struct mpc *mpc,
@ -250,11 +325,14 @@ struct mpc_funcs {
* Remove a specified MPCC from the MPC tree.
*
* Parameters:
* [in/out] mpc - MPC context.
* [in/out] tree - MPC tree structure that plane will be removed from.
* [in/out] mpcc - MPCC to be removed from tree.
*
* Return: void
* - [in/out] mpc - MPC context.
* - [in/out] tree - MPC tree structure that plane will be removed from.
* - [in/out] mpcc - MPCC to be removed from tree.
*
* Return:
*
* void
*/
void (*remove_mpcc)(
struct mpc *mpc,
@ -267,9 +345,12 @@ struct mpc_funcs {
* Reset the MPCC HW status by disconnecting all muxes.
*
* Parameters:
* [in/out] mpc - MPC context.
*
* Return: void
* - [in/out] mpc - MPC context.
*
* Return:
*
* void
*/
void (*mpc_init)(struct mpc *mpc);
void (*mpc_init_single_inst)(
@ -282,11 +363,14 @@ struct mpc_funcs {
* Update the blending configuration for a specified MPCC.
*
* Parameters:
* [in/out] mpc - MPC context.
* [in] blnd_cfg - MPCC blending configuration.
* [in] mpcc_id - The MPCC physical instance.
*
* Return: void
* - [in/out] mpc - MPC context.
* - [in] blnd_cfg - MPCC blending configuration.
* - [in] mpcc_id - The MPCC physical instance.
*
* Return:
*
* void
*/
void (*update_blending)(
struct mpc *mpc,
@ -296,15 +380,18 @@ struct mpc_funcs {
/**
* @cursor_lock:
*
* Lock cursor updates for the specified OPP.
* OPP defines the set of MPCC that are locked together for cursor.
* Lock cursor updates for the specified OPP. OPP defines the set of
* MPCC that are locked together for cursor.
*
* Parameters:
* [in] mpc - MPC context.
* [in] opp_id - The OPP to lock cursor updates on
* [in] lock - lock/unlock the OPP
*
* Return: void
* - [in] mpc - MPC context.
* - [in] opp_id - The OPP to lock cursor updates on
* - [in] lock - lock/unlock the OPP
*
* Return:
*
* void
*/
void (*cursor_lock)(
struct mpc *mpc,
@ -314,20 +401,25 @@ struct mpc_funcs {
/**
* @insert_plane_to_secondary:
*
* Add DPP into secondary MPC tree based on specified blending position.
* Only used for planes that are part of blending chain for DWB output
* Add DPP into secondary MPC tree based on specified blending
* position. Only used for planes that are part of blending chain for
* DWB output
*
* Parameters:
* [in/out] mpc - MPC context.
* [in/out] tree - MPC tree structure that plane will be added to.
* [in] blnd_cfg - MPCC blending configuration for the new blending layer.
* [in] sm_cfg - MPCC stereo mix configuration for the new blending layer.
* stereo mix must disable for the very bottom layer of the tree config.
* [in] insert_above_mpcc - Insert new plane above this MPCC. If NULL, insert as bottom plane.
* [in] dpp_id - DPP instance for the plane to be added.
* [in] mpcc_id - The MPCC physical instance to use for blending.
*
* Return: struct mpcc* - MPCC that was added.
* - [in/out] mpc - MPC context.
* - [in/out] tree - MPC tree structure that plane will be added to.
* - [in] blnd_cfg - MPCC blending configuration for the new blending layer.
* - [in] sm_cfg - MPCC stereo mix configuration for the new blending layer.
* stereo mix must disable for the very bottom layer of the tree config.
* - [in] insert_above_mpcc - Insert new plane above this MPCC. If
* NULL, insert as bottom plane.
* - [in] dpp_id - DPP instance for the plane to be added.
* - [in] mpcc_id - The MPCC physical instance to use for blending.
*
* Return:
*
* struct mpcc* - MPCC that was added.
*/
struct mpcc* (*insert_plane_to_secondary)(
struct mpc *mpc,
@ -344,10 +436,14 @@ struct mpc_funcs {
* Remove a specified DPP from the 'secondary' MPC tree.
*
* Parameters:
* [in/out] mpc - MPC context.
* [in/out] tree - MPC tree structure that plane will be removed from.
* [in] mpcc - MPCC to be removed from tree.
* Return: void
*
* - [in/out] mpc - MPC context.
* - [in/out] tree - MPC tree structure that plane will be removed from.
* - [in] mpcc - MPCC to be removed from tree.
*
* Return:
*
* void
*/
void (*remove_mpcc_from_secondary)(
struct mpc *mpc,