From nobody Wed Dec 17 22:42:40 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 177481531C4 for ; Fri, 14 Mar 2025 06:00:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932004; cv=none; b=Dm73ZcqZ/EewXuKitM1QezBJvU8O+lkrzH687AKCCTHEPQ0PVRaEKjFtV0el1jCzjSxjzY1xCGwb7s2VtwxmefnmDvMMhXY9EPrHddHyxbuUZw6Y4+RomfLXVgvozuPKq47IJCLoIR4UhNT/4s+LRT1lix8WW93+2V6ugQNcPlU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932004; c=relaxed/simple; bh=Dy7B9nXl0EbAUVXNcpgz5sajCgBRVXHbTi7mIRjd1+I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uYYNjErL7FKAutKcIBiCFLZAVj0/mEYMZrvJW0L5Yecgp/me9fNx+sPCh8ZNQvTwcD3OXUR1UOKUjqBAIoXJiZhi8IP+Ei8xKIrw6Jv4bo3zKRK02u4JG3Y+ZBLKPVA7jWCkDAHTiwqAOmiAqxqCT53Qvku2eAHGtAkZdhalVVc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=hGho4CJj; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="hGho4CJj" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 52DHJV44021900 for ; Fri, 14 Mar 2025 06:00:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ugx4av2Bblczqdq51yvv9QisQbSYAgbAPKVnJleCLeo=; b=hGho4CJjr/KOBibe eJ1Xw9kydGPqBDQKqEWeGaMLrdgMAKWz57lDF+cQ087DC1YI1y6ch+rNpxNEKTBw N2dVr197yQwvbtpTSwKMt5nTGs1h3QWtam42rPI8zG3JJtBI8lM1OaLGr6Z2Yr2C bsruOMXffOgob/t0ckIVuTjvA40zVJ5ovpfKvLUEYAkBPAMr7angMMd03pk3rqm2 8XhzMuVyy64ByEiGrJjINXh2ZkaUTelosfd4TzDxn7gtPA/4kQC61pnbyJV0Nweg 7/TQXTsN3plrDIGNhbyVA1H4V03T0qKndt0iTIpDhxqWOuAmFXurBtboQxGfs9s3 cbYPZQ== Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 45bu07k63v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 14 Mar 2025 06:00:01 +0000 (GMT) Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-6e90b13f5c3so38233696d6.0 for ; Thu, 13 Mar 2025 23:00:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741932000; x=1742536800; 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=ugx4av2Bblczqdq51yvv9QisQbSYAgbAPKVnJleCLeo=; b=A7mRGos4hBS/BroI67o0GNntLbSNZkt9uImCVwllwcGZqXPIztAaPK+AXuLDEBFKND Fjsiesp9Vop0YSUfgF/yfmw6l5sr3mclxsrZvqS+NY3/nr1KtWCk5or3HwQyRopvhVsU DBWYczNzz9t5tFz4BPP57cjI0LMs3TaCNSTWeeyDjZMOeVVW2rusTFj9NKSyZ20F6gtG VVKte+IE9siHIwphE9pVFe0oKHSuRRw4jcbZGnThP+abtO0QBW8PQaSmitePDUtPaG0U l33OJuEpHOUUKK5Pe6IGJfzFCp1m8UA/3gvZo/StDlP0csteGtkSeK34ONh/9TyUo8qN csEQ== X-Forwarded-Encrypted: i=1; AJvYcCVGfJqEwEdZaTw7sLwITuCIzlI7Hq0gng3s2bawZp/+vOFPbN1kqkESw9AwwtdCKqeuEHPehN/bxyFM6dU=@vger.kernel.org X-Gm-Message-State: AOJu0YwRxrCeckOKe59jHd/qaaSf9ckIGSr+bDu94hwvDhZLoSeupIO1 S+XgqkFVUyPdV9DX2KP/FVGHNPnzgDI+KZbGXJ4RpmuHkI2cRVD9q+E+c4o512fAp2SDFOULor0 qzUdMNXz8MYT6KQ2/iPuKNP9FyZfFXdeaSWw7hKNwCFzSas9O/aoQH5n3LnTpa5E= X-Gm-Gg: ASbGncs7PXu8Itc45nWkY/Au117UPDfoABc3JyJwaIoljbj230xOZvy7D0Zcr0vh7o5 b6xslPJI0vFtZFAEg9SdRR8Z9lhEtFvcD1kuNL39RDI10x35i0X300jerh3j+J3bEnWeWQ1M8zP emoe6ORBa5Zp9rWco54v3tTAhVjxAOT2CcGE2xREUALGjrnorRwP87k8jSP6rhdksJgSuRT9lOb WU7bDPB76i4CywSYNz3IX1mlIfZf1pm+5BKjis+Ep8HnbN96STc/i099bj67ioCPHv3zhvvHqJz jD2Wj2PhbwqqZPlR1rJ1yweZxLpv0A3cdM4hJOdYIySg84IuZsP9lPYdmurBh5jrJjoAJ9z6FKT eCNl+cCXAlKTN2GF4T5THt3J8xY6L X-Received: by 2002:a05:6214:5097:b0:6e2:497f:1ec7 with SMTP id 6a1803df08f44-6eaeaafff86mr13945996d6.41.1741932000450; Thu, 13 Mar 2025 23:00:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHzJ3grBfkPGn5evRNuPJKqK/SdPx0yO1Uibhzm1nNT/G7XrRBNiFV4aSukq9DzA4rYPS14pw== X-Received: by 2002:a05:6214:5097:b0:6e2:497f:1ec7 with SMTP id 6a1803df08f44-6eaeaafff86mr13945486d6.41.1741932000055; Thu, 13 Mar 2025 23:00:00 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-549ba88332dsm416136e87.181.2025.03.13.22.59.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Mar 2025 22:59:59 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 14 Mar 2025 07:59:42 +0200 Subject: [PATCH RFC v4 1/6] 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: <20250314-drm-rework-dpcd-access-v4-1-e86ef6fc6d76@oss.qualcomm.com> References: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> In-Reply-To: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> To: Lyude Paul , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Xinliang Liu , Tian Tao , Xinwei Kong , Sumit Semwal , Yongqin Liu , John Stultz Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Dmitry Baryshkov , Jani Nikula X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6708; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=QM+eu1I8aF02p2Or2gRwLpTXBfv2/4RXGbOyoJVHkoQ=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBn08XY76ngDwaa5WbbrdnBPCrij+LYZ6UJ9ScWI ZBKCV7VVm+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ9PF2AAKCRCLPIo+Aiko 1XWCB/9wWGxU4kR6XthOtq7XncKAUuPSbsaARThdOcFHINweGF7C6Wa2lV6einYdmNCuwSdK+qm 7fxF0f/No9p3981YbAVJBAW5JWJtkV9YuZUGz2y21/Sn74OKnQovmxFt8V+5SOmTFfpDUQH5xhB l+dSgrNXyy7lLq2MeB6Ncl7hsky4L3CnlC9SsU9dY+dMhXKP+6drMiOGNba7G9BVAkQm36yA+yJ rAeE4LStO6w/0SzJig17D8rJRhMBFnQYzopZJ2LEld/bI7gHzeLFukCPlCAgB+JpTAkB33rMPi6 Df94J3JekD1yuiOAz9/B8JBFs/IJhJS6vcGKoxVpSYe2dFJL X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: _NB2UOOIp99ma30OQ5_docIPgtV6TSwD X-Authority-Analysis: v=2.4 cv=V+F90fni c=1 sm=1 tr=0 ts=67d3c5e1 cx=c_pps a=oc9J++0uMp73DTRD5QyR2A==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Vs1iUdzkB0EA:10 a=KKAkSRfTAAAA:8 a=QyXUC8HyAAAA:8 a=20KFwNOVAAAA:8 a=Mcyz43guUpAUgyxYx7EA:9 a=QEXdDO2ut3YA:10 a=iYH6xdkBrDN1Jqds4HTS:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: _NB2UOOIp99ma30OQ5_docIPgtV6TSwD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-14_02,2025-03-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 mlxlogscore=999 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 mlxscore=0 lowpriorityscore=0 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2503140045 From: Dmitry Baryshkov 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. Suggested-by: Jani Nikula Acked-by: Jani Nikula Reviewed-by: Lyude Paul Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/display/drm_dp_helper.c | 4 ++ include/drm/display/drm_dp_helper.h | 92 +++++++++++++++++++++++++++++= +++- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/disp= lay/drm_dp_helper.c index dbce1c3f49691fc687fee2404b723c73d533f23d..e43a8f4a252dae22eeaae1f4ca9= 4da064303033d 100644 --- a/drivers/gpu/drm/display/drm_dp_helper.c +++ b/drivers/gpu/drm/display/drm_dp_helper.c @@ -704,6 +704,8 @@ EXPORT_SYMBOL(drm_dp_dpcd_set_powered); * 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. + * + * In most of the cases you want to use drm_dp_dpcd_read_data() instead. */ ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size) @@ -752,6 +754,8 @@ EXPORT_SYMBOL(drm_dp_dpcd_read); * 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. + * + * In most of the cases you want to use drm_dp_dpcd_write_data() instead. */ ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size) diff --git a/include/drm/display/drm_dp_helper.h b/include/drm/display/drm_= dp_helper.h index 5ae4241959f24e2c1fb581d7c7d770485d603099..21e22289d1caebe616b57a30406= 1b12592ad41ea 100644 --- a/include/drm/display/drm_dp_helper.h +++ b/include/drm/display/drm_dp_helper.h @@ -527,6 +527,64 @@ ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsig= ned int offset, ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size); =20 +/** + * 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 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. + */ +static inline int drm_dp_dpcd_read_data(struct drm_dp_aux *aux, + unsigned int offset, + void *buffer, size_t size) +{ + int ret; + + ret =3D drm_dp_dpcd_read(aux, offset, buffer, size); + if (ret < 0) + return ret; + if (ret < size) + return -EPROTO; + + return 0; +} + +/** + * 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 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. + */ +static inline int drm_dp_dpcd_write_data(struct drm_dp_aux *aux, + unsigned int offset, + void *buffer, size_t size) +{ + int ret; + + ret =3D drm_dp_dpcd_write(aux, offset, buffer, size); + if (ret < 0) + return ret; + if (ret < size) + return -EPROTO; + + return 0; +} + /** * drm_dp_dpcd_readb() - read a single byte from the DPCD * @aux: DisplayPort AUX channel @@ -534,7 +592,8 @@ ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsig= ned int offset, * @valuep: location where the value of the register will be stored * * Returns the number of bytes transferred (1) on success, or a negative - * error code on failure. + * error code on failure. In most of the cases you should be using + * drm_dp_dpcd_read_byte() instead. */ static inline ssize_t drm_dp_dpcd_readb(struct drm_dp_aux *aux, unsigned int offset, u8 *valuep) @@ -549,7 +608,8 @@ static inline ssize_t drm_dp_dpcd_readb(struct drm_dp_a= ux *aux, * @value: value to write to the register * * Returns the number of bytes transferred (1) on success, or a negative - * error code on failure. + * error code on failure. In most of the cases you should be using + * drm_dp_dpcd_write_byte() instead. */ static inline ssize_t drm_dp_dpcd_writeb(struct drm_dp_aux *aux, unsigned int offset, u8 value) @@ -557,6 +617,34 @@ static inline ssize_t drm_dp_dpcd_writeb(struct drm_dp= _aux *aux, return drm_dp_dpcd_write(aux, offset, &value, 1); } =20 +/** + * 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); +} + int drm_dp_read_dpcd_caps(struct drm_dp_aux *aux, u8 dpcd[DP_RECEIVER_CAP_SIZE]); =20 --=20 2.39.5 From nobody Wed Dec 17 22:42:40 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87DDF15C140 for ; Fri, 14 Mar 2025 06:00:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932008; cv=none; b=VCDfF6pQjDcFYyVNHxblxXW9MU1qrd1CdvkfSgiRCO3K/CAjYeHHDrxCwE5mm5Cb0S2L6PCjTQHU4BZBn/uzsBbU+WjZPuiMaE2p2iEnSPS3PJZ8g3vDSP9lb1wD/vgexykuplFXTQUkeA250eupTkQIDbyPo0LLJiSUGcjU014= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932008; c=relaxed/simple; bh=PRGKIea3IlpKbk68rroWTZLt3foX0024PS9zHngAeL0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cKDS0OeaSChcQ5ILFxOThlkcPcRSOR3OVTotJ2XFLEAjq/s22sTLMAScbdiwBH9XTRaD1vEPT0b9Oz19nk8GqMILzsrb0V/U+2ENvzqbb74FTALnJC2yNyetITxNRKikc7XtF4RwVfWSsD4CJIiAziLZwvMEWIZhyW1q5Q5PEPw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=KDJFY7vg; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="KDJFY7vg" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 52DGkEHa019199 for ; Fri, 14 Mar 2025 06:00:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= xwh0kAnHT7FdNhb96gdjp7PUruv4t4YUK908RVrCz7k=; b=KDJFY7vgLmFnHksr JiiA303xG/V2xt9VWrXzg1Fkve33dle/iq87SiehFh7DbqVAgcOdNvWO2k44FIuX ZtgH4uhk6zorcYH5B8d0YQmfeaVjTFMKl5J0eHxiW+ZvgJM2Wp4zDAEDjWkBlwCk xrf2HWwyYn4MwNzB6NuNzJCDhvpSQF1RtjxJQsOci3xzqN3HA3rALJXhWjWtpSlx pzyX07jGV9ZwUFw3qlcXAnzLLa6IsRwB04kdUsfM+2ILPgXtfzIqX+enl4RbVHde ZxXIA6ULz2iDikBc1DRI5WJKbTWoHNal2I9cmdxDW7dMQnVV8huxQ11MqpRwK1C7 Np2AaQ== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 45bts0k8nr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 14 Mar 2025 06:00:05 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-4767261982eso33558201cf.2 for ; Thu, 13 Mar 2025 23:00:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741932004; x=1742536804; 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=xwh0kAnHT7FdNhb96gdjp7PUruv4t4YUK908RVrCz7k=; b=UHIRcyHrqzU0glDZ7zcXPYwdqo+izCh5XgQNOqHFfIUKqncxzpSw7E6bY5ZdiaOS70 73Zc3179Ug4hDTUTACE4oOIIB8CfG0KAyNVH+NLBzZzmLGcljH+t6wheENTgl7t5Yoi+ 51DrwIslihmlPgIXl6IAWf6tltiUXXp0IRuTKNtD5ScDRoJFFdaxxPGbvmNMOdqQaK5d f4VZ5gFLlFSQmmbID1fdCWCuOBlKgJ4xiDG7EAYJI7SpqCaltPLmRSAar4cvy1n013hS v6hUbEbFD7O+MgnLJ2BSW+24t8yvZlTOJLIPb9VIwAxbHTfv1ODLk+s0X6vr1dULCTln itFA== X-Forwarded-Encrypted: i=1; AJvYcCV3JH1JEiP4DfkLGSRLJREcTUCdBy1fWkq0GFKWYOkzbQbKcm8sMY2wbTOlDZ9PEZ+j8PfwzkIaOX53x7M=@vger.kernel.org X-Gm-Message-State: AOJu0Yyb5GXgUjSyoI8lSHjbDtvkWkmBycB3wNzL1AgPuffyO3NEguof +N3PmgjtYHNHcR5YI5PjELDWYB269V/YWNHEeuxm5MYfRnyx2H8GmE35wlMZ3DKZ3rwxpDG8HL1 E7Rk8RSU/xTVL7qkHl9JoqSFd87kbHwXO8t/39WyGmAEt+xbD+ECeEaftUpDQhBk= X-Gm-Gg: ASbGncuf7tdKmI/skj+/t/1hOLHN2PF0rSbFthjhA9qEWpz+vWmp7Z7l3PAGyf7hgMc L8LQqnt6lk54YLSDeyXyb5NkYpScTs1U4YaRX3mkzgWfbkqR/fQa3p1YWJLEqghdtz8qO36P88q tVXzhBpYJU7AYvxHQgX78Lx7uKRcz9SE+t5cKwiGIwSxEVr/8KTCjkq3Q2hiP6IXqVTWnFphjqU qvmWBIfRVOVCNFTEsKWLYa9JFfTmiuF3BnJoRXKL970Lyfm/WJikc4+ZYM9+rIRtHGd+xbl1iC6 2Kfemt61VNFuObXRj6pu+TTz1OabSUoTnw6DGAR7w7LObk+c2xeuI10DOai2auTu9LIrPAEqE0d p+Az1YkJ3N1u1FmcZMQNPE+KRfhdg X-Received: by 2002:a05:622a:1116:b0:476:8960:d1a3 with SMTP id d75a77b69052e-476c813ade5mr19140591cf.14.1741932004305; Thu, 13 Mar 2025 23:00:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE7W2OQ7A9S8YCLXKW598exLMciYwyh7aYTDa8T9i+XTPgfRVoKtUUfUUMEljyBOSYXIsoNng== X-Received: by 2002:a05:622a:1116:b0:476:8960:d1a3 with SMTP id d75a77b69052e-476c813ade5mr19140091cf.14.1741932003867; Thu, 13 Mar 2025 23:00:03 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-549ba88332dsm416136e87.181.2025.03.13.23.00.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Mar 2025 23:00:01 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 14 Mar 2025 07:59:43 +0200 Subject: [PATCH RFC v4 2/6] drm/display: dp: change drm_dp_dpcd_read_link_status() return value 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: <20250314-drm-rework-dpcd-access-v4-2-e86ef6fc6d76@oss.qualcomm.com> References: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> In-Reply-To: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> To: Lyude Paul , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Xinliang Liu , Tian Tao , Xinwei Kong , Sumit Semwal , Yongqin Liu , John Stultz Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Dmitry Baryshkov , Jani Nikula X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10619; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=XBxhw4jfP8Ib9Agf9heZOk6AB5nizhAMmuxM/unOe1k=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBn08XZrrhr+hcfA8QE/UFPAhqQppqvI+igpL/x9 ErT7DACxb+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ9PF2QAKCRCLPIo+Aiko 1UggB/wPAlK8HEjL0DhPPOk5/KF/hAZsSWAV9nnvVfzWxVQP5y2ILu9sXmS3c7nW+r77goT4Fi4 ZZFpZJvsI8AejPJRT8EzuzJO8Slz0u8n/4vI0n+B19AUGotXL8d0MH2/iI4Somf0LWyp8AcowJQ 4nbQmbMxIhZCVKAZme71TkAmFEvnhFofAjhodXKsvfbk18zJ+9DELVYgCQKg3h+9km6U81Z1CXp zR7gIGkAWkgcHANYhl5dSyLv7rTMF3PVrFNpHl4kSQYp2lQ68bHnbpF5LrqAbhXPWbU1nqB+Ci2 P2SAAvREoyrOr2QfA2631mb8A4ugGeHKJGAuQKwnH6kHGWNP X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: qbtlRbt2yqEym6Z9jF8liG6MiOe8e5ud X-Authority-Analysis: v=2.4 cv=DNSP4zNb c=1 sm=1 tr=0 ts=67d3c5e5 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Vs1iUdzkB0EA:10 a=KKAkSRfTAAAA:8 a=QyXUC8HyAAAA:8 a=20KFwNOVAAAA:8 a=SwUNW72u-79MlN5x3aoA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: qbtlRbt2yqEym6Z9jF8liG6MiOe8e5ud X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-14_02,2025-03-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 phishscore=0 malwarescore=0 mlxlogscore=999 priorityscore=1501 mlxscore=0 spamscore=0 bulkscore=0 impostorscore=0 suspectscore=0 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2503140045 From: Dmitry Baryshkov 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 interpreted that as "return error code in case of any error". Switch drm_dp_dpcd_read_link_status() to drm_dp_dpcd_read_data() and make it follow that protocol too. Acked-by: Jani Nikula Reviewed-by: Lyude Paul Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/amd/amdgpu/atombios_dp.c | 8 ++++---- .../gpu/drm/bridge/cadence/cdns-mhdp8546-core.c | 2 +- drivers/gpu/drm/display/drm_dp_helper.c | 7 +++---- drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c | 4 ++-- drivers/gpu/drm/msm/dp/dp_ctrl.c | 24 +++++-------------= ---- drivers/gpu/drm/msm/dp/dp_link.c | 18 ++++++++-------- drivers/gpu/drm/radeon/atombios_dp.c | 8 ++++---- 7 files changed, 28 insertions(+), 43 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c b/drivers/gpu/drm/amd= /amdgpu/atombios_dp.c index 521b9faab18059ed92ebb1dc9a9847e8426e7403..492813ab1b54197ba842075bc29= 09984c39bd5c1 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c @@ -458,8 +458,8 @@ bool amdgpu_atombios_dp_needs_link_train(struct amdgpu_= connector *amdgpu_connect u8 link_status[DP_LINK_STATUS_SIZE]; struct amdgpu_connector_atom_dig *dig =3D amdgpu_connector->con_priv; =20 - if (drm_dp_dpcd_read_link_status(&amdgpu_connector->ddc_bus->aux, link_st= atus) - <=3D 0) + if (drm_dp_dpcd_read_link_status(&amdgpu_connector->ddc_bus->aux, + link_status) < 0) return false; if (drm_dp_channel_eq_ok(link_status, dig->dp_lane_count)) return false; @@ -616,7 +616,7 @@ amdgpu_atombios_dp_link_train_cr(struct amdgpu_atombios= _dp_link_train_info *dp_i drm_dp_link_train_clock_recovery_delay(dp_info->aux, dp_info->dpcd); =20 if (drm_dp_dpcd_read_link_status(dp_info->aux, - dp_info->link_status) <=3D 0) { + dp_info->link_status) < 0) { DRM_ERROR("displayport link status failed\n"); break; } @@ -681,7 +681,7 @@ amdgpu_atombios_dp_link_train_ce(struct amdgpu_atombios= _dp_link_train_info *dp_i drm_dp_link_train_channel_eq_delay(dp_info->aux, dp_info->dpcd); =20 if (drm_dp_dpcd_read_link_status(dp_info->aux, - dp_info->link_status) <=3D 0) { + dp_info->link_status) < 0) { DRM_ERROR("displayport link status failed\n"); break; } diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/= gpu/drm/bridge/cadence/cdns-mhdp8546-core.c index 81fad14c2cd598045d989c7d51f292bafb92c144..8d5420a5b691180c4d051a450d5= d3d869a558d1a 100644 --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c @@ -2305,7 +2305,7 @@ static int cdns_mhdp_update_link_status(struct cdns_m= hdp_device *mhdp) * If everything looks fine, just return, as we don't handle * DP IRQs. */ - if (ret > 0 && + if (!ret && drm_dp_channel_eq_ok(status, mhdp->link.num_lanes) && drm_dp_clock_recovery_ok(status, mhdp->link.num_lanes)) goto out; diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/disp= lay/drm_dp_helper.c index e43a8f4a252dae22eeaae1f4ca94da064303033d..410be0be233ad94702af423262a= 7d98e21afbfeb 100644 --- a/drivers/gpu/drm/display/drm_dp_helper.c +++ b/drivers/gpu/drm/display/drm_dp_helper.c @@ -778,14 +778,13 @@ 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 a negative error code on failure or 0 on success. */ 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); + 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 diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c b/drivers/gpu/drm= /hisilicon/hibmc/dp/dp_link.c index f6355c16cc0ab2e28408ab8a7246f4ca17710456..a3b78b0fd53ef854a54edf40fb3= 33766da88f1c6 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c @@ -188,7 +188,7 @@ static int hibmc_dp_link_training_cr(struct hibmc_dp_de= v *dp) drm_dp_link_train_clock_recovery_delay(&dp->aux, dp->dpcd); =20 ret =3D drm_dp_dpcd_read_link_status(&dp->aux, lane_status); - if (ret !=3D DP_LINK_STATUS_SIZE) { + if (ret) { drm_err(dp->dev, "Get lane status failed\n"); return ret; } @@ -236,7 +236,7 @@ static int hibmc_dp_link_training_channel_eq(struct hib= mc_dp_dev *dp) drm_dp_link_train_channel_eq_delay(&dp->aux, dp->dpcd); =20 ret =3D drm_dp_dpcd_read_link_status(&dp->aux, lane_status); - if (ret !=3D DP_LINK_STATUS_SIZE) { + if (ret) { drm_err(dp->dev, "get lane status failed\n"); break; } diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_c= trl.c index d8633a596f8da88cc55f60de80bec8999ffb07c8..69a26bb5fabd1c3077573ad5a11= 83ee69cf3b8cd 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,7 +1126,7 @@ static int msm_dp_ctrl_link_train_1(struct msm_dp_ctr= l_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); + ret =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); if (ret) return ret; =20 @@ -1252,7 +1238,7 @@ static int msm_dp_ctrl_link_train_2(struct msm_dp_ctr= l_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); + ret =3D drm_dp_dpcd_read_link_status(ctrl->aux, link_status); if (ret) return ret; =20 @@ -1805,7 +1791,7 @@ static bool msm_dp_ctrl_channel_eq_ok(struct msm_dp_c= trl_private *ctrl) u8 link_status[DP_LINK_STATUS_SIZE]; int num_lanes =3D ctrl->link->link_params.num_lanes; =20 - msm_dp_ctrl_read_link_status(ctrl, link_status); + drm_dp_dpcd_read_link_status(ctrl->aux, link_status); =20 return drm_dp_channel_eq_ok(link_status, num_lanes); } @@ -1863,7 +1849,7 @@ int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_ct= rl) if (!msm_dp_catalog_link_is_connected(ctrl->catalog)) break; =20 - msm_dp_ctrl_read_link_status(ctrl, link_status); + drm_dp_dpcd_read_link_status(ctrl->aux, link_status); =20 rc =3D msm_dp_ctrl_link_rate_down_shift(ctrl); if (rc < 0) { /* already in RBR =3D 1.6G */ @@ -1888,7 +1874,7 @@ int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_ct= rl) if (!msm_dp_catalog_link_is_connected(ctrl->catalog)) break; =20 - msm_dp_ctrl_read_link_status(ctrl, link_status); + drm_dp_dpcd_read_link_status(ctrl->aux, link_status); =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..92a9077959b3ec10c2a529db1a0= e9fb3562aa5d3 100644 --- a/drivers/gpu/drm/msm/dp/dp_link.c +++ b/drivers/gpu/drm/msm/dp/dp_link.c @@ -714,21 +714,21 @@ 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); diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/= atombios_dp.c index fa78824931cc428b1f9e23fe8f98867136ef9883..3f3c360dce4bcf2c87a6c7adbbf= 7a727a4f8eb4c 100644 --- a/drivers/gpu/drm/radeon/atombios_dp.c +++ b/drivers/gpu/drm/radeon/atombios_dp.c @@ -501,8 +501,8 @@ bool radeon_dp_needs_link_train(struct radeon_connector= *radeon_connector) u8 link_status[DP_LINK_STATUS_SIZE]; struct radeon_connector_atom_dig *dig =3D radeon_connector->con_priv; =20 - if (drm_dp_dpcd_read_link_status(&radeon_connector->ddc_bus->aux, link_st= atus) - <=3D 0) + if (drm_dp_dpcd_read_link_status(&radeon_connector->ddc_bus->aux, + link_status) < 0) return false; if (drm_dp_channel_eq_ok(link_status, dig->dp_lane_count)) return false; @@ -678,7 +678,7 @@ static int radeon_dp_link_train_cr(struct radeon_dp_lin= k_train_info *dp_info) drm_dp_link_train_clock_recovery_delay(dp_info->aux, dp_info->dpcd); =20 if (drm_dp_dpcd_read_link_status(dp_info->aux, - dp_info->link_status) <=3D 0) { + dp_info->link_status) < 0) { DRM_ERROR("displayport link status failed\n"); break; } @@ -741,7 +741,7 @@ static int radeon_dp_link_train_ce(struct radeon_dp_lin= k_train_info *dp_info) drm_dp_link_train_channel_eq_delay(dp_info->aux, dp_info->dpcd); =20 if (drm_dp_dpcd_read_link_status(dp_info->aux, - dp_info->link_status) <=3D 0) { + dp_info->link_status) < 0) { DRM_ERROR("displayport link status failed\n"); break; } --=20 2.39.5 From nobody Wed Dec 17 22:42:40 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E62241624CF for ; Fri, 14 Mar 2025 06:00:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932012; cv=none; b=KY9aLDGRGVt8PsvLhBnXP3sQAzjkq+jx0vweoHjp7utWo56bGLWHxgXjbMh8Av2iLkA219e6l1aM3Iz0a26pU+N1aS7SaPmQnwCJAQfMWl+6RSwKIDbUhkvPB9HNPKWjZ/CROybUK0WPehG2alLVXI2k4S2kAWIbKpUnHHEC+tg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932012; c=relaxed/simple; bh=TrQQLpK3bGisClhVHzU+0Bb7tVc2pyHtDg9eaM8Kz5M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aqIRSbd8z75qAkJJWHF7CwBmW8uaEFPaDX7X4GfpMRI/sx5l1WWE2kF2ewNZLvAxwx6oamCQW9bHtvEa3CJKgDyL2sEi6oN2AJiX0gKDZNT/DiiTeP1Wlgi3KsYSgxj0P4kQOoHkTSW9IpNjvaItAaxNtq0cdoPP+JxSYiaGUm4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=S1wFTpxK; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="S1wFTpxK" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 52DH0xgP019804 for ; Fri, 14 Mar 2025 06:00:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= FU1mXf0DVANe/L0lrcejH4nrOKNUOeVpUsibn0+P3j8=; b=S1wFTpxKzUPL/Kt3 NeI0qft+s2nyOPzk/IxsxvQQAMMuFR/uEuP+w9tz0IVQ+DDtz4x89FjnqLpBNqYI 3ybjMFdMI57lshlv3PD5hxBjQczo/u5rlNuK0NK2C5SgPBWGyQbRjrgrTCNE01YY MRhOrEX2lPe+uaUp0SEezOQGZwP092a/Yr1DOpmn12Oun0MIwyzkZusq7Y6gzYJ6 iUo6stWmZi1Bttjw1/l9KYBN0Nzys07EYSkw2W4gMeLJkBVHUDzceZgFa5AaHkGF 7DJu+1yF2bySPbd9+9NulPfE8TDExBAef3u5jpP6iYAafIXQ8aILWZQ0YseT0U5q WoprDQ== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 45bts0k8p3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 14 Mar 2025 06:00:08 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-476b3b071b6so46557521cf.0 for ; Thu, 13 Mar 2025 23:00:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741932007; x=1742536807; 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=FU1mXf0DVANe/L0lrcejH4nrOKNUOeVpUsibn0+P3j8=; b=MT0hWIQ69ScvzwWHeJvf1TALpFS87nfOEqedlRvQzWotj3/7mC5RKUU6+qyacMiPQN /H8SO5ZZOWHgA7an36tljSaShWs3SvXM7BLFpPDkN5RtBXd7TK8LWfq5KhDROCvgMHYi WOMmyr8cCVu4wZDTpyZjP6q/WL+fAYIm8tN0c/k5YI2yd8aGBs5taVW4/HXpmZD1r44F BVElg6wTeYZ4ZbV9W6viyR/7cGyZE71vAQ4/N4gzc7syQl6HmqsrqWJklWL+iRquc4G7 K5WlbJtYOjn+y51wjtUbCQNiEpsfylr9z8h9kILAVZm3vTnEc0DjLc+KjsLQjeUrxZYa rFkQ== X-Forwarded-Encrypted: i=1; AJvYcCVK8U+DkCmnbGCIA3vhi7WauxcoCTufa/WduGj/SyXFHSLW9p3N4jhowsezk3zVtqOVBrtvJTZRdOJdOnw=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9TaRuKek7MzHPrXjMBPmLQ+9LnA9lpx8CvFDSllC/E8C5iQ+C AtGckssXowzYCjL3QcSE5xY7X2MQ2vTEPV6DpJjJ/yr+SJlGv7DN5VEitar+nlsU2wFk8eNDtgk Wv/FkqpwVllAuPwNpAI1DFMzYELPY+nrNVU3blALSJCIvLDZ6QmJ4nylgBjZWDlI= X-Gm-Gg: ASbGncvqaiPXm8X3kHxJ7tFUPfEsrHyDAvv6/iotnmM+3Ftk39H3Kgw1QMJFrpx8N76 NpmvUyn81QBIm+gdjpGwuzTL0BVNa95VOwDrP3dQFMuEVhCnJMWTxZD/t/Ivw5+JghEiv9oA+X+ 7IpXWwf5fX4mKq55TqdsDRXKSP2NJaqzFCWx83x9kmYTEfYjeb4OnOnPCU7+idEqube2VUEYtF0 6cBwUvO/KlnRda9G3QzjcWO3IWHHqqmJGpUEll6EoIuJA1vGW0BGpMUG7AyaTIonvCZWN08ptTI CLKdTGKzHh8+9DDlPIyLI+i+yujzXTcbvytWvEuF5mM876NYcVz+UfCERyVS7RHwxdy3RR41GGC 6c/pzubsohkMYXBOS0NkfkiOCBxQ4 X-Received: by 2002:a05:622a:1886:b0:471:fef5:ee84 with SMTP id d75a77b69052e-476c92528fcmr15853141cf.7.1741932007260; Thu, 13 Mar 2025 23:00:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEiN8d5GW7AGYeOMXXEMwsinds5IG//FV7jhFKM91dWZ5FDbbDcKVFVihKNEyMqmwwyVfj/vQ== X-Received: by 2002:a05:622a:1886:b0:471:fef5:ee84 with SMTP id d75a77b69052e-476c92528fcmr15852671cf.7.1741932006751; Thu, 13 Mar 2025 23:00:06 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-549ba88332dsm416136e87.181.2025.03.13.23.00.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Mar 2025 23:00:05 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 14 Mar 2025 07:59:44 +0200 Subject: [PATCH RFC v4 3/6] 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: <20250314-drm-rework-dpcd-access-v4-3-e86ef6fc6d76@oss.qualcomm.com> References: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> In-Reply-To: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> To: Lyude Paul , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Xinliang Liu , Tian Tao , Xinwei Kong , Sumit Semwal , Yongqin Liu , John Stultz Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Dmitry Baryshkov , Jani Nikula X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=27759; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Kupghql56DHqM4wDv/45qSyGLZpGi6n/Mw9iPxFwqBk=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBn08XZOAXzLyKNJUboqiysD5tGu166IinxYKyjI PpUsQ2dnxaJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ9PF2QAKCRCLPIo+Aiko 1VpRB/9N3/MKHiyUD0AfGp3dTz6UNsDIr1ITNIaXPVyyqh7AVK/sO+endnIal+K8h+bv+LWTnb5 ztJIfnbELAb6IeRbdj+fZSaGqsds50LsXi5Jss75x/daUpxfGBSSd8Z/O8+GaFl6OMjzj/26mtf w7cKNIM7ke/6t4N8MBMYBq3/D+B79wM8TmXIQdanGGJC3Jd/RExP/ZEmeeZeUIdfX0RQwmPXzkx 66DDY6VmC9XImbt3obmyjzMpHJ4Gt1u2dk7Ccthew9yCes3PkVxG/R0g20BXB8m022VueGtzX7/ bk8zoO/cFmv4+59X0W6ZvEZKDVH9DFDC/38fEoEPMgCt+eEB X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: I8hQzwbxHWjtVNqyk693Kc5YYY706mMc X-Authority-Analysis: v=2.4 cv=DNSP4zNb c=1 sm=1 tr=0 ts=67d3c5e8 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Vs1iUdzkB0EA:10 a=KKAkSRfTAAAA:8 a=20KFwNOVAAAA:8 a=QyXUC8HyAAAA:8 a=FYq9FAz7wtZL43-cE34A:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: I8hQzwbxHWjtVNqyk693Kc5YYY706mMc X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-14_02,2025-03-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 phishscore=0 malwarescore=0 mlxlogscore=999 priorityscore=1501 mlxscore=0 spamscore=0 bulkscore=0 impostorscore=0 suspectscore=0 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2503140045 From: Dmitry Baryshkov Switch drm_dp_helper.c to use new set of DPCD read / write helpers. Reviewed-by: Lyude Paul Acked-by: Jani Nikula Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/display/drm_dp_helper.c | 296 +++++++++++++---------------= ---- 1 file changed, 116 insertions(+), 180 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/disp= lay/drm_dp_helper.c index 410be0be233ad94702af423262a7d98e21afbfeb..e2439c8a7fefe116b04aaa689b5= 57e2387b05540 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 */ @@ -807,30 +807,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], @@ -846,7 +836,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 @@ -873,21 +863,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; @@ -1043,15 +1033,15 @@ bool drm_dp_send_real_edid_checksum(struct drm_dp_a= ux *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; @@ -1064,23 +1054,23 @@ bool drm_dp_send_real_edid_checksum(struct drm_dp_a= ux *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; @@ -1117,12 +1107,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, @@ -1159,10 +1147,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); @@ -1212,11 +1200,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 @@ -1573,7 +1559,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 @@ -1638,13 +1624,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) { @@ -1782,11 +1768,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); } @@ -2175,13 +2159,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 @@ -2195,11 +2179,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) @@ -2398,11 +2378,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 @@ -2425,11 +2405,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 @@ -2515,11 +2495,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, @@ -2777,13 +2753,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; @@ -2998,12 +2972,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; @@ -3011,22 +2985,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; } @@ -3053,15 +3027,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; } @@ -3268,8 +3242,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; @@ -3293,7 +3267,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; } @@ -3424,16 +3398,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 @@ -3448,7 +3419,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 @@ -3477,7 +3448,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 @@ -3512,11 +3483,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 @@ -3542,7 +3509,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 @@ -3558,13 +3525,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 @@ -3579,7 +3540,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)) { @@ -3588,11 +3549,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 @@ -3607,7 +3564,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 @@ -3632,7 +3589,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 @@ -3661,7 +3618,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; @@ -3796,7 +3753,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 @@ -3807,11 +3764,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 /** @@ -3823,13 +3776,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 @@ -3845,15 +3792,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); + ret =3D drm_dp_dpcd_write_data(aux, DP_PCON_HDMI_PPS_OVERRIDE_BASE, &pps_= buf, 128); 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_buf); =20 @@ -3870,21 +3813,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); - 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_HEIGHT, &= pps_param[0], 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_SLICE_WIDTH, &p= ps_param[2], 2); 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_OVRD_BPP, &pps_param= [4], 2); 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_param); =20 @@ -3900,7 +3839,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 @@ -3909,11 +3848,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 @@ -3945,12 +3880,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; @@ -3968,22 +3903,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; @@ -4019,15 +3954,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); @@ -4035,8 +3971,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; @@ -4091,8 +4027,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; @@ -4125,14 +4061,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; @@ -4157,8 +4093,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; @@ -4183,8 +4119,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; @@ -4197,11 +4133,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) @@ -4346,8 +4282,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 Wed Dec 17 22:42:40 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5638F16F0CF for ; Fri, 14 Mar 2025 06:00:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932014; cv=none; b=IKLUM2Ks32fbTJRsjBoC8BXh5iwH73RgHy+rzjtLZjNyLJzeytHtptRTCe7M+MlVkaLaVEWhnWe0IPzQjlfoncaZ/8nzUgQG791Cm9nBBUjls8oyml8+9sPLwYcdh6w32ugrJ0TxCGoZUYnwWv2mrU/ZhBrPNbh0yuNyzGiBxA4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932014; c=relaxed/simple; bh=86F5pdRlv88khWZ04dZw/iDU5RbACl7IwpCgSIsUn6A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FZOzZ6F3iIh7Mv/tSyBe7SfwzoAVqdcovYmZneHCBKyjVqwI13nlOvxHGQXrS2vmUi7GF85UzadAjnzZ7YQWeZgyL3JDjreKW37FniDbezdyZlQdjoz/mL7MZGjAqPVr7DahggLHIpRUAasKL6UA3vM6xLz9K2pIZ7voUZ4d4B4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=iSH/PJi0; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="iSH/PJi0" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 52DNEbiC031304 for ; Fri, 14 Mar 2025 06:00:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= cbVY8Zk+Bw747ivKpsWKnew31zOXihiyANI1TT91neA=; b=iSH/PJi0YezNRtkY dpNv02INGvdoV/jUzb+Y97CXJhkRhl7k9IHGc8vIJYRhD8kBWAndMZt8bAQ9j8qK T25Xh+mdLgw1W8n2a/H61+Uu3I5VaWwhErZCuUyNumUHT0ki29GdpbW9IQhwcQUc D8gXtezyl9uQM66HnU18S4SnO2cr0Ngdvv/CFpEXWSYiEzBRrey5eLUNblDyIB/p YQ4UpbtDQqHQu6yYYlHQ7fxOk/3gcFQlq9SoqruRdQNHfAB0jKQhfSKLgs4O4ubw RNXefAxKhL5OpjqUM4Kt1Dtk3BCKgoS5ZzJNxy+rkXY65htEEawZep5sB1KFgU4y Hz7MgQ== Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 45au2qr65s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 14 Mar 2025 06:00:10 +0000 (GMT) Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-6e90b13f5c3so38236296d6.0 for ; Thu, 13 Mar 2025 23:00:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741932010; x=1742536810; 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=cbVY8Zk+Bw747ivKpsWKnew31zOXihiyANI1TT91neA=; b=a4xaCYHC0epTGDXxx+8nkX7hdMd71l9p4m424A0dzvhR5TgZSnLKnJA7Sx8k6XmEGF 2dnDuGOohdb0QQzYqiiasTYYLIY3VRfS+SdNVR9jaMnpC5V8WUngc99zeTLl6+SgXE4b oGrtyq2BfHHaUvhCEnlMyWebeT7lISkXp97Q4T+HGVv+rfZYPRGFcnYstx/GtUSlsWIN TWzBUWCbZn+FdyJE5KPrau9KMp1Q8sOdirP4O7zf6GxrcCth8V15t/Y13H08NkCvpqDs bxZDge/OMVmKbVS3M0axXt3dBQOy+sbPQ54wwttgEDVtMqGoubTi8K5zf740N1sJ+iEE Na7g== X-Forwarded-Encrypted: i=1; AJvYcCX5SNJqcehHuL6OQWhRC+b0g2PDjG5tfxRnNvZJoxYlFTlU6W5rGN/M3JWmgL2Lg/SYjqRf+DmqRTaQjcI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxog643z7TgZX/wUGCX5alR7OOU5C7bHfWuzUOJaDADW3slGXZR L6X+b9TxIV9iL7ajI9mun9iq5Kkn0xdpVyUQH/LrlPleKPBBjUFf5T0qdohncaT8SODODao0h0Y u1sn3+koTcU+izJa2peLogSECd55G7vY15z4OJHeekSUi4vTpPj1De8Tol26kE8M= X-Gm-Gg: ASbGncvVU1SCixSBYw4nIfbxW/U9nHSiuHGuMyHvAEt8ObyqLXwU8aSe901Vgf486Sh 86dgchkJwkSwCghhM0w0QjeZvh4imaFmllzaVdiU2O+qLy1RIXxYpbJyC6nfjG5Sa/WlnZ9SNpi Xy51/C/EQApRS0olBfd8wLxDTUoqwj0M8VhDCEyl/H2WXGBbgAdPf3hj2PXRS25H9mMP4VzxYsg 5mpF1yhA3Hp+F5DLtkVgfOuRyPZcgawjv/wrqF96Y/Rv+QyEahPMphklvQT7RtKJRLlB5DKWH5R rPAcFwaeeQS21Nu6Xoo7ZAaThEszvKd08rAUNkSKfYyYVM2u38YidkmjJbdpjjH0T48anrDNywY W+8z6MA8+fWA+SfGYSdm9spDrJBkd X-Received: by 2002:ad4:574b:0:b0:6e8:ed7f:1a79 with SMTP id 6a1803df08f44-6eaeaae57d1mr15644466d6.32.1741932009830; Thu, 13 Mar 2025 23:00:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHcgU00eyr5XASnEImRqIWYtWGc2UYmD6PrXDB358rvxCRjRi5ns6GMfxlC2KlnhemJ1qIM5w== X-Received: by 2002:ad4:574b:0:b0:6e8:ed7f:1a79 with SMTP id 6a1803df08f44-6eaeaae57d1mr15643986d6.32.1741932009432; Thu, 13 Mar 2025 23:00:09 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-549ba88332dsm416136e87.181.2025.03.13.23.00.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Mar 2025 23:00:08 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 14 Mar 2025 07:59:45 +0200 Subject: [PATCH RFC v4 4/6] 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: <20250314-drm-rework-dpcd-access-v4-4-e86ef6fc6d76@oss.qualcomm.com> References: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> In-Reply-To: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> To: Lyude Paul , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Xinliang Liu , Tian Tao , Xinwei Kong , Sumit Semwal , Yongqin Liu , John Stultz Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Dmitry Baryshkov , Jani Nikula X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5086; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=d/g0s+1RbkEZsu0cFrspMKQl16Oh0pnUASV91YvLy1M=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ/rlozfjJduPlNmHutiX5RW7N8Y/suDPkal6dvNz+qyIz nkTZ9h0MhqzMDByMciKKbL4FLRMjdmUHPZhx9R6mEGsTCBTGLg4BWAixkc5GKabub47veITs/KC 4jfrnZnmB2g1eZgfuyIgkPL0aVT79GdB9xgPzd/4bx+/z/QOGb1CjuLc2xbdaT3Jv507dVMY50z eYlFlrLBvqki4vr3Djt/CUpLqDN15BxRqNKwVctIS2lXbipn5lNs4W0VWMccqt23t4v737F+4Hg PfiteRmx4samJPcFm64Ijkc6mDfMqOjaf/nvt+71LFO6VfikEKX8NTEpLWxVcq9Nz6cPmcz5dIp x3bTNO2XrGZe8LkbnxSaKXgmYNXtM/NnFWlE2qVf0Ci1yPJ/rCK37FfSzu1+N5rXbNJ1tn56kmO ZLRV2iZX16dfS9eEn+8r2D9/wtQ7b+3cPdYp8G1Mv10BAA== X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: DW4VHYZrQL4G32PQVgQuWDZ-nWRDLUcR X-Proofpoint-GUID: DW4VHYZrQL4G32PQVgQuWDZ-nWRDLUcR X-Authority-Analysis: v=2.4 cv=TIhFS0la c=1 sm=1 tr=0 ts=67d3c5ea cx=c_pps a=oc9J++0uMp73DTRD5QyR2A==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Vs1iUdzkB0EA:10 a=KKAkSRfTAAAA:8 a=20KFwNOVAAAA:8 a=QyXUC8HyAAAA:8 a=Bz2Z_qUYR0Plbu_cxIUA:9 a=QEXdDO2ut3YA:10 a=iYH6xdkBrDN1Jqds4HTS:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-14_02,2025-03-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 adultscore=0 mlxlogscore=999 mlxscore=0 clxscore=1015 bulkscore=0 malwarescore=0 suspectscore=0 spamscore=0 phishscore=0 impostorscore=0 priorityscore=1501 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2503140045 From: Dmitry Baryshkov Switch drm_dp_cec.c to use new set of DPCD read / write helpers. Reviewed-by: Lyude Paul Acked-by: Jani Nikula Signed-off-by: Dmitry Baryshkov --- 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 56a4965e518cc237c992a2e31b9f6de05c14766a..ed31471bd0e28826254ecedac48= c5c126729d470 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 Wed Dec 17 22:42:40 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2932374E09 for ; Fri, 14 Mar 2025 06:00:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932018; cv=none; b=jYf4JqMOGx3Oq0Qdx+ZUswQM4VeWdw+IPD0/lK7BI4/DaBu1g/Aq/FgUo6R3BwDIpTsZVRpnWAiDjt3HvXf/uT5T8sGWaoBnULYrb2BagvRlevKmpoH089XypVvwXGC0E9w+00C5TG63WCHdRu9omMxDObEV2h4mIRBHOGYL1D0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932018; c=relaxed/simple; bh=28FuGDJjpilTa179C1GZwlcbc/K7kSXUDF+IN/tVtGM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qpuu+/n9Gvy9h5tbNXyt55dPy1+sGqJDDaII97pkHukYrRSR1pHicAKBdPLueG0lDnFNO6ljR4dWrKxokL0zCPPYB6PeRw81YTyGP+EymZS28gJBCxF5LHInzH7bFtqU2AXxckk6uobx5Ia31WU2yCkXx/2QssW1rD1Mi6QTlS8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=JHSMz4k0; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="JHSMz4k0" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 52DNZgDI031553 for ; Fri, 14 Mar 2025 06:00:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Xs5rT/RGnzQe0TKC8aJ0U0f62LNypMaSbN5UiwapTF8=; b=JHSMz4k0IbzBbmVG nWSnPcYKL29CfbfGBsXALTBXgXRw1Ua64tLDSDvFG02crGxBC0HjT+HEwbVIYgF2 IHGq8a8eToEX5Ti/oxyB+ksGf0C0bZFpqOLSYFQ/CXu4fiyQchod/VHF63KxeUqd z1/O7tPo77c91SWFDQ7g63ByfQOdbWvTchMFiMBG0liosoi8aGwoobgGxLZ/G7Cc hEObgahe+AYVIuPLGLA3OZ3ZjyyEPnJNjrt4ND1mzF/4vZ/xFDOc2JKBbCFNHpyV Mxt8uPGHadEW5TYKlqP8KMtT0KwZm1gmAG17bNsQW6rlnQr8wEfZLtU1VYWJhuz/ PyOQdw== Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 45bx1jjm2s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 14 Mar 2025 06:00:15 +0000 (GMT) Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-6e91054ea4eso31976636d6.3 for ; Thu, 13 Mar 2025 23:00:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741932014; x=1742536814; 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=Xs5rT/RGnzQe0TKC8aJ0U0f62LNypMaSbN5UiwapTF8=; b=oJ36GmFhQ/ECZHpxnYE+wFJicXBH781AafLlAXslAHneos+E2HEyqbHp61mm5B3CYY qvLO4EmiYhPpp/F1TFaTPOvKoJ+toAI9h9zvNkKLbq8GEeOY7Nr8UiKOX52kyfVEanjL xjDDx3SRFTKzmr9V5rb5LS9CxBCJAipL4IB3zbxPFEqjpeiB+KYtT59U+uuZzZ1dsIEm xljtLLi+8JYCIbtVNHR0SjmR7Ua7gG/FJaAVMQcwvKZV/VYUatEr54M/azya4lSCuFvw Ld4/VV/TGCj0p0LAQN1nciBsWCLWQXSnUoVLknZrxN+a2N/WzZEw7GDD2Oa6Bs1Ga1Lv xAqQ== X-Forwarded-Encrypted: i=1; AJvYcCUIjmkRFpIkRsyEUjCfh5L+AumWciwE80wd2BSqvQhy+cl19onil5VXZ4w0UcTe9zw4dFBxYj5pX/KQl3I=@vger.kernel.org X-Gm-Message-State: AOJu0YxZL/+hBMQ6gNHpycsD+23lk1XVIe1jAgFvWgibsH8KyLzZ7BGZ SEJ0ZafXzVv0t1rbNwtY+MIglr3B+h6tNK6lU4i6/z8liZylWSX0OmkLwCNOuRjzvNXqYdvXDB1 vfMgcApgpiEg32nEgVsGWfyUmDKwyXauGYrRhjD1SMARM/8s0Jl+JIYQQ1UhCXRM= X-Gm-Gg: ASbGncuedQE/5VseBXTjuDtHtawpBPVRR7LKpAu7aaFfsvMZgV48R0O2iiQs+Z6MxIr wNTrHr1b6thY9fME7JexSz4DDN+CwvTxz6Ke3vGrQSzhENyyY1Wpm2BMXOlUacYdsYpMy2Qjr16 N26Jr+A+DjuvQLNYcx9TEwJ4qXnZA2I3nr2ngaq0dHZm9TrkMAWGj3qeriM4Eou/PRIKdJR+eYL 4rb8vZJDSkh9myvAYw9lscd8T62b9/lLw32e/2m6fZa5VJgdALzBrGGwJ3tfrEQgwZgtcCiUPTx Uo0P/U90BnrAI29oluP7pf4g2V3YIfYFlefWI3yVnlUenOJT8we0iaZ7q1Tl6rEu2FLL6RjTAwQ hK6KRlCaMKUSrwrAs3fXoGsTrOezM X-Received: by 2002:a05:6214:21a5:b0:6ea:d046:bcc9 with SMTP id 6a1803df08f44-6eaeab6a013mr14675716d6.40.1741932013645; Thu, 13 Mar 2025 23:00:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF9ggfslk4zuoLATTvIv1igTQO20IZTMXu60Z3sCx9HbRmLLfdN8lOCY9L1MrQPBMco04OZcw== X-Received: by 2002:a05:6214:21a5:b0:6ea:d046:bcc9 with SMTP id 6a1803df08f44-6eaeab6a013mr14675226d6.40.1741932013248; Thu, 13 Mar 2025 23:00:13 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-549ba88332dsm416136e87.181.2025.03.13.23.00.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Mar 2025 23:00:11 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 14 Mar 2025 07:59:46 +0200 Subject: [PATCH RFC v4 5/6] 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: <20250314-drm-rework-dpcd-access-v4-5-e86ef6fc6d76@oss.qualcomm.com> References: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> In-Reply-To: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> To: Lyude Paul , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Xinliang Liu , Tian Tao , Xinwei Kong , Sumit Semwal , Yongqin Liu , John Stultz Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Dmitry Baryshkov , Jani Nikula X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8924; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=lOAwM26QhsV15lYFaBEeUiZtWiwv6AIfNojc3p1iTEQ=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBn08XZq48cvIyYBf/kBkcM6PZ2QjbmI2P9MTtrN EoXaoKdsA+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ9PF2QAKCRCLPIo+Aiko 1fWFCACECdIgEwfsDhf3wmAf6H5YXKRkrLkmnSjIiAWprKvWFDsmv/JnUN5rPrwiqVxajQKJ1Ne QULtPar2xu3aotOaPpZGQqlpr2DuSJ8vJhzKdYP/zPeigvER0lpF/YKx97L5KEEYOOMtIAa4Ye/ 9iFIofIb8EMrImkxMgE17XgkIL5o9YozJuhoArjL8hHPH2lduf8uRwe4b0Rzai65LZErXnMIYYa 3gUIVFS0UVQs233oQQxqr6Bb3dqeSiFNZjA3fDI9pAgPivD5eE9r7vsNgTRMDLVkpCcFbJxDqrN HjQJvTmzWVYnG6lxh4LD1QGn7vQToMz8Q6Uzzp6ChCbfeQ/Q X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=CNQqXQrD c=1 sm=1 tr=0 ts=67d3c5ef cx=c_pps a=7E5Bxpl4vBhpaufnMqZlrw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Vs1iUdzkB0EA:10 a=KKAkSRfTAAAA:8 a=20KFwNOVAAAA:8 a=QyXUC8HyAAAA:8 a=CIugonsnW1z_eXyUCzcA:9 a=QEXdDO2ut3YA:10 a=pJ04lnu7RYOZP9TFuWaZ:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: RdpAZOyqCKXr5FdwffsNrxA9oSuRZ3Qt X-Proofpoint-GUID: RdpAZOyqCKXr5FdwffsNrxA9oSuRZ3Qt X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-14_02,2025-03-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 mlxlogscore=999 impostorscore=0 mlxscore=0 priorityscore=1501 suspectscore=0 phishscore=0 malwarescore=0 clxscore=1015 bulkscore=0 adultscore=0 spamscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2503140045 From: Dmitry Baryshkov Switch drm_dp_mst_topology.c to use new set of DPCD read / write helpers. Reviewed-by: Lyude Paul Acked-by: Jani Nikula Signed-off-by: Dmitry Baryshkov --- 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 3a1f1ffc7b5528b940485e7d96b1913bd85b0153..de3fc6090c906efce3dbaa8462d= 736ebf9094b34 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -2201,15 +2201,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, @@ -2744,14 +2741,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; @@ -3624,7 +3620,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) @@ -3679,10 +3675,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 @@ -3697,7 +3693,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 @@ -3763,8 +3759,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); @@ -3813,18 +3809,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; } @@ -3883,8 +3879,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; } @@ -3922,9 +3918,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; @@ -4881,9 +4877,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; @@ -4972,23 +4968,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; } @@ -6112,14 +6109,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 */ @@ -6157,8 +6154,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)) @@ -6180,11 +6177,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 Wed Dec 17 22:42:40 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 653971624D9 for ; Fri, 14 Mar 2025 06:00:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932021; cv=none; b=WGO8zM4KkXe79TxTHtGyJq6f2he0/T6uTcBHYIPTEwOArgdo+/ljE/KcekZYlR+AS9p66Z2rIYkxCsDBkkt7y8iYGuczHu3GqySxxod5DkKFTcGV72iGIUbQ2OCpdSGY/seRozROGZU8Z3GHZSULerXiGa+kooOda+/i6UTLFbg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741932021; c=relaxed/simple; bh=KL01593/zSX4Xb5hwQBCHJDAckIJ37QdEuF5jXeWgJ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ICG2fL3WDp4dizFZXd/IqYPyiP461tb7Z3mzDR27GEVTsgQFaVdt+7EQnX5V/6jojqcpLYaEA1cQF3RI/JgaPDKX3nzSnOIGceH2sR2Ph3lWwmZxKd1VicilByAA63/JCr/Ce3z4WGxEKR52uJYD+SAoEmVA9Zxd5dZdRu/fgmc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=F9ZB6mEM; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="F9ZB6mEM" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 52E2ei8j008320 for ; Fri, 14 Mar 2025 06:00:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= YD6Z7HGd6RWZSqIPuwEoc3ezQjdyPxL3+GL3fga18Fk=; b=F9ZB6mEMvQNwJykH MrOciWlfhPF8gc6CrJXLfBq6ksxP5I8HK9A04+R9PUhWfPJwCVv8BL0flzdy29AI eMEcparMp0Y8s3nwWzXN2Qz/07jcVo9fw40wbZ79dkOHIpPJXZKBLwh0EPiDKdkB mF7Gagr/+b3kLvLCU9PcpLZkLyNrIwovXGZN2QhD9SZj71u/ABBGyJst4jmag2kg Gs/9yzmzKr3kq5EeXX0YuHMn2IU4FEJlmWQAqpbweVhZHwKeKCIFBhCtLU/b+mWI /NiV+EIbFm87IQZvcBnmfGw09vKbyX2bP7W7iXYV840EQmKLmwa34xMDrEED99SE siG8LA== Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 45bpg8bw3v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 14 Mar 2025 06:00:18 +0000 (GMT) Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-6e1b8065ed4so39447046d6.0 for ; Thu, 13 Mar 2025 23:00:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741932017; x=1742536817; 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=YD6Z7HGd6RWZSqIPuwEoc3ezQjdyPxL3+GL3fga18Fk=; b=U8+VF3rndr4af6z5uu7b6qj4lAPn9uenHnke5r3PLf8BlM9Qg4zgvzn4DZXSu0hE9t ev/BmyKQ5dTO3FqziDm+O8fNIw7TIaey7cNZz5TvpTzPPLy915AR/AH8J0A5XPuPcGZ7 DCoUoJjAo07JclMIZd1T+7ZYHUeGQluwmX4Ecv4u/n/7UXQaVL1enLIaxK3J70GbmgAq OmGMiqKnIFdm0eC83Y90Peh+14km+SY5YZbraxMR92av/cU3gXxvsaoaHSQ+Xh+lbgfh q4p17XSJr9GczEtWM+ePZi+pEzD6FCEI4M0Rgmeyd+qD4vhHEKQOQ0dD0f+ryJ9KKnQA 7S5g== X-Forwarded-Encrypted: i=1; AJvYcCWwTPh7yKWRq6yYK+ccoFII1K/+1RWb0MMr3QmNf1nBYH/sf5WodnYrtsuBZvNtaJGys++DuQvonKT8ZTQ=@vger.kernel.org X-Gm-Message-State: AOJu0YztI54buKBr9BHiDRLHyuqrZ6N84yjwYUEbwyPotGWqVezS00j/ vk4kU72M5XMmeQi++jKPsaLh3smlVsvI4xeyv7Iw9EFDDTRmiSmWj65529VTab3cJQAW74vTXMK MGrrI4ovkbqqY/5wXYhZ2Bn8Ts0QXcYPPg9mN2WB3SzQG592Z0FtJiCHTTjl7e8k= X-Gm-Gg: ASbGncujhoLRZJQS9CL/KPY+/ua8F8+d/R0Ho3vlh+ewGlBqzqt0lRXFZ5jY3C/QLhL 6Q/KnnG0jP6NrCj7Si5IYslxzwKE1aKw2aFd3Aj0pizgHu38Dfe8ndZ7CynptLgfzPMd7TumKJL inFVYVmLlU5Uhh8LwRPZxfBJZJHcqPAMIFetn7lhrms4Ve40fOzFkUI789p3iy8sSff32bILXNw E96sVV8iAZfzwMR8wDcRHvDhUflLkdfsIeH+AnaTWmiSU6qRC1gtCnqHM10r7Bj3XO5hTG/Gi2/ gLCI6qDd5lU6GZJ4xz6ZoXmR0dg+C5FhmhYuSn9A5+Stwm4fPCnOusLb67tDTJa9RENKPINh1aO zo2ND3fqiovjz/89t8ZG1/zkOqsT4 X-Received: by 2002:a05:6214:27e5:b0:6e6:6c39:cb71 with SMTP id 6a1803df08f44-6eaeab0fbbfmr16506316d6.45.1741932017328; Thu, 13 Mar 2025 23:00:17 -0700 (PDT) X-Google-Smtp-Source: AGHT+IELJcylmUiJ4JEURtcZ0pb2cGp+YTibCxqJbDGjU39ccIquuLoPHTNuJjmGgKfn3GK+0NkRrQ== X-Received: by 2002:a05:6214:27e5:b0:6e6:6c39:cb71 with SMTP id 6a1803df08f44-6eaeab0fbbfmr16506016d6.45.1741932016982; Thu, 13 Mar 2025 23:00:16 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-549ba88332dsm416136e87.181.2025.03.13.23.00.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Mar 2025 23:00:14 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 14 Mar 2025 07:59:47 +0200 Subject: [PATCH RFC v4 6/6] 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: <20250314-drm-rework-dpcd-access-v4-6-e86ef6fc6d76@oss.qualcomm.com> References: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> In-Reply-To: <20250314-drm-rework-dpcd-access-v4-0-e86ef6fc6d76@oss.qualcomm.com> To: Lyude Paul , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Jani Nikula , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Xinliang Liu , Tian Tao , Xinwei Kong , Sumit Semwal , Yongqin Liu , John Stultz Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Dmitry Baryshkov , Jani Nikula X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4082; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=AezDpTs9i2rYRC6AeDwZvqAV87zlWZZG2GdTd51PPFs=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBn08XZFN6uPDdiX1R7XmfB1vXISASqSFYGN569O I6KV6qdI3WJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ9PF2QAKCRCLPIo+Aiko 1eM5B/9jhOE9nI9V6mDRKubJu0/SPcbZoi/lHs71XyG/da3UMGC32Qt16u66xFuLg4inRbB79MC lZllWHwPgl1Q5/YeMrd7mbZ4SMoiH9evqV5y0/FTvifqU6zwgcpJ6ZCMWGixnm3Ezlb0aiz5nI9 XYnzCZ3lNXvh8AkwMZMgXNfGOA71gEm/MhhXwmgqXHN48nVlgfkYc1J84RrrNot9sLmiQgfQHzR F4KZYvVt5YGhuR97yx5BeXuJOeT2S6L6rAfmV5RybP6JJdi6id/B10zo5H3f/e3tm+QFyIddeuv fYEScrVe2IVsan3JCnn6Al2YeCZugz0rJLJveu4Idywf2rlt X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=PtWTbxM3 c=1 sm=1 tr=0 ts=67d3c5f2 cx=c_pps a=oc9J++0uMp73DTRD5QyR2A==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Vs1iUdzkB0EA:10 a=KKAkSRfTAAAA:8 a=20KFwNOVAAAA:8 a=QyXUC8HyAAAA:8 a=VzZmvmfVK_LU_xpdqU4A:9 a=QEXdDO2ut3YA:10 a=iYH6xdkBrDN1Jqds4HTS:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: O0IZLgAIxoIMlqn2ctTKMS9gqkoDmB1U X-Proofpoint-ORIG-GUID: O0IZLgAIxoIMlqn2ctTKMS9gqkoDmB1U X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-14_02,2025-03-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 lowpriorityscore=0 mlxscore=0 mlxlogscore=999 impostorscore=0 spamscore=0 adultscore=0 phishscore=0 bulkscore=0 clxscore=1015 malwarescore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2503140045 From: Dmitry Baryshkov Switch drm_dp_tunnel.c to use new set of DPCD read / write helpers. Reviewed-by: Lyude Paul Acked-by: Jani Nikula Signed-off-by: Dmitry Baryshkov --- 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 90fe07a89260e21e78f2db7f57a90602be921a11..076edf1610480275c62395334ab= 0536befa42f15 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