From patchwork Fri Feb 23 10:23:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 10237361 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 9A12F602DC for ; Fri, 23 Feb 2018 10:35:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 828382913A for ; Fri, 23 Feb 2018 10:35:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 75427294E5; Fri, 23 Feb 2018 10:35:53 +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=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.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 B9C672913A for ; Fri, 23 Feb 2018 10:35:52 +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=f1dmT8lqSpIN2PjUGe0qnAmKy4m8YMcHHuoEcpwLGRY=; b=ogKiV4nX4KdJiMX3r1TgnmkwUq X4jrxX+oCgDL/70ymPwV30/vepEEU2iFiOwNnEWVe7gXl1JK5XtIvH3uyldzHVlx3Y6TqVs432hcF Vdscgt/HHcVM0FAu3qOytVvzDHYppCFJjjpOlCPcq4JCHpaZnjXc5zVDRhvIaJQJ0RTOWRxyqu/Hu nLOZliVk3KHflYCUt79ORq5S0eD9Qfcp/pVrQRZI/dnxWhrCR1P1pcKL9Dm0fBHjUlI4uQGd/uVZ/ ar3qMUuUJF+RgZB+m/VXrWXuO38nEN/DqB0TVzanoHBqWzdpxUyywtBhrxPFwP8axBMGb3GMPYmVY /A4gUn2Q==; 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 1epAha-00078Z-Ox; Fri, 23 Feb 2018 10:35:42 +0000 Received: from casper.infradead.org ([85.118.1.10]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1epAd7-0003Ib-CW for linux-arm-kernel@bombadil.infradead.org; Fri, 23 Feb 2018 10:31:05 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=G2f8VbzrMvNh40O8+d08UjmT09kaXNhp3e6FeRb5VQY=; b=BnnhEX35FVWn5G3cpB/JBuVBh R3zgMUgR4LcDqSZ0RX6VTLmtseyUNObw+XxN/ZFaDC2pWhEWal500YL8KqUPVF9ekmJ5ZZMJm5Jqu caobX61LEnnSdms6xts65CNgcQ2/Jwe6rPQmEKNb7C6KZSXqn0NmGD61vpP4D1cQzA872RU6VZUR+ WDy1k5xY0FqovquCBXHZ+Yk9+hfr8hH1WcmzzWmLr3oKRifxbez1Kq3lizn0iLj6oykYWDJO6s16c Q/MVFSdHEEB5gNYFqtrm/s3msOHSCLan0KUcnX+j9LsFTAsdIfdmwQAXXGp+WrE1PwDZtyP0zHGjs 0805+Oz9A==; Received: from mail-pf0-x243.google.com ([2607:f8b0:400e:c00::243]) by casper.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1epAWk-00060P-0w for linux-arm-kernel@lists.infradead.org; Fri, 23 Feb 2018 10:24:31 +0000 Received: by mail-pf0-x243.google.com with SMTP id d26so3341221pfn.5 for ; Fri, 23 Feb 2018 02:24:19 -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=G2f8VbzrMvNh40O8+d08UjmT09kaXNhp3e6FeRb5VQY=; b=ieTgY4Fmzd+a8q+lu4n/jC5yd5Cl5PiUfoIPP4qK/Bq49UFOZrvFI/aFBHGSbXXpG6 YG3d7UF8RhnHg4q7rCaISiN6O0WbiLyNE7/4mBLMzgGsuAa0P5znQh+TCuAYLlR63D2E MDd/2ETh2gCPUVGm2xL3MBz/oOOGWtTnCnRbE= 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=G2f8VbzrMvNh40O8+d08UjmT09kaXNhp3e6FeRb5VQY=; b=t8rATWG71CsMfI2NEpgpmY6r/OTr1vcpaLu8GnwbmTS+g3xk8YdsyGaVw1USsTq2XE 8H+AHceUcMsLuNqNcRgkjc1ZVeCl2a1LWmPTtAdwDHzv0hEJKMrRIUaafM10t9Svn1Yv 0TirXCQCQ7Jg1oYSPzZtCkdA7E14E/3cfpMgMIpVQpbzP7lpMlSn3SNqQaHakc1hBQ5B vTEpYJ+GnEvP9J7DMuGofQ3k8/i9U201JdnCswZwQi97VmJevAGRSfql59mTSoMhEl6Y syPxNFN6/9Gr/LWfn6SQvvgWz7RLNGcZvRyOOgkOHJcL0iOcuxvFD00HRC8NiJFkjkW8 fPXQ== X-Gm-Message-State: APf1xPCRrA5sTxN7x43oV65Oo6uZMmpDM2ujuFaXUDVS9nCYx4XP8oG4 9capYJInD/mvL2ki+248KU8SPQ== X-Google-Smtp-Source: AH8x226s00Ruy5ATRXY04jAvA5aOkqI1EddqdkqEAfJVNsSIL1B3AnnsnJToXo/T+WaJBnaNu7T4Hg== X-Received: by 10.98.100.131 with SMTP id y125mr1275293pfb.117.1519381458312; Fri, 23 Feb 2018 02:24:18 -0800 (PST) Received: from localhost ([122.167.232.138]) by smtp.gmail.com with ESMTPSA id m22sm4335405pfg.188.2018.02.23.02.24.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Feb 2018 02:24:17 -0800 (PST) From: Viresh Kumar To: Greg Kroah-Hartman Subject: [PATCH V7 05/13] boot_constraint: Add support for clk constraints Date: Fri, 23 Feb 2018 15:53:44 +0530 Message-Id: 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-20180223_102430_082640_AC2022E8 X-CRM114-Status: GOOD ( 24.69 ) 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 , Stephen Boyd , Viresh Kumar , s.hauer@pengutronix.de, linux-kernel@vger.kernel.org, xuwei5@hisilicon.com, olof@lixom.net, 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/bootconstraint/Makefile | 2 +- drivers/bootconstraint/clk.c | 67 +++++++++++++++++++++++++++++++++++++++++ drivers/bootconstraint/core.c | 4 +++ drivers/bootconstraint/core.h | 3 ++ include/linux/boot_constraint.h | 11 +++++++ 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 drivers/bootconstraint/clk.c diff --git a/drivers/bootconstraint/Makefile b/drivers/bootconstraint/Makefile index a45616f0c3b0..3424379fd1e4 100644 --- a/drivers/bootconstraint/Makefile +++ b/drivers/bootconstraint/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/bootconstraint/clk.c b/drivers/bootconstraint/clk.c new file mode 100644 index 000000000000..90262fe9057c --- /dev/null +++ b/drivers/bootconstraint/clk.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 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/bootconstraint/core.c b/drivers/bootconstraint/core.c index 2973f8dd9094..a73744c5d599 100644 --- a/drivers/bootconstraint/core.c +++ b/drivers/bootconstraint/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/bootconstraint/core.h b/drivers/bootconstraint/core.h index 44c219716be5..09a6176541d7 100644 --- a/drivers/bootconstraint/core.h +++ b/drivers/bootconstraint/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 736fe09a8589..4685ff55fff8 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.