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 .. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h
:internal: :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 (DM) to program the blending configuration of the Multiple Pipe/Plane Combined
(MPC), as follows: (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 .. kernel-doc:: drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
:functions: mpcc_blnd_cfg :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. * that performs blending of multiple planes, using global and per-pixel alpha.
* It also performs post-blending color correction operations according to the * It also performs post-blending color correction operations according to the
* hardware capabilities, such as color transformation matrix and gamma 1D and * hardware capabilities, such as color transformation matrix and gamma 1D and
* 3D LUT. * 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__ #ifndef __DC_MPCC_H__
@ -83,34 +98,66 @@ enum mpcc_alpha_blend_mode {
/** /**
* struct mpcc_blnd_cfg - MPCC blending configuration * 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 mpcc_blnd_cfg {
struct tg_color black_color; /* background color */ /**
enum mpcc_alpha_blend_mode alpha_mode; /* alpha blend mode */ * @black_color: background color.
bool pre_multiplied_alpha; /* alpha pre-multiplied mode flag */ */
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; int global_gain;
/**
* @global_alpha: Plane alpha value.
*/
int global_alpha; int global_alpha;
/**
* @@overlap_only: Whether overlapping of different planes is allowed.
*/
bool overlap_only; bool overlap_only;
/* MPCC top/bottom gain settings */ /* MPCC top/bottom gain settings */
/**
* @bottom_gain_mode: Blend mode for bottom gain setting.
*/
int bottom_gain_mode; int bottom_gain_mode;
/**
* @background_color_bpc: Background color for bpc.
*/
int background_color_bpc; int background_color_bpc;
/**
* @top_gain: Top gain setting.
*/
int top_gain; int top_gain;
/**
* @bottom_inside_gain: Blend mode for bottom inside.
*/
int bottom_inside_gain; int bottom_inside_gain;
/**
* @bottom_outside_gain: Blend mode for bottom outside.
*/
int bottom_outside_gain; 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. * 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. * This struct is used as a node in an MPC tree.
*/ */
struct mpcc { struct mpcc {
int mpcc_id; /* MPCC physical instance */ /**
int dpp_id; /* DPP input to this MPCC */ * @mpcc_id: MPCC physical instance.
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 */ int mpcc_id;
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 */ /**
* @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. * 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 { 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 { struct mpc {
@ -224,16 +295,20 @@ struct mpc_funcs {
* Only used for planes that are part of blending chain for OPP output * Only used for planes that are part of blending chain for OPP output
* *
* Parameters: * 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 mpcc* (*insert_plane)(
struct mpc *mpc, struct mpc *mpc,
@ -250,11 +325,14 @@ struct mpc_funcs {
* Remove a specified MPCC from the MPC tree. * Remove a specified MPCC from the MPC tree.
* *
* Parameters: * 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)( void (*remove_mpcc)(
struct mpc *mpc, struct mpc *mpc,
@ -267,9 +345,12 @@ struct mpc_funcs {
* Reset the MPCC HW status by disconnecting all muxes. * Reset the MPCC HW status by disconnecting all muxes.
* *
* Parameters: * Parameters:
* [in/out] mpc - MPC context.
* *
* Return: void * - [in/out] mpc - MPC context.
*
* Return:
*
* void
*/ */
void (*mpc_init)(struct mpc *mpc); void (*mpc_init)(struct mpc *mpc);
void (*mpc_init_single_inst)( void (*mpc_init_single_inst)(
@ -282,11 +363,14 @@ struct mpc_funcs {
* Update the blending configuration for a specified MPCC. * Update the blending configuration for a specified MPCC.
* *
* Parameters: * 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)( void (*update_blending)(
struct mpc *mpc, struct mpc *mpc,
@ -296,15 +380,18 @@ struct mpc_funcs {
/** /**
* @cursor_lock: * @cursor_lock:
* *
* Lock cursor updates for the specified OPP. * Lock cursor updates for the specified OPP. OPP defines the set of
* OPP defines the set of MPCC that are locked together for cursor. * MPCC that are locked together for cursor.
* *
* Parameters: * 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)( void (*cursor_lock)(
struct mpc *mpc, struct mpc *mpc,
@ -314,20 +401,25 @@ struct mpc_funcs {
/** /**
* @insert_plane_to_secondary: * @insert_plane_to_secondary:
* *
* Add DPP into secondary MPC tree based on specified blending position. * Add DPP into secondary MPC tree based on specified blending
* Only used for planes that are part of blending chain for DWB output * position. Only used for planes that are part of blending chain for
* DWB output
* *
* Parameters: * 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 mpcc* (*insert_plane_to_secondary)(
struct mpc *mpc, struct mpc *mpc,
@ -344,10 +436,14 @@ struct mpc_funcs {
* Remove a specified DPP from the 'secondary' MPC tree. * Remove a specified DPP from the 'secondary' MPC tree.
* *
* Parameters: * Parameters:
* [in/out] mpc - MPC context. *
* [in/out] tree - MPC tree structure that plane will be removed from. * - [in/out] mpc - MPC context.
* [in] mpcc - MPCC to be removed from tree. * - [in/out] tree - MPC tree structure that plane will be removed from.
* Return: void * - [in] mpcc - MPCC to be removed from tree.
*
* Return:
*
* void
*/ */
void (*remove_mpcc_from_secondary)( void (*remove_mpcc_from_secondary)(
struct mpc *mpc, struct mpc *mpc,