linux-next: manual merge of the drm tree with the drm-fixes tree

Mark Brown <[email protected]> Sun, 26 Jul 2026 22:24:59 +0100
Newsgroups org.kernel.vger.linux-next,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hi all,

Today's linux-next merge of the drm tree got a conflict in:

  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c

between commits:

  8382cd234981a ("drm/amd/display: consolidate DCN vblank/flip handling onto vupdate_no_lock")
  82730dba0cf9d ("drm/amd/display: Fix flip-done timeouts on mode1 reset")

from the drm-fixes tree and commit:

  c87e6635d2db0 ("drm/amd/display: consolidate DCN vblank/flip handling onto vupdate_no_lock")

from the drm tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.


diff --combined drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
index 95d3da3c4199b,d63688b9d93dd..0000000000000
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
@@@ -34,6 -34,7 +34,7 @@@
  #include "amdgpu_dm_plane.h"
  #include "amdgpu_dm_trace.h"
  #include "amdgpu_dm_debugfs.h"
+ #include "amdgpu_dm_kunit_helpers.h"
  #include "modules/inc/mod_power.h"
  
  #define HPD_DETECTION_PERIOD_uS 2000000
@@@ -65,6 -66,7 +66,7 @@@ bool amdgpu_dm_crtc_modeset_required(st
  {
  	return crtc_state->active && drm_atomic_crtc_needs_modeset(crtc_state);
  }
+ EXPORT_IF_KUNIT(amdgpu_dm_crtc_modeset_required);
  
  bool amdgpu_dm_crtc_vrr_active_irq(struct amdgpu_crtc *acrtc)
  
@@@ -74,6 -76,7 +76,7 @@@
  	       acrtc->dm_irq_params.freesync_config.state ==
  		       VRR_STATE_ACTIVE_FIXED;
  }
+ EXPORT_IF_KUNIT(amdgpu_dm_crtc_vrr_active_irq);
  
  int amdgpu_dm_crtc_set_vupdate_irq(struct drm_crtc *crtc, bool enable)
  {
@@@ -93,12 -96,14 +96,14 @@@
  		      acrtc->crtc_id, enable ? "en" : "dis", rc);
  	return rc;
  }
+ EXPORT_IF_KUNIT(amdgpu_dm_crtc_set_vupdate_irq);
  
  bool amdgpu_dm_crtc_vrr_active(const struct dm_crtc_state *dm_state)
  {
  	return dm_state->freesync_config.state == VRR_STATE_ACTIVE_VARIABLE ||
  	       dm_state->freesync_config.state == VRR_STATE_ACTIVE_FIXED;
  }
+ EXPORT_IF_KUNIT(amdgpu_dm_crtc_vrr_active);
  
  /**
   * amdgpu_dm_crtc_set_static_screen_optimze() - Toggle static screen optimizations.
@@@ -156,6 -161,7 +161,7 @@@ bool amdgpu_dm_is_headless(struct amdgp
  	drm_connector_list_iter_end(&iter);
  	return is_headless;
  }
+ EXPORT_IF_KUNIT(amdgpu_dm_is_headless);
  
  static void amdgpu_dm_idle_worker(struct work_struct *work)
  {
@@@ -207,6 -213,7 +213,7 @@@ struct idle_workqueue *idle_create_work
  
  	return idle_work;
  }
+ EXPORT_IF_KUNIT(idle_create_workqueue);
  
  static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
  {
@@@ -280,19 -287,10 +287,21 @@@ static inline int amdgpu_dm_crtc_set_vb
  	 * is enabled. On DCE, vupdate is only needed in VRR mode.
  	 */
  	if (amdgpu_ip_version(adev, DCE_HWIP, 0) != 0) {
+ 		rc = amdgpu_dm_crtc_set_vupdate_irq(crtc, enable);
+ 	} else if (dc_supports_vrr(dm->dc->ctx->dce_version)) {
  		if (enable) {
 -			/* vblank irq on -> Only need vupdate irq in vrr mode */
 +			rc = amdgpu_irq_get(adev, &adev->vupdate_irq, irq_type);
 +			drm_dbg_vbl(crtc->dev, "Get vupdate_irq ret=%d\n", rc);
 +		} else {
 +			rc = amdgpu_irq_put(adev, &adev->vupdate_irq, irq_type);
 +			drm_dbg_vbl(crtc->dev, "Put vupdate_irq ret=%d\n", rc);
 +		}
 +	} else if (dc_supports_vrr(dm->dc->ctx->dce_version)) {
 +		if (enable) {
 +			/* vblank irq on -> Only need vupdate irq in vrr mode
 +			 * Not ref-counted since we need explicit enable/disable
 +			 * for DCE VRR handling
 +			 */
  			if (amdgpu_dm_crtc_vrr_active(acrtc_state))
  				rc = amdgpu_dm_crtc_set_vupdate_irq(crtc, true);
  		} else {
@@@ -460,13 -458,13 +469,13 @@@ static void amdgpu_dm_crtc_reset_state(
  {
  	struct dm_crtc_state *state;
  
+ 	state = kzalloc_obj(*state);
+ 	if (!state)
+ 		return;
+ 
  	if (crtc->state)
  		amdgpu_dm_crtc_destroy_state(crtc, crtc->state);
  
- 	state = kzalloc_obj(*state);
- 	if (WARN_ON(!state))
- 		return;
- 
  	__drm_atomic_helper_crtc_reset(crtc, &state->base);
  }
  
@@@ -618,12 -616,13 +627,13 @@@ static void amdgpu_dm_crtc_update_crtc_
  		amdgpu_dm_crtc_count_crtc_active_planes(new_crtc_state);
  }
  
- static bool amdgpu_dm_crtc_helper_mode_fixup(struct drm_crtc *crtc,
- 				      const struct drm_display_mode *mode,
- 				      struct drm_display_mode *adjusted_mode)
+ STATIC_IFN_KUNIT bool amdgpu_dm_crtc_helper_mode_fixup(struct drm_crtc *crtc,
+ 					       const struct drm_display_mode *mode,
+ 					       struct drm_display_mode *adjusted_mode)
  {
  	return true;
  }
+ EXPORT_IF_KUNIT(amdgpu_dm_crtc_helper_mode_fixup);
  
  static int amdgpu_dm_crtc_helper_atomic_check(struct drm_crtc *crtc,
  					      struct drm_atomic_commit *state)
signature.asc (application/pgp-signature, 488 B)
-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmpmeyoACgkQJNaLcl1U
h9CxVAf+IW1R3hIjyRKKqzN5K7PCNEP45SKi6PUUyjJ0VXM/dUJsOaABbaIxxTX2
zeMYPf5l1ge3mQqSioz47lJe+IIqdN3BnRxK52PZWIe3JRS6023x2zi21gtUz4jo
1f9u8qIcGBJP+MaTYlfrDG6GiOo+4iuZXuQF4DIBBHPZTfXWC+CZxyshVCH193x2
1m4+lhPqFPL83gWOplyaiGxEZ4ppo/FG/eSW6SJmuf+v4bUqJVA36fbirBWAue4q
5Q0UIafMNxc0X9qDkoacT05yLLJ0OqNHY1u2Aiv1/Bb0TAZ3KVVATHnpa7NuyMN5
EzhS+nnvzEfY3duZIT3aa69Ru3MG+g==
=GwK1
-----END PGP SIGNATURE-----