Message ID | 20230706095841.109315-1-angelogioacchino.delregno@collabora.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp2451822vqx; Thu, 6 Jul 2023 03:22:24 -0700 (PDT) X-Google-Smtp-Source: APBJJlE5G8Y6Qz3OOPpjROVUZ9aWet5ebv1kU7IJvFwmho045+oaC84eUXxqqJ6ktbkjPpCmRTSk X-Received: by 2002:a17:903:230e:b0:1b4:5697:d991 with SMTP id d14-20020a170903230e00b001b45697d991mr1619164plh.15.1688638944395; Thu, 06 Jul 2023 03:22:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688638944; cv=none; d=google.com; s=arc-20160816; b=FHbTyCwfqG2dmOOx2JvGSQ3vduz7zUfTiTZXIaNklJZHmDC9dAJXq5khthgiEzRk4F 0PPL7akVVCcU9S8wVjQoJTjn4IxIQnJKWY88/7I/aTFZt6EHEoFjRNEiSxvIqoJoH8J0 Lf0LbUskmDbjNSvMZu5yFw0eKCr81oyvbIpiR0A5krrzNvyVNsdHxGGhAVX/3Nb35a84 E1yUl7DtRCGywNgjn00fejqPSdkD1v9PmcLbx+CjNvDiLrwWMnFgO3k9X4GbB2h6qbaz WS+uMnntnRQT9+78fjqR+y8/vPlKc0RmTCYNxMr9fdzkUGEFfvYPOP/Z6+SJGB/RnHYr MqCw== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=pANNy/xJGcJmlXFLWNRphaV51QxiaFoMbh8h4kymSDA=; fh=BdExaeWRgtRdN2aZxQc3D/8zBdolk43jt/dpXkSLlAA=; b=oc4TAZQN22m2V4N2Yb4QAxgTvFsWsACKIu3HkfUitukqTYVv/9f7otJpK//7kL6koc P6IZr1LdNnjYvDRSEFYcLhDWJXHx9sZD/TLI388eKR180JH9JCyqlR5l1wqjHDQ5HE3P mjUejPnXIwVcsTZft0rChJ12I5thuZvrnca2qe6uSNjToRors40fuysajLM5poS/ZHVd vBnJuxEG28jmqe71fLWhafND2IQi1Gdms754tntfsAuMudwafgCxIniEPLLZcgOKGbhz ySDajdpuuFW8t1yGjJiFMUi1ydTwR0P+hQeBk7WVbUCukfj5FqmnnGDWp3EEpaQVdLqk QgGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=VrxAzq+T; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z12-20020a1709027e8c00b001b8698149fbsi916280pla.477.2023.07.06.03.22.08; Thu, 06 Jul 2023 03:22:24 -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=VrxAzq+T; 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 S231731AbjGFJ6w (ORCPT <rfc822;hadasmailinglist@gmail.com> + 99 others); Thu, 6 Jul 2023 05:58:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231466AbjGFJ6v (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 6 Jul 2023 05:58:51 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 115B7199E; Thu, 6 Jul 2023 02:58:49 -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 4D6B1660585C; Thu, 6 Jul 2023 10:58:47 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1688637528; bh=kSDkPuyPb2t/JH+C79C1IUs7iSlEMd5QU2QZxBnRzjg=; h=From:To:Cc:Subject:Date:From; b=VrxAzq+T6v6gG1CSsHla+ctqoqAOgTx+nHsxbn/BLDMVwG7eC/KC9SJCSyNrgjB2B W+IZJOwKW1xyggoG3Wq6WqwMzwF083PAVWJqgiAsRTlJ3Zhv3N02Jr0qBhyaxpprYy uEqMxZhlfsr/7rkAmOTeK8rusLo17P9hZLmiXtIbQ8+ntt62CS4GU8CbK+uiIT7QcU +Id9PIfe9Egl5JugoipJ/55dfncmt2osxQMtUet281ZSLzxisQ0FwJ0VhpkcBfyO3u JRmt++euLLmnmJopWNxOgMaI6FHe1KCwkyQh2cyS/Xhcl5RJd20q9GMYkIZyYAAuTC 48m6kplJGwZmw== From: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> To: matthias.bgg@gmail.com Cc: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, yong.wu@mediatek.com, tinghan.shen@mediatek.com, weiyi.lu@mediatek.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Subject: [PATCH] arm64: dts: mediatek: mt8195: Fix PM suspend/resume with venc clocks Date: Thu, 6 Jul 2023 11:58:41 +0200 Message-Id: <20230706095841.109315-1-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.40.1 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,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: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770666269871445239?= X-GMAIL-MSGID: =?utf-8?q?1770666269871445239?= |
Series |
arm64: dts: mediatek: mt8195: Fix PM suspend/resume with venc clocks
|
|
Commit Message
AngeloGioacchino Del Regno
July 6, 2023, 9:58 a.m. UTC
Before suspending the LARBs we're making sure that any operation is
done: this never happens because we are unexpectedly unclocking the
LARB20 before executing the suspend handler for the MediaTek Smart
Multimedia Interface (SMI) and the cause of this is incorrect clocks
on this LARB.
Fix this issue by changing the Local Arbiter 20 (used by the video
encoder secondary core) apb clock to CLK_VENC_CORE1_VENC;
furthermore, in order to make sure that both the PM resume and video
encoder operation is stable, add the CLK_VENC(_CORE1)_LARB clock to
the VENC (main core) and VENC_CORE1 power domains, as this IP cannot
communicate with the rest of the system (the AP) without local
arbiter clocks being operational.
Fixes: 3b5838d1d82e ("arm64: dts: mt8195: Add iommu and smi nodes")
Fixes: 2b515194bf0c ("arm64: dts: mt8195: Add power domains controller")
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
arch/arm64/boot/dts/mediatek/mt8195.dtsi | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
Comments
On 06/07/2023 11:58, AngeloGioacchino Del Regno wrote: > Before suspending the LARBs we're making sure that any operation is > done: this never happens because we are unexpectedly unclocking the > LARB20 before executing the suspend handler for the MediaTek Smart > Multimedia Interface (SMI) and the cause of this is incorrect clocks > on this LARB. > > Fix this issue by changing the Local Arbiter 20 (used by the video > encoder secondary core) apb clock to CLK_VENC_CORE1_VENC; > furthermore, in order to make sure that both the PM resume and video > encoder operation is stable, add the CLK_VENC(_CORE1)_LARB clock to > the VENC (main core) and VENC_CORE1 power domains, as this IP cannot > communicate with the rest of the system (the AP) without local > arbiter clocks being operational. Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
On Thu, Jul 6, 2023 at 5:59 PM AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> wrote: > > Before suspending the LARBs we're making sure that any operation is > done: this never happens because we are unexpectedly unclocking the > LARB20 before executing the suspend handler for the MediaTek Smart > Multimedia Interface (SMI) and the cause of this is incorrect clocks > on this LARB. > > Fix this issue by changing the Local Arbiter 20 (used by the video > encoder secondary core) apb clock to CLK_VENC_CORE1_VENC; > furthermore, in order to make sure that both the PM resume and video > encoder operation is stable, add the CLK_VENC(_CORE1)_LARB clock to > the VENC (main core) and VENC_CORE1 power domains, as this IP cannot > communicate with the rest of the system (the AP) without local > arbiter clocks being operational. Somehow I feel like this is papering over some dependency issue in Linux. > Fixes: 3b5838d1d82e ("arm64: dts: mt8195: Add iommu and smi nodes") > Fixes: 2b515194bf0c ("arm64: dts: mt8195: Add power domains controller") > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > arch/arm64/boot/dts/mediatek/mt8195.dtsi | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi > index 95bd058d6083..5c670fce1e47 100644 > --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi > +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi > @@ -626,6 +626,8 @@ power-domain@MT8195_POWER_DOMAIN_VDEC1 { > > power-domain@MT8195_POWER_DOMAIN_VENC_CORE1 { > reg = <MT8195_POWER_DOMAIN_VENC_CORE1>; > + clocks = <&vencsys_core1 CLK_VENC_CORE1_LARB>; > + clock-names = "venc1-larb"; > mediatek,infracfg = <&infracfg_ao>; > #power-domain-cells = <0>; > }; > @@ -688,6 +690,8 @@ power-domain@MT8195_POWER_DOMAIN_VDEC2 { > > power-domain@MT8195_POWER_DOMAIN_VENC { > reg = <MT8195_POWER_DOMAIN_VENC>; > + clocks = <&vencsys CLK_VENC_LARB>; > + clock-names = "venc0-larb"; > mediatek,infracfg = <&infracfg_ao>; > #power-domain-cells = <0>; > }; > @@ -3094,7 +3098,7 @@ larb20: larb@1b010000 { > reg = <0 0x1b010000 0 0x1000>; > mediatek,larb-id = <20>; > mediatek,smi = <&smi_common_vpp>; > - clocks = <&vencsys_core1 CLK_VENC_CORE1_LARB>, > + clocks = <&vencsys_core1 CLK_VENC_CORE1_VENC>, > <&vencsys_core1 CLK_VENC_CORE1_GALS>, > <&vppsys0 CLK_VPP0_GALS_VDO0_VDO1_VENCSYS_CORE1>; > clock-names = "apb", "smi", "gals"; > -- > 2.40.1 > >
Il 07/07/23 07:06, Chen-Yu Tsai ha scritto: > On Thu, Jul 6, 2023 at 5:59 PM AngeloGioacchino Del Regno > <angelogioacchino.delregno@collabora.com> wrote: >> >> Before suspending the LARBs we're making sure that any operation is >> done: this never happens because we are unexpectedly unclocking the >> LARB20 before executing the suspend handler for the MediaTek Smart >> Multimedia Interface (SMI) and the cause of this is incorrect clocks >> on this LARB. >> >> Fix this issue by changing the Local Arbiter 20 (used by the video >> encoder secondary core) apb clock to CLK_VENC_CORE1_VENC; >> furthermore, in order to make sure that both the PM resume and video >> encoder operation is stable, add the CLK_VENC(_CORE1)_LARB clock to >> the VENC (main core) and VENC_CORE1 power domains, as this IP cannot >> communicate with the rest of the system (the AP) without local >> arbiter clocks being operational. > > Somehow I feel like this is papering over some dependency issue in Linux. > It felt the same here, but then, if you disable the video encoder driver entirely (or even both enc/dec drivers), you'll still get issues with the LARB20 timing out on the SLP_PROT_RDY check, as there's something in queue going through that larb, probably from something done by the bootloader before booting Linux. Note that I'm pointing my finger to the bootloader because - again - even disabling the venc entirely produces the same issue, and if you disable probing the LARB20 you will anyway get sleep issues (wakes up immediately after going to sleep). That said, there is another possible solution to that (but even then, I think that we still need those clock assignments that I've done here), which is to implement the SMI power domains (mtcmos...): we'd be saving *all smi registers*, resetting an entire SMI ctx with a poweroff, powering back on and restoring all registers *but* larb20... at least that's the only solution that I've seen downstream (android kernels). ...and that's why I believe that this commit is correct. Of course, if there's something that I'm underestimating here, I'd be glad to understand. Cheers, Angelo >> Fixes: 3b5838d1d82e ("arm64: dts: mt8195: Add iommu and smi nodes") >> Fixes: 2b515194bf0c ("arm64: dts: mt8195: Add power domains controller") >> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> >> --- >> arch/arm64/boot/dts/mediatek/mt8195.dtsi | 6 +++++- >> 1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi >> index 95bd058d6083..5c670fce1e47 100644 >> --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi >> +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi >> @@ -626,6 +626,8 @@ power-domain@MT8195_POWER_DOMAIN_VDEC1 { >> >> power-domain@MT8195_POWER_DOMAIN_VENC_CORE1 { >> reg = <MT8195_POWER_DOMAIN_VENC_CORE1>; >> + clocks = <&vencsys_core1 CLK_VENC_CORE1_LARB>; >> + clock-names = "venc1-larb"; >> mediatek,infracfg = <&infracfg_ao>; >> #power-domain-cells = <0>; >> }; >> @@ -688,6 +690,8 @@ power-domain@MT8195_POWER_DOMAIN_VDEC2 { >> >> power-domain@MT8195_POWER_DOMAIN_VENC { >> reg = <MT8195_POWER_DOMAIN_VENC>; >> + clocks = <&vencsys CLK_VENC_LARB>; >> + clock-names = "venc0-larb"; >> mediatek,infracfg = <&infracfg_ao>; >> #power-domain-cells = <0>; >> }; >> @@ -3094,7 +3098,7 @@ larb20: larb@1b010000 { >> reg = <0 0x1b010000 0 0x1000>; >> mediatek,larb-id = <20>; >> mediatek,smi = <&smi_common_vpp>; >> - clocks = <&vencsys_core1 CLK_VENC_CORE1_LARB>, >> + clocks = <&vencsys_core1 CLK_VENC_CORE1_VENC>, >> <&vencsys_core1 CLK_VENC_CORE1_GALS>, >> <&vppsys0 CLK_VPP0_GALS_VDO0_VDO1_VENCSYS_CORE1>; >> clock-names = "apb", "smi", "gals"; >> -- >> 2.40.1 >> >> >
diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi index 95bd058d6083..5c670fce1e47 100644 --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi @@ -626,6 +626,8 @@ power-domain@MT8195_POWER_DOMAIN_VDEC1 { power-domain@MT8195_POWER_DOMAIN_VENC_CORE1 { reg = <MT8195_POWER_DOMAIN_VENC_CORE1>; + clocks = <&vencsys_core1 CLK_VENC_CORE1_LARB>; + clock-names = "venc1-larb"; mediatek,infracfg = <&infracfg_ao>; #power-domain-cells = <0>; }; @@ -688,6 +690,8 @@ power-domain@MT8195_POWER_DOMAIN_VDEC2 { power-domain@MT8195_POWER_DOMAIN_VENC { reg = <MT8195_POWER_DOMAIN_VENC>; + clocks = <&vencsys CLK_VENC_LARB>; + clock-names = "venc0-larb"; mediatek,infracfg = <&infracfg_ao>; #power-domain-cells = <0>; }; @@ -3094,7 +3098,7 @@ larb20: larb@1b010000 { reg = <0 0x1b010000 0 0x1000>; mediatek,larb-id = <20>; mediatek,smi = <&smi_common_vpp>; - clocks = <&vencsys_core1 CLK_VENC_CORE1_LARB>, + clocks = <&vencsys_core1 CLK_VENC_CORE1_VENC>, <&vencsys_core1 CLK_VENC_CORE1_GALS>, <&vppsys0 CLK_VPP0_GALS_VDO0_VDO1_VENCSYS_CORE1>; clock-names = "apb", "smi", "gals";