From patchwork Tue May 17 08:28:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koba Ko X-Patchwork-Id: 1632105 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=DDbVz9bQ; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4L2TmZ2q2Sz9s0r for ; Tue, 17 May 2022 18:29:02 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1nqsZc-0007nQ-D8; Tue, 17 May 2022 08:28:56 +0000 Received: from smtp-relay-internal-0.internal ([10.131.114.225] helo=smtp-relay-internal-0.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1nqsZa-0007l2-M4 for kernel-team@lists.ubuntu.com; Tue, 17 May 2022 08:28:54 +0000 Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 2D2283F1E1 for ; Tue, 17 May 2022 08:28:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1652776120; bh=WcLG28TlBZFFJGnBcDKVtKycYlHuHlsWJJQwRvKimPU=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DDbVz9bQiIMaxJGq1URZxo88CsBOvbQz66nH818cxu977NXjZ979oT5Xp6octpEbJ OvqFlBh/vWRGtQh/ltMI0yWkthDv573b9mL4/q6YPjFy4bAAaDqi44O7hNtnYpJF2C m6nsEdcIRJ1ihB+4FNOJYTzhaU0VajCPgJCQ29FsIYZe1MxhlFmI/LdckgB3se1XBU wvO2mCysnq6BxruFTUT5kRL1Y3oIwX3tP38dDeWGPNv9zkcB0uZ9r4dPOxNLdNeChx Fk4U8pOTGLuRoVffKh8oqqgebxusj5OZlfRYq3ThXISBZXXb9BwceOX5x0RPQvCxID lwpmSTFFLBVVw== Received: by mail-pf1-f199.google.com with SMTP id g5-20020a62e305000000b0050d2dba0c5dso7388679pfh.8 for ; Tue, 17 May 2022 01:28:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WcLG28TlBZFFJGnBcDKVtKycYlHuHlsWJJQwRvKimPU=; b=waY/3SB9g4OrUWH5F1jdFhlW3fvIXxPBmpYbcKKoMVqjNtNpyUQ8h/EUXgNMnDaBet qX2riypl8dZ31dDe5LRpcf6ugv/z6ZzWP5R0dWC6J6lTymE4p1Gcr+Nqal3gbDNVezHm SCf+HFt9Q5qRVQpQSEFJg1pnOBmoEhKVfGo/24/0iphqu54dyFMYZ2Lj99MZFx7T4WA5 V3LJ9UBlTeE/MLplRy2rgmi89uCPA/nly/cuuuGUannh3HBPMZEmTubOqf8cBHYN3yI2 ZWF3tglO8CaM3zqozCAfHzQ1Utc5fqS5FtK2r6PMzEiuCzIafub6yxOlH3hrElrzRzpe CbpQ== X-Gm-Message-State: AOAM530pLKS5rXTTAbRvPhg990Q+pEl+qflRBjs3FtWqLYHuqqK13243 C9RlhLv536g6L6Z/wgrw/p9JBjAF8Y25goQ8unecF/LjlV47M/E980ZZ7CWYgzqi7vjLIzhzZoZ k6edqY4VF0k3p0igGle4NZPBwDSdwK9Fm570Uvu6Tow== X-Received: by 2002:a17:90b:3688:b0:1df:1d55:507f with SMTP id mj8-20020a17090b368800b001df1d55507fmr15878375pjb.169.1652776118419; Tue, 17 May 2022 01:28:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx90pm2QtHxInsgmlV2xLInIrb6TAo+zFuwmyxjB6cIFu0iBTqQ0hOzUiKFKNVzG4e+wS6V4A== X-Received: by 2002:a17:90b:3688:b0:1df:1d55:507f with SMTP id mj8-20020a17090b368800b001df1d55507fmr15878357pjb.169.1652776118101; Tue, 17 May 2022 01:28:38 -0700 (PDT) Received: from canonical.com (2001-b011-3815-15f4-c141-ca82-0c2a-eff1.dynamic-ip6.hinet.net. [2001:b011:3815:15f4:c141:ca82:c2a:eff1]) by smtp.gmail.com with ESMTPSA id d18-20020a17090ac25200b001cda0b69a30sm1023334pjx.52.2022.05.17.01.28.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 May 2022 01:28:37 -0700 (PDT) From: Koba Ko To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/5 V2][SRU][J/OEM-5.14] drm/amd/display: Clear encoder assignments when state cleared. Date: Tue, 17 May 2022 16:28:28 +0800 Message-Id: <20220517082831.30516-3-koba.ko@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220517082831.30516-1-koba.ko@canonical.com> References: <20220517082831.30516-1-koba.ko@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Jimmy Kizito BugLink: https://bugs.launchpad.net/bugs/1971417 [Why] State can be cleared without removing individual streams (by calling dc_remove_stream_from_ctx()). This can leave the encoder assignment module in an incoherent state and cause future assignments to be incorrect. [How] Clear encoder assignments when committing 0 streams or re-initializing hardware. Acked-by: Aurabindo Pillai Signed-off-by: Jimmy Kizito Reviewed-by: Jun Lei Tested-by: Daniel Wheeler Signed-off-by: Alex Deucher (cherry picked from commit 589bd2f03f87563d6dc4f480d47e5aabc09e4784) Signed-off-by: Koba Ko --- .../drm/amd/display/dc/core/dc_link_enc_cfg.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_enc_cfg.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_enc_cfg.c index 4dce25c39b756..95c60c8a038ff 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_enc_cfg.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_enc_cfg.c @@ -223,6 +223,23 @@ static struct link_encoder *get_link_enc_used_by_link( return link_enc; } +/* Clear all link encoder assignments. */ +static void clear_enc_assignments(struct dc_state *state) +{ + int i; + enum engine_id eng_id; + struct dc_stream_state *stream; + + for (i = 0; i < MAX_PIPES; i++) { + state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].valid = false; + eng_id = state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].eng_id; + stream = state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].stream; + if (eng_id != ENGINE_ID_UNKNOWN) + state->res_ctx.link_enc_cfg_ctx.link_enc_avail[eng_id - ENGINE_ID_DIGA] = eng_id; + if (stream) + stream->link_enc = NULL; + } +} void link_enc_cfg_init( struct dc *dc, @@ -237,6 +254,8 @@ void link_enc_cfg_init( state->res_ctx.link_enc_cfg_ctx.link_enc_avail[i] = ENGINE_ID_UNKNOWN; } + clear_enc_assignments(state); + state->res_ctx.link_enc_cfg_ctx.mode = LINK_ENC_CFG_STEADY; } @@ -252,6 +271,9 @@ void link_enc_cfg_link_encs_assign( ASSERT(state->stream_count == stream_count); + if (stream_count == 0) + clear_enc_assignments(state); + /* Release DIG link encoder resources before running assignment algorithm. */ for (i = 0; i < stream_count; i++) dc->res_pool->funcs->link_enc_unassign(state, streams[i]);