| From 9c9799df36fd98aa5cb28e7ea7e1c867ee77338a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 4 Apr 2024 19:35:54 -0400 |
| Subject: drm/nouveau/dp: Don't probe eDP ports twice harder |
| |
| From: Lyude Paul <lyude@redhat.com> |
| |
| [ Upstream commit bf52d7f9b2067f02efe7e32697479097aba4a055 ] |
| |
| I didn't pay close enough attention the last time I tried to fix this |
| problem - while we currently do correctly take care to make sure we don't |
| probe a connected eDP port more then once, we don't do the same thing for |
| eDP ports we found to be disconnected. |
| |
| So, fix this and make sure we only ever probe eDP ports once and then leave |
| them at that connector state forever (since without HPD, it's not going to |
| change on its own anyway). This should get rid of the last few GSP errors |
| getting spit out during runtime suspend and resume on some machines, as we |
| tried to reprobe eDP ports in response to ACPI hotplug probe events. |
| |
| Signed-off-by: Lyude Paul <lyude@redhat.com> |
| Reviewed-by: Dave Airlie <airlied@redhat.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20240404233736.7946-3-lyude@redhat.com |
| (cherry picked from commit fe6660b661c3397af0867d5d098f5b26581f1290) |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/nouveau/nouveau_dp.c | 13 ++++++++----- |
| 1 file changed, 8 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c |
| index 53185746fb3d1..17e1e23a780e0 100644 |
| --- a/drivers/gpu/drm/nouveau/nouveau_dp.c |
| +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c |
| @@ -109,12 +109,15 @@ nouveau_dp_detect(struct nouveau_connector *nv_connector, |
| u8 *dpcd = nv_encoder->dp.dpcd; |
| int ret = NOUVEAU_DP_NONE, hpd; |
| |
| - /* If we've already read the DPCD on an eDP device, we don't need to |
| - * reread it as it won't change |
| + /* eDP ports don't support hotplugging - so there's no point in probing eDP ports unless we |
| + * haven't probed them once before. |
| */ |
| - if (connector->connector_type == DRM_MODE_CONNECTOR_eDP && |
| - dpcd[DP_DPCD_REV] != 0) |
| - return NOUVEAU_DP_SST; |
| + if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { |
| + if (connector->status == connector_status_connected) |
| + return NOUVEAU_DP_SST; |
| + else if (connector->status == connector_status_disconnected) |
| + return NOUVEAU_DP_NONE; |
| + } |
| |
| mutex_lock(&nv_encoder->dp.hpd_irq_lock); |
| if (mstm) { |
| -- |
| 2.43.0 |
| |