From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 4.19 32/73] drm/msm/hdmi: Enable HPD after HDMI IRQ is set up Date: Wed, 12 Dec 2018 23:27:57 -0500 Message-ID: <20181213042838.75160-32-sashal@kernel.org> References: <20181213042838.75160-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181213042838.75160-1-sashal@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, Todor Tomov , Sean Paul , freedreno@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogVG9kb3IgVG9tb3YgPHRvZG9yLnRvbW92QGxpbmFyby5vcmc+CgpbIFVwc3RyZWFtIGNv bW1pdCBlZTQ0NTYzNTk2NDBkZWZlM2Y1MWNjNmI3MjhiZmNlNGJjNDQ0YzllIF0KClNvQ3MgdGhh dCBjb250YWluIE1EUDUgaGF2ZSBhIHRvcCBsZXZlbCB3cmFwcGVyIGNhbGxlZCBNRFNTIHRoYXQK bWFuYWdlcyBsb2NrcywgcG93ZXIgYW5kIGlycSBmb3IgdGhlIHN1Yi1ibG9ja3Mgd2l0aGluIGl0 LgoKSXJxIGZvciBIRE1JIGlzIGFsc28gcm91dGVkIHRocm91Z2ggdGhlIE1EU1MuCgpTaG9ydGx5 IGFmdGVyIHRoZSBIb3QgUGx1ZyBEZXRlY3Rpb24gKEhQRCkgaXMgZW5hYmxlZCBpbiBIRE1JLApI RE1JIGludGVycnVwdHMgYXJlIHJlY2lldmVkIGJ5IHRoZSBNRFNTIGludGVycnVwdCBoYW5kbGVy LgpIb3dldmVyIGF0IHRoaXMgbW9tZW50IHRoZSBIRE1JIGlycSBpcyBzdGlsbCBub3QgbWFwcGVk IHRvCnRoZSBNRFNTIGlycSBkb21haW4gc28gdGhlIEhETUkgaXJxIGhhbmRsZXIgY2Fubm90IGJl IGNhbGxlZAp0byBwcm9jZXNzIHRoZSBpbnRlcnJ1cHRzLgoKVGhpcyBsZWFkcyB0byBhIGZsb29k IG9mIEhETUkgaW50ZXJydXB0cyBvbiBDUFUgMC4KCklmIHdlIGFyZSBsdWNreSB0byBoYXZlIHRo ZSBIRE1JIGluaXRpYWxpemF0aW9uIHJ1bm5pbmcgb24gYQpkaWZmZXJlbnQgQ1BVLCBpdCB3aWxs IGV2ZW50dWFsbHkgbWFwIHRoZSBIRE1JIGlycSB0byBNRFNTIGlycQpkb21haW4sIHRoZSBuZXh0 IEhETUkgaW50ZXJydXB0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgSERNSSBpcnEKaGFuZGxlciwg dGhlIGludGVycnVwdCBmbG9vZCB3aWxsIHN0b3AgYW5kIHdlIHdpbGwgcmVjb3Zlci4KCklmIHRo ZSBIRE1JIGluaXRpYWxpemF0aW9uIGlzIHJ1bm5pbmcgb24gQ1BVIDAsIHRoZW4gaXQgY2Fubm90 CmNvbXBsZXRlIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIHN0b3AgdGhlIGludGVycnVwdCBmbG9v ZCBvbgpDUFUgMC4gVGhlIHN5c3RlbSBpcyBzdHVjay4KCkZpeCB0aGlzIGJ5IG1vdmluZyB0aGUg SFBEIGVuYWJsZW1lbnQgYWZ0ZXIgdGhlIEhETUkgaXJxIGlzCm1hcHBlZCB0byB0aGUgTURTUyBp cnEgZG9tYWluLgoKU2lnbmVkLW9mZi1ieTogVG9kb3IgVG9tb3YgPHRvZG9yLnRvbW92QGxpbmFy by5vcmc+ClNpZ25lZC1vZmYtYnk6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KU2ln bmVkLW9mZi1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYt Ynk6IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2hkbWkvaGRtaS5jICAgICAgICAgICB8ICA2ICsrKysrKwogZHJpdmVycy9ncHUvZHJtL21z bS9oZG1pL2hkbWkuaCAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkv aGRtaV9jb25uZWN0b3IuYyB8IDEwICsrLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNl cnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vaGRtaS9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaS5jCmluZGV4IGM3 OTY1OWNhNTcwNi4uMzNlMDgzZjcxYTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2hkbWkvaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pLmMKQEAgLTMz Miw2ICszMzIsMTIgQEAgaW50IG1zbV9oZG1pX21vZGVzZXRfaW5pdChzdHJ1Y3QgaGRtaSAqaGRt aSwKIAkJZ290byBmYWlsOwogCX0KIAorCXJldCA9IG1zbV9oZG1pX2hwZF9lbmFibGUoaGRtaS0+ Y29ubmVjdG9yKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKCZoZG1pLT5wZGV2 LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIEhQRDogJWRcbiIsIHJldCk7CisJCWdvdG8gZmFpbDsK Kwl9CisKIAllbmNvZGVyLT5icmlkZ2UgPSBoZG1pLT5icmlkZ2U7CiAKIAlwcml2LT5icmlkZ2Vz W3ByaXYtPm51bV9icmlkZ2VzKytdICAgICAgID0gaGRtaS0+YnJpZGdlOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL2hkbWkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRt aS9oZG1pLmgKaW5kZXggYWNjYzlhNjE2MTFkLi41YzVkZjZhYjJhNTcgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9o ZG1pL2hkbWkuaApAQCAtMjQ1LDYgKzI0NSw3IEBAIHZvaWQgbXNtX2hkbWlfYnJpZGdlX2Rlc3Ry b3koc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7CiAKIHZvaWQgbXNtX2hkbWlfY29ubmVjdG9y X2lycShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIHN0cnVjdCBkcm1fY29ubmVj dG9yICptc21faGRtaV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgaGRtaSAqaGRtaSk7CitpbnQgbXNt X2hkbWlfaHBkX2VuYWJsZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIAogLyoK ICAqIGkyYyBhZGFwdGVyIGZvciBkZGM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2hkbWkvaGRtaV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX2Nv bm5lY3Rvci5jCmluZGV4IGU5YzlhMGFmNTA4ZS4uMzBlOTA4ZGZkZWQ3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2hkbWkvaGRtaV9jb25uZWN0b3IuYwpAQCAtMTY3LDggKzE2Nyw5IEBAIHN0YXRp YyB2b2lkIGVuYWJsZV9ocGRfY2xvY2tzKHN0cnVjdCBoZG1pICpoZG1pLCBib29sIGVuYWJsZSkK IAl9CiB9CiAKLXN0YXRpYyBpbnQgaHBkX2VuYWJsZShzdHJ1Y3QgaGRtaV9jb25uZWN0b3IgKmhk bWlfY29ubmVjdG9yKQoraW50IG1zbV9oZG1pX2hwZF9lbmFibGUoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKIHsKKwlzdHJ1Y3QgaGRtaV9jb25uZWN0b3IgKmhkbWlfY29ubmVjdG9y ID0gdG9faGRtaV9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAlzdHJ1Y3QgaGRtaSAqaGRtaSA9IGhk bWlfY29ubmVjdG9yLT5oZG1pOwogCWNvbnN0IHN0cnVjdCBoZG1pX3BsYXRmb3JtX2NvbmZpZyAq Y29uZmlnID0gaGRtaS0+Y29uZmlnOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoZG1pLT5wZGV2 LT5kZXY7CkBAIC00NTAsNyArNDUxLDYgQEAgc3RydWN0IGRybV9jb25uZWN0b3IgKm1zbV9oZG1p X2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBoZG1pICpoZG1pKQogewogCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IgPSBOVUxMOwogCXN0cnVjdCBoZG1pX2Nvbm5lY3RvciAqaGRtaV9jb25u ZWN0b3I7Ci0JaW50IHJldDsKIAogCWhkbWlfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2YoKmhk bWlfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoZG1pX2Nvbm5lY3RvcikKQEAgLTQ3 MSwxMiArNDcxLDYgQEAgc3RydWN0IGRybV9jb25uZWN0b3IgKm1zbV9oZG1pX2Nvbm5lY3Rvcl9p bml0KHN0cnVjdCBoZG1pICpoZG1pKQogCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSAw OwogCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gMDsKIAotCXJldCA9IGhwZF9lbmFi bGUoaGRtaV9jb25uZWN0b3IpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRtaS0+cGRldi0+ ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBIUEQ6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gRVJSX1BU UihyZXQpOwotCX0KLQogCWRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBo ZG1pLT5lbmNvZGVyKTsKIAogCXJldHVybiBjb25uZWN0b3I7Ci0tIAoyLjE5LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC341C67839 for ; Thu, 13 Dec 2018 04:49:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7FCC820849 for ; Thu, 13 Dec 2018 04:49:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544676594; bh=s9jculQmF5oj+3znmtzfEGyVfsLa532XYmpOeJiVqCc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=ekbeIjVxK7wW9FJadnP8toLKVE/iUBg0Q0fK43G8y0ki3/jovXrbI4EZ3v7vBehi1 hYyv3EgGoXiymUshKPy5+fA2/kkgACJhOgx6jP7vz52Ia6jOlFvlnTtzj+z5PG7QOh caNH9tuHhqLzHh5z6fl2Y0sM3PXoRJmYnO/yzKXs= DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7FCC820849 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728657AbeLMEtw (ORCPT ); Wed, 12 Dec 2018 23:49:52 -0500 Received: from mail.kernel.org ([198.145.29.99]:42568 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727692AbeLME3f (ORCPT ); Wed, 12 Dec 2018 23:29:35 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5D79620879; Thu, 13 Dec 2018 04:29:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544675374; bh=s9jculQmF5oj+3znmtzfEGyVfsLa532XYmpOeJiVqCc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=un5WVOu8pJK8yUX+IfxftfHbXZzTujDVsfmimUhTgw5kB9LccVaFSTzO7aizsXjb2 0eFOA9pLxtenpTrpxhONHm65+A84l20JTIls0VBBCATERnOsnhFQMfYRZU12egnWFK B1gr340TbmDxd2YMBHNVSe9EFPAWoRMIduSY90cg= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Todor Tomov , Rob Clark , Sean Paul , Sasha Levin , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org Subject: [PATCH AUTOSEL 4.19 32/73] drm/msm/hdmi: Enable HPD after HDMI IRQ is set up Date: Wed, 12 Dec 2018 23:27:57 -0500 Message-Id: <20181213042838.75160-32-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181213042838.75160-1-sashal@kernel.org> References: <20181213042838.75160-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Todor Tomov [ Upstream commit ee4456359640defe3f51cc6b728bfce4bc444c9e ] SoCs that contain MDP5 have a top level wrapper called MDSS that manages locks, power and irq for the sub-blocks within it. Irq for HDMI is also routed through the MDSS. Shortly after the Hot Plug Detection (HPD) is enabled in HDMI, HDMI interrupts are recieved by the MDSS interrupt handler. However at this moment the HDMI irq is still not mapped to the MDSS irq domain so the HDMI irq handler cannot be called to process the interrupts. This leads to a flood of HDMI interrupts on CPU 0. If we are lucky to have the HDMI initialization running on a different CPU, it will eventually map the HDMI irq to MDSS irq domain, the next HDMI interrupt will be handled by the HDMI irq handler, the interrupt flood will stop and we will recover. If the HDMI initialization is running on CPU 0, then it cannot complete and there is nothing to stop the interrupt flood on CPU 0. The system is stuck. Fix this by moving the HPD enablement after the HDMI irq is mapped to the MDSS irq domain. Signed-off-by: Todor Tomov Signed-off-by: Rob Clark Signed-off-by: Sean Paul Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/hdmi/hdmi.c | 6 ++++++ drivers/gpu/drm/msm/hdmi/hdmi.h | 1 + drivers/gpu/drm/msm/hdmi/hdmi_connector.c | 10 ++-------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdmi.c index c79659ca5706..33e083f71a17 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -332,6 +332,12 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi, goto fail; } + ret = msm_hdmi_hpd_enable(hdmi->connector); + if (ret < 0) { + DRM_DEV_ERROR(&hdmi->pdev->dev, "failed to enable HPD: %d\n", ret); + goto fail; + } + encoder->bridge = hdmi->bridge; priv->bridges[priv->num_bridges++] = hdmi->bridge; diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.h b/drivers/gpu/drm/msm/hdmi/hdmi.h index accc9a61611d..5c5df6ab2a57 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.h +++ b/drivers/gpu/drm/msm/hdmi/hdmi.h @@ -245,6 +245,7 @@ void msm_hdmi_bridge_destroy(struct drm_bridge *bridge); void msm_hdmi_connector_irq(struct drm_connector *connector); struct drm_connector *msm_hdmi_connector_init(struct hdmi *hdmi); +int msm_hdmi_hpd_enable(struct drm_connector *connector); /* * i2c adapter for ddc: diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c index e9c9a0af508e..30e908dfded7 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c @@ -167,8 +167,9 @@ static void enable_hpd_clocks(struct hdmi *hdmi, bool enable) } } -static int hpd_enable(struct hdmi_connector *hdmi_connector) +int msm_hdmi_hpd_enable(struct drm_connector *connector) { + struct hdmi_connector *hdmi_connector = to_hdmi_connector(connector); struct hdmi *hdmi = hdmi_connector->hdmi; const struct hdmi_platform_config *config = hdmi->config; struct device *dev = &hdmi->pdev->dev; @@ -450,7 +451,6 @@ struct drm_connector *msm_hdmi_connector_init(struct hdmi *hdmi) { struct drm_connector *connector = NULL; struct hdmi_connector *hdmi_connector; - int ret; hdmi_connector = kzalloc(sizeof(*hdmi_connector), GFP_KERNEL); if (!hdmi_connector) @@ -471,12 +471,6 @@ struct drm_connector *msm_hdmi_connector_init(struct hdmi *hdmi) connector->interlace_allowed = 0; connector->doublescan_allowed = 0; - ret = hpd_enable(hdmi_connector); - if (ret) { - dev_err(&hdmi->pdev->dev, "failed to enable HPD: %d\n", ret); - return ERR_PTR(ret); - } - drm_connector_attach_encoder(connector, hdmi->encoder); return connector; -- 2.19.1