From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933041AbcITLkA (ORCPT ); Tue, 20 Sep 2016 07:40:00 -0400 Received: from ducie-dc1.codethink.co.uk ([185.25.241.215]:59948 "EHLO ducie-dc1.codethink.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932329AbcITLj4 (ORCPT ); Tue, 20 Sep 2016 07:39:56 -0400 Message-ID: <1474371589.31504.4.camel@codethink.co.uk> Subject: Re: [PATCH 4.4 017/192] [PATCH 017/135] clk: xgene: Fix divider with non-zero shift value From: Ben Hutchings To: Loc Ho Cc: linux-kernel@vger.kernel.org, stable@vger.kernel.org, Stephen Boyd , Sasha Levin , Greg Kroah-Hartman Date: Tue, 20 Sep 2016 12:39:49 +0100 In-Reply-To: <20160912152159.629267769@linuxfoundation.org> References: <20160912152158.855601725@linuxfoundation.org> <20160912152159.629267769@linuxfoundation.org> Organization: Codethink Ltd. Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.12.9-1+b1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2016-09-12 at 18:58 +0200, Greg Kroah-Hartman wrote: > 4.4-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > [ Upstream commit 1382ea631ddddb634850a3795527db0feeff5aaf ] > > The X-Gene clock driver missed the divider shift operation when > set the divider value. > > Signed-off-by: Loc Ho > Fixes: 308964caeebc ("clk: Add APM X-Gene SoC clock driver") > Signed-off-by: Stephen Boyd > Signed-off-by: Sasha Levin > Signed-off-by: Greg Kroah-Hartman > --- > drivers/clk/clk-xgene.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > --- a/drivers/clk/clk-xgene.c > +++ b/drivers/clk/clk-xgene.c > @@ -351,7 +351,8 @@ static int xgene_clk_set_rate(struct clk > /* Set new divider */ > data = xgene_clk_read(pclk->param.divider_reg + > pclk->param.reg_divider_offset); > - data &= ~((1 << pclk->param.reg_divider_width) - 1); > + data &= ~((1 << pclk->param.reg_divider_width) - 1) > + << pclk->param.reg_divider_shift; [...] This still does the wrong thing when the shift value is non-zero: it clears all bits to the right of the divider field in data. I think the correct assignment is: data &= ~(((1 << pclk->param.reg_divider_width) - 1) << pclk->param.reg_divider_shift); Ben. -- Ben Hutchings Software Developer, Codethink Ltd.