Re: [Intel-gfx] [PATCH 8/9] drm/i915: Add location of the Rcomp resistor to bxt_ddi_phy_info

2016-10-06 Thread Imre Deak
On to, 2016-10-06 at 14:50 +0300, Ander Conselvan De Oliveira wrote:
> On Wed, 2016-10-05 at 17:51 +0300, Imre Deak wrote:
> > On ke, 2016-10-05 at 15:09 +0300, Ander Conselvan de Oliveira
> > wrote:
> > > 
> > > Use struct bxt_ddi_phy_info to hold information of where the
> > > Rcomp
> > > resistor is located, instead of hard coding it in the init
> > > sequence.
> > > 
> > > Note that this moves the enabling of the phy with the Rcomp
> > > resistor out
> > > of the power well enable code. That should be safe since
> > > bxt_ddi_phy_init() is called while the power domains lock is
> > > held, and
> > > that is the only way that function gets called, so there is no
> > > possibility of a concurrent phy enable caused by a power domain
> > > get
> > > call.
> > > 
> > > Signed-off-by: Ander Conselvan de Oliveira 
> > > ---
> > >  drivers/gpu/drm/i915/intel_dpio_phy.c   | 76
> > > +-
> > > ---
> > >  drivers/gpu/drm/i915/intel_runtime_pm.c | 15 ---
> > >  2 files changed, 59 insertions(+), 32 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c
> > > b/drivers/gpu/drm/i915/intel_dpio_phy.c
> > > index 66d750a..e8a75fd 100644
> > > --- a/drivers/gpu/drm/i915/intel_dpio_phy.c
> > > +++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
> > > @@ -124,6 +124,13 @@ struct bxt_ddi_phy_info {
> > >   bool dual_channel;
> > >  
> > >   /**
> > > +  * @rcomp_phy: If -1, indicates this phy has its own
> > > rcomp
> > > resistor.
> > > +  * Otherwise the GRC value will be copied from the phy
> > > indicated by
> > > +  * this field.
> > > +  */
> > > + enum dpio_phy rcomp_phy;
> > > +
> > > + /**
> > >    * @channel: struct containing per channel information.
> > >    */
> > >   struct {
> > > @@ -137,6 +144,7 @@ struct bxt_ddi_phy_info {
> > >  static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
> > >   [DPIO_PHY0] = {
> > >   .dual_channel = true,
> > > + .rcomp_phy = DPIO_PHY1,
> > >  
> > >   .channel = {
> > >   [DPIO_CH0] = { .port = PORT_B },
> > > @@ -145,6 +153,7 @@ static const struct bxt_ddi_phy_info
> > > bxt_ddi_phy_info[]
> > > = {
> > >   },
> > >   [DPIO_PHY1] = {
> > >   .dual_channel = false,
> > > + .rcomp_phy = -1,
> > >  
> > >   .channel = {
> > >   [DPIO_CH0] = { .port = PORT_A },
> > > @@ -152,6 +161,7 @@ static const struct bxt_ddi_phy_info
> > > bxt_ddi_phy_info[]
> > > = {
> > >   },
> > >  };
> > >  
> > > +static u32 bxt_phy_port_mask(const struct bxt_ddi_phy_info
> > > *phy_info)
> > >  {
> > >   return (phy_info->dual_channel * BIT(phy_info-
> > > > channel[DPIO_CH1].port)) |
> > >   BIT(phy_info->channel[DPIO_CH0].port);
> > > @@ -199,6 +209,7 @@ void bxt_ddi_phy_set_signal_level(struct
> > > drm_i915_private *dev_priv,
> > >  bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
> > >   enum dpio_phy phy)
> > >  {
> > > + const struct bxt_ddi_phy_info *phy_info =
> > > _ddi_phy_info[phy];
> > >   enum port port;
> > >  
> > >   if (!(I915_READ(BXT_P_CR_GT_DISP_PWRON) &
> > > GT_DISPLAY_POWER_ON(phy)))
> > > @@ -212,9 +223,10 @@ bool bxt_ddi_phy_is_enabled(struct
> > > drm_i915_private
> > > *dev_priv,
> > >   return false;
> > >   }
> > >  
> > > - if (phy == DPIO_PHY1 &&
> > > - !(I915_READ(BXT_PORT_REF_DW3(DPIO_PHY1)) &
> > > GRC_DONE)) {
> > > - DRM_DEBUG_DRIVER("DDI PHY 1 powered, but GRC
> > > isn't
> > > done\n");
> > > + if (phy_info->rcomp_phy == -1 &&
> > > + !(I915_READ(BXT_PORT_REF_DW3(phy)) & GRC_DONE)) {
> > > + DRM_DEBUG_DRIVER("DDI PHY %d powered, but GRC
> > > isn't
> > > done\n",
> > > +  phy);
> > >  
> > >   return false;
> > >   }
> > > @@ -259,14 +271,15 @@ static void bxt_phy_wait_grc_done(struct
> > > drm_i915_private *dev_priv,
> > >   DRM_ERROR("timeout waiting for PHY%d GRC\n",
> > > phy);
> > >  }
> > >  
> > > -void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum
> > > dpio_phy phy)
> > > +static void _bxt_ddi_phy_init(struct drm_i915_private *dev_priv,
> > > +   enum dpio_phy phy)
> > >  {
> > >   const struct bxt_ddi_phy_info *phy_info =
> > > _ddi_phy_info[phy];
> > >   u32 val;
> > >  
> > >   if (bxt_ddi_phy_is_enabled(dev_priv, phy)) {
> > >   /* Still read out the GRC value for state
> > > verification */
> > > - if (phy == DPIO_PHY0)
> > > + if (phy_info->rcomp_phy != -1)
> > >   dev_priv->bxt_phy_grc =
> > > bxt_get_grc(dev_priv, phy);
> > >  
> > >   if (bxt_ddi_phy_verify_state(dev_priv, phy)) {
> > > @@ -336,30 +349,32 @@ void bxt_ddi_phy_init(struct
> > > drm_i915_private
> > > *dev_priv, enum dpio_phy phy)
> > >   val |= OCL2_LDOFUSE_PWR_DIS;
> > >   I915_WRITE(BXT_PORT_CL1CM_DW30(phy), val);
> > >  
> > > - if (phy == DPIO_PHY0) {
> > > + if (phy_info->rcomp_phy != -1) {
> > >   uint32_t grc_code;
> > >   /*

Re: [Intel-gfx] [PATCH 8/9] drm/i915: Add location of the Rcomp resistor to bxt_ddi_phy_info

2016-10-06 Thread Ander Conselvan De Oliveira
On Wed, 2016-10-05 at 17:51 +0300, Imre Deak wrote:
> On ke, 2016-10-05 at 15:09 +0300, Ander Conselvan de Oliveira wrote:
> > 
> > Use struct bxt_ddi_phy_info to hold information of where the Rcomp
> > resistor is located, instead of hard coding it in the init sequence.
> > 
> > Note that this moves the enabling of the phy with the Rcomp resistor out
> > of the power well enable code. That should be safe since
> > bxt_ddi_phy_init() is called while the power domains lock is held, and
> > that is the only way that function gets called, so there is no
> > possibility of a concurrent phy enable caused by a power domain get
> > call.
> > 
> > Signed-off-by: Ander Conselvan de Oliveira 
> > ---
> >  drivers/gpu/drm/i915/intel_dpio_phy.c   | 76 +-
> > ---
> >  drivers/gpu/drm/i915/intel_runtime_pm.c | 15 ---
> >  2 files changed, 59 insertions(+), 32 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c
> > b/drivers/gpu/drm/i915/intel_dpio_phy.c
> > index 66d750a..e8a75fd 100644
> > --- a/drivers/gpu/drm/i915/intel_dpio_phy.c
> > +++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
> > @@ -124,6 +124,13 @@ struct bxt_ddi_phy_info {
> >     bool dual_channel;
> >  
> >     /**
> > +    * @rcomp_phy: If -1, indicates this phy has its own rcomp
> > resistor.
> > +    * Otherwise the GRC value will be copied from the phy indicated by
> > +    * this field.
> > +    */
> > +   enum dpio_phy rcomp_phy;
> > +
> > +   /**
> >      * @channel: struct containing per channel information.
> >      */
> >     struct {
> > @@ -137,6 +144,7 @@ struct bxt_ddi_phy_info {
> >  static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
> >     [DPIO_PHY0] = {
> >     .dual_channel = true,
> > +   .rcomp_phy = DPIO_PHY1,
> >  
> >     .channel = {
> >     [DPIO_CH0] = { .port = PORT_B },
> > @@ -145,6 +153,7 @@ static const struct bxt_ddi_phy_info bxt_ddi_phy_info[]
> > = {
> >     },
> >     [DPIO_PHY1] = {
> >     .dual_channel = false,
> > +   .rcomp_phy = -1,
> >  
> >     .channel = {
> >     [DPIO_CH0] = { .port = PORT_A },
> > @@ -152,6 +161,7 @@ static const struct bxt_ddi_phy_info bxt_ddi_phy_info[]
> > = {
> >     },
> >  };
> >  
> > +static u32 bxt_phy_port_mask(const struct bxt_ddi_phy_info *phy_info)
> >  {
> >     return (phy_info->dual_channel * BIT(phy_info-
> > >channel[DPIO_CH1].port)) |
> >     BIT(phy_info->channel[DPIO_CH0].port);
> > @@ -199,6 +209,7 @@ void bxt_ddi_phy_set_signal_level(struct
> > drm_i915_private *dev_priv,
> >  bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
> >     enum dpio_phy phy)
> >  {
> > +   const struct bxt_ddi_phy_info *phy_info = _ddi_phy_info[phy];
> >     enum port port;
> >  
> >     if (!(I915_READ(BXT_P_CR_GT_DISP_PWRON) &
> > GT_DISPLAY_POWER_ON(phy)))
> > @@ -212,9 +223,10 @@ bool bxt_ddi_phy_is_enabled(struct drm_i915_private
> > *dev_priv,
> >     return false;
> >     }
> >  
> > -   if (phy == DPIO_PHY1 &&
> > -   !(I915_READ(BXT_PORT_REF_DW3(DPIO_PHY1)) & GRC_DONE)) {
> > -   DRM_DEBUG_DRIVER("DDI PHY 1 powered, but GRC isn't
> > done\n");
> > +   if (phy_info->rcomp_phy == -1 &&
> > +   !(I915_READ(BXT_PORT_REF_DW3(phy)) & GRC_DONE)) {
> > +   DRM_DEBUG_DRIVER("DDI PHY %d powered, but GRC isn't
> > done\n",
> > +    phy);
> >  
> >     return false;
> >     }
> > @@ -259,14 +271,15 @@ static void bxt_phy_wait_grc_done(struct
> > drm_i915_private *dev_priv,
> >     DRM_ERROR("timeout waiting for PHY%d GRC\n", phy);
> >  }
> >  
> > -void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy)
> > +static void _bxt_ddi_phy_init(struct drm_i915_private *dev_priv,
> > +     enum dpio_phy phy)
> >  {
> >     const struct bxt_ddi_phy_info *phy_info = _ddi_phy_info[phy];
> >     u32 val;
> >  
> >     if (bxt_ddi_phy_is_enabled(dev_priv, phy)) {
> >     /* Still read out the GRC value for state verification */
> > -   if (phy == DPIO_PHY0)
> > +   if (phy_info->rcomp_phy != -1)
> >     dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, phy);
> >  
> >     if (bxt_ddi_phy_verify_state(dev_priv, phy)) {
> > @@ -336,30 +349,32 @@ void bxt_ddi_phy_init(struct drm_i915_private
> > *dev_priv, enum dpio_phy phy)
> >     val |= OCL2_LDOFUSE_PWR_DIS;
> >     I915_WRITE(BXT_PORT_CL1CM_DW30(phy), val);
> >  
> > -   if (phy == DPIO_PHY0) {
> > +   if (phy_info->rcomp_phy != -1) {
> >     uint32_t grc_code;
> >     /*
> >      * PHY0 isn't connected to an RCOMP resistor so copy over
> >      * the corresponding calibrated value from PHY1, and
> > disable
> >      * the automatic calibration on PHY0.
> >      */
> > -   val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv,
> > DPIO_PHY1);
> > +   val = 

Re: [Intel-gfx] [PATCH 8/9] drm/i915: Add location of the Rcomp resistor to bxt_ddi_phy_info

2016-10-05 Thread Imre Deak
On ke, 2016-10-05 at 15:09 +0300, Ander Conselvan de Oliveira wrote:
> Use struct bxt_ddi_phy_info to hold information of where the Rcomp
> resistor is located, instead of hard coding it in the init sequence.
> 
> Note that this moves the enabling of the phy with the Rcomp resistor out
> of the power well enable code. That should be safe since
> bxt_ddi_phy_init() is called while the power domains lock is held, and
> that is the only way that function gets called, so there is no
> possibility of a concurrent phy enable caused by a power domain get
> call.
> 
> Signed-off-by: Ander Conselvan de Oliveira 
> ---
>  drivers/gpu/drm/i915/intel_dpio_phy.c   | 76 
> +
>  drivers/gpu/drm/i915/intel_runtime_pm.c | 15 ---
>  2 files changed, 59 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c 
> b/drivers/gpu/drm/i915/intel_dpio_phy.c
> index 66d750a..e8a75fd 100644
> --- a/drivers/gpu/drm/i915/intel_dpio_phy.c
> +++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
> @@ -124,6 +124,13 @@ struct bxt_ddi_phy_info {
>   bool dual_channel;
>  
>   /**
> +  * @rcomp_phy: If -1, indicates this phy has its own rcomp resistor.
> +  * Otherwise the GRC value will be copied from the phy indicated by
> +  * this field.
> +  */
> + enum dpio_phy rcomp_phy;
> +
> + /**
>    * @channel: struct containing per channel information.
>    */
>   struct {
> @@ -137,6 +144,7 @@ struct bxt_ddi_phy_info {
>  static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
>   [DPIO_PHY0] = {
>   .dual_channel = true,
> + .rcomp_phy = DPIO_PHY1,
>  
>   .channel = {
>   [DPIO_CH0] = { .port = PORT_B },
> @@ -145,6 +153,7 @@ static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = 
> {
>   },
>   [DPIO_PHY1] = {
>   .dual_channel = false,
> + .rcomp_phy = -1,
>  
>   .channel = {
>   [DPIO_CH0] = { .port = PORT_A },
> @@ -152,6 +161,7 @@ static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = 
> {
>   },
>  };
>  
> +static u32 bxt_phy_port_mask(const struct bxt_ddi_phy_info *phy_info)
>  {
>   return (phy_info->dual_channel * BIT(phy_info->channel[DPIO_CH1].port)) 
> |
>   BIT(phy_info->channel[DPIO_CH0].port);
> @@ -199,6 +209,7 @@ void bxt_ddi_phy_set_signal_level(struct drm_i915_private 
> *dev_priv,
>  bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
>   enum dpio_phy phy)
>  {
> + const struct bxt_ddi_phy_info *phy_info = _ddi_phy_info[phy];
>   enum port port;
>  
>   if (!(I915_READ(BXT_P_CR_GT_DISP_PWRON) & GT_DISPLAY_POWER_ON(phy)))
> @@ -212,9 +223,10 @@ bool bxt_ddi_phy_is_enabled(struct drm_i915_private 
> *dev_priv,
>   return false;
>   }
>  
> - if (phy == DPIO_PHY1 &&
> - !(I915_READ(BXT_PORT_REF_DW3(DPIO_PHY1)) & GRC_DONE)) {
> - DRM_DEBUG_DRIVER("DDI PHY 1 powered, but GRC isn't done\n");
> + if (phy_info->rcomp_phy == -1 &&
> + !(I915_READ(BXT_PORT_REF_DW3(phy)) & GRC_DONE)) {
> + DRM_DEBUG_DRIVER("DDI PHY %d powered, but GRC isn't done\n",
> +  phy);
>  
>   return false;
>   }
> @@ -259,14 +271,15 @@ static void bxt_phy_wait_grc_done(struct 
> drm_i915_private *dev_priv,
>   DRM_ERROR("timeout waiting for PHY%d GRC\n", phy);
>  }
>  
> -void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy)
> +static void _bxt_ddi_phy_init(struct drm_i915_private *dev_priv,
> +   enum dpio_phy phy)
>  {
>   const struct bxt_ddi_phy_info *phy_info = _ddi_phy_info[phy];
>   u32 val;
>  
>   if (bxt_ddi_phy_is_enabled(dev_priv, phy)) {
>   /* Still read out the GRC value for state verification */
> - if (phy == DPIO_PHY0)
> + if (phy_info->rcomp_phy != -1)
>   dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, phy);
>  
>   if (bxt_ddi_phy_verify_state(dev_priv, phy)) {
> @@ -336,30 +349,32 @@ void bxt_ddi_phy_init(struct drm_i915_private 
> *dev_priv, enum dpio_phy phy)
>   val |= OCL2_LDOFUSE_PWR_DIS;
>   I915_WRITE(BXT_PORT_CL1CM_DW30(phy), val);
>  
> - if (phy == DPIO_PHY0) {
> + if (phy_info->rcomp_phy != -1) {
>   uint32_t grc_code;
>   /*
>    * PHY0 isn't connected to an RCOMP resistor so copy over
>    * the corresponding calibrated value from PHY1, and disable
>    * the automatic calibration on PHY0.
>    */
> - val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, DPIO_PHY1);
> + val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv,
> +   phy_info->rcomp_phy);
>   grc_code = val << GRC_CODE_FAST_SHIFT |
>  

[Intel-gfx] [PATCH 8/9] drm/i915: Add location of the Rcomp resistor to bxt_ddi_phy_info

2016-10-05 Thread Ander Conselvan de Oliveira
Use struct bxt_ddi_phy_info to hold information of where the Rcomp
resistor is located, instead of hard coding it in the init sequence.

Note that this moves the enabling of the phy with the Rcomp resistor out
of the power well enable code. That should be safe since
bxt_ddi_phy_init() is called while the power domains lock is held, and
that is the only way that function gets called, so there is no
possibility of a concurrent phy enable caused by a power domain get
call.

Signed-off-by: Ander Conselvan de Oliveira 

---
 drivers/gpu/drm/i915/intel_dpio_phy.c   | 76 +
 drivers/gpu/drm/i915/intel_runtime_pm.c | 15 ---
 2 files changed, 59 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c 
b/drivers/gpu/drm/i915/intel_dpio_phy.c
index 66d750a..e8a75fd 100644
--- a/drivers/gpu/drm/i915/intel_dpio_phy.c
+++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
@@ -124,6 +124,13 @@ struct bxt_ddi_phy_info {
bool dual_channel;
 
/**
+* @rcomp_phy: If -1, indicates this phy has its own rcomp resistor.
+* Otherwise the GRC value will be copied from the phy indicated by
+* this field.
+*/
+   enum dpio_phy rcomp_phy;
+
+   /**
 * @channel: struct containing per channel information.
 */
struct {
@@ -137,6 +144,7 @@ struct bxt_ddi_phy_info {
 static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
[DPIO_PHY0] = {
.dual_channel = true,
+   .rcomp_phy = DPIO_PHY1,
 
.channel = {
[DPIO_CH0] = { .port = PORT_B },
@@ -145,6 +153,7 @@ static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
},
[DPIO_PHY1] = {
.dual_channel = false,
+   .rcomp_phy = -1,
 
.channel = {
[DPIO_CH0] = { .port = PORT_A },
@@ -152,6 +161,7 @@ static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
},
 };
 
+static u32 bxt_phy_port_mask(const struct bxt_ddi_phy_info *phy_info)
 {
return (phy_info->dual_channel * BIT(phy_info->channel[DPIO_CH1].port)) 
|
BIT(phy_info->channel[DPIO_CH0].port);
@@ -199,6 +209,7 @@ void bxt_ddi_phy_set_signal_level(struct drm_i915_private 
*dev_priv,
 bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
enum dpio_phy phy)
 {
+   const struct bxt_ddi_phy_info *phy_info = _ddi_phy_info[phy];
enum port port;
 
if (!(I915_READ(BXT_P_CR_GT_DISP_PWRON) & GT_DISPLAY_POWER_ON(phy)))
@@ -212,9 +223,10 @@ bool bxt_ddi_phy_is_enabled(struct drm_i915_private 
*dev_priv,
return false;
}
 
-   if (phy == DPIO_PHY1 &&
-   !(I915_READ(BXT_PORT_REF_DW3(DPIO_PHY1)) & GRC_DONE)) {
-   DRM_DEBUG_DRIVER("DDI PHY 1 powered, but GRC isn't done\n");
+   if (phy_info->rcomp_phy == -1 &&
+   !(I915_READ(BXT_PORT_REF_DW3(phy)) & GRC_DONE)) {
+   DRM_DEBUG_DRIVER("DDI PHY %d powered, but GRC isn't done\n",
+phy);
 
return false;
}
@@ -259,14 +271,15 @@ static void bxt_phy_wait_grc_done(struct drm_i915_private 
*dev_priv,
DRM_ERROR("timeout waiting for PHY%d GRC\n", phy);
 }
 
-void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy)
+static void _bxt_ddi_phy_init(struct drm_i915_private *dev_priv,
+ enum dpio_phy phy)
 {
const struct bxt_ddi_phy_info *phy_info = _ddi_phy_info[phy];
u32 val;
 
if (bxt_ddi_phy_is_enabled(dev_priv, phy)) {
/* Still read out the GRC value for state verification */
-   if (phy == DPIO_PHY0)
+   if (phy_info->rcomp_phy != -1)
dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, phy);
 
if (bxt_ddi_phy_verify_state(dev_priv, phy)) {
@@ -336,30 +349,32 @@ void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, 
enum dpio_phy phy)
val |= OCL2_LDOFUSE_PWR_DIS;
I915_WRITE(BXT_PORT_CL1CM_DW30(phy), val);
 
-   if (phy == DPIO_PHY0) {
+   if (phy_info->rcomp_phy != -1) {
uint32_t grc_code;
/*
 * PHY0 isn't connected to an RCOMP resistor so copy over
 * the corresponding calibrated value from PHY1, and disable
 * the automatic calibration on PHY0.
 */
-   val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, DPIO_PHY1);
+   val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv,
+ phy_info->rcomp_phy);
grc_code = val << GRC_CODE_FAST_SHIFT |
   val << GRC_CODE_SLOW_SHIFT |
   val;
-   I915_WRITE(BXT_PORT_REF_DW6(DPIO_PHY0), grc_code);
+