From patchwork Thu Dec 14 15:33:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 10112535 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3667F6019C for ; Thu, 14 Dec 2017 15:36:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2654129172 for ; Thu, 14 Dec 2017 15:36:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1AFCD2935F; Thu, 14 Dec 2017 15:36:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6285429172 for ; Thu, 14 Dec 2017 15:36:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=TyxjJgvaABqRPOFLhrI3zVNMpcDkMkWJ3ebCmjwIX20=; b=P1InNRJg/mTrzyZ1H6tDH+COac caM7S5Hwv0fbOGvZ4q/p3gyr6YoVgC+q3eH7ikkQVhusnOdJuuM/ubobAxNbs2c1N33lkkBAnQutt 2pCe/fhdWD5bwacp1799DxC2TA8gnvb0Go2TvnyH6yOTFVNKy3JD+xTkEuO342tc0vgEL5Riqwc5/ TcPb7XHzao/VZjbtwPR6Bwo4M8c6zX8K5Eumo248PviIuo60tqAHbHmxZGZNMgMXJwvueNr24qJsR gpJtXZajTjYy24SgL8/rqO7IPlttrRVeOqw2LGzz2vxsGyunFUlAvvV+degabdgoe6i/40W0jz0Bk 1yU3Nz/g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1ePVYg-0006tM-OA; Thu, 14 Dec 2017 15:36:26 +0000 Received: from mail-pf0-x243.google.com ([2607:f8b0:400e:c00::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1ePVWk-0003el-Hz for linux-arm-kernel@lists.infradead.org; Thu, 14 Dec 2017 15:34:35 +0000 Received: by mail-pf0-x243.google.com with SMTP id a90so3861751pfk.1 for ; Thu, 14 Dec 2017 07:34:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=96/PenY+L4PT6MZMyfgg3j5Cpr3agCdGKBAcQne3S8E=; b=RMX6yglhKo0Od2dfIeF3KvGc8xecnI7SWYZ/zm/BMTCGA6jTijPWO2/vOrt/OueX3X 1lJHLnUUYXZZhTe2H3ms4kDRv/SFDfdrDTm7tfPyWFJbOrchYPI3N+dkdik3EESuUykh cTXcdbge6e21vXuSbjoru9q7seeuJ/babuNOw= 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:in-reply-to:references; bh=96/PenY+L4PT6MZMyfgg3j5Cpr3agCdGKBAcQne3S8E=; b=ts+IanJoZka4fEe3B4zKwu7QLTI7N0AFCa4FYsnjP0/Ak4oWXSJKiGJZ4SryOK5qFA WJJ9pzmuMe5x2mhMBYSLYC+QtNvqPtPlj1xsp5ad7nJUfnyeblLTyi+MOQ7uXb0wU+ob EqSrwBtKtVdScBahXRPDjxpJ4f1TKu90rqqWygtEBkUaf9zc8lz47Iba65VH9hhIBH2J ekF0STbNfr+fJnl1JGHTh9LYneCr5XzrF1cYFquXhBptlNs8k0DA9UA1WcuEbufHScUs H2wkRTnXwn7yva5GKDOaqr8C06fBTDW5cxipNyBiK/bPcYb8vR6HLt57griikmDK3wX5 vyQg== X-Gm-Message-State: AKGB3mLiQwCLi/YrZ/yv9D7e3qmk0u4NNY0JyLWEBmnZxVHNygdp3MOe Y8TJYAO0N7IUaFf5rXgQ9qwba0zpnC4= X-Google-Smtp-Source: ACJfBouGN03n5EJRDKs1+5mUwkEZh4bkYFdSc9zOhf9qgMks6swPMUoJF5Rd7eRBQ10EhEMzayZ0Lw== X-Received: by 10.159.242.132 with SMTP id u4mr9985674plr.296.1513265645077; Thu, 14 Dec 2017 07:34:05 -0800 (PST) Received: from localhost ([122.172.99.7]) by smtp.gmail.com with ESMTPSA id b10sm8503649pfj.20.2017.12.14.07.34.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Dec 2017 07:34:04 -0800 (PST) From: Viresh Kumar To: Greg Kroah-Hartman Subject: [PATCH V5 05/13] boot_constraint: Add support for clk constraints Date: Thu, 14 Dec 2017 21:03:12 +0530 Message-Id: <1384510a9ca95d307e6a23b32cb467a2e23b22b6.1513264961.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.15.0.194.g9af6a3dea062 In-Reply-To: References: In-Reply-To: References: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171214_073427_641222_51BB108E X-CRM114-Status: GOOD ( 18.00 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nm@ti.com, Rajendra Nayak , Viresh Kumar , s.hauer@pengutronix.de, Stephen Boyd , linux-kernel@vger.kernel.org, xuwei5@hisilicon.com, robdclark@gmail.com, robh+dt@kernel.org, fabio.estevam@nxp.com, Vincent Guittot , shawnguo@kernel.org, linux-arm-kernel@lists.infradead.org, l.stach@pengutronix.de MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds the clk constraint type. The constraint is set by enabling the clk for the device. Once the device is probed, the clk is disabled and the constraint is removed. We may want to do clk_set_rate() from here, but lets wait for some real users that really want it. Tested-by: Rajendra Nayak Signed-off-by: Viresh Kumar --- drivers/boot_constraint/Makefile | 2 +- drivers/boot_constraint/clk.c | 67 ++++++++++++++++++++++++++++++++++++++++ drivers/boot_constraint/core.c | 4 +++ drivers/boot_constraint/core.h | 3 ++ include/linux/boot_constraint.h | 11 +++++++ 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 drivers/boot_constraint/clk.c diff --git a/drivers/boot_constraint/Makefile b/drivers/boot_constraint/Makefile index a45616f0c3b0..3424379fd1e4 100644 --- a/drivers/boot_constraint/Makefile +++ b/drivers/boot_constraint/Makefile @@ -1,3 +1,3 @@ # Makefile for device boot constraints -obj-y := core.o supply.o +obj-y := clk.o core.o supply.o diff --git a/drivers/boot_constraint/clk.c b/drivers/boot_constraint/clk.c new file mode 100644 index 000000000000..db22acff43e6 --- /dev/null +++ b/drivers/boot_constraint/clk.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2017 Linaro. + * Viresh Kumar + */ + +#include +#include +#include + +#include "core.h" + +struct constraint_clk { + struct dev_boot_constraint_clk_info clk_info; + struct clk *clk; +}; + +int constraint_clk_add(struct constraint *constraint, void *data) +{ + struct dev_boot_constraint_clk_info *clk_info = data; + struct constraint_clk *cclk; + struct device *dev = constraint->cdev->dev; + int ret; + + cclk = kzalloc(sizeof(*cclk), GFP_KERNEL); + if (!cclk) + return -ENOMEM; + + cclk->clk = clk_get(dev, clk_info->name); + if (IS_ERR(cclk->clk)) { + ret = PTR_ERR(cclk->clk); + if (ret != -EPROBE_DEFER) { + dev_err(dev, "clk_get() failed for %s (%d)\n", + clk_info->name, ret); + } + goto free; + } + + ret = clk_prepare_enable(cclk->clk); + if (ret) { + dev_err(dev, "clk_prepare_enable() %s failed (%d)\n", + clk_info->name, ret); + goto put_clk; + } + + cclk->clk_info.name = kstrdup_const(clk_info->name, GFP_KERNEL); + constraint->private = cclk; + + return 0; + +put_clk: + clk_put(cclk->clk); +free: + kfree(cclk); + + return ret; +} + +void constraint_clk_remove(struct constraint *constraint) +{ + struct constraint_clk *cclk = constraint->private; + + kfree_const(cclk->clk_info.name); + clk_disable_unprepare(cclk->clk); + clk_put(cclk->clk); + kfree(cclk); +} diff --git a/drivers/boot_constraint/core.c b/drivers/boot_constraint/core.c index 63a4b1a2fa2c..df9e0bddbfbe 100644 --- a/drivers/boot_constraint/core.c +++ b/drivers/boot_constraint/core.c @@ -91,6 +91,10 @@ static struct constraint *constraint_allocate(struct constraint_dev *cdev, void (*remove)(struct constraint *constraint); switch (type) { + case DEV_BOOT_CONSTRAINT_CLK: + add = constraint_clk_add; + remove = constraint_clk_remove; + break; case DEV_BOOT_CONSTRAINT_SUPPLY: add = constraint_supply_add; remove = constraint_supply_remove; diff --git a/drivers/boot_constraint/core.h b/drivers/boot_constraint/core.h index d0d3e7bf7d57..720bda0a0f44 100644 --- a/drivers/boot_constraint/core.h +++ b/drivers/boot_constraint/core.h @@ -29,6 +29,9 @@ struct constraint { }; /* Forward declarations of constraint specific callbacks */ +int constraint_clk_add(struct constraint *constraint, void *data); +void constraint_clk_remove(struct constraint *constraint); + int constraint_supply_add(struct constraint *constraint, void *data); void constraint_supply_remove(struct constraint *constraint); diff --git a/include/linux/boot_constraint.h b/include/linux/boot_constraint.h index 1db24d53b622..d798355fd93f 100644 --- a/include/linux/boot_constraint.h +++ b/include/linux/boot_constraint.h @@ -16,12 +16,23 @@ struct device; /** * enum dev_boot_constraint_type - This defines different boot constraint types. * + * @DEV_BOOT_CONSTRAINT_CLK: This represents a clock boot constraint. * @DEV_BOOT_CONSTRAINT_SUPPLY: This represents a power supply boot constraint. */ enum dev_boot_constraint_type { + DEV_BOOT_CONSTRAINT_CLK, DEV_BOOT_CONSTRAINT_SUPPLY, }; +/** + * struct dev_boot_constraint_clk_info - Clock boot constraint information. + * + * @name: This must match the connection-id of the clock for the device. + */ +struct dev_boot_constraint_clk_info { + const char *name; +}; + /** * struct dev_boot_constraint_supply_info - Power supply boot constraint * information.