Re: [Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-11-26 Thread Jesse Barnes
On Tue, 26 Nov 2013 15:10:22 -0800
Jesse Barnes jbar...@virtuousgeek.org wrote:

 On Mon, 11 Nov 2013 10:23:24 +0100
 Daniel Vetter dan...@ffwll.ch wrote:
 
  On Wed, Nov 06, 2013 at 12:51:05PM +0200, Ville Syrjälä wrote:
   On Wed, Nov 06, 2013 at 02:36:35PM +0800, Chon Ming Lee wrote:
vlv_dpio_read/write should be describe more in PHY centric instead of
display controller centric.
Create a enum dpio_channel for channel index and enum dpio_phy for PHY
index.  This should better to gather for upcoming platform.

v2: Rebase the code based on
drm/i915/vlv: Fix typo in the DPIO register define.

v3: Rename vlv_phy to dpio_phy_iosf_port and define additional macro
DPIO_PHY, and remove unrelated change. (Ville)

Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
Signed-off-by: Chon Ming Lee chon.ming@intel.com
   
   Reviewed-by: Ville Syrjälä ville.syrj...@linux.intel.com
  
  Queued for -next, thanks for the patch.
 
 Looks like this one gives me bogus DPIO values at least some of the
 time.  Reverting to using 0x12 as the port ID seems to get me valid
 values back...

Ah looks like the init_dpio happens too late for the mode state
readout.  I'll post a patch to move it up.

-- 
Jesse Barnes, Intel Open Source Technology Center
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-11-26 Thread Jesse Barnes
On Mon, 11 Nov 2013 10:23:24 +0100
Daniel Vetter dan...@ffwll.ch wrote:

 On Wed, Nov 06, 2013 at 12:51:05PM +0200, Ville Syrjälä wrote:
  On Wed, Nov 06, 2013 at 02:36:35PM +0800, Chon Ming Lee wrote:
   vlv_dpio_read/write should be describe more in PHY centric instead of
   display controller centric.
   Create a enum dpio_channel for channel index and enum dpio_phy for PHY
   index.  This should better to gather for upcoming platform.
   
   v2: Rebase the code based on
   drm/i915/vlv: Fix typo in the DPIO register define.
   
   v3: Rename vlv_phy to dpio_phy_iosf_port and define additional macro
   DPIO_PHY, and remove unrelated change. (Ville)
   
   Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
   Signed-off-by: Chon Ming Lee chon.ming@intel.com
  
  Reviewed-by: Ville Syrjälä ville.syrj...@linux.intel.com
 
 Queued for -next, thanks for the patch.

Looks like this one gives me bogus DPIO values at least some of the
time.  Reverting to using 0x12 as the port ID seems to get me valid
values back...

-- 
Jesse Barnes, Intel Open Source Technology Center
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-11-26 Thread Daniel Vetter
On Wed, Nov 27, 2013 at 12:18 AM, Jesse Barnes jbar...@virtuousgeek.org wrote:
 On Tue, 26 Nov 2013 15:10:22 -0800
 Jesse Barnes jbar...@virtuousgeek.org wrote:

 On Mon, 11 Nov 2013 10:23:24 +0100
 Daniel Vetter dan...@ffwll.ch wrote:

  On Wed, Nov 06, 2013 at 12:51:05PM +0200, Ville Syrjälä wrote:
   On Wed, Nov 06, 2013 at 02:36:35PM +0800, Chon Ming Lee wrote:
vlv_dpio_read/write should be describe more in PHY centric instead of
display controller centric.
Create a enum dpio_channel for channel index and enum dpio_phy for PHY
index.  This should better to gather for upcoming platform.
   
v2: Rebase the code based on
drm/i915/vlv: Fix typo in the DPIO register define.
   
v3: Rename vlv_phy to dpio_phy_iosf_port and define additional macro
DPIO_PHY, and remove unrelated change. (Ville)
   
Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
Signed-off-by: Chon Ming Lee chon.ming@intel.com
  
   Reviewed-by: Ville Syrjälä ville.syrj...@linux.intel.com
 
  Queued for -next, thanks for the patch.

 Looks like this one gives me bogus DPIO values at least some of the
 time.  Reverting to using 0x12 as the port ID seems to get me valid
 values back...

 Ah looks like the init_dpio happens too late for the mode state
 readout.  I'll post a patch to move it up.

Isn't that just because your fb reconstruction patches moves it up by
a lot? If so can you please extract just that from your patches? I was
wondering whether we should do that due to the usual init ordering fun
anyway. I'd prefer to let that one soak a few days in dinq or so
before pulling in the hairy stuff.

Aside: The s/intelfbdev.ifb/intelfbdev-fb/ conversion would also be
neater split out.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-11-11 Thread Daniel Vetter
On Wed, Nov 06, 2013 at 12:51:05PM +0200, Ville Syrjälä wrote:
 On Wed, Nov 06, 2013 at 02:36:35PM +0800, Chon Ming Lee wrote:
  vlv_dpio_read/write should be describe more in PHY centric instead of
  display controller centric.
  Create a enum dpio_channel for channel index and enum dpio_phy for PHY
  index.  This should better to gather for upcoming platform.
  
  v2: Rebase the code based on
  drm/i915/vlv: Fix typo in the DPIO register define.
  
  v3: Rename vlv_phy to dpio_phy_iosf_port and define additional macro
  DPIO_PHY, and remove unrelated change. (Ville)
  
  Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
  Signed-off-by: Chon Ming Lee chon.ming@intel.com
 
 Reviewed-by: Ville Syrjälä ville.syrj...@linux.intel.com

Queued for -next, thanks for the patch.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-11-06 Thread Ville Syrjälä
On Wed, Nov 06, 2013 at 02:36:35PM +0800, Chon Ming Lee wrote:
 vlv_dpio_read/write should be describe more in PHY centric instead of
 display controller centric.
 Create a enum dpio_channel for channel index and enum dpio_phy for PHY
 index.  This should better to gather for upcoming platform.
 
 v2: Rebase the code based on
 drm/i915/vlv: Fix typo in the DPIO register define.
 
 v3: Rename vlv_phy to dpio_phy_iosf_port and define additional macro
 DPIO_PHY, and remove unrelated change. (Ville)
 
 Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
 Signed-off-by: Chon Ming Lee chon.ming@intel.com

Reviewed-by: Ville Syrjälä ville.syrj...@linux.intel.com

PS.
Please add v2,v3,etc. note to the subject. In this case it would be
[PATCH v3 1/2]  Otherwise it's really easy to lose track which
mail has the latest version.

 ---
  drivers/gpu/drm/i915/i915_drv.h   |   13 +
  drivers/gpu/drm/i915/i915_reg.h   |3 +++
  drivers/gpu/drm/i915/intel_display.c  |   16 
  drivers/gpu/drm/i915/intel_dp.c   |8 
  drivers/gpu/drm/i915/intel_drv.h  |7 ---
  drivers/gpu/drm/i915/intel_hdmi.c |8 
  drivers/gpu/drm/i915/intel_sideband.c |   13 ++---
  7 files changed, 42 insertions(+), 26 deletions(-)
 
 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
 index 2aa7053..9fafc38 100644
 --- a/drivers/gpu/drm/i915/i915_drv.h
 +++ b/drivers/gpu/drm/i915/i915_drv.h
 @@ -88,6 +88,18 @@ enum port {
  };
  #define port_name(p) ((p) + 'A')
  
 +#define I915_NUM_PHYS_VLV 1
 +
 +enum dpio_channel {
 + DPIO_CH0,
 + DPIO_CH1
 +};
 +
 +enum dpio_phy {
 + DPIO_PHY0,
 + DPIO_PHY1
 +};
 +
  enum intel_display_power_domain {
   POWER_DOMAIN_PIPE_A,
   POWER_DOMAIN_PIPE_B,
 @@ -1403,6 +1415,7 @@ typedef struct drm_i915_private {
   int num_shared_dpll;
   struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
   struct intel_ddi_plls ddi_plls;
 + int dpio_phy_iosf_port[I915_NUM_PHYS_VLV];
  
   /* Reclocking support */
   bool render_reclock_avail;
 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
 index 4dbc8da..969ca2e 100644
 --- a/drivers/gpu/drm/i915/i915_reg.h
 +++ b/drivers/gpu/drm/i915/i915_reg.h
 @@ -457,6 +457,9 @@
  #define DPIO_TX3_SWING_CTL4(pipe) _PIPE(pipe, _DPIO_TX3_SWING_CTL4_A, \
   _DPIO_TX3_SWING_CTL4_B)
  
 +#define DPIO_PHY(pipe)   ((pipe)  1)
 +#define DPIO_PHY_IOSF_PORT(phy)  
 (dev_priv-dpio_phy_iosf_port[phy])
 +
  /*
   * Per pipe/PLL DPIO regs
   */
 diff --git a/drivers/gpu/drm/i915/intel_display.c 
 b/drivers/gpu/drm/i915/intel_display.c
 index 48f4990..b1d20b6 100644
 --- a/drivers/gpu/drm/i915/intel_display.c
 +++ b/drivers/gpu/drm/i915/intel_display.c
 @@ -1361,6 +1361,7 @@ static void intel_init_dpio(struct drm_device *dev)
   if (!IS_VALLEYVIEW(dev))
   return;
  
 + DPIO_PHY_IOSF_PORT(DPIO_PHY0) = IOSF_PORT_DPIO;
   /*
* From VLV2A0_DP_eDP_DPIO_driver_vbios_notes_10.docx -
*  6.  De-assert cmn_reset/side_reset. Same as VLV X0.
 @@ -1494,18 +1495,25 @@ static void vlv_disable_pll(struct drm_i915_private 
 *dev_priv, enum pipe pipe)
   POSTING_READ(DPLL(pipe));
  }
  
 -void vlv_wait_port_ready(struct drm_i915_private *dev_priv, int port)
 +void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
 + struct intel_digital_port *dport)
  {
   u32 port_mask;
  
 - if (!port)
 + switch (dport-port) {
 + case PORT_B:
   port_mask = DPLL_PORTB_READY_MASK;
 - else
 + break;
 + case PORT_C:
   port_mask = DPLL_PORTC_READY_MASK;
 + break;
 + default:
 + BUG();
 + }
  
   if (wait_for((I915_READ(DPLL(0))  port_mask) == 0, 1000))
   WARN(1, timed out waiting for port %c ready: 0x%08x\n,
 -  'B' + port, I915_READ(DPLL(0)));
 +  'B' + dport-port, I915_READ(DPLL(0)));
  }
  
  /**
 diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
 index bcbdc7a..aea9e28 100644
 --- a/drivers/gpu/drm/i915/intel_dp.c
 +++ b/drivers/gpu/drm/i915/intel_dp.c
 @@ -1839,7 +1839,7 @@ static void vlv_pre_enable_dp(struct intel_encoder 
 *encoder)
   struct drm_device *dev = encoder-base.dev;
   struct drm_i915_private *dev_priv = dev-dev_private;
   struct intel_crtc *intel_crtc = to_intel_crtc(encoder-base.crtc);
 - int port = vlv_dport_to_channel(dport);
 + enum dpio_channel port = vlv_dport_to_channel(dport);
   int pipe = intel_crtc-pipe;
   struct edp_power_seq power_seq;
   u32 val;
 @@ -1866,7 +1866,7 @@ static void vlv_pre_enable_dp(struct intel_encoder 
 *encoder)
  
   intel_enable_dp(encoder);
  
 - vlv_wait_port_ready(dev_priv, port);
 + vlv_wait_port_ready(dev_priv, dport);
  }
  
  static void 

[Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-11-05 Thread Chon Ming Lee
vlv_dpio_read/write should be describe more in PHY centric instead of
display controller centric.
Create a enum dpio_channel for channel index and enum dpio_phy for PHY
index.  This should better to gather for upcoming platform.

v2: Rebase the code based on
drm/i915/vlv: Fix typo in the DPIO register define.

v3: Rename vlv_phy to dpio_phy_iosf_port and define additional macro
DPIO_PHY, and remove unrelated change. (Ville)

Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
Signed-off-by: Chon Ming Lee chon.ming@intel.com
---
 drivers/gpu/drm/i915/i915_drv.h   |   13 +
 drivers/gpu/drm/i915/i915_reg.h   |3 +++
 drivers/gpu/drm/i915/intel_display.c  |   16 
 drivers/gpu/drm/i915/intel_dp.c   |8 
 drivers/gpu/drm/i915/intel_drv.h  |7 ---
 drivers/gpu/drm/i915/intel_hdmi.c |8 
 drivers/gpu/drm/i915/intel_sideband.c |   13 ++---
 7 files changed, 42 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 2aa7053..9fafc38 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -88,6 +88,18 @@ enum port {
 };
 #define port_name(p) ((p) + 'A')
 
+#define I915_NUM_PHYS_VLV 1
+
+enum dpio_channel {
+   DPIO_CH0,
+   DPIO_CH1
+};
+
+enum dpio_phy {
+   DPIO_PHY0,
+   DPIO_PHY1
+};
+
 enum intel_display_power_domain {
POWER_DOMAIN_PIPE_A,
POWER_DOMAIN_PIPE_B,
@@ -1403,6 +1415,7 @@ typedef struct drm_i915_private {
int num_shared_dpll;
struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
struct intel_ddi_plls ddi_plls;
+   int dpio_phy_iosf_port[I915_NUM_PHYS_VLV];
 
/* Reclocking support */
bool render_reclock_avail;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 4dbc8da..969ca2e 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -457,6 +457,9 @@
 #define DPIO_TX3_SWING_CTL4(pipe) _PIPE(pipe, _DPIO_TX3_SWING_CTL4_A, \
_DPIO_TX3_SWING_CTL4_B)
 
+#define DPIO_PHY(pipe) ((pipe)  1)
+#define DPIO_PHY_IOSF_PORT(phy)
(dev_priv-dpio_phy_iosf_port[phy])
+
 /*
  * Per pipe/PLL DPIO regs
  */
diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 48f4990..b1d20b6 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1361,6 +1361,7 @@ static void intel_init_dpio(struct drm_device *dev)
if (!IS_VALLEYVIEW(dev))
return;
 
+   DPIO_PHY_IOSF_PORT(DPIO_PHY0) = IOSF_PORT_DPIO;
/*
 * From VLV2A0_DP_eDP_DPIO_driver_vbios_notes_10.docx -
 *  6.  De-assert cmn_reset/side_reset. Same as VLV X0.
@@ -1494,18 +1495,25 @@ static void vlv_disable_pll(struct drm_i915_private 
*dev_priv, enum pipe pipe)
POSTING_READ(DPLL(pipe));
 }
 
-void vlv_wait_port_ready(struct drm_i915_private *dev_priv, int port)
+void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
+   struct intel_digital_port *dport)
 {
u32 port_mask;
 
-   if (!port)
+   switch (dport-port) {
+   case PORT_B:
port_mask = DPLL_PORTB_READY_MASK;
-   else
+   break;
+   case PORT_C:
port_mask = DPLL_PORTC_READY_MASK;
+   break;
+   default:
+   BUG();
+   }
 
if (wait_for((I915_READ(DPLL(0))  port_mask) == 0, 1000))
WARN(1, timed out waiting for port %c ready: 0x%08x\n,
-'B' + port, I915_READ(DPLL(0)));
+'B' + dport-port, I915_READ(DPLL(0)));
 }
 
 /**
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index bcbdc7a..aea9e28 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1839,7 +1839,7 @@ static void vlv_pre_enable_dp(struct intel_encoder 
*encoder)
struct drm_device *dev = encoder-base.dev;
struct drm_i915_private *dev_priv = dev-dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(encoder-base.crtc);
-   int port = vlv_dport_to_channel(dport);
+   enum dpio_channel port = vlv_dport_to_channel(dport);
int pipe = intel_crtc-pipe;
struct edp_power_seq power_seq;
u32 val;
@@ -1866,7 +1866,7 @@ static void vlv_pre_enable_dp(struct intel_encoder 
*encoder)
 
intel_enable_dp(encoder);
 
-   vlv_wait_port_ready(dev_priv, port);
+   vlv_wait_port_ready(dev_priv, dport);
 }
 
 static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder)
@@ -1876,7 +1876,7 @@ static void vlv_dp_pre_pll_enable(struct intel_encoder 
*encoder)
struct drm_i915_private *dev_priv = dev-dev_private;
struct intel_crtc *intel_crtc =
to_intel_crtc(encoder-base.crtc);
-   int port = 

Re: [Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-10-31 Thread Ville Syrjälä
On Wed, Oct 30, 2013 at 11:11:17AM +0800, Chon Ming Lee wrote:
 vlv_dpio_read/write should be describe more in PHY centric instead of
 display controller centric.
 Create a enum dpio_channel for channel index and enum dpio_phy for PHY
 index.  This should better to gather for upcoming platform.
 
 v2: Rebase the code based on
 drm/i915/vlv: Fix typo in the DPIO register define.
 
 Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
 Signed-off-by: Chon Ming Lee chon.ming@intel.com
 ---
  drivers/gpu/drm/i915/i915_drv.h   |   13 +
  drivers/gpu/drm/i915/i915_reg.h   |2 ++
  drivers/gpu/drm/i915/intel_display.c  |   16 
  drivers/gpu/drm/i915/intel_dp.c   |9 -
  drivers/gpu/drm/i915/intel_drv.h  |7 ---
  drivers/gpu/drm/i915/intel_hdmi.c |9 -
  drivers/gpu/drm/i915/intel_sideband.c |   13 ++---
  7 files changed, 41 insertions(+), 28 deletions(-)
 
 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
 index 2731fbb..b1609ae 100644
 --- a/drivers/gpu/drm/i915/i915_drv.h
 +++ b/drivers/gpu/drm/i915/i915_drv.h
 @@ -88,6 +88,18 @@ enum port {
  };
  #define port_name(p) ((p) + 'A')
  
 +#define I915_NUM_PHYS_VLV 1
 +
 +enum dpio_channel {
 + DPIO_CH0,
 + DPIO_CH1
 +};
 +
 +enum dpio_phy {
 + DPIO_PHY0,
 + DPIO_PHY1
 +};
 +
  enum intel_display_power_domain {
   POWER_DOMAIN_PIPE_A,
   POWER_DOMAIN_PIPE_B,
 @@ -1401,6 +1413,7 @@ typedef struct drm_i915_private {
   int num_shared_dpll;
   struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
   struct intel_ddi_plls ddi_plls;
 + int vlv_phy[I915_NUM_PHYS_VLV];
  
   /* Reclocking support */
   bool render_reclock_avail;
 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
 index f7ecad2..dd8ff3b 100644
 --- a/drivers/gpu/drm/i915/i915_reg.h
 +++ b/drivers/gpu/drm/i915/i915_reg.h
 @@ -447,6 +447,8 @@
  #define DPIO_TX3_SWING_CTL4(pipe) _PIPE(pipe, _DPIO_TX3_SWING_CTL4_A, \
   _DPIO_TX3_SWING_CTL4_B)
  
 +#define DPIO_PHY_PORT(pipe)  (dev_priv-vlv_phy[pipe  1])

