| From df1e271db28eab6c7c4d3528de4be528eedead0c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 13 Mar 2021 12:25:44 +0100 |
| Subject: drm/probe-helper: Check epoch counter in output_poll_execute() |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Noralf Trønnes <noralf@tronnes.org> |
| |
| [ Upstream commit dc659a4e852b591771fc2e5abb60f4455b0cf316 ] |
| |
| drm_helper_hpd_irq_event() checks the epoch counter to determine |
| connector status change. This was introduced in |
| commit 5186421cbfe2 ("drm: Introduce epoch counter to drm_connector"). |
| Do the same for output_poll_execute() so it can detect other changes |
| beside connection status value changes. |
| |
| v2: |
| - Add Fixes tag (Daniel) |
| |
| Fixes: 5186421cbfe2 ("drm: Introduce epoch counter to drm_connector") |
| Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Signed-off-by: Noralf Trønnes <noralf@tronnes.org> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20210313112545.37527-3-noralf@tronnes.org |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/drm_probe_helper.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c |
| index d6017726cc2a..e5432dcf6999 100644 |
| --- a/drivers/gpu/drm/drm_probe_helper.c |
| +++ b/drivers/gpu/drm/drm_probe_helper.c |
| @@ -623,6 +623,7 @@ static void output_poll_execute(struct work_struct *work) |
| struct drm_connector_list_iter conn_iter; |
| enum drm_connector_status old_status; |
| bool repoll = false, changed; |
| + u64 old_epoch_counter; |
| |
| if (!dev->mode_config.poll_enabled) |
| return; |
| @@ -659,8 +660,9 @@ static void output_poll_execute(struct work_struct *work) |
| |
| repoll = true; |
| |
| + old_epoch_counter = connector->epoch_counter; |
| connector->status = drm_helper_probe_detect(connector, NULL, false); |
| - if (old_status != connector->status) { |
| + if (old_epoch_counter != connector->epoch_counter) { |
| const char *old, *new; |
| |
| /* |
| @@ -689,6 +691,9 @@ static void output_poll_execute(struct work_struct *work) |
| connector->base.id, |
| connector->name, |
| old, new); |
| + DRM_DEBUG_KMS("[CONNECTOR:%d:%s] epoch counter %llu -> %llu\n", |
| + connector->base.id, connector->name, |
| + old_epoch_counter, connector->epoch_counter); |
| |
| changed = true; |
| } |
| -- |
| 2.30.2 |
| |