From patchwork Mon Oct 15 23:49:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Hilman X-Patchwork-Id: 1597581 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 AF0C0DFB34 for ; Mon, 15 Oct 2012 23:50:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752664Ab2JOXuB (ORCPT ); Mon, 15 Oct 2012 19:50:01 -0400 Received: from mail-pa0-f46.google.com ([209.85.220.46]:42547 "EHLO mail-pa0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752333Ab2JOXuB (ORCPT ); Mon, 15 Oct 2012 19:50:01 -0400 Received: by mail-pa0-f46.google.com with SMTP id hz1so5338581pad.19 for ; Mon, 15 Oct 2012 16:50:00 -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:x-gm-message-state; bh=Wvzzo2ykhE2hDrN+xomQ1nr7exycIbg8JDNEEyVn8zA=; b=nK7K7pot4Rbu9K+OciKgrjCDdZnxG4c3+R3SGjcvF/VIGkAMJqDmXbmq8A5YVrmeBD UJreDGEVSs+OPXeNQuK+ypnQVLuPxU8DG3Ci0Ejnwi/JN6SwEXB13K3enNAPoUk4PCxk ZA7g/iNXYD+bBSBha7eQ0JT4YQwIcuFDR5LHw56OGKE4mFJdoOEty5Owt+e/dNBEtGTM MONUJ8xzS0NFIL1CEumR16iXa4psEXrEtyoF4Ibmc7IETSVYOKCnz8+ssiDKcw+7Iiur lSLGb9MoculuwQ34chCM/bd6/81j1GXz5jjlrFASV9Plw14jIKc2XcJHt0Icjxla2xwb nvHw== Received: by 10.68.137.228 with SMTP id ql4mr41845429pbb.125.1350345000589; Mon, 15 Oct 2012 16:50:00 -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 mn5sm9759689pbc.12.2012.10.15.16.49.59 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 15 Oct 2012 16:49:59 -0700 (PDT) From: Kevin Hilman To: Tony Lindgren , linux-omap@vger.kernel.org Cc: Russell King , Paul Walmsley , linux-arm-kernel@lists.infradead.org, Felipe Balbi , Sourav Poddar Subject: [PATCH] ARM: OMAP2: UART: fix console UART mismatched runtime PM status Date: Mon, 15 Oct 2012 16:49:58 -0700 Message-Id: <1350344998-16328-1-git-send-email-khilman@deeprootsystems.com> X-Mailer: git-send-email 1.7.9.2 X-Gm-Message-State: ALoCoQk6ftL9W7PkuSbEwP3e7mEwmatTKw5D32Ut4hQ80WAGOCKanWV4f+83HWTArDfqQXTBSKnD Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org From: Kevin Hilman The runtime PM framework assumes that the hardware state of devices when initialized is disabled. For all omap_devices, we idle/disable device by default. However, the console uart uses a "no idle" option during omap_device init in order to allow earlyprintk usage to work seamlessly during boot. Because the hardware is left partially enabled after init (whatever the bootloader settings were), the omap_device should later be fully initialized (including mux) and the runtime PM framework should be told that the device is active, and not disabled so that the hardware state is in sync with runtime PM state. To fix, after the device has been created/registered, call omap_device_enable() to finialize init and use pm_runtime_set_active() to tell the runtime PM core the device is enabled. Tested on 2420/n810, 3530/Overo, 3530/Beagle, 3730/OveroSTORM, 3730/Beagle-xM, 4460/PandaES. Reported-by: Paul Walmsley Suggested-by: Russell King Cc: Felipe Balbi Cc: Sourav Poddar Signed-off-by: Kevin Hilman Tested-by: Tony Lindgren Reviewed-by: Felipe Balbi --- Applies against v3.7-rc1. Fix targetted for v3.7. I'm still not entirely sure why this has worked up to now on OMAP3/4 but not on OMAP2. Even so, this fix is needed for all platforms to ensure matching hardware state and runtime PM state. arch/arm/mach-omap2/serial.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 0405c81..37b5dbe 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c @@ -327,6 +327,11 @@ void __init omap_serial_init_port(struct omap_board_data *bdata, if ((console_uart_id == bdata->id) && no_console_suspend) omap_device_disable_idle_on_suspend(pdev); + if (console_uart_id == bdata->id) { + omap_device_enable(pdev); + pm_runtime_set_active(&pdev->dev); + } + oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt); oh->dev_attr = uart;