Received: by 2002:a05:6358:7058:b0:131:369:b2a3 with SMTP id 24csp874076rwp; Thu, 13 Jul 2023 02:27:32 -0700 (PDT) X-Google-Smtp-Source: APBJJlHcKf8bCeEL1eqAmgZ+/ql0bsFeeEhwgKUPTU2BOl5lZZQqJfWDT1dPTIre1IMjDQOaJzDe X-Received: by 2002:a17:902:d488:b0:1b5:ccd:af69 with SMTP id c8-20020a170902d48800b001b50ccdaf69mr542357plg.69.1689240452364; Thu, 13 Jul 2023 02:27:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689240452; cv=none; d=google.com; s=arc-20160816; b=VLSFL9tKiCS94Al/IU2NKbLVmr1NogdEBQ3mar59cFSqHS5taVk0msVSGzswdw7LnP UU7QtF29+e00JQdk7/2XeolfQApMzUZO0HoG36IKhvVJz6qqNXIgygMN5Wdp3MDZysQy FpOzSiAgquPthnba72kPSWiRqb/JNIdBk2n+QFAm3L9jlcz0fPwV0O7RZYArqCl+O7q+ fmg+mU2FCNsNfL26Hx/vAsb7D/TGvPQz4H60X4VPKDA3brDXJnmqkMBljFN7NHbUDzuN 1CjloBmtDr8XP4XGwvMVPilisuCJsw1OT4QRXnwuk4YJKf7xPXn8RWqxbJDKeYcc/BLN isXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=2Y9aLbmwvF4ZG8suzSgiQfMTt3u9Ub20LrNvJm4OcVI=; fh=JpmmvsKbFEtjFcPhKwAU/TS0J6xmkcPCzvp06hVht3s=; b=UWR1+KawGEz5uVDZoxHz2w2LMRKF1p7fIYeEAqgNPahI05TJz1DPaFo54g+EWY2oH/ xxnXNrlbgs1CIUKb0UiB665TqQCarycyRuYaYboNkXK54qkdSGfMp683BVSvEG307alJ F68e81X+dr4GN/zLgk5iZZMqgEmPsF2wr0Xy9NY5qaOU2mtJwwQXU6/UhJStYtU71G1F 2ZbA5wLuSzj+ihjBxvPKPGijNCl3DtzsVobABMI1rwMlhSjpgYDOAhImlq9lqT/jtNi9 qreirq4ZP+Pj+ETXJhl0i37sOcQayp6hjJatDeT3PK3NJBz4bqpO3dVQl9S6tgzDspvo 5kew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=H0d3Uw51; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e15-20020a17090301cf00b001b8a5cec6e4si5122593plh.251.2023.07.13.02.27.20; Thu, 13 Jul 2023 02:27:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=H0d3Uw51; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234105AbjGMJDZ (ORCPT + 99 others); Thu, 13 Jul 2023 05:03:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59310 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232343AbjGMJCm (ORCPT ); Thu, 13 Jul 2023 05:02:42 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E8711FD2 for ; Thu, 13 Jul 2023 02:02:04 -0700 (PDT) Received: from IcarusMOD.eternityproject.eu (2-237-20-237.ip236.fastwebnet.it [2.237.20.237]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by madras.collabora.co.uk (Postfix) with ESMTPSA id B1BD4660704A; Thu, 13 Jul 2023 10:02:01 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1689238922; bh=K9brwkEaYqYtzbZ32R7KLYRvi25K/zfmEJ6Y561Gn3g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H0d3Uw51a2h3LOs4rCB+L8MkoGwKmi+G4Ji0RsG5Alz09VjzXHLPMl/bkTh3zvum8 MRM5CwJqlm7HvLMAPSZz4ir13m4m5AopECU/1CgtkaWOQk+h00oX+N1W/O0/oZkeRt DxuNx0YgBZcH7+L9SvXZGu6Z5duVFpUJ37eyMhFVF5DE+LhET8E0CxYvIhJeOOZ6Si 8vWuLkIfgaMikxuPFWRgjcWenW0Cu5IaKH5fg2Vy6+SNVRypmGvtxDXqjxY/4JoD6A aM9pwwpbGncet02opuyfkC30ezOIEyujucBmMcfi7eugniAnRiSGJu6+dP+UzlBZKh l+wd/XZvwocsQ== From: AngeloGioacchino Del Regno To: chunkuang.hu@kernel.org Cc: p.zabel@pengutronix.de, airlied@gmail.com, daniel@ffwll.ch, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com, dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@collabora.com, wenst@chromium.org, nfraprado@collabora.com Subject: [PATCH v5 05/10] drm/mediatek: dp: Enable event interrupt only when bridge attached Date: Thu, 13 Jul 2023 11:01:47 +0200 Message-Id: <20230713090152.140060-6-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230713090152.140060-1-angelogioacchino.delregno@collabora.com> References: <20230713090152.140060-1-angelogioacchino.delregno@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It is useless and error-prone to enable the DisplayPort event interrupt before finishing to probe and install the driver, as the DP training cannot happen before the entire pipeline is correctly set up, as the interrupt handler also requires the full hardware to be initialized by mtk_dp_bridge_attach(). Anyway, depending in which state the controller is left from the bootloader, this may cause an interrupt storm and consequently hang the kernel during boot, so, avoid enabling the interrupt until we reach a clean state by adding the IRQ_NOAUTOEN flag before requesting it at probe time and manage the enablement of the ISR in the .attach() and .detach() handlers for the DP bridge. Signed-off-by: AngeloGioacchino Del Regno Tested-by: Chen-Yu Tsai --- drivers/gpu/drm/mediatek/mtk_dp.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c index b4e775e040ee..d67dbafbac8e 100644 --- a/drivers/gpu/drm/mediatek/mtk_dp.c +++ b/drivers/gpu/drm/mediatek/mtk_dp.c @@ -100,6 +100,7 @@ struct mtk_dp_efuse_fmt { struct mtk_dp { bool enabled; bool need_debounce; + int irq; u8 max_lanes; u8 max_linkrate; u8 rx_cap[DP_RECEIVER_CAP_SIZE]; @@ -2136,6 +2137,8 @@ static int mtk_dp_bridge_attach(struct drm_bridge *bridge, mtk_dp->drm_dev = bridge->dev; + irq_clear_status_flags(mtk_dp->irq, IRQ_NOAUTOEN); + enable_irq(mtk_dp->irq); mtk_dp_hwirq_enable(mtk_dp, true); return 0; @@ -2152,6 +2155,7 @@ static void mtk_dp_bridge_detach(struct drm_bridge *bridge) struct mtk_dp *mtk_dp = mtk_dp_from_bridge(bridge); mtk_dp_hwirq_enable(mtk_dp, false); + disable_irq(mtk_dp->irq); mtk_dp->drm_dev = NULL; mtk_dp_poweroff(mtk_dp); drm_dp_aux_unregister(&mtk_dp->aux); @@ -2470,7 +2474,7 @@ static int mtk_dp_probe(struct platform_device *pdev) { struct mtk_dp *mtk_dp; struct device *dev = &pdev->dev; - int ret, irq_num; + int ret; mtk_dp = devm_kzalloc(dev, sizeof(*mtk_dp), GFP_KERNEL); if (!mtk_dp) @@ -2479,9 +2483,9 @@ static int mtk_dp_probe(struct platform_device *pdev) mtk_dp->dev = dev; mtk_dp->data = (struct mtk_dp_data *)of_device_get_match_data(dev); - irq_num = platform_get_irq(pdev, 0); - if (irq_num < 0) - return dev_err_probe(dev, irq_num, + mtk_dp->irq = platform_get_irq(pdev, 0); + if (mtk_dp->irq < 0) + return dev_err_probe(dev, mtk_dp->irq, "failed to request dp irq resource\n"); mtk_dp->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 1, 0); @@ -2502,7 +2506,8 @@ static int mtk_dp_probe(struct platform_device *pdev) spin_lock_init(&mtk_dp->irq_thread_lock); - ret = devm_request_threaded_irq(dev, irq_num, mtk_dp_hpd_event, + irq_set_status_flags(mtk_dp->irq, IRQ_NOAUTOEN); + ret = devm_request_threaded_irq(dev, mtk_dp->irq, mtk_dp_hpd_event, mtk_dp_hpd_event_thread, IRQ_TYPE_LEVEL_HIGH, dev_name(dev), mtk_dp); -- 2.40.1