From patchwork Thu Nov 25 10:10:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chris Chiu X-Patchwork-Id: 1559622 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=mvj6Spoz; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) 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 4J0DF313d0z9s5P for ; Thu, 25 Nov 2021 21:11:51 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1mqBj8-0006um-0i; Thu, 25 Nov 2021 10:11:38 +0000 Received: from smtp-relay-internal-1.internal ([10.131.114.114] helo=smtp-relay-internal-1.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1mqBih-000610-6a for kernel-team@lists.ubuntu.com; Thu, 25 Nov 2021 10:11:11 +0000 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.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-1.canonical.com (Postfix) with ESMTPS id 0E8303F1D7 for ; Thu, 25 Nov 2021 10:11:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1637835070; bh=jf7BgkHRsLOGEF0YH305pNZP/Ulog0iHMU8q0YqD6GA=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=mvj6SpozdJ2NwbQ+qQKpq5EHHEWlPALmIU9Q2W2e5wx4bh8HicE66O8TgKLsJAQOy aM6hNokLNYeluKH4/9DVrvp/0WWB/p4aXgpH7gQdqhFIu4PNiIqk/oIZei/oa2Vj3R rtb/yXBd5HAFVdklV95/2WHsO1mCn1a83Q/tUN6rSQOS5ZhhrAk1T1dMysLlFrLTmI EOwPDQAHTUDqscz3IZB4KvzTPjEvfl/n2SBeT2Mj/KBGr1gks+6I0PrK4TTuYFoUK4 pdmkGA5W1IXDfI4luoPtzWrpN6h9qAX6r9HNB6V1BIU1k7B/RTxCgnRd9nDczBpSo9 tXvPfEGQMzXhQ== Received: by mail-pl1-f199.google.com with SMTP id e9-20020a170902ed8900b00143a3f40299so1871768plj.20 for ; Thu, 25 Nov 2021 02:11:09 -0800 (PST) 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=jf7BgkHRsLOGEF0YH305pNZP/Ulog0iHMU8q0YqD6GA=; b=DcjJtqW0vOoPtdAVHqC3eguZzK9SqLRSwi0Dr0RVxfg0uwbqrlMm1uuCwNodJBIYzP IwDDNpETaI5Lcf2yAJkTlHomEfS+370JjPyE5vtQpFcrINVnkCSBn1NxqLBUpdPn0cNU bUYH3FPzz5uwi3JawrVYyChwjGjo8Ll2IazrJhIKWC1XGnYtDHBxDlKabDGJtefY8JF7 pnI3zvrYelRSg1puwSToG3CMoIBOAe0bx1qN+EVnfqnoV+byZnHUQHwBtPtbkx0RwwLH IvFfakobqu5q6dG287Tk6wRKwZPir7b0T3hm2n1UTQB+46d4zJSi0bRGaMg4IDEVEpAc gyWQ== X-Gm-Message-State: AOAM5306tXUFnrjh0h/cb4ZypChidAH+CfJOlrx7QoS2UYANleEOwg5B fEu/1E2mlwnVvmBEphE03UmIyBMyfwLXy7MGAQqMrTDMl0HC8jCUaWv3kiNRBdy2dg/EzDRrzAx xeQCnoFpqOEL81ExOSysp7Yc0OzpVKdn+zjhDDA0ZGw== X-Received: by 2002:a05:6a00:15c5:b0:4a0:3c1:4f43 with SMTP id o5-20020a056a0015c500b004a003c14f43mr13323572pfu.33.1637835068574; Thu, 25 Nov 2021 02:11:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJyUC6YcYfxGfv/03L6K4cGn+6R7gYt4zv+QaJOYY65twLAV3Oe9D6wgAepL+b4hHVGgkByqPw== X-Received: by 2002:a05:6a00:15c5:b0:4a0:3c1:4f43 with SMTP id o5-20020a056a0015c500b004a003c14f43mr13323535pfu.33.1637835068232; Thu, 25 Nov 2021 02:11:08 -0800 (PST) Received: from localhost.localdomain (111-240-133-170.dynamic-ip.hinet.net. [111.240.133.170]) by smtp.gmail.com with ESMTPSA id il7sm2554831pjb.54.2021.11.25.02.11.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Nov 2021 02:11:07 -0800 (PST) From: Chris Chiu To: kernel-team@lists.ubuntu.com Subject: [PATCH 08/12][SRU][Jammy/Unstable] drm/i915/tc: Avoid using legacy AUX PW in TBT mode Date: Thu, 25 Nov 2021 18:10:52 +0800 Message-Id: <20211125101056.20316-9-chris.chiu@canonical.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211125101056.20316-1-chris.chiu@canonical.com> References: <20211125101056.20316-1-chris.chiu@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: Imre Deak BugLink: https://bugs.launchpad.net/bugs/1952041 For the ADL-P TBT mode the spec doesn't require blocking TC-cold by using the legacy AUX power domain. To avoid the timeouts that this would cause during PHY disconnect/reconnect sequences (which will be more frequent after a follow-up change) use the TC_COLD_OFF power domain in TBT mode on all platforms. On TGL this power domain blocks TC-cold via a PUNIT command, while on other platforms the domain just takes a runtime PM reference. If the HPD live status indicates that the port mode needs to be reset - for instance after switching from TBT to a DP-alt sink - still take the AUX domain, since the IOM firmware handshake requires this. v2: Rebased on v2 of the previous patch. Cc: José Roberto de Souza Signed-off-by: Imre Deak Reviewed-by: José Roberto de Souza Link: https://patchwork.freedesktop.org/patch/msgid/20210929132833.2253961-5-imre.deak@intel.com (cherry picked from commit 8e8289a00e6360e0b340db05b7e16dfb5e7be067) Signed-off-by: Chris Chiu --- drivers/gpu/drm/i915/display/intel_tc.c | 55 ++++++++++++++++--------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_tc.c b/drivers/gpu/drm/i915/display/intel_tc.c index 69c917fce03e..2df4d0beb636 100644 --- a/drivers/gpu/drm/i915/display/intel_tc.c +++ b/drivers/gpu/drm/i915/display/intel_tc.c @@ -59,10 +59,10 @@ bool intel_tc_cold_requires_aux_pw(struct intel_digital_port *dig_port) static enum intel_display_power_domain tc_cold_get_power_domain(struct intel_digital_port *dig_port, enum tc_port_mode mode) { - if (intel_tc_cold_requires_aux_pw(dig_port)) - return intel_legacy_aux_to_power_domain(dig_port->aux_ch); - else + if (mode == TC_PORT_TBT_ALT || !intel_tc_cold_requires_aux_pw(dig_port)) return POWER_DOMAIN_TC_COLD_OFF; + + return intel_legacy_aux_to_power_domain(dig_port->aux_ch); } static intel_wakeref_t @@ -645,6 +645,36 @@ static void intel_tc_port_reset_mode(struct intel_digital_port *dig_port, tc_port_mode_name(dig_port->tc_mode)); } +static bool intel_tc_port_needs_reset(struct intel_digital_port *dig_port) +{ + return intel_tc_port_get_target_mode(dig_port) != dig_port->tc_mode; +} + +static void intel_tc_port_update_mode(struct intel_digital_port *dig_port, + int required_lanes, bool force_disconnect) +{ + enum intel_display_power_domain domain; + intel_wakeref_t wref; + bool needs_reset = force_disconnect; + + if (!needs_reset) { + /* Get power domain required to check the hotplug live status. */ + wref = tc_cold_block(dig_port, &domain); + needs_reset = intel_tc_port_needs_reset(dig_port); + tc_cold_unblock(dig_port, domain, wref); + } + + if (!needs_reset) + return; + + /* Get power domain required for resetting the mode. */ + wref = tc_cold_block_in_mode(dig_port, TC_PORT_DISCONNECTED, &domain); + + intel_tc_port_reset_mode(dig_port, required_lanes, force_disconnect); + + tc_cold_unblock(dig_port, domain, wref); +} + static void intel_tc_port_link_init_refcount(struct intel_digital_port *dig_port, int refcount) @@ -691,11 +721,6 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port) mutex_unlock(&dig_port->tc_lock); } -static bool intel_tc_port_needs_reset(struct intel_digital_port *dig_port) -{ - return intel_tc_port_get_target_mode(dig_port) != dig_port->tc_mode; -} - /* * The type-C ports are different because even when they are connected, they may * not be available/usable by the graphics driver: see the comment on @@ -735,18 +760,10 @@ static void __intel_tc_port_lock(struct intel_digital_port *dig_port, mutex_lock(&dig_port->tc_lock); - if (!dig_port->tc_link_refcount) { - enum intel_display_power_domain domain; - intel_wakeref_t tc_cold_wref; - - tc_cold_wref = tc_cold_block(dig_port, &domain); - if (force_disconnect || intel_tc_port_needs_reset(dig_port)) - intel_tc_port_reset_mode(dig_port, required_lanes, - force_disconnect); - - tc_cold_unblock(dig_port, domain, tc_cold_wref); - } + if (!dig_port->tc_link_refcount) + intel_tc_port_update_mode(dig_port, required_lanes, + force_disconnect); drm_WARN_ON(&i915->drm, dig_port->tc_lock_wakeref); dig_port->tc_lock_wakeref = wakeref;