Re: [Intel-gfx] [PATCH 5/6] drm/i915/tc/icl: Implement the TC cold exit sequence

2020-03-20 Thread Souza, Jose
On Fri, 2020-03-20 at 16:11 +0300, Dan Carpenter wrote:
> Hi "José,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> url:
> https://github.com/0day-ci/linux/commits/Jos-Roberto-de-Souza/drm-i915-tc-tgl-Implement-TCCOLD-sequences/20200319-080253
> base:   git://anongit.freedesktop.org/drm-intel for-linux-next
> 
> If you fix the issue, kindly add following tag
> Reported-by: kbuild test robot 
> Reported-by: Dan Carpenter 
> 
> smatch warnings:
> drivers/gpu/drm/i915/display/intel_tc.c:554 icl_tc_cold_request()
> error: uninitialized symbol 'ret'.
> 
> # 
> https://github.com/0day-ci/linux/commit/29f27e6df6ad82b09a3c9ddaf5f51b2fc1647178
> git remote add linux-review https://github.com/0day-ci/linux
> git remote update linux-review
> git checkout 29f27e6df6ad82b09a3c9ddaf5f51b2fc1647178
> vim +/ret +554 drivers/gpu/drm/i915/display/intel_tc.c
> 
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  528  static inline
> int icl_tc_cold_request(struct intel_digital_port *dig_port,
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  529  
> bool block)
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  530  {
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  531  struct
> drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  532  enum
> intel_display_power_domain aux_domain;
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  533  int
> ret;
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  534  
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  535  aux_dom
> ain = intel_aux_ch_to_power_domain(dig_port->aux_ch);
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  536  
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  537  if
> (block) {
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  538  
> dig_port->tc_cold_wakeref =
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  539  
>   intel_display_power_get_without_ack(i915, aux_domain);
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  540  
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  541  
> do {
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  542  
>   ret = sandybridge_pcode_write_timeout(i915,
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  543  
> ICL_PCODE_EXIT_TCCOLD,
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  544  
> 0, 250, 1);
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  545  
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  546  
> } while (ret == -EAGAIN);
> 
> ret is only initialized on this path

Thanks

> 
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  547  } else
> if (dig_port->tc_mode == TC_PORT_LEGACY) {
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  548  
> drm_WARN_ON(>drm, !dig_port->tc_lock_wakeref);
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  549  
> intel_display_power_put(i915, aux_domain,
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  550  
>   dig_port->tc_cold_wakeref);
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  551  
> dig_port->tc_cold_wakeref = 0;
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  552  }
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  553  
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18 @554  return
> ret;
> 29f27e6df6ad82 José Roberto de Souza 2020-03-18  555  }
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 5/6] drm/i915/tc/icl: Implement the TC cold exit sequence

2020-03-20 Thread Dan Carpenter
Hi "José,

Thank you for the patch! Perhaps something to improve:

url:
https://github.com/0day-ci/linux/commits/Jos-Roberto-de-Souza/drm-i915-tc-tgl-Implement-TCCOLD-sequences/20200319-080253
base:   git://anongit.freedesktop.org/drm-intel for-linux-next

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot 
Reported-by: Dan Carpenter 

smatch warnings:
drivers/gpu/drm/i915/display/intel_tc.c:554 icl_tc_cold_request() error: 
uninitialized symbol 'ret'.

# 
https://github.com/0day-ci/linux/commit/29f27e6df6ad82b09a3c9ddaf5f51b2fc1647178
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 29f27e6df6ad82b09a3c9ddaf5f51b2fc1647178
vim +/ret +554 drivers/gpu/drm/i915/display/intel_tc.c

29f27e6df6ad82 José Roberto de Souza 2020-03-18  528  static inline int 
icl_tc_cold_request(struct intel_digital_port *dig_port,
29f27e6df6ad82 José Roberto de Souza 2020-03-18  529
  bool block)
