From patchwork Wed Dec 15 04:11:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Koba Ko X-Patchwork-Id: 1568004 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=CbOgsv0M; 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 4JDMJB4ygqz9sVq for ; Wed, 15 Dec 2021 15:11:38 +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 1mxLdb-0006UX-8q; Wed, 15 Dec 2021 04:11:31 +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 1mxLdZ-0006UC-G2 for kernel-team@lists.ubuntu.com; Wed, 15 Dec 2021 04:11:29 +0000 Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) (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 4B1AF3F1C6 for ; Wed, 15 Dec 2021 04:11:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1639541489; bh=7TFhBEpWeV3gSCxOnC8d9hrUYkyba0FHTkJqFaLIYNc=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=CbOgsv0M2eI9Z5+b2gLGXaupOIte4S3T/owIDUq2GG1AUYMwr+J0D75UAjjQn/hYE 1j413Gt4jpL0xcLqZEbCvaXki+BRn5YjIYlNnL9MZal+W+fvMdRWnGHfWimx9iC7/4 8rmvyBWLwjmkk8qBcpiBhIQNaAz3ipynlLFaecB+t4pNQNb7iVm2+XiaGtSlyG481E ELDuW1Pkwgz+qYBfpxFAJt8M3IUv1g5me6XlpxMq/1dxaUqMWlSEkE2f8nkDj37Kio l+nt3F5sNBrfDxQFgaLncIAejxh2b76yvoX4eRHGqDD/HIwy0v8u7blBjVfG1hWthF H+PuaGZ38zeFQ== Received: by mail-pj1-f69.google.com with SMTP id v15-20020a17090a0e0f00b001b10461f2f6so468406pje.6 for ; Tue, 14 Dec 2021 20:11:29 -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=7TFhBEpWeV3gSCxOnC8d9hrUYkyba0FHTkJqFaLIYNc=; b=2t5JjQuHuNtHPIkpIyYruV2obfWvyWFH6z110SC8tuxwfHslaXl0T5I+5cthllAeBn VL4FmSmS3l87AGZWcKMKgR2E1iQ5EL+g43i3D8s+04jen7k0kQW6HbwS7u3i4v3+HU0j eaDBpgeiyyf43iSyM30xaiU403q3dTZI8dMPlftHVv3ixLEL99A2CQ1nxywm3IFt9ZeG +97hIXfiOspLssG43GGrBKWyqIsPubRM9QMjxNIHusODiF63pL8FbSNrg7do8RvRbecH HkTm6q1s+UXHVW2HVo+YBe4fyt5IMImG0rIvx6XxzkKKjOBA1oASZhkZ4NPml8yDH1EH j/2w== X-Gm-Message-State: AOAM532gNq9yZy/mqgCkwgOl0Toptta6oQBJ40FEAw1JbgwNRV4Dz+gu Qp6ndvV8krE1SEykmuwTRvIecpsCi9hyqxEwXlFobY0b+DsW8TK1tYfLAo/wdog0qQFXJ50Wj4q mM8ejI0ZvW5Z73G/T16Wpc3Oe0a+qRBv5pA0P0EId0Q== X-Received: by 2002:a17:90b:350b:: with SMTP id ls11mr9614010pjb.227.1639541487702; Tue, 14 Dec 2021 20:11:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJxeCT/l49Dowk93lSZ5a3cS4cljOhVcoTmcC385ra+H1NOu4u2+joK4fKd1D4sAfUKqRA4qxA== X-Received: by 2002:a17:90b:350b:: with SMTP id ls11mr9613979pjb.227.1639541487124; Tue, 14 Dec 2021 20:11:27 -0800 (PST) Received: from canonical.com (211-75-139-218.hinet-ip.hinet.net. [211.75.139.218]) by smtp.gmail.com with ESMTPSA id m3sm310651pjz.10.2021.12.14.20.11.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 20:11:26 -0800 (PST) From: Koba Ko To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/3 V2][SRU][U] drm/i915/hdmi: convert intel_hdmi_to_dev to intel_hdmi_to_i915 Date: Wed, 15 Dec 2021 12:11:21 +0800 Message-Id: <20211215041123.106364-2-koba.ko@canonical.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211215041123.106364-1-koba.ko@canonical.com> References: <20211215041123.106364-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: Jani Nikula BugLink: https://bugs.launchpad.net/bugs/1949321 Prefer i915 over drm pointer. Reviewed-by: Ville Syrjälä Signed-off-by: Jani Nikula Link: https://patchwork.freedesktop.org/patch/msgid/20210921110244.8666-1-jani.nikula@intel.com (cherry picked from commit 7ceb751b615900086eed1d65955933923f127d99) Signed-off-by: Koba Ko --- drivers/gpu/drm/i915/display/intel_hdmi.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index b04685bb6439..da0a133d80cc 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -53,21 +53,20 @@ #include "intel_panel.h" #include "intel_snps_phy.h" -static struct drm_device *intel_hdmi_to_dev(struct intel_hdmi *intel_hdmi) +static struct drm_i915_private *intel_hdmi_to_i915(struct intel_hdmi *intel_hdmi) { - return hdmi_to_dig_port(intel_hdmi)->base.base.dev; + return to_i915(hdmi_to_dig_port(intel_hdmi)->base.base.dev); } static void assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi) { - struct drm_device *dev = intel_hdmi_to_dev(intel_hdmi); - struct drm_i915_private *dev_priv = to_i915(dev); + struct drm_i915_private *dev_priv = intel_hdmi_to_i915(intel_hdmi); u32 enabled_bits; enabled_bits = HAS_DDI(dev_priv) ? DDI_BUF_CTL_ENABLE : SDVO_ENABLE; - drm_WARN(dev, + drm_WARN(&dev_priv->drm, intel_de_read(dev_priv, intel_hdmi->hdmi_reg) & enabled_bits, "HDMI port enabled, expecting disabled\n"); } @@ -1246,7 +1245,7 @@ static void hsw_set_infoframes(struct intel_encoder *encoder, void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable) { - struct drm_i915_private *dev_priv = to_i915(intel_hdmi_to_dev(hdmi)); + struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi); struct i2c_adapter *adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus); @@ -1830,7 +1829,7 @@ hdmi_port_clock_valid(struct intel_hdmi *hdmi, int clock, bool respect_downstream_limits, bool has_hdmi_sink) { - struct drm_i915_private *dev_priv = to_i915(intel_hdmi_to_dev(hdmi)); + struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi); if (clock < 25000) return MODE_CLOCK_LOW; @@ -1946,8 +1945,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) { struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector)); - struct drm_device *dev = intel_hdmi_to_dev(hdmi); - struct drm_i915_private *dev_priv = to_i915(dev); + struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi); enum drm_mode_status status; int clock = mode->clock; int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; From patchwork Wed Dec 15 04:11:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Koba Ko X-Patchwork-Id: 1568006 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=MRCMJHi5; 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 4JDMJC12dPz9t6g for ; Wed, 15 Dec 2021 15:11:39 +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 1mxLdd-0006Vb-E3; Wed, 15 Dec 2021 04:11:33 +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 1mxLdb-0006Uw-OV for kernel-team@lists.ubuntu.com; Wed, 15 Dec 2021 04:11:31 +0000 Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) (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 7BB873F1B0 for ; Wed, 15 Dec 2021 04:11:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1639541491; bh=rwounT8BDSwnycQrR+7hByX+ZJcJGfB/t7Nl75MPxkQ=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=MRCMJHi5insTTGZSSyKlzy4Eu7JMPFSHgvLhrXhX4q2n4ArmLB8VBTGzW+ARa/m+L o5c+QAz8129hG4IuCrSrUVahVVl1He+tBexzJYLZpwat814NIjyUx9nvdOguuCkLxH A3UBEiEhs74FRAEh9eMaxLCjRLlE8za8+G5ViBSbJWDgni+dOm7Kb+Mw3x0mnlAozu hcSHyVrhk+8S+vQv4xdg17m8HUaSIgsHIC0V7MXvWG2xKUxK11aqesz4i5d2Wt3unJ vjzk/Qn5J5VzjLCsCt+Sk/0ycyVM5VxfV6uKN7IZCg5D3ApwefDflRnsSwGm5Ll32N x8rEeBRp+xMVg== Received: by mail-pj1-f70.google.com with SMTP id p8-20020a17090a748800b001a6cceee8afso11428948pjk.4 for ; Tue, 14 Dec 2021 20:11:31 -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=rwounT8BDSwnycQrR+7hByX+ZJcJGfB/t7Nl75MPxkQ=; b=n0TunKiV8aq9HKBXqRmHZmiPrepiT0pdgJ0850k/2K7d/D8j0/XgJtTIY6ssPQjqRu 7OGi0xySWf0tiHmCb5uXiFnIdG2yb8JISO5/du5lmHr5cnzV/MVx5WFaXtI7yH7TEWZF i4K6JFFjgziFBxQbmAvoogJ0lSfyWinWnBKEI1h0X9bu0r+3L0SgCNiMZSofozDCcwIr HKaGDItJWixOTZ6B5znKGD/tXCNQBdezb6hVrDj+VJPYzRx1GDh4Hr8FsMaEaxhppgZ6 jC590tpG7/oD4u/DF0KFz03Pb/ZJ0x0pAjSg8GkSkeIkDkUNVz1DfHiSWOiuPO9Rer8s ScBg== X-Gm-Message-State: AOAM532iOM6bnudjTM4BUELmKw2537uYHpM/vPFKN2qIbRdheNR6F8wz CMhAZBZjEbJ9qGpN7Y65FiysLJ9v5c+1+wLdnI35oDGbqNkmlBnS5KnjUnf4yv2R4dZXb3oteU+ PcHkKkC05zpGTYbt+w7pa9gOSK8KRMZcWZ8hmpmNS1g== X-Received: by 2002:a17:902:e891:b0:148:a4e1:4fb2 with SMTP id w17-20020a170902e89100b00148a4e14fb2mr2054463plg.131.1639541489953; Tue, 14 Dec 2021 20:11:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJzgCX4LkRiPW3Id6NEnNwse2LhUg+y1H+hQ8HkXOMNwRvt0BYm7Uz05Tf1w6cnACBqGLG4B8w== X-Received: by 2002:a17:902:e891:b0:148:a4e1:4fb2 with SMTP id w17-20020a170902e89100b00148a4e14fb2mr2054451plg.131.1639541489610; Tue, 14 Dec 2021 20:11:29 -0800 (PST) Received: from canonical.com (211-75-139-218.hinet-ip.hinet.net. [211.75.139.218]) by smtp.gmail.com with ESMTPSA id lb4sm4124141pjb.18.2021.12.14.20.11.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 20:11:29 -0800 (PST) From: Koba Ko To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/3][SRU][U] drm/i915: Don't request GMBUS to generate irqs when called while irqs are off Date: Wed, 15 Dec 2021 12:11:22 +0800 Message-Id: <20211215041123.106364-3-koba.ko@canonical.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211215041123.106364-1-koba.ko@canonical.com> References: <20211215041123.106364-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: Ville Syrjälä BugLink: https://bugs.launchpad.net/bugs/1949321 We will need to do some i2c poking from the encoder->shutdown() hook. Currently that gets called after irqs have been turned off. We still poll the gmbus status bits even if the interrupt never arrives so things will work just fine. But seems like asking gmbus to generate interrupts we will never see is a bit pointless, so don't. Signed-off-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/20211029191802.18448-1-ville.syrjala@linux.intel.com Reviewed-by: Stanislav Lisovskiy (cherry picked from commit fa2a6c5b9cfb0dfbd1b811b154a036df1017ce66 linux-next) Signed-off-by: Koba Ko --- drivers/gpu/drm/i915/display/intel_gmbus.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_gmbus.c b/drivers/gpu/drm/i915/display/intel_gmbus.c index ceb1bf8a8c3c..3b8b84177085 100644 --- a/drivers/gpu/drm/i915/display/intel_gmbus.c +++ b/drivers/gpu/drm/i915/display/intel_gmbus.c @@ -334,6 +334,15 @@ intel_gpio_setup(struct intel_gmbus *bus, unsigned int pin) algo->data = bus; } +static bool has_gmbus_irq(struct drm_i915_private *i915) +{ + /* + * encoder->shutdown() may want to use GMBUS + * after irqs have already been disabled. + */ + return HAS_GMBUS_IRQ(i915) && intel_irqs_enabled(i915); +} + static int gmbus_wait(struct drm_i915_private *dev_priv, u32 status, u32 irq_en) { DEFINE_WAIT(wait); @@ -344,7 +353,7 @@ static int gmbus_wait(struct drm_i915_private *dev_priv, u32 status, u32 irq_en) * we also need to check for NAKs besides the hw ready/idle signal, we * need to wake up periodically and check that ourselves. */ - if (!HAS_GMBUS_IRQ(dev_priv)) + if (!has_gmbus_irq(dev_priv)) irq_en = 0; add_wait_queue(&dev_priv->gmbus_wait_queue, &wait); @@ -375,7 +384,7 @@ gmbus_wait_idle(struct drm_i915_private *dev_priv) /* Important: The hw handles only the first bit, so set only one! */ irq_enable = 0; - if (HAS_GMBUS_IRQ(dev_priv)) + if (has_gmbus_irq(dev_priv)) irq_enable = GMBUS_IDLE_EN; add_wait_queue(&dev_priv->gmbus_wait_queue, &wait); From patchwork Wed Dec 15 04:11:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Koba Ko X-Patchwork-Id: 1568007 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=VogC0VTF; 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 4JDMJG5R8sz9sVq for ; Wed, 15 Dec 2021 15:11:42 +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 1mxLdg-0006YG-1q; Wed, 15 Dec 2021 04:11:36 +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 1mxLdd-0006Vj-MD for kernel-team@lists.ubuntu.com; Wed, 15 Dec 2021 04:11:33 +0000 Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) (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 61D753F1B0 for ; Wed, 15 Dec 2021 04:11:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1639541493; bh=q5uE0XNm/+BBUpI1DQKXMEavkFYOtQ/Hcsuta4of1kk=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=VogC0VTF3MwriGbT4ynachjhPa0MG9mQLow3dKmXqybYRJqLZz+uY1KS3jsOrN14c 0fR78Sl302iKzaHaOxsDmACtiuHtk2UQvCK6/Ahx8YktanHJtOM/myu6m+aJTfWg/j t0e3DVSIC+P3dj7Jt4uiFq+pNIMdZwxA+7XSBQ7N4Poj5qWz2bBPYr1Kf31jEvH+Kw H0XApIXi7YBEKZ2BoNwzip+rGFf4rjt42Kw1S/JhjV4zYjngco86ZiYQH755VqV/FR NDzpfUqCLDjT2MfKKS/IinSQATtDb1XQAKF/VV/sDjzBLHAUY+jPmne7Nmp+unvscQ QBdeeekPA0F6A== Received: by mail-pg1-f197.google.com with SMTP id c15-20020a63ea0f000000b0033ab6c73a4bso5771330pgi.20 for ; Tue, 14 Dec 2021 20:11:33 -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=q5uE0XNm/+BBUpI1DQKXMEavkFYOtQ/Hcsuta4of1kk=; b=0KU0Q3o4URl+4Dri9qNWa4HnFaRRYmgCgQnnai7zal2FliFK0eHBQsK/MdNUhAOq4E GZth2S/7xU3w6+D8WbPUGuOR4Qkx5TK3BJGBClROF34DVThsFMkJwYTCbM5AMFVs3mj5 URw0u/yN8q0oJzODgyM43YbHZetYo1rLz1P90gnnL8k2B2gNIGigroWpnoq+R7sCw25I yreSS+xKRacnqh+Fr0AeXbj1zZDGI7k7pyAM/ReXxX7l820L2hvEfe8HKiCGes3HFDW9 9R1GIC1fjmu4xVYbmBeYgyq9v1XkWW17Jp38wC2ksGboGyHVGt0OAHOnrbaoD5geuv5X PMJA== X-Gm-Message-State: AOAM530bcJwOQKNyCmLj4sizJR581ssWkYN9kfUTpKHO+yAkzdb9r9Qc K5TGi4ZSx1cR6tP9axYhOdZVPD22lljTXuPj2CSYnOcgvsrsyHco6D4g/fTPfdEMcUkKQCcyvRi 057wG/AtlJ+zfN031RiA2DieJnOU14jxLPfoDyZMaWQ== X-Received: by 2002:a17:902:c102:b0:148:a8c1:e327 with SMTP id 2-20020a170902c10200b00148a8c1e327mr1162045pli.2.1639541491752; Tue, 14 Dec 2021 20:11:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJyKRtZj46dpMOP6XpsNa/UUrDPTGLlcAqfFzH33BwlbAbcI6ts6sSFQAaKMBzYrMHs3F59lKQ== X-Received: by 2002:a17:902:c102:b0:148:a8c1:e327 with SMTP id 2-20020a170902c10200b00148a8c1e327mr1162030pli.2.1639541491387; Tue, 14 Dec 2021 20:11:31 -0800 (PST) Received: from canonical.com (211-75-139-218.hinet-ip.hinet.net. [211.75.139.218]) by smtp.gmail.com with ESMTPSA id m14sm578900pfh.71.2021.12.14.20.11.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 20:11:31 -0800 (PST) From: Koba Ko To: kernel-team@lists.ubuntu.com Subject: [PATCH 3/3][SRU][U] drm/i915/hdmi: Turn DP++ TMDS output buffers back on in encoder->shutdown() Date: Wed, 15 Dec 2021 12:11:23 +0800 Message-Id: <20211215041123.106364-4-koba.ko@canonical.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211215041123.106364-1-koba.ko@canonical.com> References: <20211215041123.106364-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: Ville Syrjälä BugLink: https://bugs.launchpad.net/bugs/1949321 Looks like our VBIOS/GOP generally fail to turn the DP dual mode adater TMDS output buffers back on after a reboot. This leads to a black screen after reboot if we turned the TMDS output buffers off prior to reboot. And if i915 decides to do a fastboot the black screen will persist even after i915 takes over. Apparently this has been a problem ever since commit b2ccb822d376 ("drm/i915: Enable/disable TMDS output buffers in DP++ adaptor as needed") if one rebooted while the display was turned off. And things became worse with commit fe0f1e3bfdfe ("drm/i915: Shut down displays gracefully on reboot") since now we always turn the display off before a reboot. This was reported on a RKL, but I confirmed the same behaviour on my SNB as well. So looks pretty universal. Let's fix this by explicitly turning the TMDS output buffers back on in the encoder->shutdown() hook. Note that this gets called after irqs have been disabled, so the i2c communication with the DP dual mode adapter has to be performed via polling (which the gmbus code is perfectly happy to do for us). We also need a bit of care in handling DDI encoders which may or may not be set up for HDMI output. Specifically ddc_pin will not be populated for a DP only DDI encoder, in which case we don't want to call intel_gmbus_get_adapter(). We can handle that by simply doing the dual mode adapter type check before calling intel_gmbus_get_adapter(). Cc: # v5.11+ Fixes: fe0f1e3bfdfe ("drm/i915: Shut down displays gracefully on reboot") Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4371 Signed-off-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/20211029191802.18448-2-ville.syrjala@linux.intel.com Reviewed-by: Stanislav Lisovskiy (cherry picked from commit 49c55f7b035b87371a6d3c53d9af9f92ddc962db) Signed-off-by: Rodrigo Vivi (cherry picked from commit cecbc0c7eba7983965cac94f88d2db00b913253b) Signed-off-by: Koba Ko --- drivers/gpu/drm/i915/display/g4x_hdmi.c | 1 + drivers/gpu/drm/i915/display/intel_ddi.c | 1 + drivers/gpu/drm/i915/display/intel_hdmi.c | 16 ++++++++++++++-- drivers/gpu/drm/i915/display/intel_hdmi.h | 1 + 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/g4x_hdmi.c b/drivers/gpu/drm/i915/display/g4x_hdmi.c index be352e9f0afc..63baaf6988ad 100644 --- a/drivers/gpu/drm/i915/display/g4x_hdmi.c +++ b/drivers/gpu/drm/i915/display/g4x_hdmi.c @@ -584,6 +584,7 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv, else intel_encoder->enable = g4x_enable_hdmi; } + intel_encoder->shutdown = intel_hdmi_encoder_shutdown; intel_encoder->type = INTEL_OUTPUT_HDMI; intel_encoder->power_domain = intel_port_to_power_domain(port); diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index bd184325d0c7..82e5064b4ce7 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -4432,6 +4432,7 @@ static void intel_ddi_encoder_shutdown(struct intel_encoder *encoder) enum phy phy = intel_port_to_phy(i915, encoder->port); intel_dp_encoder_shutdown(encoder); + intel_hdmi_encoder_shutdown(encoder); if (!intel_phy_is_tc(i915, phy)) return; diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index da0a133d80cc..c3787512295d 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -1246,12 +1246,13 @@ static void hsw_set_infoframes(struct intel_encoder *encoder, void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable) { struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi); - struct i2c_adapter *adapter = - intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus); + struct i2c_adapter *adapter; if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI) return; + adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus); + drm_dbg_kms(&dev_priv->drm, "%s DP dual mode adaptor TMDS output\n", enable ? "Enabling" : "Disabling"); @@ -2258,6 +2259,17 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder, return 0; } +void intel_hdmi_encoder_shutdown(struct intel_encoder *encoder) +{ + struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); + + /* + * Give a hand to buggy BIOSen which forget to turn + * the TMDS output buffers back on after a reboot. + */ + intel_dp_dual_mode_set_tmds_output(intel_hdmi, true); +} + static void intel_hdmi_unset_edid(struct drm_connector *connector) { diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h b/drivers/gpu/drm/i915/display/intel_hdmi.h index b43a180d007e..2bf440eb400a 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.h +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h @@ -28,6 +28,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port, int intel_hdmi_compute_config(struct intel_encoder *encoder, struct intel_crtc_state *pipe_config, struct drm_connector_state *conn_state); +void intel_hdmi_encoder_shutdown(struct intel_encoder *encoder); bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, struct drm_connector *connector, bool high_tmds_clock_ratio,