Quoting Ville Syrjälä (2018-02-20 17:49:43)
> On Tue, Feb 20, 2018 at 05:30:51PM +0000, Chris Wilson wrote:
> > Quoting Ville Syrjala (2018-02-20 17:05:23)
> > > @@ -1089,7 +1089,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
> > > struct intel_digital_port *intel_dig_port =
> > > dp_to_dig_port(intel_dp);
> > > struct drm_i915_private *dev_priv =
> > > to_i915(intel_dig_port->base.base.dev);
> > > - i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg;
> > > + i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg(intel_dp);
> > > uint32_t aux_clock_divider;
> > > int i, ret, recv_bytes;
> > > uint32_t status;
> > > @@ -1154,7 +1154,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
> > > for (try = 0; try < 5; try++) {
> > > /* Load the send data into the aux channel data
> > > registers */
> > > for (i = 0; i < send_bytes; i += 4)
> > > - I915_WRITE(intel_dp->aux_ch_data_reg[i >>
> > > 2],
> > > +
> > > I915_WRITE(intel_dp->aux_ch_data_reg(intel_dp, i >> 2),
> > > intel_dp_pack_aux(send + i,
> > > send_bytes -
> > > i));
> > >
> > > @@ -1239,7 +1239,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
> > > recv_bytes = recv_size;
> > >
> > > for (i = 0; i < recv_bytes; i += 4)
> > > - intel_dp_unpack_aux(I915_READ(intel_dp->aux_ch_data_reg[i
> > > >> 2]),
> > > +
> > > intel_dp_unpack_aux(I915_READ(intel_dp->aux_ch_data_reg(intel_dp, i >>
> > > 2)),
> > > recv + i, recv_bytes - i);
> >
> > I might have created data_reg[5] locals for intel_dp_aux_ch(), and even
> > consider intel_dp->aux_ch_data_regs fill the entire reg[5] array in one
> > pass.
>
> Hmm. We do use a 'ch_ctl' local for the ctl reg so something
> like that wouldn't feel totally out of place.
>
> This is the only caller so not sure if there's much point in having the
> vfuncs populate the entire array.
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 005735a7fc29..787c0aa45163 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1089,7 +1089,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
> struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> struct drm_i915_private *dev_priv =
> to_i915(intel_dig_port->base.base.dev);
> - i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg(intel_dp);
> + i915_reg_t ch_ctl, ch_data[5];
> uint32_t aux_clock_divider;
> int i, ret, recv_bytes;
> uint32_t status;
> @@ -1097,6 +1097,10 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
> bool has_aux_irq = HAS_AUX_IRQ(dev_priv);
> bool vdd;
>
> + ch_ctl = intel_dp->aux_ch_ctl_reg(intel_dp);
> + for (i = 0; i < ARRAY_SIZE(ch_data); i++)
> + ch_data[i] = intel_dp->aux_ch_data_reg(intel_dp, i);
This has my vote.
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx