All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
@ 2019-04-24 15:26 Imre Deak
  2019-04-24 15:26 ` [PATCH 2/2] drm/i915/icl: Add missing combo PHY lane power setup Imre Deak
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Imre Deak @ 2019-04-24 15:26 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

Factor out the combo PHY lane power configuration code to a separate
helper; it will be also needed by the next patch adding the same
configuration for DDI ports.

While at it also add support to handle lane reversal which wasn't
needed for DSI, but will be needed by DDI ports.

Also, remove the macros for the power down flags, they aren't
needed any more since we now calculate the power down mask. Many of
those macro values (mostly the ones for the currently unused reversed
lane configs) were actually undefined in the spec and didn't make much
sense either.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Madhav Chauhan <madhav.chauhan@intel.com>
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h        |  3 +++
 drivers/gpu/drm/i915/i915_reg.h        |  9 ---------
 drivers/gpu/drm/i915/icl_dsi.c         | 26 +++-----------------------
 drivers/gpu/drm/i915/intel_combo_phy.c | 31 +++++++++++++++++++++++++++++++
 4 files changed, 37 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index dc74d33c20aa..1207ef080aae 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3515,6 +3515,9 @@ void icl_combo_phys_init(struct drm_i915_private *dev_priv);
 void icl_combo_phys_uninit(struct drm_i915_private *dev_priv);
 void cnl_combo_phys_init(struct drm_i915_private *dev_priv);
 void cnl_combo_phys_uninit(struct drm_i915_private *dev_priv);
+void icl_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv,
+				  enum port port, int lane_count,
+				  bool lane_reversal);
 
 int intel_gpu_freq(struct drm_i915_private *dev_priv, int val);
 int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index b74824f0b5b1..29f16bc40b0a 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -1807,15 +1807,6 @@ enum i915_power_well_id {
 #define  PG_SEQ_DELAY_OVERRIDE_MASK	(3 << 25)
 #define  PG_SEQ_DELAY_OVERRIDE_SHIFT	25
 #define  PG_SEQ_DELAY_OVERRIDE_ENABLE	(1 << 24)
-#define  PWR_UP_ALL_LANES		(0x0 << 4)
-#define  PWR_DOWN_LN_3_2_1		(0xe << 4)
-#define  PWR_DOWN_LN_3_2		(0xc << 4)
-#define  PWR_DOWN_LN_3			(0x8 << 4)
-#define  PWR_DOWN_LN_2_1_0		(0x7 << 4)
-#define  PWR_DOWN_LN_1_0		(0x3 << 4)
-#define  PWR_DOWN_LN_1			(0x2 << 4)
-#define  PWR_DOWN_LN_3_1		(0xa << 4)
-#define  PWR_DOWN_LN_3_1_0		(0xb << 4)
 #define  PWR_DOWN_LN_MASK		(0xf << 4)
 #define  PWR_DOWN_LN_SHIFT		4
 
diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 9d962ea1e635..88959517b668 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -363,30 +363,10 @@ static void gen11_dsi_power_up_lanes(struct intel_encoder *encoder)
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
 	enum port port;
-	u32 tmp;
-	u32 lane_mask;
 
-	switch (intel_dsi->lane_count) {
-	case 1:
-		lane_mask = PWR_DOWN_LN_3_1_0;
-		break;
-	case 2:
-		lane_mask = PWR_DOWN_LN_3_1;
-		break;
-	case 3:
-		lane_mask = PWR_DOWN_LN_3;
-		break;
-	case 4:
-	default:
-		lane_mask = PWR_UP_ALL_LANES;
-		break;
-	}
-
-	for_each_dsi_port(port, intel_dsi->ports) {
-		tmp = I915_READ(ICL_PORT_CL_DW10(port));
-		tmp &= ~PWR_DOWN_LN_MASK;
-		I915_WRITE(ICL_PORT_CL_DW10(port), tmp | lane_mask);
-	}
+	for_each_dsi_port(port, intel_dsi->ports)
+		icl_combo_phy_power_up_lanes(dev_priv, port,
+					     intel_dsi->lane_count, false);
 }
 
 static void gen11_dsi_config_phy_lanes_sequence(struct intel_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_combo_phy.c b/drivers/gpu/drm/i915/intel_combo_phy.c
index 2bf4359d7e41..e3ed584eca47 100644
--- a/drivers/gpu/drm/i915/intel_combo_phy.c
+++ b/drivers/gpu/drm/i915/intel_combo_phy.c
@@ -203,6 +203,37 @@ static bool icl_combo_phy_verify_state(struct drm_i915_private *dev_priv,
 	return ret;
 }
 
+static uint8_t reverse_nibble_bits(uint8_t val)
+{
+#define MOVBIT(v, from, to) (!!((v) & BIT(from)) << (to))
+#define SWPBIT(v, b1, b2) (MOVBIT((v), (b1), (b2)) | MOVBIT((v), (b2), (b1)))
+
+	return SWPBIT(val, 0, 3) | SWPBIT(val, 1, 2);
+#undef SWPBIT
+#undef MOVBIT
+}
+
+void icl_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv,
+				  enum port port, int lane_count,
+				  bool lane_reversal)
+{
+	u32 pwr_down_mask;
+	u32 val;
+
+	WARN_ON((u32)lane_count > 4);
+
+	pwr_down_mask = BIT(lane_count) - 1;
+	if (lane_reversal)
+		pwr_down_mask = reverse_nibble_bits(pwr_down_mask);
+
+	pwr_down_mask = ~pwr_down_mask & 0xf;
+
+	val = I915_READ(ICL_PORT_CL_DW10(port));
+	val &= ~PWR_DOWN_LN_MASK;
+	I915_WRITE(ICL_PORT_CL_DW10(port),
+		   val | (pwr_down_mask << PWR_DOWN_LN_SHIFT));
+}
+
 void icl_combo_phys_init(struct drm_i915_private *dev_priv)
 {
 	enum port port;
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] drm/i915/icl: Add missing combo PHY lane power setup
  2019-04-24 15:26 [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Imre Deak
@ 2019-04-24 15:26 ` Imre Deak
  2019-04-24 18:18 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Patchwork
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Imre Deak @ 2019-04-24 15:26 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

