From nobody Sun Feb 8 21:48:14 2026 Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA29E1F91EB for ; Fri, 17 Jan 2025 08:56:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104207; cv=none; b=K5tzMXnILbhf8iuNfnBGTuFznnH2RxfuvvHtzFq103uj1K5BbpS/HFNBspD/rlYFr8rt+c3NayKh25RuCkjhasFKKrcCCrbs5N2CaSClIgGBprTifKXs0CcZeHv/ku8E3Z0byAz9SnN4dmUGxDPLGFhYXa0ut/dfxqwdT0+p0uA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104207; c=relaxed/simple; bh=ozBueI3BM9vEKFl7dBLTAY6qFYKCUTl49qCghNM3Sh4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nrrNZ6pzEQBCc4PI94rPhxEjO4zAm//JX9EOgMtzCdiyzNoZe16nghH/dmZvpXACcIdaJrzDFKiNEKFc5cuLBvhyJL6wo93V7YhJxmEwkvx3NA20uNce0aVp4lLm0x7nvEIgCyCp1yMo+x8l83cWELBY6qv/+1z/XXHsJfpgYeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=wuHbyQQ3; arc=none smtp.client-ip=209.85.208.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="wuHbyQQ3" Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-3003c0c43c0so18815271fa.1 for ; Fri, 17 Jan 2025 00:56:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737104203; x=1737709003; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=qU8230/ZjgdwGUT6DyI0pwq3VTU/dwcpTjuzDvMxMB4=; b=wuHbyQQ3yvQo+SysDlSjIjkqHfIJBcVcrpGY7LOPxXPfvS5s4JvylGjQRg2wOeGIQo bl2gyTO5x5sgmbWrhoPsEoOHqN2KPfiFuH/ReWxBVrneZ5l77V0wUc+0JqHmFBHxpeS8 SNcAezu3IF2o2e82jxiQHKIMGqXARYU21nDsOeWS2uDa3gBKd3y9ffnCHGfvymoQdYiK C4FqCCTBjRv0wI3XofXvfhxgxVZGRq/uZUcFFAMp9hjRG/2i15YnKCP0b8Aa/Zhn5jhq HLFUHczi/QaPYkgxB3Yu1d/OMClPMwYWtRcA7DdeUJeE0fvkVAnkLZpHwoxMkQRAgSXJ O28Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737104203; x=1737709003; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qU8230/ZjgdwGUT6DyI0pwq3VTU/dwcpTjuzDvMxMB4=; b=wHQ9pwp60+InboA666yStxBGhxuUcBhAxRkZVZNrCYYed/CYfdMTyczm+aSzn/RJNY waGr6YHz3cP4HQ4SU2pcZyuFSFtyiAzaO9lXzFAdqQN0bOpT5kVMpBYPiLrnaLuM3PXd ejuMgH/LMzHos926zqHBDwMwTehZJqtT8lV/NhXcM/G48+7PuC4MgyRngkBoTgS9uXKd 5a+dQD79rlJkneduOxPu3mq4Pr0bCncUb2PW9rD2trKPbuTJVQaSfzzivHsfu8TJEFVV 1ShMPTngttoOioUwR0dgwfr3Z8xzAiuvg7WAaoxC8Jv1hsv71FxS1z4Eb+fHniwIuAGM eMRw== X-Forwarded-Encrypted: i=1; AJvYcCVIRrH1nyXHrGOXXnT0SM8RRrfavn/YvGK9oQqlvLpaJ2EeO5cX+VDAxks+bvlcywod4Y83L9zhw5ZVsg0=@vger.kernel.org X-Gm-Message-State: AOJu0Yydx15AHutAB95UrOd4hMvslP8TqGxb0QNomvMQRIvhiU+oTVx/ PjgARPYQz0jQ3frX8OoFdrXPAPo0Dzje+RqYGt34PzKH8EIfWsnygCqzSanH3Eo= X-Gm-Gg: ASbGncvNErjgrD919EKtvDf8j1rlpyypHY59Ft4Zkg1oKOMPMZq+ngqLjhzkP9iaz0N 6mUWOWbJJMKmgMIZLrexWUMm0eGV0Dqd6O5co3Hc0N/C8A3VTT8/wsRihRG4ErfogQPOI4bc4kv Wn6qiNYslnZo3plWCrGxxQpTdGDQFCu3VNCbl3ZfP3THA9WS+Wwy7ca48gWC3Ezkt+ZCKJU99US p8dG9CIXMVV8F/fZfh6zN4Bv1hnFrxACxQUX7YsJI5uf0cIDc38pAEnhbBhbJAU X-Google-Smtp-Source: AGHT+IHGAXJy603DxK6zThF85N9QGM4x+a7NYOEkGBzpisAMqMGB+KgwWYbrNjj3TCf2TZ7YbWkVhQ== X-Received: by 2002:a2e:a4c9:0:b0:302:1c90:58d9 with SMTP id 38308e7fff4ca-3072ca7fa0bmr4671971fa.16.1737104203024; Fri, 17 Jan 2025 00:56:43 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3072a330764sm3402101fa.3.2025.01.17.00.56.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2025 00:56:41 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 17 Jan 2025 10:56:36 +0200 Subject: [PATCH RFC 1/7] drm/display: dp: change drm_dp_dpcd_read_link_status() return Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250117-drm-rework-dpcd-access-v1-1-7fc020e04dbc@linaro.org> References: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> In-Reply-To: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6333; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=ozBueI3BM9vEKFl7dBLTAY6qFYKCUTl49qCghNM3Sh4=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ3qXtGui6gGpb/Nm6ZuUfklesYshKnChmpBDQOjL6+5K0 wu0uG91MhqzMDByMciKKbL4FLRMjdmUHPZhx9R6mEGsTCBTGLg4BWAiimIcDJtkMp8cCuVT4heb tXaDikLoY/1DIYXSu5Q/5e1wknZdGpuYlmG7xOqVykuTx5abtv9YKjhrxYPtkQGKCYcesCfN7Hq hrfG5aR1nPQ+P31vLR0WbPBmXy5TxzF8gzOGjvnt5kf7k99wpTbr7ZE75936Y1srhL/u5QaZNtP xLeax1SfoqGd9zfBdWJsznvS+uvYvxWuiPlQ3vXY/aWE5R3acie/bkqYXczGfEK/lYpk16lGte+ 0wq8erXtJllHlyus8I8a4rZPafWRzHXT3F9/pOFc/2LBwvm7TXVz7W9US/25muayyIrobwPD/QL vLwfCle+CFzDf0U98++ppqCDYqfzz6gUbeA3vD/f01YaAA== X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A drm_dp_dpcd_read_link_status() follows the "return error code or number of bytes read" protocol, with the code returning less bytes than requested in case of some errors. However most of the drivers (except the drm/msm one) interpreted that as "return error code in case of any error". Move return len check to drm_dp_dpcd_read_link_status() and make drm/msm/dp follow that protocol too. Signed-off-by: Dmitry Baryshkov Acked-by: Jani Nikula --- drivers/gpu/drm/display/drm_dp_helper.c | 16 +++++++++--- drivers/gpu/drm/msm/dp/dp_ctrl.c | 45 ++++++++++++++++++-----------= ---- drivers/gpu/drm/msm/dp/dp_link.c | 17 ++++++------- 3 files changed, 44 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/disp= lay/drm_dp_helper.c index da3c8521a7fa7d3c9761377363cdd4b44ab1106e..809c65dcb58983693fb335b8875= 9a66919410114 100644 --- a/drivers/gpu/drm/display/drm_dp_helper.c +++ b/drivers/gpu/drm/display/drm_dp_helper.c @@ -716,14 +716,22 @@ EXPORT_SYMBOL(drm_dp_dpcd_write); * @aux: DisplayPort AUX channel * @status: buffer to store the link status in (must be at least 6 bytes) * - * Returns the number of bytes transferred on success or a negative error - * code on failure. + * Returns the zero on success or a negative error code on failure. */ int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux, u8 status[DP_LINK_STATUS_SIZE]) { - return drm_dp_dpcd_read(aux, DP_LANE0_1_STATUS, status, - DP_LINK_STATUS_SIZE); + int ret; + + ret =3D drm_dp_dpcd_read(aux, DP_LANE0_1_STATUS, status, + DP_LINK_STATUS_SIZE); + if (ret < 0) + return ret; + + if (ret < DP_LINK_STATUS_SIZE) + return -EPROTO; + + return 0; } EXPORT_SYMBOL(drm_dp_dpcd_read_link_status); =20 diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_c= trl.c index bc2ca8133b790fc049e18ab3b37a629558664dd4..8e4fdc0eae7ce218bdcb1aa03bd= ed2f2a61c4b92 100644 --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c @@ -1100,20 +1100,6 @@ static bool msm_dp_ctrl_train_pattern_set(struct msm= _dp_ctrl_private *ctrl, return ret =3D=3D 1; } =20 -static int msm_dp_ctrl_read_link_status(struct msm_dp_ctrl_private *ctrl, - u8 *link_status) -{ - int ret =3D 0, len; - - len =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); - if (len !=3D DP_LINK_STATUS_SIZE) { - DRM_ERROR("DP link status read failed, err: %d\n", len); - ret =3D -EINVAL; - } - - return ret; -} - static int msm_dp_ctrl_link_train_1(struct msm_dp_ctrl_private *ctrl, int *training_step) { @@ -1140,9 +1126,11 @@ static int msm_dp_ctrl_link_train_1(struct msm_dp_ct= rl_private *ctrl, for (tries =3D 0; tries < maximum_retries; tries++) { drm_dp_link_train_clock_recovery_delay(ctrl->aux, ctrl->panel->dpcd); =20 - ret =3D msm_dp_ctrl_read_link_status(ctrl, link_status); - if (ret) + ret =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); + if (ret < 0) { + DRM_ERROR("DP link status read failed, err: %d\n", ret); return ret; + } =20 if (drm_dp_clock_recovery_ok(link_status, ctrl->link->link_params.num_lanes)) { @@ -1252,9 +1240,11 @@ static int msm_dp_ctrl_link_train_2(struct msm_dp_ct= rl_private *ctrl, for (tries =3D 0; tries <=3D maximum_retries; tries++) { drm_dp_link_train_channel_eq_delay(ctrl->aux, ctrl->panel->dpcd); =20 - ret =3D msm_dp_ctrl_read_link_status(ctrl, link_status); - if (ret) + ret =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); + if (ret) { + DRM_ERROR("DP link status read failed, err: %d\n", ret); return ret; + } =20 if (drm_dp_channel_eq_ok(link_status, ctrl->link->link_params.num_lanes)) { @@ -1804,8 +1794,13 @@ static bool msm_dp_ctrl_channel_eq_ok(struct msm_dp_= ctrl_private *ctrl) { u8 link_status[DP_LINK_STATUS_SIZE]; int num_lanes =3D ctrl->link->link_params.num_lanes; + int ret; =20 - msm_dp_ctrl_read_link_status(ctrl, link_status); + ret =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); + if (ret < 0) { + DRM_ERROR("DP link status read failed, err: %d\n", ret); + return false; + } =20 return drm_dp_channel_eq_ok(link_status, num_lanes); } @@ -1863,7 +1858,11 @@ int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_c= trl) if (!msm_dp_catalog_link_is_connected(ctrl->catalog)) break; =20 - msm_dp_ctrl_read_link_status(ctrl, link_status); + rc =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); + if (rc < 0) { + DRM_ERROR("DP link status read failed, err: %d\n", rc); + break; + } =20 rc =3D msm_dp_ctrl_link_rate_down_shift(ctrl); if (rc < 0) { /* already in RBR =3D 1.6G */ @@ -1888,7 +1887,11 @@ int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_c= trl) if (!msm_dp_catalog_link_is_connected(ctrl->catalog)) break; =20 - msm_dp_ctrl_read_link_status(ctrl, link_status); + rc =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); + if (rc < 0) { + DRM_ERROR("DP link status read failed, err: %d\n", rc); + break; + } =20 if (!drm_dp_clock_recovery_ok(link_status, ctrl->link->link_params.num_lanes)) diff --git a/drivers/gpu/drm/msm/dp/dp_link.c b/drivers/gpu/drm/msm/dp/dp_l= ink.c index 1a1fbb2d7d4f2afcaace85d97b744d03017d37ce..431ee86a939343f9c7f2de51703= f8f76f5580934 100644 --- a/drivers/gpu/drm/msm/dp/dp_link.c +++ b/drivers/gpu/drm/msm/dp/dp_link.c @@ -714,21 +714,20 @@ static int msm_dp_link_parse_request(struct msm_dp_li= nk_private *link) =20 static int msm_dp_link_parse_sink_status_field(struct msm_dp_link_private = *link) { - int len; + int ret; =20 link->prev_sink_count =3D link->msm_dp_link.sink_count; - len =3D drm_dp_read_sink_count(link->aux); - if (len < 0) { + ret =3D drm_dp_read_sink_count(link->aux); + if (ret < 0) { DRM_ERROR("DP parse sink count failed\n"); - return len; + return ret; } - link->msm_dp_link.sink_count =3D len; + link->msm_dp_link.sink_count =3D ret; =20 - len =3D drm_dp_dpcd_read_link_status(link->aux, - link->link_status); - if (len < DP_LINK_STATUS_SIZE) { + ret =3D drm_dp_dpcd_read_link_status(link->aux, link->link_status); + if (ret < 0) { DRM_ERROR("DP link status read failed\n"); - return len; + return ret; } =20 return msm_dp_link_parse_request(link); --=20 2.39.5 From nobody Sun Feb 8 21:48:14 2026 Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EC011F9AB4 for ; Fri, 17 Jan 2025 08:56:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104209; cv=none; b=p19p5qDxVnrsaB8KRYOnzbpSFntDopTbE2MVvtyyat7T23DMAZtkU8VWOd/SwBDmZtlTaaH7DUU+6umaofecjo2EMHC8rwwsD3lNXmLriEEjAk+JXrc7oIe7CHQt7xvTetf2x34yLvFOIrCh3gIThAmBTIGUgXp5TzmIpPTN+gE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104209; c=relaxed/simple; bh=DNcZKhPphZjqikPskSkFBsKleO9AnJ+79jeieCaJFks=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tHb0MajIOBhtDV/3FYFBHdfk6Uvk2Nog2NHAjXeo3CajKwGuhaJ96F8dFPihfHW9PcVm0CaYxF7O55o91eEG4sl5IUduMmDM8JBpiaTIrTYZ2S3BTvDmkpLXcqLV04Iwb2sXuBknmjWGAZscJpbmhiyzFIFbvKP1J+pqbEskfXk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=kG9ZyQFD; arc=none smtp.client-ip=209.85.208.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="kG9ZyQFD" Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-3003e203acaso16973031fa.1 for ; Fri, 17 Jan 2025 00:56:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737104205; x=1737709005; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Uw0PYTWvXGZN0XXOXiRMt4CYqzLIv8o5kdoflMTCxBQ=; b=kG9ZyQFDkMuqku8wW7yFiFnwb7fYLD7hWGQePYvX+w7v/ZnFcpV31FuzVGa0e0eENp 98bG2IrXgYJ3VEtsa39wjHuEvRwIaNAoRG3ERJm2lWEfWAF3eaqmeGVw33DVC6Z7oCJC CowZIuxcAM1uLTBb4HC9H+ZLzHwc1piCkhHpA01y4UJ/meHgvk7qtj5NaJm4TQ7Qx1Zt TBmVcTs0eNkQGhbeDbMVlL67dV/jJ6H/q/2+dr9frrhDInh3Stxl9aNGwvYn9HVbbnz9 HGIufyscpHWaHg8w4Nay/v9F++JoW0ggyrbQb8MVez0Yhma0jHev+UNYhKWVVH++N6Wb yKHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737104205; x=1737709005; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Uw0PYTWvXGZN0XXOXiRMt4CYqzLIv8o5kdoflMTCxBQ=; b=f6b8IuMsHxeUV1lQsFw1KtUiceYSy+Y4fIhVQjlfyopfkk8gR69CZTKw0ekyABNft6 NwTHM7eG4XBoGLgIJYqwR9JMNfNFm8vqK5MEk+FpcoyMjbdcavyLFqAUxxf0U0K8nxTF hhdGY7G7IGp1ObbkuFpnf/USPcsJBphGxkZq9zFW/4HWOCvBIK7Mt659sf1eAaj82xUR Y5uMKg/OmpVENRxbqcqN29q9dOrWiKJ782Fr0vIh9spoopKYLy5aG6pXSHC9qa+p+mYN ON7mnQ+2rbjo52A+qIfDHtwTwo7Xy1+hAEKdTgEsf0IrNvHvn4K0YT6ltLoheaRGm4Rj Hg6Q== X-Forwarded-Encrypted: i=1; AJvYcCXMi5tRgpdM6g+Ul+kcS45J5lb3xjmRF1jFNbzsjoKZ9IdPOjthv4iu1ASdNLHUiSd4ZDRpb3T61CNjZrY=@vger.kernel.org X-Gm-Message-State: AOJu0YxYY7J3nPRNmseLpcubvMH3jJ83HO+bDhR1ku2TS48eky59P5T6 8ESN7XAIneN3pTvWf8WgO2PENvBDEpoYY1Ny5+2F7HlQ+YZUUGWmEs3ZSMzo4qg= X-Gm-Gg: ASbGncuElj94rvlqhFlmS1pI1VN8pRvvu4UOalKGbQPt4DE+xqvXz2060YJ2C1sP7KB EA3zijswOB8DDua/2eJS3WgTAduGTYFZyoiRLIO6OaTu3Lfbn5k02QxTwBgki+dR3BVgpPc7jhM OVSCEkohH0PxrcE6wTvXPMv+s5eRfoi6bV5nHnTOSIUpogUeFrHlGl/wktZirbk3Dyzm4l0MWis wzdEUo3KBRMyliFLRZAhgBKT68HawftpscYl6HGtiLoipltPExM7kDv242eD9LD X-Google-Smtp-Source: AGHT+IFAk4rF5mbTcFLJ/pbll3KPD/l3xZj5+xMa71cK6maSe664yCOXJyvv/2medmkgXq3KTeOyQQ== X-Received: by 2002:a2e:be9d:0:b0:300:3a15:8f2a with SMTP id 38308e7fff4ca-3072ca60c6amr6229501fa.2.1737104205372; Fri, 17 Jan 2025 00:56:45 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3072a330764sm3402101fa.3.2025.01.17.00.56.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2025 00:56:44 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 17 Jan 2025 10:56:37 +0200 Subject: [PATCH RFC 2/7] drm/display: dp: implement new access helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250117-drm-rework-dpcd-access-v1-2-7fc020e04dbc@linaro.org> References: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> In-Reply-To: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=13606; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=DNcZKhPphZjqikPskSkFBsKleO9AnJ+79jeieCaJFks=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnihtFIXi+twbKEsS8KONvOTAmsgTtU1stn+Zwo wPjeaMkxciJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ4obRQAKCRCLPIo+Aiko 1QrxB/4kdGoIrc9ZoWP4S+0v06FxENqP2AoN/Eo5N2Yanu3ft4rAkCW7cWFMPIeYLNbaCt7ElRp v46dzWBk8wXZ68gkjUGcbXJvwx3eftPA2gSgDXVe4eQjD3VJs2KoO4lWt03xxqBmTquhQktTcLK zAnK+JLtMatCDVWlVFqXbHtiSfMlYKobvdLKLUlR3taIyxWy9GG6bkPFIB1BWwo9ON9xGp0en+L MTi0kQwOq3zmU/sPZJ2wK0Bf+GQns4/e0fdZIeobmpqv1H67x52IhHiFmFNcHR9kIdGsAQnr0ha GJYpPeGZZSs6ffTBTP83y1g8UyJfBB/bTJ6z+GVSPvlguGWL X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Existing DPCD access functions return an error code or the number of bytes being read / write in case of partial access. However a lot of drivers either (incorrectly) ignore partial access or mishandle error codes. In other cases this results in a boilerplate code which compares returned value with the size. Implement new set of DPCD access helpers, which ignore partial access, always return 0 or an error code. Implement existing helpers using the new functions to ensure backwards compatibility. Suggested-by: Jani Nikula Signed-off-by: Dmitry Baryshkov Acked-by: Jani Nikula --- drivers/gpu/drm/display/drm_dp_helper.c | 42 +++++++------- drivers/gpu/drm/display/drm_dp_mst_topology.c | 27 +++++---- include/drm/display/drm_dp_helper.h | 81 +++++++++++++++++++++++= +++- include/drm/display/drm_dp_mst_helper.h | 10 ++-- 4 files changed, 119 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/disp= lay/drm_dp_helper.c index 809c65dcb58983693fb335b88759a66919410114..5a693f2779284467e2d05b9d8b2= c2bee0ad6c112 100644 --- a/drivers/gpu/drm/display/drm_dp_helper.c +++ b/drivers/gpu/drm/display/drm_dp_helper.c @@ -495,13 +495,13 @@ EXPORT_SYMBOL(drm_dp_bw_code_to_link_rate); =20 static inline void drm_dp_dump_access(const struct drm_dp_aux *aux, - u8 request, uint offset, void *buffer, int ret) + u8 request, uint offset, void *buffer, size_t size, int ret) { const char *arrow =3D request =3D=3D DP_AUX_NATIVE_READ ? "->" : "<-"; =20 - if (ret > 0) + if (ret =3D=3D 0) drm_dbg_dp(aux->drm_dev, "%s: 0x%05x AUX %s (ret=3D%3d) %*ph\n", - aux->name, offset, arrow, ret, min(ret, 20), buffer); + aux->name, offset, arrow, ret, min_t(int, size, 20), buffer); else drm_dbg_dp(aux->drm_dev, "%s: 0x%05x AUX %s (ret=3D%3d)\n", aux->name, offset, arrow, ret); @@ -559,8 +559,10 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, = u8 request, if (ret >=3D 0) { native_reply =3D msg.reply & DP_AUX_NATIVE_REPLY_MASK; if (native_reply =3D=3D DP_AUX_NATIVE_REPLY_ACK) { - if (ret =3D=3D size) + if (ret =3D=3D size) { + ret =3D 0; goto unlock; + } =20 ret =3D -EPROTO; } else @@ -602,9 +604,9 @@ int drm_dp_dpcd_probe(struct drm_dp_aux *aux, unsigned = int offset) int ret; =20 ret =3D drm_dp_dpcd_access(aux, DP_AUX_NATIVE_READ, offset, &buffer, 1); - WARN_ON(ret =3D=3D 0); + WARN_ON(ret =3D=3D -EPROTO); =20 - drm_dp_dump_access(aux, DP_AUX_NATIVE_READ, offset, &buffer, ret); + drm_dp_dump_access(aux, DP_AUX_NATIVE_READ, offset, &buffer, 1, ret); =20 return ret < 0 ? ret : 0; } @@ -634,21 +636,21 @@ void drm_dp_dpcd_set_powered(struct drm_dp_aux *aux, = bool powered) EXPORT_SYMBOL(drm_dp_dpcd_set_powered); =20 /** - * drm_dp_dpcd_read() - read a series of bytes from the DPCD + * drm_dp_dpcd_read_data() - read a series of bytes from the DPCD * @aux: DisplayPort AUX channel (SST or MST) * @offset: address of the (first) register to read * @buffer: buffer to store the register values * @size: number of bytes in @buffer * - * Returns the number of bytes transferred on success, or a negative error + * Returns zero (0) on success, or a negative error * code on failure. -EIO is returned if the request was NAKed by the sink = or * if the retry count was exceeded. If not all bytes were transferred, this * function returns -EPROTO. Errors from the underlying AUX channel transf= er * function, with the exception of -EBUSY (which causes the transaction to * be retried), are propagated to the caller. */ -ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsigned int offset, - void *buffer, size_t size) +int drm_dp_dpcd_read_data(struct drm_dp_aux *aux, unsigned int offset, + void *buffer, size_t size) { int ret; =20 @@ -671,45 +673,45 @@ ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsi= gned int offset, } =20 if (aux->is_remote) - ret =3D drm_dp_mst_dpcd_read(aux, offset, buffer, size); + ret =3D drm_dp_mst_dpcd_read_data(aux, offset, buffer, size); else ret =3D drm_dp_dpcd_access(aux, DP_AUX_NATIVE_READ, offset, buffer, size); =20 - drm_dp_dump_access(aux, DP_AUX_NATIVE_READ, offset, buffer, ret); + drm_dp_dump_access(aux, DP_AUX_NATIVE_READ, offset, buffer, size, ret); return ret; } -EXPORT_SYMBOL(drm_dp_dpcd_read); +EXPORT_SYMBOL(drm_dp_dpcd_read_data); =20 /** - * drm_dp_dpcd_write() - write a series of bytes to the DPCD + * drm_dp_dpcd_write_data() - write a series of bytes to the DPCD * @aux: DisplayPort AUX channel (SST or MST) * @offset: address of the (first) register to write * @buffer: buffer containing the values to write * @size: number of bytes in @buffer * - * Returns the number of bytes transferred on success, or a negative error + * Returns zero (0) on success, or a negative error * code on failure. -EIO is returned if the request was NAKed by the sink = or * if the retry count was exceeded. If not all bytes were transferred, this * function returns -EPROTO. Errors from the underlying AUX channel transf= er * function, with the exception of -EBUSY (which causes the transaction to * be retried), are propagated to the caller. */ -ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsigned int offset, - void *buffer, size_t size) +int drm_dp_dpcd_write_data(struct drm_dp_aux *aux, unsigned int offset, + void *buffer, size_t size) { int ret; =20 if (aux->is_remote) - ret =3D drm_dp_mst_dpcd_write(aux, offset, buffer, size); + ret =3D drm_dp_mst_dpcd_write_data(aux, offset, buffer, size); else ret =3D drm_dp_dpcd_access(aux, DP_AUX_NATIVE_WRITE, offset, buffer, size); =20 - drm_dp_dump_access(aux, DP_AUX_NATIVE_WRITE, offset, buffer, ret); + drm_dp_dump_access(aux, DP_AUX_NATIVE_WRITE, offset, buffer, size, ret); return ret; } -EXPORT_SYMBOL(drm_dp_dpcd_write); +EXPORT_SYMBOL(drm_dp_dpcd_write_data); =20 /** * drm_dp_dpcd_read_link_status() - read DPCD link status (bytes 0x202-0x2= 07) diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/dr= m/display/drm_dp_mst_topology.c index f8cd094efa3c0bd6f75b52a0410b0910d8026a76..f8db5be53a33e87e94b864ba481= 51354e091f5aa 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -2128,20 +2128,20 @@ drm_dp_port_set_pdt(struct drm_dp_mst_port *port, u= 8 new_pdt, } =20 /** - * drm_dp_mst_dpcd_read() - read a series of bytes from the DPCD via sideb= and + * drm_dp_mst_dpcd_read_data() - read a series of bytes from the DPCD via = sideband * @aux: Fake sideband AUX CH * @offset: address of the (first) register to read * @buffer: buffer to store the register values * @size: number of bytes in @buffer * * Performs the same functionality for remote devices via - * sideband messaging as drm_dp_dpcd_read() does for local + * sideband messaging as drm_dp_dpcd_read_data() does for local * devices via actual AUX CH. * - * Return: Number of bytes read, or negative error code on failure. + * Return: Zero (0) on success, or negative error code on failure. */ -ssize_t drm_dp_mst_dpcd_read(struct drm_dp_aux *aux, - unsigned int offset, void *buffer, size_t size) +int drm_dp_mst_dpcd_read_data(struct drm_dp_aux *aux, + unsigned int offset, void *buffer, size_t size) { struct drm_dp_mst_port *port =3D container_of(aux, struct drm_dp_mst_port, aux); @@ -2151,20 +2151,20 @@ ssize_t drm_dp_mst_dpcd_read(struct drm_dp_aux *aux, } =20 /** - * drm_dp_mst_dpcd_write() - write a series of bytes to the DPCD via sideb= and + * drm_dp_mst_dpcd_write_data() - write a series of bytes to the DPCD via = sideband * @aux: Fake sideband AUX CH * @offset: address of the (first) register to write * @buffer: buffer containing the values to write * @size: number of bytes in @buffer * * Performs the same functionality for remote devices via - * sideband messaging as drm_dp_dpcd_write() does for local + * sideband messaging as drm_dp_dpcd_write_data() does for local * devices via actual AUX CH. * - * Return: number of bytes written on success, negative error code on fail= ure. + * Return: zero (0) on success, negative error code on failure. */ -ssize_t drm_dp_mst_dpcd_write(struct drm_dp_aux *aux, - unsigned int offset, void *buffer, size_t size) +int drm_dp_mst_dpcd_write_data(struct drm_dp_aux *aux, + unsigned int offset, void *buffer, size_t size) { struct drm_dp_mst_port *port =3D container_of(aux, struct drm_dp_mst_port, aux); @@ -3490,9 +3490,8 @@ static int drm_dp_send_dpcd_read(struct drm_dp_mst_to= pology_mgr *mgr, goto fail_free; } =20 - ret =3D min_t(size_t, txmsg->reply.u.remote_dpcd_read_ack.num_bytes, - size); - memcpy(bytes, txmsg->reply.u.remote_dpcd_read_ack.bytes, ret); + memcpy(bytes, txmsg->reply.u.remote_dpcd_read_ack.bytes, size); + ret =3D 0; =20 fail_free: kfree(txmsg); @@ -3530,7 +3529,7 @@ static int drm_dp_send_dpcd_write(struct drm_dp_mst_t= opology_mgr *mgr, if (txmsg->reply.reply_type =3D=3D DP_SIDEBAND_REPLY_NAK) ret =3D -EIO; else - ret =3D size; + ret =3D 0; } =20 kfree(txmsg); diff --git a/include/drm/display/drm_dp_helper.h b/include/drm/display/drm_= dp_helper.h index 8f4054a560396a43750570a8c2e95624039ab8ad..548237a81ef0359dab1ed7df6ef= 0fd1e0c76e0c5 100644 --- a/include/drm/display/drm_dp_helper.h +++ b/include/drm/display/drm_dp_helper.h @@ -522,10 +522,85 @@ struct drm_dp_aux { =20 int drm_dp_dpcd_probe(struct drm_dp_aux *aux, unsigned int offset); void drm_dp_dpcd_set_powered(struct drm_dp_aux *aux, bool powered); -ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsigned int offset, - void *buffer, size_t size); -ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsigned int offset, + +int drm_dp_dpcd_read_data(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size); +int drm_dp_dpcd_write_data(struct drm_dp_aux *aux, unsigned int offset, + void *buffer, size_t size); + +/** + * drm_dp_dpcd_read() - read a series of bytes from the DPCD + * @aux: DisplayPort AUX channel (SST or MST) + * @offset: address of the (first) register to read + * @buffer: buffer to store the register values + * @size: number of bytes in @buffer + * + * Deprecated wrapper around drm_dp_dpcd_read(). + * Returns the number of bytes transferred on success, or a negative error + * code on failure. + */ +static inline ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, + unsigned int offset, + void *buffer, size_t size) +{ + int ret =3D drm_dp_dpcd_read_data(aux, offset, buffer, size); + + if (ret < 0) + return ret; + + return size; +} + +/** + * drm_dp_dpcd_read_byte() - read a single byte from the DPCD + * @aux: DisplayPort AUX channel + * @offset: address of the register to read + * @valuep: location where the value of the register will be stored + * + * Returns zero (0) on success, or a negative error code on failure. + */ +static inline int drm_dp_dpcd_read_byte(struct drm_dp_aux *aux, + unsigned int offset, u8 *valuep) +{ + return drm_dp_dpcd_read_data(aux, offset, valuep, 1); +} + +/** + * drm_dp_dpcd_write_byte() - write a single byte to the DPCD + * @aux: DisplayPort AUX channel + * @offset: address of the register to write + * @value: value to write to the register + * + * Returns zero (0) on success, or a negative error code on failure. + */ +static inline int drm_dp_dpcd_write_byte(struct drm_dp_aux *aux, + unsigned int offset, u8 value) +{ + return drm_dp_dpcd_write_data(aux, offset, &value, 1); +} + +/** + * drm_dp_dpcd_write() - write a series of bytes from the DPCD + * @aux: DisplayPort AUX channel (SST or MST) + * @offset: address of the (first) register to write + * @buffer: buffer containing the values to write + * @size: number of bytes in @buffer + * + * Deprecated wrapper around drm_dp_dpcd_write(). + * Returns the number of bytes transferred on success, or a negative error + * code on failure. + */ +static inline ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, + unsigned int offset, + void *buffer, size_t size) +{ + int ret =3D drm_dp_dpcd_write_data(aux, offset, buffer, size); + + if (ret < 0) + return ret; + + return size; +} =20 /** * drm_dp_dpcd_readb() - read a single byte from the DPCD diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/= drm_dp_mst_helper.h index a80ba457a858f36ac2110a6fdd91d8a1570b58e1..d527b323a7a8c92b93280fcc8cd= 3025e21cdcf02 100644 --- a/include/drm/display/drm_dp_mst_helper.h +++ b/include/drm/display/drm_dp_mst_helper.h @@ -899,10 +899,12 @@ int __must_check drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr, bool sync); =20 -ssize_t drm_dp_mst_dpcd_read(struct drm_dp_aux *aux, - unsigned int offset, void *buffer, size_t size); -ssize_t drm_dp_mst_dpcd_write(struct drm_dp_aux *aux, - unsigned int offset, void *buffer, size_t size); +int drm_dp_mst_dpcd_read_data(struct drm_dp_aux *aux, + unsigned int offset, + void *buffer, size_t size); +int drm_dp_mst_dpcd_write_data(struct drm_dp_aux *aux, + unsigned int offset, + void *buffer, size_t size); =20 int drm_dp_mst_connector_late_register(struct drm_connector *connector, struct drm_dp_mst_port *port); --=20 2.39.5 From nobody Sun Feb 8 21:48:14 2026 Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA2ED1F9EA1 for ; Fri, 17 Jan 2025 08:56:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104212; cv=none; b=CWrgfQ+cdeCgemEtjuS62hX4u0KOHflhMTAK+W/Tjm/tdf2aYICDcn3mCXS4+bxXWQdTgOWtZXJYIVf+pvnNQK5KFAj8PZBZyxhQXU3OdwVxnldLS5XRw5SJ/qmofPjncgVEviZGIhq7WdwYc5s06dNgyKJP0R3qmK7k8LWRC94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104212; c=relaxed/simple; bh=3e5CVm/XCvd2nGt/RiTkySmCWSQDcr7f0uQKBw6OCCU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lE5pRuUDnkGtzmkPeWSZkXHWBp7VSQmKzXOgi5/637V5X41mC1IkguNHqbV3tUzxjZEeNwQL0VR1/+Y6Xltf7s5bB0UFmJUDBs2r5woPEGdvqPO0k9n1J5MaDiNwjQXV+5E99bvGxgEwQH/0oBSgGedic714e6sOovANjeCkS1k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=uHfAbXdS; arc=none smtp.client-ip=209.85.208.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="uHfAbXdS" Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-30229d5b21cso15996501fa.1 for ; Fri, 17 Jan 2025 00:56:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737104208; x=1737709008; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=qb4oveiD4oZ+e9jC2M0t/ZEeRTgoO0cCrmJpAiFB+yY=; b=uHfAbXdSq+jO7WxSzFplYzFU4l6GERv5e39HSjH7tPjDaUXRNnrYwdpv29qDJH0keE lAtI3KWii4ReTKwcbjtrGVa9Ub5btDGFN1k7lQX24mVs1g5giXIWDL9xXsIwQ9i3icB3 39FQHoHjTKs+O0n+5k0x97HbmeVDz+hioyb0jEHCj3MR9JePXvMpA0Ru6gh3UDUPo/ml Z+72kUWH4XmbISGkvRV0KHh2qd9Ph9qSzh8U4AY9v/PEbvi8Iam6COLCfFN/DnoD+fgq ApG47YbvJeYPXaUP2/QhWSe7jNHq4/jLJMDOOItS8c54TPjeNxRC6CnPCoU3ZQraXaj2 Af9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737104208; x=1737709008; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qb4oveiD4oZ+e9jC2M0t/ZEeRTgoO0cCrmJpAiFB+yY=; b=Z6KunNmLkKESKitsyT4CO//qFbM28rxbtolItakUrPKl5+9L8iWa+LYvbAUu9PrkZc KEe8gBcIIkHcUUCX6XFo5hM/+9U/rHex/HB94CgajFNldpU7/e7cCrNXO0Z7omBVteoR OEYHXiFz3oY63QswPE6h6MG3v5SmDS9hXGqktSb9S2o173UQC+PfD8aC+VNAiJwoO3q0 2S9kb8grjesXX92hDzUYg5lqnf5f6tvg3KTRXUAS7d3gplvh6DmXWXy60A/99FgGtrzm UtRwtkqEg65Sac+XDmKbucCAkapQwQzR1FLR0TNY+oFl34YN6XiYDcnC4diTktpMUSbq NjjQ== X-Forwarded-Encrypted: i=1; AJvYcCUNGCwxl7oZA/B2nvuOvBmXdEzge0PQueKcr+bV7t3Cq5P2ZEWHnfXn1QLYd8dphYBJUy5JvrQeqk74s1k=@vger.kernel.org X-Gm-Message-State: AOJu0YzoFyf1wswWcNwGetXmvGm9K0AAhVNmz6IQ6DTJPmjcB67I0N0s AAJavL4ZRCd4Z9nw2S0lcEy4iSHRptKiiV7SvVfs4eO9GBPcx2bo2r72LI+QbG4= X-Gm-Gg: ASbGncsjRsznDztPogj/Gtg+Lcczaz8i8dpfRFK6O4zHDSRTaFD0yhU21Vk6ib4rl14 wfXbx3eaKJztbG4xU3/GqKxFQI4DkkPFayG3P9gIwLX//+kypKQICkAMHp7HbvSrtWPPGwrfcfH 6OYK8VeDANBtiWk6tVelx+7BfEZPDAP/V31J5aKR19zKh1ias7Mm541QMur+5Q86OTDVBg2eNyo UarEj2EwH3IWzkEF21bMRaRHXPtn0dnQDUXtqh8WQqR+zAnaZEFqZ6nt6bwWdVY X-Google-Smtp-Source: AGHT+IHGuEXzW19VI35ZYAK/BV+vp+JPl/VJ09xT8nIcjmwlimXmjWj10OLnaGc77KW1Pt78sUKcJw== X-Received: by 2002:a05:651c:10a2:b0:302:251a:bd21 with SMTP id 38308e7fff4ca-3072cad1ff7mr4228851fa.15.1737104207777; Fri, 17 Jan 2025 00:56:47 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3072a330764sm3402101fa.3.2025.01.17.00.56.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2025 00:56:46 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 17 Jan 2025 10:56:38 +0200 Subject: [PATCH RFC 3/7] drm/display: dp: use new DCPD access helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250117-drm-rework-dpcd-access-v1-3-7fc020e04dbc@linaro.org> References: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> In-Reply-To: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=28191; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=3e5CVm/XCvd2nGt/RiTkySmCWSQDcr7f0uQKBw6OCCU=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnihtFPY0SFxiwxlHBde46VmW/4ukjL4TKTpmlE uPyCMgMT0aJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ4obRQAKCRCLPIo+Aiko 1cfnB/9klIctPkY4XjppfOwPMExEsE1zR5BN8+TDfaTyrooLGnHfxJEo+/WaEp0lBaqOctG3EYO T3t46hXsDTJ2leS6YayOBRMtmREqA+Yt7TjYZ5XXRn/p+uZ96BrncdzEV+lgO+9VS8Q7LURmKTC FdXNwzNC4QF9ngjNjz5VzCkWi316D3mRanW/RkEmxDKEv008VHw9SckH3vqHuJ+3OSe1+uaD4X1 l1y+MDI2YVp0FqPfRMqw5wQmjriCz5lSyR0Vuo20BqjmmIhopo9lpPaPnTM9u/JZIN5cZkqBp09 l8NiACjuM6wu1ktllgenpQAZPEL9Sybipkkciaix8EjFoOF2 X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Switch drm_dp_helper.c to use new set of DPCD read / write helpers. Signed-off-by: Dmitry Baryshkov Acked-by: Jani Nikula Reviewed-by: Lyude Paul --- drivers/gpu/drm/display/drm_dp_helper.c | 309 ++++++++++++----------------= ---- 1 file changed, 118 insertions(+), 191 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/disp= lay/drm_dp_helper.c index 5a693f2779284467e2d05b9d8b2c2bee0ad6c112..a6a64e1897e9aec4cf1c0420a90= 9a917e92fdbaf 100644 --- a/drivers/gpu/drm/display/drm_dp_helper.c +++ b/drivers/gpu/drm/display/drm_dp_helper.c @@ -327,7 +327,7 @@ static int __read_delay(struct drm_dp_aux *aux, const u= 8 dpcd[DP_RECEIVER_CAP_SI if (offset < DP_RECEIVER_CAP_SIZE) { rd_interval =3D dpcd[offset]; } else { - if (drm_dp_dpcd_readb(aux, offset, &rd_interval) !=3D 1) { + if (drm_dp_dpcd_read_byte(aux, offset, &rd_interval) < 0) { drm_dbg_kms(aux->drm_dev, "%s: failed rd interval read\n", aux->name); /* arbitrary default delay */ @@ -358,7 +358,7 @@ int drm_dp_128b132b_read_aux_rd_interval(struct drm_dp_= aux *aux) int unit; u8 val; =20 - if (drm_dp_dpcd_readb(aux, DP_128B132B_TRAINING_AUX_RD_INTERVAL, &val) != =3D 1) { + if (drm_dp_dpcd_read_byte(aux, DP_128B132B_TRAINING_AUX_RD_INTERVAL, &val= ) < 0) { drm_err(aux->drm_dev, "%s: failed rd interval read\n", aux->name); /* default to max */ @@ -723,17 +723,8 @@ EXPORT_SYMBOL(drm_dp_dpcd_write_data); int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux, u8 status[DP_LINK_STATUS_SIZE]) { - int ret; - - ret =3D drm_dp_dpcd_read(aux, DP_LANE0_1_STATUS, status, - DP_LINK_STATUS_SIZE); - if (ret < 0) - return ret; - - if (ret < DP_LINK_STATUS_SIZE) - return -EPROTO; - - return 0; + return drm_dp_dpcd_read_data(aux, DP_LANE0_1_STATUS, status, + DP_LINK_STATUS_SIZE); } EXPORT_SYMBOL(drm_dp_dpcd_read_link_status); =20 @@ -756,30 +747,20 @@ int drm_dp_dpcd_read_phy_link_status(struct drm_dp_au= x *aux, { int ret; =20 - if (dp_phy =3D=3D DP_PHY_DPRX) { - ret =3D drm_dp_dpcd_read(aux, - DP_LANE0_1_STATUS, - link_status, - DP_LINK_STATUS_SIZE); - - if (ret < 0) - return ret; + if (dp_phy =3D=3D DP_PHY_DPRX) + return drm_dp_dpcd_read_data(aux, + DP_LANE0_1_STATUS, + link_status, + DP_LINK_STATUS_SIZE); =20 - WARN_ON(ret !=3D DP_LINK_STATUS_SIZE); - - return 0; - } - - ret =3D drm_dp_dpcd_read(aux, - DP_LANE0_1_STATUS_PHY_REPEATER(dp_phy), - link_status, - DP_LINK_STATUS_SIZE - 1); + ret =3D drm_dp_dpcd_read_data(aux, + DP_LANE0_1_STATUS_PHY_REPEATER(dp_phy), + link_status, + DP_LINK_STATUS_SIZE - 1); =20 if (ret < 0) return ret; =20 - WARN_ON(ret !=3D DP_LINK_STATUS_SIZE - 1); - /* Convert the LTTPR to the sink PHY link status layout */ memmove(&link_status[DP_SINK_STATUS - DP_LANE0_1_STATUS + 1], &link_status[DP_SINK_STATUS - DP_LANE0_1_STATUS], @@ -795,7 +776,7 @@ static int read_payload_update_status(struct drm_dp_aux= *aux) int ret; u8 status; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &status); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &statu= s); if (ret < 0) return ret; =20 @@ -822,21 +803,21 @@ int drm_dp_dpcd_write_payload(struct drm_dp_aux *aux, int ret; int retries =3D 0; =20 - drm_dp_dpcd_writeb(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, - DP_PAYLOAD_TABLE_UPDATED); + drm_dp_dpcd_write_byte(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, + DP_PAYLOAD_TABLE_UPDATED); =20 payload_alloc[0] =3D vcpid; payload_alloc[1] =3D start_time_slot; payload_alloc[2] =3D time_slot_count; =20 - ret =3D drm_dp_dpcd_write(aux, DP_PAYLOAD_ALLOCATE_SET, payload_alloc, 3); - if (ret !=3D 3) { + ret =3D drm_dp_dpcd_write_data(aux, DP_PAYLOAD_ALLOCATE_SET, payload_allo= c, 3); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "failed to write payload allocation %d\n", ret= ); goto fail; } =20 retry: - ret =3D drm_dp_dpcd_readb(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &status); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &statu= s); if (ret < 0) { drm_dbg_kms(aux->drm_dev, "failed to read payload table status %d\n", re= t); goto fail; @@ -992,15 +973,15 @@ bool drm_dp_send_real_edid_checksum(struct drm_dp_aux= *aux, { u8 link_edid_read =3D 0, auto_test_req =3D 0, test_resp =3D 0; =20 - if (drm_dp_dpcd_read(aux, DP_DEVICE_SERVICE_IRQ_VECTOR, - &auto_test_req, 1) < 1) { + if (drm_dp_dpcd_read_byte(aux, DP_DEVICE_SERVICE_IRQ_VECTOR, + &auto_test_req) < 0) { drm_err(aux->drm_dev, "%s: DPCD failed read at register 0x%x\n", aux->name, DP_DEVICE_SERVICE_IRQ_VECTOR); return false; } auto_test_req &=3D DP_AUTOMATED_TEST_REQUEST; =20 - if (drm_dp_dpcd_read(aux, DP_TEST_REQUEST, &link_edid_read, 1) < 1) { + if (drm_dp_dpcd_read_byte(aux, DP_TEST_REQUEST, &link_edid_read) < 0) { drm_err(aux->drm_dev, "%s: DPCD failed read at register 0x%x\n", aux->name, DP_TEST_REQUEST); return false; @@ -1013,23 +994,23 @@ bool drm_dp_send_real_edid_checksum(struct drm_dp_au= x *aux, return false; } =20 - if (drm_dp_dpcd_write(aux, DP_DEVICE_SERVICE_IRQ_VECTOR, - &auto_test_req, 1) < 1) { + if (drm_dp_dpcd_write_byte(aux, DP_DEVICE_SERVICE_IRQ_VECTOR, + auto_test_req) < 0) { drm_err(aux->drm_dev, "%s: DPCD failed write at register 0x%x\n", aux->name, DP_DEVICE_SERVICE_IRQ_VECTOR); return false; } =20 /* send back checksum for the last edid extension block data */ - if (drm_dp_dpcd_write(aux, DP_TEST_EDID_CHECKSUM, - &real_edid_checksum, 1) < 1) { + if (drm_dp_dpcd_write_byte(aux, DP_TEST_EDID_CHECKSUM, + real_edid_checksum) < 0) { drm_err(aux->drm_dev, "%s: DPCD failed write at register 0x%x\n", aux->name, DP_TEST_EDID_CHECKSUM); return false; } =20 test_resp |=3D DP_TEST_EDID_CHECKSUM_WRITE; - if (drm_dp_dpcd_write(aux, DP_TEST_RESPONSE, &test_resp, 1) < 1) { + if (drm_dp_dpcd_write_byte(aux, DP_TEST_RESPONSE, test_resp) < 0) { drm_err(aux->drm_dev, "%s: DPCD failed write at register 0x%x\n", aux->name, DP_TEST_RESPONSE); return false; @@ -1066,12 +1047,10 @@ static int drm_dp_read_extended_dpcd_caps(struct dr= m_dp_aux *aux, DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT)) return 0; =20 - ret =3D drm_dp_dpcd_read(aux, DP_DP13_DPCD_REV, &dpcd_ext, - sizeof(dpcd_ext)); + ret =3D drm_dp_dpcd_read_data(aux, DP_DP13_DPCD_REV, &dpcd_ext, + sizeof(dpcd_ext)); if (ret < 0) return ret; - if (ret !=3D sizeof(dpcd_ext)) - return -EIO; =20 if (dpcd[DP_DPCD_REV] > dpcd_ext[DP_DPCD_REV]) { drm_dbg_kms(aux->drm_dev, @@ -1108,10 +1087,10 @@ int drm_dp_read_dpcd_caps(struct drm_dp_aux *aux, { int ret; =20 - ret =3D drm_dp_dpcd_read(aux, DP_DPCD_REV, dpcd, DP_RECEIVER_CAP_SIZE); + ret =3D drm_dp_dpcd_read_data(aux, DP_DPCD_REV, dpcd, DP_RECEIVER_CAP_SIZ= E); if (ret < 0) return ret; - if (ret !=3D DP_RECEIVER_CAP_SIZE || dpcd[DP_DPCD_REV] =3D=3D 0) + if (dpcd[DP_DPCD_REV] =3D=3D 0) return -EIO; =20 ret =3D drm_dp_read_extended_dpcd_caps(aux, dpcd); @@ -1161,11 +1140,9 @@ int drm_dp_read_downstream_info(struct drm_dp_aux *a= ux, if (dpcd[DP_DOWNSTREAMPORT_PRESENT] & DP_DETAILED_CAP_INFO_AVAILABLE) len *=3D 4; =20 - ret =3D drm_dp_dpcd_read(aux, DP_DOWNSTREAM_PORT_0, downstream_ports, len= ); + ret =3D drm_dp_dpcd_read_data(aux, DP_DOWNSTREAM_PORT_0, downstream_ports= , len); if (ret < 0) return ret; - if (ret !=3D len) - return -EIO; =20 drm_dbg_kms(aux->drm_dev, "%s: DPCD DFP: %*ph\n", aux->name, len, downstr= eam_ports); =20 @@ -1522,7 +1499,7 @@ EXPORT_SYMBOL(drm_dp_downstream_mode); */ int drm_dp_downstream_id(struct drm_dp_aux *aux, char id[6]) { - return drm_dp_dpcd_read(aux, DP_BRANCH_ID, id, 6); + return drm_dp_dpcd_read_data(aux, DP_BRANCH_ID, id, 6); } EXPORT_SYMBOL(drm_dp_downstream_id); =20 @@ -1587,13 +1564,13 @@ void drm_dp_downstream_debug(struct seq_file *m, drm_dp_downstream_id(aux, id); seq_printf(m, "\t\tID: %s\n", id); =20 - len =3D drm_dp_dpcd_read(aux, DP_BRANCH_HW_REV, &rev[0], 1); - if (len > 0) + len =3D drm_dp_dpcd_read_data(aux, DP_BRANCH_HW_REV, &rev[0], 1); + if (!len) seq_printf(m, "\t\tHW: %d.%d\n", (rev[0] & 0xf0) >> 4, rev[0] & 0xf); =20 - len =3D drm_dp_dpcd_read(aux, DP_BRANCH_SW_REV, rev, 2); - if (len > 0) + len =3D drm_dp_dpcd_read_data(aux, DP_BRANCH_SW_REV, rev, 2); + if (!len) seq_printf(m, "\t\tSW: %d.%d\n", rev[0], rev[1]); =20 if (detailed_cap_info) { @@ -1731,11 +1708,9 @@ int drm_dp_read_sink_count(struct drm_dp_aux *aux) u8 count; int ret; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_SINK_COUNT, &count); + ret =3D drm_dp_dpcd_read_byte(aux, DP_SINK_COUNT, &count); if (ret < 0) return ret; - if (ret !=3D 1) - return -EIO; =20 return DP_GET_SINK_COUNT(count); } @@ -2124,13 +2099,13 @@ static int drm_dp_aux_get_crc(struct drm_dp_aux *au= x, u8 *crc) u8 buf, count; int ret; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_TEST_SINK, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_TEST_SINK, &buf); if (ret < 0) return ret; =20 WARN_ON(!(buf & DP_TEST_SINK_START)); =20 - ret =3D drm_dp_dpcd_readb(aux, DP_TEST_SINK_MISC, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_TEST_SINK_MISC, &buf); if (ret < 0) return ret; =20 @@ -2144,11 +2119,7 @@ static int drm_dp_aux_get_crc(struct drm_dp_aux *aux= , u8 *crc) * At DP_TEST_CRC_R_CR, there's 6 bytes containing CRC data, 2 bytes * per component (RGB or CrYCb). */ - ret =3D drm_dp_dpcd_read(aux, DP_TEST_CRC_R_CR, crc, 6); - if (ret < 0) - return ret; - - return 0; + return drm_dp_dpcd_read_data(aux, DP_TEST_CRC_R_CR, crc, 6); } =20 static void drm_dp_aux_crc_work(struct work_struct *work) @@ -2347,11 +2318,11 @@ int drm_dp_start_crc(struct drm_dp_aux *aux, struct= drm_crtc *crtc) u8 buf; int ret; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_TEST_SINK, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_TEST_SINK, &buf); if (ret < 0) return ret; =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_TEST_SINK, buf | DP_TEST_SINK_START); + ret =3D drm_dp_dpcd_write_byte(aux, DP_TEST_SINK, buf | DP_TEST_SINK_STAR= T); if (ret < 0) return ret; =20 @@ -2374,11 +2345,11 @@ int drm_dp_stop_crc(struct drm_dp_aux *aux) u8 buf; int ret; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_TEST_SINK, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_TEST_SINK, &buf); if (ret < 0) return ret; =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_TEST_SINK, buf & ~DP_TEST_SINK_START); + ret =3D drm_dp_dpcd_write_byte(aux, DP_TEST_SINK, buf & ~DP_TEST_SINK_STA= RT); if (ret < 0) return ret; =20 @@ -2464,11 +2435,7 @@ drm_dp_get_quirks(const struct drm_dp_dpcd_ident *id= ent, bool is_branch) static int drm_dp_read_ident(struct drm_dp_aux *aux, unsigned int offset, struct drm_dp_dpcd_ident *ident) { - int ret; - - ret =3D drm_dp_dpcd_read(aux, offset, ident, sizeof(*ident)); - - return ret < 0 ? ret : 0; + return drm_dp_dpcd_read_data(aux, offset, ident, sizeof(*ident)); } =20 static void drm_dp_dump_desc(struct drm_dp_aux *aux, @@ -2726,13 +2693,11 @@ static int drm_dp_read_lttpr_regs(struct drm_dp_aux= *aux, int ret; =20 for (offset =3D 0; offset < buf_size; offset +=3D block_size) { - ret =3D drm_dp_dpcd_read(aux, - address + offset, - &buf[offset], block_size); + ret =3D drm_dp_dpcd_read_data(aux, + address + offset, + &buf[offset], block_size); if (ret < 0) return ret; - - WARN_ON(ret !=3D block_size); } =20 return 0; @@ -2886,12 +2851,12 @@ int drm_dp_get_phy_test_pattern(struct drm_dp_aux *= aux, int err; u8 rate, lanes; =20 - err =3D drm_dp_dpcd_readb(aux, DP_TEST_LINK_RATE, &rate); + err =3D drm_dp_dpcd_read_byte(aux, DP_TEST_LINK_RATE, &rate); if (err < 0) return err; data->link_rate =3D drm_dp_bw_code_to_link_rate(rate); =20 - err =3D drm_dp_dpcd_readb(aux, DP_TEST_LANE_COUNT, &lanes); + err =3D drm_dp_dpcd_read_byte(aux, DP_TEST_LANE_COUNT, &lanes); if (err < 0) return err; data->num_lanes =3D lanes & DP_MAX_LANE_COUNT_MASK; @@ -2899,22 +2864,22 @@ int drm_dp_get_phy_test_pattern(struct drm_dp_aux *= aux, if (lanes & DP_ENHANCED_FRAME_CAP) data->enhanced_frame_cap =3D true; =20 - err =3D drm_dp_dpcd_readb(aux, DP_PHY_TEST_PATTERN, &data->phy_pattern); + err =3D drm_dp_dpcd_read_byte(aux, DP_PHY_TEST_PATTERN, &data->phy_patter= n); if (err < 0) return err; =20 switch (data->phy_pattern) { case DP_PHY_TEST_PATTERN_80BIT_CUSTOM: - err =3D drm_dp_dpcd_read(aux, DP_TEST_80BIT_CUSTOM_PATTERN_7_0, - &data->custom80, sizeof(data->custom80)); + err =3D drm_dp_dpcd_read_data(aux, DP_TEST_80BIT_CUSTOM_PATTERN_7_0, + &data->custom80, sizeof(data->custom80)); if (err < 0) return err; =20 break; case DP_PHY_TEST_PATTERN_CP2520: - err =3D drm_dp_dpcd_read(aux, DP_TEST_HBR2_SCRAMBLER_RESET, - &data->hbr2_reset, - sizeof(data->hbr2_reset)); + err =3D drm_dp_dpcd_read_data(aux, DP_TEST_HBR2_SCRAMBLER_RESET, + &data->hbr2_reset, + sizeof(data->hbr2_reset)); if (err < 0) return err; } @@ -2941,15 +2906,15 @@ int drm_dp_set_phy_test_pattern(struct drm_dp_aux *= aux, if (dp_rev < 0x12) { test_pattern =3D (test_pattern << 2) & DP_LINK_QUAL_PATTERN_11_MASK; - err =3D drm_dp_dpcd_writeb(aux, DP_TRAINING_PATTERN_SET, - test_pattern); + err =3D drm_dp_dpcd_write_byte(aux, DP_TRAINING_PATTERN_SET, + test_pattern); if (err < 0) return err; } else { for (i =3D 0; i < data->num_lanes; i++) { - err =3D drm_dp_dpcd_writeb(aux, - DP_LINK_QUAL_LANE0_SET + i, - test_pattern); + err =3D drm_dp_dpcd_write_byte(aux, + DP_LINK_QUAL_LANE0_SET + i, + test_pattern); if (err < 0) return err; } @@ -3156,8 +3121,8 @@ bool drm_dp_as_sdp_supported(struct drm_dp_aux *aux, = const u8 dpcd[DP_RECEIVER_C if (dpcd[DP_DPCD_REV] < DP_DPCD_REV_13) return false; =20 - if (drm_dp_dpcd_readb(aux, DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1, - &rx_feature) !=3D 1) { + if (drm_dp_dpcd_read_byte(aux, DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1, + &rx_feature) < 0) { drm_dbg_dp(aux->drm_dev, "Failed to read DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1\n"); return false; @@ -3181,7 +3146,7 @@ bool drm_dp_vsc_sdp_supported(struct drm_dp_aux *aux,= const u8 dpcd[DP_RECEIVER_ if (dpcd[DP_DPCD_REV] < DP_DPCD_REV_13) return false; =20 - if (drm_dp_dpcd_readb(aux, DP_DPRX_FEATURE_ENUMERATION_LIST, &rx_feature)= !=3D 1) { + if (drm_dp_dpcd_read_byte(aux, DP_DPRX_FEATURE_ENUMERATION_LIST, &rx_feat= ure) < 0) { drm_dbg_dp(aux->drm_dev, "failed to read DP_DPRX_FEATURE_ENUMERATION_LIS= T\n"); return false; } @@ -3312,16 +3277,13 @@ EXPORT_SYMBOL(drm_dp_get_pcon_max_frl_bw); */ int drm_dp_pcon_frl_prepare(struct drm_dp_aux *aux, bool enable_frl_ready_= hpd) { - int ret; u8 buf =3D DP_PCON_ENABLE_SOURCE_CTL_MODE | DP_PCON_ENABLE_LINK_FRL_MODE; =20 if (enable_frl_ready_hpd) buf |=3D DP_PCON_ENABLE_HPD_READY; =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_PCON_HDMI_LINK_CONFIG_1, buf); - - return ret; + return drm_dp_dpcd_write_byte(aux, DP_PCON_HDMI_LINK_CONFIG_1, buf); } EXPORT_SYMBOL(drm_dp_pcon_frl_prepare); =20 @@ -3336,7 +3298,7 @@ bool drm_dp_pcon_is_frl_ready(struct drm_dp_aux *aux) int ret; u8 buf; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PCON_HDMI_TX_LINK_STATUS, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PCON_HDMI_TX_LINK_STATUS, &buf); if (ret < 0) return false; =20 @@ -3365,7 +3327,7 @@ int drm_dp_pcon_frl_configure_1(struct drm_dp_aux *au= x, int max_frl_gbps, int ret; u8 buf; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PCON_HDMI_LINK_CONFIG_1, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PCON_HDMI_LINK_CONFIG_1, &buf); if (ret < 0) return ret; =20 @@ -3400,11 +3362,7 @@ int drm_dp_pcon_frl_configure_1(struct drm_dp_aux *a= ux, int max_frl_gbps, return -EINVAL; } =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_PCON_HDMI_LINK_CONFIG_1, buf); - if (ret < 0) - return ret; - - return 0; + return drm_dp_dpcd_write_byte(aux, DP_PCON_HDMI_LINK_CONFIG_1, buf); } EXPORT_SYMBOL(drm_dp_pcon_frl_configure_1); =20 @@ -3430,7 +3388,7 @@ int drm_dp_pcon_frl_configure_2(struct drm_dp_aux *au= x, int max_frl_mask, else buf &=3D ~DP_PCON_FRL_LINK_TRAIN_EXTENDED; =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_PCON_HDMI_LINK_CONFIG_2, buf); + return drm_dp_dpcd_write_byte(aux, DP_PCON_HDMI_LINK_CONFIG_2, buf); if (ret < 0) return ret; =20 @@ -3446,13 +3404,7 @@ EXPORT_SYMBOL(drm_dp_pcon_frl_configure_2); */ int drm_dp_pcon_reset_frl_config(struct drm_dp_aux *aux) { - int ret; - - ret =3D drm_dp_dpcd_writeb(aux, DP_PCON_HDMI_LINK_CONFIG_1, 0x0); - if (ret < 0) - return ret; - - return 0; + return drm_dp_dpcd_write_byte(aux, DP_PCON_HDMI_LINK_CONFIG_1, 0x0); } EXPORT_SYMBOL(drm_dp_pcon_reset_frl_config); =20 @@ -3467,7 +3419,7 @@ int drm_dp_pcon_frl_enable(struct drm_dp_aux *aux) int ret; u8 buf =3D 0; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PCON_HDMI_LINK_CONFIG_1, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PCON_HDMI_LINK_CONFIG_1, &buf); if (ret < 0) return ret; if (!(buf & DP_PCON_ENABLE_SOURCE_CTL_MODE)) { @@ -3476,11 +3428,7 @@ int drm_dp_pcon_frl_enable(struct drm_dp_aux *aux) return -EINVAL; } buf |=3D DP_PCON_ENABLE_HDMI_LINK; - ret =3D drm_dp_dpcd_writeb(aux, DP_PCON_HDMI_LINK_CONFIG_1, buf); - if (ret < 0) - return ret; - - return 0; + return drm_dp_dpcd_write_byte(aux, DP_PCON_HDMI_LINK_CONFIG_1, buf); } EXPORT_SYMBOL(drm_dp_pcon_frl_enable); =20 @@ -3495,7 +3443,7 @@ bool drm_dp_pcon_hdmi_link_active(struct drm_dp_aux *= aux) u8 buf; int ret; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PCON_HDMI_TX_LINK_STATUS, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PCON_HDMI_TX_LINK_STATUS, &buf); if (ret < 0) return false; =20 @@ -3520,7 +3468,7 @@ int drm_dp_pcon_hdmi_link_mode(struct drm_dp_aux *aux= , u8 *frl_trained_mask) int mode; int ret; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PCON_HDMI_POST_FRL_STATUS, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PCON_HDMI_POST_FRL_STATUS, &buf); if (ret < 0) return ret; =20 @@ -3549,7 +3497,7 @@ void drm_dp_pcon_hdmi_frl_link_error_count(struct drm= _dp_aux *aux, struct drm_hdmi_info *hdmi =3D &connector->display_info.hdmi; =20 for (i =3D 0; i < hdmi->max_lanes; i++) { - if (drm_dp_dpcd_readb(aux, DP_PCON_HDMI_ERROR_STATUS_LN0 + i, &buf) < 0) + if (drm_dp_dpcd_read_byte(aux, DP_PCON_HDMI_ERROR_STATUS_LN0 + i, &buf) = < 0) return; =20 error_count =3D buf & DP_PCON_HDMI_ERROR_COUNT_MASK; @@ -3684,7 +3632,7 @@ int drm_dp_pcon_configure_dsc_enc(struct drm_dp_aux *= aux, u8 pps_buf_config) u8 buf; int ret; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, &buf); if (ret < 0) return ret; =20 @@ -3695,11 +3643,7 @@ int drm_dp_pcon_configure_dsc_enc(struct drm_dp_aux = *aux, u8 pps_buf_config) buf |=3D pps_buf_config << 2; } =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, buf); - if (ret < 0) - return ret; - - return 0; + return drm_dp_dpcd_write_byte(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, buf); } =20 /** @@ -3711,13 +3655,7 @@ int drm_dp_pcon_configure_dsc_enc(struct drm_dp_aux = *aux, u8 pps_buf_config) */ int drm_dp_pcon_pps_default(struct drm_dp_aux *aux) { - int ret; - - ret =3D drm_dp_pcon_configure_dsc_enc(aux, DP_PCON_ENC_PPS_OVERRIDE_DISAB= LED); - if (ret < 0) - return ret; - - return 0; + return drm_dp_pcon_configure_dsc_enc(aux, DP_PCON_ENC_PPS_OVERRIDE_DISABL= ED); } EXPORT_SYMBOL(drm_dp_pcon_pps_default); =20 @@ -3733,15 +3671,11 @@ int drm_dp_pcon_pps_override_buf(struct drm_dp_aux = *aux, u8 pps_buf[128]) { int ret; =20 - ret =3D drm_dp_dpcd_write(aux, DP_PCON_HDMI_PPS_OVERRIDE_BASE, &pps_buf, = 128); - if (ret < 0) - return ret; - - ret =3D drm_dp_pcon_configure_dsc_enc(aux, DP_PCON_ENC_PPS_OVERRIDE_EN_BU= FFER); + ret =3D drm_dp_dpcd_write_data(aux, DP_PCON_HDMI_PPS_OVERRIDE_BASE, &pps_= buf, 128); if (ret < 0) return ret; =20 - return 0; + return drm_dp_pcon_configure_dsc_enc(aux, DP_PCON_ENC_PPS_OVERRIDE_EN_BUF= FER); } EXPORT_SYMBOL(drm_dp_pcon_pps_override_buf); =20 @@ -3758,21 +3692,17 @@ int drm_dp_pcon_pps_override_param(struct drm_dp_au= x *aux, u8 pps_param[6]) { int ret; =20 - ret =3D drm_dp_dpcd_write(aux, DP_PCON_HDMI_PPS_OVRD_SLICE_HEIGHT, &pps_p= aram[0], 2); + ret =3D drm_dp_dpcd_write_data(aux, DP_PCON_HDMI_PPS_OVRD_SLICE_HEIGHT, &= pps_param[0], 2); if (ret < 0) return ret; - ret =3D drm_dp_dpcd_write(aux, DP_PCON_HDMI_PPS_OVRD_SLICE_WIDTH, &pps_pa= ram[2], 2); + ret =3D drm_dp_dpcd_write_data(aux, DP_PCON_HDMI_PPS_OVRD_SLICE_WIDTH, &p= ps_param[2], 2); if (ret < 0) return ret; - ret =3D drm_dp_dpcd_write(aux, DP_PCON_HDMI_PPS_OVRD_BPP, &pps_param[4], = 2); + ret =3D drm_dp_dpcd_write_data(aux, DP_PCON_HDMI_PPS_OVRD_BPP, &pps_param= [4], 2); if (ret < 0) return ret; =20 - ret =3D drm_dp_pcon_configure_dsc_enc(aux, DP_PCON_ENC_PPS_OVERRIDE_EN_BU= FFER); - if (ret < 0) - return ret; - - return 0; + return drm_dp_pcon_configure_dsc_enc(aux, DP_PCON_ENC_PPS_OVERRIDE_EN_BUF= FER); } EXPORT_SYMBOL(drm_dp_pcon_pps_override_param); =20 @@ -3788,7 +3718,7 @@ int drm_dp_pcon_convert_rgb_to_ycbcr(struct drm_dp_au= x *aux, u8 color_spc) int ret; u8 buf; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, &buf); + ret =3D drm_dp_dpcd_read_byte(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, &buf); if (ret < 0) return ret; =20 @@ -3797,11 +3727,7 @@ int drm_dp_pcon_convert_rgb_to_ycbcr(struct drm_dp_a= ux *aux, u8 color_spc) else buf &=3D ~DP_CONVERSION_RGB_YCBCR_MASK; =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, buf); - if (ret < 0) - return ret; - - return 0; + return drm_dp_dpcd_write_byte(aux, DP_PROTOCOL_CONVERTER_CONTROL_2, buf); } EXPORT_SYMBOL(drm_dp_pcon_convert_rgb_to_ycbcr); =20 @@ -3833,12 +3759,12 @@ int drm_edp_backlight_set_level(struct drm_dp_aux *= aux, const struct drm_edp_bac buf[0] =3D level; } =20 - ret =3D drm_dp_dpcd_write(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, buf, size= of(buf)); - if (ret !=3D sizeof(buf)) { + ret =3D drm_dp_dpcd_write_data(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, buf,= sizeof(buf)); + if (ret < 0) { drm_err(aux->drm_dev, "%s: Failed to write aux backlight level: %d\n", aux->name, ret); - return ret < 0 ? ret : -EIO; + return ret; } =20 return 0; @@ -3856,22 +3782,22 @@ drm_edp_backlight_set_enable(struct drm_dp_aux *aux= , const struct drm_edp_backli if (!bl->aux_enable) return 0; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_EDP_DISPLAY_CONTROL_REGISTER, &buf); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_read_byte(aux, DP_EDP_DISPLAY_CONTROL_REGISTER, &buf); + if (ret < 0) { drm_err(aux->drm_dev, "%s: Failed to read eDP display control register: = %d\n", aux->name, ret); - return ret < 0 ? ret : -EIO; + return ret; } if (enable) buf |=3D DP_EDP_BACKLIGHT_ENABLE; else buf &=3D ~DP_EDP_BACKLIGHT_ENABLE; =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_EDP_DISPLAY_CONTROL_REGISTER, buf); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_write_byte(aux, DP_EDP_DISPLAY_CONTROL_REGISTER, buf); + if (ret < 0) { drm_err(aux->drm_dev, "%s: Failed to write eDP display control register:= %d\n", aux->name, ret); - return ret < 0 ? ret : -EIO; + return ret; } =20 return 0; @@ -3907,15 +3833,16 @@ int drm_edp_backlight_enable(struct drm_dp_aux *aux= , const struct drm_edp_backli dpcd_buf =3D DP_EDP_BACKLIGHT_CONTROL_MODE_PWM; =20 if (bl->pwmgen_bit_count) { - ret =3D drm_dp_dpcd_writeb(aux, DP_EDP_PWMGEN_BIT_COUNT, bl->pwmgen_bit_= count); - if (ret !=3D 1) + ret =3D drm_dp_dpcd_write_byte(aux, DP_EDP_PWMGEN_BIT_COUNT, bl->pwmgen_= bit_count); + if (ret < 0) drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux pwmgen bit count: %d= \n", aux->name, ret); } =20 if (bl->pwm_freq_pre_divider) { - ret =3D drm_dp_dpcd_writeb(aux, DP_EDP_BACKLIGHT_FREQ_SET, bl->pwm_freq_= pre_divider); - if (ret !=3D 1) + ret =3D drm_dp_dpcd_write_byte(aux, DP_EDP_BACKLIGHT_FREQ_SET, + bl->pwm_freq_pre_divider); + if (ret < 0) drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux backlight frequency: %d\n", aux->name, ret); @@ -3923,8 +3850,8 @@ int drm_edp_backlight_enable(struct drm_dp_aux *aux, = const struct drm_edp_backli dpcd_buf |=3D DP_EDP_BACKLIGHT_FREQ_AUX_SET_ENABLE; } =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, dpcd_= buf); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_write_byte(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, d= pcd_buf); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux backlight mode: %d\n", aux->name, ret); return ret < 0 ? ret : -EIO; @@ -3979,8 +3906,8 @@ drm_edp_backlight_probe_max(struct drm_dp_aux *aux, s= truct drm_edp_backlight_inf if (!bl->aux_set) return 0; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_EDP_PWMGEN_BIT_COUNT, &pn); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_read_byte(aux, DP_EDP_PWMGEN_BIT_COUNT, &pn); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "%s: Failed to read pwmgen bit count cap: %d\n= ", aux->name, ret); return -ENODEV; @@ -4013,14 +3940,14 @@ drm_edp_backlight_probe_max(struct drm_dp_aux *aux,= struct drm_edp_backlight_inf * - FxP is within 25% of desired value. * Note: 25% is arbitrary value and may need some tweak. */ - ret =3D drm_dp_dpcd_readb(aux, DP_EDP_PWMGEN_BIT_COUNT_CAP_MIN, &pn_min); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_read_byte(aux, DP_EDP_PWMGEN_BIT_COUNT_CAP_MIN, &pn_m= in); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "%s: Failed to read pwmgen bit count cap min: = %d\n", aux->name, ret); return 0; } - ret =3D drm_dp_dpcd_readb(aux, DP_EDP_PWMGEN_BIT_COUNT_CAP_MAX, &pn_max); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_read_byte(aux, DP_EDP_PWMGEN_BIT_COUNT_CAP_MAX, &pn_m= ax); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "%s: Failed to read pwmgen bit count cap max: = %d\n", aux->name, ret); return 0; @@ -4045,8 +3972,8 @@ drm_edp_backlight_probe_max(struct drm_dp_aux *aux, s= truct drm_edp_backlight_inf break; } =20 - ret =3D drm_dp_dpcd_writeb(aux, DP_EDP_PWMGEN_BIT_COUNT, pn); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_write_byte(aux, DP_EDP_PWMGEN_BIT_COUNT, pn); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "%s: Failed to write aux pwmgen bit count: %d\= n", aux->name, ret); return 0; @@ -4071,8 +3998,8 @@ drm_edp_backlight_probe_state(struct drm_dp_aux *aux,= struct drm_edp_backlight_i u8 buf[2]; u8 mode_reg; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, &mode_= reg); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_read_byte(aux, DP_EDP_BACKLIGHT_MODE_SET_REGISTER, &m= ode_reg); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "%s: Failed to read backlight mode: %d\n", aux->name, ret); return ret < 0 ? ret : -EIO; @@ -4085,11 +4012,11 @@ drm_edp_backlight_probe_state(struct drm_dp_aux *au= x, struct drm_edp_backlight_i if (*current_mode =3D=3D DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) { int size =3D 1 + bl->lsb_reg_used; =20 - ret =3D drm_dp_dpcd_read(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, buf, size= ); - if (ret !=3D size) { + ret =3D drm_dp_dpcd_read_data(aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, buf,= size); + if (ret < 0) { drm_dbg_kms(aux->drm_dev, "%s: Failed to read backlight level: %d\n", aux->name, ret); - return ret < 0 ? ret : -EIO; + return ret; } =20 if (bl->lsb_reg_used) @@ -4234,8 +4161,8 @@ int drm_panel_dp_aux_backlight(struct drm_panel *pane= l, struct drm_dp_aux *aux) if (!panel || !panel->dev || !aux) return -EINVAL; =20 - ret =3D drm_dp_dpcd_read(aux, DP_EDP_DPCD_REV, edp_dpcd, - EDP_DISPLAY_CTL_CAP_SIZE); + ret =3D drm_dp_dpcd_read_data(aux, DP_EDP_DPCD_REV, edp_dpcd, + EDP_DISPLAY_CTL_CAP_SIZE); if (ret < 0) return ret; =20 --=20 2.39.5 From nobody Sun Feb 8 21:48:14 2026 Received: from mail-lj1-f179.google.com (mail-lj1-f179.google.com [209.85.208.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0694D1F9F67 for ; Fri, 17 Jan 2025 08:56:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104213; cv=none; b=LkVcfOlpoZTUvrFdjlBW88Td0SeFde2r5Oz7fwFuf31Wd2o9BcNG2qx2tC7DtEPIebo6DPS5LCMxF6Id4yFcO+qo2FddkXv3XKivZQJ/P02b6tUQz73RzFtIZ3Ln9USue+XHDVIw1Rw7RMJ76YeU5qp1YNf2xMBtVTLgeD2jhKg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104213; c=relaxed/simple; bh=u0enUT6rCyZ8RqHzkNWyQVgEzKAZFsn/cehDhTu72TM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iH/FAQubP1RzLxsircc1GqppeTA79ZFFiOWWGMZbWq52Doa/ZmfCBSyAjJPYs7wmQ3OR1px/Bugc1ygsigeTMobY5xAuxAAF9+h9xAh07L65Yy5VSWAvn0dmORncYyTx90LehucmMB00UspP2GB/uOsmgksbt+wnfEIu53YJkG0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=nzcXJwBr; arc=none smtp.client-ip=209.85.208.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="nzcXJwBr" Received: by mail-lj1-f179.google.com with SMTP id 38308e7fff4ca-30613802a6bso19560851fa.1 for ; Fri, 17 Jan 2025 00:56:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737104210; x=1737709010; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=VLM1E94zeSWa7OSuX8gMRqzReFqeBbOp8I7gc5sLd6w=; b=nzcXJwBrZWsPFgBWyCoOl4yP/dYPMUdPpzakPWvLjWZGT1/5dluGIpVUeKeQLvaHc4 xoivxhUYt09go/RMugsDtbN7hP89WP85FY1jnsdAieF4Qaw7jzG4oMCQ/64MoLCZEbe1 1fIeSzx4zcIXyG6idLT7uYCwvIwAS7d/IBmKzPaI9nd9HvzjIccfVdp2asANjia5ioJ4 kIYHSKXnDbLPnLmVP119AiCIp8TdNZURTUFMwpD095JrmZHdWoAc3d6Mgmf0dhckGhV3 sXeTvxWwtZDR6LZHWwbaTnU+DxliFHQ6HXLzg+QymjgewekZXgvD30+1ogCmGo7e1l2A 2PZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737104210; x=1737709010; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VLM1E94zeSWa7OSuX8gMRqzReFqeBbOp8I7gc5sLd6w=; b=Qpgov/q4EKsgG11ozFrm/LwWEz9XkZ2CmqZjFcRVANG82dvP6NeAqJlVFksgSCSJOD zLvfxPRIEOAmUAPlro971JGltg3icOGxgtgRGbBp/OkPfS2nYbjRtKPtY/x79k1M+3ju SxGqPWw0Zjqd4TIFdBThvqscQan5wATqv86+kun/fjUx5S1vFF3JQ/tbsDo9EuOoFdlb n3q9htiEzZVYhL3ZryjUSEhFICCrqQgLSCe0RBQnBN1cbplrA+aslre+vkjvUM6klIVn gvEN6QXqtMQF5BF/dsxHSdS8Pi4dOOwEE6H9ELHkoeX4A/OK+ISgYVzeQE/P430VUGm8 v3Yw== X-Forwarded-Encrypted: i=1; AJvYcCWmnrkyNd/gj07mOntSF2n3YYrkBj2Ak2Vio8XpQo+AB0PxeTvefS7Ack6Nws9FpwZfIXP3kzKY1JabbPc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/rLkEY/1mqTtTzmPL8kVjFCUu/8uFl1xPad9mAk1mX0S7t8YQ K5AA8qSPTofkF/r2rgH6CUM631c9MP/8mTTVd28yUsoua2N9Kki5e5mBZjq0aCE= X-Gm-Gg: ASbGncs84kbuV07QeKQuwjrJi7AZI6T6OFo8TJkdePbwwpgXIfKCvTY7A0g0SjjsEix 91ad3zdeFA3ua7ePMhxVomAijRiBQpIFeM60ibP6jZaQFz4sb8igXaYSEsdyEA+ZXiGEfqxHgyA Y7jDWfqWi6XnWY1m4+O9me3e81kppkstMN3YtIx4cCqrAXF0MRBhF1gMKDIkk1HJsACFZMstPNJ KhKB3NsjNttu78K+nQosXoO87YGMEJjnDI4/6vDuk8QsmOZ3ba/YEuevM24xVbK X-Google-Smtp-Source: AGHT+IFBojLKFUsRi46jxUj/82lpPoLlFcmw7BAFGVljTWhsMBbJ3khzAeUTmD1KdTt251Lb09lVSw== X-Received: by 2002:a2e:b81c:0:b0:302:251a:bd04 with SMTP id 38308e7fff4ca-3072ca88ffbmr4931551fa.9.1737104210175; Fri, 17 Jan 2025 00:56:50 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3072a330764sm3402101fa.3.2025.01.17.00.56.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2025 00:56:48 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 17 Jan 2025 10:56:39 +0200 Subject: [PATCH RFC 4/7] drm/display: dp-aux-dev: use new DCPD access helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250117-drm-rework-dpcd-access-v1-4-7fc020e04dbc@linaro.org> References: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> In-Reply-To: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1383; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=u0enUT6rCyZ8RqHzkNWyQVgEzKAZFsn/cehDhTu72TM=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnihtFPa5XPtqF5ObSemv7vpAvzUlPQNy8VMpjv RyX+pGyC/iJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ4obRQAKCRCLPIo+Aiko 1QRZB/0b3sThkQAPK5Beb+5Pf6cn7vHPGIu4Piqk8s/CE8IKzDU+27jDQ/KOgIcLM2BOs2vmZRO Zb+L/0xMQ9kLSlMyp3NFHQgEBlO+Aykl4la4dDQlxroc5GjAHq5a0kE12q/R+uEhtIuF07wQg1x fEAQqzuQKE3zaFrKVvExUkljI4lnB+mKBBCKKLgnuCYwGcmdP6lD6AYqD7JZY1JvBCK3NedPORt O1972W2CsHJgB6bG+6JHa+l8s81kV1XjdIQE+dVGwLN8SYUp8BhKDlVSml67E0+KzneY1GoD3Qz zZsiuc6wSv2wOm9emHzfTlD7MgX2pW/EVxdGt16cNyjCQ0y3 X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Switch drm_dp_aux_dev.c to use new set of DPCD read / write helpers. Signed-off-by: Dmitry Baryshkov Acked-by: Jani Nikula --- drivers/gpu/drm/display/drm_dp_aux_dev.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_aux_dev.c b/drivers/gpu/drm/dis= play/drm_dp_aux_dev.c index 29555b9f03c8c42681c17c4a01e74a966cf8611f..a31ab3f41efb71fd5f936c24ba5= c3b8ebea68a5e 100644 --- a/drivers/gpu/drm/display/drm_dp_aux_dev.c +++ b/drivers/gpu/drm/display/drm_dp_aux_dev.c @@ -163,17 +163,16 @@ static ssize_t auxdev_read_iter(struct kiocb *iocb, s= truct iov_iter *to) break; } =20 - res =3D drm_dp_dpcd_read(aux_dev->aux, pos, buf, todo); - + res =3D drm_dp_dpcd_read_data(aux_dev->aux, pos, buf, todo); if (res <=3D 0) break; =20 - if (copy_to_iter(buf, res, to) !=3D res) { + if (copy_to_iter(buf, todo, to) !=3D todo) { res =3D -EFAULT; break; } =20 - pos +=3D res; + pos +=3D todo; } =20 if (pos !=3D iocb->ki_pos) @@ -211,12 +210,11 @@ static ssize_t auxdev_write_iter(struct kiocb *iocb, = struct iov_iter *from) break; } =20 - res =3D drm_dp_dpcd_write(aux_dev->aux, pos, buf, todo); - + res =3D drm_dp_dpcd_write_data(aux_dev->aux, pos, buf, todo); if (res <=3D 0) break; =20 - pos +=3D res; + pos +=3D todo; } =20 if (pos !=3D iocb->ki_pos) --=20 2.39.5 From nobody Sun Feb 8 21:48:14 2026 Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5CD4F1FA163 for ; Fri, 17 Jan 2025 08:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104216; cv=none; b=mmrjrwB4+Ln46mgBEZCP6epnWRx2FT8kvtsfKwFt8myjZzqv6KZtwZnOyCqnXfIDPMYe3KlQ96+5Umbm2iSlzx38gfCW8yVBsPUzprDbNzw86GIAo4H1fVvxpujl1RjfYCbwJbdlSkSI2GQYmnFxW58Mfgcr7Ql5yeQkZE+OhnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104216; c=relaxed/simple; bh=yUgbFQQuZ/dYQd+NfAYr+IxvStiBlneQ0vTNgNQQAgE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oOhLtGpmEfA4tLv4F+g8EnagQwh0zFXN00M5RbB+h2/JMm8u3OsAvWRpNseInhTVBZWj+HjRyURC/gM/HLnd2tWpW5AscVd7tajOrD39nTWnpnx4m1aWvZfszB37JbXxqaG+9E5UNaX6F8QYe6symzWCNh1oI7ECFcb4wrldyew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=c8BdKlBi; arc=none smtp.client-ip=209.85.208.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="c8BdKlBi" Received: by mail-lj1-f169.google.com with SMTP id 38308e7fff4ca-3043e84c687so15914711fa.1 for ; Fri, 17 Jan 2025 00:56:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737104212; x=1737709012; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Mk713zIqkuFnPb2k9vDHwIlJVqet2dF9Nf6XeVAyFFw=; b=c8BdKlBibjbei0EQhzQsXu2RpEYpuJUk26cjYqfQb/6YomqgdlVYB/FZ7cR7/P4+fB LAmU4TIPi4Vx4WEdwls0z4oSxuwjZfJQ+4eiPi4k3EgRV/tiruLmAyHRMkR1f3y8gkHa JsBHdRozhBV7rbZIs8IuweG5aDfZRtvWfFC2yS/13NHS1swqEq6qx6BFWoO6VDLHRIVi dOrtUAgHgrkxSec500RGxP3kBoz2+9XItZAl+n/zHE2sr3xpsh8XuhAqwn2BRja2NoPi Tot9GJhGtl3Jeqj1Lv/dj1fvmz8qqBwitxnpi9qXzAaidtQb23Qb8IypmWeghvyxU7bB HcJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737104212; x=1737709012; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Mk713zIqkuFnPb2k9vDHwIlJVqet2dF9Nf6XeVAyFFw=; b=wSAMhdEHpEOhSYcV/L7A4GAJ65iDobpZ1GJE1/2XV8xuMepqCFxG5grVd2axEUY1wu y+2jZEBW0RqEOUVgICz4Uy+QmccRJdc6aGWNDAcFRVbWZnzTAAt8E5BwmZTjnoN/3oCK nmk1ugouFASLMVX4J4+aUAuA5zeK7G2W9EZ+Wx0mBMDRvIC+lsYKp048N6Cf2wWfr+IE jUjJoVpVJr92cAkg2yCvNWGxRu5wO7atziP3FMWDcTmVkM7XCvGgi8Ljip8XAiBMu76e /N5HGuulMQ3MoEYLztG0aQTTWA48j2iZwAL57zVYyhemaT9kXu0u7IOJFfak5mWKZI2k crAg== X-Forwarded-Encrypted: i=1; AJvYcCX7UAyqpo88KymPcftJB9A5M1NseX1KaYVRVYt/Fc3MqWDEjkgXkptYPywe1DSLLjzzOBpW2SwnQoWdLhU=@vger.kernel.org X-Gm-Message-State: AOJu0YxGIf5pRjksTJvAEUFa1KYgxkTVHzJpjW5pdx1RCKzmSpFYGDhE EZvozLtf/LdkjZVt3PZlItrCQ+pxicbynG85jivRMvjG9+L2OvGQ4wGFh0/GdJE= X-Gm-Gg: ASbGncu+j1XFoqxADyZmzykHyCCgDZFCIRLNCi0nBePMhYUuEfKNvKv4t374cR0czk9 TXeOJPXdx7uoFsK9JYx2ik8LxdRb8ao7A1jTDC98FHbfCkKKfWqvsyn0ZmE9eCqRMYwwdXH0UOu eHk2SLW1973geo7EPk5Ex5qw+fRudWIkCnTPBJz6crZj3sfUxWhC9E0qOcDdgNqVdiFC25mg/t9 N4s4rVLYfXJ6pB4iJRvhRivrxZJcIQQZwUKTPbnO35PdICIrNo222SaGTxdwNs+ X-Google-Smtp-Source: AGHT+IFw6b5DGgJ5C+ZHUaVQALsPcG8Up1fk0OgnuUDBhelIJKkatG+E4Tbc8ihkec4t12QXNikf+Q== X-Received: by 2002:a2e:bc83:0:b0:304:9de0:7d9 with SMTP id 38308e7fff4ca-3072ca97e9bmr7789761fa.21.1737104212517; Fri, 17 Jan 2025 00:56:52 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3072a330764sm3402101fa.3.2025.01.17.00.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2025 00:56:51 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 17 Jan 2025 10:56:40 +0200 Subject: [PATCH RFC 5/7] drm/display: dp-cec: use new DCPD access helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250117-drm-rework-dpcd-access-v1-5-7fc020e04dbc@linaro.org> References: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> In-Reply-To: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4995; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=yUgbFQQuZ/dYQd+NfAYr+IxvStiBlneQ0vTNgNQQAgE=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnihtFhYjFkcZsgDXpnBmRDvRuEdMohtYHIi7RD A/OG5uaM+mJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ4obRQAKCRCLPIo+Aiko 1SR7CACjrfksIHObG/st907FfUITqHNgfgPCITVGWryWXPcCQbtgUiOKySFRWEnlM72r0aDg/nD FXnZfoyTfQI9hXwnVa4uhva7QGKVCdgHRLhv8H94lHVq42uKGATAJ+zvHELkQ0qg4ljYUmV898X aGcuqAZNxgWt6Si/ZrL+E1XC+gzoh5RA1e9JDtnk8O37M/PJ3OrMoJ6Z5nZALOv6NfLbP0CdUNm MjTyrw8EFVfcxGrMpegm9mAUYrCK2arYhdHkbqVtDTfg0J7+bRNDYFAxO8Kv6xv8lDrZdhUNABc LPk1v6sh6U5eR5e7g481WY4KSsY1qCD4H5PFMBd2xUKfTzkV X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Switch drm_dp_cec.c to use new set of DPCD read / write helpers. Signed-off-by: Dmitry Baryshkov Acked-by: Jani Nikula Reviewed-by: Lyude Paul --- drivers/gpu/drm/display/drm_dp_cec.c | 37 ++++++++++++++++++--------------= ---- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_cec.c b/drivers/gpu/drm/display= /drm_dp_cec.c index 007ceb281d00da65f5b4957cb8be66c2ea25d4e4..237f9a6a8077c62ff562d8f2d04= cab3f079ed367 100644 --- a/drivers/gpu/drm/display/drm_dp_cec.c +++ b/drivers/gpu/drm/display/drm_dp_cec.c @@ -96,7 +96,7 @@ static int drm_dp_cec_adap_enable(struct cec_adapter *ada= p, bool enable) u32 val =3D enable ? DP_CEC_TUNNELING_ENABLE : 0; ssize_t err =3D 0; =20 - err =3D drm_dp_dpcd_writeb(aux, DP_CEC_TUNNELING_CONTROL, val); + err =3D drm_dp_dpcd_write_byte(aux, DP_CEC_TUNNELING_CONTROL, val); return (enable && err < 0) ? err : 0; } =20 @@ -112,7 +112,7 @@ static int drm_dp_cec_adap_log_addr(struct cec_adapter = *adap, u8 addr) la_mask |=3D adap->log_addrs.log_addr_mask | (1 << addr); mask[0] =3D la_mask & 0xff; mask[1] =3D la_mask >> 8; - err =3D drm_dp_dpcd_write(aux, DP_CEC_LOGICAL_ADDRESS_MASK, mask, 2); + err =3D drm_dp_dpcd_write_data(aux, DP_CEC_LOGICAL_ADDRESS_MASK, mask, 2); return (addr !=3D CEC_LOG_ADDR_INVALID && err < 0) ? err : 0; } =20 @@ -123,15 +123,14 @@ static int drm_dp_cec_adap_transmit(struct cec_adapte= r *adap, u8 attempts, unsigned int retries =3D min(5, attempts - 1); ssize_t err; =20 - err =3D drm_dp_dpcd_write(aux, DP_CEC_TX_MESSAGE_BUFFER, - msg->msg, msg->len); + err =3D drm_dp_dpcd_write_data(aux, DP_CEC_TX_MESSAGE_BUFFER, + msg->msg, msg->len); if (err < 0) return err; =20 - err =3D drm_dp_dpcd_writeb(aux, DP_CEC_TX_MESSAGE_INFO, - (msg->len - 1) | (retries << 4) | - DP_CEC_TX_MESSAGE_SEND); - return err < 0 ? err : 0; + return drm_dp_dpcd_write_byte(aux, DP_CEC_TX_MESSAGE_INFO, + (msg->len - 1) | (retries << 4) | + DP_CEC_TX_MESSAGE_SEND); } =20 static int drm_dp_cec_adap_monitor_all_enable(struct cec_adapter *adap, @@ -144,13 +143,13 @@ static int drm_dp_cec_adap_monitor_all_enable(struct = cec_adapter *adap, if (!(adap->capabilities & CEC_CAP_MONITOR_ALL)) return 0; =20 - err =3D drm_dp_dpcd_readb(aux, DP_CEC_TUNNELING_CONTROL, &val); - if (err >=3D 0) { + err =3D drm_dp_dpcd_read_byte(aux, DP_CEC_TUNNELING_CONTROL, &val); + if (!err) { if (enable) val |=3D DP_CEC_SNOOPING_ENABLE; else val &=3D ~DP_CEC_SNOOPING_ENABLE; - err =3D drm_dp_dpcd_writeb(aux, DP_CEC_TUNNELING_CONTROL, val); + err =3D drm_dp_dpcd_write_byte(aux, DP_CEC_TUNNELING_CONTROL, val); } return (enable && err < 0) ? err : 0; } @@ -194,7 +193,7 @@ static int drm_dp_cec_received(struct drm_dp_aux *aux) u8 rx_msg_info; ssize_t err; =20 - err =3D drm_dp_dpcd_readb(aux, DP_CEC_RX_MESSAGE_INFO, &rx_msg_info); + err =3D drm_dp_dpcd_read_byte(aux, DP_CEC_RX_MESSAGE_INFO, &rx_msg_info); if (err < 0) return err; =20 @@ -202,7 +201,7 @@ static int drm_dp_cec_received(struct drm_dp_aux *aux) return 0; =20 msg.len =3D (rx_msg_info & DP_CEC_RX_MESSAGE_LEN_MASK) + 1; - err =3D drm_dp_dpcd_read(aux, DP_CEC_RX_MESSAGE_BUFFER, msg.msg, msg.len); + err =3D drm_dp_dpcd_read_data(aux, DP_CEC_RX_MESSAGE_BUFFER, msg.msg, msg= .len); if (err < 0) return err; =20 @@ -215,7 +214,7 @@ static void drm_dp_cec_handle_irq(struct drm_dp_aux *au= x) struct cec_adapter *adap =3D aux->cec.adap; u8 flags; =20 - if (drm_dp_dpcd_readb(aux, DP_CEC_TUNNELING_IRQ_FLAGS, &flags) < 0) + if (drm_dp_dpcd_read_byte(aux, DP_CEC_TUNNELING_IRQ_FLAGS, &flags) < 0) return; =20 if (flags & DP_CEC_RX_MESSAGE_INFO_VALID) @@ -230,7 +229,7 @@ static void drm_dp_cec_handle_irq(struct drm_dp_aux *au= x) (DP_CEC_TX_ADDRESS_NACK_ERROR | DP_CEC_TX_DATA_NACK_ERROR)) cec_transmit_attempt_done(adap, CEC_TX_STATUS_NACK | CEC_TX_STATUS_MAX_RETRIES); - drm_dp_dpcd_writeb(aux, DP_CEC_TUNNELING_IRQ_FLAGS, flags); + drm_dp_dpcd_write_byte(aux, DP_CEC_TUNNELING_IRQ_FLAGS, flags); } =20 /** @@ -253,13 +252,13 @@ void drm_dp_cec_irq(struct drm_dp_aux *aux) if (!aux->cec.adap) goto unlock; =20 - ret =3D drm_dp_dpcd_readb(aux, DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1, - &cec_irq); + ret =3D drm_dp_dpcd_read_byte(aux, DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1, + &cec_irq); if (ret < 0 || !(cec_irq & DP_CEC_IRQ)) goto unlock; =20 drm_dp_cec_handle_irq(aux); - drm_dp_dpcd_writeb(aux, DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1, DP_CEC_IRQ); + drm_dp_dpcd_write_byte(aux, DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1, DP_CEC_IRQ= ); unlock: mutex_unlock(&aux->cec.lock); } @@ -269,7 +268,7 @@ static bool drm_dp_cec_cap(struct drm_dp_aux *aux, u8 *= cec_cap) { u8 cap =3D 0; =20 - if (drm_dp_dpcd_readb(aux, DP_CEC_TUNNELING_CAPABILITY, &cap) !=3D 1 || + if (drm_dp_dpcd_read_byte(aux, DP_CEC_TUNNELING_CAPABILITY, &cap) < 0 || !(cap & DP_CEC_TUNNELING_CAPABLE)) return false; if (cec_cap) --=20 2.39.5 From nobody Sun Feb 8 21:48:14 2026 Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBA401FA15A for ; Fri, 17 Jan 2025 08:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104218; cv=none; b=rhyPRk4ncwHGkK94z1RhedWIu5dZKlEfY3M5XHmdQmC1Uag4QVHK1BMTrvKQYRQ4VpYYOVX3t+a+N3AT3I+u/rzY44aXasqVAU7rcktJ7uguCSUqCkXinZbKpC3CIwwV54nJcLoCAvPPulylzi0EP6+AdGnel2Bm0PgiW+/hfSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104218; c=relaxed/simple; bh=TJuc4RRF8VtMJDchcyjdI4OhT4nZLA2Y/JKIfwZo8hU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e6C7bAGfrttWNsmUoiWleK84cd6Q9j0PaDKbmhQ3j7cbwHgPn++CGgNecEv24dsLQcuhF0rfUpwknf2/5RImLjkyd4CRoKZ5N2bWgQrgK0J5T0lvlVDV7NA1yttBqAaJ+hVbUBZcbqUbCDI5UgZUZv0q1FlZKCBHHRHg/ZPlxAA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=W6REiTUB; arc=none smtp.client-ip=209.85.208.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="W6REiTUB" Received: by mail-lj1-f177.google.com with SMTP id 38308e7fff4ca-3043e84c687so15915001fa.1 for ; Fri, 17 Jan 2025 00:56:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737104215; x=1737709015; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Mkej2Dgbml3avSflLlUvt7qJpvnNaMgjKXK5J7iu/Ps=; b=W6REiTUBoZDDpeLeePsCcBCnVDUeSSQks0CZGc6S9fEth6pP7T/REE8qguVJKGFw7r oh9tZrwuM1QxdOVc3wpnSyHCCmRXSkWg2W+JicpZlQ0MzMfxNEQN0ZaAKGosJxYUjjLU azaKpfxPl4Hk95JWtRqaMYzJRpuHkuFQoDfxK4C/KzjkoI/ZIlutSL+xlGRZqYT1URHe 0r4F/2Ew7rUbCvmVUtcPnVl3IWKVbwmNDApEXHoVKkv29yuMEpDAevLiVWIeNhlO7VZh XEHS0yeYJCZldAeqiRuqa/MA7I66vbvhoZxQX7kAQOfgp2Qbsc8Cxfl0zy3PX8jLopnp ptLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737104215; x=1737709015; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Mkej2Dgbml3avSflLlUvt7qJpvnNaMgjKXK5J7iu/Ps=; b=Ngk5vF6ToIGzqJNExDx2KTpkyJkOaaGYaS6HyzgDlzgf02oS06b0M9TQ5B1ioI64wG LE6tGXKHniaWS4iwIQtUb+dWUMsC9v65KC5Ezb5K+T+KcF1mr6s0gt4aPms6jXJ08tyJ jEaF+zxyg2I6myUd4MX2A3eVE0eulCkWUAwQPQhiRk5pnp/63INGTpDQOIyBCMVAiibB uKPZ9N6xik5IxE3xaEcxFCnIWc8CS/dUZ8XeBDVebBlbru9vAZ59s3wnNbCb3E198duK dZs92obAN+lsUtSJcpbTLyX1UaJqlXCT23iQbpPdc6Ru6tjfyTwGDCAjzY3iFU9lvk9T jCBg== X-Forwarded-Encrypted: i=1; AJvYcCVSgaJJNQihNMKTSBrV7BL6Y7oumeokUxS99kVhIRKmv6uSu/eTf82nVS7MJ8zj9Yl8G3PRvCo2HfyzAbQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0Qaz0TYKspBbaZDsNByd547F/ysDAjtWWceBbn8e68RkZbEb6 /eY0wXCysk9tCvKoVfXKZUc9EAJDKGD7wqxE8/QhYblaTH67r3yI7+SegblUi54= X-Gm-Gg: ASbGnctGEifJQIlgSxtyHDQ84bSnU57sz8EEr8CVGuVUb2sALwaH7sg1P+tM84yg1/L JiJnOQoDNPk8TNrdza5vTo8WE/4GGQvbg/dLZbBFMExrzuPoSVFj/+UyHREh0O2UCc7MvZOpSzv pjo4lX+aYY0rTay7JilJGVXLra/ETCZjuIORMOG8bbUr0xyOgBBOqPrjvjZHuBEK0WzT3w3rg+i E6IVk1wcZ8kUzsTPF8JGTIpxoFS5ZxQXMJZDpw6Kg2ajhjhYhtzrev6L4REnOAP X-Google-Smtp-Source: AGHT+IFm4k0duptfNNqNo9ovG1IM2PPWDcpt/zalR+xfYDZ9sS188Lv3M8hO8zDK38dYyNuQxcG/kg== X-Received: by 2002:a2e:a813:0:b0:302:29a5:6e01 with SMTP id 38308e7fff4ca-3072ca5b52bmr6092241fa.2.1737104214887; Fri, 17 Jan 2025 00:56:54 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3072a330764sm3402101fa.3.2025.01.17.00.56.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2025 00:56:53 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 17 Jan 2025 10:56:41 +0200 Subject: [PATCH RFC 6/7] drm/display: dp-mst-topology: use new DCPD access helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250117-drm-rework-dpcd-access-v1-6-7fc020e04dbc@linaro.org> References: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> In-Reply-To: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8833; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=TJuc4RRF8VtMJDchcyjdI4OhT4nZLA2Y/JKIfwZo8hU=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnihtFvWQ7P4k24wQB6JVUqLQ/RDOvd3K1a3Riq YPOy3h1nKaJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ4obRQAKCRCLPIo+Aiko 1aSsCACCHvHcjKSucNtYm2HFIAs2pWYBvtuSNh9BuQQ8keXDVJsunSVxSfSvS9Dn6u01kJLo4vp ISp9HRzB3RatWLR4fz7X2XY7W5E59xmDRe8iJ5f6QpJzuqR8JxNrDygr0NHNRyJhw7DArNiXr0S FSZHpLWhMDdQ7Op/UAd/H37+g3d7BrZCgqGDHJW0JBKcfXABl8xdw9qmKmHSKLe1Y/DFc2Js9UK 2l26yAtUsH/9FvMcYNKyAma5SOdVnm22tMbRtfLoj3ex1tZhXMZMMrGs2n/HfWxaN7iJ5p4LcyD ZSEXl/dokLsbh94iWsthxfl1Gv4DzKgUFqYqwi9dnBzE41so X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Switch drm_dp_mst_topology.c to use new set of DPCD read / write helpers. Signed-off-by: Dmitry Baryshkov Acked-by: Jani Nikula Reviewed-by: Lyude Paul --- drivers/gpu/drm/display/drm_dp_mst_topology.c | 105 +++++++++++++---------= ---- 1 file changed, 51 insertions(+), 54 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/dr= m/display/drm_dp_mst_topology.c index f8db5be53a33e87e94b864ba48151354e091f5aa..1bd9fc0007d214f461ea5476c9f= 04bb5167e5af0 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -2189,15 +2189,12 @@ static int drm_dp_check_mstb_guid(struct drm_dp_mst= _branch *mstb, guid_t *guid) mstb->port_parent, DP_GUID, sizeof(buf), buf); } else { - ret =3D drm_dp_dpcd_write(mstb->mgr->aux, - DP_GUID, buf, sizeof(buf)); + ret =3D drm_dp_dpcd_write_data(mstb->mgr->aux, + DP_GUID, buf, sizeof(buf)); } } =20 - if (ret < 16 && ret > 0) - return -EPROTO; - - return ret =3D=3D 16 ? 0 : ret; + return ret; } =20 static void build_mst_prop_path(const struct drm_dp_mst_branch *mstb, @@ -2733,14 +2730,13 @@ static int drm_dp_send_sideband_msg(struct drm_dp_m= st_topology_mgr *mgr, do { tosend =3D min3(mgr->max_dpcd_transaction_bytes, 16, total); =20 - ret =3D drm_dp_dpcd_write(mgr->aux, regbase + offset, - &msg[offset], - tosend); - if (ret !=3D tosend) { - if (ret =3D=3D -EIO && retries < 5) { - retries++; - goto retry; - } + ret =3D drm_dp_dpcd_write_data(mgr->aux, regbase + offset, + &msg[offset], + tosend); + if (ret =3D=3D -EIO && retries < 5) { + retries++; + goto retry; + } else if (ret < 0) { drm_dbg_kms(mgr->dev, "failed to dpcd write %d %d\n", tosend, ret); =20 return -EIO; @@ -3618,7 +3614,7 @@ enum drm_dp_mst_mode drm_dp_read_mst_cap(struct drm_d= p_aux *aux, if (dpcd[DP_DPCD_REV] < DP_DPCD_REV_12) return DRM_DP_SST; =20 - if (drm_dp_dpcd_readb(aux, DP_MSTM_CAP, &mstm_cap) !=3D 1) + if (drm_dp_dpcd_read_byte(aux, DP_MSTM_CAP, &mstm_cap) < 0) return DRM_DP_SST; =20 if (mstm_cap & DP_MST_CAP) @@ -3673,10 +3669,10 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_m= st_topology_mgr *mgr, bool ms mgr->mst_primary =3D mstb; drm_dp_mst_topology_get_mstb(mgr->mst_primary); =20 - ret =3D drm_dp_dpcd_writeb(mgr->aux, DP_MSTM_CTRL, - DP_MST_EN | - DP_UP_REQ_EN | - DP_UPSTREAM_IS_SRC); + ret =3D drm_dp_dpcd_write_byte(mgr->aux, DP_MSTM_CTRL, + DP_MST_EN | + DP_UP_REQ_EN | + DP_UPSTREAM_IS_SRC); if (ret < 0) goto out_unlock; =20 @@ -3691,7 +3687,7 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst= _topology_mgr *mgr, bool ms mstb =3D mgr->mst_primary; mgr->mst_primary =3D NULL; /* this can fail if the device is gone */ - drm_dp_dpcd_writeb(mgr->aux, DP_MSTM_CTRL, 0); + drm_dp_dpcd_write_byte(mgr->aux, DP_MSTM_CTRL, 0); ret =3D 0; mgr->payload_id_table_cleared =3D false; =20 @@ -3757,8 +3753,8 @@ EXPORT_SYMBOL(drm_dp_mst_topology_queue_probe); void drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr) { mutex_lock(&mgr->lock); - drm_dp_dpcd_writeb(mgr->aux, DP_MSTM_CTRL, - DP_MST_EN | DP_UPSTREAM_IS_SRC); + drm_dp_dpcd_write_byte(mgr->aux, DP_MSTM_CTRL, + DP_MST_EN | DP_UPSTREAM_IS_SRC); mutex_unlock(&mgr->lock); flush_work(&mgr->up_req_work); flush_work(&mgr->work); @@ -3807,18 +3803,18 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_ms= t_topology_mgr *mgr, goto out_fail; } =20 - ret =3D drm_dp_dpcd_writeb(mgr->aux, DP_MSTM_CTRL, - DP_MST_EN | - DP_UP_REQ_EN | - DP_UPSTREAM_IS_SRC); + ret =3D drm_dp_dpcd_write_byte(mgr->aux, DP_MSTM_CTRL, + DP_MST_EN | + DP_UP_REQ_EN | + DP_UPSTREAM_IS_SRC); if (ret < 0) { drm_dbg_kms(mgr->dev, "mst write failed - undocked during suspend?\n"); goto out_fail; } =20 /* Some hubs forget their guids after they resume */ - ret =3D drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf)); - if (ret !=3D sizeof(buf)) { + ret =3D drm_dp_dpcd_read_data(mgr->aux, DP_GUID, buf, sizeof(buf)); + if (ret < 0) { drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n"); goto out_fail; } @@ -3877,8 +3873,8 @@ drm_dp_get_one_sb_msg(struct drm_dp_mst_topology_mgr = *mgr, bool up, *mstb =3D NULL; =20 len =3D min(mgr->max_dpcd_transaction_bytes, 16); - ret =3D drm_dp_dpcd_read(mgr->aux, basereg, replyblock, len); - if (ret !=3D len) { + ret =3D drm_dp_dpcd_read_data(mgr->aux, basereg, replyblock, len); + if (ret < 0) { drm_dbg_kms(mgr->dev, "failed to read DPCD down rep %d %d\n", len, ret); return false; } @@ -3916,9 +3912,9 @@ drm_dp_get_one_sb_msg(struct drm_dp_mst_topology_mgr = *mgr, bool up, curreply =3D len; while (replylen > 0) { len =3D min3(replylen, mgr->max_dpcd_transaction_bytes, 16); - ret =3D drm_dp_dpcd_read(mgr->aux, basereg + curreply, - replyblock, len); - if (ret !=3D len) { + ret =3D drm_dp_dpcd_read_data(mgr->aux, basereg + curreply, + replyblock, len); + if (ret < 0) { drm_dbg_kms(mgr->dev, "failed to read a chunk (len %d, ret %d)\n", len, ret); return false; @@ -4867,9 +4863,9 @@ static bool dump_dp_payload_table(struct drm_dp_mst_t= opology_mgr *mgr, int i; =20 for (i =3D 0; i < DP_PAYLOAD_TABLE_SIZE; i +=3D 16) { - if (drm_dp_dpcd_read(mgr->aux, - DP_PAYLOAD_TABLE_UPDATE_STATUS + i, - &buf[i], 16) !=3D 16) + if (drm_dp_dpcd_read_data(mgr->aux, + DP_PAYLOAD_TABLE_UPDATE_STATUS + i, + &buf[i], 16) < 0) return false; } return true; @@ -4958,23 +4954,24 @@ void drm_dp_mst_dump_topology(struct seq_file *m, } seq_printf(m, "dpcd: %*ph\n", DP_RECEIVER_CAP_SIZE, buf); =20 - ret =3D drm_dp_dpcd_read(mgr->aux, DP_FAUX_CAP, buf, 2); - if (ret !=3D 2) { + ret =3D drm_dp_dpcd_read_data(mgr->aux, DP_FAUX_CAP, buf, 2); + if (ret < 0) { seq_printf(m, "faux/mst read failed\n"); goto out; } seq_printf(m, "faux/mst: %*ph\n", 2, buf); =20 - ret =3D drm_dp_dpcd_read(mgr->aux, DP_MSTM_CTRL, buf, 1); - if (ret !=3D 1) { + ret =3D drm_dp_dpcd_read_data(mgr->aux, DP_MSTM_CTRL, buf, 1); + if (ret < 0) { seq_printf(m, "mst ctrl read failed\n"); goto out; } seq_printf(m, "mst ctrl: %*ph\n", 1, buf); =20 /* dump the standard OUI branch header */ - ret =3D drm_dp_dpcd_read(mgr->aux, DP_BRANCH_OUI, buf, DP_BRANCH_OUI_HEA= DER_SIZE); - if (ret !=3D DP_BRANCH_OUI_HEADER_SIZE) { + ret =3D drm_dp_dpcd_read_data(mgr->aux, DP_BRANCH_OUI, buf, + DP_BRANCH_OUI_HEADER_SIZE); + if (ret < 0) { seq_printf(m, "branch oui read failed\n"); goto out; } @@ -6098,14 +6095,14 @@ struct drm_dp_aux *drm_dp_mst_dsc_aux_for_port(stru= ct drm_dp_mst_port *port) =20 /* DP-to-DP peer device */ if (drm_dp_mst_is_virtual_dpcd(immediate_upstream_port)) { - if (drm_dp_dpcd_read(&port->aux, - DP_DSC_SUPPORT, &endpoint_dsc, 1) !=3D 1) + if (drm_dp_dpcd_read_data(&port->aux, + DP_DSC_SUPPORT, &endpoint_dsc, 1) < 0) return NULL; - if (drm_dp_dpcd_read(&port->aux, - DP_FEC_CAPABILITY, &endpoint_fec, 1) !=3D 1) + if (drm_dp_dpcd_read_data(&port->aux, + DP_FEC_CAPABILITY, &endpoint_fec, 1) < 0) return NULL; - if (drm_dp_dpcd_read(&immediate_upstream_port->aux, - DP_DSC_SUPPORT, &upstream_dsc, 1) !=3D 1) + if (drm_dp_dpcd_read_data(&immediate_upstream_port->aux, + DP_DSC_SUPPORT, &upstream_dsc, 1) < 0) return NULL; =20 /* Enpoint decompression with DP-to-DP peer device */ @@ -6143,8 +6140,8 @@ struct drm_dp_aux *drm_dp_mst_dsc_aux_for_port(struct= drm_dp_mst_port *port) if (drm_dp_has_quirk(&desc, DP_DPCD_QUIRK_DSC_WITHOUT_VIRTUAL_DPCD)) { u8 dpcd_ext[DP_RECEIVER_CAP_SIZE]; =20 - if (drm_dp_dpcd_read(immediate_upstream_aux, - DP_DSC_SUPPORT, &upstream_dsc, 1) !=3D 1) + if (drm_dp_dpcd_read_data(immediate_upstream_aux, + DP_DSC_SUPPORT, &upstream_dsc, 1) < 0) return NULL; =20 if (!(upstream_dsc & DP_DSC_DECOMPRESSION_IS_SUPPORTED)) @@ -6166,11 +6163,11 @@ struct drm_dp_aux *drm_dp_mst_dsc_aux_for_port(stru= ct drm_dp_mst_port *port) * therefore the endpoint needs to be * both DSC and FEC capable. */ - if (drm_dp_dpcd_read(&port->aux, - DP_DSC_SUPPORT, &endpoint_dsc, 1) !=3D 1) + if (drm_dp_dpcd_read_data(&port->aux, + DP_DSC_SUPPORT, &endpoint_dsc, 1) < 0) return NULL; - if (drm_dp_dpcd_read(&port->aux, - DP_FEC_CAPABILITY, &endpoint_fec, 1) !=3D 1) + if (drm_dp_dpcd_read_data(&port->aux, + DP_FEC_CAPABILITY, &endpoint_fec, 1) < 0) return NULL; if ((endpoint_dsc & DP_DSC_DECOMPRESSION_IS_SUPPORTED) && (endpoint_fec & DP_FEC_CAPABLE)) --=20 2.39.5 From nobody Sun Feb 8 21:48:14 2026 Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0DD9A1FAC40 for ; Fri, 17 Jan 2025 08:56:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104220; cv=none; b=OmwtsrX3flGDtB1GUhw95cdDtlz3zEzIXSgzd+aZZD8ICJbaRfbKtDKV2z++YHYjFnKmuj0ZhwSmUgTHn6MJFTC7kWDanyAfh18f8StRsOTSZbvZQdKOKctWW10Ln6UN/iogao7MfxVPvGzpn8u0i8k3xRRPd4E2rUtyxub/T6I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737104220; c=relaxed/simple; bh=W3eVsc55e3ZuouquqjNn9pJNO1JJGFNEugaVYRs9q+4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s3mKUqmrtNkw5A9+L2l9lXXq0WhDx/T0MRtQmWGrwDGqwFtdzI7aGI6KvbHZ9cwZRTZYFyCL0FEehhixkbD1uziOPg+dvjW7i7dMt1b6Df2sPRdN72jJCb9wRyb4t2xzOWFcGq8z01wQtenQUpcVpRY5GSNiageeGjqU/8mK9DQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=e2XNMYWW; arc=none smtp.client-ip=209.85.208.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="e2XNMYWW" Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-305d843d925so15824101fa.2 for ; Fri, 17 Jan 2025 00:56:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737104217; x=1737709017; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2BRQ6lNkfp8bS79Vg2bjfdOdsHUWBBgAxpLUiozXV7I=; b=e2XNMYWW3rSbT4DJcEPwJSflpGFU+UFjrOByQpjS5uZTXGwV1Rcgg4paseP+8uThNY SgW2l6ut/UCuLu1ObC0mZyyJmHrlK/LZFeB+zVjFly6W9JI5oGS36fl0Rx+nHwaDKDJo R/nazFayUx8av5THpDGH8yHlU4u3+TdvnvMKfMXOuJJM4BPPGoQEByZDPUp3lbldLaUl iRpCoBDQNCn3D/xpIF4MYmFzuW9EIuQieRxemv9tduiGs2IYmFf4dsl5TK7tAD6frgSk +iS9/KLALfnkB/gS85APxfJptVwIxEMp+IhxCtk2AGYjH0oOqxtlKpC03ijYO/OCry8G kstw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737104217; x=1737709017; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2BRQ6lNkfp8bS79Vg2bjfdOdsHUWBBgAxpLUiozXV7I=; b=djHwuknPVg/nBmuam3C0OLalSbOHFC7Ssn+4LNc36+8Ooz1cK9a7wgbgz0OY6OIzvs MZ5WEsjr6I3UsmbXUkMd/LKKhaaQw9RV19oPyhDFDSYcueQ4Ss3EEwZScb2HetY1OJ2F MY8dMC9YzAsZriJhNyepJatCLWiqbL9TxVFEk0rff4bPMF7G1MGo5VEKsJH4lBlKrTe5 h0psmqPUVc9zDUM05/msMHlC3eUc677UTN/Taz8RsQigkAQsHyc/OHupi0IEFBx7QBNC WoKZVYja1jx/p+nH7mKjTXZDBLCf6YFajEYvxqMJgERmT6+mUf5sWzbA3nD25/0VPP9F KtKw== X-Forwarded-Encrypted: i=1; AJvYcCU0iUO23xrhQaS0/6vH7hTG0q5Xmx1EjclnBiAKSKZTV7lxTbVhelqQJOF0HciTG+FBPSKZXp+3EkLzgOM=@vger.kernel.org X-Gm-Message-State: AOJu0YzGY2nPZHJpwLFxO+HE/nODmOo267z6+RxEyhkGHp7NJJG3PENp Knq+giPQa2/mIF3Ol+iT6z91F6rHUxMV8DTqWaetZ6NQDvnuhn+RF0PgZJRcJIY= X-Gm-Gg: ASbGncvFKxtH3qtIOt7Ge3Ev5XBgwpB4SjK1uisA7GMRhHvNNem3JAPJHtEhuZLguOw oS/VxDael0mJ9qVCF7b3p2Js600zoBn2YWZqlfRVbI3XndmRziGrNOc5E+udh8QHfGFv7JcFljn Mp4m2Sdarfdv+CjvyTuRVOuvzvntT9x//Qrt7OQTk4FS4fEWszohyNS1Kc68co+a+o0joL6IY/W dmZHMPV2jozRmNb8kKP0OMtRMRH2uo7vMecQeQN9hqMlMH/ZyfprLqsGihpMz/f X-Google-Smtp-Source: AGHT+IGJKew3iWflBqoi5/eBNb71qdJHpWzyjt6BMF62fH7cdxIvx8zhS7YOn1v6IRPYf1vezlY6Mg== X-Received: by 2002:a2e:a883:0:b0:306:188f:c0b3 with SMTP id 38308e7fff4ca-3072cb3cf7amr5794901fa.35.1737104217192; Fri, 17 Jan 2025 00:56:57 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3072a330764sm3402101fa.3.2025.01.17.00.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2025 00:56:56 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 17 Jan 2025 10:56:42 +0200 Subject: [PATCH RFC 7/7] drm/display: dp-tunnel: use new DCPD access helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250117-drm-rework-dpcd-access-v1-7-7fc020e04dbc@linaro.org> References: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> In-Reply-To: <20250117-drm-rework-dpcd-access-v1-0-7fc020e04dbc@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3991; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=W3eVsc55e3ZuouquqjNn9pJNO1JJGFNEugaVYRs9q+4=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ3qXtJub1UL2OoOXbhcTTBRLmuZej50sKPqoXmSaa94ZK xb17lWdjMYsDIxcDLJiiiw+BS1TYzYlh33YMbUeZhArE8gUBi5OAZjI+hIOhklzNU4FVAc5WV5y MzwS7eByXE656tX0UOPvT6c+/fpr1sfX1kz/OS1ZDY7WXfT3/1K7Up79QrO3zXH287zXWpzNX+h 3zb4qNf3xjlS5xQ6uVdOPt5/e8XvlkgLPNLcGy9BUkVWKtXmnD6VaTZVQVZn7uXBdEUvX/ce9Vs dDcvUFeTqCX5ZKlu2qTm/qXp7YKn8qrZV5p4+CxUnPnEliJ1fv3LdKQ4p/kY2kV3r22edTzzTLx jwSsVZdNsdtao7QjD6jKqPEt/nhO4rYmIQDuR7LfgjLn3pp3bMWv1pfa7W7fGJiPxpslrVLKB57 PdNl+vdD39QFcuddkzXIcmiWFD2UL/r1zlyBS6vdQnYCAA== X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Switch drm_dp_tunnel.c to use new set of DPCD read / write helpers. Signed-off-by: Dmitry Baryshkov Acked-by: Jani Nikula Reviewed-by: Lyude Paul --- drivers/gpu/drm/display/drm_dp_tunnel.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/disp= lay/drm_dp_tunnel.c index 48b2df120086c9b64f7d8b732c9f1f32f7b50fbd..4ef1f20bfe4a0648a92345a80fc= 6658ab23c5003 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -222,7 +222,7 @@ static int read_tunnel_regs(struct drm_dp_aux *aux, str= uct drm_dp_tunnel_regs *r while ((len =3D next_reg_area(&offset))) { int address =3D DP_TUNNELING_BASE + offset; =20 - if (drm_dp_dpcd_read(aux, address, tunnel_reg_ptr(regs, address), len) <= 0) + if (drm_dp_dpcd_read_data(aux, address, tunnel_reg_ptr(regs, address), l= en) < 0) return -EIO; =20 offset +=3D len; @@ -913,7 +913,7 @@ static int set_bw_alloc_mode(struct drm_dp_tunnel *tunn= el, bool enable) u8 mask =3D DP_DISPLAY_DRIVER_BW_ALLOCATION_MODE_ENABLE | DP_UNMASK_BW_AL= LOCATION_IRQ; u8 val; =20 - if (drm_dp_dpcd_readb(tunnel->aux, DP_DPTX_BW_ALLOCATION_MODE_CONTROL, &v= al) < 0) + if (drm_dp_dpcd_read_byte(tunnel->aux, DP_DPTX_BW_ALLOCATION_MODE_CONTROL= , &val) < 0) goto out_err; =20 if (enable) @@ -921,7 +921,7 @@ static int set_bw_alloc_mode(struct drm_dp_tunnel *tunn= el, bool enable) else val &=3D ~mask; =20 - if (drm_dp_dpcd_writeb(tunnel->aux, DP_DPTX_BW_ALLOCATION_MODE_CONTROL, v= al) < 0) + if (drm_dp_dpcd_write_byte(tunnel->aux, DP_DPTX_BW_ALLOCATION_MODE_CONTRO= L, val) < 0) goto out_err; =20 tunnel->bw_alloc_enabled =3D enable; @@ -1039,7 +1039,7 @@ static int clear_bw_req_state(struct drm_dp_aux *aux) { u8 bw_req_mask =3D DP_BW_REQUEST_SUCCEEDED | DP_BW_REQUEST_FAILED; =20 - if (drm_dp_dpcd_writeb(aux, DP_TUNNELING_STATUS, bw_req_mask) < 0) + if (drm_dp_dpcd_write_byte(aux, DP_TUNNELING_STATUS, bw_req_mask) < 0) return -EIO; =20 return 0; @@ -1052,7 +1052,7 @@ static int bw_req_complete(struct drm_dp_aux *aux, bo= ol *status_changed) u8 val; int err; =20 - if (drm_dp_dpcd_readb(aux, DP_TUNNELING_STATUS, &val) < 0) + if (drm_dp_dpcd_read_byte(aux, DP_TUNNELING_STATUS, &val) < 0) return -EIO; =20 *status_changed =3D val & status_change_mask; @@ -1095,7 +1095,7 @@ static int allocate_tunnel_bw(struct drm_dp_tunnel *t= unnel, int bw) if (err) goto out; =20 - if (drm_dp_dpcd_writeb(tunnel->aux, DP_REQUEST_BW, request_bw) < 0) { + if (drm_dp_dpcd_write_byte(tunnel->aux, DP_REQUEST_BW, request_bw) < 0) { err =3D -EIO; goto out; } @@ -1196,13 +1196,13 @@ static int check_and_clear_status_change(struct drm= _dp_tunnel *tunnel) u8 mask =3D DP_BW_ALLOCATION_CAPABILITY_CHANGED | DP_ESTIMATED_BW_CHANGED; u8 val; =20 - if (drm_dp_dpcd_readb(tunnel->aux, DP_TUNNELING_STATUS, &val) < 0) + if (drm_dp_dpcd_read_byte(tunnel->aux, DP_TUNNELING_STATUS, &val) < 0) goto out_err; =20 val &=3D mask; =20 if (val) { - if (drm_dp_dpcd_writeb(tunnel->aux, DP_TUNNELING_STATUS, val) < 0) + if (drm_dp_dpcd_write_byte(tunnel->aux, DP_TUNNELING_STATUS, val) < 0) goto out_err; =20 return 1; @@ -1215,7 +1215,7 @@ static int check_and_clear_status_change(struct drm_d= p_tunnel *tunnel) * Check for estimated BW changes explicitly to account for lost * BW change notifications. */ - if (drm_dp_dpcd_readb(tunnel->aux, DP_ESTIMATED_BW, &val) < 0) + if (drm_dp_dpcd_read_byte(tunnel->aux, DP_ESTIMATED_BW, &val) < 0) goto out_err; =20 if (val * tunnel->bw_granularity !=3D tunnel->estimated_bw) @@ -1300,7 +1300,7 @@ int drm_dp_tunnel_handle_irq(struct drm_dp_tunnel_mgr= *mgr, struct drm_dp_aux *a { u8 val; =20 - if (drm_dp_dpcd_readb(aux, DP_TUNNELING_STATUS, &val) < 0) + if (drm_dp_dpcd_read_byte(aux, DP_TUNNELING_STATUS, &val) < 0) return -EIO; =20 if (val & (DP_BW_REQUEST_SUCCEEDED | DP_BW_REQUEST_FAILED)) --=20 2.39.5