Message ID | 20240301084503.2971826-3-mitulkumar.ajitkumar.golani@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Enable Adaptive Sync SDP Support for DP | expand |
On 3/1/2024 2:14 PM, Mitul Golani wrote: > Add structure representing Adaptive Sync Secondary Data Packet (AS SDP). > Also, add Adaptive Sync SDP logging in drm_dp_helper.c to facilitate > debugging. > > --v2: > - Update logging. [Jani, Ankit] > - Use 'as_sdp' instead of 'async' [Ankit] > - Correct define placeholders to where they are actually used. [Jani] > - Update members in 'as_sdp' structure to make it uniform. [Jani] > > --v3: > - Added changes to dri-devel mailing list. No code changes. > > --v4: > - Instead of directly using operation mode, use an enum to accommodate > all operation modes (Ankit). > > --v5: > Nit-pick changes to commit message. > > --v6: > - Add correct place holder and name change for AS_SDP_OP_MODE. > - Separate i915 changes from drm changes. > - Remove extra lines. > > Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com> > --- > drivers/gpu/drm/display/drm_dp_helper.c | 12 ++++++++++ > include/drm/display/drm_dp.h | 10 +++++++++ > include/drm/display/drm_dp_helper.h | 29 +++++++++++++++++++++++++ > 3 files changed, 51 insertions(+) > > diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/display/drm_dp_helper.c > index f2fabb673aa4..f880bc7b2153 100644 > --- a/drivers/gpu/drm/display/drm_dp_helper.c > +++ b/drivers/gpu/drm/display/drm_dp_helper.c > @@ -2948,6 +2948,18 @@ void drm_dp_vsc_sdp_log(struct drm_printer *p, const struct drm_dp_vsc_sdp *vsc) > } > EXPORT_SYMBOL(drm_dp_vsc_sdp_log); > > +void drm_dp_as_sdp_log(struct drm_printer *p, const struct drm_dp_as_sdp *as_sdp) > +{ > + drm_printf(p, "DP SDP: AS_SDP, revision %u, length %u\n", > + as_sdp->revision, as_sdp->length); > + drm_printf(p, " vtotal: %d\n", as_sdp->vtotal); > + drm_printf(p, " target_rr: %d\n", as_sdp->target_rr); > + drm_printf(p, " duration_incr_ms: %d\n", as_sdp->duration_incr_ms); > + drm_printf(p, " duration_decr_ms: %d\n", as_sdp->duration_decr_ms); > + drm_printf(p, " operation_mode: %d\n", as_sdp->mode); > +} > +EXPORT_SYMBOL(drm_dp_as_sdp_log); > + > /** > * drm_dp_as_sdp_supported() - check if adaptive sync sdp is supported > * @aux: DisplayPort AUX channel > diff --git a/include/drm/display/drm_dp.h b/include/drm/display/drm_dp.h > index 4891bd916d26..e39a22a714e2 100644 > --- a/include/drm/display/drm_dp.h > +++ b/include/drm/display/drm_dp.h > @@ -1150,6 +1150,7 @@ > > #define DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1 0x2214 /* 2.0 E11 */ > # define DP_ADAPTIVE_SYNC_SDP_SUPPORTED (1 << 0) > +# define DP_ADAPTIVE_SYNC_SDP_OPERATION_MODE GENMASK(1, 0) I am wondering if GENMASK can be used here, without including linux/bits.h I might be wrong though. Other than patch looks good to me. Regards, Ankit > # define DP_AS_SDP_FIRST_HALF_LINE_OR_3840_PIXEL_CYCLE_WINDOW_NOT_SUPPORTED (1 << 1) > # define DP_VSC_EXT_SDP_FRAMEWORK_VERSION_1_SUPPORTED (1 << 4) > > @@ -1639,10 +1640,12 @@ enum drm_dp_phy { > #define DP_SDP_AUDIO_COPYMANAGEMENT 0x05 /* DP 1.2 */ > #define DP_SDP_ISRC 0x06 /* DP 1.2 */ > #define DP_SDP_VSC 0x07 /* DP 1.2 */ > +#define DP_SDP_ADAPTIVE_SYNC 0x22 /* DP 1.4 */ > #define DP_SDP_CAMERA_GENERIC(i) (0x08 + (i)) /* 0-7, DP 1.3 */ > #define DP_SDP_PPS 0x10 /* DP 1.4 */ > #define DP_SDP_VSC_EXT_VESA 0x20 /* DP 1.4 */ > #define DP_SDP_VSC_EXT_CEA 0x21 /* DP 1.4 */ > + > /* 0x80+ CEA-861 infoframe types */ > > #define DP_SDP_AUDIO_INFOFRAME_HB2 0x1b > @@ -1798,4 +1801,11 @@ enum dp_content_type { > DP_CONTENT_TYPE_GAME = 0x04, > }; > > +enum operation_mode { > + DP_AS_SDP_AVT_DYNAMIC_VTOTAL = 0x00, > + DP_AS_SDP_AVT_FIXED_VTOTAL = 0x01, > + DP_AS_SDP_FAVT_TRR_NOT_REACHED = 0x02, > + DP_AS_SDP_FAVT_TRR_REACHED = 0x03 > +}; > + > #endif /* _DRM_DP_H_ */ > diff --git a/include/drm/display/drm_dp_helper.h b/include/drm/display/drm_dp_helper.h > index 7df19acdc790..10147ae96326 100644 > --- a/include/drm/display/drm_dp_helper.h > +++ b/include/drm/display/drm_dp_helper.h > @@ -98,6 +98,35 @@ struct drm_dp_vsc_sdp { > enum dp_content_type content_type; > }; > > +/** > + * struct drm_dp_as_sdp - drm DP Adaptive Sync SDP > + * > + * This structure represents a DP AS SDP of drm > + * It is based on DP 2.1 spec [Table 2-126: Adaptive-Sync SDP Header Bytes] and > + * [Table 2-127: Adaptive-Sync SDP Payload for DB0 through DB8] > + * > + * @sdp_type: Secondary-data packet type > + * @revision: Revision Number > + * @length: Number of valid data bytes > + * @vtotal: Minimum Vertical Vtotal > + * @target_rr: Target Refresh > + * @duration_incr_ms: Successive frame duration increase > + * @duration_decr_ms: Successive frame duration decrease > + * @operation_mode: Adaptive Sync Operation Mode > + */ > +struct drm_dp_as_sdp { > + unsigned char sdp_type; > + unsigned char revision; > + unsigned char length; > + int vtotal; > + int target_rr; > + int duration_incr_ms; > + int duration_decr_ms; > + enum operation_mode mode; > +}; > + > +void drm_dp_as_sdp_log(struct drm_printer *p, > + const struct drm_dp_as_sdp *as_sdp); > void drm_dp_vsc_sdp_log(struct drm_printer *p, const struct drm_dp_vsc_sdp *vsc); > > bool drm_dp_vsc_sdp_supported(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE]);
diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/display/drm_dp_helper.c index f2fabb673aa4..f880bc7b2153 100644 --- a/drivers/gpu/drm/display/drm_dp_helper.c +++ b/drivers/gpu/drm/display/drm_dp_helper.c @@ -2948,6 +2948,18 @@ void drm_dp_vsc_sdp_log(struct drm_printer *p, const struct drm_dp_vsc_sdp *vsc) } EXPORT_SYMBOL(drm_dp_vsc_sdp_log); +void drm_dp_as_sdp_log(struct drm_printer *p, const struct drm_dp_as_sdp *as_sdp) +{ + drm_printf(p, "DP SDP: AS_SDP, revision %u, length %u\n", + as_sdp->revision, as_sdp->length); + drm_printf(p, " vtotal: %d\n", as_sdp->vtotal); + drm_printf(p, " target_rr: %d\n", as_sdp->target_rr); + drm_printf(p, " duration_incr_ms: %d\n", as_sdp->duration_incr_ms); + drm_printf(p, " duration_decr_ms: %d\n", as_sdp->duration_decr_ms); + drm_printf(p, " operation_mode: %d\n", as_sdp->mode); +} +EXPORT_SYMBOL(drm_dp_as_sdp_log); + /** * drm_dp_as_sdp_supported() - check if adaptive sync sdp is supported * @aux: DisplayPort AUX channel diff --git a/include/drm/display/drm_dp.h b/include/drm/display/drm_dp.h index 4891bd916d26..e39a22a714e2 100644 --- a/include/drm/display/drm_dp.h +++ b/include/drm/display/drm_dp.h @@ -1150,6 +1150,7 @@ #define DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1 0x2214 /* 2.0 E11 */ # define DP_ADAPTIVE_SYNC_SDP_SUPPORTED (1 << 0) +# define DP_ADAPTIVE_SYNC_SDP_OPERATION_MODE GENMASK(1, 0) # define DP_AS_SDP_FIRST_HALF_LINE_OR_3840_PIXEL_CYCLE_WINDOW_NOT_SUPPORTED (1 << 1) # define DP_VSC_EXT_SDP_FRAMEWORK_VERSION_1_SUPPORTED (1 << 4) @@ -1639,10 +1640,12 @@ enum drm_dp_phy { #define DP_SDP_AUDIO_COPYMANAGEMENT 0x05 /* DP 1.2 */ #define DP_SDP_ISRC 0x06 /* DP 1.2 */ #define DP_SDP_VSC 0x07 /* DP 1.2 */ +#define DP_SDP_ADAPTIVE_SYNC 0x22 /* DP 1.4 */ #define DP_SDP_CAMERA_GENERIC(i) (0x08 + (i)) /* 0-7, DP 1.3 */ #define DP_SDP_PPS 0x10 /* DP 1.4 */ #define DP_SDP_VSC_EXT_VESA 0x20 /* DP 1.4 */ #define DP_SDP_VSC_EXT_CEA 0x21 /* DP 1.4 */ + /* 0x80+ CEA-861 infoframe types */ #define DP_SDP_AUDIO_INFOFRAME_HB2 0x1b @@ -1798,4 +1801,11 @@ enum dp_content_type { DP_CONTENT_TYPE_GAME = 0x04, }; +enum operation_mode { + DP_AS_SDP_AVT_DYNAMIC_VTOTAL = 0x00, + DP_AS_SDP_AVT_FIXED_VTOTAL = 0x01, + DP_AS_SDP_FAVT_TRR_NOT_REACHED = 0x02, + DP_AS_SDP_FAVT_TRR_REACHED = 0x03 +}; + #endif /* _DRM_DP_H_ */ diff --git a/include/drm/display/drm_dp_helper.h b/include/drm/display/drm_dp_helper.h index 7df19acdc790..10147ae96326 100644 --- a/include/drm/display/drm_dp_helper.h +++ b/include/drm/display/drm_dp_helper.h @@ -98,6 +98,35 @@ struct drm_dp_vsc_sdp { enum dp_content_type content_type; }; +/** + * struct drm_dp_as_sdp - drm DP Adaptive Sync SDP + * + * This structure represents a DP AS SDP of drm + * It is based on DP 2.1 spec [Table 2-126: Adaptive-Sync SDP Header Bytes] and + * [Table 2-127: Adaptive-Sync SDP Payload for DB0 through DB8] + * + * @sdp_type: Secondary-data packet type + * @revision: Revision Number + * @length: Number of valid data bytes + * @vtotal: Minimum Vertical Vtotal + * @target_rr: Target Refresh + * @duration_incr_ms: Successive frame duration increase + * @duration_decr_ms: Successive frame duration decrease + * @operation_mode: Adaptive Sync Operation Mode + */ +struct drm_dp_as_sdp { + unsigned char sdp_type; + unsigned char revision; + unsigned char length; + int vtotal; + int target_rr; + int duration_incr_ms; + int duration_decr_ms; + enum operation_mode mode; +}; + +void drm_dp_as_sdp_log(struct drm_printer *p, + const struct drm_dp_as_sdp *as_sdp); void drm_dp_vsc_sdp_log(struct drm_printer *p, const struct drm_dp_vsc_sdp *vsc); bool drm_dp_vsc_sdp_supported(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE]);
Add structure representing Adaptive Sync Secondary Data Packet (AS SDP). Also, add Adaptive Sync SDP logging in drm_dp_helper.c to facilitate debugging. --v2: - Update logging. [Jani, Ankit] - Use 'as_sdp' instead of 'async' [Ankit] - Correct define placeholders to where they are actually used. [Jani] - Update members in 'as_sdp' structure to make it uniform. [Jani] --v3: - Added changes to dri-devel mailing list. No code changes. --v4: - Instead of directly using operation mode, use an enum to accommodate all operation modes (Ankit). --v5: Nit-pick changes to commit message. --v6: - Add correct place holder and name change for AS_SDP_OP_MODE. - Separate i915 changes from drm changes. - Remove extra lines. Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com> --- drivers/gpu/drm/display/drm_dp_helper.c | 12 ++++++++++ include/drm/display/drm_dp.h | 10 +++++++++ include/drm/display/drm_dp_helper.h | 29 +++++++++++++++++++++++++ 3 files changed, 51 insertions(+)