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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D0201C43334 for ; Tue, 12 Jul 2022 11:35:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZBsE/UKf1Rfzhy7VZPgyHR063cZaue3/MHThedeFx4U=; b=QlkqazlfQ3MrWk FLR73jeG0v+lK+v4qTpsrwZtbKpYtP0euFCZB3CvR7EQRoOqPUTEptW52EqOoDMDqwzXtiPD9oX/t DL0D26JgedZ3f1reRkg6lrmQrtNj8Lh9gEd5Y46LfPv7Mkv9Gx8XzKGv5ZyJu2zlajdQBsest2E1p Esgaanp5hvZjaSIAl5fDbyjs9BHbVmK5CmHaoC9YwanRv6nuD+NiVKnJgGhgykX/BDBIp+CKm30jM bhEecaInz90aNpL+RqzCc7fR3unGgYVp95IparahSq0niaJ9foUPzARLIqH/7ZhghzbzWPJYJGdT0 5ARRpfnwSzQKTGeKNHgw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oBE9n-00AUv3-Ih; Tue, 12 Jul 2022 11:34:23 +0000 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oBE9d-00AUqY-D3 for linux-arm-kernel@lists.infradead.org; Tue, 12 Jul 2022 11:34:14 +0000 Received: by mail-pg1-x52a.google.com with SMTP id r186so84248pgr.2 for ; Tue, 12 Jul 2022 04:34:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2kOxzZkRxT+SCDc/hWVbeiMQchYapmJ5tgcoSnW9NfA=; b=K38rRvmuZwuHeV6S3mbZFNYaUh+iQnDJiTeHryLUFX6A4Sa361BXHcjCCufV/u/0tQ S1CjpD8Eo1dtBiG30ORyACtnbkIZT0m1pIzantyWMCy57+O0mrKWAp5FQTOEtuV8Jr2/ DNPcYFr3kIRGXgphvzGSfVUyoVRNxXEsBdNSk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2kOxzZkRxT+SCDc/hWVbeiMQchYapmJ5tgcoSnW9NfA=; b=padDys+NNg6cEulsS8ZexqQcsKSqrLk67rCD/b1pRxc1T9NVBcP6Y6s/vbGX1oo83j j8viSBawaVYY4HokcVMdT7/HsdeFXw6OaY+6as137/tkeTHaT/Wu6W+/EbSLy39xQ4m3 GqRBUo9OQsae6ZfXiQgp/xjGNFxsEvIX7lkbK1RZ3IV3kf/l5mJH/ZFZFMuxNnNISLzn VKePGGydZDUHrPaX+7visUq6eDzGhcEuYFYSVTzgSNhA7AUmTc9iKgjPzyogMR9jmoXR jt2WeOf4Vaf6ap23JxXPCpBHvqTAKQajFDfxKwJJ50HOYaFwTuiwnGIlVuZnpzKUHPmo vAKg== X-Gm-Message-State: AJIora9SlNOlcNyYkm++ui/yt0dN0lhVTWouEhkO14v33sghSaGsihwc 3NFy1X4QfcmMkHeiXe53X9jxrw== X-Google-Smtp-Source: AGRyM1tn283Rt4KAICZxZjkCqC4Dqisu5OgjAM1jSZZTEhExCZIzgXS5foi0gjTiljvGWvcroMLYMg== X-Received: by 2002:a65:6b94:0:b0:3fb:16f4:3620 with SMTP id d20-20020a656b94000000b003fb16f43620mr20278951pgw.464.1657625650461; Tue, 12 Jul 2022 04:34:10 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2401:fa00:1:10:d1a9:ca7d:e86f:cf6f]) by smtp.gmail.com with ESMTPSA id 80-20020a621653000000b0052890d61628sm6537967pfw.60.2022.07.12.04.34.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jul 2022 04:34:09 -0700 (PDT) From: Chen-Yu Tsai To: Michael Turquette , Stephen Boyd Cc: Chen-Yu Tsai , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, AngeloGioacchino Del Regno , =?UTF-8?q?N=C3=ADcolas=20F=2E=20R=2E=20A=2E=20Prado?= Subject: [PATCH 1/2] clk: core: Honor CLK_OPS_PARENT_ENABLE for clk gate ops Date: Tue, 12 Jul 2022 19:34:01 +0800 Message-Id: <20220712113402.871838-2-wenst@chromium.org> X-Mailer: git-send-email 2.37.0.144.g8ac04bfd2-goog In-Reply-To: <20220712113402.871838-1-wenst@chromium.org> References: <20220712113402.871838-1-wenst@chromium.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220712_043413_481342_5A09CB8E X-CRM114-Status: GOOD ( 16.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org In the previous commits that added CLK_OPS_PARENT_ENABLE, support for this flag was only added to rate change operations (rate setting and reparent) and disabling unused subtree. It was not added to the clock gate related operations. Any hardware driver that needs it for these operations will either see bogus results, or worse, hang. This has been seen on MT8192 and MT8195, where the imp_ii2_* clk drivers set this, but dumping debugfs clk_summary would cause it to hang. Fixes: fc8726a2c021 ("clk: core: support clocks which requires parents enable (part 2)") Fixes: a4b3518d146f ("clk: core: support clocks which requires parents enable (part 1)") Signed-off-by: Chen-Yu Tsai --- I'm guessing Stephen might have some things to say about adding forward declarations. Moving code around would make the patch larger though. drivers/clk/clk.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 7fc191c15507..b3de636eec84 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -215,6 +215,9 @@ static bool clk_core_is_prepared(struct clk_core *core) return ret; } +static int clk_core_prepare_enable(struct clk_core *core); +static void clk_core_disable_unprepare(struct clk_core *core); + static bool clk_core_is_enabled(struct clk_core *core) { bool ret = false; @@ -226,6 +229,9 @@ static bool clk_core_is_enabled(struct clk_core *core) if (!core->ops->is_enabled) return core->enable_count; + if (core->flags & CLK_OPS_PARENT_ENABLE) + clk_core_prepare_enable(core->parent); + /* * Check if clock controller's device is runtime active before * calling .is_enabled callback. If not, assume that clock is @@ -249,6 +255,9 @@ static bool clk_core_is_enabled(struct clk_core *core) if (core->rpm_enabled) pm_runtime_put(core->dev); + if (core->flags & CLK_OPS_PARENT_ENABLE) + clk_core_disable_unprepare(core->parent); + return ret; } @@ -812,6 +821,9 @@ int clk_rate_exclusive_get(struct clk *clk) } EXPORT_SYMBOL_GPL(clk_rate_exclusive_get); +static int clk_core_enable(struct clk_core *core); +static void clk_core_disable(struct clk_core *core); + static void clk_core_unprepare(struct clk_core *core) { lockdep_assert_held(&prepare_lock); @@ -835,6 +847,9 @@ static void clk_core_unprepare(struct clk_core *core) WARN(core->enable_count > 0, "Unpreparing enabled %s\n", core->name); + if (core->flags & CLK_OPS_PARENT_ENABLE) + clk_core_enable(core->parent); + trace_clk_unprepare(core); if (core->ops->unprepare) @@ -843,6 +858,9 @@ static void clk_core_unprepare(struct clk_core *core) clk_pm_runtime_put(core); trace_clk_unprepare_complete(core); + + if (core->flags & CLK_OPS_PARENT_ENABLE) + clk_core_disable(core->parent); clk_core_unprepare(core->parent); } @@ -891,6 +909,9 @@ static int clk_core_prepare(struct clk_core *core) if (ret) goto runtime_put; + if (core->flags & CLK_OPS_PARENT_ENABLE) + clk_core_enable(core->parent); + trace_clk_prepare(core); if (core->ops->prepare) @@ -898,6 +919,9 @@ static int clk_core_prepare(struct clk_core *core) trace_clk_prepare_complete(core); + if (core->flags & CLK_OPS_PARENT_ENABLE) + clk_core_disable(core->parent); + if (ret) goto unprepare; } -- 2.37.0.144.g8ac04bfd2-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel