Re: [PATCH v3] drm/dsc: Add kernel documentation for DRM DP DSC helpers
Pushed to drm-misc thanks for the reviews. Regards Manasi On Wed, Feb 06, 2019 at 01:31:48PM -0800, Manasi Navare wrote: > This patch adds appropriate kernel documentation for DRM DP helpers > used for enabling Display Stream compression functionality in > drm_dp_helper.h and drm_dp_helper.c as well as for the DSC spec > related structure definitions and helpers in drm_dsc.c and drm_dsc.h > Also add links between the functions and structures in the documentation. > > v3: > * Fix the checkpatch warnings (Sean Paul) > v2: > * Add inline comments for longer structs (Daniel Vetter) > * Split the summary and description (Daniel Vetter) > > Suggested-by: Daniel Vetter > Suggested-by: Sean Paul > Cc: Daniel Vetter > Cc: Sean Paul > Signed-off-by: Manasi Navare > Acked-by: Sean Paul > Reviewed-by: Daniel Vetter > --- > drivers/gpu/drm/drm_dp_helper.c | 47 ++- > drivers/gpu/drm/drm_dsc.c | 30 +++- > include/drm/drm_dp_helper.h | 15 +- > include/drm/drm_dsc.h | 233 > 4 files changed, 259 insertions(+), 66 deletions(-) > > diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c > index 54120b6319e7..54a6414c5d96 100644 > --- a/drivers/gpu/drm/drm_dp_helper.c > +++ b/drivers/gpu/drm/drm_dp_helper.c > @@ -1360,7 +1360,20 @@ int drm_dp_read_desc(struct drm_dp_aux *aux, struct > drm_dp_desc *desc, > EXPORT_SYMBOL(drm_dp_read_desc); > > /** > - * DRM DP Helpers for DSC > + * drm_dp_dsc_sink_max_slice_count() - Get the max slice count > + * supported by the DSC sink. > + * @dsc_dpcd: DSC capabilities from DPCD > + * @is_edp: true if its eDP, false for DP > + * > + * Read the slice capabilities DPCD register from DSC sink to get > + * the maximum slice count supported. This is used to populate > + * the DSC parameters in the drm_dsc_config by the driver. > + * Driver creates an infoframe using these parameters to populate > + * drm_dsc_pps_infoframe. These are sent to the sink using DSC > + * infoframe using the helper function drm_dsc_pps_infoframe_pack() > + * > + * Returns: > + * Maximum slice count supported by DSC sink or 0 its invalid > */ > u8 drm_dp_dsc_sink_max_slice_count(const u8 > dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], > bool is_edp) > @@ -1405,6 +1418,21 @@ u8 drm_dp_dsc_sink_max_slice_count(const u8 > dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], > } > EXPORT_SYMBOL(drm_dp_dsc_sink_max_slice_count); > > +/** > + * drm_dp_dsc_sink_line_buf_depth() - Get the line buffer depth in bits > + * @dsc_dpcd: DSC capabilities from DPCD > + * > + * Read the DSC DPCD register to parse the line buffer depth in bits which is > + * number of bits of precision within the decoder line buffer supported by > + * the DSC sink. This is used to populate the DSC parameters in the > + * drm_dsc_config by the driver. > + * Driver creates an infoframe using these parameters to populate > + * drm_dsc_pps_infoframe. These are sent to the sink using DSC > + * infoframe using the helper function drm_dsc_pps_infoframe_pack() > + * > + * Returns: > + * Line buffer depth supported by DSC panel or 0 its invalid > + */ > u8 drm_dp_dsc_sink_line_buf_depth(const u8 > dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]) > { > u8 line_buf_depth = dsc_dpcd[DP_DSC_LINE_BUF_BIT_DEPTH - > DP_DSC_SUPPORT]; > @@ -1434,6 +1462,23 @@ u8 drm_dp_dsc_sink_line_buf_depth(const u8 > dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]) > } > EXPORT_SYMBOL(drm_dp_dsc_sink_line_buf_depth); > > +/** > + * drm_dp_dsc_sink_supported_input_bpcs() - Get all the input bits per > component > + * values supported by the DSC sink. > + * @dsc_dpcd: DSC capabilities from DPCD > + * @dsc_bpc: An array to be filled by this helper with supported > + * input bpcs. > + * > + * Read the DSC DPCD from the sink device to parse the supported bits per > + * component values. This is used to populate the DSC parameters > + * in the drm_dsc_config by the driver. > + * Driver creates an infoframe using these parameters to populate > + * drm_dsc_pps_infoframe. These are sent to the sink using DSC > + * infoframe using the helper function drm_dsc_pps_infoframe_pack() > + * > + * Returns: > + * Number of input BPC values parsed from the DPCD > + */ > int drm_dp_dsc_sink_supported_input_bpcs(const u8 > dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], >u8 dsc_bpc[3]) > { > diff --git a/drivers/gpu/drm/drm_dsc.c b/drivers/gpu/drm/drm_dsc.c > index bc2b23adb072..bce99f95c1a3 100644 > --- a/drivers/gpu/drm/drm_dsc.c > +++ b/drivers/gpu/drm/drm_dsc.c > @@ -17,6 +17,12 @@ > /** > * DOC: dsc helpers > * > + * VESA specification for DP 1.4 adds a new feature called Display Stream > + * Compression (DSC) used to compress the pixel bits before sending it on > + * DP/eDP/MIPI DSI interface. DSC is required to be enabled so that the > existing > + * display interfaces can support high resolutions at higher frames rates > uisng > + * the
[PATCH v3] drm/dsc: Add kernel documentation for DRM DP DSC helpers
This patch adds appropriate kernel documentation for DRM DP helpers used for enabling Display Stream compression functionality in drm_dp_helper.h and drm_dp_helper.c as well as for the DSC spec related structure definitions and helpers in drm_dsc.c and drm_dsc.h Also add links between the functions and structures in the documentation. v3: * Fix the checkpatch warnings (Sean Paul) v2: * Add inline comments for longer structs (Daniel Vetter) * Split the summary and description (Daniel Vetter) Suggested-by: Daniel Vetter Suggested-by: Sean Paul Cc: Daniel Vetter Cc: Sean Paul Signed-off-by: Manasi Navare Acked-by: Sean Paul Reviewed-by: Daniel Vetter --- drivers/gpu/drm/drm_dp_helper.c | 47 ++- drivers/gpu/drm/drm_dsc.c | 30 +++- include/drm/drm_dp_helper.h | 15 +- include/drm/drm_dsc.h | 233 4 files changed, 259 insertions(+), 66 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 54120b6319e7..54a6414c5d96 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -1360,7 +1360,20 @@ int drm_dp_read_desc(struct drm_dp_aux *aux, struct drm_dp_desc *desc, EXPORT_SYMBOL(drm_dp_read_desc); /** - * DRM DP Helpers for DSC + * drm_dp_dsc_sink_max_slice_count() - Get the max slice count + * supported by the DSC sink. + * @dsc_dpcd: DSC capabilities from DPCD + * @is_edp: true if its eDP, false for DP + * + * Read the slice capabilities DPCD register from DSC sink to get + * the maximum slice count supported. This is used to populate + * the DSC parameters in the drm_dsc_config by the driver. + * Driver creates an infoframe using these parameters to populate + * drm_dsc_pps_infoframe. These are sent to the sink using DSC + * infoframe using the helper function drm_dsc_pps_infoframe_pack() + * + * Returns: + * Maximum slice count supported by DSC sink or 0 its invalid */ u8 drm_dp_dsc_sink_max_slice_count(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], bool is_edp) @@ -1405,6 +1418,21 @@ u8 drm_dp_dsc_sink_max_slice_count(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], } EXPORT_SYMBOL(drm_dp_dsc_sink_max_slice_count); +/** + * drm_dp_dsc_sink_line_buf_depth() - Get the line buffer depth in bits + * @dsc_dpcd: DSC capabilities from DPCD + * + * Read the DSC DPCD register to parse the line buffer depth in bits which is + * number of bits of precision within the decoder line buffer supported by + * the DSC sink. This is used to populate the DSC parameters in the + * drm_dsc_config by the driver. + * Driver creates an infoframe using these parameters to populate + * drm_dsc_pps_infoframe. These are sent to the sink using DSC + * infoframe using the helper function drm_dsc_pps_infoframe_pack() + * + * Returns: + * Line buffer depth supported by DSC panel or 0 its invalid + */ u8 drm_dp_dsc_sink_line_buf_depth(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]) { u8 line_buf_depth = dsc_dpcd[DP_DSC_LINE_BUF_BIT_DEPTH - DP_DSC_SUPPORT]; @@ -1434,6 +1462,23 @@ u8 drm_dp_dsc_sink_line_buf_depth(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]) } EXPORT_SYMBOL(drm_dp_dsc_sink_line_buf_depth); +/** + * drm_dp_dsc_sink_supported_input_bpcs() - Get all the input bits per component + * values supported by the DSC sink. + * @dsc_dpcd: DSC capabilities from DPCD + * @dsc_bpc: An array to be filled by this helper with supported + * input bpcs. + * + * Read the DSC DPCD from the sink device to parse the supported bits per + * component values. This is used to populate the DSC parameters + * in the drm_dsc_config by the driver. + * Driver creates an infoframe using these parameters to populate + * drm_dsc_pps_infoframe. These are sent to the sink using DSC + * infoframe using the helper function drm_dsc_pps_infoframe_pack() + * + * Returns: + * Number of input BPC values parsed from the DPCD + */ int drm_dp_dsc_sink_supported_input_bpcs(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], u8 dsc_bpc[3]) { diff --git a/drivers/gpu/drm/drm_dsc.c b/drivers/gpu/drm/drm_dsc.c index bc2b23adb072..bce99f95c1a3 100644 --- a/drivers/gpu/drm/drm_dsc.c +++ b/drivers/gpu/drm/drm_dsc.c @@ -17,6 +17,12 @@ /** * DOC: dsc helpers * + * VESA specification for DP 1.4 adds a new feature called Display Stream + * Compression (DSC) used to compress the pixel bits before sending it on + * DP/eDP/MIPI DSI interface. DSC is required to be enabled so that the existing + * display interfaces can support high resolutions at higher frames rates uisng + * the maximum available link capacity of these interfaces. + * * These functions contain some common logic and helpers to deal with VESA * Display Stream Compression standard required for DSC on Display Port/eDP or * MIPI display interfaces. @@ -26,6 +32,13 @@ * drm_dsc_dp_pps_header_init() - Initializes the PPS Header * for DisplayPort as per the DP 1.4