Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp3057615imm; Sun, 1 Jul 2018 11:14:46 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcWzy7ixeSmf2tfFluZD6RXHQW+JrXAXArliyWrSap1OMiXx/stqphBsKGS8OEyxC2IjEi7 X-Received: by 2002:a63:ec14:: with SMTP id j20-v6mr1119389pgh.28.1530468886798; Sun, 01 Jul 2018 11:14:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530468886; cv=none; d=google.com; s=arc-20160816; b=wZ0wkVDcnw7KkNTzjeSAEiqJk7qzfp4CM9Sgy04zaw9A4L1a+7+kkpTc58dL05nMOG 3XIWRU9o9uQs2vc1LXrVsPnv5PR8tPF4J4UeIubPzGGfgResOeUY0qKqEvyz2PEc+Za4 gR8kCjUxmvSbwITCOgJ4ulUaXLgHXwm8oWt/ThNed/v/XRODcKWcTTWnPl1EPTFqZH86 u+0ICK21tptf4kYqEWCWhdN2qeQQi1KuDOYmHG99ViSEcqzRy2GRF6ChSiQG0gNWB85j J5SZR7KZFvLPyN7XznRKV/Yhcn+JL4Xf2qOvCk9SWFg+IUTB2QjTRDEzYkzr22S9PdIU Nwrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=B5oMoE8c8AjfR1LcU5H3fbadYLOsVkcQ/myoR4Wn+3o=; b=DIoiDzmoVeLJejIsjIwiK6Jk2ZKoS3PzLY6vUQTvz8TnkIvggq54u7b+YfINfgDFFy VQKHvw+toR8RZt2pMAl9cFTfS6rFbFx5NS2jnN2OPbgVDvf6lqCkL+C4L/cJo5reJONq /kQ39MNazxyS0J1ezageavFbJocEQEQV5rbecl+7e7QrIG40fsMl0i973qaK1k/dMARm FQOShDEyay1xqFLdBoCHhALCr32Qi1bqkVTDT2rjtTKMV4mzeF1i+TApZFE67EBV96dr 4o/mUUemYMEc9b1TJ7NoVE1MiVehKygrTC26vo7/dBGDX1O8mI9Q6aUzzCtqv71wpA/e 3dnQ== ARC-Authentication-Results: i=1; mx.google.com; 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 x19-v6si14229999plr.15.2018.07.01.11.14.32; Sun, 01 Jul 2018 11:14:46 -0700 (PDT) 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; 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 S965613AbeGASNR (ORCPT + 99 others); Sun, 1 Jul 2018 14:13:17 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:34038 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965220AbeGAQ1K (ORCPT ); Sun, 1 Jul 2018 12:27:10 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 11FF192B; Sun, 1 Jul 2018 16:27:09 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Marcin Ziemianowicz , Boris Brezillon , Stephen Boyd Subject: [PATCH 4.9 065/101] clk: at91: PLL recalc_rate() now using cached MUL and DIV values Date: Sun, 1 Jul 2018 18:21:51 +0200 Message-Id: <20180701160759.764063131@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180701160757.138608453@linuxfoundation.org> References: <20180701160757.138608453@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Marcin Ziemianowicz commit a982e45dc150da3a08907b6dd676b735391704b4 upstream. When a USB device is connected to the USB host port on the SAM9N12 then you get "-62" error which seems to indicate USB replies from the device are timing out. Based on a logic sniffer, I saw the USB bus was running at half speed. The PLL code uses cached MUL and DIV values which get set in set_rate() and applied in prepare(), but the recalc_rate() function instead queries the hardware instead of using these cached values. Therefore, if recalc_rate() is called between a set_rate() and prepare(), the wrong frequency is calculated and later the USB clock divider for the SAM9N12 SOC will be configured for an incorrect clock. In my case, the PLL hardware was set to 96 Mhz before the OHCI driver loads, and therefore the usb clock divider was being set to /2 even though the OHCI driver set the PLL to 48 Mhz. As an alternative explanation, I noticed this was fixed in the past by 87e2ed338f1b ("clk: at91: fix recalc_rate implementation of PLL driver") but the bug was later re-introduced by 1bdf02326b71 ("clk: at91: make use of syscon/regmap internally"). Fixes: 1bdf02326b71 ("clk: at91: make use of syscon/regmap internally) Cc: Signed-off-by: Marcin Ziemianowicz Acked-by: Boris Brezillon Signed-off-by: Stephen Boyd Signed-off-by: Greg Kroah-Hartman --- drivers/clk/at91/clk-pll.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) --- a/drivers/clk/at91/clk-pll.c +++ b/drivers/clk/at91/clk-pll.c @@ -132,19 +132,8 @@ static unsigned long clk_pll_recalc_rate unsigned long parent_rate) { struct clk_pll *pll = to_clk_pll(hw); - unsigned int pllr; - u16 mul; - u8 div; - regmap_read(pll->regmap, PLL_REG(pll->id), &pllr); - - div = PLL_DIV(pllr); - mul = PLL_MUL(pllr, pll->layout); - - if (!div || !mul) - return 0; - - return (parent_rate / div) * (mul + 1); + return (parent_rate / pll->div) * (pll->mul + 1); } static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate,