From mboxrd@z Thu Jan 1 00:00:00 1970 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 890701D9A66 for ; Tue, 7 Apr 2026 04:19:57 +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=1775535598; cv=none; b=Q4n6/cR6dJcFIEx+HQY3qsnGQas+8gbtlda29tX/e8h1Jfl0ge/7pAAefbIgmic41QUlo5ce3uy5HrNh24nwUyefGO/h7TxQypis3OHgw3kCt5HqIqgafMVmja3MHKfRs9Gv6Ihjs0tXwMlPUNXASl0Fw8cRs/b1Iod+KTS6Cp8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775535598; c=relaxed/simple; bh=lgaLo9yN757FY6Mrmxy4IEqVHkJd9X92U0L8L0PjWuQ=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=PhN5DwCt+bkxWVG9GDHQ3PVRVVBfN1O1Ji0uBklq5DWQht6ze24g/GCyLyje3hBxDlCBk0N7aOJFaquecG9YsFRDrujOytYWGeDZbykG7Gj9llcJlETrkCZ3Kh9jOZVMr4emTaccKXZvj76pTj2AOIFBbsjYzuLhVPprrSbuzLU= 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=Rs6D764q; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=FBRRBAdF; 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="Rs6D764q"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="FBRRBAdF" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 636LQKwc3537311 for ; Tue, 7 Apr 2026 04:19:56 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= lMjcYHeMWpehtP2XPeaMvXYC926mGw75Z/H7Po5iCfU=; b=Rs6D764q3zFbWC7O EeHPySPt+xmUInC60QL6vjdjyrF5Haccw7HX6A3NH85Sc9LHh4ARTlrpFRJPnBbV XoMXYdsCVkSBp/tzMU6gunt5d8xN4RcVQob7LXoGJ0UcdJ+aW4qi+DaXZOLgv6b9 u7YOcE/DEmw+KnQtfCTDUA8qtc1Wm3JcuTmb5nIQoB77zY5CPOUeml9awuDurNZM 7IaAeOP00ui9AoLqnYTn4TWg8ZmycZ+oA5jDGQzT1YLOSZDIfTCEzRNqLXsprk82 CeVbkEGvt1iSOIAi7zj33h4e3tJEMbtXoRkqtopg546lvNCi9J7IaGqrWECH9gNY ii0qJg== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dcmra0yrq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 07 Apr 2026 04:19:56 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b2454fc131so82782655ad.3 for ; Mon, 06 Apr 2026 21:19:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775535596; x=1776140396; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=lMjcYHeMWpehtP2XPeaMvXYC926mGw75Z/H7Po5iCfU=; b=FBRRBAdFZpHbWZJAcBHdoQlO1RTKlrSx2oaO6v5ZbW1e4dYGgSuR9QMJ+qrj0I11lF AGtsGS/S4zdZhPLyqx8wBVMigYZpQu+Cj9dbSXHQeYNqQ8im61pm+kGUd0R5TjtZ4PO9 FrRawYfj3+OuupTMBJluGfXapgF6QKsDjBE32+oRfBV+ou19Qxk18nqU7qNcFbAZQRCw kz2+m8kDjeb71j8T5mM70I0YgPgZ3ibdSmwu9MOwxz0goXz+c3lt2FGN30FeP/Xt7xIy nHoRqVaDgRSNj/q6YmHGQaqYiUFQqnwY/id2wK30bSGKweVFC79yaO9D3ZnWee7bjV2j dq8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775535596; x=1776140396; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=lMjcYHeMWpehtP2XPeaMvXYC926mGw75Z/H7Po5iCfU=; b=QWfXZhPBzsy2oml7cIRzwTG+1Cbeb3Rn/jrALMGe6aW+pc3SFf2C1RwSm23wRiVhYw jaiTIVE+chG8z+eOfqYqG3uWi/R3X1b18Mjin13MggCwqo2+u8+6LmzrICuWjSz+yvgT sxfNqEBC6v8YiC24H6jVY20kJKz2ETb/g7PkI+usYBpwKowjUtsdtJBoRsOc49o23J6h 77RO1K458X0W6IPXhOKPs9THK+/BK2nRIoKyK4V+tjRBr5hwMJaQ+/J9YJMDTmOG3RCT JSlTJ2NJngunQIgaW2hB1TsuWJyZitUQF1+OjxLjDubWYmPf7Kf4PTKHco12ZfI+la9H cCTQ== X-Forwarded-Encrypted: i=1; AJvYcCXeUBGLvFNcKnVIKKYDewStvhwc+F0OTWPRKpV+gbSibDuVs/2KFHtfm80uj5kTZOSL2zRGV5e+OIejTWo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy11bljy1H64EcIuzT2NiLFLYxKIpvirBlmTlZRWRt/RoNHTDI2 XwoveI4CW/QzQD/KoceINB1dFGFH5UTOUid7h3ISEWrwhiADPPry0b5Fbeu7QMxot9VIRv/nXQp 4rFnOPxikD3JFa7P8eYDFfR+5aOFUzf2uCH1xutNrV3+Cz4oNZc24hG+0g5l+AMfKvYM= X-Gm-Gg: AeBDietFYWdse4VNy5+A1/mkl9ykicmSFUpop9VlqBAbr2rzbG5P5vcfs9tTC7kSdxD IQsbqzJbHd0xsc7+Q6sMlcTCBGSCLd5HeApQ/sOP5/xkY1VelfvZIDVfnDcbXd4ns7tmS0jEMQz 2Vtsv1jKDPqlhJuiP6YwO0eqwx5BIp1ZbjKl728M9mG/IKSjv71jYrRIgDrlr3cERK1FwTz13l7 +TUCR91bxlK3mHwNqNTfeD6IA4Pm0x/5dvPX+UX4fceX2WFuDJVvpodILK5zxGvQ77GbMb48Mjn W85ZPPpI+/aV3JzwFobSS7BCM+xWXryi329+eMKNvh8MvQb0b6NS0WRjR5VY0XroLNSs7GMLURY R6hhkqpxmpaWA7FEZs+srdGAhhH5Gx5zQ7q5t4VDSqmjMjZmcJs0gG0P2MhrOEXI5Yy+hZDvq1P QRfi+FypT3BNK1xKI54Q== X-Received: by 2002:a17:903:b0e:b0:2b2:52af:52b8 with SMTP id d9443c01a7336-2b28184a5cfmr157748065ad.11.1775535595934; Mon, 06 Apr 2026 21:19:55 -0700 (PDT) X-Received: by 2002:a17:903:b0e:b0:2b2:52af:52b8 with SMTP id d9443c01a7336-2b28184a5cfmr157747725ad.11.1775535595386; Mon, 06 Apr 2026 21:19:55 -0700 (PDT) Received: from [10.133.33.129] (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2749cbcafsm155569525ad.77.2026.04.06.21.19.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 06 Apr 2026 21:19:55 -0700 (PDT) Message-ID: Date: Tue, 7 Apr 2026 12:19:49 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 26/38] drm/msm/dp: add an API to initialize MST on sink side To: Dmitry Baryshkov Cc: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Abhinav Kumar References: <20250825-msm-dp-mst-v3-0-01faacfcdedd@oss.qualcomm.com> <20250825-msm-dp-mst-v3-26-01faacfcdedd@oss.qualcomm.com> <4u5bt5y4suecanvxni2fnljdzrxnkjrg2dgkwzpj4pztvyoef3@nopu6m7w543n> Content-Language: en-US From: Yongxing Mou In-Reply-To: <4u5bt5y4suecanvxni2fnljdzrxnkjrg2dgkwzpj4pztvyoef3@nopu6m7w543n> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: 4M4GtVCyR7e5jTWMqCSOCucaQho1fogZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA3MDAzNyBTYWx0ZWRfX3aVfptjAb3p7 S2V7wL/71TdcQPxrcahjCSU1JmWl6L/35EWAwR6SDVDkcE3kUDYaxwaX9DBY4U5zTlfi1suV5nQ f56gHlCK47098Q+XkFmSs8E+nJyl8sQosI13UwjktTl+lrmVRVqHOSCHUzcUcczszQlnnAjM47H 103E4yIEOXehDBlOJASO98feqmVWa4DcxdI25oLtAaEn9boOXyMpnplieeFQVorxqoTgoOj/jfM 22FAoSvFdhi/IU2+wjluCNYmAH2Sz2UJ1H1FCgiNrJuWmBSHcx6+uNUjq8Jyb09707LbUfCSM9A PPjrg67MRkHG2cmQROZZpv9ZhzG+cz/WmlbfQYVcShv0IH4TJ6jsP1BUJNMu6R3/3dCRFAPZLQO Ke6vpCdAcm7wijIL4jymm7FdE/go8XGB+BaYUlDSoTEK1176yZZM0bphuXcMKeq2YUwiboEbXhn L3GHOvsE7PDWaHEqNqg== X-Authority-Analysis: v=2.4 cv=BKGDalQG c=1 sm=1 tr=0 ts=69d485ec cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=COk6AnOGAAAA:8 a=EUspDBNiAAAA:8 a=ZS1p3fY0zf-kPy3xB1AA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-GUID: 4M4GtVCyR7e5jTWMqCSOCucaQho1fogZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-07_01,2026-04-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 clxscore=1015 bulkscore=0 suspectscore=0 spamscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604070037 On 8/26/2025 5:26 PM, Dmitry Baryshkov wrote: > On Mon, Aug 25, 2025 at 10:16:12PM +0800, Yongxing Mou wrote: >> From: Abhinav Kumar >> >> If the DP controller is capable of supporting multiple streams >> then initialize the DP sink in MST mode by programming the DP_MSTM_CTRL >> DPCD register to enable MST mode. >> >> Signed-off-by: Abhinav Kumar >> Signed-off-by: Yongxing Mou >> --- >> drivers/gpu/drm/msm/dp/dp_display.c | 55 ++++++++++++++++++++++++++++++------- >> 1 file changed, 45 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c >> index cb433103d439ac6b8089bdecf0ee6be35c914db1..84df34306fb557341bea288ea8c13b0c81b11919 100644 >> --- a/drivers/gpu/drm/msm/dp/dp_display.c >> +++ b/drivers/gpu/drm/msm/dp/dp_display.c >> @@ -14,6 +14,7 @@ >> #include >> #include >> #include >> +#include >> #include >> >> #include "msm_drv.h" >> @@ -297,6 +298,35 @@ static int msm_dp_display_lttpr_init(struct msm_dp_display_private *dp, u8 *dpcd >> return lttpr_count; >> } >> >> +static void msm_dp_display_mst_init(struct msm_dp_display_private *dp) >> +{ >> + const unsigned long clear_mstm_ctrl_timeout_us = 100000; >> + u8 old_mstm_ctrl; >> + struct msm_dp *msm_dp = &dp->msm_dp_display; >> + int ret; >> + >> + /* clear sink mst state */ >> + drm_dp_dpcd_readb(dp->aux, DP_MSTM_CTRL, &old_mstm_ctrl); >> + drm_dp_dpcd_writeb(dp->aux, DP_MSTM_CTRL, 0); >> + >> + /* add extra delay if MST old state is on*/ >> + if (old_mstm_ctrl) { >> + drm_dbg_dp(dp->drm_dev, "wait %luus to set DP_MSTM_CTRL set 0\n", >> + clear_mstm_ctrl_timeout_us); >> + usleep_range(clear_mstm_ctrl_timeout_us, >> + clear_mstm_ctrl_timeout_us + 1000); >> + } >> + >> + ret = drm_dp_dpcd_writeb(dp->aux, DP_MSTM_CTRL, >> + DP_MST_EN | DP_UP_REQ_EN | DP_UPSTREAM_IS_SRC); >> + if (ret < 0) { > > I didn't catch this up in the previous patches. We have two sets of DPCD > accessors: the older ones which can return error or the size of the data > that was actually read / written (which might be less than the size of > the buffer passed to the function) and newer ones, which return error or > 0. drm_dp_dpcd_writeb() is from the first group, so if it was > successful, it should be returning 1. It's all a pain to handle, so > please start using newer accessors in your patches (the full conversion > of the MSM driver is on my todo list, but it's intrusive, so was > delaying it...). > > TL;DR: inside your code please use drm_dp_dpcd_read_byte() / > drm_dp_dpcd_write_byte() / drm_dp_dpcd_read_data() / > drm_dp_dpcd_write_data(). > Thanks for point it. Will move to new APIs. >> + DRM_ERROR("sink mst enablement failed\n"); >> + return; >> + } >> + >> + msm_dp->mst_active = true; >> +} >> + >> static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *dp) >> { >> struct drm_connector *connector = dp->msm_dp_display.connector; >> @@ -315,18 +345,20 @@ static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *dp) >> if (rc) >> goto end; >> >> - drm_edid = drm_edid_read_ddc(connector, &dp->aux->ddc); >> - drm_edid_connector_update(connector, drm_edid); >> + if (!dp->mst_supported || !drm_dp_read_mst_cap(dp->aux, dp->panel->dpcd)) { > > In several previous patches, the functions initializing MST can > return an error, leaving the user with half-initialized MST. Are those > errors a safety coding or do they have some real-use usecase? In the > latter case, it would be nice to keep SST wokring if enabling MST fails. > After plug in, MST will active when mst_active == true (DP_MST_EN programming succeeded). Before that point, any return will continue to keep the system in SST mode. >> + drm_edid = drm_edid_read_ddc(connector, &dp->aux->ddc); >> + drm_edid_connector_update(connector, drm_edid); >> >> - if (!drm_edid) { >> - DRM_ERROR("panel edid read failed\n"); >> - /* check edid read fail is due to unplug */ >> - if (!msm_dp_aux_is_link_connected(dp->aux)) >> - return -ETIMEDOUT; >> - } >> + if (!drm_edid) { >> + DRM_ERROR("panel edid read failed\n"); >> + /* check edid read fail is due to unplug */ >> + if (!msm_dp_aux_is_link_connected(dp->aux)) >> + return -ETIMEDOUT; >> + } >> >> - if (rc) >> - goto end; >> + if (rc) >> + goto end; >> + } >> >> msm_dp_link_process_request(dp->link); >> >> @@ -349,6 +381,9 @@ static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *dp) >> */ >> msm_dp_link_psm_config(dp->link, &dp->panel->link_info, false); >> >> + if (dp->mst_supported && drm_dp_read_mst_cap(dp->aux, dp->panel->dpcd)) >> + msm_dp_display_mst_init(dp); >> + >> msm_dp_link_reset_phy_params_vx_px(dp->link); >> >> if (!dp->msm_dp_display.internal_hpd) >> >> -- >> 2.34.1 >> >