29f27e6df6ad82 José Roberto de Souza 2020-03-18  530  {
29f27e6df6ad82 José Roberto de Souza 2020-03-18  531struct drm_i915_private 
*i915 = to_i915(dig_port->base.base.dev);
29f27e6df6ad82 José Roberto de Souza 2020-03-18  532enum 
intel_display_power_domain aux_domain;
29f27e6df6ad82 José Roberto de Souza 2020-03-18  533int ret;
29f27e6df6ad82 José Roberto de Souza 2020-03-18  534  
29f27e6df6ad82 José Roberto de Souza 2020-03-18  535aux_domain = 
intel_aux_ch_to_power_domain(dig_port->aux_ch);
29f27e6df6ad82 José Roberto de Souza 2020-03-18  536  
29f27e6df6ad82 José Roberto de Souza 2020-03-18  537if (block) {
29f27e6df6ad82 José Roberto de Souza 2020-03-18  538
dig_port->tc_cold_wakeref =
29f27e6df6ad82 José Roberto de Souza 2020-03-18  539
intel_display_power_get_without_ack(i915, aux_domain);
29f27e6df6ad82 José Roberto de Souza 2020-03-18  540  
29f27e6df6ad82 José Roberto de Souza 2020-03-18  541do {
29f27e6df6ad82 José Roberto de Souza 2020-03-18  542ret = 
sandybridge_pcode_write_timeout(i915,
29f27e6df6ad82 José Roberto de Souza 2020-03-18  543
  ICL_PCODE_EXIT_TCCOLD,
29f27e6df6ad82 José Roberto de Souza 2020-03-18  544
  0, 250, 1);
29f27e6df6ad82 José Roberto de Souza 2020-03-18  545  
29f27e6df6ad82 José Roberto de Souza 2020-03-18  546} while (ret == 
-EAGAIN);

ret is only initialized on this path

29f27e6df6ad82 José Roberto de Souza 2020-03-18  547} else if 
(dig_port->tc_mode == TC_PORT_LEGACY) {
29f27e6df6ad82 José Roberto de Souza 2020-03-18  548
drm_WARN_ON(>drm, !dig_port->tc_lock_wakeref);
29f27e6df6ad82 José Roberto de Souza 2020-03-18  549
intel_display_power_put(i915, aux_domain,
29f27e6df6ad82 José Roberto de Souza 2020-03-18  550
dig_port->tc_cold_wakeref);
29f27e6df6ad82 José Roberto de Souza 2020-03-18  551
dig_port->tc_cold_wakeref = 0;
29f27e6df6ad82 José Roberto de Souza 2020-03-18  552}
29f27e6df6ad82 José Roberto de Souza 2020-03-18  553  
29f27e6df6ad82 José Roberto de Souza 2020-03-18 @554return ret;
29f27e6df6ad82 José Roberto de Souza 2020-03-18  555  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 5/6] drm/i915/tc/icl: Implement the TC cold exit sequence

2020-03-18 Thread José Roberto de Souza
This is required for legacy/static TC ports as IOM is not aware of
the connection and will not trigger the TC cold exit.

Just request PCODE to exit TCCOLD is not enough as it could enter
again be driver makes use of the port, to prevent it BSpec states that
aux powerwell should be held.

So before detecting the mode, aux power is requested without wait for
hardware ack, PCODE is requested to exit TCCOLD and the TC detection
sequences follows as normal.
After detection if mode is not static aux can be powered off otherwise
we need to wait for HW ack as future calls to intel_display_power_get()
over aux will not check for HW ack.

BSpec: 21750
Cc: Imre Deak 
Cc: Cooper Chiou 
Cc: Kai-Heng Feng 
Signed-off-by: José Roberto de Souza 
---
 .../drm/i915/display/intel_display_power.c| 30 +-
 .../drm/i915/display/intel_display_types.h|  1 +
 drivers/gpu/drm/i915/display/intel_tc.c   | 56 +--
 drivers/gpu/drm/i915/i915_reg.h   |  1 +
 4 files changed, 80 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c 
