Re: [PATCH v2 8/8] drm/i915: Deduplicate the code to fill the aux message header

Ramalingam C
2018-02-23T11:24:55Z

With minor suggestions:

Reviewed-by: Ramalingam C <ramalingam.c@intel.com>

On Friday 23 February 2018 02:58 AM, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We have two instances of the code to fill out the header for the aux
> message. Pull it into a small helper.
>
> v2: Rebase due to txbuf[] changes
>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Ramalingam C <ramalingam.c@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp.c | 32 ++++++++++++++++++++------------
> 1 file changed, 20 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 0d699d230b77..e04aaa182d4c 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1240,6 +1240,17 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
>
> #define BARE_ADDRESS_SIZE 3
> #define HEADER_SIZE (BARE_ADDRESS_SIZE + 1)
> +
> +static void
> +intel_dp_aux_header(u8 txbuf[HEADER_SIZE],
> + const struct drm_dp_aux_msg *msg)
> +{
> + txbuf[0] = (msg->request << 4) | ((msg->address >> 16) & 0xf);
> + txbuf[1] = (msg->address >> 8) & 0xff;
> + txbuf[2] = msg->address & 0xff;
> + txbuf[3] = msg->size - 1;
> +}
> +
> static ssize_t
> intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
> {
> @@ -1248,11 +1259,7 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
> size_t txsize, rxsize;
> int ret;
>
> - txbuf[0] = (msg->request << 4) |
> - ((msg->address >> 16) & 0xf);
> - txbuf[1] = (msg->address >> 8) & 0xff;
> - txbuf[2] = msg->address & 0xff;
> - txbuf[3] = msg->size - 1;
> + intel_dp_aux_header(txbuf, msg);
>
> switch (msg->request & ~DP_AUX_I2C_MOT) {
> case DP_AUX_NATIVE_WRITE:
> @@ -5068,7 +5075,12 @@ int intel_dp_hdcp_write_an_aksv(struct intel_digital_port *intel_dig_port,
> u8 *an)
> {
> struct intel_dp *intel_dp = enc_to_intel_dp(&intel_dig_port->base.base);
> - uint8_t txbuf[4+5] = {}, rxbuf[2], reply = 0;
> + static const struct drm_dp_aux_msg msg = {
> + .request = DP_AUX_NATIVE_WRITE,
> + .address = DP_AUX_HDCP_AKSV,
> + .size = DRM_HDCP_KSV_LEN,
> + };
> + uint8_t txbuf[HEADER_SIZE + DRM_HDCP_KSV_LEN] = {}, rxbuf[2], reply = 0;
Replacing numbers with macros could be moved to the previous patch of
the series.
> ssize_t dpcd_ret;
> int ret;
>
> @@ -5086,13 +5098,9 @@ int intel_dp_hdcp_write_an_aksv(struct intel_digital_port *intel_dig_port,
> * we were writing the data, and then tickle the hardware to output the
> * data once the header is sent out.
> */
> - txbuf[0] = (DP_AUX_NATIVE_WRITE << 4) |
> - ((DP_AUX_HDCP_AKSV >> 16) & 0xf);
> - txbuf[1] = (DP_AUX_HDCP_AKSV >> 8) & 0xff;
> - txbuf[2] = DP_AUX_HDCP_AKSV & 0xff;
> - txbuf[3] = DRM_HDCP_KSV_LEN - 1;
> + intel_dp_aux_header(txbuf, &msg);
>
> - ret = intel_dp_aux_xfer(intel_dp, txbuf, sizeof(txbuf),
> + ret = intel_dp_aux_xfer(intel_dp, txbuf, HEADER_SIZE + msg.size,
We could use the HEADER_SIZE + DRM_HDCP_KSV_LEN itself for txbuf size,
as they are const anyway.
this also could be moved to the prev patch, so that this patch just adds
a helper for filling the aux header.

--Ram
> rxbuf, sizeof(rxbuf),
> DP_AUX_CH_CTL_AUX_AKSV_SELECT);
> if (ret < 0) {