From patchwork Wed Jan 10 03:47:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 10153887 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 0E224602D8 for ; Wed, 10 Jan 2018 03:49:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF5F0274D1 for ; Wed, 10 Jan 2018 03:49:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E3D0527813; Wed, 10 Jan 2018 03:49:56 +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=ham 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 74685274D1 for ; Wed, 10 Jan 2018 03:49:56 +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=a1ypVQE6TFuSH9jtE0gFLVNrGr jZDbKeUv1PVoGO3mn6DNN3oOko4XXO72HqDo2LSU/2silZtPmDB47j8q50gaUO6i4fSqVkGCMhXqr +cIKpSKtA+OMNeJEDo4ZSAjqr+SclLxdSobUnPgrT+m5CJz3RTROG/gJX0XtcutniBjARXrPnarnT 7PWe3LfeUtVTY3ZaHqMlPmxyBcykTZ+CG0Isxj/vvO/egI40XhdLQKfaDsz4zbbfDoszx5XDJz/fb YJ9QBKh+sIr8C4Qbyg7RmmdVpZo09LA2qeTi21CR7jbqLkMyqxFVuqy+dviP2Ema9dAHn00URMeZV EO+NH8jQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eZ7Oi-00049O-GM; Wed, 10 Jan 2018 03:49:52 +0000 Received: from mail-pg0-x241.google.com ([2607:f8b0:400e:c05::241]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eZ7NA-00027l-Kb for linux-arm-kernel@lists.infradead.org; Wed, 10 Jan 2018 03:48:31 +0000 Received: by mail-pg0-x241.google.com with SMTP id q67so9808930pga.9 for ; Tue, 09 Jan 2018 19:48:06 -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=iyz/0Sxt+/4VHMJKlh9mzBjWSxrDMDSS/rlhHi2NeDHj05lD0VM9zOf3kGDiVcCu+o 0YDeJ8lDpWGY/wDtnvT3H1kfdthv3KszimIJ/4kJKTqO3pWbND3q8Cw3m2x3mf3GWmoI BpJoJCyhaUKrQ9aJa3buq+f3Y0hxpYPR9ynaw= 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=QwwdGi/3k53h+tkCqHfGytZ4uEKuc+WNxLCos83J9IW44UDZyYgrhYYvVtYBttaGmG JaHQV/BPoVV9W5AHDPEYHUSkNiqX2pYpszCa7w1sBTA+YchJ3tugw2Q44NFn+CqQ8xgU bOVvU6aphV3tHPPVbWtw3YJauVUD4aTxqTzfj/KbZDfCgSdkLNrGO+DqNeqWhoznGkg0 wiqH20eylOq2EIFYh4hPEKCZVeDPntbJZpVn7JIfsBtv4LiXgMLVccuGpFpFeVrFlKmZ VrXI4Q7Lc5T4KrlvYeLhH/pMeMuEl4qk+egRxnkKYBU0Js79/4Nyx8LOa/8aq59YaBSV tSZA== X-Gm-Message-State: AKGB3mIxdkmvyp4vdrMSQmNFOq7Dc26zYWddUQDLS2N83xBOtDHjFHYU B0BLKQYcV/QrKDG5WRtPYQa4QkfZN4A= X-Google-Smtp-Source: ACJfBotsqUA6MPirDwSt5YC+nl7t/ge+RjlMuK8pIWRuukllqA2Rgm5EW7GcvdAWRleo2incTH6+AA== X-Received: by 10.98.67.151 with SMTP id l23mr15765807pfi.194.1515556086012; Tue, 09 Jan 2018 19:48:06 -0800 (PST) Received: from localhost ([122.172.19.39]) by smtp.gmail.com with ESMTPSA id a22sm36343410pfc.47.2018.01.09.19.48.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Jan 2018 19:48:05 -0800 (PST) From: Viresh Kumar To: Greg Kroah-Hartman Subject: [PATCH V6 05/13] boot_constraint: Add support for clk constraints Date: Wed, 10 Jan 2018 09:17:34 +0530 Message-Id: <282c37b14c0f6102b6748e26314455c64d5fe46b.1515554879.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-20180109_194816_960752_EEFA6D30 X-CRM114-Status: GOOD ( 18.73 ) 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.