Re: [PATCH v2 2/6] drm/ci: generate testlist from build

2024-05-20 Thread Vignesh Raman

Hi Dmitry,

On 20/05/24 16:30, Dmitry Baryshkov wrote:

On Fri, May 17, 2024 at 02:54:58PM +0530, Vignesh Raman wrote:

Stop vendoring the testlist into the kernel. Instead, use the
testlist from the IGT build to ensure we do not miss renamed
or newly added tests.

Signed-off-by: Vignesh Raman 
---

v2:
   - Fix testlist generation for arm and arm64 builds.

---
  drivers/gpu/drm/ci/build-igt.sh  |   34 +
  drivers/gpu/drm/ci/igt_runner.sh |9 +-
  drivers/gpu/drm/ci/testlist.txt  | 2761 --
  3 files changed, 39 insertions(+), 2765 deletions(-)
  delete mode 100644 drivers/gpu/drm/ci/testlist.txt

diff --git a/drivers/gpu/drm/ci/build-igt.sh b/drivers/gpu/drm/ci/build-igt.sh
index 7859554756c4..e62244728613 100644
--- a/drivers/gpu/drm/ci/build-igt.sh
+++ b/drivers/gpu/drm/ci/build-igt.sh


[...]


@@ -26,6 +50,16 @@ meson build $MESON_OPTIONS $EXTRA_MESON_ARGS
  ninja -C build -j${FDO_CI_CONCURRENT:-4} || ninja -C build -j 1
  ninja -C build install
  
+if [[ "$KERNEL_ARCH" = "arm64" ]]; then

+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/igt/lib/aarch64-linux-gnu
+elif [[ "$KERNEL_ARCH" = "arm" ]]; then
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/igt/lib
+else
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/igt/lib64


Could you please clarify this part? The arm64 vs arm don't look logical
from my point of view.

The rest LGTM.


The libs are installed in the below path for different arch.

> find . -name libigt.so
./x86/igt/lib64/libigt.so
./arm64/igt/lib/aarch64-linux-gnu/libigt.so
./arm/igt/lib/libigt.so
~/igt-build

So for arm64 it is 'lib/aarch64-linux-gnu' and arm it is 'lib'.

s3.freedesktop.org/artifacts/vigneshraman/linux/1179691/arm64/igt.tar.gz
s3.freedesktop.org/artifacts/vigneshraman/linux/1179691/arm/igt.tar.gz
s3.freedesktop.org/artifacts/vigneshraman/linux/1179691/x86_64/igt.tar.gz

Regards,
Vignesh




+fi
+
+generate_testlist
+
  mkdir -p artifacts/
  tar -cf artifacts/igt.tar /igt
  


✗ Fi.CI.IGT: failure for drm/xe: Cleanup xe_mmio.h

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/xe: Cleanup xe_mmio.h
URL   : https://patchwork.freedesktop.org/series/133825/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14785_full -> Patchwork_133825v1_full


Summary
---

  **FAILURE**

  Serious unknown changes coming with Patchwork_133825v1_full absolutely need 
