From patchwork Tue Jun 19 13:40:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 139124 Delivered-To: patch@linaro.org Received: by 2002:a2e:970d:0:0:0:0:0 with SMTP id r13-v6csp5223443lji; Tue, 19 Jun 2018 06:41:27 -0700 (PDT) X-Google-Smtp-Source: ADUXVKL53BM45O0flAgH8OcXQRbXfkFP7GplbGbCRvH09pBI+7yJ560/IYERIvX2/jttbbs+GG/E X-Received: by 2002:a65:5944:: with SMTP id g4-v6mr15155442pgu.317.1529415687626; Tue, 19 Jun 2018 06:41:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529415687; cv=none; d=google.com; s=arc-20160816; b=i4hryU2gj6TUAoGkd5TqCceG5hsk5s8oG+eqbCw5M5zIsP0yhIkgyDgluUgIqcTpr5 vQLZFTM4Nnt+BONkokt33cIS0h8Zu0cVe7Ebz+6ha9pBEEWhtLar9YAizYoXCCpDdXKo /26ZxZa56+nhH86BLrNiPTxauz5uVQkhsQ9XHprAuyA6gZI9CF4QuhLeMfMgQwrKhbtD 7V5+wai4OOrRsJWEdAop4Mgh/Pd/SqU0FChPdBDBXta1BJSlRJr7e+iu+SFOLRco6uGK 6kle6tZiIi9KeewCoLN00/llc/pWH3BTiT4rVYq8SGYxxnZ3kM0BdP2OnFmI16R1zw9e MzYw== 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=quzDqe0zMbz+Nefi3/9iRHz8PJBtYJfd8nD3RFDa+BQ=; b=zP74jCx8Nr1A/nUeEw03QrCca+BfdZn5Y99qgbETBBNrNICNXkiFBWo1COmyyOkVvc 4Saz7YK7IN2TDl0LOxTqSpWwBgyMcWNyqLOSiKrnRAO+SAg8pPqz9DhhumhDg5R7nGTj r2b26QVWYGQl/j9MGsCfSlYLN0FPDRlGlmb7keUnTdNDiiQRxNLGWLNnYyfb8z6/4smN gOXcaDAN465+/Qx3w0eeySpQaAi1PgmuapJKGRRLMGvRI21VmPIuRHTMpw0N3+BtQIih YdfloQIwny/QksNIP4FYipF5Kle1S4yLdZChLZM4Ip5CKzKoCsR7SQ5sdyU579rNZhG8 RT7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=rc06VPCd; 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 g33-v6si18557343plb.297.2018.06.19.06.41.27; Tue, 19 Jun 2018 06:41:27 -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=rc06VPCd; 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 S937782AbeFSNlZ (ORCPT + 30 others); Tue, 19 Jun 2018 09:41:25 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:53530 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S937650AbeFSNlD (ORCPT ); Tue, 19 Jun 2018 09:41:03 -0400 Received: by mail-wm0-f65.google.com with SMTP id x6-v6so457994wmc.3 for ; Tue, 19 Jun 2018 06:41:03 -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=quzDqe0zMbz+Nefi3/9iRHz8PJBtYJfd8nD3RFDa+BQ=; b=rc06VPCdOBMp+2spCQJlK2YdcmFFqjAPo3EG0xpO9nfMEpFj/RZygJKvSO5wLeCa1E cSKbI9CRR8UJrwayiXJX/cE5vi6DhHJK9LUJw8JANV1FvX4nBUO+kSIgR+ixL5YzHq+a OLrhny0njsrkEYdcUXj8jTPL6BPRjt7ymYsA0yXa0v1MlErMU4KQcG7OtjurIzYsGbn7 40LbEJqQvnUDkvUJ8to/Y+Dr+sqQmK7OCQGqDihRhtDktrPAzyeNRac4VZ9Z1RsFcAGc ba0eMkPwwtjTzhw4G9zEDaquU/pa0sGp8XlPEQHxvsfwx9QSPQggRyJyROimaZcOMRwy ROwA== 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=quzDqe0zMbz+Nefi3/9iRHz8PJBtYJfd8nD3RFDa+BQ=; b=ijMaPDTYUdAZC0zixjMZXNaVia71lZcxIdqawRV/fPYf149m9jNSqz82HTLT++d2o0 wymI8MMUsWLH9FhekNspG6S635GYGuxJaG6otoKLrthuXlTujZ+jlGz7KkzI2wLFJIrx wVHhKMTrNHcgymr8+zJcNJpgCxJVNKidHMUY6ceKNMtOMCYAO+QcgBoI6di4Q7uw4gEg EwxgDdtgeGrCUMy2PxTxSpheyBS6njLfF7CEv58xp3rmQP6bTNA3lRvaxPaxm7XVZBkp SoF8qEg/XsfDURSvnpeO+ONlUTxTy22yTCPFdFudljBLdRFH69VZ3Fq3mOdS7M2jzI8J Xj6g== X-Gm-Message-State: APt69E0v1merrRadAVx8kChPXti0C5QCG51Ey04E9YSGe6Pup5cZH+iZ M4VV0jOEJ65h+4VN/ypZaD9IKA== X-Received: by 2002:a1c:d388:: with SMTP id k130-v6mr11315026wmg.66.1529415662414; Tue, 19 Jun 2018 06:41:02 -0700 (PDT) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id t10-v6sm17196154wrq.74.2018.06.19.06.41.01 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 19 Jun 2018 06:41:01 -0700 (PDT) From: Jerome Brunet To: Michael Turquette , Stephen Boyd Cc: Jerome Brunet , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-soc@vger.kernel.org, David Brown , Andy Gross , Linus Walleij , Quentin Schulz , Maxime Ripard Subject: [PATCH 1/2] clk: qcom: drop CLK_SET_RATE_GATE from sdc clocks Date: Tue, 19 Jun 2018 15:40:50 +0200 Message-Id: <20180619134051.16726-2-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180619134051.16726-1-jbrunet@baylibre.com> References: <20180619134051.16726-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org the mmci driver (drivers/mmc/host/mmci.c) does the following sequence: * clk_prepare_enable() * clk_set_rate() on SDCx_clk which is a children of SDCx_src. SDCx_src has CLK_SET_RATE_GATE so this sequence should not be allowed but this was not enforced. IOW, the flag is ignored. Dropping the flag won't change anything to the current behaviour of the platform. CLK_SET_RATE_GATE is being fixed and enforced now. If the flag was kept, the mmci driver would receive -EBUSY when calling clk_set_rate() Signed-off-by: Jerome Brunet --- drivers/clk/qcom/gcc-ipq806x.c | 3 --- drivers/clk/qcom/gcc-mdm9615.c | 2 -- drivers/clk/qcom/gcc-msm8660.c | 5 ----- drivers/clk/qcom/gcc-msm8960.c | 5 ----- 4 files changed, 15 deletions(-) -- 2.14.3 diff --git a/drivers/clk/qcom/gcc-ipq806x.c b/drivers/clk/qcom/gcc-ipq806x.c index 28eb200d0f1e..5f61225657ab 100644 --- a/drivers/clk/qcom/gcc-ipq806x.c +++ b/drivers/clk/qcom/gcc-ipq806x.c @@ -1220,7 +1220,6 @@ static struct clk_rcg sdc1_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1269,7 +1268,6 @@ static struct clk_rcg sdc3_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1353,7 +1351,6 @@ static struct clk_rcg tsif_ref_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; diff --git a/drivers/clk/qcom/gcc-mdm9615.c b/drivers/clk/qcom/gcc-mdm9615.c index b99dd406e907..849046fbed6d 100644 --- a/drivers/clk/qcom/gcc-mdm9615.c +++ b/drivers/clk/qcom/gcc-mdm9615.c @@ -947,7 +947,6 @@ static struct clk_rcg sdc1_src = { .parent_names = gcc_cxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -996,7 +995,6 @@ static struct clk_rcg sdc2_src = { .parent_names = gcc_cxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; diff --git a/drivers/clk/qcom/gcc-msm8660.c b/drivers/clk/qcom/gcc-msm8660.c index c347a0d44bc8..7e930e25c79f 100644 --- a/drivers/clk/qcom/gcc-msm8660.c +++ b/drivers/clk/qcom/gcc-msm8660.c @@ -1558,7 +1558,6 @@ static struct clk_rcg sdc1_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1607,7 +1606,6 @@ static struct clk_rcg sdc2_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1656,7 +1654,6 @@ static struct clk_rcg sdc3_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1705,7 +1702,6 @@ static struct clk_rcg sdc4_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1754,7 +1750,6 @@ static struct clk_rcg sdc5_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; diff --git a/drivers/clk/qcom/gcc-msm8960.c b/drivers/clk/qcom/gcc-msm8960.c index eb551c75fba6..fd495e0471bb 100644 --- a/drivers/clk/qcom/gcc-msm8960.c +++ b/drivers/clk/qcom/gcc-msm8960.c @@ -1628,7 +1628,6 @@ static struct clk_rcg sdc1_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1677,7 +1676,6 @@ static struct clk_rcg sdc2_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1726,7 +1724,6 @@ static struct clk_rcg sdc3_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1775,7 +1772,6 @@ static struct clk_rcg sdc4_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; @@ -1824,7 +1820,6 @@ static struct clk_rcg sdc5_src = { .parent_names = gcc_pxo_pll8, .num_parents = 2, .ops = &clk_rcg_ops, - .flags = CLK_SET_RATE_GATE, }, } }; From patchwork Tue Jun 19 13:40:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 139123 Delivered-To: patch@linaro.org Received: by 2002:a2e:970d:0:0:0:0:0 with SMTP id r13-v6csp5223221lji; Tue, 19 Jun 2018 06:41:13 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLOhxINTAxeYJJREjg0OpBUV/XASSPEWBiPc0z/yLmpd01hhHGxQ76TDH7Cav4W1MNjoAUQ X-Received: by 2002:a17:902:7c84:: with SMTP id y4-v6mr18715408pll.262.1529415673696; Tue, 19 Jun 2018 06:41:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529415673; cv=none; d=google.com; s=arc-20160816; b=pY/JTiUf6T0OnNK5AtICaRUKko8GOFQTALEIIBDZ1fWzfSG6qkplDiOlXNqZb2vKPl F/FjcsWeJUPgw4wa411Jw2J6YmmdsdOvIIqq5ruzBxvNBedOTrldfkQga1+CTfn59o+X LTSrpTrF39IfglklX+Elxwl8MGtMzEzhoufiyfv3GkBiw6ptnivOLGmrhtVGS5H7N1tg wxxs5VVwB4K6N16Vo+emHZJKLPQ75lbTT4eTZf8smyiRmH06I2iHjVZ2xtI+NvPzWBWM Asx2hM7y01TVzlXHBk4vX0ydz7IuvhI72hvnE89cNxqV4jdD6uCE4ZiTpox2fFBCgi6J LT2A== 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=O9CgGsxjPmXSJzKHBcIzvkjp9vRQY5ar1a5/jpyGPWw=; b=njbDMR5UYpasohCr9TrkdKsK4HS7FHZ2TYfMV8BGoRDNsoZ+uiOT0bfh0vHtraPW6x u9m9T+tO/nSt3QHsi/3r4YI6junx6zDYPlr7nPV9M/JO2T8MrJb70rTpIo+E03r2tJFj UlB8v/V+mQaGlLnBg8lepuE0aj2frCoUoreWTQjUyDg3dPCewpayvj7hghbfDGd0RhEd oH/v2966RFS8S1SA8QDdq/S8h1fGul2n20Gl7ibP238teFiCXJONNsS6OWBa+T02Vpwd aurit8IO+RQc5GWMMDduCzb30zuVYF9HQ8qNiMIPaiQ6ugLSkifvkr8X43/QHLAC82Aa EhdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=rTXOBJcC; 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 w21-v6si14129530pgv.462.2018.06.19.06.41.13; Tue, 19 Jun 2018 06:41:13 -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=rTXOBJcC; 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 S937743AbeFSNlL (ORCPT + 30 others); Tue, 19 Jun 2018 09:41:11 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35020 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S937695AbeFSNlH (ORCPT ); Tue, 19 Jun 2018 09:41:07 -0400 Received: by mail-wm0-f68.google.com with SMTP id j15-v6so566225wme.0 for ; Tue, 19 Jun 2018 06:41:06 -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=O9CgGsxjPmXSJzKHBcIzvkjp9vRQY5ar1a5/jpyGPWw=; b=rTXOBJcCwtd7UV0iGy1AhM0DKWC1S733yQT8EFg3NbCXowIDQ8d3pR6vB8XkYmOz8e Jo9n5WnYwSQ9p9zSuKRGDP5v4FHLzYncskdRvkK8uA8wTVxUPWvph+vI9vuZwTTpjPDG 6XSSjW1g+cEAErn3J9Lihbq7k/+RUIHVaGEX1TSf0P1AQV+TWFC3PVQr/rPkGHud3Z3X yHqAn+mqEHgapkekpKH+t8dRobSpswHJHazWP96IVQNHO68URpVMENopk0v4/yQSzoUb uUYiVSvxZB5Jhb6uQJCcvFKsjV2ts2s+rlL1TQm9Osm2L3kgsZDaIXfb5W6uibKwrRXd qPug== 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=O9CgGsxjPmXSJzKHBcIzvkjp9vRQY5ar1a5/jpyGPWw=; b=sItRIUyIvxqokV4OUZZ0arMNYKqVh6ANkMvFykBwhs0kIo7RehQoEe4IsQkQjD9Fni MUJIXVVob6beW/0Pj1BHEQ1sI1niqY4mmsjqlvU95GUH8e+CBVGmQWIeDetLLx4YUgkz zMUPIs/cXMOirUOQEJfOhVE/VkBYElBYX3Ub5Ss57ToyioYaEwtLDxMubsBceu6NPokv XZW8iK6gTeVokFWs4ExllcVAy8ewORfeFXUfzdp3jQaT4kzBi3sIEfCGgRlxAkK1OLgj Z5NZ+ySQ+TEtoXzdot1Z21+EsT8uh/+OJOMZs093iNk/zLlcooqDCGqzVp9ruBGtmDIL ndxA== X-Gm-Message-State: APt69E0YBcf+hR2NxGG4ZuAwWDexd/XzXt+YcM/7zDxKlNbnkCwUZeW4 lwP1i+ESLXC7vRipnOPcCJt0WRoh X-Received: by 2002:a1c:470b:: with SMTP id u11-v6mr11499989wma.49.1529415665755; Tue, 19 Jun 2018 06:41:05 -0700 (PDT) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id t10-v6sm17196154wrq.74.2018.06.19.06.41.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 19 Jun 2018 06:41:05 -0700 (PDT) From: Jerome Brunet To: Michael Turquette , Stephen Boyd Cc: Jerome Brunet , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-soc@vger.kernel.org, David Brown , Andy Gross , Linus Walleij , Quentin Schulz , Maxime Ripard Subject: [PATCH 2/2] clk: fix CLK_SET_RATE_GATE with clock rate protection Date: Tue, 19 Jun 2018 15:40:51 +0200 Message-Id: <20180619134051.16726-3-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180619134051.16726-1-jbrunet@baylibre.com> References: <20180619134051.16726-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CLK_SET_RATE_GATE should prevent any operation which may result in a rate change or glitch while the clock is prepared/enabled. IOW, the following sequence is not allowed anymore with CLK_SET_RATE_GATE: * clk_get() * clk_prepare_enable() * clk_get_rate() * clk_set_rate() At the moment this is enforced on the leaf clock of the operation, not along the tree. This problematic because, if a PLL has the CLK_RATE_GATE, it won't be enforced if the clk_set_rate() is called on its child clocks. Using clock rate protection, we can now enforce CLK_SET_RATE_GATE along the clock tree Acked-by: Linus Walleij Tested-by: Quentin Schulz Tested-by: Maxime Ripard Signed-off-by: Jerome Brunet --- drivers/clk/clk.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) -- 2.14.3 diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 9760b526ca31..97c09243fb21 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -691,6 +691,9 @@ static void clk_core_unprepare(struct clk_core *core) "Unpreparing critical %s\n", core->name)) return; + if (core->flags & CLK_SET_RATE_GATE) + clk_core_rate_unprotect(core); + if (--core->prepare_count > 0) return; @@ -765,6 +768,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; unprepare: clk_core_unprepare(core->parent); @@ -1888,9 +1901,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)