From patchwork Thu Nov 10 11:38:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sherry Sun X-Patchwork-Id: 18086 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp105333wru; Thu, 10 Nov 2022 04:11:49 -0800 (PST) X-Google-Smtp-Source: AA0mqf73aXVumyLeRKLe5QWGTVO6y4mPGYS4vOuk/4JMUlOAbEofEwjw6zE5eSZ7ONaNNeox26t6 X-Received: by 2002:a05:6402:1ac7:b0:466:b14b:497c with SMTP id ba7-20020a0564021ac700b00466b14b497cmr9491096edb.210.1668082309621; Thu, 10 Nov 2022 04:11:49 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1668082309; cv=pass; d=google.com; s=arc-20160816; b=RID5Cz5OjsO8iJ/mH7Bdtw8C0dKT8NUK2Xv5rsE4uey+bF4fydWUaY3rVFMf0CinGs /9y50/jjx8toIsmbv4GPTeLr4VUaydu+rUfg8KG4CR9PA8m5F5OKge4eZXJb7aUZIZU7 tsEJSTRrPQkZgfaaI/U/o24WpElwJics9Kr1yLAsn9GjlDi8xmJOVeRKD2Cnv7b5i9wg QO2q759AHAoaochh3kSRk0X8IJegpAywj4pUbYsY7Xy0RMvKpSJOLOjch1yLmr6rVQE7 YkhYe7jvbORHDUU5GdNs8zueeKKJLpCGmMqsxvYctwztCL2q8+SB8oweTBZwlWEkcIoU 5CMw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=jIpt47kPPYoxgkCj5/ylsWolAtZd0zZBIjJDtcvg/x8=; b=YLmnZlNh7tl/oS8BRUuc5qdYIJOF+UZEdqPppVQHamgELc6dSO9nly/aBCIf1PtCI7 SFNY6DuQdCMRHNnv/+MBbr16J1azJXx/kPEdSeT+iEAFhX35vuhLvvvPL5RYmHdU+1dF mDhqoB1hAMHZaQYMZtS3ogOhpgYQYRsm/4x0Qxjg/z1bTbwtin3AYZqAZsQrcZnF6iOZ ztUAn3qEWMGOF/GT2LTUug2f5Sy5cW7ImIw0FANxNE44w6sc/+exgQe1/x2bLFK0AXVS 3Vkl122Q11m2+9nvjdOjz3SdFGL8paMUJwgU3JhnSd2zi5SKn/DdXPxBE3kV/UyOXcYW KCdQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=NDBHTvY0; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e20-20020a17090658d400b0078d3ab37efasi5255820ejs.84.2022.11.10.04.11.24; Thu, 10 Nov 2022 04:11:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=NDBHTvY0; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230149AbiKJMKA (ORCPT + 99 others); Thu, 10 Nov 2022 07:10:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230034AbiKJMJy (ORCPT ); Thu, 10 Nov 2022 07:09:54 -0500 Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2072.outbound.protection.outlook.com [40.107.247.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38F105F57; Thu, 10 Nov 2022 04:09:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j0G75KE3ecpyYCfxvxeMa93D9criOC4I0EUbyuyeXPMb6lZw7D5L/pVgzRxDYsOR9oBR1kHJGWfEcqlBkRQC2xuE/OYPuhJLENam+i2OVfK32r1W2AQwjPiQ6TmphcvLSjeDo1S/7KPANHM4GVF5RCP23RTqqwCFToGqJY427tgfGb0nBAyXthj+TQy2EnM7vBMju1a4dA9P+bKJhU0eH/S5Icg29asC16/GqOLracrwWhVHagK2wv4LuYId+mM0+rme1SXSYYNcbMujnEHFNiWrHNxSiZyGdp4er02UdPRPGrTiJAs/PUJPQxsYDuiQuKW0bgsaJ3qXlDEXlf3IiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jIpt47kPPYoxgkCj5/ylsWolAtZd0zZBIjJDtcvg/x8=; b=aq9fPXpxjrOr9fnsm7Lauwg3J2mX4zii18BMhmNwUuvcH6nRkP7ycytmHcQgWiEDGILmz5DZFA1b8dTKBqHsJJTi375dn75zi5TXYkcFIzBmDB64HPb2KEytcn6V51rzzog2bzB3caFCpTo7oy++8nGCx2+xNPpWOcDg30kL3BLHXjw/v8mBrl//Wg3+39UxhwDeFxYcoS/HeBkk9v8W1yE1wBmDlkIXE8o6ypJhx5XVFMfhEq5AcSCLNTlz7WNSunSVnpW9a43UV/u0bIAjvTP57RwoxPBywlZvpK81yVXq2/av8WTm/MLPvniNpuO+xO3cvHBcB7Ox2JXwHni0Dg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jIpt47kPPYoxgkCj5/ylsWolAtZd0zZBIjJDtcvg/x8=; b=NDBHTvY053D26bQ3P3yCnQrA/FAqfu7T5+cBUEwTk54w+uE/sutkOP+uwYWI8pijAPZVnkbJiMHYNCDUYXs62KZS92nke8P/9Hatvu8JJeGP7EvdyA7Xei4ondFWzQiM8ba+cmy0Y2YQBFUIY+2dYTiJiX1LbhkUad4qsCRkSMI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8404.eurprd04.prod.outlook.com (2603:10a6:20b:3f8::7) by DB8PR04MB7097.eurprd04.prod.outlook.com (2603:10a6:10:12a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.13; Thu, 10 Nov 2022 12:09:49 +0000 Received: from AS8PR04MB8404.eurprd04.prod.outlook.com ([fe80::71f1:f7bb:5039:e55d]) by AS8PR04MB8404.eurprd04.prod.outlook.com ([fe80::71f1:f7bb:5039:e55d%3]) with mapi id 15.20.5791.027; Thu, 10 Nov 2022 12:09:49 +0000 From: Sherry Sun To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, linux-imx@nxp.com Subject: [PATCH V2 1/3] tty: serial: fsl_lpuart: enable wakeup source for lpuart Date: Thu, 10 Nov 2022 19:38:57 +0800 Message-Id: <20221110113859.8485-2-sherry.sun@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221110113859.8485-1-sherry.sun@nxp.com> References: <20221110113859.8485-1-sherry.sun@nxp.com> X-ClientProxiedBy: SG3P274CA0016.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::28) To AS8PR04MB8404.eurprd04.prod.outlook.com (2603:10a6:20b:3f8::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8404:EE_|DB8PR04MB7097:EE_ X-MS-Office365-Filtering-Correlation-Id: dfc4ec52-c21b-4d89-e556-08dac314773a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AkM5/eceH4un1BOQAV12da/kOwodPJsUUuUxhfcY5sy04ydF+9osa6ORSbB2nawdabIjCBfOv/hjbtcD6MVfW8yJ/00mpGnikuxCvWxdusM6TqMveTSF5b6JvP8MxD+e6JmqadgueLcFlDIeb0WeROgW5mpmRRu1JQrugT5PFcwAi2VNLrDb/9VoJoCn2MAtqsDjhEaVBAZvjilAIAXRoMwtq8lJ42DembttyHch2G/vSnqeula1tcLG9+YwJxHwk0AUT/JEqD4UlPvcRxnyXgh/+0EDqItf9Ma2brxeKqhZjRcpHalhOW2D6O2yn7mMaiF45EUCr5LfaGmNtAwPiYiUpNUTROk2fxeXfkorPjKIi6TfT3lcZ4CDKKbHOJA1bMQIVt5kHiQV+dwO3iBY9EHeC4AeY5/FuaEdMA/t+eRVkvw0PAshoDbyNa1Gv2YzGCNebzvCRQmugvxMxX3ep4GV+6VlwpWeF2dwj1cMJSxYXaSyWLVlVUImQx9FlwrjPeCdYhMHyYIQtki9kkjxeVRRTJHWtk2MjDEYSeITM+hodpwXRWXQY6L9bbtSLwHePRxZ3vrYjGzH9suJubIOigRVVRdBmK8D+yXQvKxNa3V5t+FX4HFMqlkQ26BxvFddT/B0z4fElJW0BjgCIwqBggSzMwqdBkvO5CeTyHI6UsF5spv/Zl2XCsi+X+pxDrVknxe/NnpqIrYuZh7U+eE7QUJHpZvXuB/bjNDRx0jY0YNW2KS6+cosn7UfqaEMnVSd82+zUyaNMk3tTXUvEfk6y4aZJhHO5/1GO1truI+3ABc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR04MB8404.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(366004)(346002)(376002)(39860400002)(396003)(451199015)(38100700002)(38350700002)(6486002)(478600001)(6666004)(8936002)(2616005)(316002)(52116002)(6506007)(66476007)(6512007)(41300700001)(66556008)(66946007)(86362001)(36756003)(26005)(30864003)(83380400001)(44832011)(8676002)(4326008)(186003)(1076003)(2906002)(5660300002)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: B6R/kCmzjMbIvkm+z/D4vUfJfa/Wzogr44U+gxmqK2i4DrSQ+ALgdhThI44Dp6t+ZtRE7xQZXib4FW746jmORwqT94/IaDrdiiPIFi53LW3Yp8gtO0v5tKijygRHtuqAOGRILdCpH0Ev5txZfittFQzEAv+1yo86fzChzOJ7/CjpJg6LNbRjj1JMwkp4CL1JTIyUveev0oAZ+slA847ndCK9DeuzjjdjomJBX+dZE2vAFlPsLtEKeGzBwYFhvenVg79+RwmOLoyAXWakly0/pv+8RoXyGXinW0sujU2QuEHLDi0r7oLJ8rMed+rsNc28iJ+6u7prHSVAKkULIZddvUorkkvgFFpZeREC673QFrFq29H7VxcgmbYyAdNWKT30ALdw+5CvoG9P83Ou0sSId3M92omqmh+JaUi1R9MjUP1esi0Eto4ORWhjKf760DeBC3aXUIYtPnJnch0F6MiFag5bfV3a5RBpoyYL8gNHyhgPywWmb6WOJI7QuejhbYT1vUCdYpBnq+vdWYKcvapnI49cMgHg3NC9Gj+kEKzhQxFTlYO1i8850CFzpoHAmfMfbvrDaIJTaXIR9xpZ1P3aegcAVfHVZENBHwcJEbrt7uxru/6uRf1hdo+aeegCI/SkTnLbc1XlYAGWPCseuNN1/QPYq8yOA6zB0UUSaDpuhaqqf188aPIWRQYhzDkgnXO/22nXglgG6iRZAyW2FVx+I3uKzDZBDVX/CyAPP5CKElEnyQln39GVG84N8rk/6ZBZTh+Lff441ochIpGMBYc0fN8lLY4Qzt7umO7N8aiYxomhYLhWtmQiqYrh2M47P+j40EjZ0PSVKhuvUZvm5sIWzkO8RFwnccsUkYVt7FaZBNntaMoEcbnWLYaeyODJD53DNgAn/TAqDgbG+EGlG5O5FSG7vWxAeJPST9sPSeObdOmNb//uChHsI12ivEZHR4smxfkwMCgKs31O96vz4VCU7ShqqM1KOZgnHJWP469vQGt+xjNuNPRhKSrX4BBfvM91pX4hD6byeno1swfDLSYfYCM/8JH04Af2q3e24sEtV6f03aen2Q/de5ESI+5qPb2YXnmuwR/4vkC5UjenPWdUgMeEU3nAhF4sxAHA09fAxj1sZMpNqx5d+SlgENvFiV4RgWJZxolHSyxSrmLmhroDVKLECk9IaOd7rQE6rmpoj8lOinXy3Ae99O4efPaWP9zryTTCNiFYUhnI0nUHKb+sxfLdvRWT7pOPBNG6RcGZe/rrrPzm8gVhoOxp6KoiSVRxZXaMRCkXb4dy2+HyeLSAQWn6149qTEt48XChshToUKBgQ1HMmoYTdBzJCwXU0hOaWddNa2nKodVbsDdCs1h9qbMWzdmSh7fMlhi+zAb/c3zdHJs7CjzzOBP49zI6EK3JQRmzbycOVZQxCdyOhyWaJheUUOd0oYMewG47geenvG4s/KNXTr7xyo/zvOXpkcutsyQQD6gQFlQbUlTaM3rseKPoupNZD5wn7QeIfcr9BEIdEqg372dKPazAQT2HhbLdPDOsUf7YA9xnDxpFuSpmE/18644xQ5Y9+97csOwzEKaPNS3MabmjFbAFRATJePfN X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dfc4ec52-c21b-4d89-e556-08dac314773a X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8404.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Nov 2022 12:09:49.5813 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: q5LSEdUV81HZAqZOoBaH8yhQsF7Eh6NALB+MCP8ZpBDGpqrCuTR145UHLlshInaaxmzxh2R0druLG4e9vm51uQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7097 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749111075472742907?= X-GMAIL-MSGID: =?utf-8?q?1749111075472742907?= LPUART supports both synchronous wakeup and asynchronous wakeup(wakeup the system when the UART clocks are shut-off), the synchronous wakeup is configured by UARTCTRL_RIE interrupt, and the asynchronous wakeup is configured by UARTBAUD_RXEDGIE interrupt. Add lpuart_uport_is_active() to determine if the uart port needs to get into the suspend states, also add lpuart_suspend_noirq() and lpuart_resume_noirq() to enable and disable the wakeup irq bits if the uart port needs to be set as wakeup source. When use lpuart with DMA mode, it still needs to switch to the cpu mode in .suspend() that enable cpu interrupts RIE and RXEDGIE as wakeup source, after system resume back, needs to setup DMA again, .resume() will share the HW setup code with .startup(), so abstract the same code to the api like lpuart32_hw_setup(). Signed-off-by: Sherry Sun --- No change in V2. --- drivers/tty/serial/fsl_lpuart.c | 281 +++++++++++++++++++++++--------- 1 file changed, 200 insertions(+), 81 deletions(-) diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index ebbc0539c56e..2654d86f52a4 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -1628,10 +1629,23 @@ static void lpuart_rx_dma_startup(struct lpuart_port *sport) sport->lpuart_dma_rx_use = false; } +static void lpuart_hw_setup(struct lpuart_port *sport) +{ + unsigned long flags; + + spin_lock_irqsave(&sport->port.lock, flags); + + lpuart_setup_watermark_enable(sport); + + lpuart_rx_dma_startup(sport); + lpuart_tx_dma_startup(sport); + + spin_unlock_irqrestore(&sport->port.lock, flags); +} + static int lpuart_startup(struct uart_port *port) { struct lpuart_port *sport = container_of(port, struct lpuart_port, port); - unsigned long flags; unsigned char temp; /* determine FIFO size and enable FIFO mode */ @@ -1645,15 +1659,7 @@ static int lpuart_startup(struct uart_port *port) UARTPFIFO_FIFOSIZE_MASK); lpuart_request_dma(sport); - - spin_lock_irqsave(&sport->port.lock, flags); - - lpuart_setup_watermark_enable(sport); - - lpuart_rx_dma_startup(sport); - lpuart_tx_dma_startup(sport); - - spin_unlock_irqrestore(&sport->port.lock, flags); + lpuart_hw_setup(sport); return 0; } @@ -1676,10 +1682,25 @@ static void lpuart32_configure(struct lpuart_port *sport) lpuart32_write(&sport->port, temp, UARTCTRL); } +static void lpuart32_hw_setup(struct lpuart_port *sport) +{ + unsigned long flags; + + spin_lock_irqsave(&sport->port.lock, flags); + + lpuart32_setup_watermark_enable(sport); + + lpuart_rx_dma_startup(sport); + lpuart_tx_dma_startup(sport); + + lpuart32_configure(sport); + + spin_unlock_irqrestore(&sport->port.lock, flags); +} + static int lpuart32_startup(struct uart_port *port) { struct lpuart_port *sport = container_of(port, struct lpuart_port, port); - unsigned long flags; unsigned long temp; /* determine FIFO size */ @@ -1704,17 +1725,8 @@ static int lpuart32_startup(struct uart_port *port) } lpuart_request_dma(sport); + lpuart32_hw_setup(sport); - spin_lock_irqsave(&sport->port.lock, flags); - - lpuart32_setup_watermark_enable(sport); - - lpuart_rx_dma_startup(sport); - lpuart_tx_dma_startup(sport); - - lpuart32_configure(sport); - - spin_unlock_irqrestore(&sport->port.lock, flags); return 0; } @@ -2778,97 +2790,204 @@ static int lpuart_remove(struct platform_device *pdev) return 0; } -static int __maybe_unused lpuart_suspend(struct device *dev) +static void serial_lpuart_enable_wakeup(struct lpuart_port *sport, bool on) { - struct lpuart_port *sport = dev_get_drvdata(dev); - unsigned long temp; - bool irq_wake; + unsigned int val, baud; if (lpuart_is_32(sport)) { - /* disable Rx/Tx and interrupts */ - temp = lpuart32_read(&sport->port, UARTCTRL); - temp &= ~(UARTCTRL_TE | UARTCTRL_TIE | UARTCTRL_TCIE); - lpuart32_write(&sport->port, temp, UARTCTRL); + val = lpuart32_read(&sport->port, UARTCTRL); + baud = lpuart32_read(&sport->port, UARTBAUD); + if (on) { + /* set rx_watermark to 0 in wakeup source mode */ + lpuart32_write(&sport->port, 0, UARTWATER); + val |= UARTCTRL_RIE; + /* clear RXEDGIF flag before enable RXEDGIE interrupt */ + lpuart32_write(&sport->port, UARTSTAT_RXEDGIF, UARTSTAT); + baud |= UARTBAUD_RXEDGIE; + } else { + val &= ~UARTCTRL_RIE; + baud &= ~UARTBAUD_RXEDGIE; + } + lpuart32_write(&sport->port, val, UARTCTRL); + lpuart32_write(&sport->port, baud, UARTBAUD); } else { - /* disable Rx/Tx and interrupts */ - temp = readb(sport->port.membase + UARTCR2); - temp &= ~(UARTCR2_TE | UARTCR2_TIE | UARTCR2_TCIE); - writeb(temp, sport->port.membase + UARTCR2); + val = readb(sport->port.membase + UARTCR2); + if (on) + val |= UARTCR2_RIE; + else + val &= ~UARTCR2_RIE; + writeb(val, sport->port.membase + UARTCR2); } +} - uart_suspend_port(&lpuart_reg, &sport->port); +static bool lpuart_uport_is_active(struct lpuart_port *sport) +{ + struct tty_port *port = &sport->port.state->port; + struct tty_struct *tty; + struct device *tty_dev; + int may_wake = 0; - /* uart_suspend_port() might set wakeup flag */ - irq_wake = irqd_is_wakeup_set(irq_get_irq_data(sport->port.irq)); + tty = tty_port_tty_get(port); + if (tty) { + tty_dev = tty->dev; + may_wake = device_may_wakeup(tty_dev); + tty_kref_put(tty); + } - if (sport->lpuart_dma_rx_use) { - /* - * EDMA driver during suspend will forcefully release any - * non-idle DMA channels. If port wakeup is enabled or if port - * is console port or 'no_console_suspend' is set the Rx DMA - * cannot resume as expected, hence gracefully release the - * Rx DMA path before suspend and start Rx DMA path on resume. - */ - if (irq_wake) { - del_timer_sync(&sport->lpuart_timer); - lpuart_dma_rx_free(&sport->port); - } + if ((tty_port_initialized(port) && may_wake) || + (!console_suspend_enabled && uart_console(&sport->port))) + return true; + + return false; +} + +static int __maybe_unused lpuart_suspend_noirq(struct device *dev) +{ + struct lpuart_port *sport = dev_get_drvdata(dev); + bool irq_wake = irqd_is_wakeup_set(irq_get_irq_data(sport->port.irq)); + + if (lpuart_uport_is_active(sport)) + serial_lpuart_enable_wakeup(sport, !!irq_wake); + + pinctrl_pm_select_sleep_state(dev); + + return 0; +} + +static int __maybe_unused lpuart_resume_noirq(struct device *dev) +{ + struct lpuart_port *sport = dev_get_drvdata(dev); + unsigned int val; + + pinctrl_pm_select_default_state(dev); + + if (lpuart_uport_is_active(sport)) { + serial_lpuart_enable_wakeup(sport, false); - /* Disable Rx DMA to use UART port as wakeup source */ + /* clear the wakeup flags */ if (lpuart_is_32(sport)) { - temp = lpuart32_read(&sport->port, UARTBAUD); - lpuart32_write(&sport->port, temp & ~UARTBAUD_RDMAE, - UARTBAUD); - } else { - writeb(readb(sport->port.membase + UARTCR5) & - ~UARTCR5_RDMAS, sport->port.membase + UARTCR5); + val = lpuart32_read(&sport->port, UARTSTAT); + lpuart32_write(&sport->port, val, UARTSTAT); } } - if (sport->lpuart_dma_tx_use) { - sport->dma_tx_in_progress = false; - dmaengine_terminate_all(sport->dma_tx_chan); - } - - if (sport->port.suspended && !irq_wake) - lpuart_disable_clks(sport); - return 0; } -static int __maybe_unused lpuart_resume(struct device *dev) +static int __maybe_unused lpuart_suspend(struct device *dev) { struct lpuart_port *sport = dev_get_drvdata(dev); - bool irq_wake = irqd_is_wakeup_set(irq_get_irq_data(sport->port.irq)); + unsigned long temp, flags; - if (sport->port.suspended && !irq_wake) - lpuart_enable_clks(sport); + uart_suspend_port(&lpuart_reg, &sport->port); - if (lpuart_is_32(sport)) - lpuart32_setup_watermark_enable(sport); - else - lpuart_setup_watermark_enable(sport); + if (lpuart_uport_is_active(sport)) { + spin_lock_irqsave(&sport->port.lock, flags); + if (lpuart_is_32(sport)) { + /* disable Rx/Tx and interrupts */ + temp = lpuart32_read(&sport->port, UARTCTRL); + temp &= ~(UARTCTRL_TE | UARTCTRL_TIE | UARTCTRL_TCIE); + lpuart32_write(&sport->port, temp, UARTCTRL); + } else { + /* disable Rx/Tx and interrupts */ + temp = readb(sport->port.membase + UARTCR2); + temp &= ~(UARTCR2_TE | UARTCR2_TIE | UARTCR2_TCIE); + writeb(temp, sport->port.membase + UARTCR2); + } + spin_unlock_irqrestore(&sport->port.lock, flags); - if (sport->lpuart_dma_rx_use) { - if (irq_wake) { - if (!lpuart_start_rx_dma(sport)) - rx_dma_timer_init(sport); - else - sport->lpuart_dma_rx_use = false; + if (sport->lpuart_dma_rx_use) { + /* + * EDMA driver during suspend will forcefully release any + * non-idle DMA channels. If port wakeup is enabled or if port + * is console port or 'no_console_suspend' is set the Rx DMA + * cannot resume as expected, hence gracefully release the + * Rx DMA path before suspend and start Rx DMA path on resume. + */ + del_timer_sync(&sport->lpuart_timer); + lpuart_dma_rx_free(&sport->port); + + /* Disable Rx DMA to use UART port as wakeup source */ + spin_lock_irqsave(&sport->port.lock, flags); + if (lpuart_is_32(sport)) { + temp = lpuart32_read(&sport->port, UARTBAUD); + lpuart32_write(&sport->port, temp & ~UARTBAUD_RDMAE, + UARTBAUD); + } else { + writeb(readb(sport->port.membase + UARTCR5) & + ~UARTCR5_RDMAS, sport->port.membase + UARTCR5); + } + spin_unlock_irqrestore(&sport->port.lock, flags); + } + + if (sport->lpuart_dma_tx_use) { + spin_lock_irqsave(&sport->port.lock, flags); + if (lpuart_is_32(sport)) { + temp = lpuart32_read(&sport->port, UARTBAUD); + temp &= ~UARTBAUD_TDMAE; + lpuart32_write(&sport->port, temp, UARTBAUD); + } else { + temp = readb(sport->port.membase + UARTCR5); + temp &= ~UARTCR5_TDMAS; + writeb(temp, sport->port.membase + UARTCR5); + } + spin_unlock_irqrestore(&sport->port.lock, flags); + sport->dma_tx_in_progress = false; + dmaengine_terminate_all(sport->dma_tx_chan); } } - lpuart_tx_dma_startup(sport); + return 0; +} - if (lpuart_is_32(sport)) - lpuart32_configure(sport); +static void lpuart_console_fixup(struct lpuart_port *sport) +{ + struct tty_port *port = &sport->port.state->port; + struct uart_port *uport = &sport->port; + struct ktermios termios; + + /* i.MX7ULP enter VLLS mode that lpuart module power off and registers + * all lost no matter the port is wakeup source. + * For console port, console baud rate setting lost and print messy + * log when enable the console port as wakeup source. To avoid the + * issue happen, user should not enable uart port as wakeup source + * in VLLS mode, or restore console setting here. + */ + if (is_imx7ulp_lpuart(sport) && lpuart_uport_is_active(sport) && + console_suspend_enabled && uart_console(&sport->port)) { + + mutex_lock(&port->mutex); + memset(&termios, 0, sizeof(struct ktermios)); + termios.c_cflag = uport->cons->cflag; + if (port->tty && termios.c_cflag == 0) + termios = port->tty->termios; + uport->ops->set_termios(uport, &termios, NULL); + mutex_unlock(&port->mutex); + } +} + +static int __maybe_unused lpuart_resume(struct device *dev) +{ + struct lpuart_port *sport = dev_get_drvdata(dev); + + if (lpuart_uport_is_active(sport)) { + if (lpuart_is_32(sport)) + lpuart32_hw_setup(sport); + else + lpuart_hw_setup(sport); + } + lpuart_console_fixup(sport); uart_resume_port(&lpuart_reg, &sport->port); return 0; } -static SIMPLE_DEV_PM_OPS(lpuart_pm_ops, lpuart_suspend, lpuart_resume); +static const struct dev_pm_ops lpuart_pm_ops = { + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(lpuart_suspend_noirq, + lpuart_resume_noirq) + SET_SYSTEM_SLEEP_PM_OPS(lpuart_suspend, lpuart_resume) +}; static struct platform_driver lpuart_driver = { .probe = lpuart_probe, From patchwork Thu Nov 10 11:38:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sherry Sun X-Patchwork-Id: 18089 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp106233wru; Thu, 10 Nov 2022 04:13:45 -0800 (PST) X-Google-Smtp-Source: AMsMyM4SVTKs7YEKBmhkey6fmLA70qJYX+FBKqBc1Dvi2MIqo3OKZwu00yxcxcM8bO5X2W3A3qfj X-Received: by 2002:a17:907:505:b0:7ad:b97e:283a with SMTP id wj5-20020a170907050500b007adb97e283amr2655023ejb.567.1668082425349; Thu, 10 Nov 2022 04:13:45 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1668082425; cv=pass; d=google.com; s=arc-20160816; b=PDjEfTyIoNjs9EYcuaGavfU4PijtGv3sqfK4jslMV86iy428oAVbxE6OacaC/H0wZh JYakQ5oPRuDA1F2tpGvsiTP3+KJRN3UIxLLw8iSTMGoIHHC2f1aPNRDPtQ7yYBF5Grdj e2/GBpo2T+AQcFQF9820K7smQlWntknxxejdUwuZ6AePkFlY42DHtW7D4HdNUY2nvruK R15nLrGRY8By07JDMXWjvDkCQ5OIu2fGEVDKYHN1dQtmkoORWLVJIxknxUlKcRoB5aKt ZvS5f87XPUSdgc9V6aagwEPDWyr/j29E6KtZ1GIhz1uiwYwnNRz/xP1uIpO7Mx3Y01fK lKsg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=fq5ouvCQ3ElcmR3ryx0nl31TuAcJBOFcoph7Uac9pL8=; b=rg+Hc8fd54/JV4mQRYWlyDIzBGGNZYpE0WOj9P8o9KjzuirGVRLFRWRFav1W9GHekX 3MHn3RsFk/2HpibeRJnOV1Cqbu0kvVKv4JHDJNMlnCXaJvgU0EohM6jIN1lo4uzXicIC N1WoW+Y8+1sQGF7bprIWOpKn8gZQG9/cbItJIyw8ji14G0CbOoROF+KL3K1k0IX4SF+4 e39Ogsdchw7us5NfWzNV6vwmmX+ZcVo/7wJzgPH8E6oKdn0kCYZB0xOhbCQpnumxmwpD R42D8ZnLNj73vjfpraKUQI2x0gk1juQ/pklD4ld1Vdk6AvJsQBPAJ0JuV4apwpv9Szyi 8nqw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=fsFZmhJl; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z17-20020a056402275100b0046189831142si21773953edd.7.2022.11.10.04.13.19; Thu, 10 Nov 2022 04:13:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=fsFZmhJl; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230146AbiKJMKD (ORCPT + 99 others); Thu, 10 Nov 2022 07:10:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229724AbiKJMJz (ORCPT ); Thu, 10 Nov 2022 07:09:55 -0500 Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2072.outbound.protection.outlook.com [40.107.247.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1028E5598; Thu, 10 Nov 2022 04:09:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lv2aU0odGIGg+vk7j3YCr+DsqMrqDnxmwc9DzJs2KwiGXTu4PB5unhSF29sebunnFtezHO+F3nN9Mqisp6le5IXdnjUwkhQPWTJlri3Of01shR3E0+pksSI1+nmuOGbQEtyCtwU0twipm2jTDPAlZSxXdf+gUQPY1GGOVRtuUHxo8zD80vCOJfiB3F+KJ2LOtn8wsMWQWZw8oD9vrbS4A4y9EzmZs0BBbs1xfkG83rOhWBjH8tSKznPwKFUv+iz3kK5KcI00PAJishiGwJjB1YOPKo98nyI8+62QSDW/BKLsyP0crxKIVOo93ziLyd/QuvJOi6BXm/zvipckCb9Vzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fq5ouvCQ3ElcmR3ryx0nl31TuAcJBOFcoph7Uac9pL8=; b=bRuh9OdrmkSLArmym3jAQzmco2i5SEP6IQIUsGGSo8YOy4HsjfGq73wFkLXR+fIRXP04nCxwNY0BKznFKbNYN6w9H3DFr7r6wENqAN/u35Xk2pR1l4ZkvX3WeTC6YRnxJqmBLZ15FnGU7/q8RX0Wf1uKHMXB61HJLHtGfS0jl31SKn2VWynjCtbI+HFchULWUT0A2NDDwUwMP0nrErAi0SxTDtzfM5y0GUfJ+DxI+8w7eb1GxRzp/17PU/h6oicxpwYPLLCU9nRNiHnQTpIuT4V9nD3SKCPhKTPoeZFQeWPErqX2yTL4laPM9Kskz7rrVX6USigO7d8eHcd9FpwEkQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fq5ouvCQ3ElcmR3ryx0nl31TuAcJBOFcoph7Uac9pL8=; b=fsFZmhJlHloSpF1o5T3NfVa6p0vOyw5I5djs5+G0qtU1OVTjc7VBJ0yib28QtKVs5sXdgz5hK4lITLImanZ22EuHTB4JiPVtC+203CH/YmobPlUUhE+pBuRjYQcfEjQ66RQcMBGym8UkJbKyhSRPIw8froD+TLkObdzFJ/bJClM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8404.eurprd04.prod.outlook.com (2603:10a6:20b:3f8::7) by DB8PR04MB7097.eurprd04.prod.outlook.com (2603:10a6:10:12a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.13; Thu, 10 Nov 2022 12:09:52 +0000 Received: from AS8PR04MB8404.eurprd04.prod.outlook.com ([fe80::71f1:f7bb:5039:e55d]) by AS8PR04MB8404.eurprd04.prod.outlook.com ([fe80::71f1:f7bb:5039:e55d%3]) with mapi id 15.20.5791.027; Thu, 10 Nov 2022 12:09:52 +0000 From: Sherry Sun To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, linux-imx@nxp.com Subject: [PATCH V2 2/3] tty: serial: fsl_lpuart: Add runtime pm support Date: Thu, 10 Nov 2022 19:38:58 +0800 Message-Id: <20221110113859.8485-3-sherry.sun@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221110113859.8485-1-sherry.sun@nxp.com> References: <20221110113859.8485-1-sherry.sun@nxp.com> X-ClientProxiedBy: SG3P274CA0016.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::28) To AS8PR04MB8404.eurprd04.prod.outlook.com (2603:10a6:20b:3f8::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8404:EE_|DB8PR04MB7097:EE_ X-MS-Office365-Filtering-Correlation-Id: a5410af7-f5e7-4b88-08a0-08dac314791d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uZqiHhnqbBAv2Z0XtAhpnSfUmj1sdUn6jQEZ+bx7d2SE988DnMPut7XNZDbGI5PA7IaH9ffjN/yBWXPHTvw8LYHuX8df598/G/8lU0CI4g2yx5AWvz/Ol7RYhNqOA2tQ2rqVeuXfkFRGwGUGpGfovsn7XUEtBRckV8bZywGfnu19za6zC7BitCXS6lts+lFz9uPSCOp0wekSwrwy2tKiVXpgFuy9MhkVJ5erjqfRCOl9kiREDraXDxWRjZKphz6zpiun/rscSRDwlXsLMUEJj9v/bZKysJdy10foHr+TjRm2NrUiGeif+nwjwI8tdG7c35jo1UTEFsHZZlfNHuQha1cxrS/I2+R6XfWzmrp84RwRYZY3BFERbqvpXNDB920+YO18uFQNOow+fk9IVIyLQvQMXMYvYLM2DMi07/JPNwDLTxsBFhLLKBhLmmUxgl11KHFT6CtszxSA6Mav4EeUwRQEHTkLvl8/X4zGTFnDtCeuyjZd+FTAqrrnM0o88MR4HeNZXx5OEdqCI6KgAg2wreVNbG8K6l6G9lrcWtwXCpZLOuHzJauakLNX29vcuXA0uAIOwSH4kptwVt60PXTsQNG6ywgz/BkpJjlvL3MjfeqZV9tCtdR5Gy0bhb7UEPTuVD89SmqO73Ch9IuG+yh86zbqjqQMdhis4orXWSla984Vpso5ydhUFuFAwMOdSbniY+T3grAbpGnDvAR1IkjbYByvYUhqee032XxE/cwysEknu7KRSlYa8mqWQ69DMcbV X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR04MB8404.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(366004)(346002)(376002)(39860400002)(396003)(451199015)(38100700002)(38350700002)(6486002)(478600001)(8936002)(2616005)(316002)(52116002)(6506007)(66476007)(6512007)(41300700001)(66556008)(66946007)(86362001)(36756003)(26005)(83380400001)(44832011)(8676002)(4326008)(186003)(1076003)(2906002)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pQVsp7XDB/U5CR+XBUzuSKpEqgZ67lSNvYjGzSe6/VEUwCRWSVJPdEyWdLGXEUFu3rn1/Le5EynGYbK4mDLDYzSpkoz1z2giKfxk6CfkB8vKX88/ayqXM7WOOgQQVTe6Z1O+KoZD1DsMTsyMIhwlVTraVV12jDW42Rk/wQVYCvz9v1xUF4RlWTAQhoOi9mWL4mZArMHVmnPHoUrdBUk2Kfqg2Hgh/kAXgESu0elLdiEJPgp5acYR35jcbW4SO4SRF6jsrrqiKRXijsJtrha/G+mOVCJvPqsc8gufb6bBh8hR/8AwKRRvWTcjBKdPW0aQB1GEeHfSXXutP7eSa5882bNwme5jXXCOKsx+0CZJTaoYqkHG7JHHz4IZ/q2a59MJEV8PriPfe1RlxgpDddL/ov7KUPaWPvadXZzqjsTcIMDXhleKcFYUfXhy1KlBg9YRuwE7GB1Db//HH1znxwGD4UgjfatOXbvKpQ7yejZBtCMblXeRO98I5Xxfqr4RddG/zfybwYM8vwuw2Lf6qBiTqFGGWlc0vyRwANOM01K2L673SF56I1bpraUePhoIvYH09aF89nVEUyPggRNO9+S5vNJ7IR90R69Sute0A9u0UBsneMpjZPeAub1NkOCuqcVzufkIxxQG2kLzV5oOm2rD2lAN1RRfBgpDEqHBioqstp3/MCNHn1EbYd11anCZMppKb4K61qA7rCMpTPEqnzZ+6fVnfdor+eMQgyaJBvm98y6QeIx5uz058bJ0QVNrj7jON+kuhdclksTcZ/mUxy8jJrYfGmMrVvnjOaGbpouHCwWW2jA4R8nQM94w2d+zXB7cbCOIisEozCzTnecVbItcNJ1mYulzEJsyqGyRA3uk5hGbTr72N5vZgBJJ72sJxs1N1OulOCZ+VPqr3cqvojxHWdptZ9zYsPQdwck0boNzbivaOeyKLhREcmNCxMicvp4hRzkIh7NWpbns0cI6Ligw4ekj6WR+msGYQLkYRsGegJjKFxI4w0XO8TMHuRpBh3KFQAigrS0xI/mXdGX7BDR/trDbmcHuldcNpJB/tyRHXLjPGhWKNMm3mo+gw5CU68ratKuxhMX3wuGgcaUNGQF4qVgKQIqJNYTFdRrY+VoeTUrtFG9fFExTBsxNKCw53rUCKYystFDSWoK6MgCwLwdqdRAD84g4vA/wBU7DrYKos0KGIuQIhg6wAG2wG/n+ROMWxxSapVyx4dQpPmqaQaQWEEUXZL3ysN5PaMIX1qZ+ba8gCNO7HSDUwBlePfkDypuEcPwUAWBz8dOHJ7+/YLlMnc0Fodv5q1A/SG2QIsykJhA1NjuFzLu0DkLGPWKQPIo5bYmPR0PXcXRKXdglFzTZ3AOiWoAlTiqaNve8UHOnedo7eypZ48xa8XQCmNtkyfi4ybbWUOujAu9O61Sj9H4VvFJk3d00yzIB5bN6MNp6tUJtdBxcwB08dEiAcKxB1dFxz3ILhKDiEJKQr9hntBbo2j1ST2YZ0cgWM3WmSL3nFWiojtsagPyp+J3T+oTZXNzEM7/75JoHZ4LiK6PNehKthSDRwCdlo7mMsGDcRGpEV+YlsFjmpFXpQ/zR/dZx4qxM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a5410af7-f5e7-4b88-08a0-08dac314791d X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8404.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Nov 2022 12:09:52.7554 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: K/TTxZPLm7nRapraB2npy/ufO9WsPJ2Z7Vg7w+7z0k6MrvOpiQyCssAb1/cWw306N8aoFysmjKjp1wnStU3KQA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7097 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749111197069537888?= X-GMAIL-MSGID: =?utf-8?q?1749111197069537888?= Add runtime pm support to manage the lpuart clock. Signed-off-by: Sherry Sun --- No change in V2. --- drivers/tty/serial/fsl_lpuart.c | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 2654d86f52a4..5b3962bb0de2 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -233,6 +234,7 @@ /* Rx DMA timeout in ms, which is used to calculate Rx ring buffer size */ #define DMA_RX_TIMEOUT (10) +#define UART_AUTOSUSPEND_TIMEOUT 3000 #define DRIVER_NAME "fsl-lpuart" #define DEV_NAME "ttyLP" @@ -793,6 +795,20 @@ static void lpuart32_start_tx(struct uart_port *port) } } +static void +lpuart_uart_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) +{ + switch (state) { + case UART_PM_STATE_OFF: + pm_runtime_mark_last_busy(port->dev); + pm_runtime_put_autosuspend(port->dev); + break; + default: + pm_runtime_get_sync(port->dev); + break; + } +} + /* return TIOCSER_TEMT when transmitter is not busy */ static unsigned int lpuart_tx_empty(struct uart_port *port) { @@ -2241,6 +2257,7 @@ static const struct uart_ops lpuart_pops = { .startup = lpuart_startup, .shutdown = lpuart_shutdown, .set_termios = lpuart_set_termios, + .pm = lpuart_uart_pm, .type = lpuart_type, .request_port = lpuart_request_port, .release_port = lpuart_release_port, @@ -2265,6 +2282,7 @@ static const struct uart_ops lpuart32_pops = { .startup = lpuart32_startup, .shutdown = lpuart32_shutdown, .set_termios = lpuart32_set_termios, + .pm = lpuart_uart_pm, .type = lpuart_type, .request_port = lpuart_request_port, .release_port = lpuart_release_port, @@ -2745,6 +2763,11 @@ static int lpuart_probe(struct platform_device *pdev) handler = lpuart_int; } + pm_runtime_use_autosuspend(&pdev->dev); + pm_runtime_set_autosuspend_delay(&pdev->dev, UART_AUTOSUSPEND_TIMEOUT); + pm_runtime_set_active(&pdev->dev); + pm_runtime_enable(&pdev->dev); + ret = lpuart_global_reset(sport); if (ret) goto failed_reset; @@ -2769,6 +2792,9 @@ static int lpuart_probe(struct platform_device *pdev) failed_attach_port: failed_get_rs485: failed_reset: + pm_runtime_disable(&pdev->dev); + pm_runtime_set_suspended(&pdev->dev); + pm_runtime_dont_use_autosuspend(&pdev->dev); lpuart_disable_clks(sport); return ret; } @@ -2787,9 +2813,30 @@ static int lpuart_remove(struct platform_device *pdev) if (sport->dma_rx_chan) dma_release_channel(sport->dma_rx_chan); + pm_runtime_disable(&pdev->dev); + pm_runtime_set_suspended(&pdev->dev); + pm_runtime_dont_use_autosuspend(&pdev->dev); return 0; } +static int __maybe_unused lpuart_runtime_suspend(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct lpuart_port *sport = platform_get_drvdata(pdev); + + lpuart_disable_clks(sport); + + return 0; +}; + +static int __maybe_unused lpuart_runtime_resume(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct lpuart_port *sport = platform_get_drvdata(pdev); + + return lpuart_enable_clks(sport); +}; + static void serial_lpuart_enable_wakeup(struct lpuart_port *sport, bool on) { unsigned int val, baud; @@ -2935,6 +2982,10 @@ static int __maybe_unused lpuart_suspend(struct device *dev) sport->dma_tx_in_progress = false; dmaengine_terminate_all(sport->dma_tx_chan); } + } else if (pm_runtime_active(sport->port.dev)) { + lpuart_disable_clks(sport); + pm_runtime_disable(sport->port.dev); + pm_runtime_set_suspended(sport->port.dev); } return 0; @@ -2969,12 +3020,19 @@ static void lpuart_console_fixup(struct lpuart_port *sport) static int __maybe_unused lpuart_resume(struct device *dev) { struct lpuart_port *sport = dev_get_drvdata(dev); + int ret; if (lpuart_uport_is_active(sport)) { if (lpuart_is_32(sport)) lpuart32_hw_setup(sport); else lpuart_hw_setup(sport); + } else if (pm_runtime_active(sport->port.dev)) { + ret = lpuart_enable_clks(sport); + if (ret) + return ret; + pm_runtime_set_active(sport->port.dev); + pm_runtime_enable(sport->port.dev); } lpuart_console_fixup(sport); @@ -2984,6 +3042,8 @@ static int __maybe_unused lpuart_resume(struct device *dev) } static const struct dev_pm_ops lpuart_pm_ops = { + SET_RUNTIME_PM_OPS(lpuart_runtime_suspend, + lpuart_runtime_resume, NULL) SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(lpuart_suspend_noirq, lpuart_resume_noirq) SET_SYSTEM_SLEEP_PM_OPS(lpuart_suspend, lpuart_resume) From patchwork Thu Nov 10 11:38:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sherry Sun X-Patchwork-Id: 18087 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp105685wru; Thu, 10 Nov 2022 04:12:38 -0800 (PST) X-Google-Smtp-Source: AMsMyM6zzuM1irnD1MdLWJmcgsk0Fd8sPyuk/s0axV7SuOknT8IV2ErKar5/LkQzxC2UJq4WYPrz X-Received: by 2002:aa7:c3ca:0:b0:463:4784:bcec with SMTP id l10-20020aa7c3ca000000b004634784bcecmr54819098edr.315.1668082358430; Thu, 10 Nov 2022 04:12:38 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1668082358; cv=pass; d=google.com; s=arc-20160816; b=yi1DGRAaSBSjh7th24GsQ92Zi2rEsbYbvIVSRoQc/tRsnaHDqB6n1gfq3N5+1oW/DY 5XVIU+wakjUOEWdrVX/1doLipsovyCkGhEL/AiDlD9hyKbXJwqTTwduWYP4r24zt0BEZ sanX+qaxHIF1JnRALktpZdLWVvy/4EGlsa+zoZc2+srqJPoENgfCHxtxCsGZFQ/ujrWi +EaH/PSiTd9kO4lYN9E0V2KfeUF3yQy9eNrlsBBRA8A8nNsf9EIFhBdfosaMIuXBXpNm mA2kW5qMEcm5AwnXVsEoHxr8iOZ+ugfZb2jM04x0/ZSi9j3ti1757sSoAtRITwUznsvW FKDg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=+2Re8Y9COKv4Xe3HECOet3HjC9ciO9Ls/P7GyxfLjyo=; b=ILMwGo51Ge+kM6dJIMDeOWvZ0nBh+jvfVnGrnCTD2PUb3p8ShWsv4ihEHxD/oKH5fR TbOf+Q3ViSVSwxu6RQ1rV94D82wR+VAcF6cl1nt57qjkD+phDD2/ISkYrubkJYQLGSGE YIJECqS85hVYh4RJ2NGsE4T/xs7ih4UygE7/oubG7ywIp1qt88akb22kaDc9/Xgm54HP ovBxqetMMyg9LVmeKjW6mxhg+qzrsy/zlZG4xezd8VcmfyBeVReyixmx07IUuQbirZN6 BuxseapBfMGaV06wq6YhioXXnn4v22T+tDl6zAhSshcbuHRnSol88kIpHm2fI7CY7B/Q xujQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="E1B7aL5/"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mp14-20020a1709071b0e00b0078de4629958si18253577ejc.248.2022.11.10.04.12.13; Thu, 10 Nov 2022 04:12:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="E1B7aL5/"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230331AbiKJMKR (ORCPT + 99 others); Thu, 10 Nov 2022 07:10:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230241AbiKJMKA (ORCPT ); Thu, 10 Nov 2022 07:10:00 -0500 Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2064.outbound.protection.outlook.com [40.107.247.64]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2343E6AECE; Thu, 10 Nov 2022 04:09:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D617CfwiVf+szqbjSKtqnOKwRtZn+YFXShmI/e68kkTd2gwoI72J2LQoZ1Ax6BfRepvg2fw1Z+3en+xG1Okt/vFvFDWaBxhvyqhqygvY+5E1X5KrGYnepExe9rdSmsLSNU8xjqpwGJFs/cv4AdxyfuD9ZrfwLiDjUdbVB1PUMxuTl9fuE6p4T8++rMzgrncLegrG4PDMhacoUD4gTWN+Dh0uD8IZqCQQVhBqqiAfHkos84Zv9ZKA2iCRclHXq/fq+6t99EWt6UtZsU8Ura1GBxKrLvF6iHsvOjtIZh4YU214UwBwol6s3RDmDpZ8xUfqG4FyevJC+WDC3n5qwmgU6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+2Re8Y9COKv4Xe3HECOet3HjC9ciO9Ls/P7GyxfLjyo=; b=NDVkavFceioKbAHXbbj7Hk0ZnFVipfpmdtyAJrlWasJ+BcT7/4AkU2ML+yR/mcqI5WUhbl88itfyIlV8sntTsSBcFrSb9JBUtynj7gRIxvFuEoIGNGf72/K1dhWwy3s3Ly74N9Edh9p1PUoVG6bPrKnD2j+HQBUbZycn0qHWoZmkfFY9jVOcOZBA6d4WWLNFqRvYUV3QrpX+kAP95njkXTyP5jMvlaaQ98m89qkjhvtBGGy0PZiXOklWVVGAc4Bmn9YqQmQA0NmIy1nFlpV1tDStLxcnqRP2G+kOlylw+6n0yk9L3Ec1+GWdSC+baU2bhUm9CC4dCUQKfbXEuDKpCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+2Re8Y9COKv4Xe3HECOet3HjC9ciO9Ls/P7GyxfLjyo=; b=E1B7aL5/tImUUeyaIhK9753NCv9kAGatiw6WioyTfDmDat9sAdcuZmLps+abGn3eipTMCT42fsJqy3dAnZVSb/A7PxBlOjQkH+BueYLwFNZwWRDw5GLmg3GUmOOL/EXrHgyTsPuj9VKebQO2Lx0dtnwzLVqBqvDpfF+WSSMSUqA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8404.eurprd04.prod.outlook.com (2603:10a6:20b:3f8::7) by DB8PR04MB7097.eurprd04.prod.outlook.com (2603:10a6:10:12a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.13; Thu, 10 Nov 2022 12:09:56 +0000 Received: from AS8PR04MB8404.eurprd04.prod.outlook.com ([fe80::71f1:f7bb:5039:e55d]) by AS8PR04MB8404.eurprd04.prod.outlook.com ([fe80::71f1:f7bb:5039:e55d%3]) with mapi id 15.20.5791.027; Thu, 10 Nov 2022 12:09:56 +0000 From: Sherry Sun To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, linux-imx@nxp.com Subject: [PATCH V2 3/3] tty: serial: fsl_lpuart: Use pm_ptr() to avoid need to make pm __maybe_unused Date: Thu, 10 Nov 2022 19:38:59 +0800 Message-Id: <20221110113859.8485-4-sherry.sun@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221110113859.8485-1-sherry.sun@nxp.com> References: <20221110113859.8485-1-sherry.sun@nxp.com> X-ClientProxiedBy: SG3P274CA0016.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::28) To AS8PR04MB8404.eurprd04.prod.outlook.com (2603:10a6:20b:3f8::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8404:EE_|DB8PR04MB7097:EE_ X-MS-Office365-Filtering-Correlation-Id: 308a4a0f-2d37-48ed-1e01-08dac3147b0d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: t7dYKwxhlKvPq0EW8av8QxDu4kIDlaUJHcvclTnhXw4g5Pp4nHPEnSWhwwI1Uwbmf1XVG39QkJ6d4Yrhi1XN3Sc5Hd7z+FqrY3ZUKkkU5lSXAQLXdAG+JqOodbXfgM2x2MXkLyaZvRamSlb+OXmt38acHAaXlbk1InrJWpVa7qV0aIOkI+GdPxg5cY1k7pPMV74qhfNuhRPnQLN9W9UZyEkDB4sKThC1BVWD4WH22bp9vsNgwA5lM2xDdTLUaYuSHP3jz3P3wduNIJVAHvj0BDmqoJ/alxvmnjQAaJDKNyQ6PIWyy3mCtk81f2ZaU9M3lKJG7Abh3hR5a8L3gb0ATIzs47s1JbQSnUF/N9FvLG4VSJGk9eG9YsSYhN8ujvCx8QRt+Sg4mlqueMCAVn6uk1gRVMywxk9MBdy2nmajbA5dnVQgd6VDK9buVcGOTFdLEMAw9v7AVILItcWtE4cWr3AEIGr8snYUeaL5iOX1kb1I5u22Ug7y7p1w0jbL8aoNUeExFUWMFwzG+9s7x2A4SUonoMoLlxXT8LKk+MzQqUjDctpb1PjS2LVWJCZ/HNeRoBiSPolyb6JCUVM67MVks7eWlsYkW+i9sfyULsIcng9plhPVm15E5Z+NBzQuMt0pdyBT8gwgqVk03wBExeCu+cQ0wHEv56sQ1PKDCSBuUnrZnrbuWZpPk62lCm9SCQqw6lZ3FALUDyGDtMQBTo+CJCh2WbkKW/CVoXATV7NhB5pv5hVb/q/if84jYTq1KwEg1bAekAXzHkyCnNO7d7It6g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR04MB8404.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(366004)(346002)(376002)(39860400002)(396003)(451199015)(38100700002)(38350700002)(6486002)(478600001)(8936002)(2616005)(316002)(52116002)(6506007)(66476007)(6512007)(41300700001)(66556008)(66946007)(86362001)(36756003)(26005)(83380400001)(44832011)(8676002)(4326008)(186003)(1076003)(2906002)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: q/OlPs83pw3+h65Af608pw4PQR6vlBF/Ev35O94VlP0XjiJvDk48k+oz1TQdxusw70FJiUEtsQGdRH8dRpjdn1t+iLIEZH0kS0uBeWRv6Pn7xMT2GPAn2+flHUj1TswhmcZIyqkbdfqyvEX2AqJw1Wh6BlSaeSoV++wcOn/+D3vxKPGhEXiAnsnyEVdk2hVGGiVJAnvjnFTPMcFjDBHbr3giCckhQmdo+O1NfZYQ4bnEur+bn11qYq47U5h2AuiX1eirF6M9UjWWmru1rEMMzwxhjveXcBROgfJ1D676Zn2WHrJp1BU5G4RX/qTNYHGmRQJURw+1e0tzJWLid596mSdPLDygQJOXNdPEGe/6ekEZJKCoxKq9ILjXzz3eDJ3h0u2/VHDT64mHxiObbxF9/i/+hJqSYxjRqBBpo1I82AO6H/yu24bTD299ZPrkAHw7lAhe6TFTRmOvSd4SI8QS7dBzSh0m+Tt5EClvphE/hkxwliDQaB7Iq8WThQnII8rT1/fZI5LNIfXKF4ot7tQYAAEch8sswY6akBphhsrtvbd+bfcDRLuB/yvHAxSZLOYf5G/td8ZgnvtgEDq2bH2ohMKrjIi097UinnbwMX28TczwSHpDO7gNi1du4WZQ7zL96lS/7eGjLAmtubsxwercb2zK301+JeiVlrZiCvxC9Gy9l1HXs9ME7ytl1jBzPhUGBs06nhUjiGciuQSfdPNvPFhmQaED1C525wOaPxayx6/9aNCHdJeb4WLhyfHDNh0XE3hLObJu5lKQFIfVtMRqQuHO4GDHic2U6QC+3mHWHU6vWDCs6dJNCaDJAeD/7ZFrWl7yfFoQCvZk25i/fXpXfuokXWrCKcvVFS6khG2h0PXkW+zj/iJt0YL8fHLhinyCBDHiQTPE3iKI+5mEBNLXrkVOuehpeFPnEc3EMYCOfvDPaZ52hVok2V+WPDG2E56pfWiEZkOciEn6M0w6czKm2JU7kn33abQAvgXfDBHdJfOJi3G11BHjlB6TOxz+aZqDMKcn0mh+rcZq13Th1YT84RgzEOF8ioFQlThSLjkH5cVOuKyvbrJmPrukAm0FrIH/OLfhtA0wDG4SiUdLwkLCBstwgFHgT/d8UjEjmgLeKQWtLAKpBAKzRJymQ3ZCHbuNO1YaJ2aImJwxaU2Ndy/E/TqVcZXmpHZZIyzmr6yCaEUvvS87CdJQogNjdAXer/B+AyRqUiQwYi/RF62tgkVHvcZWwL4RAbTtqQilQQIasxVtw+B0rqX67KilGUbCu/uQx/UiJtJ5p+gzLS3qK43vTM5d0ktZCParJJlET/G7tFQb4SniMOC8xdzyC4A+jV+nlCS/pPoKIKi+/H0CP54yeUxh8XnDD3SL2xcvHt3xkoAJaM/orR4D5CVdGmQKJ73L0vidAoz1QcU2+LbFkXKs07MUkYy4yMrG0W1ZkDuu0kc6GyF3iFdfvvaFhcfJh8MXRZFbrsIp54bLts9ZRXQmEjuKQoGXsrZ0861DFwNnU/r+f2RB0cCy5llLoZOvxVaLSCDcpwU672Ot5a4RiLNvood2j7DODLXF9ogQQfUw6juwN6OQ+bNZQG7DWWHpZuwj X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 308a4a0f-2d37-48ed-1e01-08dac3147b0d X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8404.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Nov 2022 12:09:55.9128 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Xl6OAsw+7/qGX11zwBMBXK1UMjIgpLFTrFNa9njx1Nb8eR2yMx7pgKFi/IRdbZCjdZCAGC2aBIU6pdAsDO1Nww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7097 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749111126963958059?= X-GMAIL-MSGID: =?utf-8?q?1749111126963958059?= Use pm_ptr() to remove the need to mark the pm functions as __maybe_unused when the kernel is built without CONFIG_PM support. Signed-off-by: Sherry Sun --- Changes in V2: 1. This patch is new added, remove the __maybe_unused as Ilpo suggested. --- drivers/tty/serial/fsl_lpuart.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 5b3962bb0de2..20e3027c1a55 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -2819,7 +2819,7 @@ static int lpuart_remove(struct platform_device *pdev) return 0; } -static int __maybe_unused lpuart_runtime_suspend(struct device *dev) +static int lpuart_runtime_suspend(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct lpuart_port *sport = platform_get_drvdata(pdev); @@ -2829,7 +2829,7 @@ static int __maybe_unused lpuart_runtime_suspend(struct device *dev) return 0; }; -static int __maybe_unused lpuart_runtime_resume(struct device *dev) +static int lpuart_runtime_resume(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct lpuart_port *sport = platform_get_drvdata(pdev); @@ -2888,7 +2888,7 @@ static bool lpuart_uport_is_active(struct lpuart_port *sport) return false; } -static int __maybe_unused lpuart_suspend_noirq(struct device *dev) +static int lpuart_suspend_noirq(struct device *dev) { struct lpuart_port *sport = dev_get_drvdata(dev); bool irq_wake = irqd_is_wakeup_set(irq_get_irq_data(sport->port.irq)); @@ -2901,7 +2901,7 @@ static int __maybe_unused lpuart_suspend_noirq(struct device *dev) return 0; } -static int __maybe_unused lpuart_resume_noirq(struct device *dev) +static int lpuart_resume_noirq(struct device *dev) { struct lpuart_port *sport = dev_get_drvdata(dev); unsigned int val; @@ -2921,7 +2921,7 @@ static int __maybe_unused lpuart_resume_noirq(struct device *dev) return 0; } -static int __maybe_unused lpuart_suspend(struct device *dev) +static int lpuart_suspend(struct device *dev) { struct lpuart_port *sport = dev_get_drvdata(dev); unsigned long temp, flags; @@ -3017,7 +3017,7 @@ static void lpuart_console_fixup(struct lpuart_port *sport) } } -static int __maybe_unused lpuart_resume(struct device *dev) +static int lpuart_resume(struct device *dev) { struct lpuart_port *sport = dev_get_drvdata(dev); int ret; @@ -3042,11 +3042,11 @@ static int __maybe_unused lpuart_resume(struct device *dev) } static const struct dev_pm_ops lpuart_pm_ops = { - SET_RUNTIME_PM_OPS(lpuart_runtime_suspend, + RUNTIME_PM_OPS(lpuart_runtime_suspend, lpuart_runtime_resume, NULL) - SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(lpuart_suspend_noirq, + NOIRQ_SYSTEM_SLEEP_PM_OPS(lpuart_suspend_noirq, lpuart_resume_noirq) - SET_SYSTEM_SLEEP_PM_OPS(lpuart_suspend, lpuart_resume) + SYSTEM_SLEEP_PM_OPS(lpuart_suspend, lpuart_resume) }; static struct platform_driver lpuart_driver = { @@ -3055,7 +3055,7 @@ static struct platform_driver lpuart_driver = { .driver = { .name = "fsl-lpuart", .of_match_table = lpuart_dt_ids, - .pm = &lpuart_pm_ops, + .pm = pm_ptr(&lpuart_pm_ops), }, };