1. 26 Oct, 2022 1 commit
    • Imre Deak's avatar
      drm/i915/tgl+: Add locking around DKL PHY register accesses · 89cb0ba4
      Imre Deak authored
      Accessing the TypeC DKL PHY registers during modeset-commit,
      -verification, DP link-retraining and AUX power well toggling is racy
      due to these code paths being concurrent and the PHY register bank
      selection register (HIP_INDEX_REG) being shared between PHY instances
      (aka TC ports) and the bank selection being not atomic wrt. the actual
      PHY register access.
      
      Add the required locking around each PHY register bank selection->
      register access sequence.
      
      Kudos to Ville for noticing the race conditions.
      
      v2:
      - Add the DKL PHY register accessors to intel_dkl_phy.[ch]. (Jani)
      - Make the DKL_REG_TC_PORT macro independent of PHY internals.
      - Move initing the DKL PHY lock to a more logical place.
      
      v3:
      - Fix parameter reuse in the DKL_REG_TC_PORT definition.
      - Document the usage of phy_lock.
      
      v4:
      - Fix adding TC_PORT_1 offset in the DKL_REG_TC_PORT definition.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Jani Nikula <jani.nikula@intel.com>
      Cc: <stable@vger.kernel.org> # v5.5+
      Acked-by: default avatarJani Nikula <jani.nikula@intel.com>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20221025114457.2191004-1-imre.deak@intel.com
      89cb0ba4
  2. 25 Oct, 2022 5 commits
  3. 22 Oct, 2022 5 commits
  4. 21 Oct, 2022 2 commits
  5. 20 Oct, 2022 2 commits
  6. 19 Oct, 2022 1 commit
  7. 18 Oct, 2022 4 commits
  8. 17 Oct, 2022 1 commit
  9. 14 Oct, 2022 1 commit
    • Imre Deak's avatar
      drm/i915: Fix simulated GPU reset wrt. encoder HW readout · e8162192
      Imre Deak authored
      The GPU reset involves a display suspend/resume sequence, but this is
      done without suspending/resuming the encoders. The encoder HW readout
      code during resume however assumes that the encoders were
      suspended/resumed, at least on TypeC platforms where the TC PHYs must be
      left in a disconnected state during encoder-suspend, and the PHY's TypeC
      mode must be initialized already during encoder-resume.
      
      Since the above issue occurs only in case the display recovery during
      GPU reset is simulated in CI tests (on new platforms w/o the GPU reset
      clobbering the display), this patch fixes the issue by simply restoring
      the saved display state in this case w/o doing a display HW state
      readout / sanitization first. This also fixes the WARN below introduced
      by
      
      commit a82796a2 ("drm/i915: Fix TypeC mode initialization during system resume")
      
      <4> [319.983309] ------------[ cut here ]------------
      <4> [319.983313] i915 0000:00:02.0: drm_WARN_ON(dig_port->tc_link_refcount != 1)
      <4> [319.983341] WARNING: CPU: 10 PID: 268 at drivers/gpu/drm/i915/display/intel_tc.c:751
      intel_tc_port_sanitize_mode+0x239/0x290 [i915]
      <4> [319.983407] Modules linked in: fuse snd_hda_codec_hdmi i915 x86_pkg_temp_thermal mei_hdcp coretemp wmi_bmof
      r8153_ecm cdc_ether kvm_intel usbnet r8152 mii kvm prime_numbers snd_hda_intel ttm snd_intel_dspcfg irqbypass
      drm_buddy e1000e crct10dif_pclmul snd_hda_codec crc32_pclmul drm_display_helper ptp snd_hwdep ghash_clmulni_intel
      snd_hda_core drm_kms_helper pps_core mei_me syscopyarea video i2c_i801 snd_pcm sysfillrect i2c_smbus sysimgblt mei
      fb_sys_fops intel_lpss_pci wmi
      <4> [319.983483] CPU: 10 PID: 268 Comm: kworker/10:1H Not tainted 6.0.0-rc7-CI_DRM_12200-g394e575b57e9+ #1
      <4> [319.983486] Hardware name: Intel Corporation Alder Lake Client Platform/AlderLake-P LP5 RVP, BIOS
      ADLPFWI1.R00.2313.A00.2107301001 07/30/2021
      <4> [319.983488] Workqueue: events_highpri heartbeat [i915]
      <4> [319.983536] RIP: 0010:intel_tc_port_sanitize_mode+0x239/0x290 [i915]
      <4> [319.983600] Code: 85 d2 75 03 48 8b 17 48 89 14 24 e8 e1 dc 2d e1 48 8b 14 24 48 c7 c1 f8 db 5b a0 48 c7 c7 3e
      3c 5e a0 48 89 c6 e8 45 d7 66 e1 <0f> 0b e9 20 fe ff ff 0f 0b 49 c7 c0 8b 3c 5e a0 e9 9e fe ff ff 48
      <4> [319.983601] RSP: 0018:ffffc90001617a30 EFLAGS: 00010286
      <4> [319.983604] RAX: 0000000000000000 RBX: ffff88811f9d2000 RCX: 0000000000000001
      <4> [319.983606] RDX: 0000000080000001 RSI: ffffffff8231e8cd RDI: 00000000ffffffff
      <4> [319.983607] RBP: ffff888121e98000 R08: 0000000000000000 R09: c0000000ffffc134
      <4> [319.983608] R10: 00000000000d6078 R11: ffffc900016178c8 R12: ffff88811f9d3838
      <4> [319.983609] R13: ffff88811f9d397d R14: ffff888121e98000 R15: 0000000000000000
      <4> [319.983611] FS:  0000000000000000(0000) GS:ffff8882a7300000(0000) knlGS:0000000000000000
      <4> [319.983612] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      <4> [319.983613] CR2: 00007fe7397f1e18 CR3: 0000000006612003 CR4: 0000000000770ee0
      <4> [319.983615] PKRU: 55555554
      <4> [319.983616] Call Trace:
      <4> [319.983617]  <TASK>
      <4> [319.983621]  intel_ddi_sync_state+0x3f/0x90 [i915]
      <4> [319.983698]  intel_modeset_setup_hw_state+0x3a3/0x1440 [i915]
      <4> [319.983777]  ? intel_gt_reset_global+0xeb/0x160 [i915]
      <4> [319.983839]  ? __intel_display_resume+0x15/0xe0 [i915]
      <4> [319.983909]  __intel_display_resume+0x15/0xe0 [i915]
      <4> [319.983979]  intel_display_finish_reset+0x58/0x130 [i915]
      <4> [319.984048]  intel_gt_reset_global+0xf3/0x160 [i915]
      <4> [319.984107]  ? intel_reset_guc.cold.62+0x5d/0x5d [i915]
      <4> [319.984189]  ? 0xffffffff81000000
      <4> [319.984192]  ? queue_work_node+0x90/0x90
      <4> [319.984202]  intel_gt_handle_error+0x2c2/0x410 [i915]
      <4> [319.984267]  ? _raw_spin_unlock_irqrestore+0x54/0x70
      <4> [319.984271]  ? lockdep_hardirqs_on+0xbf/0x140
      <4> [319.984276]  ? intel_guc_find_hung_context+0x19e/0x1d0 [i915]
      <4> [319.984352]  reset_engine+0x99/0xd0 [i915]
      <4> [319.984399]  ? __drm_printfn_seq_file+0x20/0x20
      <4> [319.984406]  heartbeat+0x4cd/0x4f0 [i915]
      <4> [319.984454]  process_one_work+0x272/0x5b0
      <4> [319.984461]  worker_thread+0x37/0x370
      <4> [319.984465]  ? process_one_work+0x5b0/0x5b0
      <4> [319.984467]  kthread+0xed/0x120
      <4> [319.984470]  ? kthread_complete_and_exit+0x20/0x20
      <4> [319.984474]  ret_from_fork+0x1f/0x30
      <4> [319.984484]  </TASK>
      <4> [319.984485] irq event stamp: 36107
      <4> [319.984487] hardirqs last  enabled at (36113): [<ffffffff811391d6>] __up_console_sem+0x66/0x70
      <4> [319.984492] hardirqs last disabled at (36118): [<ffffffff811391bb>] __up_console_sem+0x4b/0x70
      <4> [319.984494] softirqs last  enabled at (34316): [<ffffffff81e00323>] __do_softirq+0x323/0x48e
      <4> [319.984497] softirqs last disabled at (34309): [<ffffffff810c16b8>] irq_exit_rcu+0xb8/0xe0
      <4> [319.984499] ---[ end trace 0000000000000000 ]---
      
      v2:
      - Instead of trying to fix the suspend/resume sequence, restore simply
        the state w/o the HW readout/sanitization step. (Ville)
      
      References: https://lore.kernel.org/intel-gfx/20221005175251.3586272-1-imre.deak@intel.com/T/#mcfac180a67f6048096d09fa04347aa088291fafb
      Closes: https://gitlab.freedesktop.org/drm/intel/issues/7021
      Cc: Mika Kahola <mika.kahola@intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20221007133307.3805735-1-imre.deak@intel.com
      e8162192
  10. 11 Oct, 2022 5 commits
  11. 10 Oct, 2022 2 commits
  12. 07 Oct, 2022 4 commits
  13. 06 Oct, 2022 1 commit
  14. 04 Oct, 2022 3 commits
  15. 03 Oct, 2022 3 commits