@@ -7860,6 +7860,8 @@ amdgpu_dm_connector_atomic_duplicate_state(struct drm_connector *connector)
78607860 __drm_atomic_helper_connector_duplicate_state (connector , & new_state -> base );
78617861
78627862 new_state -> freesync_capable = state -> freesync_capable ;
7863+ new_state -> freesync_on_desktop_capable =
7864+ state -> freesync_on_desktop_capable ;
78637865 new_state -> abm_level = state -> abm_level ;
78647866 new_state -> scaling = state -> scaling ;
78657867 new_state -> underscan_enable = state -> underscan_enable ;
@@ -9066,8 +9068,10 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
90669068 connector_type == DRM_MODE_CONNECTOR_eDP ) {
90679069 drm_connector_attach_hdr_output_metadata_property (& aconnector -> base );
90689070
9069- if (!aconnector -> mst_root )
9071+ if (!aconnector -> mst_root ) {
90709072 drm_connector_attach_vrr_capable_property (& aconnector -> base );
9073+ drm_connector_attach_passive_vrr_capable_property (& aconnector -> base );
9074+ }
90719075
90729076 if (adev -> dm .hdcp_workqueue )
90739077 drm_connector_attach_content_protection_property (& aconnector -> base , true);
@@ -11347,6 +11351,12 @@ static void get_freesync_config_for_crtc(
1134711351 config .vsif_supported = true;
1134811352 config .btr = true;
1134911353
11354+ if (new_con_state -> freesync_on_desktop_capable )
11355+ new_crtc_state -> stream -> freesync_on_desktop =
11356+ !new_crtc_state -> base .passive_vrr_disabled ;
11357+ else
11358+ new_crtc_state -> stream -> freesync_on_desktop = false;
11359+
1135011360 if (fs_vid_mode ) {
1135111361 config .state = VRR_STATE_ACTIVE_FIXED ;
1135211362 config .fixed_refresh_in_uhz = new_crtc_state -> freesync_config .fixed_refresh_in_uhz ;
@@ -11358,6 +11368,7 @@ static void get_freesync_config_for_crtc(
1135811368 }
1135911369 } else {
1136011370 config .state = VRR_STATE_UNSUPPORTED ;
11371+ new_crtc_state -> stream -> freesync_on_desktop = false;
1136111372 }
1136211373out :
1136311374 new_crtc_state -> freesync_config = config ;
@@ -13361,6 +13372,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
1336113372 struct drm_hdmi_vrr_cap hdmi_vrr = {0 };
1336213373 struct dpcd_caps dpcd_caps = {0 };
1336313374 const struct edid * edid ;
13375+ bool freesync_on_desktop = false;
1336413376 bool freesync_capable = false;
1336513377 bool pcon_allowed = false;
1336613378 bool is_pcon = false;
@@ -13440,6 +13452,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
1344013452 monitor_range_from_vsdb (& connector -> display_info , & vsdb_info );
1344113453
1344213454 freesync_capable = copy_range_to_amdgpu_connector (connector );
13455+ freesync_on_desktop = freesync_capable ;
1344313456
1344413457 /* DP -> HDMI PCON */
1344513458 } else if (pcon_allowed ) {
@@ -13454,11 +13467,14 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
1345413467 amdgpu_dm_connector -> pack_sdp_v1_3 = true;
1345513468 amdgpu_dm_connector -> as_type = ADAPTIVE_SYNC_TYPE_PCON_ALLOWED ;
1345613469 freesync_capable = copy_range_to_amdgpu_connector (connector );
13470+ freesync_on_desktop = freesync_capable ;
1345713471 }
1345813472
1345913473update :
13460- if (dm_con_state )
13474+ if (dm_con_state ) {
1346113475 dm_con_state -> freesync_capable = freesync_capable ;
13476+ dm_con_state -> freesync_on_desktop_capable = freesync_on_desktop ;
13477+ }
1346213478
1346313479 if (connector -> state && amdgpu_dm_connector -> dc_link && !freesync_capable &&
1346413480 amdgpu_dm_connector -> dc_link -> replay_settings .config .replay_supported ) {
@@ -13467,8 +13483,10 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
1346713483 }
1346813484
1346913485 if (connector -> vrr_capable_property )
13470- drm_connector_set_vrr_capable_property (connector ,
13471- freesync_capable );
13486+ drm_connector_set_vrr_capable_property (connector , freesync_capable );
13487+
13488+ if (connector -> passive_vrr_capable_property )
13489+ drm_connector_set_passive_vrr_capable_property (connector , freesync_on_desktop );
1347213490}
1347313491
1347413492void amdgpu_dm_trigger_timing_sync (struct drm_device * dev )
0 commit comments