From patchwork Thu Jan 18 11:01:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 124932 Delivered-To: patch@linaro.org Received: by 10.46.64.27 with SMTP id n27csp77422lja; Thu, 18 Jan 2018 03:04:04 -0800 (PST) X-Google-Smtp-Source: ACJfBotO7jfjZOXWeDDDV5P9JdFHJv/Gc4SgUbzuCGYcB3JzsKqI5K82xcF9EnkC2G+McNzzc8Nt X-Received: by 10.98.60.132 with SMTP id b4mr37163526pfk.120.1516273443981; Thu, 18 Jan 2018 03:04:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516273443; cv=none; d=google.com; s=arc-20160816; b=gdy7i3HeI3obhYODvKQSUZMK6ADM/LUZwHtJXNLfaCujUaMLNEwIGT7k9ArEh/xV5B radd1K/mJGMmJvye12++G2YvUy7yH2gmHSEtULT0kUIVhfT3SbS90PeFt5BpeRKsTznK +CgY/01akA9rDL2otmt5pyF7dXVyVe96D684W4aRZfKJhvbuicDQLJNcEC8eI65f9xQ4 VWk3qUTc6voypFdtcAM6D/mA590t0v7DQasknzgCTk1mvET0MTcOrHw9/KrE+4xfh8Dn ISHBYpm5TiIQZhrq7TzxsFAuNCYbQ2ol6ZsOZjSO/z9HD74SVXzqkjvNCcQp19tw1eFR tQnw== 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=R4brOCVDW9eRr6/ALz44unxgvElJoUJHRG5Urldo5J0=; b=OKUetXyuQLYTxWDGdspX6l3kHiosGKcNHpSj89dE0yURiA1rxFDfHEaU5txb9QMsih nIizprszvL24P806PXhnqieCVygUFMSUal+UnW6u7NL8RfQjBGRRZdBIhG0ybNPFuFcG 1JOn+Hkm39Yh8CFY+bYp6bPiJ3r8tMqOvCmXsimby2zYKtGoJzFmwzvDNnA3s6DmEvAu ZkBIovofo54eIMBZ+X9A+tqD+YppDciub6vAVc+PbYHXFkln7dwiRslFbNl2OLgo11Ou 50MlpqMTvQc9Kam2fOvmXZYA8H8p6S349WfgY2GuERRcI+SQ4BOQlgkVwar0Lintk4Z9 eiaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=TKoiItqk; 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 d62si5669180pgc.151.2018.01.18.03.04.03; Thu, 18 Jan 2018 03:04:03 -0800 (PST) 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=TKoiItqk; 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 S1755989AbeARLEB (ORCPT + 28 others); Thu, 18 Jan 2018 06:04:01 -0500 Received: from mail-wr0-f193.google.com ([209.85.128.193]:41021 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752184AbeARLB7 (ORCPT ); Thu, 18 Jan 2018 06:01:59 -0500 Received: by mail-wr0-f193.google.com with SMTP id o7so22078547wro.8 for ; Thu, 18 Jan 2018 03:01:58 -0800 (PST) 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=R4brOCVDW9eRr6/ALz44unxgvElJoUJHRG5Urldo5J0=; b=TKoiItqkbVR1wZGw+TpF0CC6uQwVskjDgR0vwHgAgDbcWg007Jr5pOv9ejBZq62Veh hMRhUXtkc4z3CveimngVrCBRwrln8BojuCZIprO0Dt7sJV4MaO/lMApTy9Z8XV6jg1Nh 8eeaKP8WvlSiejpxmD3OFdHCNct1DBPLKlBvL3W9c0PUBXH5QGuCKP9rrV3EyemHE9pU YCF9pQEBrzZZBB092jGlE0Lw6NoWsh6xNi732XH94307miGTsk5oAxS17Hpv/Swqc6g7 RjZF82UDOXOB3JrzUbDNQd0Y0YBihO3Ui9PpZczv8iEyh+EM1ddwoGfHIxXnMzvIjImN GbIA== 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=R4brOCVDW9eRr6/ALz44unxgvElJoUJHRG5Urldo5J0=; b=ZuhjUgugFI1iOpHd8mBfptDB2iM4jheEEaXzxgfIjqrVQE9cqppqwPZBZ1/T38X5Sc BgjMs4XcApcUgP1uzMjQP+DCUiYqruXgmA7vHphyl8y3rnOPBhkoRnlzR1ynuICWeB4G NEKT45ZsrjxsyZoTbsMUSsadWQKatpt4zkodgjlfxJ0xZ5FvNdIOnddhzm10J7S2BBqg QMelnB8czlyd7Vq3GQG6N15bW6szhZ8LirRTaTkVc8LsTozVDMATo6X/6ow3nIPyy2OB aK0IZkHAccNtwUQB8DXEonIX/fQv9KBQ7WfBTbiplucLBLUp7YFebOS4MVcbzgJAD+53 VwoA== X-Gm-Message-State: AKwxytdqrDhqj/tAHdEkJOYRJmoW5cWN+w/fz5ZD2n7tqMCtX78BMngO UfKjXunWSpkztpJuJZnrsm4E4Q== X-Received: by 10.223.139.67 with SMTP id v3mr5513043wra.162.1516273317926; Thu, 18 Jan 2018 03:01:57 -0800 (PST) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id k125sm19972075wmd.48.2018.01.18.03.01.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jan 2018 03:01:57 -0800 (PST) From: Jerome Brunet To: Stephen Boyd , Michael Turquette Cc: Jerome Brunet , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] clk: divider: export clk_div_mask() helper Date: Thu, 18 Jan 2018 12:01:43 +0100 Message-Id: <20180118110144.30619-2-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180118110144.30619-1-jbrunet@baylibre.com> References: <20180118110144.30619-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Export clk_div_mask() in clk-provider header so every clock providers derived from the generic clock divider may share the definition instead of redefining it. Signed-off-by: Jerome Brunet --- drivers/clk/clk-divider.c | 24 +++++++++++------------- include/linux/clk-provider.h | 1 + 2 files changed, 12 insertions(+), 13 deletions(-) -- 2.14.3 diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 3eb2b27f3513..b859620be4d2 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c @@ -28,12 +28,10 @@ * parent - fixed parent. No clk_set_parent support */ -#define div_mask(width) ((1 << (width)) - 1) - static unsigned int _get_table_maxdiv(const struct clk_div_table *table, u8 width) { - unsigned int maxdiv = 0, mask = div_mask(width); + unsigned int maxdiv = 0, mask = clk_div_mask(width); const struct clk_div_table *clkt; for (clkt = table; clkt->div; clkt++) @@ -57,12 +55,12 @@ static unsigned int _get_maxdiv(const struct clk_div_table *table, u8 width, unsigned long flags) { if (flags & CLK_DIVIDER_ONE_BASED) - return div_mask(width); + return clk_div_mask(width); if (flags & CLK_DIVIDER_POWER_OF_TWO) - return 1 << div_mask(width); + return 1 << clk_div_mask(width); if (table) return _get_table_maxdiv(table, width); - return div_mask(width) + 1; + return clk_div_mask(width) + 1; } static unsigned int _get_table_div(const struct clk_div_table *table, @@ -84,7 +82,7 @@ static unsigned int _get_div(const struct clk_div_table *table, if (flags & CLK_DIVIDER_POWER_OF_TWO) return 1 << val; if (flags & CLK_DIVIDER_MAX_AT_ZERO) - return val ? val : div_mask(width) + 1; + return val ? val : clk_div_mask(width) + 1; if (table) return _get_table_div(table, val); return val + 1; @@ -109,7 +107,7 @@ static unsigned int _get_val(const struct clk_div_table *table, if (flags & CLK_DIVIDER_POWER_OF_TWO) return __ffs(div); if (flags & CLK_DIVIDER_MAX_AT_ZERO) - return (div == div_mask(width) + 1) ? 0 : div; + return (div == clk_div_mask(width) + 1) ? 0 : div; if (table) return _get_table_val(table, div); return div - 1; @@ -141,7 +139,7 @@ static unsigned long clk_divider_recalc_rate(struct clk_hw *hw, unsigned int val; val = clk_readl(divider->reg) >> divider->shift; - val &= div_mask(divider->width); + val &= clk_div_mask(divider->width); return divider_recalc_rate(hw, parent_rate, val, divider->table, divider->flags, divider->width); @@ -375,7 +373,7 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate, /* if read only, just return current value */ if (divider->flags & CLK_DIVIDER_READ_ONLY) { val = clk_readl(divider->reg) >> divider->shift; - val &= div_mask(divider->width); + val &= clk_div_mask(divider->width); return divider_ro_round_rate(hw, rate, prate, divider->table, divider->width, divider->flags, @@ -399,7 +397,7 @@ int divider_get_val(unsigned long rate, unsigned long parent_rate, value = _get_val(table, div, flags, width); - return min_t(unsigned int, value, div_mask(width)); + return min_t(unsigned int, value, clk_div_mask(width)); } EXPORT_SYMBOL_GPL(divider_get_val); @@ -422,10 +420,10 @@ static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate, __acquire(divider->lock); if (divider->flags & CLK_DIVIDER_HIWORD_MASK) { - val = div_mask(divider->width) << (divider->shift + 16); + val = clk_div_mask(divider->width) << (divider->shift + 16); } else { val = clk_readl(divider->reg); - val &= ~(div_mask(divider->width) << divider->shift); + val &= ~(clk_div_mask(divider->width) << divider->shift); } val |= (u32)value << divider->shift; clk_writel(val, divider->reg); diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 2f3a9aae1abb..38861e75b017 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -397,6 +397,7 @@ struct clk_divider { spinlock_t *lock; }; +#define clk_div_mask(width) ((1 << (width)) - 1) #define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw) #define CLK_DIVIDER_ONE_BASED BIT(0)