I don't think this vlv_phy[] thing really helps things. It does the
pipe-phy-iosf port mapping in a bit of a magic way.

Maybe rename the vlv_phy[] to something like dpio_phy_iosf_port[] and
have two macros like so:
 DPIO_PHY(pipe) ((pipe)  1)
 DPIO_PHY_IOSF_PORT(phy) (dev_priv-dpio_phy_iosf_port[phy])

 +
  /*
   * Per pipe/PLL DPIO regs
   */
 diff --git a/drivers/gpu/drm/i915/intel_display.c 
 b/drivers/gpu/drm/i915/intel_display.c
 index 8f40ae3..c08f9f8 100644
 --- a/drivers/gpu/drm/i915/intel_display.c
 +++ b/drivers/gpu/drm/i915/intel_display.c
 @@ -1361,6 +1361,7 @@ static void intel_init_dpio(struct drm_device *dev)
   if (!IS_VALLEYVIEW(dev))
   return;
  
 + dev_priv-vlv_phy[DPIO_PHY0] = IOSF_PORT_DPIO;
   /*
* From VLV2A0_DP_eDP_DPIO_driver_vbios_notes_10.docx -
*  6.  De-assert cmn_reset/side_reset. Same as VLV X0.
 @@ -1494,18 +1495,25 @@ static void vlv_disable_pll(struct drm_i915_private 
 *dev_priv, enum pipe pipe)
   POSTING_READ(DPLL(pipe));
  }
  
 -void vlv_wait_port_ready(struct drm_i915_private *dev_priv, int port)
 +void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
 + struct intel_digital_port *dport)
  {
   u32 port_mask;
  
 - if (!port)
 + switch (dport-port) {
 + case PORT_B:
   port_mask = DPLL_PORTB_READY_MASK;
 - else
 + break;
 + case PORT_C:
   port_mask = DPLL_PORTC_READY_MASK;
 + break;
 + default:
 + BUG();
 + }
  
   if (wait_for((I915_READ(DPLL(0))  port_mask) == 0, 1000))
   WARN(1, timed out waiting for port %c ready: 0x%08x\n,
 -  'B' + port, I915_READ(DPLL(0)));
 +  'B' + dport-port, I915_READ(DPLL(0)));
  }
  
  /**
 diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
 index b3cc333..5d00c83 100644
 --- a/drivers/gpu/drm/i915/intel_dp.c
 +++ b/drivers/gpu/drm/i915/intel_dp.c
 @@ -1831,7 +1831,7 @@ static void vlv_pre_enable_dp(struct intel_encoder 
 *encoder)
   struct drm_device *dev = encoder-base.dev;
   struct drm_i915_private *dev_priv = dev-dev_private;
   struct intel_crtc *intel_crtc = to_intel_crtc(encoder-base.crtc);
 - int port = vlv_dport_to_channel(dport);
 + enum dpio_channel port = vlv_dport_to_channel(dport);
   int pipe = intel_crtc-pipe;
   struct edp_power_seq power_seq;
   u32 val;
 @@ -1839,7 +1839,6 @@ static void vlv_pre_enable_dp(struct intel_encoder 
 *encoder)
   mutex_lock(dev_priv-dpio_lock);
  
   val = vlv_dpio_read(dev_priv, pipe, DPIO_DATA_LANE_A(port));
 - val = 0;

Unrelated change.

The rest looks fine to me.

   if (pipe)
   val |= (121);
   else
 @@ -1858,7 +1857,7 @@ static void 

[Intel-gfx] [PATCH 1/2] drm/i915/vlv: Make the vlv_dpio_read/vlv_dpio_write more PHY centric

2013-10-29 Thread Chon Ming Lee
vlv_dpio_read/write should be describe more in PHY centric instead of
display controller centric.
Create a enum dpio_channel for channel index and enum dpio_phy for PHY
index.  This should better to gather for upcoming platform.

v2: Rebase the code based on
drm/i915/vlv: Fix typo in the DPIO register define.

Suggested-by: Ville Syrjälä ville.syrj...@linux.intel.com
Signed-off-by: Chon Ming Lee chon.ming@intel.com
---
 drivers/gpu/drm/i915/i915_drv.h   |   13 +
 drivers/gpu/drm/i915/i915_reg.h   |2 ++
 drivers/gpu/drm/i915/intel_display.c  |   16 
 drivers/gpu/drm/i915/intel_dp.c   |9 -
 drivers/gpu/drm/i915/intel_drv.h  |7 ---
 drivers/gpu/drm/i915/intel_hdmi.c |9 -
 drivers/gpu/drm/i915/intel_sideband.c |   13 ++---
 7 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 2731fbb..b1609ae 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -88,6 +88,18 @@ enum port {
 };
 #define port_name(p) ((p) + 'A')
 
+#define I915_NUM_PHYS_VLV 1
+
+enum dpio_channel {
+   DPIO_CH0,
+   DPIO_CH1
+};
+
+enum dpio_phy {
+   DPIO_PHY0,
+   DPIO_PHY1
+};
+
 enum intel_display_power_domain {
POWER_DOMAIN_PIPE_A,
POWER_DOMAIN_PIPE_B,
@@ -1401,6 +1413,7 @@ typedef struct drm_i915_private {
int num_shared_dpll;
struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
struct intel_ddi_plls ddi_plls;
+   int vlv_phy[I915_NUM_PHYS_VLV];
 
/* Reclocking support */
bool render_reclock_avail;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index f7ecad2..dd8ff3b 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -447,6 +447,8 @@
 #define DPIO_TX3_SWING_CTL4(pipe) _PIPE(pipe, _DPIO_TX3_SWING_CTL4_A, \
