From patchwork Sun Sep 24 20:00:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 114150 Delivered-To: patch@linaro.org Received: by 10.140.106.117 with SMTP id d108csp1854670qgf; Sun, 24 Sep 2017 13:01:34 -0700 (PDT) X-Received: by 10.99.96.75 with SMTP id u72mr5369335pgb.178.1506283294778; Sun, 24 Sep 2017 13:01:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506283294; cv=none; d=google.com; s=arc-20160816; b=VPL4Oge3TdJYxvOsXoujBkUhKthyQt77ZOTYzOUTTbGxrf4uFD8Ot1Amf1tlgukUlM FBcYdSq3U352rcrPR/Zhww2HNv8SHPl3YGOed4BLlncjhWJKLz9CYPhjgbllSN4LLMyo 17aubzTxvcm51I30ZS3cQ55tzcfqbuXDAcf/PQBMfonVBIm2JpXJdKhQheZ3AAHfLNAa Db+nyYwVuOfRA4h5OTVOZLqwR2AxY4zdyYu94JlUFYhSX0ZENDo7+5P8807iEtyWF3SL /LFt4JA2psHOg09DZwLS/sCV+PWmr6s0qko2Gn11tXTOQiRiiUfZQ/FcF7xOBO/hpZ0v uSBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=/7Csb6egYLxWHN7fH1w9p0UP7+fYBSJZSIfCHGL15tg=; b=QdxQ6Mb17Sf2YQSfwXLidOtSklPybwf9Xwor3P3Byl2pou7rHhYmxbOKn/TkPNN4le LGe0tQ3o10+SqNyNBIFnWDEUBWu38NZWArD0BTXUdgON4b+vvqULxNrRvlMJUFvYi05Y pd9xFbIn0LJIHtJmV5tgByWtcJCfEaJisFyrxoodjncmhnoGA0YOWcrU4gZEA/N5tv56 C7/VXrr/Gd7vsjvksWHl0iaJlhmO+6aOmLEzHgq/sCK9jDbF9WUwxrqS3rntcpdSz5V6 RO/vQunotd2wtuxprubCDwF5+1+hFzNB5gwiNYkJrF+iwY6fWl44WUr1YtF9u93XZme4 tz9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=O5E/bx9J; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m8si1525478pgp.214.2017.09.24.13.01.34; Sun, 24 Sep 2017 13:01:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=O5E/bx9J; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753066AbdIXUBc (ORCPT + 26 others); Sun, 24 Sep 2017 16:01:32 -0400 Received: from mail-wr0-f175.google.com ([209.85.128.175]:49209 "EHLO mail-wr0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752921AbdIXUAr (ORCPT ); Sun, 24 Sep 2017 16:00:47 -0400 Received: by mail-wr0-f175.google.com with SMTP id u96so4612012wrb.6 for ; Sun, 24 Sep 2017 13:00:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/7Csb6egYLxWHN7fH1w9p0UP7+fYBSJZSIfCHGL15tg=; b=O5E/bx9JK1h4zfmFDXACW8R70rFxhBcs5kOrdAkbI7JowgCtSEOpTYYxFARQCHju6C hb5bMbpczwr11I7ICSgs48aue4yIWfaNfTcdNFPgQe7DCz07KnxdQVc1MBKvutRPr5W2 52+xkjKlNJf0Im9pLtj9uQqXLIqlxwp3efHHFenLwmdXdRf2vSOe9OBbA27O4yLerGhT m2AlnAoL6b4ihLeoqafk5XdKyD5hN+ZUxQyf+/ujb2RtVE6rHRoKho0MWOXQQ22G2Q32 TFZDpe8GSyrVCKVhSW4jtoFl7/wwJDiPQuUxzPbhR3vCtnZtQSvylzkC3XvXtd6lEqmA TdUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=/7Csb6egYLxWHN7fH1w9p0UP7+fYBSJZSIfCHGL15tg=; b=Lbg8O03VxNeNOmLp9zPk0U4rwzAy2B0zUevfe7hr3nwHLG3DPAy2ibVdvEWq4vWRBu +2tvkC4UbIR0GUB9Z6Xrfe0yoHqO2Ji0TKTkOEEJI/BkjzOc1ozX87wFrICyUPCJ2wvV FiyV/J3j1bz/B/l0mqAltPvzLOFGoijef9hHzvKfYdv6hm9ak+87azsUkq2EyYxkmjjd 2PqEIUQkWllH9F1KT97r1cEHKrKN4ZDMpyiXi+GrtQLucmkEnIu2tebSTrTFHORMoC9f ZedhnJ0jcSACseoJYb0AFUE0jAjHkP7afXUqv4t3KrbAu9cHpu1XSJWf1RnUiP7Cc++N h+/Q== X-Gm-Message-State: AHPjjUhPJ1bQz0fbRenfUtbkBONCUpUxBJU1IF3XBj5DB6gL7iYGilIW yDJFGvYyxmfgHX8Y33igjYrhsw== X-Google-Smtp-Source: AOwi7QAYteOyKbb1dXezK4tlPIM6X/lY0Ct9qyJ4mv7VyiNp2pYERM9b+sQzqS5UdqVIaaOLa+tL0g== X-Received: by 10.223.182.71 with SMTP id i7mr4012903wre.43.1506283246380; Sun, 24 Sep 2017 13:00:46 -0700 (PDT) Received: from localhost.localdomain (cag06-3-82-243-161-21.fbx.proxad.net. [82.243.161.21]) by smtp.googlemail.com with ESMTPSA id j5sm6786144wmg.8.2017.09.24.13.00.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 24 Sep 2017 13:00:45 -0700 (PDT) From: Jerome Brunet To: Stephen Boyd , Michael Turquette Cc: Jerome Brunet , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Russell King , Linus Walleij , Quentin Schulz , Kevin Hilman Subject: [PATCH v4 08/10] clk: fix CLK_SET_RATE_GATE with clock rate protection Date: Sun, 24 Sep 2017 22:00:28 +0200 Message-Id: <20170924200030.6227-9-jbrunet@baylibre.com> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170924200030.6227-1-jbrunet@baylibre.com> References: <20170924200030.6227-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Using clock rate protection, we can now enforce CLK_SET_RATE_GATE along the clock tree Acked-by: Linus Walleij Tested-by: Quentin Schulz Signed-off-by: Jerome Brunet --- drivers/clk/clk.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) -- 2.13.5 diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 4693d5e20327..f990ef127a83 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -552,6 +552,9 @@ static void clk_core_unprepare(struct clk_core *core) if (WARN_ON(core->prepare_count == 1 && core->flags & CLK_IS_CRITICAL)) return; + if (core->flags & CLK_SET_RATE_GATE) + clk_core_rate_unprotect(core); + if (--core->prepare_count > 0) return; @@ -622,6 +625,16 @@ static int clk_core_prepare(struct clk_core *core) core->prepare_count++; + /* + * CLK_SET_RATE_GATE is a special case of clock protection + * Instead of a consumer claiming exclusive rate control, it is + * actually the provider which prevents any consumer from making any + * operation which could result in a rate change or rate glitch while + * the clock is prepared. + */ + if (core->flags & CLK_SET_RATE_GATE) + clk_core_rate_protect(core); + return 0; } @@ -1703,9 +1716,6 @@ static int clk_core_set_rate_nolock(struct clk_core *core, if (clk_core_rate_is_protected(core)) return -EBUSY; - if ((core->flags & CLK_SET_RATE_GATE) && core->prepare_count) - return -EBUSY; - /* calculate new rates and get the topmost changed clock */ top = clk_calc_new_rates(core, req_rate); if (!top)