From nobody Mon Nov 25 02:27:21 2024 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8002E1A704B for ; Thu, 31 Oct 2024 15:13:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1730387607; cv=none; b=fKSi0l0cNqN4op11CjDYmDStSkYy8tEBsBRZyUHcMux/QIoTxbWVGZCGpmLGZBLu47S1+8yRifcgrcbLBI92wQyEol8q6OANrAS1BuLpoWFe1iw3cpbgzI0ixxtb2rFuDscbKeb9WYZn+OJbg2gEEqBHlFPXDlnevQidChrgi1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1730387607; c=relaxed/simple; bh=qRn/jvW7tE4OUa9xySn5pIJn3QDJPl3Qlp7ZmkluObc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OsOx8hlQ6f8H2O1n9xs/7HD7FkStZhh35RZbPYTlse2ORdQUSpk7K0mcnc86dF1ABh0s2HbQYpx1+F4kFb7zg2XPmpq9qO/d0WmulUH8buxX6u5NnQinPMd0qy4VFhjkOt+0URTi7RFvZDDjsgfvhyYLeJztNBu01QFy4JY4afk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=UCH4f4Tq; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="UCH4f4Tq" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-37d518f9abcso726618f8f.2 for ; Thu, 31 Oct 2024 08:13:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1730387604; x=1730992404; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=wsxO4tXj5cYVX5ty5sWr+rNFnN2giGJku8uLhfTXghk=; b=UCH4f4TqdH3n+wkkaFpUevJ5PRfizuZwIoGrFGr2i2Td35uEeXrHWCbvGk7MMhR72p qjZaIwRNPATwFm+QZQqWCnEUFgBNWffUPzW/q/kFz1rSKLSQkBitOCkYogbQ+hAIiJ2R Ms4XW/TPmGHenHz4gVOyFwXD5ugPU/FWf0BqS1UyAoXhRpAFqfw8m/WLgx7fmPreCxRy 1W3yi+gkJGJhSbYG0YTZ3BrC3T2fBzmNk3vIwElAibQOpv1StxCQ2/WOs8f9TzWZlbV/ bblxnIW0GeBdoAm7xrWJup+iXl6gVm8JJxRjEf23wCnj+LvD8LvCsm3uIGm+gxtyk2sf 5yAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730387604; x=1730992404; 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=wsxO4tXj5cYVX5ty5sWr+rNFnN2giGJku8uLhfTXghk=; b=FpRo86Qfn4htlkWvP9fAAIvKKJ6luBz6rauqHlyYAtvM3adLxiO+CmSxU9tq0+CriT FKlgLMD8SLplRBuyaI8JqkFzD+E4xDWVPP6leNusEVE0G8w0pcl3PiuCNr/peslcybnO cR6I47L6QGgdXtlr3QrKP0lW2MocOQAvqZ7jZCQzcBI18y3F+C/UukVcceONr5mRKX0m oNF8StCSqONFhmMW8/GF8EGTJhq26r48BpY3ONZ0E6X6ul6Tu5oOUvjQEPM2emZynyCE PE1VnzeF1PHEnhXjBTsq+hU1ZwD9xxhumRpAt7mVgVI8Co4L0rHXtvuPfpm3bUdLjcgJ nTzA== X-Forwarded-Encrypted: i=1; AJvYcCUfR9SBpOG1JKmHjJ7/LI2Esr2aBqz9OVQ7dU2+QmHGPc7Xd4j3vZhF7lt2kiRKtvT8s/nhKaZk9D66GBE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy6uRmkfoJYgG6Ied5MJR82rKS4wELNcxZEztXxzJD2MTIyr6ET JYd2ZtMAelj3gv0oMF4vGw/dpnV1g8vEgdXMxKeQcSj+3U7ZgkDPdOyOMcsYm00= X-Google-Smtp-Source: AGHT+IHmbLeS2jvvSq+XcHXIlfUKhKFp+lBKs4Bd0dZD1Q8Fgqy2HDTwkQq4YF13r1zeXwVZveQWXg== X-Received: by 2002:a05:6000:1c9:b0:37d:49a1:40c7 with SMTP id ffacd0b85a97d-3806115a20bmr13878276f8f.28.1730387603921; Thu, 31 Oct 2024 08:13:23 -0700 (PDT) Received: from [127.0.1.1] ([82.76.168.176]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-381c10e734csm2418920f8f.60.2024.10.31.08.13.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Oct 2024 08:13:22 -0700 (PDT) From: Abel Vesa Date: Thu, 31 Oct 2024 17:12:48 +0200 Subject: [PATCH RFC 4/4] drm/msm/dp: Add support for LTTPR handling 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: <20241031-drm-dp-msm-add-lttpr-transparent-mode-set-v1-4-cafbb9855f40@linaro.org> References: <20241031-drm-dp-msm-add-lttpr-transparent-mode-set-v1-0-cafbb9855f40@linaro.org> In-Reply-To: <20241031-drm-dp-msm-add-lttpr-transparent-mode-set-v1-0-cafbb9855f40@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Karol Herbst , Lyude Paul , Danilo Krummrich , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten Cc: Bjorn Andersson , Konrad Dybcio , Johan Hovold , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Abel Vesa X-Mailer: b4 0.15-dev-dedf8 X-Developer-Signature: v=1; a=openpgp-sha256; l=3009; i=abel.vesa@linaro.org; h=from:subject:message-id; bh=qRn/jvW7tE4OUa9xySn5pIJn3QDJPl3Qlp7ZmkluObc=; b=owEBbQKS/ZANAwAKARtfRMkAlRVWAcsmYgBnI55+9EzZOthRgX0FpnvhwBMl9FxxsDYIWqjv0 XvSV6RJHv6JAjMEAAEKAB0WIQRO8+4RTnqPKsqn0bgbX0TJAJUVVgUCZyOefgAKCRAbX0TJAJUV VvZiD/45XA56D5YG0qJfIzf5NOwxDGg+R9f/jAazsIdYIb1x2Ob3QzjrmDvDHw0D7VOXJTWaZgA H7xLZgZTKPp1JeDPSWDc5oUnbMyiNZG1S9oa+tQ5diDxc7xapCeGNtbgXBz6ZyiKsjXAMn6MHEG yLcXzNNFOnwlrGmnYFkzFXwEchDmltJQVGLZhCpG/xSHtuyh8bjnC2QnHJI/kr7kLhHGKdRC0l2 Xhkfv8pPnbokGW7JEw+40SeY+hxNUJQQywuWy836FkEgcV/4+j9jf6GQX1wS9bTVt1xhjUXGXe2 YDCcpLkNvnruvFIG/jvcwsta8HMoi7LvKSiF2T4vVdohzqqDaT1e3BQvQTAFYsLlSyr9rPgeBxH G8WEtmTrNcP8rv/398u7KypnUsTR2uYPcR/F/fWlsk8brk2a8/AEyORANS3dwMOFlNZ+GXh+TTX tLtrYw5fCaV/ufD0oPnv04vsqrnd3dfpi8Cyz1ReCskjlDQEp49RREZ4wAt8BMewluN69ZN2kD3 vxUELo7KvPdPW3TZ1+zJDXE1cJnChx8AFdCmDDcY6kwbedKV2DTdZ37zuvSL6zgwlVdzEIVwZce g0r8aezKvu5Mtlnv1rtcFbtim552XAdvIGM13ljZklYgMVtzhTH79QiE3Vwraw99FTQRCteSUC/ iER7CQXfL8ValJQ== X-Developer-Key: i=abel.vesa@linaro.org; a=openpgp; fpr=6AFF162D57F4223A8770EF5AF7BF214136F41FAE Link Training Tunable PHY Repeaters (LTTPRs) are defined in DisplayPort 1.4a specification. As the name suggests, these PHY repeaters are capable of adjusting their output for link training purposes. The msm DP driver is currently lacking any handling of LTTPRs. This means that if at least one LTTPR is found between DPTX and DPRX, the link training would fail if that LTTPR was not already configured in transparent mode. The section 3.6.6.1 from the DisplayPort v2.0 specification mandates that before link training with the LTTPR is started, the DPTX may place the LTTPR in non-transparent mode by first switching to transparent mode and then to non-transparent mode. This operation seems to be needed only on first link training and doesn't need to be done again until device is unplugged. It has been observed on a few X Elite-based platforms which have such LTTPRs in their board design that the DPTX needs to follow the procedure described above in order for the link training to be successful. So add support for reading the LTTPR DPCD caps to figure out the number of such LTTPRs first. Then, for platforms (or Type-C dongles) that have at least one such an LTTPR, set its operation mode to transparent mode first and then to non-transparent, just like the mentioned section of the specification mandates. Signed-off-by: Abel Vesa --- drivers/gpu/drm/msm/dp/dp_display.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index f01980b0888a40b719d3958cb96c6341feada077..5d3d318d7b87ce3bf567d8b7435= 931d8e087f713 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -107,6 +107,8 @@ struct dp_display_private { struct dp_event event_list[DP_EVENT_Q_MAX]; spinlock_t event_lock; =20 + u8 lttpr_caps[DP_LTTPR_COMMON_CAP_SIZE]; + bool wide_bus_supported; =20 struct dp_audio *audio; @@ -367,12 +369,35 @@ static int dp_display_send_hpd_notification(struct dp= _display_private *dp, return 0; } =20 +static void dp_display_lttpr_init(struct dp_display_private *dp) +{ + int lttpr_count; + + if (drm_dp_read_lttpr_common_caps(dp->aux, dp->panel->dpcd, + dp->lttpr_caps)) + return; + + lttpr_count =3D drm_dp_lttpr_count(dp->lttpr_caps); + + if (lttpr_count) { + drm_dp_lttpr_set_transparent_mode(dp->aux, true); + + if (lttpr_count > 0) { + if (drm_dp_lttpr_set_transparent_mode(dp->aux, false) !=3D 1) + drm_dp_lttpr_set_transparent_mode(dp->aux, true); + } + } +} + static int dp_display_process_hpd_high(struct dp_display_private *dp) { struct drm_connector *connector =3D dp->dp_display.connector; const struct drm_display_info *info =3D &connector->display_info; int rc =3D 0; =20 + if (!dp->dp_display.is_edp) + dp_display_lttpr_init(dp); + rc =3D dp_panel_read_sink_caps(dp->panel, connector); if (rc) goto end; --=20 2.34.1