_DPIO_TX3_SWING_CTL4_B)
 
+#define DPIO_PHY_PORT(pipe)(dev_priv-vlv_phy[pipe  1])
+
 /*
  * Per pipe/PLL DPIO regs
  */
diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 8f40ae3..c08f9f8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1361,6 +1361,7 @@ static void intel_init_dpio(struct drm_device *dev)
if (!IS_VALLEYVIEW(dev))
return;
 
+   dev_priv-vlv_phy[DPIO_PHY0] = IOSF_PORT_DPIO;
/*
 * From VLV2A0_DP_eDP_DPIO_driver_vbios_notes_10.docx -
 *  6.  De-assert cmn_reset/side_reset. Same as VLV X0.
@@ -1494,18 +1495,25 @@ static void vlv_disable_pll(struct drm_i915_private 
*dev_priv, enum pipe pipe)
POSTING_READ(DPLL(pipe));
 }
 
-void vlv_wait_port_ready(struct drm_i915_private *dev_priv, int port)
+void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
+   struct intel_digital_port *dport)
 {
u32 port_mask;
 
-   if (!port)
+   switch (dport-port) {
+   case PORT_B:
port_mask = DPLL_PORTB_READY_MASK;
-   else
+   break;
+   case PORT_C:
port_mask = DPLL_PORTC_READY_MASK;
+   break;
+   default:
+   BUG();
+   }
 
if (wait_for((I915_READ(DPLL(0))  port_mask) == 0, 1000))
WARN(1, timed out waiting for port %c ready: 0x%08x\n,
-'B' + port, I915_READ(DPLL(0)));
+'B' + dport-port, I915_READ(DPLL(0)));
 }
 
 /**
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index b3cc333..5d00c83 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1831,7 +1831,7 @@ static void vlv_pre_enable_dp(struct intel_encoder 
*encoder)
struct drm_device *dev = encoder-base.dev;
struct drm_i915_private *dev_priv = dev-dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(encoder-base.crtc);
-   int port = vlv_dport_to_channel(dport);
+   enum dpio_channel port = vlv_dport_to_channel(dport);
int pipe = intel_crtc-pipe;
struct edp_power_seq power_seq;
u32 val;
@@ -1839,7 +1839,6 @@ static void vlv_pre_enable_dp(struct intel_encoder 
*encoder)
mutex_lock(dev_priv-dpio_lock);
 
val = vlv_dpio_read(dev_priv, pipe, DPIO_DATA_LANE_A(port));
-   val = 0;
if (pipe)
val |= (121);
else
@@ -1858,7 +1857,7 @@ static void vlv_pre_enable_dp(struct intel_encoder 
*encoder)
 
intel_enable_dp(encoder);
 
-   vlv_wait_port_ready(dev_priv, port);
+   vlv_wait_port_ready(dev_priv, dport);
 }
 
 static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder)
@@ -1868,7 +1867,7 @@ static void vlv_dp_pre_pll_enable(struct intel_encoder 
*encoder)
struct drm_i915_private *dev_priv = dev-dev_private;
struct intel_crtc *intel_crtc =