diff options
| author | Manasi Navare <manasi.d.navare@intel.com> | 2019-02-06 16:31:48 -0500 |
|---|---|---|
| committer | Manasi Navare <manasi.d.navare@intel.com> | 2019-02-08 16:38:51 -0500 |
| commit | 05bad2357afcb9f89804f04f0ae5ac58ae898ec5 (patch) | |
| tree | 8d18074e82e592b2385578d8867bde2c35a4caaf | |
| parent | 05f8bc82fc428dbaf41764e95167dd759769f33d (diff) | |
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 <daniel.vetter@intel.com>
Suggested-by: Sean Paul <sean@poorly.run>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sean Paul <sean@poorly.run>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Acked-by: Sean Paul <sean@poorly.run>
Reviewed-by: Daniel Vetter <daniel.vetter@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190206213148.21390-1-manasi.d.navare@intel.com
| -rw-r--r-- | drivers/gpu/drm/drm_dp_helper.c | 47 | ||||
| -rw-r--r-- | drivers/gpu/drm/drm_dsc.c | 30 | ||||
| -rw-r--r-- | include/drm/drm_dp_helper.h | 15 | ||||
| -rw-r--r-- | 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, | |||
| 1360 | EXPORT_SYMBOL(drm_dp_read_desc); | 1360 | EXPORT_SYMBOL(drm_dp_read_desc); |
| 1361 | 1361 | ||
| 1362 | /** | 1362 | /** |
| 1363 | * DRM DP Helpers for DSC | 1363 | * drm_dp_dsc_sink_max_slice_count() - Get the max slice count |
| 1364 | * supported by the DSC sink. | ||
| 1365 | * @dsc_dpcd: DSC capabilities from DPCD | ||
| 1366 | * @is_edp: true if its eDP, false for DP | ||
| 1367 | * | ||
| 1368 | * Read the slice capabilities DPCD register from DSC sink to get | ||
| 1369 | * the maximum slice count supported. This is used to populate | ||
| 1370 | * the DSC parameters in the &struct drm_dsc_config by the driver. | ||
| 1371 | * Driver creates an infoframe using these parameters to populate | ||
| 1372 | * &struct drm_dsc_pps_infoframe. These are sent to the sink using DSC | ||
| 1373 | * infoframe using the helper function drm_dsc_pps_infoframe_pack() | ||
| 1374 | * | ||
| 1375 | * Returns: | ||
| 1376 | * Maximum slice count supported by DSC sink or 0 its invalid | ||
| 1364 | */ | 1377 | */ |
| 1365 | u8 drm_dp_dsc_sink_max_slice_count(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], | 1378 | u8 drm_dp_dsc_sink_max_slice_count(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], |
| 1366 | bool is_edp) | 1379 | bool is_edp) |
| @@ -1405,6 +1418,21 @@ u8 drm_dp_dsc_sink_max_slice_count(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], | |||
| 1405 | } | 1418 | } |
| 1406 | EXPORT_SYMBOL(drm_dp_dsc_sink_max_slice_count); | 1419 | EXPORT_SYMBOL(drm_dp_dsc_sink_max_slice_count); |
| 1407 | 1420 | ||
| 1421 | /** | ||
| 1422 | * drm_dp_dsc_sink_line_buf_depth() - Get the line buffer depth in bits | ||
| 1423 | * @dsc_dpcd: DSC capabilities from DPCD | ||
| 1424 | * | ||
| 1425 | * Read the DSC DPCD register to parse the line buffer depth in bits which is | ||
| 1426 | * number of bits of precision within the decoder line buffer supported by | ||
| 1427 | * the DSC sink. This is used to populate the DSC parameters in the | ||
| 1428 | * &struct drm_dsc_config by the driver. | ||
| 1429 | * Driver creates an infoframe using these parameters to populate | ||
| 1430 | * &struct drm_dsc_pps_infoframe. These are sent to the sink using DSC | ||
| 1431 | * infoframe using the helper function drm_dsc_pps_infoframe_pack() | ||
| 1432 | * | ||
| 1433 | * Returns: | ||
| 1434 | * Line buffer depth supported by DSC panel or 0 its invalid | ||
| 1435 | */ | ||
| 1408 | u8 drm_dp_dsc_sink_line_buf_depth(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]) | 1436 | u8 drm_dp_dsc_sink_line_buf_depth(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]) |
| 1409 | { | 1437 | { |
| 1410 | u8 line_buf_depth = dsc_dpcd[DP_DSC_LINE_BUF_BIT_DEPTH - DP_DSC_SUPPORT]; | 1438 | 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]) | |||
| 1434 | } | 1462 | } |
| 1435 | EXPORT_SYMBOL(drm_dp_dsc_sink_line_buf_depth); | 1463 | EXPORT_SYMBOL(drm_dp_dsc_sink_line_buf_depth); |
| 1436 | 1464 | ||
| 1465 | /** | ||
| 1466 | * drm_dp_dsc_sink_supported_input_bpcs() - Get all the input bits per component | ||
| 1467 | * values supported by the DSC sink. | ||
| 1468 | * @dsc_dpcd: DSC capabilities from DPCD | ||
| 1469 | * @dsc_bpc: An array to be filled by this helper with supported | ||
| 1470 | * input bpcs. | ||
| 1471 | * | ||
| 1472 | * Read the DSC DPCD from the sink device to parse the supported bits per | ||
| 1473 | * component values. This is used to populate the DSC parameters | ||
| 1474 | * in the &struct drm_dsc_config by the driver. | ||
| 1475 | * Driver creates an infoframe using these parameters to populate | ||
| 1476 | * &struct drm_dsc_pps_infoframe. These are sent to the sink using DSC | ||
| 1477 | * infoframe using the helper function drm_dsc_pps_infoframe_pack() | ||
| 1478 | * | ||
| 1479 | * Returns: | ||
| 1480 | * Number of input BPC values parsed from the DPCD | ||
| 1481 | */ | ||
| 1437 | int drm_dp_dsc_sink_supported_input_bpcs(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], | 1482 | int drm_dp_dsc_sink_supported_input_bpcs(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], |
| 1438 | u8 dsc_bpc[3]) | 1483 | u8 dsc_bpc[3]) |
| 1439 | { | 1484 | { |
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 @@ | |||
| 17 | /** | 17 | /** |
| 18 | * DOC: dsc helpers | 18 | * DOC: dsc helpers |
| 19 | * | 19 | * |
| 20 | * VESA specification for DP 1.4 adds a new feature called Display Stream | ||
| 21 | * Compression (DSC) used to compress the pixel bits before sending it on | ||
| 22 | * DP/eDP/MIPI DSI interface. DSC is required to be enabled so that the existing | ||
| 23 | * display interfaces can support high resolutions at higher frames rates uisng | ||
| 24 | * the maximum available link capacity of these interfaces. | ||
| 25 | * | ||
| 20 | * These functions contain some common logic and helpers to deal with VESA | 26 | * These functions contain some common logic and helpers to deal with VESA |
| 21 | * Display Stream Compression standard required for DSC on Display Port/eDP or | 27 | * Display Stream Compression standard required for DSC on Display Port/eDP or |
| 22 | * MIPI display interfaces. | 28 | * MIPI display interfaces. |
| @@ -26,6 +32,13 @@ | |||
| 26 | * drm_dsc_dp_pps_header_init() - Initializes the PPS Header | 32 | * drm_dsc_dp_pps_header_init() - Initializes the PPS Header |
| 27 | * for DisplayPort as per the DP 1.4 spec. | 33 | * for DisplayPort as per the DP 1.4 spec. |
| 28 | * @pps_sdp: Secondary data packet for DSC Picture Parameter Set | 34 | * @pps_sdp: Secondary data packet for DSC Picture Parameter Set |
| 35 | * as defined in &struct drm_dsc_pps_infoframe | ||
| 36 | * | ||
| 37 | * DP 1.4 spec defines the secondary data packet for sending the | ||
| 38 | * picture parameter infoframes from the source to the sink. | ||
| 39 | * This function populates the pps header defined in | ||
| 40 | * &struct drm_dsc_pps_infoframe as per the header bytes defined | ||
| 41 | * in &struct dp_sdp_header. | ||
| 29 | */ | 42 | */ |
| 30 | void drm_dsc_dp_pps_header_init(struct drm_dsc_pps_infoframe *pps_sdp) | 43 | void drm_dsc_dp_pps_header_init(struct drm_dsc_pps_infoframe *pps_sdp) |
| 31 | { | 44 | { |
| @@ -38,15 +51,20 @@ EXPORT_SYMBOL(drm_dsc_dp_pps_header_init); | |||
| 38 | 51 | ||
| 39 | /** | 52 | /** |
| 40 | * drm_dsc_pps_infoframe_pack() - Populates the DSC PPS infoframe | 53 | * drm_dsc_pps_infoframe_pack() - Populates the DSC PPS infoframe |
| 41 | * using the DSC configuration parameters in the order expected | ||
| 42 | * by the DSC Display Sink device. For the DSC, the sink device | ||
| 43 | * expects the PPS payload in the big endian format for the fields | ||
| 44 | * that span more than 1 byte. | ||
| 45 | * | 54 | * |
| 46 | * @pps_sdp: | 55 | * @pps_sdp: |
| 47 | * Secondary data packet for DSC Picture Parameter Set | 56 | * Secondary data packet for DSC Picture Parameter Set. This is defined |
| 57 | * by &struct drm_dsc_pps_infoframe | ||
| 48 | * @dsc_cfg: | 58 | * @dsc_cfg: |
| 49 | * DSC Configuration data filled by driver | 59 | * DSC Configuration data filled by driver as defined by |
| 60 | * &struct drm_dsc_config | ||
| 61 | * | ||
| 62 | * DSC source device sends a secondary data packet filled with all the | ||
| 63 | * picture parameter set (PPS) information required by the sink to decode | ||
| 64 | * the compressed frame. Driver populates the dsC PPS infoframe using the DSC | ||
| 65 | * configuration parameters in the order expected by the DSC Display Sink | ||
| 66 | * device. For the DSC, the sink device expects the PPS payload in the big | ||
| 67 | * endian format for the fields that span more than 1 byte. | ||
| 50 | */ | 68 | */ |
| 51 | void drm_dsc_pps_infoframe_pack(struct drm_dsc_pps_infoframe *pps_sdp, | 69 | void drm_dsc_pps_infoframe_pack(struct drm_dsc_pps_infoframe *pps_sdp, |
| 52 | const struct drm_dsc_config *dsc_cfg) | 70 | const struct drm_dsc_config *dsc_cfg) |
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index 5db7fb8c8b50..2711cdfa0c13 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h | |||
| @@ -1052,11 +1052,18 @@ int drm_dp_bw_code_to_link_rate(u8 link_bw); | |||
| 1052 | #define DP_SDP_VSC_EXT_CEA 0x21 /* DP 1.4 */ | 1052 | #define DP_SDP_VSC_EXT_CEA 0x21 /* DP 1.4 */ |
| 1053 | /* 0x80+ CEA-861 infoframe types */ | 1053 | /* 0x80+ CEA-861 infoframe types */ |
| 1054 | 1054 | ||
| 1055 | /** | ||
| 1056 | * struct dp_sdp_header - DP secondary data packet header | ||
| 1057 | * @HB0: Secondary Data Packet ID | ||
| 1058 | * @HB1: Secondary Data Packet Type | ||
| 1059 | * @HB2: Secondary Data Packet Specific header, Byte 0 | ||
| 1060 | * @HB3: Secondary Data packet Specific header, Byte 1 | ||
| 1061 | */ | ||
| 1055 | struct dp_sdp_header { | 1062 | struct dp_sdp_header { |
| 1056 | u8 HB0; /* Secondary Data Packet ID */ | 1063 | u8 HB0; |
| 1057 | u8 HB1; /* Secondary Data Packet Type */ | 1064 | u8 HB1; |
| 1058 | u8 HB2; /* Secondary Data Packet Specific header, Byte 0 */ | 1065 | u8 HB2; |
| 1059 | u8 HB3; /* Secondary Data packet Specific header, Byte 1 */ | 1066 | u8 HB3; |
| 1060 | } __packed; | 1067 | } __packed; |
| 1061 | 1068 | ||
| 1062 | #define EDP_SDP_HEADER_REVISION_MASK 0x1F | 1069 | #define EDP_SDP_HEADER_REVISION_MASK 0x1F |
diff --git a/include/drm/drm_dsc.h b/include/drm/drm_dsc.h index d03f1b83421a..9c26f083c70f 100644 --- a/include/drm/drm_dsc.h +++ b/include/drm/drm_dsc.h | |||
| @@ -44,111 +44,231 @@ | |||
| 44 | #define DSC_1_2_MAX_LINEBUF_DEPTH_VAL 0 | 44 | #define DSC_1_2_MAX_LINEBUF_DEPTH_VAL 0 |
| 45 | #define DSC_1_1_MAX_LINEBUF_DEPTH_BITS 13 | 45 | #define DSC_1_1_MAX_LINEBUF_DEPTH_BITS 13 |
| 46 | 46 | ||
| 47 | /* Configuration for a single Rate Control model range */ | 47 | /** |
| 48 | * struct drm_dsc_rc_range_parameters - DSC Rate Control range parameters | ||
| 49 | * | ||
| 50 | * This defines different rate control parameters used by the DSC engine | ||
| 51 | * to compress the frame. | ||
| 52 | */ | ||
| 48 | struct drm_dsc_rc_range_parameters { | 53 | struct drm_dsc_rc_range_parameters { |
| 49 | /* Min Quantization Parameters allowed for this range */ | 54 | /** |
| 55 | * @range_min_qp: Min Quantization Parameters allowed for this range | ||
| 56 | */ | ||
| 50 | u8 range_min_qp; | 57 | u8 range_min_qp; |
| 51 | /* Max Quantization Parameters allowed for this range */ | 58 | /** |
| 59 | * @range_max_qp: Max Quantization Parameters allowed for this range | ||
| 60 | */ | ||
| 52 | u8 range_max_qp; | 61 | u8 range_max_qp; |
| 53 | /* Bits/group offset to apply to target for this group */ | 62 | /** |
| 63 | * @range_bpg_offset: | ||
| 64 | * Bits/group offset to apply to target for this group | ||
| 65 | */ | ||
| 54 | u8 range_bpg_offset; | 66 | u8 range_bpg_offset; |
| 55 | }; | 67 | }; |
| 56 | 68 | ||
| 69 | /** | ||
| 70 | * struct drm_dsc_config - Parameters required to configure DSC | ||
| 71 | * | ||
| 72 | * Driver populates this structure with all the parameters required | ||
| 73 | * to configure the display stream compression on the source. | ||
| 74 | */ | ||
| 57 | struct drm_dsc_config { | 75 | struct drm_dsc_config { |
| 58 | /* Bits / component for previous reconstructed line buffer */ | 76 | /** |
| 77 | * @line_buf_depth: | ||
| 78 | * Bits per component for previous reconstructed line buffer | ||
| 79 | */ | ||
| 59 | u8 line_buf_depth; | 80 | u8 line_buf_depth; |
| 60 | /* Bits per component to code (must be 8, 10, or 12) */ | 81 | /** |
| 82 | * @bits_per_component: Bits per component to code (8/10/12) | ||
| 83 | */ | ||
| 61 | u8 bits_per_component; | 84 | u8 bits_per_component; |
| 62 | /* | 85 | /** |
| 63 | * Flag indicating to do RGB - YCoCg conversion | 86 | * @convert_rgb: |
| 64 | * and back (should be 1 for RGB input) | 87 | * Flag to indicate if RGB - YCoCg conversion is needed |
| 88 | * True if RGB input, False if YCoCg input | ||
| 65 | */ | 89 | */ |
| 66 | bool convert_rgb; | 90 | bool convert_rgb; |
| 91 | /** | ||
| 92 | * @slice_count: Number fo slices per line used by the DSC encoder | ||
| 93 | */ | ||
| 67 | u8 slice_count; | 94 | u8 slice_count; |
| 68 | /* Slice Width */ | 95 | /** |
| 96 | * @slice_width: Width of each slice in pixels | ||
| 97 | */ | ||
| 69 | u16 slice_width; | 98 | u16 slice_width; |
| 70 | /* Slice Height */ | 99 | /** |
| 100 | * @slice_height: Slice height in pixels | ||
| 101 | */ | ||
| 71 | u16 slice_height; | 102 | u16 slice_height; |
| 72 | /* | 103 | /** |
| 73 | * 4:2:2 enable mode (from PPS, 4:2:2 conversion happens | 104 | * @enable422: True for 4_2_2 sampling, false for 4_4_4 sampling |
| 74 | * outside of DSC encode/decode algorithm) | ||
| 75 | */ | 105 | */ |
| 76 | bool enable422; | 106 | bool enable422; |
| 77 | /* Picture Width */ | 107 | /** |
| 108 | * @pic_width: Width of the input display frame in pixels | ||
| 109 | */ | ||
| 78 | u16 pic_width; | 110 | u16 pic_width; |
| 79 | /* Picture Height */ | 111 | /** |
| 112 | * @pic_height: Vertical height of the input display frame | ||
| 113 | */ | ||
| 80 | u16 pic_height; | 114 | u16 pic_height; |
| 81 | /* Offset to bits/group used by RC to determine QP adjustment */ | 115 | /** |
| 116 | * @rc_tgt_offset_high: | ||
| 117 | * Offset to bits/group used by RC to determine QP adjustment | ||
| 118 | */ | ||
| 82 | u8 rc_tgt_offset_high; | 119 | u8 rc_tgt_offset_high; |
| 83 | /* Offset to bits/group used by RC to determine QP adjustment */ | 120 | /** |
| 121 | * @rc_tgt_offset_low: | ||
| 122 | * Offset to bits/group used by RC to determine QP adjustment | ||
| 123 | */ | ||
| 84 | u8 rc_tgt_offset_low; | 124 | u8 rc_tgt_offset_low; |
| 85 | /* Bits/pixel target << 4 (ie., 4 fractional bits) */ | 125 | /** |
| 126 | * @bits_per_pixel: | ||
| 127 | * Target bits per pixel with 4 fractional bits, bits_per_pixel << 4 | ||
| 128 | */ | ||
| 86 | u16 bits_per_pixel; | 129 | u16 bits_per_pixel; |
| 87 | /* | 130 | /** |
| 88 | * Factor to determine if an edge is present based | 131 | * @rc_edge_factor: |
| 89 | * on the bits produced | 132 | * Factor to determine if an edge is present based on the bits produced |
| 90 | */ | 133 | */ |
| 91 | u8 rc_edge_factor; | 134 | u8 rc_edge_factor; |
| 92 | /* Slow down incrementing once the range reaches this value */ | 135 | /** |
| 136 | * @rc_quant_incr_limit1: | ||
| 137 | * Slow down incrementing once the range reaches this value | ||
| 138 | */ | ||
| 93 | u8 rc_quant_incr_limit1; | 139 | u8 rc_quant_incr_limit1; |
| 94 | /* Slow down incrementing once the range reaches this value */ | 140 | /** |
| 141 | * @rc_quant_incr_limit0: | ||
| 142 | * Slow down incrementing once the range reaches this value | ||
| 143 | */ | ||
| 95 | u8 rc_quant_incr_limit0; | 144 | u8 rc_quant_incr_limit0; |
| 96 | /* Number of pixels to delay the initial transmission */ | 145 | /** |
| 146 | * @initial_xmit_delay: | ||
| 147 | * Number of pixels to delay the initial transmission | ||
| 148 | */ | ||
| 97 | u16 initial_xmit_delay; | 149 | u16 initial_xmit_delay; |
| 98 | /* Number of pixels to delay the VLD on the decoder,not including SSM */ | 150 | /** |
| 151 | * @initial_dec_delay: | ||
| 152 | * Initial decoder delay, number of pixel times that the decoder | ||
| 153 | * accumulates data in its rate buffer before starting to decode | ||
| 154 | * and output pixels. | ||
| 155 | */ | ||
| 99 | u16 initial_dec_delay; | 156 | u16 initial_dec_delay; |
| 100 | /* Block prediction enable */ | 157 | /** |
| 158 | * @block_pred_enable: | ||
| 159 | * True if block prediction is used to code any groups within the | ||
| 160 | * picture. False if BP not used | ||
| 161 | */ | ||
| 101 | bool block_pred_enable; | 162 | bool block_pred_enable; |
| 102 | /* Bits/group offset to use for first line of the slice */ | 163 | /** |
| 164 | * @first_line_bpg_offset: | ||
| 165 | * Number of additional bits allocated for each group on the first | ||
| 166 | * line of slice. | ||
| 167 | */ | ||
| 103 | u8 first_line_bpg_offset; | 168 | u8 first_line_bpg_offset; |
| 104 | /* Value to use for RC model offset at slice start */ | 169 | /** |
| 170 | * @initial_offset: Value to use for RC model offset at slice start | ||
| 171 | */ | ||
| 105 | u16 initial_offset; | 172 | u16 initial_offset; |
| 106 | /* Thresholds defining each of the buffer ranges */ | 173 | /** |
| 174 | * @rc_buf_thresh: Thresholds defining each of the buffer ranges | ||
| 175 | */ | ||
| 107 | u16 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1]; | 176 | u16 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1]; |
| 108 | /* Parameters for each of the RC ranges */ | 177 | /** |
| 178 | * @rc_range_params: | ||
| 179 | * Parameters for each of the RC ranges defined in | ||
| 180 | * &struct drm_dsc_rc_range_parameters | ||
| 181 | */ | ||
| 109 | struct drm_dsc_rc_range_parameters rc_range_params[DSC_NUM_BUF_RANGES]; | 182 | struct drm_dsc_rc_range_parameters rc_range_params[DSC_NUM_BUF_RANGES]; |
| 110 | /* Total size of RC model */ | 183 | /** |
| 184 | * @rc_model_size: Total size of RC model | ||
| 185 | */ | ||
| 111 | u16 rc_model_size; | 186 | u16 rc_model_size; |
| 112 | /* Minimum QP where flatness information is sent */ | 187 | /** |
| 188 | * @flatness_min_qp: Minimum QP where flatness information is sent | ||
| 189 | */ | ||
| 113 | u8 flatness_min_qp; | 190 | u8 flatness_min_qp; |
| 114 | /* Maximum QP where flatness information is sent */ | 191 | /** |
| 192 | * @flatness_max_qp: Maximum QP where flatness information is sent | ||
| 193 | */ | ||
| 115 | u8 flatness_max_qp; | 194 | u8 flatness_max_qp; |
| 116 | /* Initial value for scale factor */ | 195 | /** |
| 196 | * @initial_scale_value: Initial value for the scale factor | ||
| 197 | */ | ||
| 117 | u8 initial_scale_value; | 198 | u8 initial_scale_value; |
| 118 | /* Decrement scale factor every scale_decrement_interval groups */ | 199 | /** |
| 200 | * @scale_decrement_interval: | ||
| 201 | * Specifies number of group times between decrementing the scale factor | ||
| 202 | * at beginning of a slice. | ||
| 203 | */ | ||
| 119 | u16 scale_decrement_interval; | 204 | u16 scale_decrement_interval; |
| 120 | /* Increment scale factor every scale_increment_interval groups */ | 205 | /** |
| 206 | * @scale_increment_interval: | ||
| 207 | * Number of group times between incrementing the scale factor value | ||
| 208 | * used at the beginning of a slice. | ||
| 209 | */ | ||
| 121 | u16 scale_increment_interval; | 210 | u16 scale_increment_interval; |
| 122 | /* Non-first line BPG offset to use */ | 211 | /** |
| 212 | * @nfl_bpg_offset: Non first line BPG offset to be used | ||
| 213 | */ | ||
| 123 | u16 nfl_bpg_offset; | 214 | u16 nfl_bpg_offset; |
| 124 | /* BPG offset used to enforce slice bit */ | 215 | /** |
| 216 | * @slice_bpg_offset: BPG offset used to enforce slice bit | ||
| 217 | */ | ||
| 125 | u16 slice_bpg_offset; | 218 | u16 slice_bpg_offset; |
| 126 | /* Final RC linear transformation offset value */ | 219 | /** |
| 220 | * @final_offset: Final RC linear transformation offset value | ||
| 221 | */ | ||
| 127 | u16 final_offset; | 222 | u16 final_offset; |
| 128 | /* Enable on-off VBR (ie., disable stuffing bits) */ | 223 | /** |
| 224 | * @vbr_enable: True if VBR mode is enabled, false if disabled | ||
| 225 | */ | ||
| 129 | bool vbr_enable; | 226 | bool vbr_enable; |
| 130 | /* Mux word size (in bits) for SSM mode */ | 227 | /** |
| 228 | * @mux_word_size: Mux word size (in bits) for SSM mode | ||
| 229 | */ | ||
| 131 | u8 mux_word_size; | 230 | u8 mux_word_size; |
| 132 | /* | 231 | /** |
| 133 | * The (max) size in bytes of the "chunks" that are | 232 | * @slice_chunk_size: |
| 134 | * used in slice multiplexing | 233 | * The (max) size in bytes of the "chunks" that are used in slice |
| 234 | * multiplexing. | ||
| 135 | */ | 235 | */ |
| 136 | u16 slice_chunk_size; | 236 | u16 slice_chunk_size; |
| 137 | /* Rate Control buffer siz in bits */ | 237 | /** |
| 238 | * @rc_bits: Rate control buffer size in bits | ||
| 239 | */ | ||
| 138 | u16 rc_bits; | 240 | u16 rc_bits; |
| 139 | /* DSC Minor Version */ | 241 | /** |
| 242 | * @dsc_version_minor: DSC minor version | ||
| 243 | */ | ||
| 140 | u8 dsc_version_minor; | 244 | u8 dsc_version_minor; |
| 141 | /* DSC Major version */ | 245 | /** |
| 246 | * @dsc_version_major: DSC major version | ||
| 247 | */ | ||
| 142 | u8 dsc_version_major; | 248 | u8 dsc_version_major; |
| 143 | /* Native 4:2:2 support */ | 249 | /** |
| 250 | * @native_422: True if Native 4:2:2 supported, else false | ||
| 251 | */ | ||
| 144 | bool native_422; | 252 | bool native_422; |
| 145 | /* Native 4:2:0 support */ | 253 | /** |
| 254 | * @native_420: True if Native 4:2:0 supported else false. | ||
| 255 | */ | ||
| 146 | bool native_420; | 256 | bool native_420; |
| 147 | /* Additional bits/grp for seconnd line of slice for native 4:2:0 */ | 257 | /** |
| 258 | * @second_line_bpg_offset: | ||
| 259 | * Additional bits/grp for seconnd line of slice for native 4:2:0 | ||
| 260 | */ | ||
| 148 | u8 second_line_bpg_offset; | 261 | u8 second_line_bpg_offset; |
| 149 | /* Num of bits deallocated for each grp that is not in second line of slice */ | 262 | /** |
| 263 | * @nsl_bpg_offset: | ||
| 264 | * Num of bits deallocated for each grp that is not in second line of | ||
| 265 | * slice | ||
| 266 | */ | ||
| 150 | u16 nsl_bpg_offset; | 267 | u16 nsl_bpg_offset; |
| 151 | /* Offset adj fr second line in Native 4:2:0 mode */ | 268 | /** |
| 269 | * @second_line_offset_adj: | ||
| 270 | * Offset adjustment for second line in Native 4:2:0 mode | ||
| 271 | */ | ||
| 152 | u16 second_line_offset_adj; | 272 | u16 second_line_offset_adj; |
| 153 | }; | 273 | }; |
| 154 | 274 | ||
| @@ -468,10 +588,13 @@ struct drm_dsc_picture_parameter_set { | |||
| 468 | * This structure represents the DSC PPS infoframe required to send the Picture | 588 | * This structure represents the DSC PPS infoframe required to send the Picture |
| 469 | * Parameter Set metadata required before enabling VESA Display Stream | 589 | * Parameter Set metadata required before enabling VESA Display Stream |
| 470 | * Compression. This is based on the DP Secondary Data Packet structure and | 590 | * Compression. This is based on the DP Secondary Data Packet structure and |
| 471 | * comprises of SDP Header as defined in drm_dp_helper.h and PPS payload. | 591 | * comprises of SDP Header as defined &struct struct dp_sdp_header in drm_dp_helper.h |
| 592 | * and PPS payload defined in &struct drm_dsc_picture_parameter_set. | ||
| 472 | * | 593 | * |
| 473 | * @pps_header: Header for PPS as per DP SDP header format | 594 | * @pps_header: Header for PPS as per DP SDP header format of type |
| 595 | * &struct dp_sdp_header | ||
| 474 | * @pps_payload: PPS payload fields as per DSC specification Table 4-1 | 596 | * @pps_payload: PPS payload fields as per DSC specification Table 4-1 |
| 597 | * as represented in &struct drm_dsc_picture_parameter_set | ||
| 475 | */ | 598 | */ |
| 476 | struct drm_dsc_pps_infoframe { | 599 | struct drm_dsc_pps_infoframe { |
| 477 | struct dp_sdp_header pps_header; | 600 | struct dp_sdp_header pps_header; |
