From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752249AbcF1HHZ (ORCPT ); Tue, 28 Jun 2016 03:07:25 -0400 Received: from mail-db3on0138.outbound.protection.outlook.com ([157.55.234.138]:43221 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752215AbcF1HHU (ORCPT ); Tue, 28 Jun 2016 03:07:20 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=bhuvanchandra.dv@toradex.com; From: Bhuvanchandra DV To: CC: , , , , , , , , , , "Bhuvanchandra DV" Subject: [PATCH v2 3/9] tty: serial: fsl_lpuart: support suspend/resume Date: Tue, 28 Jun 2016 11:02:29 +0530 Message-ID: <20160628053235.5114-4-bhuvanchandra.dv@toradex.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160628053235.5114-1-bhuvanchandra.dv@toradex.com> References: <20160628053235.5114-1-bhuvanchandra.dv@toradex.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [115.115.243.34] X-ClientProxiedBy: BM1PR01CA0056.INDPRD01.PROD.OUTLOOK.COM (10.163.199.28) To HE1PR0501MB2089.eurprd05.prod.outlook.com (10.167.246.9) X-MS-Office365-Filtering-Correlation-Id: 178338cf-e14f-423e-b1a5-08d39f15b7a3 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0501MB2089;2:F44RaX0WOui2Gjhv1vVXpncvTC+EPn49u+/6D49TWSzQEVlNxZOv0XUNG7RFPwpVIB0Po3b9BUR/3VCN/sXH/5K1QxDRkxF/VutP18fq/bA1YnxUKNs2JO/u4+RP5mBbMf/psmkdTCYO6HfJmjr1odnVE6FaILsVcNdU7/jClkeoHtIl4HzCKQlZ9fJrcp27;3:QIdcRQw+RC703Lxt7sz2r1lglM3GPGpdO+ncLDV3GNOvLky3Vnwa+RyCr9hWI4i62jp+Fnk3DwB7DeqonlYDR8XvIWUdcinEqW51IOuflUVlyWF9BbixDHpM1Uxbezrm;25:+qSlnISZ6ASWiJt2Ghls3kkg9onBW/Fh3mii0Tytt5Vh6aJoKcGyOGt+L7b7COJcI67O30/VNRnUmTwfgN4h1XvwQfN5WIpY24wKbuZpd7w6QIuNkqV8tJuLq4jZU5+QIOTYEs6VMf64rxIxPE6oNlMYl/PNZ+PfgFjEwnzLoIVGKki22kR8JOyn3gyueBfN/cSOsoycGYMpcZbckjKKQEOXSxKkyuBNFSN8OgpCWwWKuVIFPITGRL2C/LCKuiW+LkaIQQynY7QSsMEgLbzHZ2y0cDBQIrVB4Cf8p/WJIRkssndrOlAp6mPXLK4ZRTwZ6PDTb6V4Yy0fv6pgEtl5J878q3chfdEG0QVUaxQ65GHtRA8VSThGbpQhZqsDoN5X5zzrLYvkhjtMaRkJz6ckaS7i5ltnSgNeVbE4rk89UEs= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0501MB2089; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0501MB2089;20:JEMKxnJ68zkQhTmUsyJ2ZBoEQsMZNnafVH/qej5doDSSGT3QLK0d5zG0xPxYSel+L9BR8K04c85Pn0EjT5tFzyj29kQwPJ/p0nRbfEZbFG1lB/7KWF5xMzI/T4yOJSWRvypKRIjWORKnheSWZNCxoq9oyEhdTUHktHstdMRQzQujwXE14SQkhQoUFOX1YLsHYyCczcpb+hALTHxxzz1lui8WbQ3N/a9MBIL2sZWD24S8l8KDMICGk+Hq214pFeIG+i4lKTE0g/JgDY2CxUBtBxgEQOAfe3CHz7npJCxxmAR9LvoOgOHNf4OuHE9qTeeCBvcONpgpYCqCcXiwTdVfKw==;4:oBctmNGp+LFJ544lLWQ1avPiAKsDIBDAAkHjW/fm3PwZfSo7QFl5/lLaG16eH3pWM6anJpw97rAGCHeZ97Iwx9Iae60GQ7xE6UIvry0eODkkGSgWAX1h9cECHdGXJQkzfx+/ne29mKvgVpNgR4A6rs5liX45e+yPVItXg7gwUvQBPsxVzNb4RhHCbLraTa77cq+/dsOz0/CfrYG8wOS5+ugnjGdygyZX0k4O4A8DcawdVLPy/JunCccHOF/PB8MAFV913XQV5meGPKktkCBTZprDrmsI6sxRmOGGjOQZnkopzyf272wgmggUxVgI9eIRmg/fw+TZw7Te/eJarMA1kidl9hPauB6YmHdFSbxLMXiK8f1rdw47Hxl7DyeyLpoQ 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)(10201501046)(3002001);SRVR:HE1PR0501MB2089;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0501MB2089; X-Forefront-PRVS: 0987ACA2E2 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(189998001)(50226002)(110136002)(107886002)(7846002)(47776003)(66066001)(36756003)(8676002)(101416001)(1076002)(48376002)(33646002)(6116002)(81166006)(92566002)(3846002)(50986999)(586003)(81156014)(50466002)(2351001)(2950100001)(77096005)(105586002)(229853001)(86362001)(76176999)(5003940100001)(68736007)(305945005)(106356001)(4326007)(7736002)(53416004)(4001430100002)(15650500001)(19580405001)(19580395003)(69596002)(42186005)(97736004)(2906002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0501MB2089;H:tdx-in-nb-0014.toradex.ext;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0501MB2089;23:xkyWnMKupZypikKClswn727JpqnR0IvPjnRU6l/?= =?us-ascii?Q?14ScZMPpxr/E1ktx6mTZZSRatQ56LkfejTg++23vYeT0ftQ1/vCPIYG46uWS?= =?us-ascii?Q?OaG3zEpvRPG1LknZR/gRM5r7XYC33WHTTLI/p+gk7Kij/vkDxzLezoa19kM4?= =?us-ascii?Q?RW59aWCzxOG4ei8GDDgHYri7lNOEKM88cHXQgLj4zuF/oWLljOyJZyGXnmKg?= =?us-ascii?Q?WZhD8DKQz9VNQqISxA24v8ARS2/U4F753OOUbYtk9hHvhnwcMJz5OCitQf8E?= =?us-ascii?Q?5VQUOfQ3i14SWeTSascm07TgpVbjTaKLwCcq2wfullEIN9NQel14h0vwNNTg?= =?us-ascii?Q?xBsCmK7gIsIY9KK/go27WO8Jl9Mb6zCBgJwR6XoP16wE7myJ7v8roKj7b3es?= =?us-ascii?Q?3cil5dKKZyoBdoLzYUNKVU1kT68gwvgy/1r9dclwucezaxGUVZYJZWEJ09w3?= =?us-ascii?Q?xeeod0rzITqUYFglIX5eM5ej8/DLlep5WSoU5pYPOrOAOAJyCA1XxZcz/zUb?= =?us-ascii?Q?T82ElH5UVab1ON+s/4asnLvl8Vbdu/kjD1S6WvXQo+yKy8ZUDpyHWjw54eyX?= =?us-ascii?Q?HCA2rqGscJZjgXAkgjHLo02gG8Tn6H4owdAC9EKUuyO9TrbpId83bQKNJwa3?= =?us-ascii?Q?0rR/mMs6H4l3UD4SxZt09ZvS/GqC4Ai6HQO+0JBnFyeTh2Tqgf3//0xJvJtD?= =?us-ascii?Q?qgcHyMlx+24eDAS+SnEkAgyzwHvMykYGL1VdVMpQIMJhazHSahTaFMd8gBL+?= =?us-ascii?Q?55b1wtXq6iOEQ9XmCKk+drhlTTuE6wi7ih3CDfvwO5MGyeWvla99ySpA12Kl?= =?us-ascii?Q?OITEAhqE6mK5owg0FIlbWSEmosjmd18mTmGOMGw13swuK+10GMru9LqgIh80?= =?us-ascii?Q?OndZEHXQ28kqYuW0bP1u5lVNEOcqOz4PBSiUmwWyKALmONesSFFyqz/rOtsT?= =?us-ascii?Q?k9jDJZe6U0rDvGqlkvZUWnflfVF49smAdpmzQ5xBmHgLbB0w0OuxYG6aGlIX?= =?us-ascii?Q?BV4DuX3Ft56ctBprJLLbqkeUMC4t6XBc47kUcRJ7dgS7KbQ1+6rRLWqFMziG?= =?us-ascii?Q?9l0PKEipDJ0sw6iCDKx9iB6QIqjod5aXZA8MlYjkFQRnIc9A90/HsqZqxbDs?= =?us-ascii?Q?IbvmwsblO/juIc6nArN4KheiSL3mMA3TZBTcO6xfF5v1Oj3oPhmyJlfouxT/?= =?us-ascii?Q?yppDXhMqOlilip8KUw8quyQYdVRgJyDjCt0+t?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0501MB2089;6:kSOSk2ZIusED2hBtB5wBKd5UbW7ZtRgxM172aabnR9ENBQIShVQ9waSPsIKURs1FSg+Idr5sCI3JXq5J5mP8s11CEK1BF6B6HLPUbJAXXkaLNrpB2LFgYeeTJbcgDWK2BmjW8peT87eR5qzIlk2OPuvswApg+ySz7s3CZokXxes9+SB8zShyysZ4E8rYYjaGqC7XN+hQr5m8A86YpQDcV6Nxk7mSja0pvnlc1HqybQbG8CroKFRsK+9Ajt3DEpToQlIhiCjvz+xsyFAw08amKqyrjRZqPp/XxAKwU89iq1sk9wYpp8gzdW8j+xqpdpzi;5:gFVkYyuvbwy7F57MkFAWr7PUhADU2EEydbk6FnLs/B/+SjYKwehAifIONSxEoToqtRGU0tQgHOsDrD8IYdtT7vnMg4KkEpmTHz56c/cduQe/Z1/F8URDVXG5bTrqEghPcMSTTOhGDr1quhpkVBzfwA==;24:redzc08cNatkh0j6pHQoksBrhoH5QS67vjY9zM9OQo2ty8w2MWHl4jf7I89t0zA3auJouByCKm7WcqV/3mIYfaKhrJYMAITY728irufaP/A=;7:osapLMmWLF4incks3xVZGrT8EPLw81tbWHoY/lxO8mKFYWqcUEjjvgxzHYV2djJkQc1xm/OQgrP+CfjjkQT3e7O7nVAV2Z0wYC52sdVAbfsP1fwQl5R6fU2gZh7OWdhT5bRckCbKECCoakNUFV/PAhbGK+G17dKVF9lT0dMrIGwX/pF4HCk7qBakw5UBQkhXg/klRkTE5yhACbJsDb+o8QFehxalDGL9f7vNc5Y+ucBfL5lGHZa8qAg3uj4C9Dchgru1bzkhsb0j2oH4wIgu0g== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: toradex.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jun 2016 05:33:19.0258 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2089 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stefan Agner Add suspend/resume support. Signed-off-by: Stefan Agner Signed-off-by: Bhuvanchandra DV --- drivers/tty/serial/fsl_lpuart.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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); -- 2.9.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhuvanchandra DV Subject: [PATCH v2 3/9] tty: serial: fsl_lpuart: support suspend/resume Date: Tue, 28 Jun 2016 11:02:29 +0530 Message-ID: <20160628053235.5114-4-bhuvanchandra.dv@toradex.com> References: <20160628053235.5114-1-bhuvanchandra.dv@toradex.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20160628053235.5114-1-bhuvanchandra.dv@toradex.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: gregkh@linuxfoundation.org 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, Bhuvanchandra DV List-Id: linux-serial@vger.kernel.org From: Stefan Agner Add suspend/resume support. Signed-off-by: Stefan Agner Signed-off-by: Bhuvanchandra DV --- drivers/tty/serial/fsl_lpuart.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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); -- 2.9.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: bhuvanchandra.dv@toradex.com (Bhuvanchandra DV) Date: Tue, 28 Jun 2016 11:02:29 +0530 Subject: [PATCH v2 3/9] tty: serial: fsl_lpuart: support suspend/resume In-Reply-To: <20160628053235.5114-1-bhuvanchandra.dv@toradex.com> References: <20160628053235.5114-1-bhuvanchandra.dv@toradex.com> Message-ID: <20160628053235.5114-4-bhuvanchandra.dv@toradex.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: Stefan Agner Add suspend/resume support. Signed-off-by: Stefan Agner Signed-off-by: Bhuvanchandra DV --- drivers/tty/serial/fsl_lpuart.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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); -- 2.9.0