to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_133825v1_full, please notify your bug team 
(i915-ci-in...@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/index.html

Participating hosts (9 -> 9)
--

  No changes in participating hosts

Possible new issues
---

  Here are the unknown changes that may have been introduced in 
Patchwork_133825v1_full:

### IGT changes ###

 Possible regressions 

  * igt@kms_vrr@seamless-rr-switch-virtual:
- shard-dg2:  NOTRUN -> [SKIP][1]
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg2-7/igt@kms_...@seamless-rr-switch-virtual.html
- shard-dg1:  NOTRUN -> [SKIP][2]
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg1-17/igt@kms_...@seamless-rr-switch-virtual.html

  
New tests
-

  New tests have been introduced between CI_DRM_14785_full and 
Patchwork_133825v1_full:

### New IGT tests (2) ###

  * igt@perf@blocking@1-vcs1:
- Statuses : 1 pass(s)
- Exec time: [10.02] s

  * igt@perf@oa-exponents@1-vcs1:
- Statuses : 1 pass(s)
- Exec time: [1.83] s

  

Known issues


  Here are the changes found in Patchwork_133825v1_full that come from known 
issues:

### IGT changes ###

 Issues hit 

  * igt@device_reset@unbind-reset-rebind:
- shard-dg1:  NOTRUN -> [INCOMPLETE][3] ([i915#9408])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg1-18/igt@device_re...@unbind-reset-rebind.html

  * igt@drm_fdinfo@virtual-busy-idle-all:
- shard-dg1:  NOTRUN -> [SKIP][4] ([i915#8414]) +1 other test skip
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg1-18/igt@drm_fdi...@virtual-busy-idle-all.html

  * igt@drm_fdinfo@virtual-idle:
- shard-rkl:  NOTRUN -> [FAIL][5] ([i915#7742])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-rkl-3/igt@drm_fdi...@virtual-idle.html

  * igt@gem_ccs@block-multicopy-compressed:
- shard-rkl:  NOTRUN -> [SKIP][6] ([i915#9323])
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-rkl-4/igt@gem_...@block-multicopy-compressed.html

  * igt@gem_ccs@ctrl-surf-copy:
- shard-rkl:  NOTRUN -> [SKIP][7] ([i915#3555] / [i915#9323])
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-rkl-4/igt@gem_...@ctrl-surf-copy.html

  * igt@gem_ctx_exec@basic-nohangcheck:
- shard-rkl:  [PASS][8] -> [FAIL][9] ([i915#6268])
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/shard-rkl-3/igt@gem_ctx_e...@basic-nohangcheck.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-rkl-5/igt@gem_ctx_e...@basic-nohangcheck.html

  * igt@gem_ctx_persistence@heartbeat-stop:
- shard-dg1:  NOTRUN -> [SKIP][10] ([i915#8555])
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg1-17/igt@gem_ctx_persiste...@heartbeat-stop.html
- shard-dg2:  NOTRUN -> [SKIP][11] ([i915#8555])
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg2-7/igt@gem_ctx_persiste...@heartbeat-stop.html

  * igt@gem_ctx_persistence@legacy-engines-mixed-process:
- shard-snb:  NOTRUN -> [SKIP][12] ([i915#1099])
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-snb2/igt@gem_ctx_persiste...@legacy-engines-mixed-process.html

  * igt@gem_exec_balancer@bonded-sync:
- shard-dg1:  NOTRUN -> [SKIP][13] ([i915#4771])
   [13]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg1-18/igt@gem_exec_balan...@bonded-sync.html

  * igt@gem_exec_balancer@parallel-contexts:
- shard-rkl:  NOTRUN -> [SKIP][14] ([i915#4525])
   [14]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-rkl-4/igt@gem_exec_balan...@parallel-contexts.html

  * igt@gem_exec_capture@capture-recoverable:
- shard-rkl:  NOTRUN -> [SKIP][15] ([i915#6344])
   [15]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-rkl-4/igt@gem_exec_capt...@capture-recoverable.html

  * igt@gem_exec_capture@many-4k-incremental:
- shard-dg1:  NOTRUN -> [FAIL][16] ([i915#9606])
   [16]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/shard-dg1-17/igt@gem_exec_capt...@many-4k-incremental.

Re: [PATCH 4/5] drm/i915: Compute config and mode valid changes for ultrajoiner

2024-05-20 Thread kernel test robot
Hi Stanislav,

kernel test robot noticed the following build warnings:

[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on drm-tip/drm-tip linus/master next-20240520]
[cannot apply to drm-intel/for-linux-next-fixes v6.9]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:
https://github.com/intel-lab-lkp/linux/commits/Stanislav-Lisovskiy/drm-i915-Rename-all-bigjoiner-to-joiner/20240520-194208
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
patch link:
https://lore.kernel.org/r/20240520073839.23881-5-stanislav.lisovskiy%40intel.com
patch subject: [PATCH 4/5] drm/i915: Compute config and mode valid changes for 
ultrajoiner
config: x86_64-randconfig-103-20240521 
(https://download.01.org/0day-ci/archive/20240521/202405211228.a5iqwc2h-...@intel.com/config)
compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot 
| Closes: 
https://lore.kernel.org/oe-kbuild-all/202405211228.a5iqwc2h-...@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/i915/display/intel_vdsc.c:813:46-47: Unneeded semicolon

vim +813 drivers/gpu/drm/i915/display/intel_vdsc.c

   783  
   784  void intel_dsc_enable(const struct intel_crtc_state *crtc_state)
   785  {
   786  struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
   787  struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
   788  u32 dss_ctl1_val = 0;
   789  u32 dss_ctl2_val = 0;
   790  int vdsc_instances_per_pipe = 
intel_dsc_get_vdsc_per_pipe(crtc_state);
   791  
   792  if (!crtc_state->dsc.compression_enable)
   793  return;
   794  
   795  intel_dsc_pps_configure(crtc_state);
   796  
   797  dss_ctl2_val |= LEFT_BRANCH_VDSC_ENABLE;
   798  if (vdsc_instances_per_pipe > 1) {
   799  dss_ctl2_val |= RIGHT_BRANCH_VDSC_ENABLE;
   800  dss_ctl1_val |= JOINER_ENABLE;
   801  }
   802  
   803  if (crtc_state->joiner_pipes) {
   804  /*
   805   * This bit doesn't seem to follow master/slave logic or
   806   * any other logic, so lets just add helper function to
   807   * at least hide this hassle..
   808   */
   809  if (intel_crtc_ultrajoiner_enable_needed(crtc_state))
   810  dss_ctl1_val |= ULTRA_JOINER_ENABLE;
   811  
   812  if (intel_crtc_is_joiner_primary_master(crtc_state))
 > 813  dss_ctl1_val |= MASTER_ULTRA_JOINER_ENABLE;;
   814  
   815  dss_ctl1_val |= BIG_JOINER_ENABLE;
   816  
   817  if (intel_crtc_is_bigjoiner_master(crtc_state))
   818  dss_ctl1_val |= MASTER_BIG_JOINER_ENABLE;
   819  }
   820  intel_de_write(dev_priv, dss_ctl1_reg(crtc, 
crtc_state->cpu_transcoder), dss_ctl1_val);
   821  intel_de_write(dev_priv, dss_ctl2_reg(crtc, 
crtc_state->cpu_transcoder), dss_ctl2_val);
   822  }
   823  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


✓ Fi.CI.BAT: success for drm/i915/dp_mst: Enable link training fallback (rev3)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915/dp_mst: Enable link training fallback (rev3)
URL   : https://patchwork.freedesktop.org/series/133624/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14785 -> Patchwork_133624v3


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/index.html

Participating hosts (41 -> 39)
--

  Missing(2): bat-dg2-11 bat-jsl-3 

Known issues


  Here are the changes found in Patchwork_133624v3 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@gem_lmem_swapping@basic@lmem0:
- bat-atsm-1: [PASS][1] -> [FAIL][2] ([i915#10378])
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-atsm-1/igt@gem_lmem_swapping@ba...@lmem0.html
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/bat-atsm-1/igt@gem_lmem_swapping@ba...@lmem0.html
- bat-dg2-9:  [PASS][3] -> [FAIL][4] ([i915#10378])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-9/igt@gem_lmem_swapping@ba...@lmem0.html
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/bat-dg2-9/igt@gem_lmem_swapping@ba...@lmem0.html

  * igt@i915_module_load@load:
- bat-arls-3: [PASS][5] -> [ABORT][6] ([i915#11041])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-3/igt@i915_module_l...@load.html
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/bat-arls-3/igt@i915_module_l...@load.html

  * igt@kms_frontbuffer_tracking@basic:
- bat-arls-2: [PASS][7] -> [DMESG-WARN][8] ([i915#7507])
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-2/igt@kms_frontbuffer_track...@basic.html
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/bat-arls-2/igt@kms_frontbuffer_track...@basic.html

  
 Possible fixes 

  * igt@i915_module_load@load:
- bat-dg2-8:  [DMESG-WARN][9] ([i915#10014]) -> [PASS][10]
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@i915_module_l...@load.html
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/bat-dg2-8/igt@i915_module_l...@load.html

  * igt@i915_selftest@live@gt_timelines:
- bat-arls-2: [INCOMPLETE][11] -> [PASS][12]
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-2/igt@i915_selftest@live@gt_timelines.html
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/bat-arls-2/igt@i915_selftest@live@gt_timelines.html

  
  {name}: This element is suppressed. This means it is ignored when computing
  the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10014
  [i915#10378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10378
  [i915#11041]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11041
  [i915#1982]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1982
  [i915#7507]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7507


Build changes
-

  * Linux: CI_DRM_14785 -> Patchwork_133624v3

  CI-20190529: 20190529
  CI_DRM_14785: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7863: fa1dc232d5d840532521df8a6fcf1fe82c514304 @ 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_133624v3: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133624v3/index.html


✗ Fi.CI.SPARSE: warning for drm/i915/dp_mst: Enable link training fallback (rev3)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915/dp_mst: Enable link training fallback (rev3)
URL   : https://patchwork.freedesktop.org/series/133624/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced sy

✗ Fi.CI.CHECKPATCH: warning for drm/i915/dp_mst: Enable link training fallback (rev3)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915/dp_mst: Enable link training fallback (rev3)
URL   : https://patchwork.freedesktop.org/series/133624/
State : warning

== Summary ==

Error: dim checkpatch failed
3901134df2a3 drm/i915/dp_mst: Align TUs to avoid splitting symbols across MTPs
28d65f0e37e3 drm/i915/dp: Move link train params to a substruct in intel_dp
ff4e8e37d80a drm/i915/dp: Move link train fallback to intel_dp_link_training.c
-:196: WARNING:LONG_LINE: line length of 104 exceeds 100 columns
#196: FILE: drivers/gpu/drm/i915/display/intel_dp_link_training.c:1140:
+ 
intel_dp_common_rate(intel_dp, index - 1),

total: 0 errors, 1 warnings, 0 checks, 195 lines checked
9b5277bae76d drm/i915/dp: Sanitize intel_dp_get_link_train_fallback_values()
2a76291f9545 drm/i915: Factor out function to modeset commit a set of pipes
7bf5284c899d drm/i915/dp: Use a commit modeset for link retraining MST links
82047795cc89 drm/i915/dp: Recheck link state after modeset
2628e40a6de7 drm/i915/dp: Reduce link params only after retrying with unchanged 
params
44933405fc08 drm/i915/dp: Pass atomic state to link training function
eefedc87bcc1 drm/i915/dp: Send a link training modeset-retry uevent to all MST 
connectors
62a79366ba9d drm/i915/dp: Use check link state work in the hotplug handler
b709e61f0cc5 drm/i915/dp: Use check link state work in the detect handler
b8bb9bccea89 drm/i915/dp: Use check link state work in the HPD IRQ handler
872973e3096d drm/i915/dp: Disable link retraining after the last fallback step
1f4c395aa4ea drm/i915/dp_mst: Reset intel_dp->link_trained during disabling
c9e59063ea28 drm/i915/dp_mst: Enable link training fallback for MST
6572f48d2ae8 drm/i915/dp: Add debugfs entries to set a target link rate/lane 
count
-:74: WARNING:LONG_LINE: line length of 103 exceeds 100 columns
#74: FILE: drivers/gpu/drm/i915/display/intel_dp.c:376:
+   return clamp(intel_dp->link.requested_lane_count, 1, 
intel_dp_max_common_lane_count(intel_dp));

total: 0 errors, 1 warnings, 0 checks, 419 lines checked
b4d9d57db44b drm/i915/dp: Add debugfs entries to get the max link rate/lane 
count
66d34360dd51 drm/i915/dp: Add debugfs entry to force link training failure
52bf93fe9d04 drm/i915/dp: Add debugfs entry to force link retrain
d08235d7f4ac drm/i915/dp: Add debugfs entry for link training info




✓ Fi.CI.BAT: success for drm/xe: Cleanup xe_mmio.h

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/xe: Cleanup xe_mmio.h
URL   : https://patchwork.freedesktop.org/series/133825/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14785 -> Patchwork_133825v1


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/index.html

Participating hosts (41 -> 39)
--

  Missing(2): bat-jsl-3 bat-arls-3 

Known issues


  Here are the changes found in Patchwork_133825v1 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@gem_lmem_swapping@basic@lmem0:
- bat-dg2-11: [PASS][1] -> [FAIL][2] ([i915#10378])
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-11/igt@gem_lmem_swapping@ba...@lmem0.html
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/bat-dg2-11/igt@gem_lmem_swapping@ba...@lmem0.html

  
 Possible fixes 

  * igt@i915_module_load@load:
- bat-dg2-8:  [DMESG-WARN][3] ([i915#10014]) -> [PASS][4]
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@i915_module_l...@load.html
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/bat-dg2-8/igt@i915_module_l...@load.html

  * igt@i915_selftest@live@gt_timelines:
- bat-arls-2: [INCOMPLETE][5] -> [PASS][6]
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-2/igt@i915_selftest@live@gt_timelines.html
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/bat-arls-2/igt@i915_selftest@live@gt_timelines.html

  
  [i915#10014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10014
  [i915#10378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10378


Build changes
-

  * Linux: CI_DRM_14785 -> Patchwork_133825v1

  CI-20190529: 20190529
  CI_DRM_14785: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7863: fa1dc232d5d840532521df8a6fcf1fe82c514304 @ 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_133825v1: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133825v1/index.html


✗ Fi.CI.SPARSE: warning for drm/xe: Cleanup xe_mmio.h

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/xe: Cleanup xe_mmio.h
URL   : https://patchwork.freedesktop.org/series/133825/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
-
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced 
symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced 
symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced 
symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced 
symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced 
symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced 
symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced 
symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced 
symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced 
symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced 
symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced 
symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced 
symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced 
symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced 
symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced 
symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: u

✗ Fi.CI.CHECKPATCH: warning for drm/xe: Cleanup xe_mmio.h

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/xe: Cleanup xe_mmio.h
URL   : https://patchwork.freedesktop.org/series/133825/
State : warning

== Summary ==

Error: dim checkpatch failed
ff7fd69a1372 drm/i915/display: Add missing include to intel_vga.c
ce3839510f9f drm/xe: Don't rely on indirect includes from xe_mmio.h
0dd2822656ee drm/xe: Cleanup xe_mmio.h
-:9: ERROR:GIT_COMMIT_ID: Please use git commit description style 'commit <12+ 
chars of sha1> ("")' - ie: 'commit 54c659660d63 ("drm/xe: Make 
xe_mmio_read|write() functions non-inline")'
#9: 
We don't need  include since commit

total: 1 errors, 0 warnings, 0 checks, 39 lines checked




[PATCH v2 16/21] drm/i915/dp_mst: Enable link training fallback for MST

2024-05-20 Thread Imre Deak
Reduce the link parameters after a link training failure for MST
outputs, similarly to how this is done for SST.

For now allow the reduction only by staying in the 8b/10b vs. 128b/132b
mode. Enabling the mode switch is left for a follow-up patchset, after
taking measures ensuring that the mode switch happens properly. In
particular a rediscovery of the whole MST topology may be required for
such a switch, see the References below.

Link: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10970
Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp.c |  6 +-
 .../gpu/drm/i915/display/intel_dp_link_training.c   | 13 -
 2 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 34d64fe3302ef..c8d940a2ef7af 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5844,11 +5844,7 @@ intel_dp_detect(struct drm_connector *connector,
 
intel_dp_mst_configure(intel_dp);
 
-   /*
-* TODO: Reset link params when switching to MST mode, until MST
-* supports link training fallback params.
-*/
-   if (intel_dp->reset_link_params || intel_dp->is_mst) {
+   if (intel_dp->reset_link_params) {
intel_dp_reset_link_params(intel_dp);
intel_dp->reset_link_params = false;
}
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index 375f59afd4dec..9a59a28ca36d2 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1124,6 +1124,10 @@ static int reduce_link_rate(struct intel_dp *intel_dp, 
int current_rate)
 
new_rate = intel_dp_common_rate(intel_dp, rate_index - 1);
 
+   /* TODO: Make switching from UHBR to non-UHBR rates work. */
+   if (drm_dp_is_uhbr_rate(current_rate) != drm_dp_is_uhbr_rate(new_rate))
+   return -1;
+
return new_rate;
 }
 
@@ -1142,15 +1146,6 @@ static int 
intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
int new_link_rate;
int new_lane_count;
 
-   /*
-* TODO: Enable fallback on MST links once MST link compute can handle
-* the fallback params.
-*/
-   if (intel_dp->is_mst) {
-   drm_err(&i915->drm, "Link Training Unsuccessful\n");
-   return -1;
-   }
-
if (intel_dp_is_edp(intel_dp) && !intel_dp->use_max_params) {
drm_dbg_kms(&i915->drm,
"Retrying Link training for eDP with max 
parameters\n");
-- 
2.43.3



[PATCH v2 20/21] drm/i915/dp: Add debugfs entry to force link retrain

2024-05-20 Thread Imre Deak
Add a connector debugfs entry to force retrain an active link. This can
be used to test both custom link parameters (previously set via the
target link lane count/rate entries) or link train failure scenarios
(previously forced via the force-failure entry). The entry will
autoreset after the link-retrain is complete.

v2: Add the entry from intel_dp_link_training.c (Jani)

Cc: Jani Nikula 
Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_display_types.h|  1 +
 drivers/gpu/drm/i915/display/intel_dp.c   | 18 +--
 .../drm/i915/display/intel_dp_link_training.c | 47 +++
 3 files changed, 61 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index dbe1468fe471d..52c69c7eb52f5 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1771,6 +1771,7 @@ struct intel_dp {
/* Sequential link training failures after a passing LT */
int seq_train_failures;
int force_train_failure;
+   bool force_retrain;
} link;
bool reset_link_params;
int mso_link_count;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index cf4a768fccd15..895074d548671 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5042,7 +5042,7 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
drm_dp_mst_hpd_irq_send_new_request(&intel_dp->mst_mgr);
}
 
-   if (!link_ok)
+   if (!link_ok || intel_dp->link.force_retrain)
intel_ddi_queue_link_check(dig_port, 0);
 
return !reprobe_needed;
@@ -5091,6 +5091,9 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
if (intel_psr_enabled(intel_dp))
return false;
 
+   if (intel_dp->link.force_retrain)
+   return true;
+
if (drm_dp_dpcd_read_phy_link_status(&intel_dp->aux, DP_PHY_DPRX,
 link_status) < 0)
return false;
@@ -5237,8 +5240,9 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
if (!intel_dp_needs_link_retrain(intel_dp))
return 0;
 
-   drm_dbg_kms(&dev_priv->drm, "[ENCODER:%d:%s] retraining link\n",
-   encoder->base.base.id, encoder->base.name);
+   drm_dbg_kms(&dev_priv->drm, "[ENCODER:%d:%s] retraining link (forced 
%s)\n",
+   encoder->base.base.id, encoder->base.name,
+   str_yes_no(intel_dp->link.force_retrain));
 
for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, crtc, pipe_mask) {
const struct intel_crtc_state *crtc_state =
@@ -5266,7 +5270,7 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
encoder->base.base.id, encoder->base.name,
ERR_PTR(ret));
 
-   return ret;
+   goto out;
}
 
for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, crtc, pipe_mask) {
@@ -5293,7 +5297,11 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
  
intel_crtc_pch_transcoder(crtc), true);
}
 
-   return 0;
+out:
+   if (ret != -EDEADLK)
+   intel_dp->link.force_retrain = false;
+
+   return ret;
 }
 
 static int intel_dp_prep_phy_test(struct intel_dp *intel_dp,
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index b40148a42f442..6fac8421a6918 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -26,6 +26,7 @@
 #include "intel_dp.h"
 #include "intel_dp_link_training.h"
 #include "intel_ddi.h"
+#include "intel_hotplug.h"
 #include "intel_panel.h"
 
 #define LT_MSG_PREFIX  "[CONNECTOR:%d:%s][ENCODER:%d:%s][%s] "
@@ -1846,6 +1847,49 @@ 
DEFINE_DEBUGFS_ATTRIBUTE(i915_dp_force_link_training_failure_fops,
 i915_dp_force_link_training_failure_show,
 i915_dp_force_link_training_failure_write, "%llu\n");
 
+static int i915_dp_force_link_retrain_show(void *data, u64 *val)
+{
+   struct intel_connector *connector = to_intel_connector(data);
+   struct drm_i915_private *i915 = to_i915(connector->base.dev);
+   struct intel_dp *intel_dp;
+   int err;
+
+   err = 
drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
+   if (err)
+   return err;
+
+   intel_dp = intel_connector_to_intel_dp(connector);
+   *val = intel_dp->link.force_retrain;
+
+   drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
+
+   return 0;
+}
+
+static int i915_dp_force_link_retrain_writ

[PATCH v2 21/21] drm/i915/dp: Add debugfs entry for link training info

2024-05-20 Thread Imre Deak
Add counters for link training pass/failure events and a connector
debugfs entry showing these and relevant link training information. This
is meant to be used by automated testing of the driver's link retraining
and link parameter fallback functionality.

v2:
- Add the entry from intel_dp_link_training.c (Jani)
- Add separate entries for the max link rate/lane count.

Cc: Jani Nikula 
Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_display_types.h|  3 ++
 drivers/gpu/drm/i915/display/intel_dp.c   |  7 +++-
 .../drm/i915/display/intel_dp_link_training.c | 37 +++
 3 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 52c69c7eb52f5..6f37f2cca2e99 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1768,6 +1768,9 @@ struct intel_dp {
int requested_lane_count;
int requested_rate;
bool retrain_disabled;
+   int train_count;
+   int retrain_count;
+   int all_train_failures;
/* Sequential link training failures after a passing LT */
int seq_train_failures;
int force_train_failure;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 895074d548671..0337be8416082 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2996,6 +2996,9 @@ void intel_dp_reset_link_params(struct intel_dp *intel_dp)
intel_dp->link.max_lane_count = 
intel_dp_max_common_lane_count(intel_dp);
intel_dp->link.max_rate = intel_dp_max_common_rate(intel_dp);
intel_dp->link.retrain_disabled = false;
+   intel_dp->link.train_count = 0;
+   intel_dp->link.retrain_count = 0;
+   intel_dp->link.all_train_failures = 0;
intel_dp->link.seq_train_failures = 0;
 }
 
@@ -5298,8 +5301,10 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
}
 
 out:
-   if (ret != -EDEADLK)
+   if (ret != -EDEADLK) {
+   intel_dp->link.retrain_count++;
intel_dp->link.force_retrain = false;
+   }
 
return ret;
 }
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index 6fac8421a6918..969a5fc4c7b2e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1490,6 +1490,8 @@ void intel_dp_start_link_train(struct intel_atomic_state 
*state,
else
passed = intel_dp_link_train_all_phys(intel_dp, crtc_state, 
lttpr_count);
 
+   intel_dp->link.train_count++;
+
if (intel_dp->link.force_train_failure) {
intel_dp->link.force_train_failure--;
lt_dbg(intel_dp, DP_PHY_DPRX, "Forcing link training 
failure\n");
@@ -1499,6 +1501,7 @@ void intel_dp_start_link_train(struct intel_atomic_state 
*state,
return;
}
 
+   intel_dp->link.all_train_failures++;
intel_dp->link.seq_train_failures++;
 
/*
@@ -1890,6 +1893,37 @@ DEFINE_DEBUGFS_ATTRIBUTE(i915_dp_force_link_retrain_fops,
 i915_dp_force_link_retrain_show,
 i915_dp_force_link_retrain_write, "%llu\n");
 
+static int i915_dp_link_training_info_show(struct seq_file *m, void *data)
+{
+   struct intel_connector *connector = to_intel_connector(m->private);
+   struct drm_i915_private *i915 = to_i915(connector->base.dev);
+   struct intel_dp *intel_dp;
+   int ret;
+
+   ret = 
drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
+   if (ret)
+   return ret;
+
+   intel_dp = intel_connector_to_intel_dp(connector);
+
+   seq_printf(m,
+  "retrain_disabled: %s\n"
+  "train_count: %d\n"
+  "retrain_count: %d\n"
+  "all_train_failures: %d\n"
+  "seq_train_failures: %d\n",
+  str_yes_no(intel_dp->link.retrain_disabled),
+  intel_dp->link.train_count,
+  intel_dp->link.retrain_count,
+  intel_dp->link.all_train_failures,
+  intel_dp->link.seq_train_failures);
+
+   drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
+
+   return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(i915_dp_link_training_info);
+
 void intel_dp_link_training_debugfs_add(struct intel_connector *connector)
 {
struct dentry *root = connector->base.debugfs_entry;
@@ -1915,4 +1949,7 @@ void intel_dp_link_training_debugfs_add(struct 
intel_connector *connector)
 
debugfs_create_file("i915_dp_force_link_retrain", 0644, root,
connector, &i915_dp_force_link_retrain_f

[PATCH v2 11/21] drm/i915/dp: Use check link state work in the hotplug handler

2024-05-20 Thread Imre Deak
Simplify things by retraining a DP link if a bad link is detected in the
hotplug handler from the encoder's check link state work, similarly to
how this is done after a modeset link training failure.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/g4x_dp.c| 20 +---
 drivers/gpu/drm/i915/display/intel_ddi.c | 11 +--
 drivers/gpu/drm/i915/display/intel_dp.c  |  8 
 drivers/gpu/drm/i915/display/intel_dp.h  |  1 +
 4 files changed, 15 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c 
b/drivers/gpu/drm/i915/display/g4x_dp.c
index 0d7424a7581e6..1f3b6b3956a1c 100644
--- a/drivers/gpu/drm/i915/display/g4x_dp.c
+++ b/drivers/gpu/drm/i915/display/g4x_dp.c
@@ -1160,9 +1160,7 @@ intel_dp_hotplug(struct intel_encoder *encoder,
 struct intel_connector *connector)
 {
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
-   struct drm_modeset_acquire_ctx ctx;
enum intel_hotplug_state state;
-   int ret;
 
if (intel_dp->compliance.test_active &&
intel_dp->compliance.test_type == DP_TEST_LINK_PHY_TEST_PATTERN) {
@@ -1173,23 +1171,7 @@ intel_dp_hotplug(struct intel_encoder *encoder,
 
state = intel_encoder_hotplug(encoder, connector);
 
-   drm_modeset_acquire_init(&ctx, 0);
-
-   for (;;) {
-   ret = intel_dp_retrain_link(encoder, &ctx);
-
-   if (ret == -EDEADLK) {
-   drm_modeset_backoff(&ctx);
-   continue;
-   }
-
-   break;
-   }
-
-   drm_modeset_drop_locks(&ctx);
-   drm_modeset_acquire_fini(&ctx);
-   drm_WARN(encoder->base.dev, ret,
-"Acquiring modeset locks failed with %i\n", ret);
+   intel_dp_check_link_state(intel_dp);
 
/*
 * Keeping it consistent with intel_ddi_hotplug() and
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
b/drivers/gpu/drm/i915/display/intel_ddi.c
index 58e57a7704811..ea24404724075 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4566,14 +4566,13 @@ intel_ddi_hotplug(struct intel_encoder *encoder,
state = intel_encoder_hotplug(encoder, connector);
 
if (!intel_tc_port_link_reset(dig_port)) {
-   intel_modeset_lock_ctx_retry(&ctx, NULL, 0, ret) {
-   if (connector->base.connector_type == 
DRM_MODE_CONNECTOR_HDMIA)
+   if (connector->base.connector_type == DRM_MODE_CONNECTOR_HDMIA) 
{
+   intel_modeset_lock_ctx_retry(&ctx, NULL, 0, ret)
ret = intel_hdmi_reset_link(encoder, &ctx);
-   else
-   ret = intel_dp_retrain_link(encoder, &ctx);
+   drm_WARN_ON(encoder->base.dev, ret);
+   } else {
+   intel_dp_check_link_state(intel_dp);
}
-
-   drm_WARN_ON(encoder->base.dev, ret);
}
 
/*
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 87f9f12814b93..ff4ed6bb520d8 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5064,6 +5064,14 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
return !intel_dp_link_ok(intel_dp, link_status);
 }
 
+void intel_dp_check_link_state(struct intel_dp *intel_dp)
+{
+   struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+
+   if (intel_dp_needs_link_retrain(intel_dp))
+   intel_ddi_queue_link_check(dig_port, 0);
+}
+
 static bool intel_dp_has_connector(struct intel_dp *intel_dp,
   const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h 
b/drivers/gpu/drm/i915/display/intel_dp.h
index 24777c035e2ad..3fa53ac601d58 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -57,6 +57,7 @@ void intel_dp_set_link_params(struct intel_dp *intel_dp,
 int intel_dp_get_active_pipes(struct intel_dp *intel_dp,
  struct drm_modeset_acquire_ctx *ctx,
  u8 *pipe_mask);
+void intel_dp_check_link_state(struct intel_dp *intel_dp);
 int intel_dp_retrain_link(struct intel_encoder *encoder,
  struct drm_modeset_acquire_ctx *ctx);
 void intel_dp_set_power(struct intel_dp *intel_dp, u8 mode);
-- 
2.43.3



[PATCH v2 19/21] drm/i915/dp: Add debugfs entry to force link training failure

2024-05-20 Thread Imre Deak
Add a connector debugfs entry to force a failure during the following
1-2 link training. The entry will auto-reset after the specified link
training events are complete.

v2: Add the entry from intel_dp_link_training.c (Jani)

Cc: Jani Nikula 
Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_display_types.h|  1 +
 .../drm/i915/display/intel_dp_link_training.c | 52 ++-
 2 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index e1c41cece249d..dbe1468fe471d 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1770,6 +1770,7 @@ struct intel_dp {
bool retrain_disabled;
/* Sequential link training failures after a passing LT */
int seq_train_failures;
+   int force_train_failure;
} link;
bool reset_link_params;
int mso_link_count;
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index 764187bc42ff9..b40148a42f442 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1489,7 +1489,10 @@ void intel_dp_start_link_train(struct intel_atomic_state 
*state,
else
passed = intel_dp_link_train_all_phys(intel_dp, crtc_state, 
lttpr_count);
 
-   if (passed) {
+   if (intel_dp->link.force_train_failure) {
+   intel_dp->link.force_train_failure--;
+   lt_dbg(intel_dp, DP_PHY_DPRX, "Forcing link training 
failure\n");
+   } else if (passed) {
intel_dp->link.seq_train_failures = 0;
intel_ddi_queue_link_check(dig_port, 2000);
return;
@@ -1799,6 +1802,50 @@ static int i915_dp_max_lane_count_show(void *data, u64 
*val)
 }
 DEFINE_DEBUGFS_ATTRIBUTE(i915_dp_max_lane_count_fops, 
i915_dp_max_lane_count_show, NULL, "%llu\n");
 
+static int i915_dp_force_link_training_failure_show(void *data, u64 *val)
+{
+   struct intel_connector *connector = to_intel_connector(data);
+   struct drm_i915_private *i915 = to_i915(connector->base.dev);
+   struct intel_dp *intel_dp;
+   int err;
+
+   err = 
drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
+   if (err)
+   return err;
+
+   intel_dp = intel_connector_to_intel_dp(connector);
+   *val = intel_dp->link.force_train_failure;
+
+   drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
+
+   return 0;
+}
+
+static int i915_dp_force_link_training_failure_write(void *data, u64 val)
+{
+   struct intel_connector *connector = to_intel_connector(data);
+   struct drm_i915_private *i915 = to_i915(connector->base.dev);
+   struct intel_dp *intel_dp;
+   int err;
+
+   if (val > 2)
+   return -EINVAL;
+
+   err = 
drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
+   if (err)
+   return err;
+
+   intel_dp = intel_connector_to_intel_dp(connector);
+   intel_dp->link.force_train_failure = val;
+
+   drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
+
+   return 0;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(i915_dp_force_link_training_failure_fops,
+i915_dp_force_link_training_failure_show,
+i915_dp_force_link_training_failure_write, "%llu\n");
+
 void intel_dp_link_training_debugfs_add(struct intel_connector *connector)
 {
struct dentry *root = connector->base.debugfs_entry;
@@ -1818,4 +1865,7 @@ void intel_dp_link_training_debugfs_add(struct 
intel_connector *connector)
 
debugfs_create_file("i915_dp_max_lane_count", 0444, root,
connector, &i915_dp_max_lane_count_fops);
+
+   debugfs_create_file("i915_dp_force_link_training_failure", 0644, root,
+   connector, 
&i915_dp_force_link_training_failure_fops);
 }
-- 
2.43.3



[PATCH v2 14/21] drm/i915/dp: Disable link retraining after the last fallback step

2024-05-20 Thread Imre Deak
After a link training failure if the link parameters can't be further
reduced, there is no point in trying to retrain the link in the driver.
This avoids excessive retrain attempts after detecting a bad link, for
instance while handling MST HPD IRQs, which is likely redundant as the
link training failed already twice with the same minimum link
parameters. Userspace can still try to retrain the link with these
parameters via a modeset.

While at it make the error message more accurate and emit instead a
debug message if the link training failure was only forced for testing
purposes.

Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_display_types.h|  1 +
 drivers/gpu/drm/i915/display/intel_dp.c   |  4 
 .../drm/i915/display/intel_dp_link_training.c | 22 +--
 3 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index bde518c843468..eb0cac3e27acf 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1765,6 +1765,7 @@ struct intel_dp {
int max_lane_count;
/* Max rate for the current link */
int max_rate;
+   bool retrain_disabled;
/* Sequential link training failures after a passing LT */
int seq_train_failures;
} link;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index b72dbd7becb74..34d64fe3302ef 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2950,6 +2950,7 @@ static void intel_dp_reset_link_params(struct intel_dp 
*intel_dp)
 {
intel_dp->link.max_lane_count = 
intel_dp_max_common_lane_count(intel_dp);
intel_dp->link.max_rate = intel_dp_max_common_rate(intel_dp);
+   intel_dp->link.retrain_disabled = false;
intel_dp->link.seq_train_failures = 0;
 }
 
@@ -5061,6 +5062,9 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
intel_dp->lane_count))
return false;
 
+   if (intel_dp->link.retrain_disabled)
+   return false;
+
if (intel_dp->link.seq_train_failures)
return true;
 
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index 97d499e4b6ef7..375f59afd4dec 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1165,10 +1165,8 @@ static int 
intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
new_link_rate = intel_dp_max_common_rate(intel_dp);
}
 
-   if (new_lane_count < 0) {
-   drm_err(&i915->drm, "Link Training Unsuccessful\n");
+   if (new_lane_count < 0)
return -1;
-   }
 
if (intel_dp_is_edp(intel_dp) &&
!intel_dp_can_link_train_fallback_for_edp(intel_dp, new_link_rate, 
new_lane_count)) {
@@ -1187,7 +1185,7 @@ static int intel_dp_get_link_train_fallback_values(struct 
intel_dp *intel_dp,
return 0;
 }
 
-static void intel_dp_schedule_fallback_link_training(struct intel_atomic_state 
*state,
+static bool intel_dp_schedule_fallback_link_training(struct intel_atomic_state 
*state,
 struct intel_dp *intel_dp,
 const struct 
intel_crtc_state *crtc_state)
 {
@@ -1195,7 +1193,7 @@ static void 
intel_dp_schedule_fallback_link_training(struct intel_atomic_state *
 
if (!intel_digital_port_connected(&dp_to_dig_port(intel_dp)->base)) {
lt_dbg(intel_dp, DP_PHY_DPRX, "Link Training failed on 
disconnected sink.\n");
-   return;
+   return true;
}
 
if (intel_dp->hobl_active) {
@@ -1203,11 +1201,13 @@ static void 
intel_dp_schedule_fallback_link_training(struct intel_atomic_state *
   "Link Training failed with HOBL active, not enabling it 
from now on\n");
intel_dp->hobl_failed = true;
} else if (intel_dp_get_link_train_fallback_values(intel_dp, 
crtc_state)) {
-   return;
+   return false;
}
 
/* Schedule a Hotplug Uevent to userspace to start modeset */
intel_dp_queue_modeset_retry_for_link(state, encoder, crtc_state);
+
+   return true;
 }
 
 /* Perform the link training on all LTTPRs and the DPRX on a link. */
@@ -1518,7 +1518,15 @@ void intel_dp_start_link_train(struct intel_atomic_state 
*state,
return;
}
 
-   intel_dp_schedule_fallback_link_training(state, intel_dp, crtc_state);
+   if (intel_dp_schedule_fallback_link_training(state, intel_dp, 
crtc_state))
+   return;
+
+   intel_dp->link.retrain_disa

[PATCH v2 13/21] drm/i915/dp: Use check link state work in the HPD IRQ handler

2024-05-20 Thread Imre Deak
Simplify things by retraining a DP link if a bad link is detected in the
HPD IRQ handler from the encoder's check link state work, similarly to
how this is done after a modeset link training failure.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 70b00e5ae7ad7..b72dbd7becb74 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4950,6 +4950,7 @@ static bool
 intel_dp_check_mst_status(struct intel_dp *intel_dp)
 {
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
+   struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
bool link_ok = true;
bool reprobe_needed = false;
 
@@ -4995,7 +4996,10 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
drm_dp_mst_hpd_irq_send_new_request(&intel_dp->mst_mgr);
}
 
-   return link_ok && !reprobe_needed;
+   if (!link_ok)
+   intel_ddi_queue_link_check(dig_port, 0);
+
+   return !reprobe_needed;
 }
 
 static void
@@ -5453,9 +5457,7 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
/* Handle CEC interrupts, if any */
drm_dp_cec_irq(&intel_dp->aux);
 
-   /* defer to the hotplug work for link retraining if needed */
-   if (intel_dp_needs_link_retrain(intel_dp))
-   return false;
+   intel_dp_check_link_state(intel_dp);
 
intel_psr_short_pulse(intel_dp);
 
-- 
2.43.3



[PATCH v2 17/21] drm/i915/dp: Add debugfs entries to set a target link rate/lane count

2024-05-20 Thread Imre Deak
Add connector debugfs entries to set a target link rate/lane count to be
used by a link training afterwards. After setting a target link
rate/lane count reset the link training parameters and for a non-auto
target disable reducing the link parameters via the fallback logic.  The
former one can be used after testing link training failure scenarios
- via debugfs entries added later - to reset the reduced link parameters
after the test.

v2:
- Add the entries from intel_dp_link_training.c (Jani)
- Rename the entries to i915_dp_set_link_rate/lane_count.

Cc: Jani Nikula 
Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_display_debugfs.c  |   2 +
 .../drm/i915/display/intel_display_types.h|   2 +
 drivers/gpu/drm/i915/display/intel_dp.c   |  63 -
 drivers/gpu/drm/i915/display/intel_dp.h   |   2 +
 .../drm/i915/display/intel_dp_link_training.c | 230 ++
 .../drm/i915/display/intel_dp_link_training.h |   4 +
 6 files changed, 294 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c 
b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 35f9f86ef70f4..f83ffa2534925 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -23,6 +23,7 @@
 #include "intel_display_types.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
+#include "intel_dp_link_training.h"
 #include "intel_dp_mst.h"
 #include "intel_drrs.h"
 #include "intel_fbc.h"
@@ -1515,6 +1516,7 @@ void intel_connector_debugfs_add(struct intel_connector 
*connector)
intel_drrs_connector_debugfs_add(connector);
intel_pps_connector_debugfs_add(connector);
intel_psr_connector_debugfs_add(connector);
+   intel_dp_link_training_debugfs_add(connector);
 
if (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
connector_type == DRM_MODE_CONNECTOR_HDMIA ||
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index eb0cac3e27acf..e1c41cece249d 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1765,6 +1765,8 @@ struct intel_dp {
int max_lane_count;
/* Max rate for the current link */
int max_rate;
+   int requested_lane_count;
+   int requested_rate;
bool retrain_disabled;
/* Sequential link training failures after a passing LT */
int seq_train_failures;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index c8d940a2ef7af..cf4a768fccd15 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -345,7 +345,7 @@ int intel_dp_max_common_rate(struct intel_dp *intel_dp)
return intel_dp_common_rate(intel_dp, intel_dp->num_common_rates - 1);
 }
 
-static int intel_dp_max_source_lane_count(struct intel_digital_port *dig_port)
+int intel_dp_max_source_lane_count(struct intel_digital_port *dig_port)
 {
int vbt_max_lanes = 
intel_bios_dp_max_lane_count(dig_port->base.devdata);
int max_lanes = dig_port->max_lanes;
@@ -371,19 +371,39 @@ int intel_dp_max_common_lane_count(struct intel_dp 
*intel_dp)
return min3(source_max, sink_max, lane_max);
 }
 
+static int requested_lane_count(struct intel_dp *intel_dp)
+{
+   return clamp(intel_dp->link.requested_lane_count, 1, 
intel_dp_max_common_lane_count(intel_dp));
+}
+
 int intel_dp_max_lane_count(struct intel_dp *intel_dp)
 {
-   switch (intel_dp->link.max_lane_count) {
+   int lane_count;
+
+   if (intel_dp->link.requested_lane_count)
+   lane_count = requested_lane_count(intel_dp);
+   else
+   lane_count = intel_dp->link.max_lane_count;
+
+   switch (lane_count) {
case 1:
case 2:
case 4:
-   return intel_dp->link.max_lane_count;
+   return lane_count;
default:
-   MISSING_CASE(intel_dp->link.max_lane_count);
+   MISSING_CASE(lane_count);
return 1;
}
 }
 
+static int intel_dp_min_lane_count(struct intel_dp *intel_dp)
+{
+   if (intel_dp->link.requested_lane_count)
+   return requested_lane_count(intel_dp);
+
+   return 1;
+}
+
 /*
  * The required data bandwidth for a mode with given pixel clock and bpp. This
  * is the required net bandwidth independent of the data bandwidth efficiency.
@@ -1306,16 +1326,38 @@ static void intel_dp_print_rates(struct intel_dp 
*intel_dp)
drm_dbg_kms(&i915->drm, "common rates: %s\n", str);
 }
 
+static int requested_rate(struct intel_dp *intel_dp)
+{
+   int len = intel_dp_common_len_rate_limit(intel_dp, 
intel_dp->link.requested_rate);
+
+   if (len == 0)
+   return intel_dp_common_rate(intel_dp, 0);
+
+   return intel_dp_com

[PATCH v2 09/21] drm/i915/dp: Pass atomic state to link training function

2024-05-20 Thread Imre Deak
From: Imre Deak 

The next patch adds sending a modeset-retry uevent after a link training
failure to all MST connectors on link. This requires the atomic state,
so pass it to intel_dp_start_link_train(). In case of SST where
retraining still happens by calling this function directly instead of a
modeset commit the atomic state is not available and NULL is passed
instead. This is ok, since in this case the encoder's only DP connector
is available from intel_dp->attached_connector not requiring the atomic
state.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/g4x_dp.c | 2 +-
 drivers/gpu/drm/i915/display/intel_ddi.c  | 6 +++---
 drivers/gpu/drm/i915/display/intel_dp.c   | 2 +-
 drivers/gpu/drm/i915/display/intel_dp_link_training.c | 4 +++-
 drivers/gpu/drm/i915/display/intel_dp_link_training.h | 4 +++-
 5 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c 
b/drivers/gpu/drm/i915/display/g4x_dp.c
index 4363e32a834df..0d7424a7581e6 100644
--- a/drivers/gpu/drm/i915/display/g4x_dp.c
+++ b/drivers/gpu/drm/i915/display/g4x_dp.c
@@ -707,7 +707,7 @@ static void intel_enable_dp(struct intel_atomic_state 
*state,
intel_dp_configure_protocol_converter(intel_dp, pipe_config);
intel_dp_check_frl_training(intel_dp);
intel_dp_pcon_dsc_configure(intel_dp, pipe_config);
-   intel_dp_start_link_train(intel_dp, pipe_config);
+   intel_dp_start_link_train(state, intel_dp, pipe_config);
intel_dp_stop_link_train(intel_dp, pipe_config);
 }
 
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
b/drivers/gpu/drm/i915/display/intel_ddi.c
index 86358ec27e685..58e57a7704811 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -2586,7 +2586,7 @@ static void mtl_ddi_pre_enable_dp(struct 
intel_atomic_state *state,
 * Pattern, wait for 5 idle patterns (DP_TP_STATUS Min_Idles_Sent)
 * (timeout after 800 us)
 */
-   intel_dp_start_link_train(intel_dp, crtc_state);
+   intel_dp_start_link_train(state, intel_dp, crtc_state);
 
/* 6.n Set DP_TP_CTL link training to Normal */
if (!is_trans_port_sync_mode(crtc_state))
@@ -2728,7 +2728,7 @@ static void tgl_ddi_pre_enable_dp(struct 
intel_atomic_state *state,
 * Pattern, wait for 5 idle patterns (DP_TP_STATUS Min_Idles_Sent)
 * (timeout after 800 us)
 */
-   intel_dp_start_link_train(intel_dp, crtc_state);
+   intel_dp_start_link_train(state, intel_dp, crtc_state);
 
/* 7.k Set DP_TP_CTL link training to Normal */
if (!is_trans_port_sync_mode(crtc_state))
@@ -2795,7 +2795,7 @@ static void hsw_ddi_pre_enable_dp(struct 
intel_atomic_state *state,
   
to_intel_connector(conn_state->connector),
   crtc_state);
intel_dp_sink_set_fec_ready(intel_dp, crtc_state, true);
-   intel_dp_start_link_train(intel_dp, crtc_state);
+   intel_dp_start_link_train(state, intel_dp, crtc_state);
if ((port != PORT_A || DISPLAY_VER(dev_priv) >= 9) &&
!is_trans_port_sync_mode(crtc_state))
intel_dp_stop_link_train(intel_dp, crtc_state);
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 7c824c5a13346..1f0b7cceea2dc 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5214,7 +5214,7 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
 
intel_dp_check_frl_training(intel_dp);
intel_dp_pcon_dsc_configure(intel_dp, crtc_state);
-   intel_dp_start_link_train(intel_dp, crtc_state);
+   intel_dp_start_link_train(NULL, intel_dp, crtc_state);
intel_dp_stop_link_train(intel_dp, crtc_state);
break;
}
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index e804f0b801c02..4f60daa97407d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1453,6 +1453,7 @@ intel_dp_128b132b_link_train(struct intel_dp *intel_dp,
 
 /**
  * intel_dp_start_link_train - start link training
+ * @state: Atomic state
  * @intel_dp: DP struct
  * @crtc_state: state for CRTC attached to the encoder
  *
@@ -1461,7 +1462,8 @@ intel_dp_128b132b_link_train(struct intel_dp *intel_dp,
  * fails.
  * After calling this function intel_dp_stop_link_train() must be called.
  */
-void intel_dp_start_link_train(struct intel_dp *intel_dp,
+void intel_dp_start_link_train(struct intel_atomic_state *state,
+  struct intel_dp *intel_dp,
   const struct intel_crtc_state *crtc_state)
 {
struct drm_i915_private *i915 = dp

[PATCH v2 15/21] drm/i915/dp_mst: Reset intel_dp->link_trained during disabling

2024-05-20 Thread Imre Deak
Reset the flag indicating an active link after disabling an MST link,
similarly to how this is done for SST outputs. This avoids trying to
retrain an MST link while its disabled.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c 
b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index c9c5d235744ab..66c1c59268167 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -981,6 +981,9 @@ static void intel_mst_disable_dp(struct intel_atomic_state 
*state,
drm_dbg_kms(&i915->drm, "active links %d\n",
intel_dp->active_mst_links);
 
+   if (intel_dp->active_mst_links == 1)
+   intel_dp->link_trained = false;
+
intel_hdcp_disable(intel_mst->connector);
 
intel_dp_sink_disable_decompression(state, connector, old_crtc_state);
-- 
2.43.3



[PATCH v2 18/21] drm/i915/dp: Add debugfs entries to get the max link rate/lane count

2024-05-20 Thread Imre Deak
Add connector debugfs entries to get the maximum link rate and lane
count.

Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_dp_link_training.c | 46 +++
 1 file changed, 46 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index a6021e17cc1ef..764187bc42ff9 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1759,6 +1759,46 @@ static ssize_t i915_dp_set_lane_count_write(struct file 
*file,
 }
 DEFINE_SHOW_STORE_ATTRIBUTE(i915_dp_set_lane_count);
 
+static int i915_dp_max_link_rate_show(void *data, u64 *val)
+{
+   struct intel_connector *connector = to_intel_connector(data);
+   struct drm_i915_private *i915 = to_i915(connector->base.dev);
+   struct intel_dp *intel_dp;
+   int err;
+
+   err = 
drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
+   if (err)
+   return err;
+
+   intel_dp = intel_connector_to_intel_dp(connector);
+   *val = intel_dp->link.max_rate;
+
+   drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
+
+   return 0;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(i915_dp_max_link_rate_fops, 
i915_dp_max_link_rate_show, NULL, "%llu\n");
+
+static int i915_dp_max_lane_count_show(void *data, u64 *val)
+{
+   struct intel_connector *connector = to_intel_connector(data);
+   struct drm_i915_private *i915 = to_i915(connector->base.dev);
+   struct intel_dp *intel_dp;
+   int err;
+
+   err = 
drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
+   if (err)
+   return err;
+
+   intel_dp = intel_connector_to_intel_dp(connector);
+   *val = intel_dp->link.max_lane_count;
+
+   drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
+
+   return 0;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(i915_dp_max_lane_count_fops, 
i915_dp_max_lane_count_show, NULL, "%llu\n");
+
 void intel_dp_link_training_debugfs_add(struct intel_connector *connector)
 {
struct dentry *root = connector->base.debugfs_entry;
@@ -1772,4 +1812,10 @@ void intel_dp_link_training_debugfs_add(struct 
intel_connector *connector)
 
debugfs_create_file("i915_dp_set_lane_count", 0644, root,
connector, &i915_dp_set_lane_count_fops);
+
+   debugfs_create_file("i915_dp_max_link_rate", 0444, root,
+   connector, &i915_dp_max_link_rate_fops);
+
+   debugfs_create_file("i915_dp_max_lane_count", 0444, root,
+   connector, &i915_dp_max_lane_count_fops);
 }
-- 
2.43.3



[PATCH v2 07/21] drm/i915/dp: Recheck link state after modeset

2024-05-20 Thread Imre Deak
Recheck the link state after a passing link training, with a 2 sec delay
to account for cases where the link goes bad following the link training
and the sink doesn't report this via an HPD IRQ.

The delayed work added here will be also used by a later patch after a
failed link training to try to retrain the link with unchanged link
params before reducing the link params.

v2: Don't flush an uninitialized delayed work (on HDMI-only DDI ports).
v3: Add the work to intel_digital_port instead of intel_dp.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/g4x_dp.c |  7 
 drivers/gpu/drm/i915/display/intel_ddi.c  | 34 +++
 drivers/gpu/drm/i915/display/intel_ddi.h  |  4 +++
 .../drm/i915/display/intel_display_types.h|  3 ++
 drivers/gpu/drm/i915/display/intel_dp.c   |  1 +
 .../drm/i915/display/intel_dp_link_training.c | 12 +--
 6 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c 
b/drivers/gpu/drm/i915/display/g4x_dp.c
index 06ec04e667e32..4363e32a834df 100644
--- a/drivers/gpu/drm/i915/display/g4x_dp.c
+++ b/drivers/gpu/drm/i915/display/g4x_dp.c
@@ -20,6 +20,7 @@
 #include "intel_dp_aux.h"
 #include "intel_dp_link_training.h"
 #include "intel_dpio_phy.h"
+#include "intel_ddi.h"
 #include "intel_fifo_underrun.h"
 #include "intel_hdmi.h"
 #include "intel_hotplug.h"
@@ -1241,6 +1242,10 @@ static bool ilk_digital_port_connected(struct 
intel_encoder *encoder)
 
 static void intel_dp_encoder_destroy(struct drm_encoder *encoder)
 {
+   struct intel_digital_port *dig_port = 
enc_to_dig_port(to_intel_encoder(encoder));
+
+   intel_ddi_flush_link_check_work(dig_port);
+
intel_dp_encoder_flush_work(encoder);
 
drm_encoder_cleanup(encoder);
@@ -1309,6 +1314,8 @@ bool g4x_dp_init(struct drm_i915_private *dev_priv,
 
dig_port->aux_ch = AUX_CH_NONE;
 
+   intel_ddi_init_link_check_work(dig_port);
+
intel_connector = intel_connector_alloc();
if (!intel_connector)
goto err_connector_alloc;
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
b/drivers/gpu/drm/i915/display/intel_ddi.c
index 170ba01786cf8..86358ec27e685 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4360,6 +4360,7 @@ static void intel_ddi_encoder_destroy(struct drm_encoder 
*encoder)
struct drm_i915_private *i915 = to_i915(encoder->dev);
struct intel_digital_port *dig_port = 
enc_to_dig_port(to_intel_encoder(encoder));
 
+   intel_ddi_flush_link_check_work(dig_port);
intel_dp_encoder_flush_work(encoder);
if (intel_encoder_is_tc(&dig_port->base))
intel_tc_port_cleanup(dig_port);
@@ -4441,6 +4442,37 @@ intel_ddi_init_dp_connector(struct intel_digital_port 
*dig_port)
return connector;
 }
 
+static void intel_ddi_link_check_work_fn(struct work_struct *work)
+{
+   struct intel_digital_port *dig_port =
+   container_of(work, typeof(*dig_port), check_link_work.work);
+   struct intel_encoder *encoder = &dig_port->base;
+   struct drm_modeset_acquire_ctx ctx;
+   int ret;
+
+   intel_modeset_lock_ctx_retry(&ctx, NULL, 0, ret)
+   if (dig_port->dp.attached_connector)
+   ret = intel_dp_retrain_link(encoder, &ctx);
+}
+
+void intel_ddi_init_link_check_work(struct intel_digital_port *dig_port)
+{
+   INIT_DELAYED_WORK(&dig_port->check_link_work, 
intel_ddi_link_check_work_fn);
+}
+
+void intel_ddi_flush_link_check_work(struct intel_digital_port *dig_port)
+{
+   cancel_delayed_work_sync(&dig_port->check_link_work);
+}
+
+void intel_ddi_queue_link_check(struct intel_digital_port *dig_port, int 
delay_ms)
+{
+   struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
+
+   mod_delayed_work(i915->unordered_wq,
+&dig_port->check_link_work, 
msecs_to_jiffies(delay_ms));
+}
+
 static int intel_hdmi_reset_link(struct intel_encoder *encoder,
 struct drm_modeset_acquire_ctx *ctx)
 {
@@ -4911,6 +4943,8 @@ void intel_ddi_init(struct drm_i915_private *dev_priv,
 
dig_port->aux_ch = AUX_CH_NONE;
 
+   intel_ddi_init_link_check_work(dig_port);
+
encoder = &dig_port->base;
encoder->devdata = devdata;
 
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.h 
b/drivers/gpu/drm/i915/display/intel_ddi.h
index 434de7196875a..b67714483f3cc 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.h
+++ b/drivers/gpu/drm/i915/display/intel_ddi.h
@@ -15,6 +15,7 @@ struct intel_bios_encoder_data;
 struct intel_connector;
 struct intel_crtc;
 struct intel_crtc_state;
+struct intel_digital_port;
 struct intel_dp;
 struct intel_dpll_hw_state;
 struct intel_encoder;
@@ -53,6 +54,9 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state);
 void intel_wait_ddi_b

[PATCH v2 04/21] drm/i915/dp: Sanitize intel_dp_get_link_train_fallback_values()

2024-05-20 Thread Imre Deak
Reduce the indentation in intel_dp_get_link_train_fallback_values() by
adding separate helpers to reduce the link rate and lane count. Also
simplify things by passing crtc_state to the function.

This also prepares for later patches in the patchset adding a limitation
on how the link params are reduced.

Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_dp_link_training.c | 82 ---
 1 file changed, 51 insertions(+), 31 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index 4db293f256896..edc970036866a 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1109,11 +1109,37 @@ static bool 
intel_dp_can_link_train_fallback_for_edp(struct intel_dp *intel_dp,
return true;
 }
 
+static int reduce_link_rate(struct intel_dp *intel_dp, int current_rate)
+{
+   int rate_index;
+   int new_rate;
+
+   rate_index = intel_dp_rate_index(intel_dp->common_rates,
+intel_dp->num_common_rates,
+current_rate);
+
+   if (rate_index <= 0)
+   return -1;
+
+   new_rate = intel_dp_common_rate(intel_dp, rate_index - 1);
+
+   return new_rate;
+}
+
+static int reduce_lane_count(struct intel_dp *intel_dp, int current_lane_count)
+{
+   if (current_lane_count > 1)
+   return current_lane_count >> 1;
+
+   return -1;
+}
+
 static int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
-  int link_rate, u8 lane_count)
+  const struct 
intel_crtc_state *crtc_state)
 {
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
-   int index;
+   int new_link_rate;
+   int new_lane_count;
 
/*
 * TODO: Enable fallback on MST links once MST link compute can handle
@@ -1131,36 +1157,32 @@ static int 
intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
return 0;
}
 
-   index = intel_dp_rate_index(intel_dp->common_rates,
-   intel_dp->num_common_rates,
-   link_rate);
-   if (index > 0) {
-   if (intel_dp_is_edp(intel_dp) &&
-   !intel_dp_can_link_train_fallback_for_edp(intel_dp,
- 
intel_dp_common_rate(intel_dp, index - 1),
- lane_count)) {
-   drm_dbg_kms(&i915->drm,
-   "Retrying Link training for eDP with same 
parameters\n");
-   return 0;
-   }
-   intel_dp->link.max_rate = intel_dp_common_rate(intel_dp, index 
- 1);
-   intel_dp->link.max_lane_count = lane_count;
-   } else if (lane_count > 1) {
-   if (intel_dp_is_edp(intel_dp) &&
-   !intel_dp_can_link_train_fallback_for_edp(intel_dp,
- 
intel_dp_max_common_rate(intel_dp),
- lane_count >> 1)) 
{
-   drm_dbg_kms(&i915->drm,
-   "Retrying Link training for eDP with same 
parameters\n");
-   return 0;
-   }
-   intel_dp->link.max_rate = intel_dp_max_common_rate(intel_dp);
-   intel_dp->link.max_lane_count = lane_count >> 1;
-   } else {
+   new_lane_count = crtc_state->lane_count;
+   new_link_rate = reduce_link_rate(intel_dp, crtc_state->port_clock);
+   if (new_link_rate < 0) {
+   new_lane_count = reduce_lane_count(intel_dp, 
crtc_state->lane_count);
+   new_link_rate = intel_dp_max_common_rate(intel_dp);
+   }
+
+   if (new_lane_count < 0) {
drm_err(&i915->drm, "Link Training Unsuccessful\n");
return -1;
}
 
+   if (intel_dp_is_edp(intel_dp) &&
+   !intel_dp_can_link_train_fallback_for_edp(intel_dp, new_link_rate, 
new_lane_count)) {
+   drm_dbg_kms(&i915->drm,
+   "Retrying Link training for eDP with same 
parameters\n");
+   return 0;
+   }
+
+   drm_dbg_kms(&i915->drm, "Reducing link parameters from %dx%d to 
%dx%d\n",
+   crtc_state->lane_count, crtc_state->port_clock,
+   new_lane_count, new_link_rate);
+
+   intel_dp->link.max_rate = new_link_rate;
+   intel_dp->link.max_lane_count = new_lane_count;
+
return 0;
 }
 
@@ -1178,9 +1200,7 @@ static void 
intel_dp_schedule_fallback_link_training(struct intel_dp *intel_dp,
lt_dbg(intel_dp, DP_PHY_DPRX,
   "Link Train

[PATCH v2 12/21] drm/i915/dp: Use check link state work in the detect handler

2024-05-20 Thread Imre Deak
Simplify things by retraining a DP link if a bad link is detected in the
connector detect handler from the encoder's check link state work,
similarly to how this is done after a modeset link training failure.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp.c | 7 ++-
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index ff4ed6bb520d8..70b00e5ae7ad7 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5863,11 +5863,8 @@ intel_dp_detect(struct drm_connector *connector,
 * Some external monitors do not signal loss of link synchronization
 * with an IRQ_HPD, so force a link status check.
 */
-   if (!intel_dp_is_edp(intel_dp)) {
-   ret = intel_dp_retrain_link(encoder, ctx);
-   if (ret)
-   return ret;
-   }
+   if (!intel_dp_is_edp(intel_dp))
+   intel_dp_check_link_state(intel_dp);
 
/*
 * Clearing NACK and defer counts to get their exact values
-- 
2.43.3



[PATCH v2 02/21] drm/i915/dp: Move link train params to a substruct in intel_dp

2024-05-20 Thread Imre Deak
For clarity move the link training parameters updated during link
training based on the pass/fail LT result under a substruct in intel_dp.
This prepares for later patches in this patchset adding similar params
here. Rename intel_dp_reset_max_link_params() to
intel_dp_reset_link_params() to better reflect what state gets reset.

v2: Add the parameters to a more generic link substruct. (Jani)

Cc: Jani Nikula 
Signed-off-by: Imre Deak 
---
 .../drm/i915/display/intel_display_types.h| 13 
 drivers/gpu/drm/i915/display/intel_dp.c   | 30 +--
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 9678c2b157f6f..1e44a23ca2125 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1739,7 +1739,6 @@ struct intel_dp {
u8 lane_count;
u8 sink_count;
bool link_trained;
-   bool reset_link_params;
bool use_max_params;
u8 dpcd[DP_RECEIVER_CAP_SIZE];
u8 psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
@@ -1760,10 +1759,14 @@ struct intel_dp {
/* intersection of source and sink rates */
int num_common_rates;
int common_rates[DP_MAX_SUPPORTED_RATES];
-   /* Max lane count for the current link */
-   int max_link_lane_count;
-   /* Max rate for the current link */
-   int max_link_rate;
+   struct {
+   /* TODO: move the rest of link specific fields to here */
+   /* Max lane count for the current link */
+   int max_lane_count;
+   /* Max rate for the current link */
+   int max_rate;
+   } link;
+   bool reset_link_params;
int mso_link_count;
int mso_pixel_overlap;
/* sink or branch descriptor */
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index c0a3b6d506817..ceedd3ef41946 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -372,13 +372,13 @@ int intel_dp_max_common_lane_count(struct intel_dp 
*intel_dp)
 
 int intel_dp_max_lane_count(struct intel_dp *intel_dp)
 {
-   switch (intel_dp->max_link_lane_count) {
+   switch (intel_dp->link.max_lane_count) {
case 1:
case 2:
case 4:
-   return intel_dp->max_link_lane_count;
+   return intel_dp->link.max_lane_count;
default:
-   MISSING_CASE(intel_dp->max_link_lane_count);
+   MISSING_CASE(intel_dp->link.max_lane_count);
return 1;
}
 }
@@ -644,7 +644,7 @@ static bool intel_dp_link_params_valid(struct intel_dp 
*intel_dp, int link_rate,
 * boot-up.
 */
if (link_rate == 0 ||
-   link_rate > intel_dp->max_link_rate)
+   link_rate > intel_dp->link.max_rate)
return false;
 
if (lane_count == 0 ||
@@ -705,8 +705,8 @@ int intel_dp_get_link_train_fallback_values(struct intel_dp 
*intel_dp,
"Retrying Link training for eDP with same 
parameters\n");
return 0;
}
-   intel_dp->max_link_rate = intel_dp_common_rate(intel_dp, index 
- 1);
-   intel_dp->max_link_lane_count = lane_count;
+   intel_dp->link.max_rate = intel_dp_common_rate(intel_dp, index 
- 1);
+   intel_dp->link.max_lane_count = lane_count;
} else if (lane_count > 1) {
if (intel_dp_is_edp(intel_dp) &&
!intel_dp_can_link_train_fallback_for_edp(intel_dp,
@@ -716,8 +716,8 @@ int intel_dp_get_link_train_fallback_values(struct intel_dp 
*intel_dp,
"Retrying Link training for eDP with same 
parameters\n");
return 0;
}
-   intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
-   intel_dp->max_link_lane_count = lane_count >> 1;
+   intel_dp->link.max_rate = intel_dp_max_common_rate(intel_dp);
+   intel_dp->link.max_lane_count = lane_count >> 1;
} else {
drm_err(&i915->drm, "Link Training Unsuccessful\n");
return -1;
@@ -1382,7 +1382,7 @@ intel_dp_max_link_rate(struct intel_dp *intel_dp)
 {
int len;
 
-   len = intel_dp_common_len_rate_limit(intel_dp, intel_dp->max_link_rate);
+   len = intel_dp_common_len_rate_limit(intel_dp, intel_dp->link.max_rate);
 
return intel_dp_common_rate(intel_dp, len - 1);
 }
@@ -3017,10 +3017,10 @@ void intel_dp_set_link_params(struct intel_dp *intel_dp,
intel_dp->lane_count = lane_count;
 }
 
-static void intel_dp_reset_max_link_params(struct intel_dp *intel_dp)
+static void intel_dp_reset_link_params(struct intel_dp *intel_dp)
 {
-   intel_dp->max_link_lane_count = 
intel_

[PATCH v2 08/21] drm/i915/dp: Reduce link params only after retrying with unchanged params

2024-05-20 Thread Imre Deak
Try to maintain the current link parameters by retrying the link
training with unchanged link parameters before reducing these parameters
(sending an uevent to userspace to retrain the link instead).

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_display_types.h| 2 ++
 drivers/gpu/drm/i915/display/intel_dp.c   | 4 
 drivers/gpu/drm/i915/display/intel_dp_link_training.c | 8 
 3 files changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 9317c1ae04efe..bde518c843468 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1765,6 +1765,8 @@ struct intel_dp {
int max_lane_count;
/* Max rate for the current link */
int max_rate;
+   /* Sequential link training failures after a passing LT */
+   int seq_train_failures;
} link;
bool reset_link_params;
int mso_link_count;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 8da277f0c2735..7c824c5a13346 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2950,6 +2950,7 @@ static void intel_dp_reset_link_params(struct intel_dp 
*intel_dp)
 {
intel_dp->link.max_lane_count = 
intel_dp_max_common_lane_count(intel_dp);
intel_dp->link.max_rate = intel_dp_max_common_rate(intel_dp);
+   intel_dp->link.seq_train_failures = 0;
 }
 
 /* Enable backlight PWM and backlight PP control. */
@@ -5056,6 +5057,9 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
intel_dp->lane_count))
return false;
 
+   if (intel_dp->link.seq_train_failures)
+   return true;
+
/* Retrain if link not ok */
return !intel_dp_link_ok(intel_dp, link_status);
 }
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index ad1fbb150ff90..e804f0b801c02 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1486,10 +1486,13 @@ void intel_dp_start_link_train(struct intel_dp 
*intel_dp,
passed = intel_dp_link_train_all_phys(intel_dp, crtc_state, 
lttpr_count);
 
if (passed) {
+   intel_dp->link.seq_train_failures = 0;
intel_ddi_queue_link_check(dig_port, 2000);
return;
}
 
+   intel_dp->link.seq_train_failures++;
+
/*
 * Ignore the link failure in CI
 *
@@ -1507,6 +1510,11 @@ void intel_dp_start_link_train(struct intel_dp *intel_dp,
return;
}
 
+   if (intel_dp->link.seq_train_failures < 2) {
+   intel_ddi_queue_link_check(dig_port, 0);
+   return;
+   }
+
intel_dp_schedule_fallback_link_training(intel_dp, crtc_state);
 }
 
-- 
2.43.3



[PATCH v2 06/21] drm/i915/dp: Use a commit modeset for link retraining MST links

2024-05-20 Thread Imre Deak
Instead of direct calls to the link train functions, retrain the link
via a commit modeset. The direct call means that the output port will be
disabled/re-enabled while the rest of the pipeline (transcoder) is
active, which doesn't seem to work on MST at least. It leads to
underruns and black screen, presumedly because the transcoder is not
disabled/re-enabled along the port.

Leave switching to a commit modeset on SST for a later patchset, as that
seems to work ok currently (though better to using a commit there too,
due to the suppressed underruns).

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp.c | 25 +++--
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 81e620dd33bb7..120f7b420807b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5147,6 +5147,7 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
struct intel_crtc *crtc;
u8 pipe_mask;
+   bool mst_output = false;
int ret;
 
if (!intel_dp_is_connected(intel_dp))
@@ -5177,6 +5178,11 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state =
to_intel_crtc_state(crtc->base.state);
 
+   if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST)) {
+   mst_output = true;
+   break;
+   }
+
/* Suppress underruns caused by re-training */
intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, 
false);
if (crtc_state->has_pch_encoder)
@@ -5184,16 +5190,23 @@ int intel_dp_retrain_link(struct intel_encoder *encoder,
  
intel_crtc_pch_transcoder(crtc), false);
}
 
+   /* TODO: use a modeset for SST as well. */
+   if (mst_output) {
+   ret = intel_modeset_commit_pipes(dev_priv, pipe_mask, ctx);
+
+   if (ret && ret != -EDEADLK)
+   drm_dbg_kms(&dev_priv->drm,
+   "[ENCODER:%d:%s] link retraining failed: 
%pe\n",
+   encoder->base.base.id, encoder->base.name,
+   ERR_PTR(ret));
+
+   return ret;
+   }
+
for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, crtc, pipe_mask) {
const struct intel_crtc_state *crtc_state =
to_intel_crtc_state(crtc->base.state);
 
-   /* retrain on the MST master transcoder */
-   if (DISPLAY_VER(dev_priv) >= 12 &&
-   intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST) &&
-   !intel_dp_mst_is_master_trans(crtc_state))
-   continue;
-
intel_dp_check_frl_training(intel_dp);
intel_dp_pcon_dsc_configure(intel_dp, crtc_state);
intel_dp_start_link_train(intel_dp, crtc_state);
-- 
2.43.3



[PATCH v2 10/21] drm/i915/dp: Send a link training modeset-retry uevent to all MST connectors

2024-05-20 Thread Imre Deak
Send a modeset-retry uevent to all connectors in the same MST topology
after a link training failure and reduction of the link parameters. This
matches the way the same uevent is sent after a DP tunnel BW allocation
failure.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp.c   | 2 +-
 drivers/gpu/drm/i915/display/intel_dp.h   | 1 -
 drivers/gpu/drm/i915/display/intel_dp_link_training.c | 9 +
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 1f0b7cceea2dc..87f9f12814b93 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2791,7 +2791,7 @@ intel_dp_audio_compute_config(struct intel_encoder 
*encoder,
intel_dp_is_uhbr(pipe_config);
 }
 
-void intel_dp_queue_modeset_retry_work(struct intel_connector *connector)
+static void intel_dp_queue_modeset_retry_work(struct intel_connector 
*connector)
 {
struct drm_i915_private *i915 = to_i915(connector->base.dev);
 
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h 
b/drivers/gpu/drm/i915/display/intel_dp.h
index e7b47e7bcd98b..24777c035e2ad 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -44,7 +44,6 @@ bool intel_dp_limited_color_range(const struct 
intel_crtc_state *crtc_state,
  const struct drm_connector_state *conn_state);
 int intel_dp_min_bpp(enum intel_output_format output_format);
 void intel_dp_init_modeset_retry_work(struct intel_connector *connector);
-void intel_dp_queue_modeset_retry_work(struct intel_connector *connector);
 void
 intel_dp_queue_modeset_retry_for_link(struct intel_atomic_state *state,
  struct intel_encoder *encoder,
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index 4f60daa97407d..97d499e4b6ef7 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1187,10 +1187,11 @@ static int 
intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
return 0;
 }
 
-static void intel_dp_schedule_fallback_link_training(struct intel_dp *intel_dp,
+static void intel_dp_schedule_fallback_link_training(struct intel_atomic_state 
*state,
+struct intel_dp *intel_dp,
 const struct 
intel_crtc_state *crtc_state)
 {
-   struct intel_connector *intel_connector = intel_dp->attached_connector;
+   struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
 
if (!intel_digital_port_connected(&dp_to_dig_port(intel_dp)->base)) {
lt_dbg(intel_dp, DP_PHY_DPRX, "Link Training failed on 
disconnected sink.\n");
@@ -1206,7 +1207,7 @@ static void 
intel_dp_schedule_fallback_link_training(struct intel_dp *intel_dp,
}
 
/* Schedule a Hotplug Uevent to userspace to start modeset */
-   intel_dp_queue_modeset_retry_work(intel_connector);
+   intel_dp_queue_modeset_retry_for_link(state, encoder, crtc_state);
 }
 
 /* Perform the link training on all LTTPRs and the DPRX on a link. */
@@ -1517,7 +1518,7 @@ void intel_dp_start_link_train(struct intel_atomic_state 
*state,
return;
}
 
-   intel_dp_schedule_fallback_link_training(intel_dp, crtc_state);
+   intel_dp_schedule_fallback_link_training(state, intel_dp, crtc_state);
 }
 
 void intel_dp_128b132b_sdp_crc16(struct intel_dp *intel_dp,
-- 
2.43.3



[PATCH v2 05/21] drm/i915: Factor out function to modeset commit a set of pipes

2024-05-20 Thread Imre Deak
Factor out a function to modeset commit a set of pipes, which a later
patch will reuse for DP link retraining.

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 31 +-
 drivers/gpu/drm/i915/display/intel_display.c | 34 
 drivers/gpu/drm/i915/display/intel_display.h |  3 ++
 3 files changed, 38 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
b/drivers/gpu/drm/i915/display/intel_ddi.c
index 3c3fc53376ce3..170ba01786cf8 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4441,35 +4441,6 @@ intel_ddi_init_dp_connector(struct intel_digital_port 
*dig_port)
return connector;
 }
 
-static int modeset_pipe(struct drm_crtc *crtc,
-   struct drm_modeset_acquire_ctx *ctx)
-{
-   struct drm_atomic_state *state;
-   struct drm_crtc_state *crtc_state;
-   int ret;
-
-   state = drm_atomic_state_alloc(crtc->dev);
-   if (!state)
-   return -ENOMEM;
-
-   state->acquire_ctx = ctx;
-   to_intel_atomic_state(state)->internal = true;
-
-   crtc_state = drm_atomic_get_crtc_state(state, crtc);
-   if (IS_ERR(crtc_state)) {
-   ret = PTR_ERR(crtc_state);
-   goto out;
-   }
-
-   crtc_state->connectors_changed = true;
-
-   ret = drm_atomic_commit(state);
-out:
-   drm_atomic_state_put(state);
-
-   return ret;
-}
-
 static int intel_hdmi_reset_link(struct intel_encoder *encoder,
 struct drm_modeset_acquire_ctx *ctx)
 {
@@ -4539,7 +4510,7 @@ static int intel_hdmi_reset_link(struct intel_encoder 
*encoder,
 * would be perfectly happy if were to just reconfigure
 * the SCDC settings on the fly.
 */
-   return modeset_pipe(&crtc->base, ctx);
+   return intel_modeset_commit_pipes(dev_priv, BIT(crtc->pipe), ctx);
 }
 
 static enum intel_hotplug_state
diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index cce1420fb5417..4edb1ede4a1b4 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5569,6 +5569,40 @@ int intel_modeset_all_pipes_late(struct 
intel_atomic_state *state,
return 0;
 }
 
+int intel_modeset_commit_pipes(struct drm_i915_private *i915,
+  u8 pipe_mask,
+  struct drm_modeset_acquire_ctx *ctx)
+{
+   struct drm_atomic_state *state;
+   struct intel_crtc *crtc;
+   int ret;
+
+   state = drm_atomic_state_alloc(&i915->drm);
+   if (!state)
+   return -ENOMEM;
+
+   state->acquire_ctx = ctx;
+   to_intel_atomic_state(state)->internal = true;
+
+   for_each_intel_crtc_in_pipe_mask(&i915->drm, crtc, pipe_mask) {
+   struct intel_crtc_state *crtc_state =
+   intel_atomic_get_crtc_state(state, crtc);
+
+   if (IS_ERR(crtc_state)) {
+   ret = PTR_ERR(crtc_state);
+   goto out;
+   }
+
+   crtc_state->uapi.connectors_changed = true;
+   }
+
+   ret = drm_atomic_commit(state);
+out:
+   drm_atomic_state_put(state);
+
+   return ret;
+}
+
 /*
  * This implements the workaround described in the "notes" section of the mode
  * set sequence documentation. When going from no pipes or single pipe to
diff --git a/drivers/gpu/drm/i915/display/intel_display.h 
b/drivers/gpu/drm/i915/display/intel_display.h
index 56d1c0e3e62cd..dfdc42cef8723 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -537,6 +537,9 @@ int intel_modeset_pipes_in_mask_early(struct 
intel_atomic_state *state,
  const char *reason, u8 pipe_mask);
 int intel_modeset_all_pipes_late(struct intel_atomic_state *state,
 const char *reason);
+int intel_modeset_commit_pipes(struct drm_i915_private *i915,
+  u8 pipe_mask,
+  struct drm_modeset_acquire_ctx *ctx);
 void intel_modeset_get_crtc_power_domains(struct intel_crtc_state *crtc_state,
  struct intel_power_domain_mask 
*old_domains);
 void intel_modeset_put_crtc_power_domains(struct intel_crtc *crtc,
-- 
2.43.3



[PATCH v2 03/21] drm/i915/dp: Move link train fallback to intel_dp_link_training.c

2024-05-20 Thread Imre Deak
Move the functions used to reduce the link parameters during link
training to intel_dp_link_training.c .

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp.c   | 76 +--
 drivers/gpu/drm/i915/display/intel_dp.h   |  4 +-
 .../drm/i915/display/intel_dp_link_training.c | 73 ++
 3 files changed, 77 insertions(+), 76 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index ceedd3ef41946..81e620dd33bb7 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -329,7 +329,7 @@ static int intel_dp_common_len_rate_limit(const struct 
intel_dp *intel_dp,
   intel_dp->num_common_rates, max_rate);
 }
 
-static int intel_dp_common_rate(struct intel_dp *intel_dp, int index)
+int intel_dp_common_rate(struct intel_dp *intel_dp, int index)
 {
if (drm_WARN_ON(&dp_to_i915(intel_dp)->drm,
index < 0 || index >= intel_dp->num_common_rates))
@@ -604,7 +604,7 @@ static int intersect_rates(const int *source_rates, int 
source_len,
 }
 
 /* return index of rate in rates array, or -1 if not found */
-static int intel_dp_rate_index(const int *rates, int len, int rate)
+int intel_dp_rate_index(const int *rates, int len, int rate)
 {
int i;
 
@@ -654,78 +654,6 @@ static bool intel_dp_link_params_valid(struct intel_dp 
*intel_dp, int link_rate,
return true;
 }
 
-static bool intel_dp_can_link_train_fallback_for_edp(struct intel_dp *intel_dp,
-int link_rate,
-u8 lane_count)
-{
-   /* FIXME figure out what we actually want here */
-   const struct drm_display_mode *fixed_mode =
-   intel_panel_preferred_fixed_mode(intel_dp->attached_connector);
-   int mode_rate, max_rate;
-
-   mode_rate = intel_dp_link_required(fixed_mode->clock, 18);
-   max_rate = intel_dp_max_link_data_rate(intel_dp, link_rate, lane_count);
-   if (mode_rate > max_rate)
-   return false;
-
-   return true;
-}
-
-int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
-   int link_rate, u8 lane_count)
-{
-   struct drm_i915_private *i915 = dp_to_i915(intel_dp);
-   int index;
-
-   /*
-* TODO: Enable fallback on MST links once MST link compute can handle
-* the fallback params.
-*/
-   if (intel_dp->is_mst) {
-   drm_err(&i915->drm, "Link Training Unsuccessful\n");
-   return -1;
-   }
-
-   if (intel_dp_is_edp(intel_dp) && !intel_dp->use_max_params) {
-   drm_dbg_kms(&i915->drm,
-   "Retrying Link training for eDP with max 
parameters\n");
-   intel_dp->use_max_params = true;
-   return 0;
-   }
-
-   index = intel_dp_rate_index(intel_dp->common_rates,
-   intel_dp->num_common_rates,
-   link_rate);
-   if (index > 0) {
-   if (intel_dp_is_edp(intel_dp) &&
-   !intel_dp_can_link_train_fallback_for_edp(intel_dp,
- 
intel_dp_common_rate(intel_dp, index - 1),
- lane_count)) {
-   drm_dbg_kms(&i915->drm,
-   "Retrying Link training for eDP with same 
parameters\n");
-   return 0;
-   }
-   intel_dp->link.max_rate = intel_dp_common_rate(intel_dp, index 
- 1);
-   intel_dp->link.max_lane_count = lane_count;
-   } else if (lane_count > 1) {
-   if (intel_dp_is_edp(intel_dp) &&
-   !intel_dp_can_link_train_fallback_for_edp(intel_dp,
- 
intel_dp_max_common_rate(intel_dp),
- lane_count >> 1)) 
{
-   drm_dbg_kms(&i915->drm,
-   "Retrying Link training for eDP with same 
parameters\n");
-   return 0;
-   }
-   intel_dp->link.max_rate = intel_dp_max_common_rate(intel_dp);
-   intel_dp->link.max_lane_count = lane_count >> 1;
-   } else {
-   drm_err(&i915->drm, "Link Training Unsuccessful\n");
-   return -1;
-   }
-
-   return 0;
-}
-
 u32 intel_dp_mode_to_fec_clock(u32 mode_clock)
 {
return div_u64(mul_u32_u32(mode_clock, DP_DSC_FEC_OVERHEAD_FACTOR),
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h 
b/drivers/gpu/drm/i915/display/intel_dp.h
index aad2223df2a35..e7b47e7bcd98b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@

[PATCH v2 00/21] drm/i915/dp_mst: Enable link training fallback

2024-05-20 Thread Imre Deak
This is v2 of [1], addressing the feedback comments from Jani and Ville:

- Use a more generic 'link' substruct instead of 'link_train'. (Patch 2)
- Add the debugfs entries from intel_dp_link_training.c . (Patch 17-21)
- Add the link state check work to intel_digital_port instead of
  intel_dp, to allow using it later for HDMI. (Patch 7)
- Keep using the atomic state to look up MST connectors, avoiding the
  access to any object's current state. (Patch 9)
- Add a separate debugfs entry to get the max link rate/lane count.
  (Patch 18)

[1] https://lore.kernel.org/all/20240514191418.2863344-1-imre.d...@intel.com

Cc: Jani Nikula 
Cc: Ville Syrjälä 

Imre Deak (21):
  drm/i915/dp_mst: Align TUs to avoid splitting symbols across MTPs
  drm/i915/dp: Move link train params to a substruct in intel_dp
  drm/i915/dp: Move link train fallback to intel_dp_link_training.c
  drm/i915/dp: Sanitize intel_dp_get_link_train_fallback_values()
  drm/i915: Factor out function to modeset commit a set of pipes
  drm/i915/dp: Use a commit modeset for link retraining MST links
  drm/i915/dp: Recheck link state after modeset
  drm/i915/dp: Reduce link params only after retrying with unchanged
params
  drm/i915/dp: Pass atomic state to link training function
  drm/i915/dp: Send a link training modeset-retry uevent to all MST
connectors
  drm/i915/dp: Use check link state work in the hotplug handler
  drm/i915/dp: Use check link state work in the detect handler
  drm/i915/dp: Use check link state work in the HPD IRQ handler
  drm/i915/dp: Disable link retraining after the last fallback step
  drm/i915/dp_mst: Reset intel_dp->link_trained during disabling
  drm/i915/dp_mst: Enable link training fallback for MST
  drm/i915/dp: Add debugfs entries to set a target link rate/lane count
  drm/i915/dp: Add debugfs entries to get the max link rate/lane count
  drm/i915/dp: Add debugfs entry to force link training failure
  drm/i915/dp: Add debugfs entry to force link retrain
  drm/i915/dp: Add debugfs entry for link training info

 drivers/gpu/drm/i915/display/g4x_dp.c |  29 +-
 drivers/gpu/drm/i915/display/intel_ddi.c  |  64 +-
 drivers/gpu/drm/i915/display/intel_ddi.h  |   4 +
 drivers/gpu/drm/i915/display/intel_display.c  |  34 ++
 drivers/gpu/drm/i915/display/intel_display.h  |   3 +
 .../drm/i915/display/intel_display_debugfs.c  |   2 +
 .../drm/i915/display/intel_display_types.h|  26 +-
 drivers/gpu/drm/i915/display/intel_dp.c   | 241 
 drivers/gpu/drm/i915/display/intel_dp.h   |   8 +-
 .../drm/i915/display/intel_dp_link_training.c | 545 +-
 .../drm/i915/display/intel_dp_link_training.h |   8 +-
 drivers/gpu/drm/i915/display/intel_dp_mst.c   |  30 +-
 12 files changed, 805 insertions(+), 189 deletions(-)

-- 
2.43.3



[PATCH v2 01/21] drm/i915/dp_mst: Align TUs to avoid splitting symbols across MTPs

2024-05-20 Thread Imre Deak
Symbols consisting of multiple (4) TU timeslots may get split across
MTPs when using 2 or 1 link lanes. Avoid this, as required by Bspec by
aligning the allocated TUs to 2 when using 2 lanes and 4 when using 1
lane.

Atm, we also have to align the PBNs used to allocate BW along the MST
path, since DRM core keeps track of its own TU value, derived from the
PBN and that TU value must match what the driver calculates.

On some platforms the alignment is only required on 8b/10b links, a
follow-up patch will remove the limitation for those.

Bspec: 49266, 68922

Signed-off-by: Imre Deak 
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 27 ++---
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c 
b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index c772ba19c5477..c9c5d235744ab 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -207,6 +207,7 @@ static int intel_dp_mst_find_vcpi_slots_for_bpp(struct 
intel_encoder *encoder,
int remote_bw_overhead;
int link_bpp_x16;
int remote_tu;
+   fixed20_12 pbn;
 
drm_dbg_kms(&i915->drm, "Trying bpp %d\n", bpp);
 
@@ -237,11 +238,29 @@ static int intel_dp_mst_find_vcpi_slots_for_bpp(struct 
intel_encoder *encoder,
 * crtc_state->dp_m_n.tu), provided that the driver doesn't
 * enable SSC on the corresponding link.
 */
-   crtc_state->pbn = 
intel_dp_mst_calc_pbn(adjusted_mode->crtc_clock,
-   link_bpp_x16,
-   remote_bw_overhead);
+   pbn.full = 
dfixed_const(intel_dp_mst_calc_pbn(adjusted_mode->crtc_clock,
+ link_bpp_x16,
+ 
remote_bw_overhead));
+   remote_tu = DIV_ROUND_UP(pbn.full, mst_state->pbn_div.full);
 
-   remote_tu = DIV_ROUND_UP(dfixed_const(crtc_state->pbn), 
mst_state->pbn_div.full);
+   /*
+* Aligning the TUs ensures that symbols consisting of multiple
+* (4) symbol cycles don't get split between two consecutive
+* MTPs, as required by Bspec.
+* TODO: remove the alignment restriction for 128b/132b links
+* on some platforms, where Bspec allows this.
+*/
+   remote_tu = ALIGN(remote_tu, 4 / crtc_state->lane_count);
+
+   /*
+* Also align PBNs accordingly, since MST core will derive its
+* own copy of TU from the PBN in 
drm_dp_atomic_find_time_slots().
+* The above comment about the difference between the PBN
+* allocated for the whole path and the TUs allocated for the
+* first branch device's link also applies here.
+*/
+   pbn.full = remote_tu * mst_state->pbn_div.full;
+   crtc_state->pbn = dfixed_trunc(pbn);
 
drm_WARN_ON(&i915->drm, remote_tu < crtc_state->dp_m_n.tu);
crtc_state->dp_m_n.tu = remote_tu;
-- 
2.43.3



✓ Fi.CI.BAT: success for drm/i915/dpt: Make DPT object unshrinkable (rev2)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915/dpt: Make DPT object unshrinkable (rev2)
URL   : https://patchwork.freedesktop.org/series/133818/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14785 -> Patchwork_133818v2


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/index.html

Participating hosts (41 -> 42)
--

  Additional (2): fi-kbl-8809g fi-bsw-n3050 
  Missing(1): bat-arls-3 

Known issues


  Here are the changes found in Patchwork_133818v2 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@gem_huc_copy@huc-copy:
- fi-kbl-8809g:   NOTRUN -> [SKIP][1] ([i915#2190])
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/fi-kbl-8809g/igt@gem_huc_c...@huc-copy.html

  * igt@gem_lmem_swapping@basic@lmem0:
- bat-dg2-8:  [PASS][2] -> [FAIL][3] ([i915#10378])
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@gem_lmem_swapping@ba...@lmem0.html
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/bat-dg2-8/igt@gem_lmem_swapping@ba...@lmem0.html

  * igt@gem_lmem_swapping@parallel-random-engines:
- fi-kbl-8809g:   NOTRUN -> [SKIP][4] ([i915#4613]) +3 other tests skip
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/fi-kbl-8809g/igt@gem_lmem_swapp...@parallel-random-engines.html

  * igt@i915_pm_rpm@module-reload:
- fi-kbl-7567u:   [PASS][5] -> [DMESG-WARN][6] ([i915#1982])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/fi-kbl-7567u/igt@i915_pm_...@module-reload.html
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/fi-kbl-7567u/igt@i915_pm_...@module-reload.html

  * igt@kms_dsc@dsc-basic:
- fi-kbl-8809g:   NOTRUN -> [SKIP][7] +30 other tests skip
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/fi-kbl-8809g/igt@kms_...@dsc-basic.html

  * igt@kms_psr@psr-primary-mmap-gtt:
- fi-bsw-n3050:   NOTRUN -> [SKIP][8] +19 other tests skip
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/fi-bsw-n3050/igt@kms_...@psr-primary-mmap-gtt.html

  
 Possible fixes 

  * igt@i915_module_load@load:
- bat-dg2-8:  [DMESG-WARN][9] ([i915#10014]) -> [PASS][10]
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@i915_module_l...@load.html
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/bat-dg2-8/igt@i915_module_l...@load.html

  * igt@i915_selftest@live@gt_timelines:
- bat-arls-2: [INCOMPLETE][11] -> [PASS][12]
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-2/igt@i915_selftest@live@gt_timelines.html
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/bat-arls-2/igt@i915_selftest@live@gt_timelines.html

  
  [i915#10014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10014
  [i915#10378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10378
  [i915#1982]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1982
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613


Build changes
-

  * Linux: CI_DRM_14785 -> Patchwork_133818v2

  CI-20190529: 20190529
  CI_DRM_14785: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7863: fa1dc232d5d840532521df8a6fcf1fe82c514304 @ 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_133818v2: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v2/index.html


✗ Fi.CI.SPARSE: warning for drm/i915/dpt: Make DPT object unshrinkable (rev2)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915/dpt: Make DPT object unshrinkable (rev2)
URL   : https://patchwork.freedesktop.org/series/133818/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.




Re: [PATCH 2/5] drm/i915: Implement basic functions for ultrajoiner support

2024-05-20 Thread Ville Syrjälä
On Mon, May 20, 2024 at 10:38:36AM +0300, Stanislav Lisovskiy wrote:
> Lets implement or change basic functions required for ultrajoiner
> support from atomic commit/modesetting point of view.
> 
> Signed-off-by: Stanislav Lisovskiy 
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 66 +---
>  1 file changed, 56 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
> b/drivers/gpu/drm/i915/display/intel_display.c
> index c74721188e59..c390b79a43d6 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -242,33 +242,65 @@ is_trans_port_sync_mode(const struct intel_crtc_state 
> *crtc_state)
>   is_trans_port_sync_slave(crtc_state);
>  }
>  
> -static enum pipe joiner_master_pipe(const struct intel_crtc_state 
> *crtc_state)
> +static u8 joiner_master_pipes(const struct intel_crtc_state *crtc_state)
>  {
> - return ffs(crtc_state->joiner_pipes) - 1;
> + return BIT(PIPE_A) | BIT(PIPE_C);

Not a fan of the hardcoded pipes.

We could just do something like 
joiner_pipes & ((BIT(2) | BIT(0)) << joiner_master_pipe())
or some variant of that.

> +}
> +
> +static u8 joiner_primary_master_pipes(const struct intel_crtc_state 
> *crtc_state)
> +{
> + return BIT(PIPE_A);

This is just the joiner_master_pipe() we already have.

>  }
>  
>  u8 intel_crtc_joiner_slave_pipes(const struct intel_crtc_state *crtc_state)
>  {
> - if (crtc_state->joiner_pipes)
> - return crtc_state->joiner_pipes & 
> ~BIT(joiner_master_pipe(crtc_state));
> + if (intel_is_ultrajoiner(crtc_state))
> + return crtc_state->joiner_pipes & 
> ~joiner_primary_master_pipes(crtc_state);
> + else if (intel_is_bigjoiner(crtc_state))
> + return crtc_state->joiner_pipes & 
> ~joiner_master_pipes(crtc_state);
>   else
>   return 0;

I don't see why this should make any distinction between bigjoiner
and ultrajoiner.

Either it returns everything that isn't the overall master, or it
returns just all the bigjoiner slave pipes. Which one we want
depends on the use case I guess. So we might need both variants.

>  }
>  
> -bool intel_crtc_is_joiner_slave(const struct intel_crtc_state *crtc_state)
> +bool intel_crtc_is_bigjoiner_slave(const struct intel_crtc_state *crtc_state)
>  {
>   struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
>  
>   return crtc_state->joiner_pipes &&
> - crtc->pipe != joiner_master_pipe(crtc_state);
> + !(BIT(crtc->pipe) & joiner_master_pipes(crtc_state));

I'd probably add a joiner_slave_pipes() so that the logic is less
convoluted.

But I think first we need a solid agreement on the terminology,
and stick to it consistently.

Perhaps we need names for?
- the single master within the overall set of joined pipes
  (be it ultrajoiner master or the bigjoiner/uncompressed
   joiner master when ultrajoiner isn't used).
  Just call this joiner_master perhaps? Or perhaps just call it
  ultrajoiner_master but document that it is valid to use it
  also for the non-ultrajoiner cases.
- every other pipe in the set, ie. the inverse of above
  Should be just {ultra,}joiner_slaves to match the
  above I guess? Do we actually even need this? Not sure.

And the for the modeset sequencing we would perhaps need:
- all bigjoiner masters within the entire set of joined pipes
- all bigjoiner slaves within the entire set of joined pipes
  (inverse of the above)

The one slight snag here is that the "bigjoiner" name is
a bit incorrect for uncompressed joiner, but unless we want to
come up with some other name for these then I guess we'll just
have to live with it.

The other option is we try to come up with some generic names
for the two levels of pipe roles.

-- 
Ville Syrjälä
Intel


✓ Fi.CI.BAT: success for drm/i915: Plane register cleanups (rev3)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915: Plane register cleanups (rev3)
URL   : https://patchwork.freedesktop.org/series/133701/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14785 -> Patchwork_133701v3


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/index.html

Participating hosts (41 -> 41)
--

  Additional (1): fi-bsw-n3050 
  Missing(1): bat-arls-1 

Possible new issues
---

  Here are the unknown changes that may have been introduced in 
Patchwork_133701v3:

### IGT changes ###

 Suppressed 

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12@pipe-b-edp-1:
- {bat-twl-1}:[PASS][1] -> [DMESG-WARN][2] +1 other test dmesg-warn
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-twl-1/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-n...@pipe-b-edp-1.html
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/bat-twl-1/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-n...@pipe-b-edp-1.html

  
Known issues


  Here are the changes found in Patchwork_133701v3 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@gem_lmem_swapping@basic@lmem0:
- bat-dg2-9:  [PASS][3] -> [FAIL][4] ([i915#10378])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-9/igt@gem_lmem_swapping@ba...@lmem0.html
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/bat-dg2-9/igt@gem_lmem_swapping@ba...@lmem0.html

  * igt@gem_lmem_swapping@random-engines:
- fi-bsw-n3050:   NOTRUN -> [SKIP][5] +19 other tests skip
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/fi-bsw-n3050/igt@gem_lmem_swapp...@random-engines.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12@pipe-b-edp-1:
- bat-mtlp-8: [PASS][6] -> [DMESG-WARN][7] ([i915#9157]) +1 other 
test dmesg-warn
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-mtlp-8/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-n...@pipe-b-edp-1.html
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/bat-mtlp-8/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-n...@pipe-b-edp-1.html

  
 Possible fixes 

  * igt@i915_module_load@load:
- bat-dg2-8:  [DMESG-WARN][8] ([i915#10014]) -> [PASS][9]
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@i915_module_l...@load.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/bat-dg2-8/igt@i915_module_l...@load.html

  * igt@i915_selftest@live@gt_timelines:
- bat-arls-2: [INCOMPLETE][10] -> [PASS][11]
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-2/igt@i915_selftest@live@gt_timelines.html
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/bat-arls-2/igt@i915_selftest@live@gt_timelines.html

  
  {name}: This element is suppressed. This means it is ignored when computing
  the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10014
  [i915#10378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10378
  [i915#9157]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9157


Build changes
-

  * Linux: CI_DRM_14785 -> Patchwork_133701v3

  CI-20190529: 20190529
  CI_DRM_14785: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7863: fa1dc232d5d840532521df8a6fcf1fe82c514304 @ 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_133701v3: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133701v3/index.html


[PATCH 3/3] drm/xe: Cleanup xe_mmio.h

2024-05-20 Thread Michal Wajdeczko
We don't need  include since commit 5c09bd6ccd41
("drm/xe/mmio: Move xe_mmio_wait32() to xe_mmio.c").

We don't need  include since commit
54c659660d63 ("drm/xe: Make xe_mmio_read|write() functions non-
inline").

And since commit 924e6a9789a0 ("drm/xe/uapi: Remove MMIO ioctl")
we don't need forward declarations of drm_device and drm_file.

Signed-off-by: Michal Wajdeczko 
---
 drivers/gpu/drm/xe/xe_mmio.c | 7 +--
 drivers/gpu/drm/xe/xe_mmio.h | 9 +
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 05edab0e085d..548dc37e5893 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -3,10 +3,12 @@
  * Copyright © 2021-2023 Intel Corporation
  */
 
-#include 
-
 #include "xe_mmio.h"
 
+#include 
+#include 
+#include 
+
 #include 
 #include 
 
@@ -19,6 +21,7 @@
 #include "xe_ggtt.h"
 #include "xe_gt.h"
 #include "xe_gt_mcr.h"
+#include "xe_gt_printk.h"
 #include "xe_macros.h"
 #include "xe_module.h"
 #include "xe_sriov.h"
diff --git a/drivers/gpu/drm/xe/xe_mmio.h b/drivers/gpu/drm/xe/xe_mmio.h
index 445ec6a0753e..9ef7deecf38f 100644
--- a/drivers/gpu/drm/xe/xe_mmio.h
+++ b/drivers/gpu/drm/xe/xe_mmio.h
@@ -6,17 +6,10 @@
 #ifndef _XE_MMIO_H_
 #define _XE_MMIO_H_
 
-#include 
-#include 
-
-#include "regs/xe_reg_defs.h"
-#include "xe_device_types.h"
-#include "xe_gt_printk.h"
 #include "xe_gt_types.h"
 
-struct drm_device;
-struct drm_file;
 struct xe_device;
+struct xe_reg;
 
 #define LMEM_BAR   2
 
-- 
2.43.0



[PATCH 2/3] drm/xe: Don't rely on indirect includes from xe_mmio.h

2024-05-20 Thread Michal Wajdeczko
These compilation units use udelay() or some GT oriented printk
functions without explicitly including proper header files, and
relying on #includes from the xe_mmio.h instead. Fix that.

Signed-off-by: Michal Wajdeczko 
---
 drivers/gpu/drm/xe/xe_device.c | 2 ++
 drivers/gpu/drm/xe/xe_gsc.c| 2 ++
 drivers/gpu/drm/xe/xe_gt_ccs_mode.c| 1 +
 drivers/gpu/drm/xe/xe_guc_ads.c| 1 +
 drivers/gpu/drm/xe/xe_huc.c| 2 ++
 drivers/gpu/drm/xe/xe_mocs.c   | 1 +
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c | 1 +
 drivers/gpu/drm/xe/xe_uc_fw.c  | 1 +
 8 files changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 8da90934c900..28a4e0c3b1fe 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -5,6 +5,7 @@
 
 #include "xe_device.h"
 
+#include 
 #include 
 
 #include 
@@ -33,6 +34,7 @@
 #include "xe_gsc_proxy.h"
 #include "xe_gt.h"
 #include "xe_gt_mcr.h"
+#include "xe_gt_printk.h"
 #include "xe_hwmon.h"
 #include "xe_irq.h"
 #include "xe_memirq.h"
diff --git a/drivers/gpu/drm/xe/xe_gsc.c b/drivers/gpu/drm/xe/xe_gsc.c
index 8cc6420a9e7f..80a61934decc 100644
--- a/drivers/gpu/drm/xe/xe_gsc.c
+++ b/drivers/gpu/drm/xe/xe_gsc.c
@@ -5,6 +5,8 @@
 
 #include "xe_gsc.h"
 
+#include 
+
 #include 
 
 #include 
diff --git a/drivers/gpu/drm/xe/xe_gt_ccs_mode.c 
b/drivers/gpu/drm/xe/xe_gt_ccs_mode.c
index a34c9a24dafc..f90cf679c5d7 100644
--- a/drivers/gpu/drm/xe/xe_gt_ccs_mode.c
+++ b/drivers/gpu/drm/xe/xe_gt_ccs_mode.c
@@ -9,6 +9,7 @@
 #include "xe_assert.h"
 #include "xe_gt.h"
 #include "xe_gt_ccs_mode.h"
+#include "xe_gt_printk.h"
 #include "xe_gt_sysfs.h"
 #include "xe_mmio.h"
 
diff --git a/drivers/gpu/drm/xe/xe_guc_ads.c b/drivers/gpu/drm/xe/xe_guc_ads.c
index 9c33cca4e370..1c60b685dbc6 100644
--- a/drivers/gpu/drm/xe/xe_guc_ads.c
+++ b/drivers/gpu/drm/xe/xe_guc_ads.c
@@ -16,6 +16,7 @@
 #include "xe_bo.h"
 #include "xe_gt.h"
 #include "xe_gt_ccs_mode.h"
+#include "xe_gt_printk.h"
 #include "xe_guc.h"
 #include "xe_guc_ct.h"
 #include "xe_hw_engine.h"
diff --git a/drivers/gpu/drm/xe/xe_huc.c b/drivers/gpu/drm/xe/xe_huc.c
index 39a484a57585..b039ff49341b 100644
--- a/drivers/gpu/drm/xe/xe_huc.c
+++ b/drivers/gpu/drm/xe/xe_huc.c
@@ -5,6 +5,8 @@
 
 #include "xe_huc.h"
 
+#include 
+
 #include 
 
 #include "abi/gsc_pxp_commands_abi.h"
diff --git a/drivers/gpu/drm/xe/xe_mocs.c b/drivers/gpu/drm/xe/xe_mocs.c
index f04754ad911b..de3f2d3f1b04 100644
--- a/drivers/gpu/drm/xe/xe_mocs.c
+++ b/drivers/gpu/drm/xe/xe_mocs.c
@@ -12,6 +12,7 @@
 #include "xe_force_wake.h"
 #include "xe_gt.h"
 #include "xe_gt_mcr.h"
+#include "xe_gt_printk.h"
 #include "xe_mmio.h"
 #include "xe_platform_types.h"
 #include "xe_pm.h"
diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c 
b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
index f77367329760..64592a8e527b 100644
--- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
@@ -18,6 +18,7 @@
 #include "xe_bo.h"
 #include "xe_device.h"
 #include "xe_gt.h"
+#include "xe_gt_printk.h"
 #include "xe_mmio.h"
 #include "xe_res_cursor.h"
 #include "xe_sriov.h"
diff --git a/drivers/gpu/drm/xe/xe_uc_fw.c b/drivers/gpu/drm/xe/xe_uc_fw.c
index ed819f1df888..12346645a8e5 100644
--- a/drivers/gpu/drm/xe/xe_uc_fw.c
+++ b/drivers/gpu/drm/xe/xe_uc_fw.c
@@ -14,6 +14,7 @@
 #include "xe_force_wake.h"
 #include "xe_gsc.h"
 #include "xe_gt.h"
+#include "xe_gt_printk.h"
 #include "xe_map.h"
 #include "xe_mmio.h"
 #include "xe_module.h"
-- 
2.43.0



[PATCH 0/3] drm/xe: Cleanup xe_mmio.h

2024-05-20 Thread Michal Wajdeczko
Unfortunately, this is cross i915/Xe series.

Cc: Jani Nikula 
Cc: Lucas De Marchi 

Michal Wajdeczko (3):
  drm/i915/display: Add missing include to intel_vga.c
  drm/xe: Don't rely on indirect includes from xe_mmio.h
  drm/xe: Cleanup xe_mmio.h

 drivers/gpu/drm/i915/display/intel_vga.c | 1 +
 drivers/gpu/drm/xe/xe_device.c   | 2 ++
 drivers/gpu/drm/xe/xe_gsc.c  | 2 ++
 drivers/gpu/drm/xe/xe_gt_ccs_mode.c  | 1 +
 drivers/gpu/drm/xe/xe_guc_ads.c  | 1 +
 drivers/gpu/drm/xe/xe_huc.c  | 2 ++
 drivers/gpu/drm/xe/xe_mmio.c | 7 +--
 drivers/gpu/drm/xe/xe_mmio.h | 9 +
 drivers/gpu/drm/xe/xe_mocs.c | 1 +
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c   | 1 +
 drivers/gpu/drm/xe/xe_uc_fw.c| 1 +
 11 files changed, 18 insertions(+), 10 deletions(-)

-- 
2.43.0



[PATCH 1/3] drm/i915/display: Add missing include to intel_vga.c

2024-05-20 Thread Michal Wajdeczko
This compilation unit uses udelay() function without including
it's header file. Fix that to break dependency on other code.

Signed-off-by: Michal Wajdeczko 
Cc: Jani Nikula 
---
 drivers/gpu/drm/i915/display/intel_vga.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/i915/display/intel_vga.c 
b/drivers/gpu/drm/i915/display/intel_vga.c
index 4b98833bfa8c..0b5916c15307 100644
--- a/drivers/gpu/drm/i915/display/intel_vga.c
+++ b/drivers/gpu/drm/i915/display/intel_vga.c
@@ -3,6 +3,7 @@
  * Copyright © 2019 Intel Corporation
  */
 
+#include 
 #include 
 
 #include 
-- 
2.43.0



✗ Fi.CI.SPARSE: warning for drm/i915: Plane register cleanups (rev3)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915: Plane register cleanups (rev3)
URL   : https://patchwork.freedesktop.org/series/133701/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.




✗ Fi.CI.CHECKPATCH: warning for drm/i915: Plane register cleanups (rev3)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915: Plane register cleanups (rev3)
URL   : https://patchwork.freedesktop.org/series/133701/
State : warning

== Summary ==

Error: dim checkpatch failed
9638afbf50ae drm/i915: Add skl+ plane name aliases to enum plane_id
4d3ce0118a4b drm/i915: Clean up the cursor register defines
49ffeb900e72 drm/i915: Add separate define for SEL_FETCH_CUR_CTL()
e5eefbbe6b08 drm/i915: Simplify PIPESRC_ERLY_TPT definition
-:55: WARNING:LONG_LINE: line length of 106 exceeds 100 columns
#55: FILE: drivers/gpu/drm/i915/display/intel_psr_regs.h:256:
+#define PIPE_SRCSZ_ERLY_TPT(pipe)  _MMIO_PIPE((pipe), 
_PIPE_SRCSZ_ERLY_TPT_A, _PIPE_SRCSZ_ERLY_TPT_B)

total: 0 errors, 1 warnings, 0 checks, 26 lines checked
49bf1f81d37a drm/i915: Rename selective fetch plane registers
26034ecefc36 drm/i915: Define SEL_FETCH_PLANE registers via PICK_EVEN_2RANGES()
-:90: WARNING:LONG_LINE: line length of 105 exceeds 100 columns
#90: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:20:
+#define _SEL_FETCH(pipe, plane, reg_1_a, reg_1_b, reg_2_a, reg_2_b, reg_5_a, 
reg_5_b, reg_6_a, reg_6_b) \

-:90: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'pipe' - possible 
side-effects?
#90: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:20:
+#define _SEL_FETCH(pipe, plane, reg_1_a, reg_1_b, reg_2_a, reg_2_b, reg_5_a, 
reg_5_b, reg_6_a, reg_6_b) \
+   _PICK_EVEN_2RANGES((plane), PLANE_5, \
+  _PIPE((pipe), (reg_1_a), (reg_1_b)), \
+  _PIPE((pipe), (reg_2_a), (reg_2_b)), \
+  _PIPE((pipe), (reg_5_a), (reg_5_b)), \
+  _PIPE((pipe), (reg_6_a), (reg_6_b)))

-:96: WARNING:LONG_LINE: line length of 110 exceeds 100 columns
#96: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:26:
+#define _MMIO_SEL_FETCH(pipe, plane, reg_1_a, reg_1_b, reg_2_a, reg_2_b, 
reg_5_a, reg_5_b, reg_6_a, reg_6_b) \

-:117: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#117: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:390:
+   
_SEL_FETCH_PLANE_CTL_1_A, _SEL_FETCH_PLANE_CTL_1_B, \

-:118: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#118: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:391:
+   
_SEL_FETCH_PLANE_CTL_2_A, _SEL_FETCH_PLANE_CTL_2_B, \

-:119: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#119: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:392:
+   
_SEL_FETCH_PLANE_CTL_5_A, _SEL_FETCH_PLANE_CTL_5_B, \

-:120: WARNING:LONG_LINE: line length of 115 exceeds 100 columns
#120: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:393:
+   
_SEL_FETCH_PLANE_CTL_6_A, _SEL_FETCH_PLANE_CTL_6_B)

-:132: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#132: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:405:
+   
_SEL_FETCH_PLANE_POS_1_A, _SEL_FETCH_PLANE_POS_1_B, \

-:133: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#133: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:406:
+   
_SEL_FETCH_PLANE_POS_2_A, _SEL_FETCH_PLANE_POS_2_B, \

-:134: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#134: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:407:
+   
_SEL_FETCH_PLANE_POS_5_A, _SEL_FETCH_PLANE_POS_5_B, \

-:135: WARNING:LONG_LINE: line length of 115 exceeds 100 columns
#135: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:408:
+   
_SEL_FETCH_PLANE_POS_6_A, _SEL_FETCH_PLANE_POS_6_B)

-:146: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#146: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:419:
+   
_SEL_FETCH_PLANE_POS_1_A, _SEL_FETCH_PLANE_POS_1_B, \

-:147: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#147: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:420:
+   
_SEL_FETCH_PLANE_POS_2_A, _SEL_FETCH_PLANE_POS_2_B, \

-:148: WARNING:LONG_LINE: line length of 117 exceeds 100 columns
#148: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:421:
+   
_SEL_FETCH_PLANE_POS_5_A, _SEL_FETCH_PLANE_POS_5_B, \

-:149: WARNING:LONG_LINE: line length of 115 exceeds 100 columns
#149: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:422:
+   
_SEL_FETCH_PLANE_POS

✓ Fi.CI.IGT: success for Link off between frames for edp (rev5)

2024-05-20 Thread Patchwork
== Series Details ==

Series: Link off between frames for edp (rev5)
URL   : https://patchwork.freedesktop.org/series/130650/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14785_full -> Patchwork_130650v5_full


Summary
---

  **SUCCESS**

  No regressions found.

  

Participating hosts (9 -> 9)
--

  No changes in participating hosts

New tests
-

  New tests have been introduced between CI_DRM_14785_full and 
Patchwork_130650v5_full:

### New IGT tests (3) ###

  * igt@perf@blocking@1-vcs1:
- Statuses : 1 pass(s)
- Exec time: [10.02] s

  * igt@perf@enable-disable@1-vcs0:
- Statuses : 1 pass(s)
- Exec time: [4.23] s

  * igt@perf@oa-exponents@1-vcs0:
- Statuses : 1 pass(s)
- Exec time: [1.85] s

  

Known issues


  Here are the changes found in Patchwork_130650v5_full that come from known 
issues:

### IGT changes ###

 Issues hit 

  * igt@device_reset@cold-reset-bound:
- shard-rkl:  NOTRUN -> [SKIP][1] ([i915#11078])
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-rkl-4/igt@device_re...@cold-reset-bound.html

  * igt@device_reset@unbind-cold-reset-rebind:
- shard-dg1:  NOTRUN -> [SKIP][2] ([i915#11078])
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-16/igt@device_re...@unbind-cold-reset-rebind.html

  * igt@device_reset@unbind-reset-rebind:
- shard-dg1:  NOTRUN -> [INCOMPLETE][3] ([i915#9408])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-18/igt@device_re...@unbind-reset-rebind.html

  * igt@drm_fdinfo@virtual-busy-all:
- shard-dg1:  NOTRUN -> [SKIP][4] ([i915#8414]) +2 other tests skip
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-16/igt@drm_fdi...@virtual-busy-all.html

  * igt@drm_fdinfo@virtual-idle:
- shard-rkl:  NOTRUN -> [FAIL][5] ([i915#7742])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-rkl-4/igt@drm_fdi...@virtual-idle.html

  * igt@gem_ccs@block-multicopy-compressed:
- shard-rkl:  NOTRUN -> [SKIP][6] ([i915#9323])
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-rkl-5/igt@gem_...@block-multicopy-compressed.html

  * igt@gem_create@create-ext-cpu-access-big:
- shard-rkl:  NOTRUN -> [SKIP][7] ([i915#6335])
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-rkl-4/igt@gem_cre...@create-ext-cpu-access-big.html

  * igt@gem_ctx_freq@sysfs@gt0:
- shard-dg2:  [PASS][8] -> [FAIL][9] ([i915#9561])
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/shard-dg2-1/igt@gem_ctx_freq@sy...@gt0.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg2-11/igt@gem_ctx_freq@sy...@gt0.html

  * igt@gem_ctx_persistence@heartbeat-hostile:
- shard-dg1:  NOTRUN -> [SKIP][10] ([i915#8555])
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-15/igt@gem_ctx_persiste...@heartbeat-hostile.html

  * igt@gem_ctx_sseu@invalid-args:
- shard-dg1:  NOTRUN -> [SKIP][11] ([i915#280])
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-16/igt@gem_ctx_s...@invalid-args.html

  * igt@gem_eio@kms:
- shard-tglu: [PASS][12] -> [INCOMPLETE][13] ([i915#10513])
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/shard-tglu-6/igt@gem_...@kms.html
   [13]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-tglu-5/igt@gem_...@kms.html
- shard-dg1:  NOTRUN -> [INCOMPLETE][14] ([i915#10513])
   [14]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-15/igt@gem_...@kms.html

  * igt@gem_exec_balancer@bonded-sync:
- shard-dg1:  NOTRUN -> [SKIP][15] ([i915#4771])
   [15]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-18/igt@gem_exec_balan...@bonded-sync.html

  * igt@gem_exec_balancer@parallel-contexts:
- shard-rkl:  NOTRUN -> [SKIP][16] ([i915#4525])
   [16]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-rkl-5/igt@gem_exec_balan...@parallel-contexts.html

  * igt@gem_exec_capture@capture-recoverable:
- shard-rkl:  NOTRUN -> [SKIP][17] ([i915#6344])
   [17]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-rkl-5/igt@gem_exec_capt...@capture-recoverable.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
- shard-dg1:  NOTRUN -> [FAIL][18] ([i915#10386]) +1 other test fail
   [18]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-16/igt@gem_exec_capture@capt...@vecs0-lmem0.html

  * igt@gem_exec_capture@many-4k-incremental:
- shard-dg1:  NOTRUN -> [FAIL][19] ([i915#9606])
   [19]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/shard-dg1-13/igt@gem_exec_cap

✗ Fi.CI.BAT: failure for drm/i915: Bump max TMDS bitrate to 6 Gbps on ADL/DG2+ (rev2)

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915: Bump max TMDS bitrate to 6 Gbps on ADL/DG2+ (rev2)
URL   : https://patchwork.freedesktop.org/series/133716/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14785 -> Patchwork_133716v2


Summary
---

  **FAILURE**

  Serious unknown changes coming with Patchwork_133716v2 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_133716v2, please notify your bug team 
(i915-ci-in...@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/index.html

Participating hosts (41 -> 41)
--

  Additional (2): fi-kbl-8809g fi-bsw-n3050 
  Missing(2): bat-kbl-2 bat-mtlp-6 

Possible new issues
---

  Here are the unknown changes that may have been introduced in 
Patchwork_133716v2:

### IGT changes ###

 Possible regressions 

  * igt@i915_selftest@live@active:
- fi-rkl-11600:   [PASS][1] -> [DMESG-FAIL][2]
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/fi-rkl-11600/igt@i915_selftest@l...@active.html
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/fi-rkl-11600/igt@i915_selftest@l...@active.html

  
Known issues


  Here are the changes found in Patchwork_133716v2 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@gem_huc_copy@huc-copy:
- fi-kbl-8809g:   NOTRUN -> [SKIP][3] ([i915#2190])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/fi-kbl-8809g/igt@gem_huc_c...@huc-copy.html

  * igt@gem_lmem_swapping@basic:
- fi-kbl-8809g:   NOTRUN -> [SKIP][4] ([i915#4613]) +3 other tests skip
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/fi-kbl-8809g/igt@gem_lmem_swapp...@basic.html

  * igt@gem_lmem_swapping@basic@lmem0:
- bat-dg2-11: [PASS][5] -> [FAIL][6] ([i915#10378])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-11/igt@gem_lmem_swapping@ba...@lmem0.html
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/bat-dg2-11/igt@gem_lmem_swapping@ba...@lmem0.html

  * igt@gem_lmem_swapping@random-engines:
- fi-bsw-n3050:   NOTRUN -> [SKIP][7] +19 other tests skip
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/fi-bsw-n3050/igt@gem_lmem_swapp...@random-engines.html

  * igt@i915_selftest@live@hangcheck:
- bat-dg2-9:  [PASS][8] -> [ABORT][9] ([i915#9840])
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-9/igt@i915_selftest@l...@hangcheck.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/bat-dg2-9/igt@i915_selftest@l...@hangcheck.html

  * igt@kms_force_connector_basic@force-load-detect:
- fi-kbl-8809g:   NOTRUN -> [SKIP][10] +30 other tests skip
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/fi-kbl-8809g/igt@kms_force_connector_ba...@force-load-detect.html

  
 Possible fixes 

  * igt@i915_module_load@load:
- bat-dg2-8:  [DMESG-WARN][11] ([i915#10014]) -> [PASS][12]
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@i915_module_l...@load.html
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/bat-dg2-8/igt@i915_module_l...@load.html

  * igt@i915_selftest@live@gt_timelines:
- bat-arls-2: [INCOMPLETE][13] -> [PASS][14]
   [13]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-2/igt@i915_selftest@live@gt_timelines.html
   [14]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/bat-arls-2/igt@i915_selftest@live@gt_timelines.html

  
  [i915#10014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10014
  [i915#10378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10378
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#9840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9840


Build changes
-

  * Linux: CI_DRM_14785 -> Patchwork_133716v2

  CI-20190529: 20190529
  CI_DRM_14785: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7863: fa1dc232d5d840532521df8a6fcf1fe82c514304 @ 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_133716v2: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133716v2/index.html


[PATCH] drm/i915/dpt: Make DPT object unshrinkable

2024-05-20 Thread Vidya Srinivas
In some scenarios, the DPT object gets shrunk but
the actual framebuffer did not and thus its still
there on the DPT's vm->bound_list. Then it tries to
rewrite the PTEs via a stale CPU mapping. This causes panic.

Credits-to: Ville Syrjala 
Shawn Lee 

Cc: sta...@vger.kernel.org
Fixes: 0dc987b699ce ("drm/i915/display: Add smem fallback allocation for dpt")
Signed-off-by: Vidya Srinivas 
---
 drivers/gpu/drm/i915/gem/i915_gem_object.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h 
b/drivers/gpu/drm/i915/gem/i915_gem_object.h
index 3560a062d287..e6b485fc54d4 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
@@ -284,7 +284,8 @@ bool i915_gem_object_has_iomem(const struct 
drm_i915_gem_object *obj);
 static inline bool
 i915_gem_object_is_shrinkable(const struct drm_i915_gem_object *obj)
 {
-   return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE);
+   return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE) &&
+   !obj->is_dpt;
 }
 
 static inline bool
-- 
2.34.1



[PATCH v2 03/13] drm/i915: Add separate define for SEL_FETCH_CUR_CTL()

2024-05-20 Thread Ville Syrjala
From: Ville Syrjälä 

Split the cursor stuff from the rest of the selective fetch
plane registers so that we can collect all cursor registers
in intel_cursor_regs.h. Also take the opportunity to rename
the registers to match the spec.

v2: Pass the correct register offset fpr pipe B (Jani)
s/mtl+/tgl+/ as that's where this was introduced
Drop the bogus SEL_FETCH_CUR_CTL_ENABLE bit, the contents
actually match the normal CUR_CTL register

Reviewed-by: Jani Nikula 
Signed-off-by: Ville Syrjälä 
---
 drivers/gpu/drm/i915/display/intel_cursor.c  | 6 +++---
 drivers/gpu/drm/i915/display/intel_cursor_regs.h | 5 +
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c 
b/drivers/gpu/drm/i915/display/intel_cursor.c
index c780ce146131..b44809899502 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -508,7 +508,7 @@ static void i9xx_cursor_disable_sel_fetch_arm(struct 
intel_plane *plane,
if (!crtc_state->enable_psr2_sel_fetch)
return;
 
-   intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_CTL(pipe, plane->id), 0);
+   intel_de_write_fw(dev_priv, SEL_FETCH_CUR_CTL(pipe), 0);
 }
 
 static void wa_16021440873(struct intel_plane *plane,
@@ -523,7 +523,7 @@ static void wa_16021440873(struct intel_plane *plane,
ctl &= ~MCURSOR_MODE_MASK;
ctl |= MCURSOR_MODE_64_2B;
 
-   intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_CTL(pipe, plane->id), ctl);
+   intel_de_write_fw(dev_priv, SEL_FETCH_CUR_CTL(pipe), ctl);
 
intel_de_write(dev_priv, PIPE_SRCSZ_ERLY_TPT(dev_priv, pipe),
   PIPESRC_HEIGHT(et_y_position));
@@ -548,7 +548,7 @@ static void i9xx_cursor_update_sel_fetch_arm(struct 
intel_plane *plane,
  val);
}
 
-   intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_CTL(pipe, 
plane->id),
+   intel_de_write_fw(dev_priv, SEL_FETCH_CUR_CTL(pipe),
  plane_state->ctl);
} else {
/* Wa_16021440873 */
diff --git a/drivers/gpu/drm/i915/display/intel_cursor_regs.h 
b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
index 270c26c2e6df..e58930ff32ea 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
@@ -95,4 +95,9 @@
 #define _CUR_BUF_CFG_B 0x7117c
 #define CUR_BUF_CFG(pipe)  _MMIO_PIPE((pipe), _CUR_BUF_CFG_A, 
_CUR_BUF_CFG_B)
 
+/* tgl+ */
+#define _SEL_FETCH_CUR_CTL_A   0x70880
+#define _SEL_FETCH_CUR_CTL_B   0x71880
+#define SEL_FETCH_CUR_CTL(pipe)_MMIO_PIPE((pipe), 
_SEL_FETCH_CUR_CTL_A, _SEL_FETCH_CUR_CTL_B)
+
 #endif /* __INTEL_CURSOR_REGS_H__ */
-- 
2.44.1



RE: [PATCH] drm/i915/dpt: Make DPT object unshrinkable

2024-05-20 Thread Srinivas, Vidya



> -Original Message-
> From: Ville Syrjälä 
> Sent: Monday, May 20, 2024 10:10 PM
> To: Srinivas, Vidya 
> Cc: intel-gfx@lists.freedesktop.org; Syrjala, Ville 
> ; Lee,
> Shawn C ; srini...@freedesktop.org
> Subject: Re: [PATCH] drm/i915/dpt: Make DPT object unshrinkable
> 
> On Mon, May 20, 2024 at 08:54:10PM +0530, Srinivas, Vidya wrote:
> > In some scenarios, the DPT object gets shrunk but the actual
> > framebuffer did not and thus its still there on the DPT's
> > vm->bound_list. Then it tries to rewrite the PTEs via a stale CPU
> > mapping. This causes panic.
> >
> > Credits-to: Ville Syrjala 
> > Shawn Lee 
> >
> > Signed-off-by: Srinivas, Vidya 
> 
> The format should be "first_name last_name "

Apologies for the mistake. My gitconfig got messed up.

> 
> We also probably want
> Cc: sta...@vger.kernel.org
> Fixes: 0dc987b699ce ("drm/i915/display: Add smem fallback allocation for
> dpt")
> 
Thank you so much. Will float new patch with this added.

> Although the patch won't actually build unless we also have commit
> 779cb5ba64ec ("drm/i915/dpt: Treat the DPT BO as a framebuffer") but that
> hast the same fixes tag, so should be fine even if someone backports things
> that far back.
> 
> > ---
> >  drivers/gpu/drm/i915/gem/i915_gem_object.h | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h
> > b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> > index 3560a062d287..e6b485fc54d4 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> > @@ -284,7 +284,8 @@ bool i915_gem_object_has_iomem(const struct
> > drm_i915_gem_object *obj);  static inline bool
> > i915_gem_object_is_shrinkable(const struct drm_i915_gem_object *obj)
> > {
> 
> Maybe toss something like this here:
> /* TODO: make DPT shrinkable when it has no bound vmas */
> 
> DPTs aren't necessarily so small that shrinking them wouldn't have any
> benefits. But actually implementing that would require some actual work, so
> not suitable for a quick fix.
> 
> I can add all that stuff when applying the patch, no need to resend for this.
> 
> > -   return i915_gem_object_type_has(obj,
> I915_GEM_OBJECT_IS_SHRINKABLE);
> > +   return i915_gem_object_type_has(obj,
> I915_GEM_OBJECT_IS_SHRINKABLE) &&
> > +   !obj->is_dpt;
> >  }
> >
> >  static inline bool
> > --
> > 2.34.1
> 
> --
> Ville Syrjälä
> Intel


Re: [PATCH 03/13] drm/i915: Add separate define for SEL_FETCH_CUR_CTL()

2024-05-20 Thread Ville Syrjälä
On Mon, May 20, 2024 at 12:27:20PM +0300, Jani Nikula wrote:
> On Thu, 16 May 2024, Ville Syrjala  wrote:
> > From: Ville Syrjälä 
> >
> > Split the cursor stuff from the rest of the selective fetch
> > plane registers so that we can collect all cursor registers
> > in intel_cursor_regs.h. Also take the opportunity to rename
> > the registers to match the spec.
> >
> > Signed-off-by: Ville Syrjälä 
> > ---
> >  drivers/gpu/drm/i915/display/intel_cursor.c  | 6 +++---
> >  drivers/gpu/drm/i915/display/intel_cursor_regs.h | 5 +
> >  2 files changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c 
> > b/drivers/gpu/drm/i915/display/intel_cursor.c
> > index c780ce146131..b44809899502 100644
> > --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> > +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> > @@ -508,7 +508,7 @@ static void i9xx_cursor_disable_sel_fetch_arm(struct 
> > intel_plane *plane,
> > if (!crtc_state->enable_psr2_sel_fetch)
> > return;
> >  
> > -   intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_CTL(pipe, plane->id), 0);
> > +   intel_de_write_fw(dev_priv, SEL_FETCH_CUR_CTL(pipe), 0);
> >  }
> >  
> >  static void wa_16021440873(struct intel_plane *plane,
> > @@ -523,7 +523,7 @@ static void wa_16021440873(struct intel_plane *plane,
> > ctl &= ~MCURSOR_MODE_MASK;
> > ctl |= MCURSOR_MODE_64_2B;
> >  
> > -   intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_CTL(pipe, plane->id), ctl);
> > +   intel_de_write_fw(dev_priv, SEL_FETCH_CUR_CTL(pipe), ctl);
> >  
> > intel_de_write(dev_priv, PIPE_SRCSZ_ERLY_TPT(dev_priv, pipe),
> >PIPESRC_HEIGHT(et_y_position));
> > @@ -548,7 +548,7 @@ static void i9xx_cursor_update_sel_fetch_arm(struct 
> > intel_plane *plane,
> >   val);
> > }
> >  
> > -   intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_CTL(pipe, 
> > plane->id),
> > +   intel_de_write_fw(dev_priv, SEL_FETCH_CUR_CTL(pipe),
> >   plane_state->ctl);
> > } else {
> > /* Wa_16021440873 */
> > diff --git a/drivers/gpu/drm/i915/display/intel_cursor_regs.h 
> > b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> > index 270c26c2e6df..ab02d497fba6 100644
> > --- a/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> > +++ b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> > @@ -95,4 +95,9 @@
> >  #define _CUR_BUF_CFG_B 0x7117c
> >  #define CUR_BUF_CFG(pipe)  _MMIO_PIPE((pipe), _CUR_BUF_CFG_A, 
> > _CUR_BUF_CFG_B)
> >  
> > +#define _SEL_FETCH_CUR_CTL_A   0x70880 /* mtl+ */
> > +#define _SEL_FETCH_CUR_CTL_B   0x71880
> > +#define SEL_FETCH_CUR_CTL(pipe)_MMIO_PIPE((pipe), 
> > _SEL_FETCH_CUR_CTL_A, _SEL_FETCH_CUR_CTL_A)
> 
> _SEL_FETCH_CUR_CTL_A is doubled, the latter should be _B.

Derp. I also don't know where I got that mtl+ note. I must have been
thinking about early transport or something, but selective fetch
in general should be a thing for tgl+.

> 
> With that,
> 
> Reviewed-by: Jani Nikula 
> 
> I must admit I was trying to follow how PLANE_SEL_FETCH_CTL(pipe,
> CURSOR_A) ends up being identical to this new SEL_FETCH_CUR_CTL(pipe),
> but holy crap it trips my brain completely. How did we come up with so
> many levels of abstractions for this stuff, in such complicated ways?!
> :o
> 
> 
> > +#define   SEL_FETCH_CUR_CTL_ENABLE REG_BIT(31)
> > +
> >  #endif /* __INTEL_CURSOR_REGS_H__ */
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel


[PATCH v2] drm/i915: Bump max TMDS bitrate to 6 Gbps on ADL-S/ADL-P/DG2+

2024-05-20 Thread Ville Syrjala
From: Ville Syrjälä 

Bspec lists the mas TMDS bitrate as 6 Gbps on ADL-S/ADL-P/DG2.
Bump our limit to match.

v2: Bump for ADL-S as well (Jani)

Cc: Jani Nikula 
Signed-off-by: Ville Syrjälä 
---
 drivers/gpu/drm/i915/display/intel_hdmi.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c 
b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 0faf2afa1c09..9ac670a40bc1 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1784,7 +1784,9 @@ static int intel_hdmi_source_max_tmds_clock(struct 
intel_encoder *encoder)
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
int max_tmds_clock, vbt_max_tmds_clock;
 
-   if (DISPLAY_VER(dev_priv) >= 10)
+   if (DISPLAY_VER(dev_priv) >= 13 || IS_ALDERLAKE_S(dev_priv))
+   max_tmds_clock = 60;
+   else if (DISPLAY_VER(dev_priv) >= 10)
max_tmds_clock = 594000;
else if (DISPLAY_VER(dev_priv) >= 8 || IS_HASWELL(dev_priv))
max_tmds_clock = 30;
-- 
2.44.1



Re: [PATCH] drm/i915: Bump max TMDS bitrate to 6 Gbps on ADL/DG2+

2024-05-20 Thread Ville Syrjälä
On Mon, May 20, 2024 at 01:37:26PM +0300, Jani Nikula wrote:
> On Thu, 16 May 2024, Ville Syrjala  wrote:
> > From: Ville Syrjälä 
> >
> > Bspec lists the mas TMDS bitrate as 6 Gbps on ADL/DG2.
> 
> *max
> 
> There's also ADL-S with display 12 and 6 Gbps support?

Looks like it. Too many weird platform variants...

> 
> BR,
> Jani.
> 
> > Bump our limit to match.
> >
> > Signed-off-by: Ville Syrjälä 
> > ---
> >  drivers/gpu/drm/i915/display/intel_hdmi.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c 
> > b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > index 0faf2afa1c09..bd0ba4edcd1d 100644
> > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > @@ -1784,7 +1784,9 @@ static int intel_hdmi_source_max_tmds_clock(struct 
> > intel_encoder *encoder)
> > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > int max_tmds_clock, vbt_max_tmds_clock;
> >  
> > -   if (DISPLAY_VER(dev_priv) >= 10)
> > +   if (DISPLAY_VER(dev_priv) >= 13)
> > +   max_tmds_clock = 60;
> > +   else if (DISPLAY_VER(dev_priv) >= 10)
> > max_tmds_clock = 594000;
> > else if (DISPLAY_VER(dev_priv) >= 8 || IS_HASWELL(dev_priv))
> > max_tmds_clock = 30;
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel


Re: [PATCH] drm/i915/dpt: Make DPT object unshrinkable

2024-05-20 Thread Ville Syrjälä
On Mon, May 20, 2024 at 08:54:10PM +0530, Srinivas, Vidya wrote:
> In some scenarios, the DPT object gets shrunk but
> the actual framebuffer did not and thus its still
> there on the DPT's vm->bound_list. Then it tries to
> rewrite the PTEs via a stale CPU mapping. This causes panic.
> 
> Credits-to: Ville Syrjala 
>   Shawn Lee 
> 
> Signed-off-by: Srinivas, Vidya 

The format should be "first_name last_name "

We also probably want
Cc: sta...@vger.kernel.org
Fixes: 0dc987b699ce ("drm/i915/display: Add smem fallback allocation for dpt")

Although the patch won't actually build unless we also have 
commit 779cb5ba64ec ("drm/i915/dpt: Treat the DPT BO as a framebuffer")
but that hast the same fixes tag, so should be fine even if
someone backports things that far back.

> ---
>  drivers/gpu/drm/i915/gem/i915_gem_object.h | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h 
> b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> index 3560a062d287..e6b485fc54d4 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> @@ -284,7 +284,8 @@ bool i915_gem_object_has_iomem(const struct 
> drm_i915_gem_object *obj);
>  static inline bool
>  i915_gem_object_is_shrinkable(const struct drm_i915_gem_object *obj)
>  {

Maybe toss something like this here:
/* TODO: make DPT shrinkable when it has no bound vmas */

DPTs aren't necessarily so small that shrinking them wouldn't
have any benefits. But actually implementing that would require
some actual work, so not suitable for a quick fix.

I can add all that stuff when applying the patch, no need to
resend for this.

> - return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE);
> + return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE) &&
> + !obj->is_dpt;
>  }
>  
>  static inline bool
> -- 
> 2.34.1

-- 
Ville Syrjälä
Intel


Re: [PATCH 02/13] drm/i915: Clean up the cursor register defines

2024-05-20 Thread Jani Nikula
On Mon, 20 May 2024, Ville Syrjälä  wrote:
> On Mon, May 20, 2024 at 12:10:30PM +0300, Jani Nikula wrote:
>> On Thu, 16 May 2024, Ville Syrjala  wrote:
>> I also think it's kind of unnecessary when they're only
>> passed on as parameters. Or is there some corner case where it matters?
>
> I think cargo-culting is probably the best argument for protecting
> each and every macro argument. If used universally then I think
> it'll be a bit more likely that newly added macros, where it
> might matter more, will inherit it as well.

That's a good point.

BR,
Jani.


-- 
Jani Nikula, Intel


✓ Fi.CI.BAT: success for drm/i915/dpt: Make DPT object unshrinkable

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915/dpt: Make DPT object unshrinkable
URL   : https://patchwork.freedesktop.org/series/133818/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14785 -> Patchwork_133818v1


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v1/index.html

Participating hosts (41 -> 38)
--

  Missing(3): fi-kbl-7567u bat-jsl-1 bat-arls-2 

Known issues


  Here are the changes found in Patchwork_133818v1 that come from known issues:

### IGT changes ###

 Possible fixes 

  * igt@i915_module_load@load:
- bat-dg2-8:  [DMESG-WARN][1] ([i915#10014]) -> [PASS][2]
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@i915_module_l...@load.html
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v1/bat-dg2-8/igt@i915_module_l...@load.html

  
  [i915#10014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10014


Build changes
-

  * Linux: CI_DRM_14785 -> Patchwork_133818v1

  CI-20190529: 20190529
  CI_DRM_14785: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7863: fa1dc232d5d840532521df8a6fcf1fe82c514304 @ 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_133818v1: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133818v1/index.html


[linux-next:master] BUILD REGRESSION 632483ea8004edfadd035de36e1ab2c7c4f53158

2024-05-20 Thread kernel test robot
tree/branch: 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
branch HEAD: 632483ea8004edfadd035de36e1ab2c7c4f53158  Add linux-next specific 
files for 20240520

Error/Warning reports:

https://lore.kernel.org/oe-kbuild-all/202405202243.shvs2otq-...@intel.com
https://lore.kernel.org/oe-kbuild-all/202405210004.5m02x213-...@intel.com

Error/Warning: (recently discovered and may have been fixed)

drivers/thermal/thermal_trip.o: warning: objtool: unexpected relocation symbol 
type in .rela.discard.reachable

Error/Warning ids grouped by kconfigs:

gcc_recent_errors
|-- alpha-allyesconfig
|   |-- 
drivers-gpu-drm-imx-ipuv3-imx-ldb.c:error:_sel-directive-output-may-be-truncated-writing-bytes-into-a-region-of-size-between-and
|   |-- 
drivers-gpu-drm-nouveau-nouveau_backlight.c:error:d-directive-output-may-be-truncated-writing-between-and-bytes-into-a-region-of-size
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- arc-allmodconfig
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- arc-allyesconfig
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- arc-randconfig-002-20240520
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- arm-allmodconfig
|   |-- 
drivers-gpu-drm-imx-ipuv3-imx-ldb.c:error:_sel-directive-output-may-be-truncated-writing-bytes-into-a-region-of-size-between-and
|   |-- 
drivers-gpu-drm-nouveau-nouveau_backlight.c:error:d-directive-output-may-be-truncated-writing-between-and-bytes-into-a-region-of-size
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- arm-allyesconfig
|   |-- 
drivers-gpu-drm-imx-ipuv3-imx-ldb.c:error:_sel-directive-output-may-be-truncated-writing-bytes-into-a-region-of-size-between-and
|   |-- 
drivers-gpu-drm-nouveau-nouveau_backlight.c:error:d-directive-output-may-be-truncated-writing-between-and-bytes-into-a-region-of-size
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- arm-randconfig-003-20240520
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- csky-allmodconfig
|   |-- 
drivers-gpu-drm-imx-ipuv3-imx-ldb.c:error:_sel-directive-output-may-be-truncated-writing-bytes-into-a-region-of-size-between-and
|   |-- 
drivers-gpu-drm-nouveau-nouveau_backlight.c:error:d-directive-output-may-be-truncated-writing-between-and-bytes-into-a-region-of-size
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- csky-allyesconfig
|   |-- 
drivers-gpu-drm-imx-ipuv3-imx-ldb.c:error:_sel-directive-output-may-be-truncated-writing-bytes-into-a-region-of-size-between-and
|   |-- 
drivers-gpu-drm-nouveau-nouveau_backlight.c:error:d-directive-output-may-be-truncated-writing-between-and-bytes-into-a-region-of-size
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- csky-randconfig-001-20240520
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- i386-allmodconfig
|   |-- ERROR:__udivdi3-drivers-vdpa-octeon_ep-octep_vdpa.ko-undefined
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- i386-allyesconfig
|   |-- ERROR:__udivdi3-drivers-vdpa-octeon_ep-octep_vdpa.ko-undefined
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- i386-randconfig-012-20240520
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- i386-randconfig-014-20240520
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- i386-randconfig-016-20240520
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- loongarch-allmodconfig
|   |-- 
drivers-gpu-drm-imx-ipuv3-imx-ldb.c:error:_sel-directive-output-may-be-truncated-writing-bytes-into-a-region-of-size-between-and
|   |-- 
drivers-gpu-drm-nouveau-nouveau_backlight.c:error:d-directive-output-may-be-truncated-writing-between-and-bytes-into-a-region-of-size
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- loongarch-defconfig
|   `-- 
drivers-thermal-thermal_trip.o:warning:objtool:unexpected-relocation-symbol-type-in-.rela.discard.reachable
|-- loongarch-randconfig-002-20240520
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- m68k-allmodconfig
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not-used
|-- m68k-allyesconfig
|   `-- 
drivers-regulator-rtq2208-regulator.c:warning:rtq2208_regulator_ldo_ops-defined-but-not

Re: [PATCH 02/13] drm/i915: Clean up the cursor register defines

2024-05-20 Thread Ville Syrjälä
On Mon, May 20, 2024 at 12:10:30PM +0300, Jani Nikula wrote:
> On Thu, 16 May 2024, Ville Syrjala  wrote:
> > From: Ville Syrjälä 
> >
> > Group the cursor register defines such that everything to
> > do with one register is in one place.
> >
> > Signed-off-by: Ville Syrjälä 
> 
> Reviewed-by: Jani Nikula 
> 
> but a couple of nitpicks inline...
> 
> > ---
> >  .../gpu/drm/i915/display/intel_cursor_regs.h  | 52 +--
> >  1 file changed, 26 insertions(+), 26 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_cursor_regs.h 
> > b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> > index c2190af1e9f5..270c26c2e6df 100644
> > --- a/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> > +++ b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> > @@ -9,6 +9,7 @@
> >  #include "intel_display_reg_defs.h"
> >  
> >  #define _CURACNTR  0x70080
> > +#define CURCNTR(dev_priv, pipe)_MMIO_CURSOR2((dev_priv), (pipe), 
> > _CURACNTR)
> 
> In addition to code movement, these add braces around (dev_priv) and
> (pipe). While it makes review harder by breaking 'git show
> --color-moved',

Sorry. Forgot I snuck it in there.

> I also think it's kind of unnecessary when they're only
> passed on as parameters. Or is there some corner case where it matters?

I think cargo-culting is probably the best argument for protecting
each and every macro argument. If used universally then I think
it'll be a bit more likely that newly added macros, where it
might matter more, will inherit it as well.

And we've certainly had incidents with misplaced commas (the
i915_reg_t addition was a reaction to one such event), so I
wouldn't dare claim that there is zero chance of screwups
with these.

> Comma has the lowest precedence, and I don't think you could easily pass
> in a value with a comma operator.
> 
> No need to change for this, it's not wrong either.
> 
> >  /* Old style CUR*CNTR flags (desktop 8xx) */
> >  #define   CURSOR_ENABLEREG_BIT(31)
> >  #define   CURSOR_PIPE_GAMMA_ENABLE REG_BIT(30)
> > @@ -38,61 +39,60 @@
> >  #define   MCURSOR_MODE_128_ARGB_AX (0x20 | MCURSOR_MODE_128_32B_AX)
> >  #define   MCURSOR_MODE_256_ARGB_AX (0x20 | MCURSOR_MODE_256_32B_AX)
> >  #define   MCURSOR_MODE_64_ARGB_AX  (0x20 | MCURSOR_MODE_64_32B_AX)
> > +
> >  #define _CURABASE  0x70084
> > +#define CURBASE(dev_priv, pipe)_MMIO_CURSOR2((dev_priv), (pipe), 
> > _CURABASE)
> > +
> >  #define _CURAPOS   0x70088
> > -#define _CURAPOS_ERLY_TPT  0x7008c
> > +#define CURPOS(dev_priv, pipe) _MMIO_CURSOR2((dev_priv), (pipe), 
> > _CURAPOS)
> >  #define   CURSOR_POS_Y_SIGNREG_BIT(31)
> >  #define   CURSOR_POS_Y_MASKREG_GENMASK(30, 16)
> >  #define   CURSOR_POS_Y(y)  REG_FIELD_PREP(CURSOR_POS_Y_MASK, (y))
> >  #define   CURSOR_POS_X_SIGNREG_BIT(15)
> >  #define   CURSOR_POS_X_MASKREG_GENMASK(14, 0)
> >  #define   CURSOR_POS_X(x)  REG_FIELD_PREP(CURSOR_POS_X_MASK, (x))
> > +
> > +#define _CURAPOS_ERLY_TPT  0x7008c
> > +#define CURPOS_ERLY_TPT(dev_priv, pipe)_MMIO_CURSOR2((dev_priv), 
> > (pipe), _CURAPOS_ERLY_TPT)
> > +
> >  #define _CURASIZE  0x700a0 /* 845/865 */
> > +#define CURSIZE(dev_priv, pipe)_MMIO_CURSOR2((dev_priv), (pipe), 
> > _CURASIZE)
> >  #define   CURSOR_HEIGHT_MASK   REG_GENMASK(21, 12)
> >  #define   CURSOR_HEIGHT(h) REG_FIELD_PREP(CURSOR_HEIGHT_MASK, (h))
> >  #define   CURSOR_WIDTH_MASKREG_GENMASK(9, 0)
> >  #define   CURSOR_WIDTH(w)  REG_FIELD_PREP(CURSOR_WIDTH_MASK, (w))
> > +
> >  #define _CUR_FBC_CTL_A 0x700a0 /* ivb+ */
> > +#define CUR_FBC_CTL(dev_priv, pipe)_MMIO_CURSOR2((dev_priv), 
> > (pipe), _CUR_FBC_CTL_A)
> >  #define   CUR_FBC_EN   REG_BIT(31)
> >  #define   CUR_FBC_HEIGHT_MASK  REG_GENMASK(7, 0)
> >  #define   CUR_FBC_HEIGHT(h)
> > REG_FIELD_PREP(CUR_FBC_HEIGHT_MASK, (h))
> > +
> >  #define _CUR_CHICKEN_A 0x700a4 /* mtl+ */
> > +#define CUR_CHICKEN(dev_priv, pipe)_MMIO_CURSOR2((dev_priv), 
> > (pipe), _CUR_CHICKEN_A)
> > +
> >  #define _CURASURFLIVE  0x700ac /* g4x+ */
> > -#define _CURBCNTR  0x700c0
> > -#define _CURBBASE  0x700c4
> > -#define _CURBPOS   0x700c8
> > -
> > -#define _CURBCNTR_IVB  0x71080
> > -#define _CURBBASE_IVB  0x71084
> > -#define _CURBPOS_IVB   0x71088
> > -
> > -#define CURCNTR(dev_priv, pipe) _MMIO_CURSOR2(dev_priv, pipe, _CURACNTR)
> > -#define CURBASE(dev_priv, pipe) _MMIO_CURSOR2(dev_priv, pipe, _CURABASE)
> > -#define CURPOS(dev_priv, pipe) _MMIO_CURSOR2(dev_priv, pipe, _CURAPOS)
> > -#define CURPOS_ERLY_TPT(dev_priv, pipe) _MMIO_CURSOR2(dev_priv, pipe, 
> > _CURAPOS_ERLY_TPT)
> > -#define CURSIZE(dev_priv, pipe) _MMIO_CURSOR2(dev_priv, pipe, _CURASIZE)
> > -#define CUR_FBC_CTL(dev_priv, pipe) _MMIO_CURSOR2(dev_priv, pipe, 
>

✗ Fi.CI.SPARSE: warning for drm/i915/dpt: Make DPT object unshrinkable

2024-05-20 Thread Patchwork
== Series Details ==

Series: drm/i915/dpt: Make DPT object unshrinkable
URL   : https://patchwork.freedesktop.org/series/133818/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.




Re: [PATCH 2/7] drm/i915: Extract intel_dp_has_dsc()

2024-05-20 Thread Ville Syrjälä
On Mon, May 20, 2024 at 01:47:34PM +0300, Jani Nikula wrote:
> On Fri, 17 May 2024, Ville Syrjala  wrote:
> > From: Ville Syrjälä 
> >
> > Extract a helper to check whether the source+sink combo
> > supports DSC. That basic check is needed both during mode
> > validation and compute config. We'll also need to add extra
> > checks to both places, so having a single place for it is nicer.
> >
> > Signed-off-by: Ville Syrjälä 
> > ---
> >  drivers/gpu/drm/i915/display/intel_dp.c | 16 ++--
> >  1 file changed, 14 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
> > b/drivers/gpu/drm/i915/display/intel_dp.c
> > index 1e88449fe5f2..7bf283b4df7f 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -1220,6 +1220,19 @@ bool intel_dp_need_bigjoiner(struct intel_dp 
> > *intel_dp,
> >connector->force_bigjoiner_enable;
> >  }
> >  
> > +static bool intel_dp_has_dsc(struct intel_connector *connector)
> 
> Why not const?

We've generally not consted these things. And then whenver add
one const somewhere it usually ends up getting in the way later,
not because we need mutability but simply because we want to
call something that doesn't have the const.

I suppose if we do want to start consting things more we should
just do some kind of bigger pass over the whole codebase so that
that there's less chance of pain later.

We're also not using container_of_const() for these right now,
so the const can vanish semi-accidentally when casting things.

I suppose this thing might be low level enough that the const
could be kept. I'll have another think about it.

> 
> > +{
> > +   struct drm_i915_private *i915 = to_i915(connector->base.dev);
> > +
> > +   if (!HAS_DSC(i915))
> > +   return false;
> > +
> > +   if (!drm_dp_sink_supports_dsc(connector->dp.dsc_dpcd))
> > +   return false;
> > +
> > +   return true;
> > +}
> > +
> >  static enum drm_mode_status
> >  intel_dp_mode_valid(struct drm_connector *_connector,
> > struct drm_display_mode *mode)
> > @@ -1274,8 +1287,7 @@ intel_dp_mode_valid(struct drm_connector *_connector,
> > mode_rate = intel_dp_link_required(target_clock,
> >
> > intel_dp_mode_min_output_bpp(connector, mode));
> >  
> > -   if (HAS_DSC(dev_priv) &&
> > -   drm_dp_sink_supports_dsc(connector->dp.dsc_dpcd)) {
> > +   if (intel_dp_has_dsc(connector)) {
> > enum intel_output_format sink_format, output_format;
> > int pipe_bpp;
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel


[PATCH] drm/i915/dpt: Make DPT object unshrinkable

2024-05-20 Thread Srinivas, Vidya
In some scenarios, the DPT object gets shrunk but
the actual framebuffer did not and thus its still
there on the DPT's vm->bound_list. Then it tries to
rewrite the PTEs via a stale CPU mapping. This causes panic.

Credits-to: Ville Syrjala 
Shawn Lee 

Signed-off-by: Srinivas, Vidya 
---
 drivers/gpu/drm/i915/gem/i915_gem_object.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h 
b/drivers/gpu/drm/i915/gem/i915_gem_object.h
index 3560a062d287..e6b485fc54d4 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
@@ -284,7 +284,8 @@ bool i915_gem_object_has_iomem(const struct 
drm_i915_gem_object *obj);
 static inline bool
 i915_gem_object_is_shrinkable(const struct drm_i915_gem_object *obj)
 {
-   return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE);
+   return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE) &&
+   !obj->is_dpt;
 }
 
 static inline bool
-- 
2.34.1



Re: Is it possible to distinguish between HDMI and DVI in i915?

2024-05-20 Thread Jani Nikula
On Mon, 20 May 2024, Arkadiusz Drabczyk  wrote:
> My Asus Z97-A motherboard has DVI and HDMI connectors but i915 shows
> 2x HDMI ports (and the 3rd one for DP but a separate DP1 is also
> shown). Would it be possible to distinguish between DVI and HDMI in
> the driver code for example by reading some undocumented VBT registers
> or testing port characteristics or something?

Please file a bug as described at [1], attach dmesg with drm.debug=14
and VBT as described in the link, and we'll be able to tell you more.

Thanks,
Jani.


[1] https://drm.pages.freedesktop.org/intel-docs/how-to-file-i915-bugs.html



-- 
Jani Nikula, Intel


Is it possible to distinguish between HDMI and DVI in i915?

2024-05-20 Thread Arkadiusz Drabczyk
My Asus Z97-A motherboard has DVI and HDMI connectors but i915 shows
2x HDMI ports (and the 3rd one for DP but a separate DP1 is also
shown). Would it be possible to distinguish between DVI and HDMI in
the driver code for example by reading some undocumented VBT registers
or testing port characteristics or something?
-- 
Arkadiusz Drabczyk 


✓ Fi.CI.BAT: success for Link off between frames for edp (rev5)

2024-05-20 Thread Patchwork
== Series Details ==

Series: Link off between frames for edp (rev5)
URL   : https://patchwork.freedesktop.org/series/130650/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14785 -> Patchwork_130650v5


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/index.html

Participating hosts (41 -> 41)
--

  Additional (1): fi-kbl-8809g 
  Missing(1): fi-glk-j4005 

Known issues


  Here are the changes found in Patchwork_130650v5 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@gem_huc_copy@huc-copy:
- fi-kbl-8809g:   NOTRUN -> [SKIP][1] ([i915#2190])
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/fi-kbl-8809g/igt@gem_huc_c...@huc-copy.html

  * igt@gem_lmem_swapping@basic:
- fi-kbl-8809g:   NOTRUN -> [SKIP][2] ([i915#4613]) +3 other tests skip
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/fi-kbl-8809g/igt@gem_lmem_swapp...@basic.html

  * igt@i915_selftest@live@execlists:
- fi-bsw-nick:[PASS][3] -> [ABORT][4] ([i915#10594])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/fi-bsw-nick/igt@i915_selftest@l...@execlists.html
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/fi-bsw-nick/igt@i915_selftest@l...@execlists.html

  * igt@kms_force_connector_basic@force-load-detect:
- fi-kbl-8809g:   NOTRUN -> [SKIP][5] +30 other tests skip
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/fi-kbl-8809g/igt@kms_force_connector_ba...@force-load-detect.html

  
 Possible fixes 

  * igt@i915_module_load@load:
- bat-dg2-8:  [DMESG-WARN][6] ([i915#10014]) -> [PASS][7]
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-dg2-8/igt@i915_module_l...@load.html
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/bat-dg2-8/igt@i915_module_l...@load.html

  * igt@i915_selftest@live@gt_timelines:
- bat-arls-2: [INCOMPLETE][8] -> [PASS][9]
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14785/bat-arls-2/igt@i915_selftest@live@gt_timelines.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/bat-arls-2/igt@i915_selftest@live@gt_timelines.html

  
  [i915#10014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10014
  [i915#10594]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10594
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613


Build changes
-

  * Linux: CI_DRM_14785 -> Patchwork_130650v5

  CI-20190529: 20190529
  CI_DRM_14785: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7863: fa1dc232d5d840532521df8a6fcf1fe82c514304 @ 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_130650v5: 1ba62f8cea9c797427d45108df1d453f4b343240 @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_130650v5/index.html


Re: [PATCH 07/13] drm/i915: Add separate defines for cursor WM/DDB register bits

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Make a more thorough split between universal planes vs. cursors
> by defining the contents of the cursor WM/DDB registers separately.
>
> Signed-off-by: Ville Syrjälä 

I like this better than exposing the reg val functions.

Reviewed-by: Jani Nikula 


> ---
>  drivers/gpu/drm/i915/display/intel_cursor.c   | 34 +++
>  .../gpu/drm/i915/display/intel_cursor_regs.h  |  9 +
>  .../drm/i915/display/skl_universal_plane.c|  4 +--
>  .../drm/i915/display/skl_universal_plane.h|  3 --
>  4 files changed, 39 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c 
> b/drivers/gpu/drm/i915/display/intel_cursor.c
> index 7983cbaf83f7..cea0cfed569d 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> @@ -24,7 +24,6 @@
>  #include "intel_psr.h"
>  #include "intel_psr_regs.h"
>  #include "intel_vblank.h"
> -#include "skl_universal_plane.h"
>  #include "skl_watermark.h"
>  
>  #include "gem/i915_gem_object.h"
> @@ -559,6 +558,29 @@ static void i9xx_cursor_update_sel_fetch_arm(struct 
> intel_plane *plane,
>   }
>  }
>  
> +static u32 skl_cursor_ddb_reg_val(const struct skl_ddb_entry *entry)
> +{
> + if (!entry->end)
> + return 0;
> +
> + return CUR_BUF_END(entry->end - 1) |
> + CUR_BUF_START(entry->start);
> +}
> +
> +static u32 skl_cursor_wm_reg_val(const struct skl_wm_level *level)
> +{
> + u32 val = 0;
> +
> + if (level->enable)
> + val |= CUR_WM_EN;
> + if (level->ignore_lines)
> + val |= CUR_WM_IGNORE_LINES;
> + val |= REG_FIELD_PREP(CUR_WM_BLOCKS_MASK, level->blocks);
> + val |= REG_FIELD_PREP(CUR_WM_LINES_MASK, level->lines);
> +
> + return val;
> +}
> +
>  static void skl_write_cursor_wm(struct intel_plane *plane,
>   const struct intel_crtc_state *crtc_state)
>  {
> @@ -572,22 +594,22 @@ static void skl_write_cursor_wm(struct intel_plane 
> *plane,
>  
>   for (level = 0; level < i915->display.wm.num_levels; level++)
>   intel_de_write_fw(i915, CUR_WM(pipe, level),
> -   
> skl_plane_wm_reg_val(skl_plane_wm_level(pipe_wm, plane_id, level)));
> +   
> skl_cursor_wm_reg_val(skl_plane_wm_level(pipe_wm, plane_id, level)));
>  
>   intel_de_write_fw(i915, CUR_WM_TRANS(pipe),
> -   skl_plane_wm_reg_val(skl_plane_trans_wm(pipe_wm, 
> plane_id)));
> +   skl_cursor_wm_reg_val(skl_plane_trans_wm(pipe_wm, 
> plane_id)));
>  
>   if (HAS_HW_SAGV_WM(i915)) {
>   const struct skl_plane_wm *wm = &pipe_wm->planes[plane_id];
>  
>   intel_de_write_fw(i915, CUR_WM_SAGV(pipe),
> -   skl_plane_wm_reg_val(&wm->sagv.wm0));
> +   skl_cursor_wm_reg_val(&wm->sagv.wm0));
>   intel_de_write_fw(i915, CUR_WM_SAGV_TRANS(pipe),
> -   skl_plane_wm_reg_val(&wm->sagv.trans_wm));
> +   skl_cursor_wm_reg_val(&wm->sagv.trans_wm));
>   }
>  
>   intel_de_write_fw(i915, CUR_BUF_CFG(pipe),
> -   skl_plane_ddb_reg_val(ddb));
> +   skl_cursor_ddb_reg_val(ddb));
>  }
>  
>  /* TODO: split into noarm+arm pair */
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor_regs.h 
> b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> index ab02d497fba6..307a850d54b6 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_cursor_regs.h
> @@ -78,6 +78,10 @@
>  #define _CUR_WM_A_0  0x70140
>  #define _CUR_WM_B_0  0x71140
>  #define CUR_WM(pipe, level)  _MMIO(_PIPE((pipe), _CUR_WM_A_0, _CUR_WM_B_0) + 
> (level) * 4)
> +#define   CUR_WM_EN  REG_BIT(31)
> +#define   CUR_WM_IGNORE_LINESREG_BIT(30)
> +#define   CUR_WM_LINES_MASK  REG_GENMASK(26, 14)
> +#define   CUR_WM_BLOCKS_MASK REG_GENMASK(11, 0)
>  
>  #define _CUR_WM_SAGV_A   0x70158
>  #define _CUR_WM_SAGV_B   0x71158
> @@ -94,6 +98,11 @@
>  #define _CUR_BUF_CFG_A   0x7017c
>  #define _CUR_BUF_CFG_B   0x7117c
>  #define CUR_BUF_CFG(pipe)_MMIO_PIPE((pipe), _CUR_BUF_CFG_A, 
> _CUR_BUF_CFG_B)
> +/* skl+: 10 bits, icl+ 11 bits, adlp+ 12 bits */
> +#define   CUR_BUF_END_MASK   REG_GENMASK(27, 16)
> +#define   CUR_BUF_END(end)   REG_FIELD_PREP(CUR_BUF_END_MASK, (end))
> +#define   CUR_BUF_START_MASK REG_GENMASK(11, 0)
> +#define   CUR_BUF_START(start)   
> REG_FIELD_PREP(CUR_BUF_START_MASK, (start))
>  
>  #define _SEL_FETCH_CUR_CTL_A 0x70880 /* mtl+ */
>  #define _SEL_FETCH_CUR_CTL_B 0x71880
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c 
> b/drivers/gpu/drm

Re: [PATCH 13/13] drm/i915: Document which platforms use which sprite registers

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Note which sprite registers are valid for which platforms.
>
> Signed-off-by: Ville Syrjälä 

Acked-by: Jani Nikula 

> ---
>  .../gpu/drm/i915/display/intel_sprite_regs.h  | 19 +++
>  1 file changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sprite_regs.h 
> b/drivers/gpu/drm/i915/display/intel_sprite_regs.h
> index c27adbaf0f00..73021e3ced6d 100644
> --- a/drivers/gpu/drm/i915/display/intel_sprite_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_sprite_regs.h
> @@ -6,6 +6,7 @@
>  
>  #include "intel_display_reg_defs.h"
>  
> +/* g4x/ilk/snb video sprite */
>  #define _DVSACNTR0x72180
>  #define _DVSBCNTR0x73180
>  #define DVSCNTR(pipe) _MMIO_PIPE(pipe, _DVSACNTR, _DVSBCNTR)
> @@ -111,6 +112,7 @@
>  #define _DVSBGAMCMAX_ILK 0x73340 /* ilk/snb */
>  #define DVSGAMCMAX_ILK(pipe, i) _MMIO(_PIPE(pipe, _DVSAGAMCMAX_ILK, 
> _DVSBGAMCMAX_ILK) + (i) * 4) /* 3 x u1.10 */
>  
> +/* ivb/hsw/bdw sprite */
>  #define _SPRA_CTL0x70280
>  #define _SPRB_CTL0x71280
>  #define SPRCTL(pipe) _MMIO_PIPE(pipe, _SPRA_CTL, _SPRB_CTL)
> @@ -140,8 +142,8 @@
>  #define   SPRITE_TILED   REG_BIT(10)
>  #define   SPRITE_DEST_KEYREG_BIT(2)
>  
> -#define _SPRA_LINOFF 0x70284
> -#define _SPRB_LINOFF 0x71284
> +#define _SPRA_LINOFF 0x70284 /* ivb */
> +#define _SPRB_LINOFF 0x71284 /* ivb */
>  #define SPRLINOFF(pipe) _MMIO_PIPE(pipe, _SPRA_LINOFF, _SPRB_LINOFF)
>  
>  #define _SPRA_STRIDE 0x70288
> @@ -181,24 +183,24 @@
>  #define _SPRB_KEYMAX 0x712a0
>  #define SPRKEYMAX(pipe) _MMIO_PIPE(pipe, _SPRA_KEYMAX, _SPRB_KEYMAX)
>  
> -#define _SPRA_TILEOFF0x702a4
> -#define _SPRB_TILEOFF0x712a4
> +#define _SPRA_TILEOFF0x702a4 /* ivb */
> +#define _SPRB_TILEOFF0x712a4 /* ivb */
>  #define SPRTILEOFF(pipe) _MMIO_PIPE(pipe, _SPRA_TILEOFF, _SPRB_TILEOFF)
>  #define   SPRITE_OFFSET_Y_MASK   REG_GENMASK(31, 16)
>  #define   SPRITE_OFFSET_Y(y) REG_FIELD_PREP(SPRITE_OFFSET_Y_MASK, (y))
>  #define   SPRITE_OFFSET_X_MASK   REG_GENMASK(15, 0)
>  #define   SPRITE_OFFSET_X(x) REG_FIELD_PREP(SPRITE_OFFSET_X_MASK, (x))
>  
> -#define _SPRA_OFFSET 0x702a4
> -#define _SPRB_OFFSET 0x712a4
> +#define _SPRA_OFFSET 0x702a4 /* hsw/bdw */
> +#define _SPRB_OFFSET 0x712a4 /* hsw/bdw */
>  #define SPROFFSET(pipe) _MMIO_PIPE(pipe, _SPRA_OFFSET, _SPRB_OFFSET)
>  
>  #define _SPRA_SURFLIVE   0x702ac
>  #define _SPRB_SURFLIVE   0x712ac
>  #define SPRSURFLIVE(pipe) _MMIO_PIPE(pipe, _SPRA_SURFLIVE, _SPRB_SURFLIVE)
>  
> -#define _SPRA_SCALE  0x70304
> -#define _SPRB_SCALE  0x71304
> +#define _SPRA_SCALE  0x70304 /* ivb */
> +#define _SPRB_SCALE  0x71304 /* ivb */
>  #define SPRSCALE(pipe) _MMIO_PIPE(pipe, _SPRA_SCALE, _SPRB_SCALE)
>  #define   SPRITE_SCALE_ENABLEREG_BIT(31)
>  #define   SPRITE_FILTER_MASK REG_GENMASK(30, 29)
> @@ -224,6 +226,7 @@
>  #define _SPRB_GAMC17 0x7144c
>  #define SPRGAMC17(pipe, i) _MMIO(_PIPE(pipe, _SPRA_GAMC17, _SPRB_GAMC17) + 
> (i) * 4) /* 3 x u2.10 */
>  
> +/* vlv/chv sprite */
>  #define _VLV_SPR(pipe, plane_id, reg_a, reg_b) \
>   _PIPE((pipe) * 2 + (plane_id) - PLANE_SPRITE0, (reg_a), (reg_b))
>  #define _MMIO_VLV_SPR(pipe, plane_id, reg_a, reg_b) \

-- 
Jani Nikula, Intel


Re: [PATCH 12/13] drm/i915: Polish sprite plane register definitions

2024-05-20 Thread Jani Nikula
On Mon, 20 May 2024, Jani Nikula  wrote:
> On Thu, 16 May 2024, Ville Syrjala  wrote:
>> From: Ville Syrjälä 
>>
>> Group the sprite plane register definitions such that everything
>> to do wiht the same register is in one place.

*with

>>
>> Signed-off-by: Ville Syrjälä 
>
> Reviewed-by: Jani Nikula 
>
>> ---
>>  .../gpu/drm/i915/display/intel_sprite_regs.h  | 231 ++
>>  1 file changed, 134 insertions(+), 97 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_sprite_regs.h 
>> b/drivers/gpu/drm/i915/display/intel_sprite_regs.h
>> index bb67705652b2..c27adbaf0f00 100644
>> --- a/drivers/gpu/drm/i915/display/intel_sprite_regs.h
>> +++ b/drivers/gpu/drm/i915/display/intel_sprite_regs.h
>> @@ -7,6 +7,8 @@
>>  #include "intel_display_reg_defs.h"
>>  
>>  #define _DVSACNTR   0x72180
>> +#define _DVSBCNTR   0x73180
>> +#define DVSCNTR(pipe) _MMIO_PIPE(pipe, _DVSACNTR, _DVSBCNTR)
>>  #define   DVS_ENABLEREG_BIT(31)
>>  #define   DVS_PIPE_GAMMA_ENABLE REG_BIT(30)
>>  #define   DVS_YUV_RANGE_CORRECTION_DISABLE  REG_BIT(27)
>> @@ -28,31 +30,67 @@
>>  #define   DVS_TRICKLE_FEED_DISABLE  REG_BIT(14)
>>  #define   DVS_TILED REG_BIT(10)
>>  #define   DVS_DEST_KEY  REG_BIT(2)
>> +
>>  #define _DVSALINOFF 0x72184
>> +#define _DVSBLINOFF 0x73184
>> +#define DVSLINOFF(pipe) _MMIO_PIPE(pipe, _DVSALINOFF, _DVSBLINOFF)
>> +
>>  #define _DVSASTRIDE 0x72188
>> +#define _DVSBSTRIDE 0x73188
>> +#define DVSSTRIDE(pipe) _MMIO_PIPE(pipe, _DVSASTRIDE, _DVSBSTRIDE)
>> +
>>  #define _DVSAPOS0x7218c
>> +#define _DVSBPOS0x7318c
>> +#define DVSPOS(pipe) _MMIO_PIPE(pipe, _DVSAPOS, _DVSBPOS)
>>  #define   DVS_POS_Y_MASKREG_GENMASK(31, 16)
>>  #define   DVS_POS_Y(y)  REG_FIELD_PREP(DVS_POS_Y_MASK, 
>> (y))
>>  #define   DVS_POS_X_MASKREG_GENMASK(15, 0)
>>  #define   DVS_POS_X(x)  REG_FIELD_PREP(DVS_POS_X_MASK, 
>> (x))
>> +
>>  #define _DVSASIZE   0x72190
>> +#define _DVSBSIZE   0x73190
>> +#define DVSSIZE(pipe) _MMIO_PIPE(pipe, _DVSASIZE, _DVSBSIZE)
>>  #define   DVS_HEIGHT_MASK   REG_GENMASK(31, 16)
>>  #define   DVS_HEIGHT(h) REG_FIELD_PREP(DVS_HEIGHT_MASK, 
>> (h))
>>  #define   DVS_WIDTH_MASKREG_GENMASK(15, 0)
>>  #define   DVS_WIDTH(w)  REG_FIELD_PREP(DVS_WIDTH_MASK, 
>> (w))
>> +
>>  #define _DVSAKEYVAL 0x72194
>> +#define _DVSBKEYVAL 0x73194
>> +#define DVSKEYVAL(pipe) _MMIO_PIPE(pipe, _DVSAKEYVAL, _DVSBKEYVAL)
>> +
>>  #define _DVSAKEYMSK 0x72198
>> +#define _DVSBKEYMSK 0x73198
>> +#define DVSKEYMSK(pipe) _MMIO_PIPE(pipe, _DVSAKEYMSK, _DVSBKEYMSK)
>> +
>>  #define _DVSASURF   0x7219c
>> +#define _DVSBSURF   0x7319c
>> +#define DVSSURF(pipe) _MMIO_PIPE(pipe, _DVSASURF, _DVSBSURF)
>>  #define   DVS_ADDR_MASK REG_GENMASK(31, 12)
>> +
>>  #define _DVSAKEYMAXVAL  0x721a0
>> +#define _DVSBKEYMAXVAL  0x731a0
>> +#define DVSKEYMAX(pipe) _MMIO_PIPE(pipe, _DVSAKEYMAXVAL, _DVSBKEYMAXVAL)
>> +
>>  #define _DVSATILEOFF0x721a4
>> +#define _DVSBTILEOFF0x731a4
>> +#define DVSTILEOFF(pipe) _MMIO_PIPE(pipe, _DVSATILEOFF, _DVSBTILEOFF)
>>  #define   DVS_OFFSET_Y_MASK REG_GENMASK(31, 16)
>>  #define   DVS_OFFSET_Y(y)   REG_FIELD_PREP(DVS_OFFSET_Y_MASK, (y))
>>  #define   DVS_OFFSET_X_MASK REG_GENMASK(15, 0)
>>  #define   DVS_OFFSET_X(x)   REG_FIELD_PREP(DVS_OFFSET_X_MASK, (x))
>> +
>>  #define _DVSASURFLIVE   0x721ac
>> +#define _DVSBSURFLIVE   0x731ac
>> +#define DVSSURFLIVE(pipe) _MMIO_PIPE(pipe, _DVSASURFLIVE, _DVSBSURFLIVE)
>> +
>>  #define _DVSAGAMC_G4X   0x721e0 /* g4x */
>> +#define _DVSBGAMC_G4X   0x731e0 /* g4x */
>> +#define DVSGAMC_G4X(pipe, i) _MMIO(_PIPE(pipe, _DVSAGAMC_G4X, 
>> _DVSBGAMC_G4X) + (5 - (i)) * 4) /* 6 x u0.8 */
>> +
>>  #define _DVSASCALE  0x72204
>> +#define _DVSBSCALE  0x73204
>> +#define DVSSCALE(pipe) _MMIO_PIPE(pipe, _DVSASCALE, _DVSBSCALE)
>>  #define   DVS_SCALE_ENABLE  REG_BIT(31)
>>  #define   DVS_FILTER_MASK   REG_GENMASK(30, 29)
>>  #define   DVS_FILTER_MEDIUM REG_FIELD_PREP(DVS_FILTER_MASK, 0)
>> @@ -64,42 +102,18 @@
>>  #define   DVS_SRC_WIDTH(w)  REG_FIELD_PREP(DVS_SRC_WIDTH_MASK, (w))
>>  #define   DVS_SRC_HEIGHT_MASK   REG_GENMASK(10, 0)
>>  #define   DVS_SRC_HEIGHT(h) REG_FIELD_PREP(DVS_SRC_HEIGHT_MASK, (h))
>> +
>>  #define _DVSAGAMC_ILK   0x72300 /* ilk/snb */
>> -#define _DVSAGAMCMAX_ILK0x72340 /* ilk/snb */
>> -
>> -#define _DVSBCNTR   0x73180
>> -#define _DVSBLINOFF 0x73184
>> -#define _DVSBSTRIDE 0x73188
>> -#define _DVSBPOS0x7318c
>> -#define _DVSBSIZE   0x73190
>> -#

Re: [PATCH 12/13] drm/i915: Polish sprite plane register definitions

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Group the sprite plane register definitions such that everything
> to do wiht the same register is in one place.
>
> Signed-off-by: Ville Syrjälä 

Reviewed-by: Jani Nikula 

> ---
>  .../gpu/drm/i915/display/intel_sprite_regs.h  | 231 ++
>  1 file changed, 134 insertions(+), 97 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sprite_regs.h 
> b/drivers/gpu/drm/i915/display/intel_sprite_regs.h
> index bb67705652b2..c27adbaf0f00 100644
> --- a/drivers/gpu/drm/i915/display/intel_sprite_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_sprite_regs.h
> @@ -7,6 +7,8 @@
>  #include "intel_display_reg_defs.h"
>  
>  #define _DVSACNTR0x72180
> +#define _DVSBCNTR0x73180
> +#define DVSCNTR(pipe) _MMIO_PIPE(pipe, _DVSACNTR, _DVSBCNTR)
>  #define   DVS_ENABLE REG_BIT(31)
>  #define   DVS_PIPE_GAMMA_ENABLE  REG_BIT(30)
>  #define   DVS_YUV_RANGE_CORRECTION_DISABLE   REG_BIT(27)
> @@ -28,31 +30,67 @@
>  #define   DVS_TRICKLE_FEED_DISABLE   REG_BIT(14)
>  #define   DVS_TILED  REG_BIT(10)
>  #define   DVS_DEST_KEY   REG_BIT(2)
> +
>  #define _DVSALINOFF  0x72184
> +#define _DVSBLINOFF  0x73184
> +#define DVSLINOFF(pipe) _MMIO_PIPE(pipe, _DVSALINOFF, _DVSBLINOFF)
> +
>  #define _DVSASTRIDE  0x72188
> +#define _DVSBSTRIDE  0x73188
> +#define DVSSTRIDE(pipe) _MMIO_PIPE(pipe, _DVSASTRIDE, _DVSBSTRIDE)
> +
>  #define _DVSAPOS 0x7218c
> +#define _DVSBPOS 0x7318c
> +#define DVSPOS(pipe) _MMIO_PIPE(pipe, _DVSAPOS, _DVSBPOS)
>  #define   DVS_POS_Y_MASK REG_GENMASK(31, 16)
>  #define   DVS_POS_Y(y)   REG_FIELD_PREP(DVS_POS_Y_MASK, 
> (y))
>  #define   DVS_POS_X_MASK REG_GENMASK(15, 0)
>  #define   DVS_POS_X(x)   REG_FIELD_PREP(DVS_POS_X_MASK, 
> (x))
> +
>  #define _DVSASIZE0x72190
> +#define _DVSBSIZE0x73190
> +#define DVSSIZE(pipe) _MMIO_PIPE(pipe, _DVSASIZE, _DVSBSIZE)
>  #define   DVS_HEIGHT_MASKREG_GENMASK(31, 16)
>  #define   DVS_HEIGHT(h)  REG_FIELD_PREP(DVS_HEIGHT_MASK, 
> (h))
>  #define   DVS_WIDTH_MASK REG_GENMASK(15, 0)
>  #define   DVS_WIDTH(w)   REG_FIELD_PREP(DVS_WIDTH_MASK, 
> (w))
> +
>  #define _DVSAKEYVAL  0x72194
> +#define _DVSBKEYVAL  0x73194
> +#define DVSKEYVAL(pipe) _MMIO_PIPE(pipe, _DVSAKEYVAL, _DVSBKEYVAL)
> +
>  #define _DVSAKEYMSK  0x72198
> +#define _DVSBKEYMSK  0x73198
> +#define DVSKEYMSK(pipe) _MMIO_PIPE(pipe, _DVSAKEYMSK, _DVSBKEYMSK)
> +
>  #define _DVSASURF0x7219c
> +#define _DVSBSURF0x7319c
> +#define DVSSURF(pipe) _MMIO_PIPE(pipe, _DVSASURF, _DVSBSURF)
>  #define   DVS_ADDR_MASK  REG_GENMASK(31, 12)
> +
>  #define _DVSAKEYMAXVAL   0x721a0
> +#define _DVSBKEYMAXVAL   0x731a0
> +#define DVSKEYMAX(pipe) _MMIO_PIPE(pipe, _DVSAKEYMAXVAL, _DVSBKEYMAXVAL)
> +
>  #define _DVSATILEOFF 0x721a4
> +#define _DVSBTILEOFF 0x731a4
> +#define DVSTILEOFF(pipe) _MMIO_PIPE(pipe, _DVSATILEOFF, _DVSBTILEOFF)
>  #define   DVS_OFFSET_Y_MASK  REG_GENMASK(31, 16)
>  #define   DVS_OFFSET_Y(y)REG_FIELD_PREP(DVS_OFFSET_Y_MASK, (y))
>  #define   DVS_OFFSET_X_MASK  REG_GENMASK(15, 0)
>  #define   DVS_OFFSET_X(x)REG_FIELD_PREP(DVS_OFFSET_X_MASK, (x))
> +
>  #define _DVSASURFLIVE0x721ac
> +#define _DVSBSURFLIVE0x731ac
> +#define DVSSURFLIVE(pipe) _MMIO_PIPE(pipe, _DVSASURFLIVE, _DVSBSURFLIVE)
> +
>  #define _DVSAGAMC_G4X0x721e0 /* g4x */
> +#define _DVSBGAMC_G4X0x731e0 /* g4x */
> +#define DVSGAMC_G4X(pipe, i) _MMIO(_PIPE(pipe, _DVSAGAMC_G4X, _DVSBGAMC_G4X) 
> + (5 - (i)) * 4) /* 6 x u0.8 */
> +
>  #define _DVSASCALE   0x72204
> +#define _DVSBSCALE   0x73204
> +#define DVSSCALE(pipe) _MMIO_PIPE(pipe, _DVSASCALE, _DVSBSCALE)
>  #define   DVS_SCALE_ENABLE   REG_BIT(31)
>  #define   DVS_FILTER_MASKREG_GENMASK(30, 29)
>  #define   DVS_FILTER_MEDIUM  REG_FIELD_PREP(DVS_FILTER_MASK, 0)
> @@ -64,42 +102,18 @@
>  #define   DVS_SRC_WIDTH(w)   REG_FIELD_PREP(DVS_SRC_WIDTH_MASK, (w))
>  #define   DVS_SRC_HEIGHT_MASKREG_GENMASK(10, 0)
>  #define   DVS_SRC_HEIGHT(h)  REG_FIELD_PREP(DVS_SRC_HEIGHT_MASK, (h))
> +
>  #define _DVSAGAMC_ILK0x72300 /* ilk/snb */
> -#define _DVSAGAMCMAX_ILK 0x72340 /* ilk/snb */
> -
> -#define _DVSBCNTR0x73180
> -#define _DVSBLINOFF  0x73184
> -#define _DVSBSTRIDE  0x73188
> -#define _DVSBPOS 0x7318c
> -#define _DVSBSIZE0x73190
> -#define _DVSBKEYVAL  0x73194
> -#define _DVSBKEYMSK  0x73198
> -#define _DVSBSURF0x7319c
> -#define _DVSB

Re: [PATCH 11/13] drm/i915: Document a few pre-skl primary plane platform dependencies

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Add some notes indicatign which plane registers/bits are

*indicating

> valid for which platforms.
>
> Signed-off-by: Ville Syrjälä 

Acked-by: Jani Nikula 

because I'm not going to chase through all the specs for these. ;)

> ---
>  .../gpu/drm/i915/display/i9xx_plane_regs.h| 22 +--
>  1 file changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/i9xx_plane_regs.h 
> b/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> index 929b26faf31e..d74a74d1f29a 100644
> --- a/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> +++ b/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> @@ -37,53 +37,53 @@
>  #define   DISP_LINE_DOUBLE   REG_BIT(20)
>  #define   DISP_STEREO_POLARITY_SECONDREG_BIT(18)
>  #define   DISP_ALPHA_PREMULTIPLY REG_BIT(16) /* CHV pipe B */
> -#define   DISP_ROTATE_180REG_BIT(15)
> +#define   DISP_ROTATE_180REG_BIT(15) /* i965+ */
>  #define   DISP_TRICKLE_FEED_DISABLE  REG_BIT(14) /* g4x+ */
> -#define   DISP_TILED REG_BIT(10)
> +#define   DISP_TILED REG_BIT(10) /* i965+ */
>  #define   DISP_ASYNC_FLIPREG_BIT(9) /* g4x+ */
>  #define   DISP_MIRRORREG_BIT(8) /* CHV pipe B */
>  
> -#define _DSPAADDR0x70184
> +#define _DSPAADDR0x70184 /* pre-i965 */
>  #define DSPADDR(plane)   _MMIO_PIPE2(dev_priv, 
> plane, _DSPAADDR)
>  
> -#define _DSPALINOFF  0x70184
> +#define _DSPALINOFF  0x70184 /* i965+ */
>  #define DSPLINOFF(plane) _MMIO_PIPE2(dev_priv, plane, 
> _DSPALINOFF)
>  
>  #define _DSPASTRIDE  0x70188
>  #define DSPSTRIDE(plane) _MMIO_PIPE2(dev_priv, plane, 
> _DSPASTRIDE)
>  
> -#define _DSPAPOS 0x7018C /* reserved */
> +#define _DSPAPOS 0x7018C /* pre-g4x */
>  #define DSPPOS(plane)_MMIO_PIPE2(dev_priv, 
> plane, _DSPAPOS)
>  #define   DISP_POS_Y_MASKREG_GENMASK(31, 16)
>  #define   DISP_POS_Y(y)  REG_FIELD_PREP(DISP_POS_Y_MASK, 
> (y))
>  #define   DISP_POS_X_MASKREG_GENMASK(15, 0)
>  #define   DISP_POS_X(x)  REG_FIELD_PREP(DISP_POS_X_MASK, 
> (x))
>  
> -#define _DSPASIZE0x70190
> +#define _DSPASIZE0x70190 /* pre-g4x */
>  #define DSPSIZE(plane)   _MMIO_PIPE2(dev_priv, 
> plane, _DSPASIZE)
>  #define   DISP_HEIGHT_MASK   REG_GENMASK(31, 16)
>  #define   DISP_HEIGHT(h) REG_FIELD_PREP(DISP_HEIGHT_MASK, (h))
>  #define   DISP_WIDTH_MASKREG_GENMASK(15, 0)
>  #define   DISP_WIDTH(w)  REG_FIELD_PREP(DISP_WIDTH_MASK, 
> (w))
>  
> -#define _DSPASURF0x7019C /* 965+ only */
> +#define _DSPASURF0x7019C /* i965+ */
>  #define DSPSURF(plane)   _MMIO_PIPE2(dev_priv, 
> plane, _DSPASURF)
>  #define   DISP_ADDR_MASK REG_GENMASK(31, 12)
>  
> -#define _DSPATILEOFF 0x701A4 /* 965+ only */
> +#define _DSPATILEOFF 0x701A4 /* i965+ */
>  #define DSPTILEOFF(plane)_MMIO_PIPE2(dev_priv, plane, 
> _DSPATILEOFF)
>  #define   DISP_OFFSET_Y_MASK REG_GENMASK(31, 16)
>  #define   DISP_OFFSET_Y(y)   REG_FIELD_PREP(DISP_OFFSET_Y_MASK, (y))
>  #define   DISP_OFFSET_X_MASK REG_GENMASK(15, 0)
>  #define   DISP_OFFSET_X(x)   REG_FIELD_PREP(DISP_OFFSET_X_MASK, (x))
>  
> -#define _DSPAOFFSET  0x701A4 /* HSW */
> +#define _DSPAOFFSET  0x701A4 /* hsw+ */
>  #define DSPOFFSET(plane) _MMIO_PIPE2(dev_priv, plane, 
> _DSPAOFFSET)
>  
> -#define _DSPASURFLIVE0x701AC
> +#define _DSPASURFLIVE0x701AC /* g4x+ */
>  #define DSPSURFLIVE(plane)   _MMIO_PIPE2(dev_priv, plane, 
> _DSPASURFLIVE)
>  
> -#define _DSPAGAMC0x701E0
> +#define _DSPAGAMC0x701E0 /* pre-g4x */
>  #define DSPGAMC(plane, i)_MMIO_PIPE2(dev_priv, plane, 
> _DSPAGAMC + (5 - (i)) * 4) /* plane C only, 6 x u0.8 */
>  
>  /* CHV pipe B primary plane */

-- 
Jani Nikula, Intel


Re: [PATCH 10/13] drm/i915: Polish pre-skl primary plane registers

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Group the pre-skl primary plane register definitions
> sensible, and toss in a few comments to indicate which
> platforms have what.
>
> Signed-off-by: Ville Syrjälä 

Reviewed-by: Jani Nikula 

> ---
>  .../gpu/drm/i915/display/i9xx_plane_regs.h| 46 ---
>  1 file changed, 29 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/i9xx_plane_regs.h 
> b/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> index 0bf2cd42bce7..929b26faf31e 100644
> --- a/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> +++ b/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> @@ -9,7 +9,10 @@
>  #include "intel_display_reg_defs.h"
>  
>  #define _DSPAADDR_VLV0x7017C /* vlv/chv */
> +#define DSPADDR_VLV(plane)   _MMIO_PIPE2(dev_priv, plane, 
> _DSPAADDR_VLV)
> +
>  #define _DSPACNTR0x70180
> +#define DSPCNTR(plane)   _MMIO_PIPE2(dev_priv, 
> plane, _DSPACNTR)
>  #define   DISP_ENABLEREG_BIT(31)
>  #define   DISP_PIPE_GAMMA_ENABLE REG_BIT(30)
>  #define   DISP_FORMAT_MASK   REG_GENMASK(29, 26)
> @@ -39,60 +42,69 @@
>  #define   DISP_TILED REG_BIT(10)
>  #define   DISP_ASYNC_FLIPREG_BIT(9) /* g4x+ */
>  #define   DISP_MIRRORREG_BIT(8) /* CHV pipe B */
> +
>  #define _DSPAADDR0x70184
> +#define DSPADDR(plane)   _MMIO_PIPE2(dev_priv, 
> plane, _DSPAADDR)
> +
> +#define _DSPALINOFF  0x70184
> +#define DSPLINOFF(plane) _MMIO_PIPE2(dev_priv, plane, 
> _DSPALINOFF)
> +
>  #define _DSPASTRIDE  0x70188
> +#define DSPSTRIDE(plane) _MMIO_PIPE2(dev_priv, plane, 
> _DSPASTRIDE)
> +
>  #define _DSPAPOS 0x7018C /* reserved */
> +#define DSPPOS(plane)_MMIO_PIPE2(dev_priv, 
> plane, _DSPAPOS)
>  #define   DISP_POS_Y_MASKREG_GENMASK(31, 16)
>  #define   DISP_POS_Y(y)  REG_FIELD_PREP(DISP_POS_Y_MASK, 
> (y))
>  #define   DISP_POS_X_MASKREG_GENMASK(15, 0)
>  #define   DISP_POS_X(x)  REG_FIELD_PREP(DISP_POS_X_MASK, 
> (x))
> +
>  #define _DSPASIZE0x70190
> +#define DSPSIZE(plane)   _MMIO_PIPE2(dev_priv, 
> plane, _DSPASIZE)
>  #define   DISP_HEIGHT_MASK   REG_GENMASK(31, 16)
>  #define   DISP_HEIGHT(h) REG_FIELD_PREP(DISP_HEIGHT_MASK, (h))
>  #define   DISP_WIDTH_MASKREG_GENMASK(15, 0)
>  #define   DISP_WIDTH(w)  REG_FIELD_PREP(DISP_WIDTH_MASK, 
> (w))
> +
>  #define _DSPASURF0x7019C /* 965+ only */
> +#define DSPSURF(plane)   _MMIO_PIPE2(dev_priv, 
> plane, _DSPASURF)
>  #define   DISP_ADDR_MASK REG_GENMASK(31, 12)
> +
>  #define _DSPATILEOFF 0x701A4 /* 965+ only */
> +#define DSPTILEOFF(plane)_MMIO_PIPE2(dev_priv, plane, 
> _DSPATILEOFF)
>  #define   DISP_OFFSET_Y_MASK REG_GENMASK(31, 16)
>  #define   DISP_OFFSET_Y(y)   REG_FIELD_PREP(DISP_OFFSET_Y_MASK, (y))
>  #define   DISP_OFFSET_X_MASK REG_GENMASK(15, 0)
>  #define   DISP_OFFSET_X(x)   REG_FIELD_PREP(DISP_OFFSET_X_MASK, (x))
> +
>  #define _DSPAOFFSET  0x701A4 /* HSW */
> +#define DSPOFFSET(plane) _MMIO_PIPE2(dev_priv, plane, 
> _DSPAOFFSET)
> +
>  #define _DSPASURFLIVE0x701AC
> +#define DSPSURFLIVE(plane)   _MMIO_PIPE2(dev_priv, plane, 
> _DSPASURFLIVE)
> +
>  #define _DSPAGAMC0x701E0
> -
> -#define DSPADDR_VLV(plane)   _MMIO_PIPE2(dev_priv, plane, _DSPAADDR_VLV)
> -#define DSPCNTR(plane)   _MMIO_PIPE2(dev_priv, plane, _DSPACNTR)
> -#define DSPADDR(plane)   _MMIO_PIPE2(dev_priv, plane, _DSPAADDR)
> -#define DSPSTRIDE(plane) _MMIO_PIPE2(dev_priv, plane, _DSPASTRIDE)
> -#define DSPPOS(plane)_MMIO_PIPE2(dev_priv, plane, _DSPAPOS)
> -#define DSPSIZE(plane)   _MMIO_PIPE2(dev_priv, plane, _DSPASIZE)
> -#define DSPSURF(plane)   _MMIO_PIPE2(dev_priv, plane, _DSPASURF)
> -#define DSPTILEOFF(plane)_MMIO_PIPE2(dev_priv, plane, _DSPATILEOFF)
> -#define DSPLINOFF(plane) DSPADDR(plane)
> -#define DSPOFFSET(plane) _MMIO_PIPE2(dev_priv, plane, _DSPAOFFSET)
> -#define DSPSURFLIVE(plane)   _MMIO_PIPE2(dev_priv, plane, _DSPASURFLIVE)
> -#define DSPGAMC(plane, i)_MMIO_PIPE2(dev_priv, plane, _DSPAGAMC + (5 - 
> (i)) * 4) /* plane C only, 6 x u0.8 */
> +#define DSPGAMC(plane, i)_MMIO_PIPE2(dev_priv, plane, 
> _DSPAGAMC + (5 - (i)) * 4) /* plane C only, 6 x u0.8 */
>  
>  /* CHV pipe B primar

Re: [PATCH 08/13] drm/i915: Move PIPEGCMAX to intel_color_regs.h

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> PIPEGCMAX was left behind when all other gamma registers moved
> into intel_color_regs.h.
>
> Signed-off-by: Ville Syrjälä 

Reviewed-by: Jani Nikula 

> ---
>  drivers/gpu/drm/i915/display/intel_color_regs.h | 5 +
>  drivers/gpu/drm/i915/i915_reg.h | 4 
>  2 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_color_regs.h 
> b/drivers/gpu/drm/i915/display/intel_color_regs.h
> index bb99ea533842..61c18b4a7fa5 100644
> --- a/drivers/gpu/drm/i915/display/intel_color_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_color_regs.h
> @@ -36,6 +36,11 @@
> _CHV_PALETTE_C, 
> _CHV_PALETTE_C) + \
> (i) * 4)
>  
> +/* i965/g4x/vlv/chv */
> +#define  _PIPEAGCMAX   0x70010
> +#define  _PIPEBGCMAX   0x71010
> +#define PIPEGCMAX(pipe, i) _MMIO_PIPE2(dev_priv, pipe, _PIPEAGCMAX + (i) 
> * 4) /* u1.16 */
> +
>  /* ilk+ palette */
>  #define _LGC_PALETTE_A   0x4a000
>  #define _LGC_PALETTE_B   0x4a800
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 52b029cd3981..f5e8833cc37e 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -1882,10 +1882,6 @@
>  #define PIPEFRAMEPIXEL(pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPEAFRAMEPIXEL)
>  #define PIPESTAT(pipe)   _MMIO_PIPE2(dev_priv, pipe, _PIPEASTAT)
>  
> -#define  _PIPEAGCMAX   0x70010
> -#define  _PIPEBGCMAX   0x71010
> -#define PIPEGCMAX(pipe, i) _MMIO_PIPE2(dev_priv, pipe, _PIPEAGCMAX + (i) 
> * 4) /* u1.16 */
> -
>  #define _PIPE_ARB_CTL_A  0x70028 /* icl+ */
>  #define PIPE_ARB_CTL(pipe)   _MMIO_PIPE2(dev_priv, pipe, 
> _PIPE_ARB_CTL_A)
>  #define   PIPE_ARB_USE_PROG_SLOTSREG_BIT(13)

-- 
Jani Nikula, Intel


✗ Fi.CI.SPARSE: warning for Link off between frames for edp (rev5)

2024-05-20 Thread Patchwork
== Series Details ==

Series: Link off between frames for edp (rev5)
URL   : https://patchwork.freedesktop.org/series/130650/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.




✗ Fi.CI.CHECKPATCH: warning for Link off between frames for edp (rev5)

2024-05-20 Thread Patchwork
== Series Details ==

Series: Link off between frames for edp (rev5)
URL   : https://patchwork.freedesktop.org/series/130650/
State : warning

== Summary ==

Error: dim checkpatch failed
70ca27e269fd drm/i915/alpm: Move alpm parameters from intel_psr
-:83: WARNING:LONG_LINE: line length of 104 exceeds 100 columns
#83: FILE: drivers/gpu/drm/i915/display/intel_psr.c:958:
+   tmp = map[intel_dp->alpm_parameters.fast_wake_lines - 
TGL_EDP_PSR2_FAST_WAKE_MIN_LINES];

total: 0 errors, 1 warnings, 0 checks, 143 lines checked
282883ab4b76 drm/i915/alpm: Move alpm related code to a new file
-:27: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does 
MAINTAINERS need updating?
#27: 
new file mode 100644

-:233: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#233: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:202:
+bool intel_alpm_compute_params(struct intel_dp *intel_dp,
+ struct intel_crtc_state *crtc_state)

-:255: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#255: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:224:
+   io_wake_lines = intel_usecs_to_scanlines(

-:257: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#257: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:226:
+   fast_wake_lines = intel_usecs_to_scanlines(

-:268: CHECK:MULTIPLE_ASSIGNMENTS: multiple assignments should be avoided
#268: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:237:
+   io_wake_lines = fast_wake_lines = max_wake_lines;

-:301: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#301: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:270:
+  PORT_ALPM_CTL_SILENCE_PERIOD(

-:307: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#307: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:276:
+  PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION(

-:309: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#309: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:278:
+  
PORT_ALPM_LFPS_CTL_FIRST_LFPS_HALF_CYCLE_DURATION(

-:311: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#311: FILE: drivers/gpu/drm/i915/display/intel_alpm.c:280:
+  PORT_ALPM_LFPS_CTL_LAST_LFPS_HALF_CYCLE_DURATION(

total: 0 errors, 1 warnings, 8 checks, 640 lines checked
5267bfc09f04 drm/display: Add missing aux less alpm wake related bits
dcf0642f3fdf drm/i915/alpm: Add compute config for lobf
60be9b73a915 drm/i915/alpm: Enable lobf from source in ALPM_CTL
c98622a7d6de drm/i915/alpm: Add debugfs for LOBF




Re: [PATCH 09/13] drm/i915: Extract i9xx_plane_regs.h

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Relocate all pre-skl primary plane register definitions
> into their own declutter i915_reg.h.
>
> Cc: Zhenyu Wang 
> Cc: Zhi Wang 
> Signed-off-by: Ville Syrjälä 

Reviewed-by: Jani Nikula 

> ---
>  drivers/gpu/drm/i915/display/i9xx_plane.c |  1 +
>  .../gpu/drm/i915/display/i9xx_plane_regs.h| 98 +++
>  .../gpu/drm/i915/display/intel_atomic_plane.c |  1 +
>  drivers/gpu/drm/i915/display/intel_color.c|  2 +-
>  drivers/gpu/drm/i915/display/intel_display.c  |  1 +
>  drivers/gpu/drm/i915/display/intel_fbc.c  |  1 +
>  drivers/gpu/drm/i915/gvt/cmd_parser.c |  1 +
>  drivers/gpu/drm/i915/gvt/display.c|  1 +
>  drivers/gpu/drm/i915/gvt/fb_decoder.c |  1 +
>  drivers/gpu/drm/i915/gvt/handlers.c   |  1 +
>  drivers/gpu/drm/i915/i915_reg.h   | 87 +---
>  drivers/gpu/drm/i915/intel_clock_gating.c |  1 +
>  drivers/gpu/drm/i915/intel_gvt_mmio_table.c   |  1 +
>  13 files changed, 110 insertions(+), 87 deletions(-)
>  create mode 100644 drivers/gpu/drm/i915/display/i9xx_plane_regs.h
>
> diff --git a/drivers/gpu/drm/i915/display/i9xx_plane.c 
> b/drivers/gpu/drm/i915/display/i9xx_plane.c
> index ea4d8ba55ad8..1f05f9184cb2 100644
> --- a/drivers/gpu/drm/i915/display/i9xx_plane.c
> +++ b/drivers/gpu/drm/i915/display/i9xx_plane.c
> @@ -10,6 +10,7 @@
>  
>  #include "i915_reg.h"
>  #include "i9xx_plane.h"
> +#include "i9xx_plane_regs.h"
>  #include "intel_atomic.h"
>  #include "intel_atomic_plane.h"
>  #include "intel_de.h"
> diff --git a/drivers/gpu/drm/i915/display/i9xx_plane_regs.h 
> b/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> new file mode 100644
> index ..0bf2cd42bce7
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/display/i9xx_plane_regs.h
> @@ -0,0 +1,98 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef __I9XX_PLANE_REGS_H__
> +#define __I9XX_PLANE_REGS_H__
> +
> +#include "intel_display_reg_defs.h"
> +
> +#define _DSPAADDR_VLV0x7017C /* vlv/chv */
> +#define _DSPACNTR0x70180
> +#define   DISP_ENABLEREG_BIT(31)
> +#define   DISP_PIPE_GAMMA_ENABLE REG_BIT(30)
> +#define   DISP_FORMAT_MASK   REG_GENMASK(29, 26)
> +#define   DISP_FORMAT_8BPP   REG_FIELD_PREP(DISP_FORMAT_MASK, 2)
> +#define   DISP_FORMAT_BGRA555
> REG_FIELD_PREP(DISP_FORMAT_MASK, 3)
> +#define   DISP_FORMAT_BGRX555
> REG_FIELD_PREP(DISP_FORMAT_MASK, 4)
> +#define   DISP_FORMAT_BGRX565
> REG_FIELD_PREP(DISP_FORMAT_MASK, 5)
> +#define   DISP_FORMAT_BGRX888
> REG_FIELD_PREP(DISP_FORMAT_MASK, 6)
> +#define   DISP_FORMAT_BGRA888
> REG_FIELD_PREP(DISP_FORMAT_MASK, 7)
> +#define   DISP_FORMAT_RGBX101010 REG_FIELD_PREP(DISP_FORMAT_MASK, 8)
> +#define   DISP_FORMAT_RGBA101010 REG_FIELD_PREP(DISP_FORMAT_MASK, 9)
> +#define   DISP_FORMAT_BGRX101010 REG_FIELD_PREP(DISP_FORMAT_MASK, 10)
> +#define   DISP_FORMAT_BGRA101010 REG_FIELD_PREP(DISP_FORMAT_MASK, 11)
> +#define   DISP_FORMAT_RGBX161616 REG_FIELD_PREP(DISP_FORMAT_MASK, 12)
> +#define   DISP_FORMAT_RGBX888
> REG_FIELD_PREP(DISP_FORMAT_MASK, 14)
> +#define   DISP_FORMAT_RGBA888
> REG_FIELD_PREP(DISP_FORMAT_MASK, 15)
> +#define   DISP_STEREO_ENABLE REG_BIT(25)
> +#define   DISP_PIPE_CSC_ENABLE   REG_BIT(24) /* ilk+ */
> +#define   DISP_PIPE_SEL_MASK REG_GENMASK(25, 24)
> +#define   DISP_PIPE_SEL(pipe)
> REG_FIELD_PREP(DISP_PIPE_SEL_MASK, (pipe))
> +#define   DISP_SRC_KEY_ENABLEREG_BIT(22)
> +#define   DISP_LINE_DOUBLE   REG_BIT(20)
> +#define   DISP_STEREO_POLARITY_SECONDREG_BIT(18)
> +#define   DISP_ALPHA_PREMULTIPLY REG_BIT(16) /* CHV pipe B */
> +#define   DISP_ROTATE_180REG_BIT(15)
> +#define   DISP_TRICKLE_FEED_DISABLE  REG_BIT(14) /* g4x+ */
> +#define   DISP_TILED REG_BIT(10)
> +#define   DISP_ASYNC_FLIPREG_BIT(9) /* g4x+ */
> +#define   DISP_MIRRORREG_BIT(8) /* CHV pipe B */
> +#define _DSPAADDR0x70184
> +#define _DSPASTRIDE  0x70188
> +#define _DSPAPOS 0x7018C /* reserved */
> +#define   DISP_POS_Y_MASKREG_GENMASK(31, 16)
> +#define   DISP_POS_Y(y)  REG_FIELD_PREP(DISP_POS_Y_MASK, 
> (y))
> +#define   DISP_POS_X_MASKREG_GENMASK(15, 0)
> +#define   DISP_POS_X(x)  REG_FIELD_PREP(DISP_POS_X_MASK, 
> (x))
> +#define _DSPASIZE0x70190
> +#define   DISP_HEIGHT_MASK   REG_GENMASK(31, 16)
> +#define   DISP_HEIGHT(h) REG_FIELD_PREP(DISP_HEIGHT_MASK, (h))
> +#define   DISP_WIDTH_MASKREG_GENMASK(15, 0

Re: [linux-next:master] [mm/slab] 7bd230a266: WARNING:at_mm/util.c:#kvmalloc_node_noprof

2024-05-20 Thread Kent Overstreet
this looks like an i915 bug

On Wed, May 15, 2024 at 10:41:19AM +0800, kernel test robot wrote:
> 
> 
> Hello,
> 
> as we understand, this commit is not the root-cause of this WARNING. the 
> WARNING
> just shows in another way by commit changes.
> 
> 53ed0af496422959 7bd230a26648ac68ab3731ebbc4
>  ---
>fail:runs  %reproductionfail:runs
>| | |
>   6:6  -83%:6 dmesg.RIP:kvmalloc_node
>:6   33%   6:6 dmesg.RIP:kvmalloc_node_noprof
>   6:6  -83%:6 
> dmesg.WARNING:at_mm/util.c:#kvmalloc_node
>:6   33%   6:6 
> dmesg.WARNING:at_mm/util.c:#kvmalloc_node_noprof
> 
> 
> but we failed to bisect "dmesg.WARNING:at_mm/util.c:#kvmalloc_node".
> 
> we still made this report FYI what we observed in our tests, not sure if it
> could give somebody some hints to find the real problem then judge if a fix
> is needed.
> 
> below is full report.
> 
> 
> 
> kernel test robot noticed "WARNING:at_mm/util.c:#kvmalloc_node_noprof" on:
> 
> commit: 7bd230a26648ac68ab3731ebbc449090f0ac6a37 ("mm/slab: enable slab 
> allocation tagging for kmalloc and friends")
> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git master
> 
> [test failed on linux-next/master 6ba6c795dc73c22ce2c86006f17c4aa802db2a60]
> 
> in testcase: igt
> version: igt-x86_64-86712f2ef-1_20240511
> with following parameters:
> 
>   group: gem_exec_reloc
> 
> 
> 
> compiler: gcc-13
> test machine: 20 threads 1 sockets (Commet Lake) with 16G memory
> 
> (please refer to attached dmesg/kmsg for entire log/backtrace)
> 
> 
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version 
> of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot 
> | Closes: 
> https://lore.kernel.org/oe-lkp/202405151008.6ddd1aaf-oliver.s...@intel.com
> 
> 
> [  940.101700][ T5353] [ cut here ]
> [ 940.107107][ T5353] WARNING: CPU: 1 PID: 5353 at mm/util.c:649 
> kvmalloc_node_noprof (mm/util.c:649 (discriminator 1)) 
> [  940.116178][ T5353] Modules linked in: netconsole btrfs blake2b_generic 
> xor zstd_compress intel_rapl_msr intel_rapl_common intel_uncore_frequency 
> intel_uncore_frequency_common raid6_pq libcrc32c x86_pkg_temp_thermal 
> intel_powerclamp coretemp kvm_intel sd_mod t10_pi crc64_rocksoft_generic 
> crc64_rocksoft ipmi_devintf crc64 sg ipmi_msghandler kvm crct10dif_pclmul 
> crc32_pclmul crc32c_intel ghash_clmulni_intel i915 sha512_ssse3 sdhci_pci 
> drm_buddy cqhci ahci rapl intel_gtt drm_display_helper sdhci libahci mei_me 
> ttm intel_cstate i2c_designware_platform ppdev intel_uncore 
> intel_wmi_thunderbolt wmi_bmof libata mei i2c_designware_core idma64 
> drm_kms_helper mmc_core i2c_i801 i2c_smbus intel_pch_thermal parport_pc video 
> parport pinctrl_cannonlake wmi acpi_pad acpi_tad serio_raw binfmt_misc drm 
> fuse loop dm_mod ip_tables
> [  940.188041][ T5353] CPU: 1 PID: 5353 Comm: gem_exec_reloc Not tainted 
> 6.9.0-rc4-00085-g7bd230a26648 #1
> [ 940.197459][ T5353] RIP: 0010:kvmalloc_node_noprof (mm/util.c:649 
> (discriminator 1)) 
> [ 940.203412][ T5353] Code: 04 a3 0d 00 48 83 c4 18 48 83 c4 08 5b 5d 41 5c 
> 41 5d 41 5e c3 cc cc cc cc 49 be 00 00 00 00 00 20 00 00 eb 9f 80 e7 20 75 de 
> <0f> 0b eb da 48 c7 c7 10 ec af 84 e8 0e a6 18 00 e9 3f ff ff ff 48
> All code
> 
>0: 04 a3   add$0xa3,%al
>2: 0d 00 48 83 c4  or $0xc4834800,%eax
>7: 18 48 83sbb%cl,-0x7d(%rax)
>a: c4  (bad)  
>b: 08 5b 5dor %bl,0x5d(%rbx)
>e: 41 5c   pop%r12
>   10: 41 5d   pop%r13
>   12: 41 5e   pop%r14
>   14: c3  retq   
>   15: cc  int3   
>   16: cc  int3   
>   17: cc  int3   
>   18: cc  int3   
>   19: 49 be 00 00 00 00 00movabs $0x2000,%r14
>   20: 20 00 00 
>   23: eb 9f   jmp0xffc4
>   25: 80 e7 20and$0x20,%bh
>   28: 75 de   jne0x8
>   2a:*0f 0b   ud2 <-- trapping instruction
>   2c: eb da   jmp0x8
>   2e: 48 c7 c7 10 ec af 84mov$0x84afec10,%rdi
>   35: e8 0e a6 18 00  callq  0x18a648
>   3a: e9 3f ff ff ff  jmpq   0xff7e
>   3f: 48  rex.W
> 
> Code starting with the faulting instruction
> ===
>0: 0f 0b   ud2
>2: eb da   jmp0xffde
>4: 48 c7 c7 10 ec af 84mov$0x84afec10,%rdi
>b: e8 0e a6 18 00  callq  0x18a61e
>   10: e9 3f ff ff ff  jmpq   0xff5

Re: [PATCH] drm/i915/gt: Fix CCS id's calculation for CCS mode setting

2024-05-20 Thread Gnattu OC


> On May 17, 2024, at 17:06, Andi Shyti  wrote:
> 
> The whole point of the previous fixes has been to change the CCS
> hardware configuration to generate only one stream available to
> the compute users. We did this by changing the info.engine_mask
> that is set during device probe, reset during the detection of
> the fused engines, and finally reset again when choosing the CCS
> mode.
> 
> We can't use the engine_mask variable anymore, as with the
> current configuration, it imposes only one CCS no matter what the
> hardware configuration is.
> 
> Before changing the engine_mask for the third time, save it and
> use it for calculating the CCS mode.
> 
> After the previous changes, the user reported a performance drop
> to around 1/4. We have tested that the compute operations, with
> the current patch, have improved by the same factor.
> 
> Fixes: 6db31251bb26 ("drm/i915/gt: Enable only one CCS for compute workload")
> Cc: Chris Wilson 
> Cc: Gnattu OC 
> Cc: Joonas Lahtinen 
> Cc: Matt Roper 
> Tested-by: Jian Ye 
> ---
> Hi,
> 
> This ensures that all four CCS engines work properly. However,
> during the tests, Jian detected that the performance during
> memory copy assigned to the CCS engines is negatively impacted.
> 
> I believe this might be expected, considering that based on the
> engines' availability, the media user might decide to reduce the
> copy in multitasking.
> 
> With the upcoming work that will give the user the chance to
> configure the CCS mode, this might improve.
> 
> Gnattu, can I use your kindness to ask for a test on this patch
> and check whether the performance improve on your side as well?
> 
> Thanks,
> Andi
> 
> drivers/gpu/drm/i915/gt/intel_engine_cs.c   | 6 ++
> drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c | 2 +-
> drivers/gpu/drm/i915/gt/intel_gt_types.h| 8 
> 3 files changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
> b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index 5c8e9ee3b008..3b740ca25000 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -885,6 +885,12 @@ static intel_engine_mask_t init_engine_mask(struct 
> intel_gt *gt)
>   if (IS_DG2(gt->i915)) {
>   u8 first_ccs = __ffs(CCS_MASK(gt));
> 
> + /*
> +  * Store the number of active cslices before
> +  * changing the CCS engine configuration
> +  */
> + gt->ccs.cslices = CCS_MASK(gt);
> +
>   /* Mask off all the CCS engine */
>   info->engine_mask &= ~GENMASK(CCS3, CCS0);
>   /* Put back in the first CCS engine */
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c 
> b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c
> index 99b71bb7da0a..3c62a44e9106 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c
> @@ -19,7 +19,7 @@ unsigned int intel_gt_apply_ccs_mode(struct intel_gt *gt)
> 
>   /* Build the value for the fixed CCS load balancing */
>   for (cslice = 0; cslice < I915_MAX_CCS; cslice++) {
> - if (CCS_MASK(gt) & BIT(cslice))
> + if (gt->ccs.cslices & BIT(cslice))
>   /*
>* If available, assign the cslice
>* to the first available engine...
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_types.h 
> b/drivers/gpu/drm/i915/gt/intel_gt_types.h
> index def7dd0eb6f1..cfdd2ad5e954 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_types.h
> @@ -207,6 +207,14 @@ struct intel_gt {
>   [MAX_ENGINE_INSTANCE + 1];
>   enum intel_submission_method submission_method;
> 
> + struct {
> + /*
> +  * Mask of the non fused CCS slices
> +  * to be used for the load balancing
> +  */
> + intel_engine_mask_t cslices;
> + } ccs;
> +
>   /*
>* Default address space (either GGTT or ppGTT depending on arch).
>*
> -- 
> 2.43.0

Hi Andi,

I can confirm that this patch restores most of the performance we had before 
the CCS change. 

I do notice a reduction in memcpy performance, but it is good enough for our 
use case since our video processing pipeline is zero-copy once the video is 
loaded to the VRAM.

Tested-by: Gnattu OC mailto:gnatt...@me.com>>



Re: [PATCH 1/2] drm/i915/pciids: switch to xe driver style PCI ID macros

2024-05-20 Thread Jani Nikula
On Wed, 15 May 2024, Jani Nikula  wrote:
> The PCI ID macros in xe_pciids.h allow passing in the macro to operate
> on each PCI ID, making it more flexible. Convert i915_pciids.h to the
> same pattern.
>
> INTEL_IVB_Q_IDS() for Quanta transcode remains a special case, and
> unconditionally uses INTEL_QUANTA_VGA_DEVICE().
>
> Cc: Bjorn Helgaas 
> Cc: linux-...@vger.kernel.org

Bjorn, since I asked for acks on the last ones, I probably should here
too. :)

I'm hoping to stop mucking with the macros after this.

BR,
Jani.


> Cc: Lucas De Marchi 
> Cc: Rodrigo Vivi 
> Signed-off-by: Jani Nikula 
>
> ---
>
> Tip: It's probably easiest to apply and use 'git show --color-words' for
> review.
>
> This transformation is completely scripted:
>
> | #!/bin/bash
> |
> | FILE=include/drm/i915_pciids.h
> |
> | sed -i 's/[\t ]*\\/ \\/' $FILE
> |
> | sed -i 's/^\(#define [A-Za-z0-9_]\+\)_IDS(info)/\1_IDS(MACRO__, ...)/' $FILE
> |
> | sed -i 's/^\t\([A-Za-z0-9_]\+\)(info)/\t\1(MACRO__, ## __VA_ARGS__)/' $FILE
> |
> | sed -i 's/^\tINTEL_VGA_DEVICE(\([A-Fa-f0-9x]\+\), info)/\tMACRO__(\1, ## 
> __VA_ARGS__)/' $FILE
> |
> | # Special case: IVB Q transcode
> | sed -i 's/^\t\(INTEL_QUANTA_VGA_DEVICE\)(MACRO__, ## /\t\1(/' $FILE
> |
> | # Change all users
> | for file in $(git grep -l "#include "); do
> | for macro in $(git grep -ho "#define [A-Za-z0-9_]\+_IDS" $FILE | sed 
> 's/#define //'); do
> | sed -i "s/$macro(/$macro(INTEL_VGA_DEVICE, /" $file
> | done
> | done
> ---
>  arch/x86/kernel/early-quirks.c|   80 +-
>  .../drm/i915/display/intel_display_device.c   |   86 +-
>  drivers/gpu/drm/i915/i915_pci.c   |  150 +-
>  drivers/gpu/drm/i915/intel_device_info.c  |   88 +-
>  include/drm/i915_pciids.h | 1348 -
>  5 files changed, 876 insertions(+), 876 deletions(-)
>
> diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
> index fd74d7f26f01..1c137771c5d2 100644
> --- a/arch/x86/kernel/early-quirks.c
> +++ b/arch/x86/kernel/early-quirks.c
> @@ -518,46 +518,46 @@ static const struct intel_early_ops gen11_early_ops 
> __initconst = {
>  
>  /* Intel integrated GPUs for which we need to reserve "stolen memory" */
>  static const struct pci_device_id intel_early_ids[] __initconst = {
> - INTEL_I830_IDS(&i830_early_ops),
> - INTEL_I845G_IDS(&i845_early_ops),
> - INTEL_I85X_IDS(&i85x_early_ops),
> - INTEL_I865G_IDS(&i865_early_ops),
> - INTEL_I915G_IDS(&gen3_early_ops),
> - INTEL_I915GM_IDS(&gen3_early_ops),
> - INTEL_I945G_IDS(&gen3_early_ops),
> - INTEL_I945GM_IDS(&gen3_early_ops),
> - INTEL_VLV_IDS(&gen6_early_ops),
> - INTEL_PNV_IDS(&gen3_early_ops),
> - INTEL_I965G_IDS(&gen3_early_ops),
> - INTEL_G33_IDS(&gen3_early_ops),
> - INTEL_I965GM_IDS(&gen3_early_ops),
> - INTEL_GM45_IDS(&gen3_early_ops),
> - INTEL_G45_IDS(&gen3_early_ops),
> - INTEL_ILK_IDS(&gen3_early_ops),
> - INTEL_SNB_IDS(&gen6_early_ops),
> - INTEL_IVB_IDS(&gen6_early_ops),
> - INTEL_HSW_IDS(&gen6_early_ops),
> - INTEL_BDW_IDS(&gen8_early_ops),
> - INTEL_CHV_IDS(&chv_early_ops),
> - INTEL_SKL_IDS(&gen9_early_ops),
> - INTEL_BXT_IDS(&gen9_early_ops),
> - INTEL_KBL_IDS(&gen9_early_ops),
> - INTEL_CFL_IDS(&gen9_early_ops),
> - INTEL_WHL_IDS(&gen9_early_ops),
> - INTEL_CML_IDS(&gen9_early_ops),
> - INTEL_GLK_IDS(&gen9_early_ops),
> - INTEL_CNL_IDS(&gen9_early_ops),
> - INTEL_ICL_IDS(&gen11_early_ops),
> - INTEL_EHL_IDS(&gen11_early_ops),
> - INTEL_JSL_IDS(&gen11_early_ops),
> - INTEL_TGL_IDS(&gen11_early_ops),
> - INTEL_RKL_IDS(&gen11_early_ops),
> - INTEL_ADLS_IDS(&gen11_early_ops),
> - INTEL_ADLP_IDS(&gen11_early_ops),
> - INTEL_ADLN_IDS(&gen11_early_ops),
> - INTEL_RPLS_IDS(&gen11_early_ops),
> - INTEL_RPLU_IDS(&gen11_early_ops),
> - INTEL_RPLP_IDS(&gen11_early_ops),
> + INTEL_I830_IDS(INTEL_VGA_DEVICE, &i830_early_ops),
> + INTEL_I845G_IDS(INTEL_VGA_DEVICE, &i845_early_ops),
> + INTEL_I85X_IDS(INTEL_VGA_DEVICE, &i85x_early_ops),
> + INTEL_I865G_IDS(INTEL_VGA_DEVICE, &i865_early_ops),
> + INTEL_I915G_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_I915GM_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_I945G_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_I945GM_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_VLV_IDS(INTEL_VGA_DEVICE, &gen6_early_ops),
> + INTEL_PNV_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_I965G_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_G33_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_I965GM_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_GM45_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_G45_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_ILK_IDS(INTEL_VGA_DEVICE, &gen3_early_ops),
> + INTEL_SNB_IDS(INTEL_VGA_DEVICE, &gen6_early_ops),
> + INTEL_IVB_IDS(INTEL_VGA_DEVICE, &gen6

Re: [PATCH v5 6/6] drm/i915/alpm: Add debugfs for LOBF

2024-05-20 Thread Jani Nikula
On Mon, 20 May 2024, Animesh Manna  wrote:
> For validation purpose add debugfs for LOBF.
>
> v1: Initial version.
> v2: Add aux-wake/less info along with lobf status. [Jouni]
>
> Signed-off-by: Animesh Manna 
> ---
>  drivers/gpu/drm/i915/display/intel_alpm.c | 49 +++
>  drivers/gpu/drm/i915/display/intel_alpm.h |  2 +
>  .../drm/i915/display/intel_display_debugfs.c  |  2 +
>  3 files changed, 53 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
> b/drivers/gpu/drm/i915/display/intel_alpm.c
> index 8f4da817ef55..843ffb5fcb7a 100644
> --- a/drivers/gpu/drm/i915/display/intel_alpm.c
> +++ b/drivers/gpu/drm/i915/display/intel_alpm.c
> @@ -360,3 +360,52 @@ void intel_alpm_configure(struct intel_dp *intel_dp,
>  {
>   lnl_alpm_configure(intel_dp, crtc_state);
>  }
> +
> +static int i915_edp_lobf_info_show(struct seq_file *m, void *data)
> +{
> + struct intel_connector *connector = m->private;
> + struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> + struct drm_crtc *crtc;
> + struct intel_crtc_state *crtc_state;
> + enum transcoder cpu_transcoder;
> + u32 alpm_ctl;
> + int ret;
> +
> + ret = 
> drm_modeset_lock_single_interruptible(&dev_priv->drm.mode_config.connection_mutex);
> + if (ret)
> + return ret;
> +
> + crtc = connector->base.state->crtc;
> + if (connector->base.status != connector_status_connected || !crtc) {
> + ret = -ENODEV;
> + goto out;
> + }
> +
> + crtc_state = to_intel_crtc_state(crtc->state);
> + cpu_transcoder = crtc_state->cpu_transcoder;
> + alpm_ctl = intel_de_read(dev_priv, ALPM_CTL(dev_priv, cpu_transcoder));
> + seq_printf(m, "LOBF status: %s\n", str_enabled_disabled(alpm_ctl & 
> ALPM_CTL_LOBF_ENABLE));
> + seq_printf(m, "Aux-wake alpm status: %s\n",
> +str_enabled_disabled(!(alpm_ctl & 
> ALPM_CTL_ALPM_AUX_LESS_ENABLE)));
> + seq_printf(m, "Aux-less alpm status: %s\n",
> +str_enabled_disabled(alpm_ctl & 
> ALPM_CTL_ALPM_AUX_LESS_ENABLE));
> +out:
> + drm_modeset_unlock(&dev_priv->drm.mode_config.connection_mutex);
> +
> + return ret;
> +}
> +
> +DEFINE_SHOW_ATTRIBUTE(i915_edp_lobf_info);
> +
> +void intel_alpm_lobf_debugfs_add(struct intel_connector *connector)

This file is about alpm, and might add more alpm related debugfs files
later. There's no need to encode lobf in the name here.

> +{
> + struct drm_i915_private *i915 = to_i915(connector->base.dev);
> + struct dentry *root = connector->base.debugfs_entry;
> +
> + if (DISPLAY_VER(i915) < 20 ||
> + connector->base.connector_type != DRM_MODE_CONNECTOR_eDP)
> + return;
> +
> + debugfs_create_file("i915_edp_lobf_info", 0444, root,

Why does the filename need to include edp? The connector debugfs files
for psr don't include that either.

> + connector, &i915_edp_lobf_info_fops);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_alpm.h 
> b/drivers/gpu/drm/i915/display/intel_alpm.h
> index fd9be8aa876c..0dab2068164a 100644
> --- a/drivers/gpu/drm/i915/display/intel_alpm.h
> +++ b/drivers/gpu/drm/i915/display/intel_alpm.h
> @@ -11,6 +11,7 @@
>  struct intel_dp;
>  struct intel_crtc_state;
>  struct drm_connector_state;
> +struct intel_connector;
>  
>  void intel_alpm_get_capability(struct intel_dp *intel_dp);
>  bool intel_alpm_compute_params(struct intel_dp *intel_dp,
> @@ -20,4 +21,5 @@ void intel_alpm_compute_lobf_config(struct intel_dp 
> *intel_dp,
>   struct drm_connector_state *conn_state);
>  void intel_alpm_configure(struct intel_dp *intel_dp,
> const struct intel_crtc_state *crtc_state);
> +void intel_alpm_lobf_debugfs_add(struct intel_connector *connector);
>  #endif
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c 
> b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index 35f9f86ef70f..86d9900c40af 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -13,6 +13,7 @@
>  #include "i915_debugfs.h"
>  #include "i915_irq.h"
>  #include "i915_reg.h"
> +#include "intel_alpm.h"
>  #include "intel_crtc.h"
>  #include "intel_de.h"
>  #include "intel_crtc_state_dump.h"
> @@ -1515,6 +1516,7 @@ void intel_connector_debugfs_add(struct intel_connector 
> *connector)
>   intel_drrs_connector_debugfs_add(connector);
>   intel_pps_connector_debugfs_add(connector);
>   intel_psr_connector_debugfs_add(connector);
> + intel_alpm_lobf_debugfs_add(connector);

All the others are intel_foo_connector_debugfs_add(). So should this.

>  
>   if (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
>   connector_type == DRM_MODE_CONNECTOR_HDMIA ||

-- 
Jani Nikula, Intel


Re: [PATCH v5 4/6] drm/i915/alpm: Add compute config for lobf

2024-05-20 Thread Jani Nikula
On Mon, 20 May 2024, Animesh Manna  wrote:
> Link Off Between Active Frames, is a new feature for eDP
> that allows the panel to go to lower power state after
> transmission of data. This is a feature on top of ALPM, AS SDP.
> Add compute config during atomic-check phase.
>
> v1: RFC version.
> v2: Add separate flag for auxless-alpm. [Jani]
> v3:
> - intel_dp->lobf_supported replaced with crtc_state->has_lobf. [Jouni]
> - Add DISPLAY_VER() check. [Jouni]
> - Modify function name of get_aux_less_status. [Jani]
> v4: Add enum alpm_mode to hold the aux-wake/less capability.
> v5: Add alpm_dpcd to intel_dp and use aux_wake_supported()/
> aux_less_wake_supported() instead of enum alpm_mode. [Jouni]
>
> Signed-off-by: Animesh Manna 
> ---
>  drivers/gpu/drm/i915/display/intel_alpm.c | 61 +++
>  drivers/gpu/drm/i915/display/intel_alpm.h |  5 ++
>  .../drm/i915/display/intel_display_types.h|  5 ++
>  drivers/gpu/drm/i915/display/intel_dp.c   |  4 ++
>  4 files changed, 75 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
> b/drivers/gpu/drm/i915/display/intel_alpm.c
> index 7307e02277d6..c2334197e723 100644
> --- a/drivers/gpu/drm/i915/display/intel_alpm.c
> +++ b/drivers/gpu/drm/i915/display/intel_alpm.c
> @@ -11,6 +11,26 @@
>  #include "intel_dp_aux.h"
>  #include "intel_psr_regs.h"
>  
> +static bool intel_alpm_aux_wake_supported(struct intel_dp *intel_dp)
> +{
> + return intel_dp->alpm_dpcd & DP_ALPM_CAP;
> +}
> +
> +static bool intel_alpm_aux_less_wake_supported(struct intel_dp *intel_dp)
> +{
> + return intel_dp->alpm_dpcd & DP_ALPM_AUX_LESS_CAP;
> +}
> +
> +void intel_alpm_get_capability(struct intel_dp *intel_dp)
> +{
> + u8 dpcd;
> +
> + if (drm_dp_dpcd_readb(&intel_dp->aux, DP_RECEIVER_ALPM_CAP, &dpcd) < 0)
> + return;
> +
> + intel_dp->alpm_dpcd = dpcd;
> +}
> +
>  /*
>   * See Bspec: 71632 for the table
>   *
> @@ -243,6 +263,47 @@ bool intel_alpm_compute_params(struct intel_dp *intel_dp,
>   return true;
>  }
>  
> +void intel_alpm_compute_lobf_config(struct intel_dp *intel_dp,

Please prefer something_something_compute_config() naming instead of
something_compute_something_config().

BR,
Jani.

> + struct intel_crtc_state *crtc_state,
> + struct drm_connector_state *conn_state)
> +{
> + struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> + struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> + int waketime_in_lines, first_sdp_position;
> + int context_latency, guardband;
> +
> + if (!intel_dp_is_edp(intel_dp))
> + return;
> +
> + if (DISPLAY_VER(i915) < 20)
> + return;
> +
> + if (!intel_dp_as_sdp_supported(intel_dp))
> + return;
> +
> + if (crtc_state->has_psr)
> + return;
> +
> + if (!(intel_alpm_aux_wake_supported(intel_dp) ||
> +   intel_alpm_aux_less_wake_supported(intel_dp)))
> + return;
> +
> + if (!intel_alpm_compute_params(intel_dp, crtc_state))
> + return;
> +
> + context_latency = adjusted_mode->crtc_vblank_start - 
> adjusted_mode->crtc_vdisplay;
> + guardband = adjusted_mode->crtc_vtotal -
> + adjusted_mode->crtc_vdisplay - context_latency;
> + first_sdp_position = adjusted_mode->crtc_vtotal - 
> adjusted_mode->crtc_vsync_start;
> + if (intel_alpm_aux_less_wake_supported(intel_dp))
> + waketime_in_lines = intel_dp->alpm_parameters.io_wake_lines;
> + else
> + waketime_in_lines = intel_dp->alpm_parameters.fast_wake_lines;
> +
> + crtc_state->has_lobf = (context_latency + guardband) >
> + (first_sdp_position + waketime_in_lines);
> +}
> +
>  static void lnl_alpm_configure(struct intel_dp *intel_dp)
>  {
>   struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> diff --git a/drivers/gpu/drm/i915/display/intel_alpm.h 
> b/drivers/gpu/drm/i915/display/intel_alpm.h
> index c45d078e5a6b..45c07f023a63 100644
> --- a/drivers/gpu/drm/i915/display/intel_alpm.h
> +++ b/drivers/gpu/drm/i915/display/intel_alpm.h
> @@ -10,9 +10,14 @@
>  
>  struct intel_dp;
>  struct intel_crtc_state;
> +struct drm_connector_state;
>  
> +void intel_alpm_get_capability(struct intel_dp *intel_dp);
>  bool intel_alpm_compute_params(struct intel_dp *intel_dp,
>  struct intel_crtc_state *crtc_state);
> +void intel_alpm_compute_lobf_config(struct intel_dp *intel_dp,
> + struct intel_crtc_state *crtc_state,
> + struct drm_connector_state *conn_state);
>  void intel_alpm_configure(struct intel_dp *intel_dp);
>  
>  #endif
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 0ad6134ba94e..d77a9f22b5c6 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/g

Re: [PATCH v2 6/6] drm/ci: update xfails for the new testlist

2024-05-20 Thread Dmitry Baryshkov
On Fri, May 17, 2024 at 02:55:02PM +0530, Vignesh Raman wrote:
> Now the testlist is used from IGT build, so update
> xfails with the new testlist.
> 
> Set the timeout of all i915 jobs to 1h30m since some jobs
> takes more than 1 hour to complete.
> 
> Signed-off-by: Vignesh Raman 
> ---
> 
> v2:
>   - Set the timeout of all i915 jobs to 1h30m and updated expectations file.
> 
> ---
>  drivers/gpu/drm/ci/test.yml   |   6 +-
>  .../gpu/drm/ci/xfails/amdgpu-stoney-fails.txt |  41 ++--
>  .../drm/ci/xfails/amdgpu-stoney-flakes.txt|   6 +
>  .../gpu/drm/ci/xfails/amdgpu-stoney-skips.txt |  18 ++
>  drivers/gpu/drm/ci/xfails/i915-amly-fails.txt |  31 
>  .../gpu/drm/ci/xfails/i915-amly-flakes.txt|   8 +
>  drivers/gpu/drm/ci/xfails/i915-amly-skips.txt |  11 ++
>  drivers/gpu/drm/ci/xfails/i915-apl-fails.txt  |  46 +++--
>  drivers/gpu/drm/ci/xfails/i915-apl-flakes.txt |   5 +
>  drivers/gpu/drm/ci/xfails/i915-apl-skips.txt  |  15 ++
>  drivers/gpu/drm/ci/xfails/i915-cml-fails.txt  |  38 
>  drivers/gpu/drm/ci/xfails/i915-cml-flakes.txt |   5 +
>  drivers/gpu/drm/ci/xfails/i915-cml-skips.txt  |  14 ++
>  drivers/gpu/drm/ci/xfails/i915-glk-fails.txt  |  41 +++-
>  drivers/gpu/drm/ci/xfails/i915-glk-flakes.txt |   6 +
>  drivers/gpu/drm/ci/xfails/i915-glk-skips.txt  |  15 ++
>  drivers/gpu/drm/ci/xfails/i915-kbl-fails.txt  |  42 ++---
>  drivers/gpu/drm/ci/xfails/i915-kbl-flakes.txt |   6 +-
>  drivers/gpu/drm/ci/xfails/i915-kbl-skips.txt  |  25 +++
>  drivers/gpu/drm/ci/xfails/i915-tgl-fails.txt  |  77 
>  drivers/gpu/drm/ci/xfails/i915-tgl-skips.txt  |  16 ++
>  drivers/gpu/drm/ci/xfails/i915-whl-fails.txt  |  63 ---
>  drivers/gpu/drm/ci/xfails/i915-whl-flakes.txt |   5 +
>  drivers/gpu/drm/ci/xfails/i915-whl-skips.txt  |  11 ++
>  .../drm/ci/xfails/mediatek-mt8173-fails.txt   |  30 ++-
>  .../drm/ci/xfails/mediatek-mt8173-flakes.txt  |  10 +
>  .../drm/ci/xfails/mediatek-mt8173-skips.txt   |   4 +
>  .../drm/ci/xfails/mediatek-mt8183-fails.txt   |  21 +--
>  .../drm/ci/xfails/mediatek-mt8183-skips.txt   |   4 +
>  .../gpu/drm/ci/xfails/meson-g12b-fails.txt|  24 +--
>  .../gpu/drm/ci/xfails/meson-g12b-skips.txt|   4 +
>  .../gpu/drm/ci/xfails/msm-apq8016-fails.txt   |  12 +-
>  .../gpu/drm/ci/xfails/msm-apq8016-skips.txt   |   4 +
>  .../gpu/drm/ci/xfails/msm-apq8096-fails.txt   |   7 +
>  .../gpu/drm/ci/xfails/msm-apq8096-flakes.txt  |   5 +
>  .../gpu/drm/ci/xfails/msm-apq8096-skips.txt   |  12 ++
>  .../msm-sc7180-trogdor-kingoftown-fails.txt   | 175 +-
>  .../msm-sc7180-trogdor-kingoftown-flakes.txt  |   7 +
>  .../msm-sc7180-trogdor-kingoftown-skips.txt   |   7 +
>  ...sm-sc7180-trogdor-lazor-limozeen-fails.txt | 175 +-
>  ...m-sc7180-trogdor-lazor-limozeen-flakes.txt |   5 +
>  ...sm-sc7180-trogdor-lazor-limozeen-skips.txt |   4 +
>  .../gpu/drm/ci/xfails/msm-sdm845-fails.txt|  38 +---
>  .../gpu/drm/ci/xfails/msm-sdm845-flakes.txt   |  26 ++-
>  .../gpu/drm/ci/xfails/msm-sdm845-skips.txt|   7 +

Reviewed-by: Dmitry Baryshkov  # msm testlists

We'd need to triage why the tests are failing, but at least it looks
logical from my POV, no more full-test skips, etc.

>  .../drm/ci/xfails/rockchip-rk3288-fails.txt   |  62 +--
>  .../drm/ci/xfails/rockchip-rk3288-skips.txt   |   4 +
>  .../drm/ci/xfails/rockchip-rk3399-fails.txt   |  83 +
>  .../drm/ci/xfails/rockchip-rk3399-flakes.txt  |  12 +-
>  .../drm/ci/xfails/rockchip-rk3399-skips.txt   |   4 +
>  drivers/gpu/drm/ci/xfails/update-xfails.py|   4 +-
>  .../drm/ci/xfails/virtio_gpu-none-fails.txt   |  94 +++---
>  .../drm/ci/xfails/virtio_gpu-none-skips.txt   |   4 +
>  53 files changed, 1010 insertions(+), 389 deletions(-)
>  create mode 100644 drivers/gpu/drm/ci/xfails/i915-amly-flakes.txt
>  create mode 100644 drivers/gpu/drm/ci/xfails/i915-apl-flakes.txt
>  create mode 100644 drivers/gpu/drm/ci/xfails/i915-cml-flakes.txt
>  create mode 100644 drivers/gpu/drm/ci/xfails/i915-glk-flakes.txt
>  create mode 100644 drivers/gpu/drm/ci/xfails/i915-whl-flakes.txt
>  create mode 100644 drivers/gpu/drm/ci/xfails/mediatek-mt8173-flakes.txt
>  create mode 100644 drivers/gpu/drm/ci/xfails/msm-apq8096-flakes.txt
>  create mode 100644 
> drivers/gpu/drm/ci/xfails/msm-sc7180-trogdor-kingoftown-flakes.txt
>  create mode 100644 
> drivers/gpu/drm/ci/xfails/msm-sc7180-trogdor-lazor-limozeen-flakes.txt

-- 
With best wishes
Dmitry


[PATCH v5 3/6] drm/display: Add missing aux less alpm wake related bits

2024-05-20 Thread Animesh Manna
From: Jouni Högander 

eDP1.5 adds some more bits into DP_RECEIVER_ALPM_CAP and
DP_RECEIVER_ALPM_CONFIG registers. Add definitions for these.

Signed-off-by: Jouni Högander 
---
 include/drm/display/drm_dp.h | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/drm/display/drm_dp.h b/include/drm/display/drm_dp.h
index 906949ca3cee..3317ff88ed59 100644
--- a/include/drm/display/drm_dp.h
+++ b/include/drm/display/drm_dp.h
@@ -232,6 +232,8 @@
 
 #define DP_RECEIVER_ALPM_CAP   0x02e   /* eDP 1.4 */
 # define DP_ALPM_CAP   (1 << 0)
+# define DP_ALPM_PM_STATE_2A_SUPPORT   (1 << 1) /* eDP 1.5 */
+# define DP_ALPM_AUX_LESS_CAP  (1 << 2) /* eDP 1.5 */
 
 #define DP_SINK_DEVICE_AUX_FRAME_SYNC_CAP   0x02f   /* eDP 1.4 */
 # define DP_AUX_FRAME_SYNC_CAP (1 << 0)
@@ -683,7 +685,8 @@
 
 #define DP_RECEIVER_ALPM_CONFIG0x116   /* eDP 1.4 */
 # define DP_ALPM_ENABLE(1 << 0)
-# define DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE  (1 << 1)
+# define DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE  (1 << 1) /* eDP 1.5 */
+# define DP_ALPM_MODE_AUX_LESS (1 << 2) /* eDP 1.5 */
 
 #define DP_SINK_DEVICE_AUX_FRAME_SYNC_CONF  0x117   /* eDP 1.4 */
 # define DP_AUX_FRAME_SYNC_ENABLE  (1 << 0)
-- 
2.29.0



[PATCH v5 6/6] drm/i915/alpm: Add debugfs for LOBF

2024-05-20 Thread Animesh Manna
For validation purpose add debugfs for LOBF.

v1: Initial version.
v2: Add aux-wake/less info along with lobf status. [Jouni]

Signed-off-by: Animesh Manna 
---
 drivers/gpu/drm/i915/display/intel_alpm.c | 49 +++
 drivers/gpu/drm/i915/display/intel_alpm.h |  2 +
 .../drm/i915/display/intel_display_debugfs.c  |  2 +
 3 files changed, 53 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
b/drivers/gpu/drm/i915/display/intel_alpm.c
index 8f4da817ef55..843ffb5fcb7a 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.c
+++ b/drivers/gpu/drm/i915/display/intel_alpm.c
@@ -360,3 +360,52 @@ void intel_alpm_configure(struct intel_dp *intel_dp,
 {
lnl_alpm_configure(intel_dp, crtc_state);
 }
+
+static int i915_edp_lobf_info_show(struct seq_file *m, void *data)
+{
+   struct intel_connector *connector = m->private;
+   struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
+   struct drm_crtc *crtc;
+   struct intel_crtc_state *crtc_state;
+   enum transcoder cpu_transcoder;
+   u32 alpm_ctl;
+   int ret;
+
+   ret = 
drm_modeset_lock_single_interruptible(&dev_priv->drm.mode_config.connection_mutex);
+   if (ret)
+   return ret;
+
+   crtc = connector->base.state->crtc;
+   if (connector->base.status != connector_status_connected || !crtc) {
+   ret = -ENODEV;
+   goto out;
+   }
+
+   crtc_state = to_intel_crtc_state(crtc->state);
+   cpu_transcoder = crtc_state->cpu_transcoder;
+   alpm_ctl = intel_de_read(dev_priv, ALPM_CTL(dev_priv, cpu_transcoder));
+   seq_printf(m, "LOBF status: %s\n", str_enabled_disabled(alpm_ctl & 
ALPM_CTL_LOBF_ENABLE));
+   seq_printf(m, "Aux-wake alpm status: %s\n",
+  str_enabled_disabled(!(alpm_ctl & 
ALPM_CTL_ALPM_AUX_LESS_ENABLE)));
+   seq_printf(m, "Aux-less alpm status: %s\n",
+  str_enabled_disabled(alpm_ctl & 
ALPM_CTL_ALPM_AUX_LESS_ENABLE));
+out:
+   drm_modeset_unlock(&dev_priv->drm.mode_config.connection_mutex);
+
+   return ret;
+}
+
+DEFINE_SHOW_ATTRIBUTE(i915_edp_lobf_info);
+
+void intel_alpm_lobf_debugfs_add(struct intel_connector *connector)
+{
+   struct drm_i915_private *i915 = to_i915(connector->base.dev);
+   struct dentry *root = connector->base.debugfs_entry;
+
+   if (DISPLAY_VER(i915) < 20 ||
+   connector->base.connector_type != DRM_MODE_CONNECTOR_eDP)
+   return;
+
+   debugfs_create_file("i915_edp_lobf_info", 0444, root,
+   connector, &i915_edp_lobf_info_fops);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_alpm.h 
b/drivers/gpu/drm/i915/display/intel_alpm.h
index fd9be8aa876c..0dab2068164a 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.h
+++ b/drivers/gpu/drm/i915/display/intel_alpm.h
@@ -11,6 +11,7 @@
 struct intel_dp;
 struct intel_crtc_state;
 struct drm_connector_state;
+struct intel_connector;
 
 void intel_alpm_get_capability(struct intel_dp *intel_dp);
 bool intel_alpm_compute_params(struct intel_dp *intel_dp,
@@ -20,4 +21,5 @@ void intel_alpm_compute_lobf_config(struct intel_dp *intel_dp,
struct drm_connector_state *conn_state);
 void intel_alpm_configure(struct intel_dp *intel_dp,
  const struct intel_crtc_state *crtc_state);
+void intel_alpm_lobf_debugfs_add(struct intel_connector *connector);
 #endif
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c 
b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 35f9f86ef70f..86d9900c40af 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -13,6 +13,7 @@
 #include "i915_debugfs.h"
 #include "i915_irq.h"
 #include "i915_reg.h"
+#include "intel_alpm.h"
 #include "intel_crtc.h"
 #include "intel_de.h"
 #include "intel_crtc_state_dump.h"
@@ -1515,6 +1516,7 @@ void intel_connector_debugfs_add(struct intel_connector 
*connector)
intel_drrs_connector_debugfs_add(connector);
intel_pps_connector_debugfs_add(connector);
intel_psr_connector_debugfs_add(connector);
+   intel_alpm_lobf_debugfs_add(connector);
 
if (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
connector_type == DRM_MODE_CONNECTOR_HDMIA ||
-- 
2.29.0



[PATCH v5 5/6] drm/i915/alpm: Enable lobf from source in ALPM_CTL

2024-05-20 Thread Animesh Manna
Set the Link Off Between Frames Enable bit in ALPM_CTL register.

Note: Lobf need to be enabled adaptive sync fixed refresh mode
where vmin = vmax = flipline, which will arise after cmmr feature
enablement. Will add enabling sequence in a separate patch.

v1: Initial version.
v2: Condition check modified in alpm_configure(). [Jouni]

Signed-off-by: Animesh Manna 
---
 drivers/gpu/drm/i915/display/intel_alpm.c | 16 +++-
 drivers/gpu/drm/i915/display/intel_alpm.h |  4 ++--
 drivers/gpu/drm/i915/display/intel_psr.c  |  2 +-
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
b/drivers/gpu/drm/i915/display/intel_alpm.c
index c2334197e723..8f4da817ef55 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.c
+++ b/drivers/gpu/drm/i915/display/intel_alpm.c
@@ -304,10 +304,11 @@ void intel_alpm_compute_lobf_config(struct intel_dp 
*intel_dp,
(first_sdp_position + waketime_in_lines);
 }
 
-static void lnl_alpm_configure(struct intel_dp *intel_dp)
+static void lnl_alpm_configure(struct intel_dp *intel_dp,
+  const struct intel_crtc_state *crtc_state)
 {
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-   enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
+   enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
u32 alpm_ctl;
 
if (DISPLAY_VER(dev_priv) < 20 || (!intel_dp->psr.sel_update_enabled &&
@@ -318,7 +319,8 @@ static void lnl_alpm_configure(struct intel_dp *intel_dp)
 * Panel Replay on eDP is always using ALPM aux less. I.e. no need to
 * check panel support at this point.
 */
-   if (intel_dp->psr.panel_replay_enabled && intel_dp_is_edp(intel_dp)) {
+   if ((intel_dp->psr.panel_replay_enabled && intel_dp_is_edp(intel_dp)) ||
+   (crtc_state->has_lobf && 
intel_alpm_aux_less_wake_supported(intel_dp))) {
alpm_ctl = ALPM_CTL_ALPM_ENABLE |
ALPM_CTL_ALPM_AUX_LESS_ENABLE |
ALPM_CTL_AUX_LESS_SLEEP_HOLD_TIME_50_SYMBOLS;
@@ -345,12 +347,16 @@ static void lnl_alpm_configure(struct intel_dp *intel_dp)

ALPM_CTL_EXTENDED_FAST_WAKE_TIME(intel_dp->alpm_parameters.fast_wake_lines);
}
 
+   if (crtc_state->has_lobf)
+   alpm_ctl |= ALPM_CTL_LOBF_ENABLE;
+
alpm_ctl |= 
ALPM_CTL_ALPM_ENTRY_CHECK(intel_dp->alpm_parameters.check_entry_lines);
 
intel_de_write(dev_priv, ALPM_CTL(dev_priv, cpu_transcoder), alpm_ctl);
 }
 
-void intel_alpm_configure(struct intel_dp *intel_dp)
+void intel_alpm_configure(struct intel_dp *intel_dp,
+ const struct intel_crtc_state *crtc_state)
 {
-   lnl_alpm_configure(intel_dp);
+   lnl_alpm_configure(intel_dp, crtc_state);
 }
diff --git a/drivers/gpu/drm/i915/display/intel_alpm.h 
b/drivers/gpu/drm/i915/display/intel_alpm.h
index 45c07f023a63..fd9be8aa876c 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.h
+++ b/drivers/gpu/drm/i915/display/intel_alpm.h
@@ -18,6 +18,6 @@ bool intel_alpm_compute_params(struct intel_dp *intel_dp,
 void intel_alpm_compute_lobf_config(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state,
struct drm_connector_state *conn_state);
-void intel_alpm_configure(struct intel_dp *intel_dp);
-
+void intel_alpm_configure(struct intel_dp *intel_dp,
+ const struct intel_crtc_state *crtc_state);
 #endif
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c 
b/drivers/gpu/drm/i915/display/intel_psr.c
index e2d3be0bf99c..10c71e79a1c8 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1692,7 +1692,7 @@ static void intel_psr_enable_source(struct intel_dp 
*intel_dp,
 IGNORE_PSR2_HW_TRACKING : 0);
 
if (intel_dp_is_edp(intel_dp))
-   intel_alpm_configure(intel_dp);
+   intel_alpm_configure(intel_dp, crtc_state);
 
/*
 * Wa_16013835468
-- 
2.29.0



[PATCH v5 4/6] drm/i915/alpm: Add compute config for lobf

2024-05-20 Thread Animesh Manna
Link Off Between Active Frames, is a new feature for eDP
that allows the panel to go to lower power state after
transmission of data. This is a feature on top of ALPM, AS SDP.
Add compute config during atomic-check phase.

v1: RFC version.
v2: Add separate flag for auxless-alpm. [Jani]
v3:
- intel_dp->lobf_supported replaced with crtc_state->has_lobf. [Jouni]
- Add DISPLAY_VER() check. [Jouni]
- Modify function name of get_aux_less_status. [Jani]
v4: Add enum alpm_mode to hold the aux-wake/less capability.
v5: Add alpm_dpcd to intel_dp and use aux_wake_supported()/
aux_less_wake_supported() instead of enum alpm_mode. [Jouni]

Signed-off-by: Animesh Manna 
---
 drivers/gpu/drm/i915/display/intel_alpm.c | 61 +++
 drivers/gpu/drm/i915/display/intel_alpm.h |  5 ++
 .../drm/i915/display/intel_display_types.h|  5 ++
 drivers/gpu/drm/i915/display/intel_dp.c   |  4 ++
 4 files changed, 75 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
b/drivers/gpu/drm/i915/display/intel_alpm.c
index 7307e02277d6..c2334197e723 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.c
+++ b/drivers/gpu/drm/i915/display/intel_alpm.c
@@ -11,6 +11,26 @@
 #include "intel_dp_aux.h"
 #include "intel_psr_regs.h"
 
+static bool intel_alpm_aux_wake_supported(struct intel_dp *intel_dp)
+{
+   return intel_dp->alpm_dpcd & DP_ALPM_CAP;
+}
+
+static bool intel_alpm_aux_less_wake_supported(struct intel_dp *intel_dp)
+{
+   return intel_dp->alpm_dpcd & DP_ALPM_AUX_LESS_CAP;
+}
+
+void intel_alpm_get_capability(struct intel_dp *intel_dp)
+{
+   u8 dpcd;
+
+   if (drm_dp_dpcd_readb(&intel_dp->aux, DP_RECEIVER_ALPM_CAP, &dpcd) < 0)
+   return;
+
+   intel_dp->alpm_dpcd = dpcd;
+}
+
 /*
  * See Bspec: 71632 for the table
  *
@@ -243,6 +263,47 @@ bool intel_alpm_compute_params(struct intel_dp *intel_dp,
return true;
 }
 
+void intel_alpm_compute_lobf_config(struct intel_dp *intel_dp,
+   struct intel_crtc_state *crtc_state,
+   struct drm_connector_state *conn_state)
+{
+   struct drm_i915_private *i915 = dp_to_i915(intel_dp);
+   struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
+   int waketime_in_lines, first_sdp_position;
+   int context_latency, guardband;
+
+   if (!intel_dp_is_edp(intel_dp))
+   return;
+
+   if (DISPLAY_VER(i915) < 20)
+   return;
+
+   if (!intel_dp_as_sdp_supported(intel_dp))
+   return;
+
+   if (crtc_state->has_psr)
+   return;
+
+   if (!(intel_alpm_aux_wake_supported(intel_dp) ||
+ intel_alpm_aux_less_wake_supported(intel_dp)))
+   return;
+
+   if (!intel_alpm_compute_params(intel_dp, crtc_state))
+   return;
+
+   context_latency = adjusted_mode->crtc_vblank_start - 
adjusted_mode->crtc_vdisplay;
+   guardband = adjusted_mode->crtc_vtotal -
+   adjusted_mode->crtc_vdisplay - context_latency;
+   first_sdp_position = adjusted_mode->crtc_vtotal - 
adjusted_mode->crtc_vsync_start;
+   if (intel_alpm_aux_less_wake_supported(intel_dp))
+   waketime_in_lines = intel_dp->alpm_parameters.io_wake_lines;
+   else
+   waketime_in_lines = intel_dp->alpm_parameters.fast_wake_lines;
+
+   crtc_state->has_lobf = (context_latency + guardband) >
+   (first_sdp_position + waketime_in_lines);
+}
+
 static void lnl_alpm_configure(struct intel_dp *intel_dp)
 {
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
diff --git a/drivers/gpu/drm/i915/display/intel_alpm.h 
b/drivers/gpu/drm/i915/display/intel_alpm.h
index c45d078e5a6b..45c07f023a63 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.h
+++ b/drivers/gpu/drm/i915/display/intel_alpm.h
@@ -10,9 +10,14 @@
 
 struct intel_dp;
 struct intel_crtc_state;
+struct drm_connector_state;
 
+void intel_alpm_get_capability(struct intel_dp *intel_dp);
 bool intel_alpm_compute_params(struct intel_dp *intel_dp,
   struct intel_crtc_state *crtc_state);
+void intel_alpm_compute_lobf_config(struct intel_dp *intel_dp,
+   struct intel_crtc_state *crtc_state,
+   struct drm_connector_state *conn_state);
 void intel_alpm_configure(struct intel_dp *intel_dp);
 
 #endif
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 0ad6134ba94e..d77a9f22b5c6 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1410,6 +1410,9 @@ struct intel_crtc_state {
 
/* for loading single buffered registers during vblank */
struct drm_vblank_work vblank_work;
+
+   /* LOBF flag */
+   bool has_lobf;
 };
 
 enum intel_pipe_crc_source {
@@ -1845,6 +1848,8 @@ struct intel_dp {
 

[PATCH v5 2/6] drm/i915/alpm: Move alpm related code to a new file

2024-05-20 Thread Animesh Manna
Move ALPM feature related code as it will be used for
non-psr panel also thorugh LOBF feature.

v1: Initial version.
v2: Correct ordering in makefile. [Jani]

Signed-off-by: Animesh Manna 
---
 drivers/gpu/drm/i915/Makefile |   1 +
 drivers/gpu/drm/i915/display/intel_alpm.c | 295 ++
 drivers/gpu/drm/i915/display/intel_alpm.h |  18 ++
 drivers/gpu/drm/i915/display/intel_psr.c  | 283 +
 drivers/gpu/drm/xe/Makefile   |   1 +
 5 files changed, 318 insertions(+), 280 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/display/intel_alpm.c
 create mode 100644 drivers/gpu/drm/i915/display/intel_alpm.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 7cad944b825c..9a3f910ce4fd 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -243,6 +243,7 @@ i915-y += \
display/hsw_ips.o \
display/i9xx_plane.o \
display/i9xx_wm.o \
+   display/intel_alpm.o \
display/intel_atomic.o \
display/intel_atomic_plane.o \
display/intel_audio.o \
diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
b/drivers/gpu/drm/i915/display/intel_alpm.c
new file mode 100644
index ..7307e02277d6
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_alpm.c
@@ -0,0 +1,295 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright 2024, Intel Corporation.
+ */
+
+#include "intel_alpm.h"
+#include "intel_crtc.h"
+#include "intel_de.h"
+#include "intel_display_types.h"
+#include "intel_dp.h"
+#include "intel_dp_aux.h"
+#include "intel_psr_regs.h"
+
+/*
+ * See Bspec: 71632 for the table
+ *
+ * Silence_period = tSilence,Min + ((tSilence,Max - tSilence,Min) / 2)
+ *
+ * Half cycle duration:
+ *
+ * Link rates 1.62 - 4.32 and tLFPS_Cycle = 70 ns
+ * FLOOR( (Link Rate * tLFPS_Cycle) / (2 * 10) )
+ *
+ * Link rates 5.4 - 8.1
+ * PORT_ALPM_LFPS_CTL[ LFPS Cycle Count ] = 10
+ * LFPS Period chosen is the mid-point of the min:max values from the table
+ * FLOOR( LFPS Period in Symbol clocks /
+ * (2 * PORT_ALPM_LFPS_CTL[ LFPS Cycle Count ]) )
+ */
+static bool _lnl_get_silence_period_and_lfps_half_cycle(int link_rate,
+   int *silence_period,
+   int *lfps_half_cycle)
+{
+   switch (link_rate) {
+   case 162000:
+   *silence_period = 20;
+   *lfps_half_cycle = 5;
+   break;
+   case 216000:
+   *silence_period = 27;
+   *lfps_half_cycle = 7;
+   break;
+   case 243000:
+   *silence_period = 31;
+   *lfps_half_cycle = 8;
+   break;
+   case 27:
+   *silence_period = 34;
+   *lfps_half_cycle = 9;
+   break;
+   case 324000:
+   *silence_period = 41;
+   *lfps_half_cycle = 11;
+   break;
+   case 432000:
+   *silence_period = 56;
+   *lfps_half_cycle = 15;
+   break;
+   case 54:
+   *silence_period = 69;
+   *lfps_half_cycle = 12;
+   break;
+   case 648000:
+   *silence_period = 84;
+   *lfps_half_cycle = 15;
+   break;
+   case 675000:
+   *silence_period = 87;
+   *lfps_half_cycle = 15;
+   break;
+   case 81:
+   *silence_period = 104;
+   *lfps_half_cycle = 19;
+   break;
+   default:
+   *silence_period = *lfps_half_cycle = -1;
+   return false;
+   }
+   return true;
+}
+
+/*
+ * AUX-Less Wake Time = CEILING( ((PHY P2 to P0) + tLFPS_Period, Max+
+ * tSilence, Max+ tPHY Establishment + tCDS) / tline)
+ * For the "PHY P2 to P0" latency see the PHY Power Control page
+ * (PHY P2 to P0) : https://gfxspecs.intel.com/Predator/Home/Index/68965
+ * : 12 us
+ * The tLFPS_Period, Max term is 800ns
+ * The tSilence, Max term is 180ns
+ * The tPHY Establishment (a.k.a. t1) term is 50us
+ * The tCDS term is 1 or 2 times t2
+ * t2 = Number ML_PHY_LOCK * tML_PHY_LOCK
+ * Number ML_PHY_LOCK = ( 7 + CEILING( 6.5us / tML_PHY_LOCK ) + 1)
+ * Rounding up the 6.5us padding to the next ML_PHY_LOCK boundary and
+ * adding the "+ 1" term ensures all ML_PHY_LOCK sequences that start
+ * within the CDS period complete within the CDS period regardless of
+ * entry into the period
+ * tML_PHY_LOCK = TPS4 Length * ( 10 / (Link Rate in MHz) )
+ * TPS4 Length = 252 Symbols
+ */
+static int _lnl_compute_aux_less_wake_time(int port_clock)
+{
+   int tphy2_p2_to_p0 = 12 * 1000;
+   int tlfps_period_max = 800;
+   int tsilence_max = 180;
+   int t1 = 50 * 1000;
+   int tps4 = 252;
+   int tml_phy_lock = 1000 * 1000 * tps4 * 10 / port_clock;
+   int num_ml_phy_lock = 7 + DIV_ROUND_UP(6500, tml_phy_lock) + 1;
+   int t2 = num_ml_

[PATCH v5 1/6] drm/i915/alpm: Move alpm parameters from intel_psr

2024-05-20 Thread Animesh Manna
ALPM can be enabled for non psr panel and currenly aplm-params are
encapsulated under intel_psr struct, so moving out to intel_dp struct.

Signed-off-by: Animesh Manna 
---
 .../drm/i915/display/intel_display_types.h| 21 +
 drivers/gpu/drm/i915/display/intel_psr.c  | 44 +--
 2 files changed, 31 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 9678c2b157f6..0ad6134ba94e 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1705,17 +1705,6 @@ struct intel_psr {
bool psr2_sel_fetch_cff_enabled;
bool req_psr2_sdp_prior_scanline;
u8 sink_sync_latency;
-
-   struct {
-   u8 io_wake_lines;
-   u8 fast_wake_lines;
-
-   /* LNL and beyond */
-   u8 check_entry_lines;
-   u8 silence_period_sym_clocks;
-   u8 lfps_half_cycle_num_of_syms;
-   } alpm_parameters;
-
ktime_t last_entry_attempt;
ktime_t last_exit;
bool sink_not_reliable;
@@ -1846,6 +1835,16 @@ struct intel_dp {
unsigned long last_oui_write;
 
bool colorimetry_support;
+
+   struct {
+   u8 io_wake_lines;
+   u8 fast_wake_lines;
+
+   /* LNL and beyond */
+   u8 check_entry_lines;
+   u8 silence_period_sym_clocks;
+   u8 lfps_half_cycle_num_of_syms;
+   } alpm_parameters;
 };
 
 enum lspcon_vendor {
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c 
b/drivers/gpu/drm/i915/display/intel_psr.c
index d18baeb971bb..a9019fde907f 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -871,8 +871,8 @@ static u32 intel_psr2_get_tp_time(struct intel_dp *intel_dp)
 
 static int psr2_block_count_lines(struct intel_dp *intel_dp)
 {
-   return intel_dp->psr.alpm_parameters.io_wake_lines < 9 &&
-   intel_dp->psr.alpm_parameters.fast_wake_lines < 9 ? 8 : 12;
+   return intel_dp->alpm_parameters.io_wake_lines < 9 &&
+   intel_dp->alpm_parameters.fast_wake_lines < 9 ? 8 : 12;
 }
 
 static int psr2_block_count(struct intel_dp *intel_dp)
@@ -910,7 +910,6 @@ static void dg2_activate_panel_replay(struct intel_dp 
*intel_dp)
 static void hsw_activate_psr2(struct intel_dp *intel_dp)
 {
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-   struct intel_psr *psr = &intel_dp->psr;
enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
u32 val = EDP_PSR2_ENABLE;
u32 psr_val = 0;
@@ -952,20 +951,20 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
 */
int tmp;
 
-   tmp = map[psr->alpm_parameters.io_wake_lines -
+   tmp = map[intel_dp->alpm_parameters.io_wake_lines -
  TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES];
val |= TGL_EDP_PSR2_IO_BUFFER_WAKE(tmp + 
TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES);
 
-   tmp = map[psr->alpm_parameters.fast_wake_lines - 
TGL_EDP_PSR2_FAST_WAKE_MIN_LINES];
+   tmp = map[intel_dp->alpm_parameters.fast_wake_lines - 
TGL_EDP_PSR2_FAST_WAKE_MIN_LINES];
val |= TGL_EDP_PSR2_FAST_WAKE(tmp + 
TGL_EDP_PSR2_FAST_WAKE_MIN_LINES);
} else if (DISPLAY_VER(dev_priv) >= 20) {
-   val |= 
LNL_EDP_PSR2_IO_BUFFER_WAKE(psr->alpm_parameters.io_wake_lines);
+   val |= 
LNL_EDP_PSR2_IO_BUFFER_WAKE(intel_dp->alpm_parameters.io_wake_lines);
} else if (DISPLAY_VER(dev_priv) >= 12) {
-   val |= 
TGL_EDP_PSR2_IO_BUFFER_WAKE(psr->alpm_parameters.io_wake_lines);
-   val |= 
TGL_EDP_PSR2_FAST_WAKE(psr->alpm_parameters.fast_wake_lines);
+   val |= 
TGL_EDP_PSR2_IO_BUFFER_WAKE(intel_dp->alpm_parameters.io_wake_lines);
+   val |= 
TGL_EDP_PSR2_FAST_WAKE(intel_dp->alpm_parameters.fast_wake_lines);
} else if (DISPLAY_VER(dev_priv) >= 9) {
-   val |= 
EDP_PSR2_IO_BUFFER_WAKE(psr->alpm_parameters.io_wake_lines);
-   val |= EDP_PSR2_FAST_WAKE(psr->alpm_parameters.fast_wake_lines);
+   val |= 
EDP_PSR2_IO_BUFFER_WAKE(intel_dp->alpm_parameters.io_wake_lines);
+   val |= 
EDP_PSR2_FAST_WAKE(intel_dp->alpm_parameters.fast_wake_lines);
}
 
if (intel_dp->psr.req_psr2_sdp_prior_scanline)
@@ -1348,9 +1347,9 @@ static int _lnl_compute_aux_less_alpm_params(struct 
intel_dp *intel_dp,
if (i915->display.params.psr_safest_params)
aux_less_wake_lines = ALPM_CTL_AUX_LESS_WAKE_TIME_MASK;
 
-   intel_dp->psr.alpm_parameters.fast_wake_lines = aux_less_wake_lines;
-   intel_dp->psr.alpm_parameters.silence_period_sym_clocks = 
silence_period;
-   intel_dp->psr.alpm_parameters.lfps_half_cycle_num_of_syms = 
lfps_half_cycle;
+ 

[PATCH v5 0/6] Link off between frames for edp

2024-05-20 Thread Animesh Manna
Link Off Between Active Frames (LOBF) allows an eDP link to be turned Off and On
durning long VBLANK durations without enabling any of the PSR/PSR2/PR modes of 
operation.

Bspec: 71477

Note: Lobf need to be enabled adaptive sync fixed refresh mode
where vmin = vmax = flipline, which will arise after cmmr feature
enablement. Currently existing code refactored and make compute-config()
and enabling function ready. Will add enabling sequence in a separate patch.

Signed-off-by: Animesh Manna 

Animesh Manna (5):
  drm/i915/alpm: Move alpm parameters from intel_psr
  drm/i915/alpm: Move alpm related code to a new file
  drm/i915/alpm: Add compute config for lobf
  drm/i915/alpm: Enable lobf from source in ALPM_CTL
  drm/i915/alpm: Add debugfs for LOBF

Jouni Högander (1):
  drm/display: Add missing aux less alpm wake related bits

 drivers/gpu/drm/i915/Makefile |   1 +
 drivers/gpu/drm/i915/display/intel_alpm.c | 411 ++
 drivers/gpu/drm/i915/display/intel_alpm.h |  25 ++
 .../drm/i915/display/intel_display_debugfs.c  |   2 +
 .../drm/i915/display/intel_display_types.h|  26 +-
 drivers/gpu/drm/i915/display/intel_dp.c   |   4 +
 drivers/gpu/drm/i915/display/intel_psr.c  | 303 +
 drivers/gpu/drm/xe/Makefile   |   1 +
 include/drm/display/drm_dp.h  |   5 +-
 9 files changed, 475 insertions(+), 303 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/display/intel_alpm.c
 create mode 100644 drivers/gpu/drm/i915/display/intel_alpm.h

-- 
2.29.0



Re: [PATCH v2 5/6] drm/ci: skip driver specific tests

2024-05-20 Thread Dmitry Baryshkov
On Fri, May 17, 2024 at 02:55:01PM +0530, Vignesh Raman wrote:
> Skip driver specific tests and skip kms tests for
> panfrost driver since it is not a kms driver.
> 
> Signed-off-by: Vignesh Raman 
> ---

I didn't perform a through check, but generally looks good.

Reviewed-by: Dmitry Baryshkov 

-- 
With best wishes
Dmitry


Re: [PATCH 0/7] drm/i915: DSC stuff

2024-05-20 Thread Jani Nikula
On Fri, 17 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Respect the VBT's edp_disable_dsc bit, and do a bunch
> of refactoring around checking for DSC support.
>
> Also threw in a bonus cleanup to intel_dp_has_audio()
> that caught my eye.

The dropping of const here and there sticks out a bit, but with that
explained or fixed, the series is

Reviewed-by: Jani Nikula 



>
> Ville Syrjälä (7):
>   drm/i915: Drop redundant dsc_decompression_aux check
>   drm/i915: Extract intel_dp_has_dsc()
>   drm/i915: Handle MST in intel_dp_has_dsc()
>   drm/i915: Use intel_dp_has_dsc() during .compute_config()
>   drm/i915: Reuse intel_dp_supports_dsc() for MST
>   drm/i915: Utilize edp_disable_dsc from VBT
>   drm/i915: Remove bogus MST check in intel_dp_has_audio()
>
>  drivers/gpu/drm/i915/display/intel_bios.c |  4 ++
>  .../drm/i915/display/intel_display_types.h|  1 +
>  drivers/gpu/drm/i915/display/intel_dp.c   | 42 +--
>  drivers/gpu/drm/i915/display/intel_dp.h   |  4 ++
>  drivers/gpu/drm/i915/display/intel_dp_mst.c   | 23 +++---
>  5 files changed, 44 insertions(+), 30 deletions(-)

-- 
Jani Nikula, Intel


Re: [PATCH v2 4/6] drm/ci: uprev IGT

2024-05-20 Thread Dmitry Baryshkov
On Fri, May 17, 2024 at 02:55:00PM +0530, Vignesh Raman wrote:
> test-list.txt and test-list-full.txt are not generated for
> cross-builds and they are required by drm-ci for testing
> arm32 targets.
> 
> This is fixed in igt-gpu-tools. So uprev IGT to include the
> commit which fixes this issue. Disable building xe driver
> tests for non-intel platforms.
> 
> Signed-off-by: Vignesh Raman 
> ---
> 
> v2:
>   - Split IGT uprev to seperate patch.
> 

Reviewed-by: Dmitry Baryshkov 


-- 
With best wishes
Dmitry


Re: [PATCH v2 3/6] drm/ci: build virtual GPU driver as module

2024-05-20 Thread Dmitry Baryshkov
On Fri, May 17, 2024 at 02:54:59PM +0530, Vignesh Raman wrote:
> With latest IGT, the tests tries to load the module and it
> fails. So build the virtual GPU driver for virtio as module.

Why? If the test fails on module loading (if the driver is built-in)
then it's the test that needs to be fixed, not the kerenel config.

It's fine as a temporal workaround, but please include a link to the
patch posted to fix the issue.

> 
> Signed-off-by: Vignesh Raman 
> ---
> 
> v2:
>   - No changes.
> 
> ---
>  drivers/gpu/drm/ci/build.sh   | 1 -
>  drivers/gpu/drm/ci/igt_runner.sh  | 6 +++---
>  drivers/gpu/drm/ci/image-tags.yml | 4 ++--
>  drivers/gpu/drm/ci/test.yml   | 1 +
>  drivers/gpu/drm/ci/x86_64.config  | 2 +-
>  5 files changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ci/build.sh b/drivers/gpu/drm/ci/build.sh
> index a67871fdcd3f..e938074ac8e7 100644
> --- a/drivers/gpu/drm/ci/build.sh
> +++ b/drivers/gpu/drm/ci/build.sh
> @@ -157,7 +157,6 @@ fi
>  
>  mkdir -p artifacts/install/lib
>  mv install/* artifacts/install/.
> -rm -rf artifacts/install/modules
>  ln -s common artifacts/install/ci-common
>  cp .config artifacts/${CI_JOB_NAME}_config
>  
> diff --git a/drivers/gpu/drm/ci/igt_runner.sh 
> b/drivers/gpu/drm/ci/igt_runner.sh
> index 20026612a9bd..55532f79fbdc 100755
> --- a/drivers/gpu/drm/ci/igt_runner.sh
> +++ b/drivers/gpu/drm/ci/igt_runner.sh
> @@ -30,10 +30,10 @@ case "$DRIVER_NAME" in
>  export IGT_FORCE_DRIVER="panfrost"
>  fi
>  ;;
> -amdgpu)
> +amdgpu|virtio_gpu)
>  # Cannot use HWCI_KERNEL_MODULES as at that point we don't have the 
> module in /lib
> -mv /install/modules/lib/modules/* /lib/modules/.
> -modprobe amdgpu
> +mv /install/modules/lib/modules/* /lib/modules/. || true
> +modprobe --first-time $DRIVER_NAME
>  ;;
>  esac
>  
> diff --git a/drivers/gpu/drm/ci/image-tags.yml 
> b/drivers/gpu/drm/ci/image-tags.yml
> index 60323ebc7304..328f5c560742 100644
> --- a/drivers/gpu/drm/ci/image-tags.yml
> +++ b/drivers/gpu/drm/ci/image-tags.yml
> @@ -4,9 +4,9 @@ variables:
> DEBIAN_BASE_TAG: "${CONTAINER_TAG}"
>  
> DEBIAN_X86_64_BUILD_IMAGE_PATH: "debian/x86_64_build"
> -   DEBIAN_BUILD_TAG: "2023-10-08-config"
> +   DEBIAN_BUILD_TAG: "2024-05-09-virtio"
>  
> -   KERNEL_ROOTFS_TAG: "2023-10-06-amd"
> +   KERNEL_ROOTFS_TAG: "2024-05-09-virtio"
>  
> DEBIAN_X86_64_TEST_BASE_IMAGE: "debian/x86_64_test-base"
> DEBIAN_X86_64_TEST_IMAGE_GL_PATH: "debian/x86_64_test-gl"
> diff --git a/drivers/gpu/drm/ci/test.yml b/drivers/gpu/drm/ci/test.yml
> index 612c9ede3507..864ac3809d84 100644
> --- a/drivers/gpu/drm/ci/test.yml
> +++ b/drivers/gpu/drm/ci/test.yml
> @@ -350,6 +350,7 @@ virtio_gpu:none:
>script:
>  - ln -sf $CI_PROJECT_DIR/install /install
>  - mv install/bzImage /lava-files/bzImage
> +- mkdir -p /lib/modules

Is it necessary to create it manually here?

>  - mkdir -p $CI_PROJECT_DIR/results
>  - ln -sf $CI_PROJECT_DIR/results /results
>  - install/crosvm-runner.sh install/igt_runner.sh
> diff --git a/drivers/gpu/drm/ci/x86_64.config 
> b/drivers/gpu/drm/ci/x86_64.config
> index 1cbd49a5b23a..78479f063e8e 100644
> --- a/drivers/gpu/drm/ci/x86_64.config
> +++ b/drivers/gpu/drm/ci/x86_64.config
> @@ -91,7 +91,7 @@ CONFIG_KVM=y
>  CONFIG_KVM_GUEST=y
>  CONFIG_VIRT_DRIVERS=y
>  CONFIG_VIRTIO_FS=y
> -CONFIG_DRM_VIRTIO_GPU=y
> +CONFIG_DRM_VIRTIO_GPU=m
>  CONFIG_SERIAL_8250_CONSOLE=y
>  CONFIG_VIRTIO_NET=y
>  CONFIG_VIRTIO_CONSOLE=y
> -- 
> 2.40.1
> 

-- 
With best wishes
Dmitry


Re: [PATCH 7/7] drm/i915: Remove bogus MST check in intel_dp_has_audio()

2024-05-20 Thread Jani Nikula
On Fri, 17 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> No idea what this MST checks is doing in intel_dp_has_audio().
> Looks completely pointless, so get rid of it.

2e775f2d41ef ("drm/i915/display: update intel_dp_has_audio to support MST")
6297ee90f682 ("drm/i915/display: configure SDP split for DP-MST")

The division of changes here is not ideal, but I presume the goal was to
not do functional changes compared to intel_dp_mst_has_audio(). Which
may or may not be a good reason...

BR,
Jani.

>
> Signed-off-by: Ville Syrjälä 
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 6 ++
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index af298d5017d9..4a486bb6d48c 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -2806,7 +2806,6 @@ intel_dp_drrs_compute_config(struct intel_connector 
> *connector,
>  }
>  
>  static bool intel_dp_has_audio(struct intel_encoder *encoder,
> -struct intel_crtc_state *crtc_state,
>  const struct drm_connector_state *conn_state)
>  {
>   struct drm_i915_private *i915 = to_i915(encoder->base.dev);
> @@ -2815,8 +2814,7 @@ static bool intel_dp_has_audio(struct intel_encoder 
> *encoder,
>   struct intel_connector *connector =
>   to_intel_connector(conn_state->connector);
>  
> - if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST) &&
> - !intel_dp_port_has_audio(i915, encoder->port))
> + if (!intel_dp_port_has_audio(i915, encoder->port))
>   return false;
>  
>   if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
> @@ -2875,7 +2873,7 @@ intel_dp_audio_compute_config(struct intel_encoder 
> *encoder,
> struct drm_connector_state *conn_state)
>  {
>   pipe_config->has_audio =
> - intel_dp_has_audio(encoder, pipe_config, conn_state) &&
> + intel_dp_has_audio(encoder, conn_state) &&
>   intel_audio_compute_config(encoder, pipe_config, conn_state);
>  
>   pipe_config->sdp_split_enable = pipe_config->has_audio &&

-- 
Jani Nikula, Intel


Re: [PATCH v2 2/6] drm/ci: generate testlist from build

2024-05-20 Thread Dmitry Baryshkov
On Fri, May 17, 2024 at 02:54:58PM +0530, Vignesh Raman wrote:
> Stop vendoring the testlist into the kernel. Instead, use the
> testlist from the IGT build to ensure we do not miss renamed
> or newly added tests.
> 
> Signed-off-by: Vignesh Raman 
> ---
> 
> v2:
>   - Fix testlist generation for arm and arm64 builds.
> 
> ---
>  drivers/gpu/drm/ci/build-igt.sh  |   34 +
>  drivers/gpu/drm/ci/igt_runner.sh |9 +-
>  drivers/gpu/drm/ci/testlist.txt  | 2761 --
>  3 files changed, 39 insertions(+), 2765 deletions(-)
>  delete mode 100644 drivers/gpu/drm/ci/testlist.txt
> 
> diff --git a/drivers/gpu/drm/ci/build-igt.sh b/drivers/gpu/drm/ci/build-igt.sh
> index 7859554756c4..e62244728613 100644
> --- a/drivers/gpu/drm/ci/build-igt.sh
> +++ b/drivers/gpu/drm/ci/build-igt.sh

[...]

> @@ -26,6 +50,16 @@ meson build $MESON_OPTIONS $EXTRA_MESON_ARGS
>  ninja -C build -j${FDO_CI_CONCURRENT:-4} || ninja -C build -j 1
>  ninja -C build install
>  
> +if [[ "$KERNEL_ARCH" = "arm64" ]]; then
> +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/igt/lib/aarch64-linux-gnu
> +elif [[ "$KERNEL_ARCH" = "arm" ]]; then
> +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/igt/lib
> +else
> +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/igt/lib64

Could you please clarify this part? The arm64 vs arm don't look logical
from my point of view.

The rest LGTM.

> +fi
> +
> +generate_testlist
> +
>  mkdir -p artifacts/
>  tar -cf artifacts/igt.tar /igt
>  
-- 
With best wishes
Dmitry


Re: [PATCH 2/7] drm/i915: Extract intel_dp_has_dsc()

2024-05-20 Thread Jani Nikula
On Fri, 17 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Extract a helper to check whether the source+sink combo
> supports DSC. That basic check is needed both during mode
> validation and compute config. We'll also need to add extra
> checks to both places, so having a single place for it is nicer.
>
> Signed-off-by: Ville Syrjälä 
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 16 ++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 1e88449fe5f2..7bf283b4df7f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1220,6 +1220,19 @@ bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
>  connector->force_bigjoiner_enable;
>  }
>  
> +static bool intel_dp_has_dsc(struct intel_connector *connector)

Why not const?

> +{
> + struct drm_i915_private *i915 = to_i915(connector->base.dev);
> +
> + if (!HAS_DSC(i915))
> + return false;
> +
> + if (!drm_dp_sink_supports_dsc(connector->dp.dsc_dpcd))
> + return false;
> +
> + return true;
> +}
> +
>  static enum drm_mode_status
>  intel_dp_mode_valid(struct drm_connector *_connector,
>   struct drm_display_mode *mode)
> @@ -1274,8 +1287,7 @@ intel_dp_mode_valid(struct drm_connector *_connector,
>   mode_rate = intel_dp_link_required(target_clock,
>  
> intel_dp_mode_min_output_bpp(connector, mode));
>  
> - if (HAS_DSC(dev_priv) &&
> - drm_dp_sink_supports_dsc(connector->dp.dsc_dpcd)) {
> + if (intel_dp_has_dsc(connector)) {
>   enum intel_output_format sink_format, output_format;
>   int pipe_bpp;

-- 
Jani Nikula, Intel


Re: [PATCH v2 1/6] drm/ci: uprev mesa version

2024-05-20 Thread Dmitry Baryshkov
On Fri, May 17, 2024 at 02:54:57PM +0530, Vignesh Raman wrote:
> zlib.net is not allowing tarball download anymore and results
> in below error in kernel+rootfs_arm32 container build,
> urllib.error.HTTPError: HTTP Error 403: Forbidden
> urllib.error.HTTPError: HTTP Error 415: Unsupported Media Type
> 
> Uprev mesa to latest version which includes a fix for this issue.
> https://gitlab.freedesktop.org/mesa/mesa/-/commit/908f444e
> 
> Use id_tokens for JWT authentication. Since s3 bucket is migrated to
> mesa-rootfs, update the variables accordingly. Also copy helper scripts
> to install, so that the ci jobs can use these scripts for logging.
> 
> Signed-off-by: Vignesh Raman 
> ---
> 
> v2:
>   - Uprev to recent version and use id_tokens for JWT authentication
> 
> ---
>  drivers/gpu/drm/ci/build-igt.sh   |  2 +-
>  drivers/gpu/drm/ci/build.sh   |  6 +++--
>  drivers/gpu/drm/ci/container.yml  | 12 +++--
>  drivers/gpu/drm/ci/gitlab-ci.yml  | 44 +--
>  drivers/gpu/drm/ci/image-tags.yml |  2 +-
>  drivers/gpu/drm/ci/lava-submit.sh |  4 +--
>  drivers/gpu/drm/ci/test.yml   |  2 ++
>  7 files changed, 44 insertions(+), 28 deletions(-)
> 

[skipped]

> diff --git a/drivers/gpu/drm/ci/test.yml b/drivers/gpu/drm/ci/test.yml
> index 8bc63912fddb..612c9ede3507 100644
> --- a/drivers/gpu/drm/ci/test.yml
> +++ b/drivers/gpu/drm/ci/test.yml
> @@ -150,6 +150,8 @@ msm:sdm845:
>  BM_KERNEL: https://${PIPELINE_ARTIFACTS_BASE}/arm64/cheza-kernel
>  GPU_VERSION: sdm845
>  RUNNER_TAG: google-freedreno-cheza
> +DEVICE_TYPE: sdm845-cheza-r3
> +FARM: google

I see that this is the only user of the FARM: tag. Is it correct?
Also we miss DEVICE_TYPE for several other boards. Should we be adding
them?

>script:
>  - ./install/bare-metal/cros-servo.sh
>  
> -- 
> 2.40.1
> 

-- 
With best wishes
Dmitry


✓ Fi.CI.BAT: success for Ultrajoiner basic functionality series

2024-05-20 Thread Patchwork
== Series Details ==

Series: Ultrajoiner basic functionality series
URL   : https://patchwork.freedesktop.org/series/133800/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14784 -> Patchwork_133800v1


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/index.html

Participating hosts (40 -> 40)
--

  Additional (3): fi-kbl-7567u fi-kbl-8809g fi-elk-e7500 
  Missing(3): fi-cfl-8109u fi-snb-2520m bat-arls-3 

Known issues


  Here are the changes found in Patchwork_133800v1 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@gem_huc_copy@huc-copy:
- fi-kbl-7567u:   NOTRUN -> [SKIP][1] ([i915#2190])
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/fi-kbl-7567u/igt@gem_huc_c...@huc-copy.html
- fi-kbl-8809g:   NOTRUN -> [SKIP][2] ([i915#2190])
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/fi-kbl-8809g/igt@gem_huc_c...@huc-copy.html

  * igt@gem_lmem_swapping@basic:
- fi-kbl-7567u:   NOTRUN -> [SKIP][3] ([i915#4613]) +3 other tests skip
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/fi-kbl-7567u/igt@gem_lmem_swapp...@basic.html
- fi-kbl-8809g:   NOTRUN -> [SKIP][4] ([i915#4613]) +3 other tests skip
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/fi-kbl-8809g/igt@gem_lmem_swapp...@basic.html

  * igt@kms_force_connector_basic@force-load-detect:
- fi-kbl-7567u:   NOTRUN -> [SKIP][5] +11 other tests skip
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/fi-kbl-7567u/igt@kms_force_connector_ba...@force-load-detect.html
- fi-kbl-8809g:   NOTRUN -> [SKIP][6] +30 other tests skip
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/fi-kbl-8809g/igt@kms_force_connector_ba...@force-load-detect.html

  * igt@kms_pm_rpm@basic-pci-d3-state:
- fi-elk-e7500:   NOTRUN -> [SKIP][7] +24 other tests skip
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/fi-elk-e7500/igt@kms_pm_...@basic-pci-d3-state.html

  
 Possible fixes 

  * igt@i915_pm_rpm@module-reload:
- {bat-mtlp-9}:   [WARN][8] ([i915#10436]) -> [PASS][9]
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-mtlp-9/igt@i915_pm_...@module-reload.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/bat-mtlp-9/igt@i915_pm_...@module-reload.html

  * igt@i915_selftest@live@workarounds:
- bat-dg2-9:  [DMESG-FAIL][10] ([i915#9500]) -> [PASS][11]
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-dg2-9/igt@i915_selftest@l...@workarounds.html
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/bat-dg2-9/igt@i915_selftest@l...@workarounds.html

  * igt@kms_flip@basic-plain-flip@a-dp6:
- {bat-mtlp-9}:   [DMESG-WARN][12] ([i915#10435]) -> [PASS][13] +1 
other test pass
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-mtlp-9/igt@kms_flip@basic-plain-f...@a-dp6.html
   [13]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/bat-mtlp-9/igt@kms_flip@basic-plain-f...@a-dp6.html

  * igt@kms_frontbuffer_tracking@basic:
- {bat-mtlp-9}:   [DMESG-WARN][14] ([i915#10435] / [i915#9157]) -> 
[PASS][15]
   [14]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-mtlp-9/igt@kms_frontbuffer_track...@basic.html
   [15]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133800v1/bat-mtlp-9/igt@kms_frontbuffer_track...@basic.html

  
  {name}: This element is suppressed. This means it is ignored when computing
  the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10212
  [i915#10214]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10214
  [i915#10216]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10216
  [i915#10435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10435
  [i915#10436]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10436
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#9157]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9157
  [i915#9500]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9500


Build changes
-

  * Linux: CI_DRM_14784 -> Patchwork_133800v1

  CI-20190529: 20190529
  CI_DRM_14784: 5e9e7440f7d7efd64079148c738fc83600fb477b @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7861: 7861
  Patchwork_133800v1: 5e9e7440f7d7efd64079148c738fc83600fb477b @ 
git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-t

Re: [PATCH] drm/i915: Bump max TMDS bitrate to 6 Gbps on ADL/DG2+

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Bspec lists the mas TMDS bitrate as 6 Gbps on ADL/DG2.

*max

There's also ADL-S with display 12 and 6 Gbps support?

BR,
Jani.

> Bump our limit to match.
>
> Signed-off-by: Ville Syrjälä 
> ---
>  drivers/gpu/drm/i915/display/intel_hdmi.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c 
> b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 0faf2afa1c09..bd0ba4edcd1d 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -1784,7 +1784,9 @@ static int intel_hdmi_source_max_tmds_clock(struct 
> intel_encoder *encoder)
>   struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>   int max_tmds_clock, vbt_max_tmds_clock;
>  
> - if (DISPLAY_VER(dev_priv) >= 10)
> + if (DISPLAY_VER(dev_priv) >= 13)
> + max_tmds_clock = 60;
> + else if (DISPLAY_VER(dev_priv) >= 10)
>   max_tmds_clock = 594000;
>   else if (DISPLAY_VER(dev_priv) >= 8 || IS_HASWELL(dev_priv))
>   max_tmds_clock = 30;

-- 
Jani Nikula, Intel


✗ Fi.CI.CHECKPATCH: warning for Ultrajoiner basic functionality series

2024-05-20 Thread Patchwork
== Series Details ==

Series: Ultrajoiner basic functionality series
URL   : https://patchwork.freedesktop.org/series/133800/
State : warning

== Summary ==

Error: dim checkpatch failed
f1c5de795401 drm/i915: Rename all bigjoiner to joiner
-:200: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#200: FILE: drivers/gpu/drm/i915/display/intel_display.c:2320:
+static void intel_joiner_adjust_timings(const struct intel_crtc_state 
*crtc_state,
   struct drm_display_mode *mode)

-:299: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#299: FILE: drivers/gpu/drm/i915/display/intel_display.c:3496:
+static void enabled_joiner_pipes(struct drm_i915_private *dev_priv,
u8 *master_pipes, u8 *slave_pipes)

-:415: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#415: FILE: drivers/gpu/drm/i915/display/intel_display.c:4501:
+copy_joiner_crtc_state_nomodeset(struct intel_atomic_state *state,
struct intel_crtc *slave_crtc)

-:424: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#424: FILE: drivers/gpu/drm/i915/display/intel_display.c:4521:
+copy_joiner_crtc_state_modeset(struct intel_atomic_state *state,
  struct intel_crtc *slave_crtc)

-:471: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#471: FILE: drivers/gpu/drm/i915/display/intel_display.c:5735:
+static int intel_crtc_add_joiner_planes(struct intel_atomic_state *state,
   struct intel_crtc *crtc,

-:514: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#514: FILE: drivers/gpu/drm/i915/display/intel_display.c:5891:
+static int intel_atomic_check_joiner(struct intel_atomic_state *state,
struct intel_crtc *master_crtc)

-:577: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#577: FILE: drivers/gpu/drm/i915/display/intel_display.c:5962:
+static void kill_joiner_slave(struct intel_atomic_state *state,
 struct intel_crtc *master_crtc)

-:971: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#971: FILE: drivers/gpu/drm/i915/display/intel_dp.c:1211:
+bool intel_dp_need_joiner(struct intel_dp *intel_dp,
 struct intel_connector *connector,

-:1001: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1001: FILE: drivers/gpu/drm/i915/display/intel_dp.c:1259:
+   if (intel_dp_need_joiner(intel_dp, connector,
mode->hdisplay, target_clock)) {

-:1073: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1073: FILE: drivers/gpu/drm/i915/display/intel_dp.c:2436:
+   if (intel_dp_need_joiner(intel_dp, connector,
adjusted_mode->crtc_hdisplay,

-:1122: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1122: FILE: drivers/gpu/drm/i915/display/intel_dp.h:154:
+bool intel_dp_need_joiner(struct intel_dp *intel_dp,
 struct intel_connector *connector,

-:1144: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1144: FILE: drivers/gpu/drm/i915/display/intel_dp_mst.c:571:
+   if (intel_dp_need_joiner(intel_dp, connector,
adjusted_mode->crtc_hdisplay,

-:1173: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1173: FILE: drivers/gpu/drm/i915/display/intel_dp_mst.c:1422:
+   if (intel_dp_need_joiner(intel_dp, intel_connector,
mode->hdisplay, target_clock)) {

-:1313: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1313: FILE: drivers/gpu/drm/i915/display/intel_modeset_setup.c:278:
+   joiner_slaves_mask = get_joiner_slave_pipes(i915,
  portsync_master_mask |

-:1372: WARNING:LONG_LINE: line length of 109 exceeds 100 columns
#1372: FILE: drivers/gpu/drm/i915/display/intel_modeset_setup.c:739:
+
intel_crtc_joiner_slave_pipes(crtc_state)) {

total: 0 errors, 1 warnings, 14 checks, 1283 lines checked
8e8e3298a19d drm/i915: Implement basic functions for ultrajoiner support
c30500d06cf7 drm/i915: Implement hw state readout for ultrajoiner
-:9: WARNING:BAD_SIGN_OFF: 'Signed-off-by:' is the preferred signature form
#9: 
SIgned-off-by: Stanislav Lisovskiy 

-:48: CHECK:LINE_SPACING: Please don't use multiple blank lines
#48: FILE: drivers/gpu/drm/i915/display/intel_display.c:3577:
+
+

-:71: WARNING:UNNECESSARY_ELSE: else is not generally useful after a break or 
return
#71: FILE: drivers/gpu/drm/i915/display/intel_display.c:3616:
+   return fls(master_pipes) - 1;
+   } else {

total: 0 errors, 2 warnings, 1 checks, 130 lines c

Re: [PATCH 2/2] drm/i915/hdcp: Check mst_port to determine connector type

2024-05-20 Thread Imre Deak
On Mon, May 20, 2024 at 06:58:19AM +0300, Kandpal, Suraj wrote:
> 
> 
> > -Original Message-
> > From: Deak, Imre 
> > Sent: Friday, May 17, 2024 6:19 PM
> > To: Kandpal, Suraj 
> > Cc: intel-gfx@lists.freedesktop.org; Borah, Chaitanya Kumar
> > ; Shankar, Uma
> > ; Nautiyal, Ankit K 
> > Subject: Re: [PATCH 2/2] drm/i915/hdcp: Check mst_port to determine
> > connector type
> >
> > On Tue, May 07, 2024 at 09:20:37AM +0530, Suraj Kandpal wrote:
> > > Check mst_port field in intel_connector to check connector type rather
> > > than rely on encoder as it may not be attached to connector at times.
> > >
> > > Signed-off-by: Suraj Kandpal 
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> > > b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> > > index 551c862ed7a6..2edffe62f360 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> > > @@ -693,7 +693,7 @@ int intel_dp_hdcp_get_remote_capability(struct
> > > intel_connector *connector,
> > >
> > > *hdcp_capable = false;
> > > *hdcp2_capable = false;
> > > -   if (!intel_encoder_is_mst(connector->encoder))
> > > +   if (!connector->mst_port)
> >
> > I suppose this fixes
> > https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10898
> >
> > Could you add the Closes: line for it?
> >
> 
> Sure Imre will add that.
> 
> > Can this function be called for anything else than an MST connector?
> >
> > Afaics it's only called from
> >
> > intel_connector_info() ->
> >   intel_hdcp_info(..., remote_req = true)
> >
> > only for MST connectors, which makes sense since only MST connectors would
> > have remote caps. In that case it would be enough to simply remove the
> > encoder check which leads to the NULL deref in case the output is disabled.
> 
> Right this function is not invoked from anywhere but hdcp_info() since
> this was Created just to have a sense of the actual HDCP capability of
> remote monitor rather than having to display the first monitor's HDCP
> capability and repeating it for the second monitor specially when in
> daisy chain setup.

I meant that it's strange to check connector->mst_port in
intel_connector_info() and then check the same condition again in the
above function, which is always true and thus redundant. In any case the
change does fix the issue, so on the patchset:

Reviewed-by: Imre Deak 

> Regards,
> Suraj Kandpal
> 
> > > return -EINVAL;
> > >
> > > aux = &connector->port->aux;
> > > --
> > > 2.43.2
> > >


Re: [PATCH 1/5] drm/i915: Rename all bigjoiner to joiner

2024-05-20 Thread Jani Nikula
On Mon, 20 May 2024, Stanislav Lisovskiy  wrote:
> Lets unify both bigjoiner and ultrajoiner under simple "joiner" name,
> because in future we might have multiple configurations, involving
> multiple bigjoiners, ultrajoiner, however it is possible to use
> same api for handling both.

If you're doing a big rename, might as well do the master/slave ->
primary/secondary rename too.

BR,
Jani.

>
> Signed-off-by: Stanislav Lisovskiy 
> ---
>  .../gpu/drm/i915/display/intel_atomic_plane.c |   4 +-
>  drivers/gpu/drm/i915/display/intel_cdclk.c|   8 +-
>  .../drm/i915/display/intel_crtc_state_dump.c  |   8 +-
>  drivers/gpu/drm/i915/display/intel_cursor.c   |   4 +-
>  drivers/gpu/drm/i915/display/intel_ddi.c  |   4 +-
>  drivers/gpu/drm/i915/display/intel_display.c  | 204 +-
>  drivers/gpu/drm/i915/display/intel_display.h  |   8 +-
>  .../drm/i915/display/intel_display_debugfs.c  |  10 +-
>  .../drm/i915/display/intel_display_types.h|   4 +-
>  drivers/gpu/drm/i915/display/intel_dp.c   |  60 +++---
>  drivers/gpu/drm/i915/display/intel_dp.h   |   8 +-
>  drivers/gpu/drm/i915/display/intel_dp_mst.c   |  22 +-
>  drivers/gpu/drm/i915/display/intel_drrs.c |   6 +-
>  .../drm/i915/display/intel_modeset_setup.c|  38 ++--
>  drivers/gpu/drm/i915/display/intel_psr.c  |   6 +-
>  drivers/gpu/drm/i915/display/intel_vdsc.c |  12 +-
>  drivers/gpu/drm/i915/display/intel_vdsc.h |   2 +-
>  drivers/gpu/drm/i915/display/intel_vrr.c  |   2 +-
>  .../drm/i915/display/skl_universal_plane.c|   4 +-
>  19 files changed, 207 insertions(+), 207 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c 
> b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> index 27224ecdc94c..7a0b2f3a672e 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> @@ -335,7 +335,7 @@ void intel_plane_copy_uapi_to_hw_state(struct 
> intel_plane_state *plane_state,
>   intel_plane_clear_hw_state(plane_state);
>  
>   /*
> -  * For the bigjoiner slave uapi.crtc will point at
> +  * For the joiner slave uapi.crtc will point at
>* the master crtc. So we explicitly assign the right
>* slave crtc to hw.crtc. uapi.crtc!=NULL simply indicates
>* the plane is logically enabled on the uapi level.
> @@ -720,7 +720,7 @@ int intel_plane_atomic_check(struct intel_atomic_state 
> *state,
>   struct intel_crtc_state *new_crtc_state =
>   intel_atomic_get_new_crtc_state(state, crtc);
>  
> - if (new_crtc_state && intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
> + if (new_crtc_state && intel_crtc_is_joiner_slave(new_crtc_state)) {
>   struct intel_crtc *master_crtc =
>   intel_master_crtc(new_crtc_state);
>   struct intel_plane *master_plane =
> diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c 
> b/drivers/gpu/drm/i915/display/intel_cdclk.c
> index b78154c82a71..36fb7ad1d871 100644
> --- a/drivers/gpu/drm/i915/display/intel_cdclk.c
> +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
> @@ -2731,7 +2731,7 @@ static int intel_vdsc_min_cdclk(const struct 
> intel_crtc_state *crtc_state)
>   min_cdclk = max_t(int, min_cdclk,
> DIV_ROUND_UP(crtc_state->pixel_rate, 
> num_vdsc_instances));
>  
> - if (crtc_state->bigjoiner_pipes) {
> + if (crtc_state->joiner_pipes) {
>   int pixel_clock = 
> intel_dp_mode_to_fec_clock(crtc_state->hw.adjusted_mode.clock);
>  
>   /*
> @@ -2743,13 +2743,13 @@ static int intel_vdsc_min_cdclk(const struct 
> intel_crtc_state *crtc_state)
>*
>* => CDCLK >= compressed_bpp * Pixel clock / (PPC * Bigjoiner 
> Interface bits)
>*
> -  * Since PPC = 2 with bigjoiner
> +  * Since PPC = 2 with joiner
>* => CDCLK >= compressed_bpp * Pixel clock  / 2 * Bigjoiner 
> Interface bits
>*/
> - int bigjoiner_interface_bits = DISPLAY_VER(i915) >= 14 ? 36 : 
> 24;
> + int joiner_interface_bits = DISPLAY_VER(i915) >= 14 ? 36 : 24;
>   int min_cdclk_bj =
>   (to_bpp_int_roundup(crtc_state->dsc.compressed_bpp_x16) 
> *
> -  pixel_clock) / (2 * bigjoiner_interface_bits);
> +  pixel_clock) / (2 * joiner_interface_bits);
>  
>   min_cdclk = max(min_cdclk, min_cdclk_bj);
>   }
> diff --git a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c 
> b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
> index ccaa4cb2809b..a999c37293bd 100644
> --- a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
> +++ b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
> @@ -222,10 +222,10 @@ void intel_crtc_state_dump(const struct 
> intel_crtc_state *pipe_config,
>  transcoder_name(pipe_config->master_transcoder),
>   

✗ Fi.CI.BAT: failure for Fixes in hdcp remote capability (rev3)

2024-05-20 Thread Patchwork
== Series Details ==

Series: Fixes in hdcp remote capability (rev3)
URL   : https://patchwork.freedesktop.org/series/133047/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14784 -> Patchwork_133047v3


Summary
---

  **FAILURE**

  Serious unknown changes coming with Patchwork_133047v3 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_133047v3, please notify your bug team 
(i915-ci-in...@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/index.html

Participating hosts (40 -> 38)
--

  Additional (2): fi-kbl-7567u bat-jsl-3 
  Missing(4): bat-dg2-11 fi-cfl-8109u fi-snb-2520m bat-adlp-6 

Possible new issues
---

  Here are the unknown changes that may have been introduced in 
Patchwork_133047v3:

### IGT changes ###

 Possible regressions 

  * igt@kms_cursor_legacy@basic-flip-before-cursor-legacy:
- bat-arls-1: [PASS][1] -> [INCOMPLETE][2]
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-arls-1/igt@kms_cursor_leg...@basic-flip-before-cursor-legacy.html
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-arls-1/igt@kms_cursor_leg...@basic-flip-before-cursor-legacy.html

  
Known issues


  Here are the changes found in Patchwork_133047v3 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@debugfs_test@basic-hwmon:
- bat-jsl-3:  NOTRUN -> [SKIP][3] ([i915#9318])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-jsl-3/igt@debugfs_t...@basic-hwmon.html

  * igt@gem_huc_copy@huc-copy:
- fi-kbl-7567u:   NOTRUN -> [SKIP][4] ([i915#2190])
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/fi-kbl-7567u/igt@gem_huc_c...@huc-copy.html
- bat-jsl-3:  NOTRUN -> [SKIP][5] ([i915#2190])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-jsl-3/igt@gem_huc_c...@huc-copy.html

  * igt@gem_lmem_swapping@basic:
- bat-jsl-3:  NOTRUN -> [SKIP][6] ([i915#4613]) +3 other tests skip
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-jsl-3/igt@gem_lmem_swapp...@basic.html
- fi-kbl-7567u:   NOTRUN -> [SKIP][7] ([i915#4613]) +3 other tests skip
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/fi-kbl-7567u/igt@gem_lmem_swapp...@basic.html

  * igt@i915_selftest@live@guc_hang:
- bat-arls-3: [PASS][8] -> [DMESG-FAIL][9] ([i915#10262]) +13 other 
tests dmesg-fail
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-arls-3/igt@i915_selftest@live@guc_hang.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-arls-3/igt@i915_selftest@live@guc_hang.html

  * igt@i915_selftest@live@hugepages:
- bat-arls-3: [PASS][10] -> [DMESG-WARN][11] ([i915#10341])
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-arls-3/igt@i915_selftest@l...@hugepages.html
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-arls-3/igt@i915_selftest@l...@hugepages.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- bat-jsl-3:  NOTRUN -> [SKIP][12] ([i915#4103]) +1 other test skip
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-jsl-3/igt@kms_cursor_leg...@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_dsc@dsc-basic:
- bat-jsl-3:  NOTRUN -> [SKIP][13] ([i915#3555] / [i915#9886])
   [13]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-jsl-3/igt@kms_...@dsc-basic.html

  * igt@kms_force_connector_basic@force-load-detect:
- fi-kbl-7567u:   NOTRUN -> [SKIP][14] +11 other tests skip
   [14]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/fi-kbl-7567u/igt@kms_force_connector_ba...@force-load-detect.html
- bat-jsl-3:  NOTRUN -> [SKIP][15]
   [15]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-jsl-3/igt@kms_force_connector_ba...@force-load-detect.html

  * igt@kms_setmode@basic-clone-single-crtc:
- bat-jsl-3:  NOTRUN -> [SKIP][16] ([i915#3555])
   [16]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-jsl-3/igt@kms_setm...@basic-clone-single-crtc.html

  
 Possible fixes 

  * igt@i915_pm_rpm@module-reload:
- {bat-mtlp-9}:   [WARN][17] ([i915#10436]) -> [PASS][18]
   [17]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14784/bat-mtlp-9/igt@i915_pm_...@module-reload.html
   [18]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_133047v3/bat-mtlp-9/igt@i915_pm_...@module-reload.html

  * igt@i915_selftest@live@workarounds:
- bat-dg2-9:  [DMESG-FAIL][19] ([i915#9500]) -> [PA

Re: [PATCH 04/13] drm/i915: Simplify PIPESRC_ERLY_TPT definition

2024-05-20 Thread Hogander, Jouni
On Mon, 2024-05-20 at 12:37 +0300, Jani Nikula wrote:
> On Mon, 20 May 2024, Jani Nikula  wrote:
> > On Thu, 16 May 2024, Ville Syrjala 
> > wrote:
> > > From: Ville Syrjälä 
> > > 
> > > PIPESRC_ERLY_TPT is a pipe register, and it lives in the 0x7
> > > range.
> > > so using _MMIO_TRANS2() for it is not really correct. Also since
> > > this
> > > is a pipe register, and not present on CHV, the registers will be
> > > equally spaced out, so we can use the simpler _MMIO_PIPE()
> > > instead
> > > of _MMIO_PIPE2().
> > > 
> > > Signed-off-by: Ville Syrjälä 
> > 
> > Reviewed-by: Jani Nikula 
> 
> Side note, while reviewing this I found this monstrosity:
> 
> static bool intel_psr2_sel_fetch_config_valid(struct intel_dp
> *intel_dp,
>   struct intel_crtc_state
> *crtc_state)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> 
> if (!dev_priv->display.params.enable_psr2_sel_fetch &&
>     intel_dp->psr.debug != I915_PSR_DEBUG_ENABLE_SEL_FETCH) {
> drm_dbg_kms(&dev_priv->drm,
>     "PSR2 sel fetch not enabled, disabled by
> parameter\n");
> return false;
> }
> 
> if (crtc_state->uapi.async_flip) {
> drm_dbg_kms(&dev_priv->drm,
>     "PSR2 sel fetch not enabled, async flip
> enabled\n");
> return false;
> }
> 
> return crtc_state->enable_psr2_sel_fetch = true;
> 
> }
> 
> Judging by name, a predicate function to check if config is valid,
> actually modifies the config in what looks like a typoed return
> statement. Ugh.

Yes, I have inhaled this already enough that it begun to look like
normal.

BR,

Jouni Högander


> 
> BR,
> Jani.
> 
> 



Re: [PATCH 05/13] drm/i915: Rename selective fetch plane registers

2024-05-20 Thread Jani Nikula
On Thu, 16 May 2024, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Rename the selective fetch plane registers to match the spec.
>
> Signed-off-by: Ville Syrjälä 

Reviewed-by: Jani Nikula 

> ---
>  drivers/gpu/drm/i915/display/intel_psr_regs.h  | 10 +-
>  drivers/gpu/drm/i915/display/skl_universal_plane.c | 12 ++--
>  2 files changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_psr_regs.h 
> b/drivers/gpu/drm/i915/display/intel_psr_regs.h
> index 47e3a2e2977c..f0bd0a726d7a 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_psr_regs.h
> @@ -276,23 +276,23 @@
>   _SEL_FETCH_PLANE_BASE_A(plane))
>  
>  #define _SEL_FETCH_PLANE_CTL_1_A 0x70890
> -#define PLANE_SEL_FETCH_CTL(pipe, plane) _MMIO(_SEL_FETCH_PLANE_BASE(pipe, 
> plane) + \
> +#define SEL_FETCH_PLANE_CTL(pipe, plane) _MMIO(_SEL_FETCH_PLANE_BASE(pipe, 
> plane) + \
>  _SEL_FETCH_PLANE_CTL_1_A - \
>  _SEL_FETCH_PLANE_BASE_1_A)
> -#define PLANE_SEL_FETCH_CTL_ENABLE   REG_BIT(31)
> +#define SEL_FETCH_PLANE_CTL_ENABLE   REG_BIT(31)
>  
>  #define _SEL_FETCH_PLANE_POS_1_A 0x70894
> -#define PLANE_SEL_FETCH_POS(pipe, plane) _MMIO(_SEL_FETCH_PLANE_BASE(pipe, 
> plane) + \
> +#define SEL_FETCH_PLANE_POS(pipe, plane) _MMIO(_SEL_FETCH_PLANE_BASE(pipe, 
> plane) + \
>  _SEL_FETCH_PLANE_POS_1_A - \
>  _SEL_FETCH_PLANE_BASE_1_A)
>  
>  #define _SEL_FETCH_PLANE_SIZE_1_A0x70898
> -#define PLANE_SEL_FETCH_SIZE(pipe, plane) _MMIO(_SEL_FETCH_PLANE_BASE(pipe, 
> plane) + \
> +#define SEL_FETCH_PLANE_SIZE(pipe, plane) _MMIO(_SEL_FETCH_PLANE_BASE(pipe, 
> plane) + \
>   _SEL_FETCH_PLANE_SIZE_1_A - \
>   _SEL_FETCH_PLANE_BASE_1_A)
>  
>  #define _SEL_FETCH_PLANE_OFFSET_1_A  0x7089C
> -#define PLANE_SEL_FETCH_OFFSET(pipe, plane) 
> _MMIO(_SEL_FETCH_PLANE_BASE(pipe, plane) + \
> +#define SEL_FETCH_PLANE_OFFSET(pipe, plane) 
> _MMIO(_SEL_FETCH_PLANE_BASE(pipe, plane) + \
> _SEL_FETCH_PLANE_OFFSET_1_A - 
> \
> _SEL_FETCH_PLANE_BASE_1_A)
>  
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c 
> b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> index d0bfee2ca643..6601baf18ae4 100644
> --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> @@ -705,7 +705,7 @@ static void icl_plane_disable_sel_fetch_arm(struct 
> intel_plane *plane,
>   if (!crtc_state->enable_psr2_sel_fetch)
>   return;
>  
> - intel_de_write_fw(i915, PLANE_SEL_FETCH_CTL(pipe, plane->id), 0);
> + intel_de_write_fw(i915, SEL_FETCH_PLANE_CTL(pipe, plane->id), 0);
>  }
>  
>  static void
> @@ -1304,7 +1304,7 @@ static void icl_plane_update_sel_fetch_noarm(struct 
> intel_plane *plane,
>  
>   val = (clip->y1 + plane_state->uapi.dst.y1) << 16;
>   val |= plane_state->uapi.dst.x1;
> - intel_de_write_fw(i915, PLANE_SEL_FETCH_POS(pipe, plane->id), val);
> + intel_de_write_fw(i915, SEL_FETCH_PLANE_POS(pipe, plane->id), val);
>  
>   x = plane_state->view.color_plane[color_plane].x;
>  
> @@ -1319,13 +1319,13 @@ static void icl_plane_update_sel_fetch_noarm(struct 
> intel_plane *plane,
>  
>   val = y << 16 | x;
>  
> - intel_de_write_fw(i915, PLANE_SEL_FETCH_OFFSET(pipe, plane->id),
> + intel_de_write_fw(i915, SEL_FETCH_PLANE_OFFSET(pipe, plane->id),
> val);
>  
>   /* Sizes are 0 based */
>   val = (drm_rect_height(clip) - 1) << 16;
>   val |= (drm_rect_width(&plane_state->uapi.src) >> 16) - 1;
> - intel_de_write_fw(i915, PLANE_SEL_FETCH_SIZE(pipe, plane->id), val);
> + intel_de_write_fw(i915, SEL_FETCH_PLANE_SIZE(pipe, plane->id), val);
>  }
>  
>  static void
> @@ -1414,8 +1414,8 @@ static void icl_plane_update_sel_fetch_arm(struct 
> intel_plane *plane,
>   return;
>  
>   if (drm_rect_height(&plane_state->psr2_sel_fetch_area) > 0)
> - intel_de_write_fw(i915, PLANE_SEL_FETCH_CTL(pipe, plane->id),
> -   PLANE_SEL_FETCH_CTL_ENABLE);
> + intel_de_write_fw(i915, SEL_FETCH_PLANE_CTL(pipe, plane->id),
> +   SEL_FETCH_PLANE_CTL_ENABLE);
>   else
>   icl_plane_disable_sel_fetch_arm(plane, crtc_state);
>  }

-- 
Jani Nikula, Intel


Re: [PATCH 04/13] drm/i915: Simplify PIPESRC_ERLY_TPT definition

2024-05-20 Thread Jani Nikula
On Mon, 20 May 2024, Jani Nikula  wrote:
> On Thu, 16 May 2024, Ville Syrjala  wrote:
>> From: Ville Syrjälä 
>>
>> PIPESRC_ERLY_TPT is a pipe register, and it lives in the 0x7 range.
>> so using _MMIO_TRANS2() for it is not really correct. Also since this
>> is a pipe register, and not present on CHV, the registers will be
>> equally spaced out, so we can use the simpler _MMIO_PIPE() instead
>> of _MMIO_PIPE2().
>>
>> Signed-off-by: Ville Syrjälä 
>
> Reviewed-by: Jani Nikula 

Side note, while reviewing this I found this monstrosity:

static bool intel_psr2_sel_fetch_config_valid(struct intel_dp *intel_dp,
  struct intel_crtc_state 
*crtc_state)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);

if (!dev_priv->display.params.enable_psr2_sel_fetch &&
intel_dp->psr.debug != I915_PSR_DEBUG_ENABLE_SEL_FETCH) {
drm_dbg_kms(&dev_priv->drm,
"PSR2 sel fetch not enabled, disabled by 
parameter\n");
return false;
}

if (crtc_state->uapi.async_flip) {
drm_dbg_kms(&dev_priv->drm,
"PSR2 sel fetch not enabled, async flip enabled\n");
return false;
}

return crtc_state->enable_psr2_sel_fetch = true;

}

Judging by name, a predicate function to check if config is valid,
actually modifies the config in what looks like a typoed return
statement. Ugh.

BR,
Jani.


-- 
Jani Nikula, Intel


  1   2   >