From patchwork Tue Jul 4 20:04:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Priit Laes X-Patchwork-Id: 9825565 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 106D760353 for ; Tue, 4 Jul 2017 20:06:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C1F30205AB for ; Tue, 4 Jul 2017 20:06:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B691826E16; Tue, 4 Jul 2017 20:06:50 +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.1 required=2.0 tests=BAYES_00,DKIM_ADSP_ALL, DKIM_SIGNED,DKIM_VALID autolearn=no 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 5E113205AB for ; Tue, 4 Jul 2017 20:06:50 +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=yMyVl4giZyXSVBBQoDLD3nObWmLc7Tp8elp6Hph9v9w=; b=gXxmy7aBZ3h6bPBM4goxkzHtxn Mc5Lw6SPa4X+Q9GEPFs8g7q1amkImODKGvTKdQHwobf2hHwbjvSErpz9FycUBSWaB4z0ZMyes6Je1 HBuRgrxlmv+zcA2uDLM4TyJJc86tEHw8BW6/P51znthYGyKu07H9RprSyV3d+ppc1edTttP5Oai+p tfyobuJYS/VxJPSBwYOJ8G59WP7p2v3NMyyVhtsgidlz+xHNBTs+TFf6Z7odLl1wAlc8Zpt+z11Cz Wxd854gpz+6pu+sJy/KAmdocJ8C8CuRXyeBKbZT4QoL+NNXhjhYadGwzHr5/puwPoaS1vpH/hXnlt VNMcSmgg==; 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 1dSU5v-0000PU-DC; Tue, 04 Jul 2017 20:06:47 +0000 Received: from plaes.org ([188.166.43.21]) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dSU5X-0008Mx-25 for linux-arm-kernel@lists.infradead.org; Tue, 04 Jul 2017 20:06:26 +0000 Received: from localhost (85.253.161.114.cable.starman.ee [85.253.161.114]) by plaes.org (Postfix) with ESMTPSA id 7AC0840AB9; Tue, 4 Jul 2017 20:05:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=plaes.org; s=mail; t=1499198758; bh=viwlFX0p8LrFGDf0TtgMPwoCoREWMJy6dF2ISwx81Gw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:In-Reply-To: References:From; b=VivgCuSdoy8hhZNkp1OkxyE160PlLZFkEtZxGiaWt3U42ArrnEOrRatR5sy9AQWpX 09CCmftuKUJ64lbOdhuPLP32isE1BhynVyRMY7Aqfuv8xC6qjAw5i5q683/qsYWeoG crUyGkvKvZhZGTnbR5g5goImT1gaRbY2+9qPeurvAwTTaFRkzwdhCDd4niJNwGYt+A HUVL0tcxOQnEJLuS8VBsTN9As5W4h+8EY9cQwdeU7gBPRIqf0vIfaBupOnshHIb+2F pQOWP0+RLJaqpPG5bDWmdMPxKZMURIJW82muGdLSslVY1UI3ciCRHz3PKGeCPM0mvA Khh+IMScngmsQ== From: Priit Laes To: Michael Turquette , Stephen Boyd , Rob Herring , Mark Rutland , Maxime Ripard , Chen-Yu Tsai , Russell King , Philipp Zabel , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 1/6] clk: sunxi-ng: div: Add support for fixed post-divider Date: Tue, 4 Jul 2017 23:04:56 +0300 Message-Id: <805048a548031cafc890e6ea06ee773bdfb199d0.1499197129.git-series.plaes@plaes.org> X-Mailer: git-send-email 2.9.4 In-Reply-To: References: In-Reply-To: References: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170704_130623_517764_8739F974 X-CRM114-Status: GOOD ( 10.43 ) 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: linux-sunxi@googlegroups.com, Priit Laes , Jonathan Liu 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 SATA clock on sun4i/sun7i is of type (parent) / M / 6 where 6 is fixed post-divider. Signed-off-by: Priit Laes Reviewed-by: Chen-Yu Tsai --- drivers/clk/sunxi-ng/ccu_div.c | 18 ++++++++++++++++-- drivers/clk/sunxi-ng/ccu_div.h | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/clk/sunxi-ng/ccu_div.c b/drivers/clk/sunxi-ng/ccu_div.c index c0e5c10..054b12a 100644 --- a/drivers/clk/sunxi-ng/ccu_div.c +++ b/drivers/clk/sunxi-ng/ccu_div.c @@ -21,6 +21,9 @@ static unsigned long ccu_div_round_rate(struct ccu_mux_internal *mux, { struct ccu_div *cd = data; + if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV) + rate /= cd->fixed_post_div; + return divider_round_rate_parent(&cd->common.hw, parent, rate, parent_rate, cd->div.table, cd->div.width, @@ -62,8 +65,13 @@ static unsigned long ccu_div_recalc_rate(struct clk_hw *hw, parent_rate = ccu_mux_helper_apply_prediv(&cd->common, &cd->mux, -1, parent_rate); - return divider_recalc_rate(hw, parent_rate, val, cd->div.table, - cd->div.flags); + val = divider_recalc_rate(hw, parent_rate, val, cd->div.table, + cd->div.flags); + + if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV) + val /= cd->fixed_post_div; + + return val; } static int ccu_div_determine_rate(struct clk_hw *hw, @@ -71,6 +79,9 @@ static int ccu_div_determine_rate(struct clk_hw *hw, { struct ccu_div *cd = hw_to_ccu_div(hw); + if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV) + req->rate *= cd->fixed_post_div; + return ccu_mux_helper_determine_rate(&cd->common, &cd->mux, req, ccu_div_round_rate, cd); } @@ -89,6 +100,9 @@ static int ccu_div_set_rate(struct clk_hw *hw, unsigned long rate, val = divider_get_val(rate, parent_rate, cd->div.table, cd->div.width, cd->div.flags); + if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV) + val /= cd->fixed_post_div; + spin_lock_irqsave(cd->common.lock, flags); reg = readl(cd->common.base + cd->common.reg); diff --git a/drivers/clk/sunxi-ng/ccu_div.h b/drivers/clk/sunxi-ng/ccu_div.h index 08d0744..f3a5028 100644 --- a/drivers/clk/sunxi-ng/ccu_div.h +++ b/drivers/clk/sunxi-ng/ccu_div.h @@ -86,9 +86,10 @@ struct ccu_div_internal { struct ccu_div { u32 enable; - struct ccu_div_internal div; + struct ccu_div_internal div; struct ccu_mux_internal mux; struct ccu_common common; + unsigned int fixed_post_div; }; #define SUNXI_CCU_DIV_TABLE_WITH_GATE(_struct, _name, _parent, _reg, \