From patchwork Thu Jan 2 21:26:36 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Russell King X-Patchwork-Id: 3431821 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id A5134C02DC for ; Fri, 3 Jan 2014 15:23:34 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9160C2010C for ; Fri, 3 Jan 2014 15:23:33 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 97DBA20108 for ; Fri, 3 Jan 2014 15:23:32 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B1110FAADE; Fri, 3 Jan 2014 07:23:22 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from pandora.arm.linux.org.uk (gw-1.arm.linux.org.uk [78.32.30.217]) by gabe.freedesktop.org (Postfix) with ESMTP id 1D75AFB901 for ; Thu, 2 Jan 2014 13:31:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=arm.linux.org.uk; s=pandora; h=Date:Sender:Message-Id:Subject:Cc:To:From:References:In-Reply-To; bh=2GbGaEh5iUWPuYKMrvdsTULMG1K4q8u7r6ttWfsSKQQ=; b=UoAi4lRcEP7xtw/hLjEWJI5jkGtZzueIsBFPrUZhXMH9HvQNmzowu75frWdHbsCQv3j4UMKR8I2aDZQTOU3F6Xky9ghzlqZoWtoO7xqFHpRXu2TGa5xf0hwXlwAomy/Ja2/8mhJgldhR9bc1gEJmyqCE2+j4aOJfaMAkmmsmT/4=; Received: from [2001:4d48:ad52:3201:222:68ff:fe15:37dd] (port=58589 helo=rmk-PC.arm.linux.org.uk) by pandora.arm.linux.org.uk with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.76) (envelope-from ) id 1Vypmn-00049f-9A; Thu, 02 Jan 2014 21:26:37 +0000 Received: from rmk by rmk-PC.arm.linux.org.uk with local (Exim 4.76) (envelope-from ) id 1Vypmm-0007EB-Sz; Thu, 02 Jan 2014 21:26:36 +0000 In-Reply-To: <20140102212528.GD7383@n2100.arm.linux.org.uk> References: <20140102212528.GD7383@n2100.arm.linux.org.uk> From: Russell King To: David Airlie , Greg Kroah-Hartman , Sascha Hauer , Shawn Guo Subject: [PATCH RFC 10/46] imx-drm: imx-hdmi: fix PLL lock wait Message-Id: Date: Thu, 02 Jan 2014 21:26:36 +0000 X-Mailman-Approved-At: Fri, 03 Jan 2014 07:21:54 -0800 Cc: devel@driverdev.osuosl.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Enabling the debug for PLL lock shows that this times out almost every time. Having such an event at debug level is probably a bug in itself because it hides this fact. Waiting 5ms seems to allow it to lock. Also, adjust the loop so that we check for success before checking whether we've timed out: we don't want to wait and then fail without first checking whether we locked. Signed-off-by: Russell King --- drivers/staging/imx-drm/imx-hdmi.c | 20 ++++++++++++-------- 1 files changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/staging/imx-drm/imx-hdmi.c b/drivers/staging/imx-drm/imx-hdmi.c index 2022635fffdf..ff00759b4d6f 100644 --- a/drivers/staging/imx-drm/imx-hdmi.c +++ b/drivers/staging/imx-drm/imx-hdmi.c @@ -1032,16 +1032,20 @@ static int hdmi_phy_configure(struct imx_hdmi *hdmi, unsigned char prep, imx_hdmi_phy_gen2_pddq(hdmi, 0); /*Wait for PHY PLL lock */ - msec = 4; - val = hdmi_readb(hdmi, HDMI_PHY_STAT0) & HDMI_PHY_TX_PHY_LOCK; - while (!val) { - udelay(1000); - if (msec-- == 0) { - dev_dbg(hdmi->dev, "PHY PLL not locked\n"); + msec = 5; + do { + val = hdmi_readb(hdmi, HDMI_PHY_STAT0) & HDMI_PHY_TX_PHY_LOCK; + if (!val) + break; + + if (msec == 0) { + dev_err(hdmi->dev, "PHY PLL not locked\n"); return -EINVAL; } - val = hdmi_readb(hdmi, HDMI_PHY_STAT0) & HDMI_PHY_TX_PHY_LOCK; - } + + udelay(1000); + msec--; + } while (1); return 0; }