b/drivers/gpu/drm/i915/display/intel_display_power.c
index a7e531b64e16..71a4c5d790ea 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power.c
@@ -573,8 +573,9 @@ static void icl_tc_port_assert_ref_held(struct 
drm_i915_private *dev_priv,
 #define TGL_AUX_PW_TO_TC_PORT(pw_idx)  ((pw_idx) - TGL_PW_CTL_IDX_AUX_TC1)
 
 static void
-icl_tc_phy_aux_power_well_enable(struct drm_i915_private *dev_priv,
-struct i915_power_well *power_well)
+_icl_tc_phy_aux_power_well_enable(struct drm_i915_private *dev_priv,
+ struct i915_power_well *power_well,
+ bool wait_ack)
 {
enum aux_ch aux_ch = icl_tc_phy_aux_ch(dev_priv, power_well);
u32 val;
@@ -587,7 +588,7 @@ icl_tc_phy_aux_power_well_enable(struct drm_i915_private 
*dev_priv,
val |= DP_AUX_CH_CTL_TBT_IO;
intel_de_write(dev_priv, DP_AUX_CH_CTL(aux_ch), val);
 
-   hsw_power_well_enable(dev_priv, power_well);
+   _hsw_power_well_enable(dev_priv, power_well, wait_ack);
 
if (INTEL_GEN(dev_priv) >= 12 && !power_well->desc->hsw.is_tc_tbt) {
enum tc_port tc_port;
@@ -603,6 +604,20 @@ icl_tc_phy_aux_power_well_enable(struct drm_i915_private 
*dev_priv,
}
 }
 
+static void
+icl_tc_phy_aux_power_well_enable(struct drm_i915_private *dev_priv,
+struct i915_power_well *power_well)
+{
+   _icl_tc_phy_aux_power_well_enable(dev_priv, power_well, true);
+}
+
+static void
+icl_tc_phy_aux_power_well_enable_without_ack(struct drm_i915_private *dev_priv,
+struct i915_power_well *power_well)
+{
+   _icl_tc_phy_aux_power_well_enable(dev_priv, power_well, false);
+}
+
 static void
 icl_tc_phy_aux_power_well_disable(struct drm_i915_private *dev_priv,
  struct i915_power_well *power_well)
@@ -642,6 +657,13 @@ static bool hsw_power_well_enabled(struct drm_i915_private 
*dev_priv,
return (val & mask) == mask;
 }
 
+static void
+hsw_power_well_wait_ack(struct drm_i915_private *dev_priv,
+   struct i915_power_well *power_well)
+{
+   hsw_wait_for_power_well_enable(dev_priv, power_well);
+}
+
 static void assert_can_enable_dc9(struct drm_i915_private *dev_priv)
 {
drm_WARN_ONCE(_priv->drm,
@@ -3582,8 +3604,10 @@ static const struct i915_power_well_ops 
icl_combo_phy_aux_power_well_ops = {
 static const struct i915_power_well_ops icl_tc_phy_aux_power_well_ops = {
.sync_hw = hsw_power_well_sync_hw,
.enable = icl_tc_phy_aux_power_well_enable,
+   .enable_without_ack = icl_tc_phy_aux_power_well_enable_without_ack,
.disable = icl_tc_phy_aux_power_well_disable,
.is_enabled = hsw_power_well_enabled,
+   .wait_enable_ack = hsw_power_well_wait_ack,
 };
 
 static const struct i915_power_well_regs icl_aux_power_well_regs = {
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 5e00e611f077..9b90be43d67d 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1386,6 +1386,7 @@ struct intel_digital_port {
enum tc_port_mode tc_mode;
enum phy_fia tc_phy_fia;
u8 tc_phy_fia_idx;
+   intel_wakeref_t tc_cold_wakeref;
 
void (*write_infoframe)(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state,
diff --git a/drivers/gpu/drm/i915/display/intel_tc.c 
b/drivers/gpu/drm/i915/display/intel_tc.c
index e4c5de5ce874..e33dad9646a5 100644
--- a/drivers/gpu/drm/i915/display/intel_tc.c
+++ b/drivers/gpu/drm/i915/display/intel_tc.c
@@ -416,9 +416,6 @@ static void