From patchwork Wed Oct 3 23:00:26 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Hilman X-Patchwork-Id: 1543621 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 335E0E00EA for ; Wed, 3 Oct 2012 23:00:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932524Ab2JCXAk (ORCPT ); Wed, 3 Oct 2012 19:00:40 -0400 Received: from mail-pb0-f46.google.com ([209.85.160.46]:50617 "EHLO mail-pb0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932443Ab2JCXAe (ORCPT ); Wed, 3 Oct 2012 19:00:34 -0400 Received: by pbbrr4 with SMTP id rr4so10334005pbb.19 for ; Wed, 03 Oct 2012 16:00:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=/DFGsg/ftzYL9SXopOIC+WmIy4Oor/bJn9R4kMhXCpc=; b=YNoSaKPp3xypOwIgm5jhnzyOA8uGALZoh2hI/NzQQwkPaxped9/yJi9SoHwF65oceJ zLeb4QEANRMAVOkyq9/cPCCz5EbyPQaQA0ThHPW855YDI/vysUgeT7WpVUWAzsA4crOq Hc1DKsurist0uXBoi1cGfpy0qS6LyB9hWQwWy+8COnwlWY4zIDU93oqFZ+odMsnyQVgy AIOZCQrrrGZjMyZdSDo5jvQG/S9jaOCeK0HPhp2hX/BseCSoOI338MHpyCt+DBxOZjDJ Q7ZmNmXPd7xr6drHH2Cm4Rqha6JaOzHeXuu6Vrq1eXXbjmlwHIEhkYXFZ7xmzOWBrmgs QcLQ== Received: by 10.68.129.38 with SMTP id nt6mr16780476pbb.76.1349305234121; Wed, 03 Oct 2012 16:00:34 -0700 (PDT) Received: from localhost (c-24-19-7-36.hsd1.wa.comcast.net. [24.19.7.36]) by mx.google.com with ESMTPS id gj9sm3266876pbc.16.2012.10.03.16.00.32 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 03 Oct 2012 16:00:33 -0700 (PDT) From: Kevin Hilman To: "Rafael J. Wysocki" , linux-omap@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org Subject: [PATCH 1/4] cpufreq: OMAP: ensure valid clock rate before scaling Date: Wed, 3 Oct 2012 16:00:26 -0700 Message-Id: <1349305229-28480-2-git-send-email-khilman@deeprootsystems.com> X-Mailer: git-send-email 1.7.9.2 In-Reply-To: <1349305229-28480-1-git-send-email-khilman@deeprootsystems.com> References: <1349305229-28480-1-git-send-email-khilman@deeprootsystems.com> X-Gm-Message-State: ALoCoQlvGfNrHNWPSZuG+PjgiSqbiv++HL7sxtzI6zjfRPHT5E2T2KslT8rqMSnRXGIM6lg9qkyG Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org From: Kevin Hilman Ensure the clock rate that will be used is a valid one before attempting to scale the voltage. Currently the driver assumes it has a valid frequency from the OPP table, but boards using different system oscillators might not have exact matches with the OPP table, and result in a failing call to clk_set_rate(). This is particularily bad because the voltage may be scaled even though the frequency is not. This will obviously lead to some unpredictable behavior, especially if the frequency is high and the voltage is dropped. Thanks to Joni Lapilainen for reporting crashes seen on 3430/n900. Reported-by: Joni Lapilainen Signed-off-by: Kevin Hilman --- drivers/cpufreq/omap-cpufreq.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/cpufreq/omap-cpufreq.c b/drivers/cpufreq/omap-cpufreq.c index 65f8e9a..0fe395a 100644 --- a/drivers/cpufreq/omap-cpufreq.c +++ b/drivers/cpufreq/omap-cpufreq.c @@ -108,6 +108,14 @@ static int omap_target(struct cpufreq_policy *policy, } freq = freqs.new * 1000; + ret = clk_round_rate(mpu_clk, freq); + if (IS_ERR_VALUE(ret)) { + dev_warn(mpu_dev, + "CPUfreq: Cannot find matching frequency for %lu\n", + freq); + return ret; + } + freq = ret; if (mpu_reg) { opp = opp_find_freq_ceil(mpu_dev, &freq);