From patchwork Thu Jun 9 15:10:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhuvanchandra DV X-Patchwork-Id: 9167271 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 52E0160467 for ; Thu, 9 Jun 2016 15:13:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 454B428328 for ; Thu, 9 Jun 2016 15:13:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 39CAA28356; Thu, 9 Jun 2016 15:13:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A0E3C28328 for ; Thu, 9 Jun 2016 15:13:39 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1bB1cp-0005Y9-9m; Thu, 09 Jun 2016 15:12:03 +0000 Received: from mail-db5eur01on0101.outbound.protection.outlook.com ([104.47.2.101] helo=EUR01-DB5-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1bB1cU-0005FN-Tz for linux-arm-kernel@lists.infradead.org; Thu, 09 Jun 2016 15:11:44 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toradex.onmicrosoft.com; s=selector1-toradex-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=67xUsXUpaqOMkn95ceqSRYn1eotTdCrNS9tGYREiI40=; b=d2Udx/LKOrSQ9YJ0MA5VNXvoeNimYxE2ucVLihFoei39vbK5RaXwgtANIzdQfj/H0s1ysnSvBOcRRPH9WViV826nKzj9Rub1pRswbUyb78+nzrOg48ZCfNuQLA1AGJrUuPS1TbV2wxBNxUlMHd6GZV3Lj7ZeOUYPNFjL5Mk7WP8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=bhuvanchandra.dv@toradex.com; Received: from tdx-in-nb-0014.toradex.ext (115.115.243.34) by DB4PR05MB270.eurprd05.prod.outlook.com (10.242.158.24) with Microsoft SMTP Server (TLS) id 15.1.511.8; Thu, 9 Jun 2016 15:11:14 +0000 From: Bhuvanchandra DV To: Subject: [PATCH 2/8] tty: serial: fsl_lpuart: support suspend/resume Date: Thu, 9 Jun 2016 20:40:33 +0530 Message-ID: <20160609151039.20817-3-bhuvanchandra.dv@toradex.com> X-Mailer: git-send-email 2.8.3 In-Reply-To: <20160609151039.20817-1-bhuvanchandra.dv@toradex.com> References: <20160609151039.20817-1-bhuvanchandra.dv@toradex.com> MIME-Version: 1.0 X-Originating-IP: [115.115.243.34] X-ClientProxiedBy: SIXPR04CA0050.apcprd04.prod.outlook.com (10.162.171.40) To DB4PR05MB270.eurprd05.prod.outlook.com (10.242.158.24) X-MS-Office365-Filtering-Correlation-Id: 2aae4f53-8820-4019-30bf-08d390784f46 X-Microsoft-Exchange-Diagnostics: 1; DB4PR05MB270; 2:EjOgfJuxSDUStGFyCVhUuix9jdM7Acm0XVsdsyVWUCFNcDv82z8enPeJDk4mOC+Z3Y/zHSc4ZKSiHg0LD+vVdRdcuGUKZtFHJRoGcz0rxviUvRe5l0IZzHfNljuuKp93TUGvK1G4pgyYsDFFlhX31fkLcsEruPtlwqW+xZGt2rPKQoWpaP9ThHYIM12LHMuT; 3:73U/Lw1M3EhV0XTVrbNG5t7AS1Ajz9Q5dxWY8RtIAa3jh8/i+NCNyj1nD2Rd9egubl6zXYBOOVUBtCYiek/sVaN10ZtFYUXFafBh3HXDxDI48QZ9Qb4m9Xt13VWWqQyu X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB4PR05MB270; X-Microsoft-Exchange-Diagnostics: 1; DB4PR05MB270; 25:5LmGJAOscgqsaR6P3i6ORshyasWz/9GpjjOS3JpeC2M4oHa1w9bJvJpLJA0DD6tGIKFRGC2rPL2ORJrHeq93M1BmnGpyml2dlKQ4x4gO9hr/fAJHcIysAWcsAq3HqLFpDf55vmhjBi8MeEDg8Xvd/o6knOc9fg0RAxbpurxPQNqlEtMQCyZygAwv6wLkwOl82evJhcKMteT/mgPnTJPB5CfgGGltdNCnev+ZTHuSgJcE64E2HHbuKPIN6PEA4lGXYmUmbUrnO0OgHaO78AW9PPU0fNTDFIOCQiwsP9yqMVN8TjDudB9IhZeJ2GAZUlcnmubQu8BQSgIK8ZCIkAv700PYqm0EyTk7X6OWitkBPfI8od0AJDixQwaAE4Rhy7KGhdKwGdA71a1cOelhKrA2ixIlHwj0YVJpI3FVFdiD4qK+RzM4lbs9P6tDlMy8tKkIL4zOh3T9sInGA1ydVtFNX2IgpZGd3GZVkXzEJjAj8GDRVcjOs7DTwtBKuTvkkWAP6Hwr5wz7sQL/AS0kqvYEu9lHalnbnPs5AA3AU3tl17U6rYjnsRcV2cCuQl08Vp6zW5ptywGEbYFqI6M4jQzwmNPW+iSvUD/2FPBW1l9Xft8tE4BDwUsEqyM2E3rrZ245ZDcQtYY++GGJ7sup3G/RJOE2nrKt78PX+sP/QlQFf1+XEifmpTyDpKcGl3klfHe37Zx6kKUU45Yai9lcL3U2mYT+tvPEkhlOTo467J6cGbmlVcVVSWyHAK5Ba1tT48jd X-Microsoft-Exchange-Diagnostics: 1; DB4PR05MB270; 20:hUtGBWFL+BJbpsS00OwmlbC7adH4C4zKP5CjLHeomTbSmZ1N0OnxYlWKQAs8d7naRY412WK8uZw07EN7CgQJJIo5dZntLg+U6NGK3a1k6nM0DGofCaiICzsjhPrMKDYgcDkTCMnXdf6HReXTLF6FGq8gx7LSv0N1DmxeQlEoUG09kGkG4MfSgkujc8M/iHf/I2Gz8BeIs+PLqeqeg5RO1zlGeZJrA7dSPi6Wm75j/5dvkWHlyVmTp63xA8KHi2KdqIjQqPyuQ/RHy8fwc2Ht+bPfstzAbUjF6YaY+F2p/SFwBAkF6WrQkSZQsnkLcnlZIuXobGFTkKI4A8pLhcJaQA==; 4:B+Fkp/mWMrr8q0MgPD+5Y8iXzhSyEzqy2gegaOTIrnpWVd17N9bIyu9WKt3l5NK05Xjhun12A9mqKi2t4oelAFIQEdTUn7VUz1U9jdIXqX0fdjrhwaCweAxRlm1ofWFjHYPSV+8DbSoW5AcKoNJ48w92XzYNDs00tpt0AkwUT5lMTseZ1pye6G0d7LW7OXbcnwM3znp9waolxTh57NsJKNW2/D1bxU+tBN96X8SJnp5VLMwN3Q7CuwHcLsYY3Dhu9YajJaBD1LeQKRzq2pWE/jULxvEaps79qVU5GHN4o8DIYTRJEcSsZb2y6e+GddVndjKbICogsjCqA1yukSi0hL8qNwqs1KV+LPuKZrP3E05qUqwVBxWZD0WsPlFeeitw X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046); SRVR:DB4PR05MB270; BCL:0; PCL:0; RULEID:; SRVR:DB4PR05MB270; X-Forefront-PRVS: 0968D37274 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(189002)(199003)(36756003)(50466002)(42186005)(1076002)(86362001)(19580395003)(69596002)(48376002)(5008740100001)(81156014)(19580405001)(97736004)(4326007)(2906002)(77096005)(101416001)(81166006)(50226002)(2950100001)(33646002)(6116002)(68736007)(2351001)(3846002)(5003940100001)(105586002)(110136002)(106356001)(53416004)(229853001)(50986999)(8676002)(189998001)(92566002)(5004730100002)(15650500001)(66066001)(586003)(76176999)(47776003); DIR:OUT; SFP:1102; SCL:1; SRVR:DB4PR05MB270; H:tdx-in-nb-0014.toradex.ext; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: toradex.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB4PR05MB270; 23:JEK0TFY1yQj3/3pLuGS8FOwOnFhiyt+B5byJ2HYDzj?= =?us-ascii?Q?+2FfCMsyZjDJDIrc/NdLeIqzOV/057qFvTsDtOCsOMLOCyy/0NjJCcsLB39L?= =?us-ascii?Q?cyvnR3XZkctaGlT0QFj4b9m8qCx434KFngiMRYjKYrKazb3mmwSMi6S7qrsZ?= =?us-ascii?Q?4hSBPGuY0ghTq4beaS1d5hwcRSmJfjWVLmax8zAdezHj/c45HZj7tqPhnVnB?= =?us-ascii?Q?7C38SsDxP9v9e5tOJ4xBlzAHdJk1jnqBSdyqlgyubstNxOq+KEYI3U94zlAx?= =?us-ascii?Q?IFf0EruDCnoe12gpfM1ausMMPNdK0UAjlWtF78PxTXV+7vN9U/yuUTCdHdBR?= =?us-ascii?Q?sWzT3k0CubIRTarS5tFCSYTsLCDWnxTwtbqCPbuLLMB8VIbZnzYTAbDh10Ki?= =?us-ascii?Q?l4fpLJSXXWoGfx2zFho7D534zpEuwZ3hxoZmf5j4noOqF9sFeTE2KE84fXPR?= =?us-ascii?Q?VRcHxpP5UE5AKrFUyFz0DG9Scvh8sSWGhzL4mX5jaCcLlARoZenU82S2Ubt1?= =?us-ascii?Q?kxqv/QWSiSj1Oy5n1VAUTM1VFhUhBlGIWJsB9UjOxhriB/dZURLfmz3mB4iy?= =?us-ascii?Q?19OG1tCrSxqfM+BNoWelU6jP0FPnnlvyT7OQIXQj/jtPzq9wuESW01Kc0Gyi?= =?us-ascii?Q?fG2s+788TvcenafYp/Zlf4Rh9q6VcTt2hupU+7vRz/vfEiJLhROKvdf+9+nK?= =?us-ascii?Q?Jim0C6MDBrAgj+WwQD0RqQr+duFxBxWRC3FlPHo8imNiym38Q34L/jBR70y6?= =?us-ascii?Q?oz9nRkkrBhnUD8oAsZLLR88BvBBH4XQJsh89TUwrpm0JTaM0zxWJp7wnnN3h?= =?us-ascii?Q?MNsId7MXBZ+8SOAVF51NWaxGIbYGZ+5NDhZfSGpbTCIzoy/u4HGmUlisFhAM?= =?us-ascii?Q?vfONiuTpQPlZo6PTbCZRyGZpXX2VMWgl6Go7grrUvAg4fvKg/NMeO9VNDx/d?= =?us-ascii?Q?vVRyS5IFWoouX5fI4NkPMNCMj3qpTCHYzksTgF61Y8g5+fuIyuwgQ7N+zZAc?= =?us-ascii?Q?thBRP+b6F4WuUdb+NzqJ+Fu3GYm101FKOfGQj82ZPo/oCm80zRFKq5ijKCaN?= =?us-ascii?Q?V8UQRN64/wKzEIwDJ1yOgTwRb45ELJbNMpdNuAEnTiJSw66xWlSeeniDhpiq?= =?us-ascii?Q?Cz8G/BjNy/9ypv22W3neT+eJPe8CQu?= X-Microsoft-Exchange-Diagnostics: 1; DB4PR05MB270; 5:AIAM6+i8+8+zd5gmgYMEchMUs79moGeAuzkjGwYj9OCzATJx0KFv40F+3mNq42uiInZsVS6nFJDUzG4WCLI3nQ5AO9e+2fighy3TGmJZS8baNsgOhrFtS24OGdw5IeVB6d/1fXgQJD+D5DnvBVQ6tw==; 24:DVsVqYV1/v40xr2JXIYav+ToezQpLZLE5zwrpqWibMb9kWEhKSQiKT91L+1FmdD1eseCvSNZz516o7/eU0ywBtrG7f+6OhudDxe/AWvFV/8=; 7:a2hwY5fJ5tJnY9Z6O5o5ycCNIY/w3YrdSSlY/rB1TR34gNcwQt0SW0oajsrbwvv98lb0mm197Re+33fQmuyVY2uctmaylTAmxq0y4+noG/Ua0ZP/qrFkCTB4lB6faZmK/0tEE4qR9V/qHWvTBSR5Ei/Xcq7simLMN5X3rWZfiUPi3Nx73XKIrINGi+qIESjJ7rSmxBlN56n1sNhPMZ+LkA== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: toradex.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2016 15:11:14.4377 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR05MB270 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160609_081143_217162_DE806595 X-CRM114-Status: GOOD ( 10.07 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-serial@vger.kernel.org, mturquette@baylibre.com, sboyd@codeaurora.org, linux-kernel@vger.kernel.org, stefan@agner.ch, kernel@pengutronix.de, jslaby@suse.com, shawnguo@kernel.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Stefan Agner In order to allow wake support in STOP sleep mode, clocks are needed. Use imx_clk_gate2_cgr to disable automatic clock gating in low power mode STOP. This allows to enable wake by UART using: echo enabled > /sys/class/tty/ttyLP0/power/wakeup However, if wake is not enabled, the driver should disable the clocks explicitly to save power. Signed-off-by: Stefan Agner --- drivers/clk/imx/clk-vf610.c | 12 ++++++------ drivers/tty/serial/fsl_lpuart.c | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/drivers/clk/imx/clk-vf610.c b/drivers/clk/imx/clk-vf610.c index 3a1f244..0476353 100644 --- a/drivers/clk/imx/clk-vf610.c +++ b/drivers/clk/imx/clk-vf610.c @@ -315,12 +315,12 @@ static void __init vf610_clocks_init(struct device_node *ccm_node) clk[VF610_CLK_PIT] = imx_clk_gate2("pit", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(7)); - clk[VF610_CLK_UART0] = imx_clk_gate2("uart0", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(7)); - clk[VF610_CLK_UART1] = imx_clk_gate2("uart1", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(8)); - clk[VF610_CLK_UART2] = imx_clk_gate2("uart2", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(9)); - clk[VF610_CLK_UART3] = imx_clk_gate2("uart3", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(10)); - clk[VF610_CLK_UART4] = imx_clk_gate2("uart4", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(9)); - clk[VF610_CLK_UART5] = imx_clk_gate2("uart5", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(10)); + clk[VF610_CLK_UART0] = imx_clk_gate2_cgr("uart0", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(7), 0x2); + clk[VF610_CLK_UART1] = imx_clk_gate2_cgr("uart1", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(8), 0x2); + clk[VF610_CLK_UART2] = imx_clk_gate2_cgr("uart2", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(9), 0x2); + clk[VF610_CLK_UART3] = imx_clk_gate2_cgr("uart3", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(10), 0x2); + clk[VF610_CLK_UART4] = imx_clk_gate2_cgr("uart4", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(9), 0x2); + clk[VF610_CLK_UART5] = imx_clk_gate2_cgr("uart5", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(10), 0x2); clk[VF610_CLK_I2C0] = imx_clk_gate2("i2c0", "ipg_bus", CCM_CCGR4, CCM_CCGRx_CGn(6)); clk[VF610_CLK_I2C1] = imx_clk_gate2("i2c1", "ipg_bus", CCM_CCGR4, CCM_CCGRx_CGn(7)); diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index fabfa7e..75a2098 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -483,9 +483,8 @@ static void lpuart_dma_rx_complete(void *arg) spin_unlock_irqrestore(&sport->port.lock, flags); } -static void lpuart_timer_func(unsigned long data) +static void lpuart_dma_rx_terminate(struct lpuart_port *sport) { - struct lpuart_port *sport = (struct lpuart_port *)data; struct tty_port *port = &sport->port.state->port; struct dma_tx_state state; unsigned long flags; @@ -510,6 +509,11 @@ static void lpuart_timer_func(unsigned long data) spin_unlock_irqrestore(&sport->port.lock, flags); } +static void lpuart_timer_func(unsigned long data) +{ + lpuart_dma_rx_terminate((struct lpuart_port *)data); +} + static inline void lpuart_prepare_rx(struct lpuart_port *sport) { unsigned long flags; @@ -1925,7 +1929,12 @@ static int lpuart_suspend(struct device *dev) writeb(temp, sport->port.membase + UARTCR2); } + if (sport->dma_rx_in_progress) + lpuart_dma_rx_terminate(sport); + uart_suspend_port(&lpuart_reg, &sport->port); + if (sport->port.suspended && !sport->port.irq_wake) + clk_disable_unprepare(sport->clk); return 0; } @@ -1935,6 +1944,9 @@ static int lpuart_resume(struct device *dev) struct lpuart_port *sport = dev_get_drvdata(dev); unsigned long temp; + if (sport->port.suspended && !sport->port.irq_wake) + clk_prepare_enable(sport->clk); + if (sport->lpuart32) { lpuart32_setup_watermark(sport); temp = lpuart32_read(sport->port.membase + UARTCTRL);