This step of the BSpec combo PHY port enabling is missing, so add it
now.

Reported-by: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Madhav Chauhan <madhav.chauhan@intel.com>
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index f181c26f62fd..d8d2e58e9811 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -3111,6 +3111,15 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
 	else
 		intel_prepare_dp_ddi_buffers(encoder, crtc_state);
 
+	if (intel_port_is_combophy(dev_priv, port)) {
+		bool lane_reversal =
+			dig_port->saved_port_bits & DDI_BUF_PORT_REVERSAL;
+
+		icl_combo_phy_power_up_lanes(dev_priv, port,
+					     crtc_state->lane_count,
+					     lane_reversal);
+	}
+
 	intel_ddi_init_dp_buf_reg(encoder);
 	if (!is_mst)
 		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
  2019-04-24 15:26 [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Imre Deak
  2019-04-24 15:26 ` [PATCH 2/2] drm/i915/icl: Add missing combo PHY lane power setup Imre Deak
@ 2019-04-24 18:18 ` Patchwork
  2019-04-24 18:19 ` ✗ Fi.CI.SPARSE: " Patchwork
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2019-04-24 18:18 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
URL   : https://patchwork.freedesktop.org/series/59893/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
f4ea4c654a95 drm/i915/icl: Factor out combo PHY lane power setup helper
-:107: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'v' - possible side-effects?
#107: FILE: drivers/gpu/drm/i915/intel_combo_phy.c:209:
+#define SWPBIT(v, b1, b2) (MOVBIT((v), (b1), (b2)) | MOVBIT((v), (b2), (b1)))

-:107: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'b1' - possible side-effects?
#107: FILE: drivers/gpu/drm/i915/intel_combo_phy.c:209:
+#define SWPBIT(v, b1, b2) (MOVBIT((v), (b1), (b2)) | MOVBIT((v), (b2), (b1)))

-:107: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'b2' - possible side-effects?
#107: FILE: drivers/gpu/drm/i915/intel_combo_phy.c:209:
+#define SWPBIT(v, b1, b2) (MOVBIT((v), (b1), (b2)) | MOVBIT((v), (b2), (b1)))

total: 0 errors, 0 warnings, 3 checks, 94 lines checked
a257598d1fae drm/i915/icl: Add missing combo PHY lane power setup

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* ✗ Fi.CI.SPARSE: warning for series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
  2019-04-24 15:26 [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Imre Deak
  2019-04-24 15:26 ` [PATCH 2/2] drm/i915/icl: Add missing combo PHY lane power setup Imre Deak
  2019-04-24 18:18 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Patchwork
@ 2019-04-24 18:19 ` Patchwork
  2019-04-24 19:42 ` ✓ Fi.CI.BAT: success " Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2019-04-24 18:19 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
URL   : https://patchwork.freedesktop.org/series/59893/
State : warning

== Summary ==

$ dim sparse origin/drm-tip
Sparse version: v0.5.2
Commit: drm/i915/icl: Factor out combo PHY lane power setup helper
-drivers/gpu/drm/i915/selftests/../i915_drv.h:3605:16: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/selftests/../i915_drv.h:3608:16: warning: expression using sizeof(void)

Commit: drm/i915/icl: Add missing combo PHY lane power setup
Okay!

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
  2019-04-24 15:26 [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Imre Deak
                   ` (2 preceding siblings ...)
  2019-04-24 18:19 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2019-04-24 19:42 ` Patchwork
  2019-04-25  7:51 ` ✓ Fi.CI.IGT: " Patchwork
  2019-04-25  8:30 ` [PATCH 1/2] " Jani Nikula
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2019-04-24 19:42 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
URL   : https://patchwork.freedesktop.org/series/59893/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5991 -> Patchwork_12863
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/59893/revisions/1/mbox/

Known issues
------------

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live_evict:
    - fi-bsw-kefka:       [PASS][1] -> [DMESG-WARN][2] ([fdo#107709])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/fi-bsw-kefka/igt@i915_selftest@live_evict.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/fi-bsw-kefka/igt@i915_selftest@live_evict.html

  * igt@i915_selftest@live_hangcheck:
    - fi-skl-iommu:       [PASS][3] -> [INCOMPLETE][4] ([fdo#108602] / [fdo#108744])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/fi-skl-iommu/igt@i915_selftest@live_hangcheck.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/fi-skl-iommu/igt@i915_selftest@live_hangcheck.html

  * igt@kms_frontbuffer_tracking@basic:
    - fi-byt-clapper:     [PASS][5] -> [FAIL][6] ([fdo#103167])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/fi-byt-clapper/igt@kms_frontbuffer_tracking@basic.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/fi-byt-clapper/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
    - fi-byt-clapper:     [PASS][7] -> [FAIL][8] ([fdo#103191])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/fi-byt-clapper/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/fi-byt-clapper/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic-s3:
    - fi-kbl-7567u:       [DMESG-WARN][9] ([fdo#108566]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/fi-kbl-7567u/igt@gem_exec_suspend@basic-s3.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/fi-kbl-7567u/igt@gem_exec_suspend@basic-s3.html

  * igt@i915_selftest@live_hangcheck:
    - fi-ilk-650:         [INCOMPLETE][11] ([fdo#109723]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/fi-ilk-650/igt@i915_selftest@live_hangcheck.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/fi-ilk-650/igt@i915_selftest@live_hangcheck.html

  
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#107709]: https://bugs.freedesktop.org/show_bug.cgi?id=107709
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108602]: https://bugs.freedesktop.org/show_bug.cgi?id=108602
  [fdo#108744]: https://bugs.freedesktop.org/show_bug.cgi?id=108744
  [fdo#109723]: https://bugs.freedesktop.org/show_bug.cgi?id=109723


Participating hosts (43 -> 42)
------------------------------

  Additional (5): fi-hsw-peppy fi-snb-2520m fi-pnv-d510 fi-icl-y fi-skl-lmem 
  Missing    (6): fi-kbl-soraka fi-ilk-m540 fi-bxt-dsi fi-bsw-cyan fi-ctg-p8600 fi-bdw-samus 


Build changes
-------------

  * Linux: CI_DRM_5991 -> Patchwork_12863

  CI_DRM_5991: 828f7766ea19afaaab57772272ebca6b0002fdeb @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4963: 11e10bc575516c56978640fcc697c27f277c660a @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_12863: a257598d1faeae9f36e8f9bd8e25d3b022b2fe90 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

a257598d1fae drm/i915/icl: Add missing combo PHY lane power setup
f4ea4c654a95 drm/i915/icl: Factor out combo PHY lane power setup helper

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* ✓ Fi.CI.IGT: success for series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
  2019-04-24 15:26 [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Imre Deak
                   ` (3 preceding siblings ...)
  2019-04-24 19:42 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2019-04-25  7:51 ` Patchwork
  2019-04-25  8:30 ` [PATCH 1/2] " Jani Nikula
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2019-04-25  7:51 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
URL   : https://patchwork.freedesktop.org/series/59893/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5991_full -> Patchwork_12863_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Known issues
------------

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_pm_rpm@i2c:
    - shard-iclb:         [PASS][1] -> [FAIL][2] ([fdo#104097])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-iclb5/igt@i915_pm_rpm@i2c.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-iclb3/igt@i915_pm_rpm@i2c.html

  * igt@kms_cursor_crc@cursor-64x64-suspend:
    - shard-skl:          [PASS][3] -> [INCOMPLETE][4] ([fdo#104108] / [fdo#107773])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-skl4/igt@kms_cursor_crc@cursor-64x64-suspend.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-skl1/igt@kms_cursor_crc@cursor-64x64-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-kbl:          [PASS][5] -> [INCOMPLETE][6] ([fdo#103665])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-kbl3/igt@kms_frontbuffer_tracking@fbc-suspend.html
    - shard-apl:          [PASS][7] -> [DMESG-WARN][8] ([fdo#108566]) +5 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-apl1/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-apl3/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-pwrite:
    - shard-iclb:         [PASS][9] -> [FAIL][10] ([fdo#103167]) +4 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-pwrite.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-iclb2/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-pwrite.html

  * igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min:
    - shard-skl:          [PASS][11] -> [FAIL][12] ([fdo#108145])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-skl8/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-skl8/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min.html

  * igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
    - shard-skl:          [PASS][13] -> [FAIL][14] ([fdo#108145] / [fdo#110403])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-skl5/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-skl2/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html

  * igt@kms_plane_lowres@pipe-a-tiling-y:
    - shard-iclb:         [PASS][15] -> [FAIL][16] ([fdo#103166])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-iclb1/igt@kms_plane_lowres@pipe-a-tiling-y.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-iclb1/igt@kms_plane_lowres@pipe-a-tiling-y.html

  * igt@kms_plane_scaling@pipe-c-scaler-with-rotation:
    - shard-glk:          [PASS][17] -> [SKIP][18] ([fdo#109271] / [fdo#109278])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-glk9/igt@kms_plane_scaling@pipe-c-scaler-with-rotation.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-glk1/igt@kms_plane_scaling@pipe-c-scaler-with-rotation.html

  * igt@kms_psr@psr2_primary_mmap_cpu:
    - shard-iclb:         [PASS][19] -> [SKIP][20] ([fdo#109441]) +4 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-iclb2/igt@kms_psr@psr2_primary_mmap_cpu.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-iclb3/igt@kms_psr@psr2_primary_mmap_cpu.html

  * igt@kms_setmode@basic:
    - shard-apl:          [PASS][21] -> [FAIL][22] ([fdo#99912])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-apl1/igt@kms_setmode@basic.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-apl8/igt@kms_setmode@basic.html

  * igt@kms_sysfs_edid_timing:
    - shard-iclb:         [PASS][23] -> [FAIL][24] ([fdo#100047])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-iclb5/igt@kms_sysfs_edid_timing.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-iclb3/igt@kms_sysfs_edid_timing.html

  
#### Possible fixes ####

  * igt@gem_tiled_swapping@non-threaded:
    - shard-glk:          [FAIL][25] ([fdo#108686]) -> [PASS][26]
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-glk5/igt@gem_tiled_swapping@non-threaded.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-glk2/igt@gem_tiled_swapping@non-threaded.html

  * igt@gem_workarounds@suspend-resume:
    - shard-apl:          [DMESG-WARN][27] ([fdo#108566]) -> [PASS][28] +1 similar issue
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-apl5/igt@gem_workarounds@suspend-resume.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-apl5/igt@gem_workarounds@suspend-resume.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt:
    - shard-iclb:         [FAIL][29] ([fdo#103167]) -> [PASS][30] +5 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-iclb1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-iclb1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_plane_scaling@pipe-a-scaler-with-pixel-format:
    - shard-glk:          [SKIP][31] ([fdo#109271] / [fdo#109278]) -> [PASS][32]
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-glk3/igt@kms_plane_scaling@pipe-a-scaler-with-pixel-format.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-glk9/igt@kms_plane_scaling@pipe-a-scaler-with-pixel-format.html

  * igt@kms_psr@psr2_sprite_mmap_gtt:
    - shard-iclb:         [SKIP][33] ([fdo#109441]) -> [PASS][34] +3 similar issues
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_5991/shard-iclb3/igt@kms_psr@psr2_sprite_mmap_gtt.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/shard-iclb2/igt@kms_psr@psr2_sprite_mmap_gtt.html

  
  [fdo#100047]: https://bugs.freedesktop.org/show_bug.cgi?id=100047
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#104097]: https://bugs.freedesktop.org/show_bug.cgi?id=104097
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#107773]: https://bugs.freedesktop.org/show_bug.cgi?id=107773
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108686]: https://bugs.freedesktop.org/show_bug.cgi?id=108686
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#110403]: https://bugs.freedesktop.org/show_bug.cgi?id=110403
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts


Build changes
-------------

  * Linux: CI_DRM_5991 -> Patchwork_12863

  CI_DRM_5991: 828f7766ea19afaaab57772272ebca6b0002fdeb @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4963: 11e10bc575516c56978640fcc697c27f277c660a @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_12863: a257598d1faeae9f36e8f9bd8e25d3b022b2fe90 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12863/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
  2019-04-24 15:26 [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Imre Deak
                   ` (4 preceding siblings ...)
  2019-04-25  7:51 ` ✓ Fi.CI.IGT: " Patchwork
@ 2019-04-25  8:30 ` Jani Nikula
  2019-04-25  9:17   ` Imre Deak
  5 siblings, 1 reply; 8+ messages in thread
From: Jani Nikula @ 2019-04-25  8:30 UTC (permalink / raw)
  To: Imre Deak, intel-gfx

On Wed, 24 Apr 2019, Imre Deak <imre.deak@intel.com> wrote:
> Factor out the combo PHY lane power configuration code to a separate
> helper; it will be also needed by the next patch adding the same
> configuration for DDI ports.
>
> While at it also add support to handle lane reversal which wasn't
> needed for DSI, but will be needed by DDI ports.
>
> Also, remove the macros for the power down flags, they aren't
> needed any more since we now calculate the power down mask. Many of
> those macro values (mostly the ones for the currently unused reversed
> lane configs) were actually undefined in the spec and didn't make much
> sense either.

Only PWR_DOWN_LN_1 is undefined in the spec.

>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h        |  3 +++
>  drivers/gpu/drm/i915/i915_reg.h        |  9 ---------
>  drivers/gpu/drm/i915/icl_dsi.c         | 26 +++-----------------------
>  drivers/gpu/drm/i915/intel_combo_phy.c | 31 +++++++++++++++++++++++++++++++
>  4 files changed, 37 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index dc74d33c20aa..1207ef080aae 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -3515,6 +3515,9 @@ void icl_combo_phys_init(struct drm_i915_private *dev_priv);
>  void icl_combo_phys_uninit(struct drm_i915_private *dev_priv);
>  void cnl_combo_phys_init(struct drm_i915_private *dev_priv);
>  void cnl_combo_phys_uninit(struct drm_i915_private *dev_priv);
> +void icl_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv,
> +				  enum port port, int lane_count,
> +				  bool lane_reversal);
>  
>  int intel_gpu_freq(struct drm_i915_private *dev_priv, int val);
>  int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index b74824f0b5b1..29f16bc40b0a 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -1807,15 +1807,6 @@ enum i915_power_well_id {
>  #define  PG_SEQ_DELAY_OVERRIDE_MASK	(3 << 25)
>  #define  PG_SEQ_DELAY_OVERRIDE_SHIFT	25
>  #define  PG_SEQ_DELAY_OVERRIDE_ENABLE	(1 << 24)
> -#define  PWR_UP_ALL_LANES		(0x0 << 4)
> -#define  PWR_DOWN_LN_3_2_1		(0xe << 4)
> -#define  PWR_DOWN_LN_3_2		(0xc << 4)
> -#define  PWR_DOWN_LN_3			(0x8 << 4)
> -#define  PWR_DOWN_LN_2_1_0		(0x7 << 4)
> -#define  PWR_DOWN_LN_1_0		(0x3 << 4)
> -#define  PWR_DOWN_LN_1			(0x2 << 4)
> -#define  PWR_DOWN_LN_3_1		(0xa << 4)
> -#define  PWR_DOWN_LN_3_1_0		(0xb << 4)
>  #define  PWR_DOWN_LN_MASK		(0xf << 4)
>  #define  PWR_DOWN_LN_SHIFT		4
>  
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 9d962ea1e635..88959517b668 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -363,30 +363,10 @@ static void gen11_dsi_power_up_lanes(struct intel_encoder *encoder)
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>  	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
>  	enum port port;
> -	u32 tmp;
> -	u32 lane_mask;
>  
> -	switch (intel_dsi->lane_count) {
> -	case 1:
> -		lane_mask = PWR_DOWN_LN_3_1_0;
> -		break;
> -	case 2:
> -		lane_mask = PWR_DOWN_LN_3_1;
> -		break;
> -	case 3:
> -		lane_mask = PWR_DOWN_LN_3;
> -		break;
> -	case 4:
> -	default:
> -		lane_mask = PWR_UP_ALL_LANES;
> -		break;
> -	}
> -
> -	for_each_dsi_port(port, intel_dsi->ports) {
> -		tmp = I915_READ(ICL_PORT_CL_DW10(port));
> -		tmp &= ~PWR_DOWN_LN_MASK;
> -		I915_WRITE(ICL_PORT_CL_DW10(port), tmp | lane_mask);
> -	}

I look at that and it takes me maybe 10 seconds to figure out what's
going on, assuming the PWR_DOWN_LN_* macros are right.

> +	for_each_dsi_port(port, intel_dsi->ports)
> +		icl_combo_phy_power_up_lanes(dev_priv, port,
> +					     intel_dsi->lane_count, false);
>  }
>  
>  static void gen11_dsi_config_phy_lanes_sequence(struct intel_encoder *encoder)
> diff --git a/drivers/gpu/drm/i915/intel_combo_phy.c b/drivers/gpu/drm/i915/intel_combo_phy.c
> index 2bf4359d7e41..e3ed584eca47 100644
> --- a/drivers/gpu/drm/i915/intel_combo_phy.c
> +++ b/drivers/gpu/drm/i915/intel_combo_phy.c
> @@ -203,6 +203,37 @@ static bool icl_combo_phy_verify_state(struct drm_i915_private *dev_priv,
>  	return ret;
>  }
>  
> +static uint8_t reverse_nibble_bits(uint8_t val)
> +{
> +#define MOVBIT(v, from, to) (!!((v) & BIT(from)) << (to))
> +#define SWPBIT(v, b1, b2) (MOVBIT((v), (b1), (b2)) | MOVBIT((v), (b2), (b1)))
> +
> +	return SWPBIT(val, 0, 3) | SWPBIT(val, 1, 2);
> +#undef SWPBIT
> +#undef MOVBIT
> +}
> +
> +void icl_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv,
> +				  enum port port, int lane_count,
> +				  bool lane_reversal)
> +{
> +	u32 pwr_down_mask;
> +	u32 val;
> +
> +	WARN_ON((u32)lane_count > 4);
> +
> +	pwr_down_mask = BIT(lane_count) - 1;
> +	if (lane_reversal)
> +		pwr_down_mask = reverse_nibble_bits(pwr_down_mask);
> +
> +	pwr_down_mask = ~pwr_down_mask & 0xf;
> +
> +	val = I915_READ(ICL_PORT_CL_DW10(port));
> +	val &= ~PWR_DOWN_LN_MASK;
> +	I915_WRITE(ICL_PORT_CL_DW10(port),
> +		   val | (pwr_down_mask << PWR_DOWN_LN_SHIFT));
> +}

Maybe I'm slow today, but it took me 15-30 minutes to figure out that
this screws up the 1 and 2 lane DSI values.

The unshifted value changes:

DSI x1: 1011b -> 1110b
DSI x2: 1010b -> 1100b

DSI uses different values from DDI.

There *is* value in keeping it simple and mechanic instead of trying to
force it into a formula.


BR,
Jani.


> +
>  void icl_combo_phys_init(struct drm_i915_private *dev_priv)
>  {
>  	enum port port;

-- 
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper
  2019-04-25  8:30 ` [PATCH 1/2] " Jani Nikula
@ 2019-04-25  9:17   ` Imre Deak
  0 siblings, 0 replies; 8+ messages in thread
From: Imre Deak @ 2019-04-25  9:17 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

On Thu, Apr 25, 2019 at 11:30:36AM +0300, Jani Nikula wrote:
> On Wed, 24 Apr 2019, Imre Deak <imre.deak@intel.com> wrote:
> > Factor out the combo PHY lane power configuration code to a separate
> > helper; it will be also needed by the next patch adding the same
> > configuration for DDI ports.
> >
> > While at it also add support to handle lane reversal which wasn't
> > needed for DSI, but will be needed by DDI ports.
> >
> > Also, remove the macros for the power down flags, they aren't
> > needed any more since we now calculate the power down mask. Many of
> > those macro values (mostly the ones for the currently unused reversed
> > lane configs) were actually undefined in the spec and didn't make much
> > sense either.
> 
> Only PWR_DOWN_LN_1 is undefined in the spec.

Arg, yes I missed the DDI/DSI difference. Not sure how since it's quite
close together in the spec and the existing 2 and 3 lane DSI cases in the
code should've made it clear that there is a difference.

> 
> >
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Cc: Madhav Chauhan <madhav.chauhan@intel.com>
> > Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_drv.h        |  3 +++
> >  drivers/gpu/drm/i915/i915_reg.h        |  9 ---------
> >  drivers/gpu/drm/i915/icl_dsi.c         | 26 +++-----------------------
> >  drivers/gpu/drm/i915/intel_combo_phy.c | 31 +++++++++++++++++++++++++++++++
> >  4 files changed, 37 insertions(+), 32 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index dc74d33c20aa..1207ef080aae 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -3515,6 +3515,9 @@ void icl_combo_phys_init(struct drm_i915_private *dev_priv);
> >  void icl_combo_phys_uninit(struct drm_i915_private *dev_priv);
> >  void cnl_combo_phys_init(struct drm_i915_private *dev_priv);
> >  void cnl_combo_phys_uninit(struct drm_i915_private *dev_priv);
> > +void icl_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv,
> > +				  enum port port, int lane_count,
> > +				  bool lane_reversal);
> >  
> >  int intel_gpu_freq(struct drm_i915_private *dev_priv, int val);
> >  int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
> > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> > index b74824f0b5b1..29f16bc40b0a 100644
> > --- a/drivers/gpu/drm/i915/i915_reg.h
> > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > @@ -1807,15 +1807,6 @@ enum i915_power_well_id {
> >  #define  PG_SEQ_DELAY_OVERRIDE_MASK	(3 << 25)
> >  #define  PG_SEQ_DELAY_OVERRIDE_SHIFT	25
> >  #define  PG_SEQ_DELAY_OVERRIDE_ENABLE	(1 << 24)
> > -#define  PWR_UP_ALL_LANES		(0x0 << 4)
> > -#define  PWR_DOWN_LN_3_2_1		(0xe << 4)
> > -#define  PWR_DOWN_LN_3_2		(0xc << 4)
> > -#define  PWR_DOWN_LN_3			(0x8 << 4)
> > -#define  PWR_DOWN_LN_2_1_0		(0x7 << 4)
> > -#define  PWR_DOWN_LN_1_0		(0x3 << 4)
> > -#define  PWR_DOWN_LN_1			(0x2 << 4)
> > -#define  PWR_DOWN_LN_3_1		(0xa << 4)
> > -#define  PWR_DOWN_LN_3_1_0		(0xb << 4)
> >  #define  PWR_DOWN_LN_MASK		(0xf << 4)
> >  #define  PWR_DOWN_LN_SHIFT		4
> >  
> > diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> > index 9d962ea1e635..88959517b668 100644
> > --- a/drivers/gpu/drm/i915/icl_dsi.c
> > +++ b/drivers/gpu/drm/i915/icl_dsi.c
> > @@ -363,30 +363,10 @@ static void gen11_dsi_power_up_lanes(struct intel_encoder *encoder)
> >  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> >  	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> >  	enum port port;
> > -	u32 tmp;
> > -	u32 lane_mask;
> >  
> > -	switch (intel_dsi->lane_count) {
> > -	case 1:
> > -		lane_mask = PWR_DOWN_LN_3_1_0;
> > -		break;
> > -	case 2:
> > -		lane_mask = PWR_DOWN_LN_3_1;
> > -		break;
> > -	case 3:
> > -		lane_mask = PWR_DOWN_LN_3;
> > -		break;
> > -	case 4:
> > -	default:
> > -		lane_mask = PWR_UP_ALL_LANES;
> > -		break;
> > -	}
> > -
> > -	for_each_dsi_port(port, intel_dsi->ports) {
> > -		tmp = I915_READ(ICL_PORT_CL_DW10(port));
> > -		tmp &= ~PWR_DOWN_LN_MASK;
> > -		I915_WRITE(ICL_PORT_CL_DW10(port), tmp | lane_mask);
> > -	}
> 
> I look at that and it takes me maybe 10 seconds to figure out what's
> going on, assuming the PWR_DOWN_LN_* macros are right.
> 
> > +	for_each_dsi_port(port, intel_dsi->ports)
> > +		icl_combo_phy_power_up_lanes(dev_priv, port,
> > +					     intel_dsi->lane_count, false);
> >  }
> >  
> >  static void gen11_dsi_config_phy_lanes_sequence(struct intel_encoder *encoder)
> > diff --git a/drivers/gpu/drm/i915/intel_combo_phy.c b/drivers/gpu/drm/i915/intel_combo_phy.c
> > index 2bf4359d7e41..e3ed584eca47 100644
> > --- a/drivers/gpu/drm/i915/intel_combo_phy.c
> > +++ b/drivers/gpu/drm/i915/intel_combo_phy.c
> > @@ -203,6 +203,37 @@ static bool icl_combo_phy_verify_state(struct drm_i915_private *dev_priv,
> >  	return ret;
> >  }
> >  
> > +static uint8_t reverse_nibble_bits(uint8_t val)
> > +{
> > +#define MOVBIT(v, from, to) (!!((v) & BIT(from)) << (to))
> > +#define SWPBIT(v, b1, b2) (MOVBIT((v), (b1), (b2)) | MOVBIT((v), (b2), (b1)))
> > +
> > +	return SWPBIT(val, 0, 3) | SWPBIT(val, 1, 2);
> > +#undef SWPBIT
> > +#undef MOVBIT
> > +}
> > +
> > +void icl_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv,
> > +				  enum port port, int lane_count,
> > +				  bool lane_reversal)
> > +{
> > +	u32 pwr_down_mask;
> > +	u32 val;
> > +
> > +	WARN_ON((u32)lane_count > 4);
> > +
> > +	pwr_down_mask = BIT(lane_count) - 1;
> > +	if (lane_reversal)
> > +		pwr_down_mask = reverse_nibble_bits(pwr_down_mask);
> > +
> > +	pwr_down_mask = ~pwr_down_mask & 0xf;
> > +
> > +	val = I915_READ(ICL_PORT_CL_DW10(port));
> > +	val &= ~PWR_DOWN_LN_MASK;
> > +	I915_WRITE(ICL_PORT_CL_DW10(port),
> > +		   val | (pwr_down_mask << PWR_DOWN_LN_SHIFT));
> > +}
> 
> Maybe I'm slow today, but it took me 15-30 minutes to figure out that
> this screws up the 1 and 2 lane DSI values.
> 
> The unshifted value changes:
> 
> DSI x1: 1011b -> 1110b
> DSI x2: 1010b -> 1100b
> 
> DSI uses different values from DDI.

Yep, sorry for that.

> There *is* value in keeping it simple and mechanic instead of trying to
> force it into a formula.

Yes, agreed, keeping the current macros and selecting the correct one
based on dsi/ddi seems to be clearer.

> 
> 
> BR,
> Jani.
> 
> 
> > +
> >  void icl_combo_phys_init(struct drm_i915_private *dev_priv)
> >  {
> >  	enum port port;
> 
> -- 
> Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-04-25  9:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-24 15:26 [PATCH 1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Imre Deak
2019-04-24 15:26 ` [PATCH 2/2] drm/i915/icl: Add missing combo PHY lane power setup Imre Deak
2019-04-24 18:18 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/icl: Factor out combo PHY lane power setup helper Patchwork
2019-04-24 18:19 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-04-24 19:42 ` ✓ Fi.CI.BAT: success " Patchwork
2019-04-25  7:51 ` ✓ Fi.CI.IGT: " Patchwork
2019-04-25  8:30 ` [PATCH 1/2] " Jani Nikula
2019-04-25  9:17   ` Imre Deak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.