From patchwork Thu Aug 29 09:37:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos Song X-Patchwork-Id: 13782894 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C6BB8C71135 for ; Thu, 29 Aug 2024 09:39:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=F5FxjuNdReSAUurDwXC3fYfUz5iT8OSKubT84fjG1pI=; b=1LuZ38YTucY7ssMNvXKdWe/Kyh 1OCDoNUYpXKfP3CS8cbobNQm63N8BBl0oeNPDHa4Blkg1HyCURPU01N8RCZ4xgJyOZoCHrGwxVSWI 3AUWXwibGT3VPfMQsVL70sYZ+tZdgD3XEtfa9NLgYGD+U5UCT6mnoUnu7o7hu0m7HI4JBu88YHYnW KKJpZKN3ELgdUIKcM2vdcBYx7AF1FBAvN/pKzh2ip99e27IX/QLUJF5Yf5SzEGnxNgi7gY2VzTSbk G/w0XD050gZ7w7nT5Znq81t3o6DIvU0TPtF1eF2dkTKVmtOuapz/TAtp6q+PEVtBIdoX79dRa/xMr dvL2iVSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sjbcb-00000001Oj1-1T7o; Thu, 29 Aug 2024 09:39:17 +0000 Received: from mail-westeuropeazlp170100000.outbound.protection.outlook.com ([2a01:111:f403:c201::] helo=AM0PR83CU005.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sjbSJ-00000001MOz-483x for linux-arm-kernel@lists.infradead.org; Thu, 29 Aug 2024 09:28:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mgM9DXuBs9C+CjaVMNE3632rELAXy/R6sed+pzhiqnVyjMCrQTIwrg5kuDzhQD+JYtwb8cVZpiTkf/TpYnQ46FYgxKwyBrbhcKXZn3s2l1KE5+34FREJGkKHmUoxeB3pqh8+IQ6wG9DSxU6rMS04k3bBbALN80QNA2ojYpGHonR1r6SFgKcktYpLECJT6breq4HqMzzRP4/LoxD3RvZNT7p+iXQAfSRP5rFFd9E/REaNpWrZN7qqdrTtsz0d0WL/Bsu6joIYg+cPmu7AjCjvttTX3ib2co9O+DWLLOxxgd5IA38DTdYz2+P6UzFytajpX0K6ZjkA542ngT6HHKMhjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=F5FxjuNdReSAUurDwXC3fYfUz5iT8OSKubT84fjG1pI=; b=H8d+05bHz22vCFzv54BYR0tll9WJkCxb3+1lI7X8oejP+rfsoLZdTc1wWOOU3eC1tlLfcHU9Dj98ULPiM16xhw7JXYnPRR0y6Yx1qMH5B4S6j6zjr5vaoM8XwuvlfVLfvAnDFX3YobH7875egJ5D48sbzrrp2ZXP5fIpp0CpJR8luLw0lpkJB9JtuWIKtVNOCldlzq1bOvJYkDY5NcC7uGjUU2K0zFj/sJpPDjpQVemhfjVRTId4DTv0w8GR1d/cv64w37cUa9YB+lRG9LFZFfdUkQi53CP7D/Am6c3D+01UZtilNCJ6tORGuHTL8uyvGbU/7/ClC58gCskcBViOxw== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F5FxjuNdReSAUurDwXC3fYfUz5iT8OSKubT84fjG1pI=; b=Kr5RGD+AH4R0nPtbvZ+FwplwmrqThbnm3AvmKyE/SBggg1aczczk25thuJesTbKEuO1WdLyyvM49O1zIeTomRoYLqgMREBO6xOYeeG+2mckdyi5z/p4j5JueRDQB9zQmuJqVANLdsDsWEJeCn1Ve+wkDOqWrC6sG8oI4nEVYXRWJguXmuzTr1DjRDE+XPkElzafvXAjVtCOOamUAd+1mB35MfaZgScnAbQ52nBecHRpELnwNXNzlxM5xgZWpOKh598cZ9ZjyH6eJggulIJ2DdvxL4UnylO5rDAnYBSDRQsa199XrE6KYeZs56GSEW6Zh/AYyVM8hPpijpwaSVBGcDw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5005.eurprd04.prod.outlook.com (2603:10a6:803:57::30) by AM7PR04MB6902.eurprd04.prod.outlook.com (2603:10a6:20b:107::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7897.28; Thu, 29 Aug 2024 09:28:37 +0000 Received: from VI1PR04MB5005.eurprd04.prod.outlook.com ([fe80::3a57:67cf:6ee0:5ddb]) by VI1PR04MB5005.eurprd04.prod.outlook.com ([fe80::3a57:67cf:6ee0:5ddb%4]) with mapi id 15.20.7897.021; Thu, 29 Aug 2024 09:28:35 +0000 From: carlos.song@nxp.com To: aisheng.dong@nxp.com, andi.shyti@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com Cc: linux-i2c@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/5] i2c: imx-lpi2c: manage IRQ request/release in runtime pm Date: Thu, 29 Aug 2024 17:37:20 +0800 Message-Id: <20240829093722.2714921-3-carlos.song@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240829093722.2714921-1-carlos.song@nxp.com> References: <20240829093722.2714921-1-carlos.song@nxp.com> X-ClientProxiedBy: AS4PR10CA0023.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5d8::15) To VI1PR04MB5005.eurprd04.prod.outlook.com (2603:10a6:803:57::30) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB5005:EE_|AM7PR04MB6902:EE_ X-MS-Office365-Filtering-Correlation-Id: 1eee1842-8981-4bc0-954f-08dcc80cf49d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: rxSe3Y8WZPP52qOj4K+yY39Kn4umjS5XDmABj+iri0E0cHXO/lZCqQxOk/uADoSGeuU+Ncn5ktJCKVjGp8IP7wXM1ogaMYuv+2UNepRu+xpzwrZBYyp3OZYNbb7YXfWGEscftSWpLJHSyXaAPQNjFSq5FEY8KxJtYZqvkx4yMxmZLv0Pw31bIiND3fCq3f4lvojwGfq9jQHTMN5HQPfeyz0baMbCQVct9YbTRo2Abjq4aZiXTEjCaIKhHKdcEGKo04+o4/8TYxhl84VcuH7PCfsYi0zbbMufkjadVD3Up4PBMOLf5IdhleLln2H3hkr3Z0nhYj3+sAoGARBoGDV2smyOKmcdQWYEQlACMoZ1OuHCDhfoY41WFvc/5V5kzMCj1yZ00cmGGT9Yau0F0Z3tbsa14qdt7KfMS3A9cabh/5muVa16CZzx1TlmgO2j3IfxPXfgFz2K7mlRTZfJAlwUvGhIXqDmKsOXkBT4jpoSrs5NoI2+V7D3nlSiQLOiPUwz3C7OA+42DoLqF0dul2uyszbdI0CIAEXMlWkmHOAZrvA/VqtR630zIP3/WWe1W6Z2gkcqZrSHdq/dq746aisdAeGhzb7eoV/qGHulPOp8VcVk/nV1aeIVJ0Nn1CmVAsMRTue7tFaFpOvobs/GYZwPr4f2bAczCF1bxQNcyb7oOmVOVfCBHiett4o3SYcpRPdx5ZJIVKP2/aelSacoptLAT/Mo9Pv+dPN1cq8ybqnwzX7D5aUNeGi9LrdYwrIwxYZVhjzjeb6/ZsPzuoJVq+GvatsqCX4OE1cNLtJWMuip/DRg1UFbaYoNhI6uerMrdcUV0D+IEqkZ9fQQItXckSc5JR97R/VY/sIjYC61MP0v9QyS1CbhsF0gCJ3XJRo+QgnAXSdY7hMVyaSjvYH0qfkaT7AjQ5UA1yHntVHLLTlWNRDivOyWADGF0u+t4PdYfXbDFFpvNDZUdkITpRBJA00oBxQhZd+2LLkT8WSfYKBe6MgjEwujURVuv1UFZx6qcHqNwvOj9toltiFbVuywac88KT4+nr+9VfgDO5nHPet5JbNQqcJYCDGshBlqboGiRwthHsvXFldeZRmajBWQ2MvdJul50Qz3rrEDccM1ZcvcpBin5HW9ViM2je1RIl3pT2T5R4dKTmKBeCqP65XrAAopGoxlP1rdQJ0nnr7HETuM3/iiJ09WmVVN3yfHUDMrWXMTrv3glNl+6QX6Ce1CntBwhS4UFjjlE/aEl/6VghzKwGwkfrqHHzAwj4ovGuHGg6gIqBhIxNHoLD5KIQ0iKGBQeAmUrEPatRVWtDi8vO7TB4P8sVPD77GU9OCL14kCmZ8S5er/vaOnvxTOQ7Nsf0AIaQ36jkcXcSelx7TO7S0wlC+HHB6v8Ud/J9DlY0STpdVf1grdXdjco+WT48egB3Dntw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5005.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: x5lt/ebbq34h+K+lu1vpm5bJ3/bX9ynacLBQ/CLmS/p8q3rRf1zo7j3fLY20U1iBm4dHeYKB4ZycaL/tBvS2aC+7vS3iEae/ZwkqpLErh/FH9TNEH4ujoskyDFfNEbcKgk6hWvjWJsmWQA0Qc+XtjfKLdKs5y6GIqxBB7JEcM/ws+IYFrsb30kGXEtPQ5vAwsfMCNnK4lXpG4qQoH2BmoUUYVMGGgLDyGX6xSXNp/3+jKQqpPvkJDqgt2WqlcGkbcNCrmS0PG3SxviVZoP6tsf/cNlIhp8PaQuB9oTXygIY8SBRzLFaHa0+WYl+VLN6BjiuQ1BTgPaOo2Mvh0cf0wZZPExsPUMutC/qrC4b2M6JlRK+XTHzPU0cDziBQUG3AqQkRdnH1Hmb8u461VtCaYh7nt3f7q9jECtlb9a0uTr5uUaI4GE9zzIemBsxykH7bGoBT365EG3VDhtEsxfUYRWtuBryVNwo3FT17c+ycWfOwcZ1gPcU92onj31luZZNdybTWiB1hO7ZO71acCzkxGoLu6t2U3m+yreZtzKhXhrMHc0xFr5OChexs5w9cwX8KRkGCbIw2Ezn1pZ0YjFSrgxHPSpGh1OmNejnjVbLI5hSRQFESwsTg/phzM3OX3xyM7ONspjUWhRQ8igWc1h4RCFJB/GR7iqsu7eEJEfY0pozkOhrbLfVmJswXMzjPKufNtp6wI95Q38+lbH00gX030hmgKKv9KcikHF3fDu3l2IftnCb/DjNnLVLFh9BRtOXdjH996jOxW5RSxmBnKnisr1jrM6bQVW40AMc9mUGBg7cf3TcnyFyxJY6Q2W2rBb/5tKViJhu594Oi7RP34FZ7K19lpadKZBz9X07SpAnzgjtXRe2cFAh42/1Sb0MrD+dzhGoU+SOBpkm/aj4CXdHJspyC8k5Uf1DVu5DoBatoNesMXk5fmOFOX6mGXeeGQtbY/pnG86D0darZ3pQmpsr7135Y1K/ggfr9mVNH6MwxzAfAZQEL7ETENnPI3naWGqPRsGtDYJPCBaikW3rJEPmjl5ut7IvnHD4Aqh8esOzzXqEgUodn74yJ95voRNhEgYAUJclULkvy0an99Py7dG0Jmeq3QM8UJU3q9JBBZ/Nrxe4J+Se1rqpf9/B/C7a7VgIhYmuk7K+yh2DoAtIjMRSKESMCmpXg6hDcvxI+tLhArB5uw+1cvJkPV6iPtIO8K2gpexZxxNTv7W5nJS1NTDpS8Ue8yndsNUTcrhaYM34zYDCe0X3wi/tZ3ocNU9cl+f5WLSqKAXexXK1Z3CuVdzwcGVFJw5xLbcCippPVV8kO4lEucrLnqizf/cEq67WdVFjCDsdLloocGMX4XsibwJe4wl3fku8j8HrMXfatp+DzxVQqe7CGRZrK14LkgF7GRs9XYnHKwHchlPd+gJeyQyMDpLHV3FoOlTGyjI/O7DNlODlWVvAlTD0WexdvFE9U/W4JWmEEgUHoLldUVw++nb4evqVVQ8aWHp3HCS83SjNEC1EGR7+LLJH8W3nxX/xVAiSMC1xfZvJjHZhezcRZcsLZgTHOU/4mPetPV6NckahU9c+udf+33ACZPDE9yIntszst X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1eee1842-8981-4bc0-954f-08dcc80cf49d X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5005.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Aug 2024 09:28:35.3736 (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: KVEEQhC+lMGSXQQ0BiEy5SUQG4mEjsQysNiKGwEvg8+23eer/BBsauLHAIopBu59rj5AlHQcxqbMW9Uh2ktw4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6902 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240829_022840_060429_90642EFB X-CRM114-Status: GOOD ( 16.41 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Carlos Song Request the parent interrupt during runtime resume and release the parent interrupt dunring runtime suspend for allowing the parent interrupt controller to enter runtime suspend if there are no active users. No visible impact if the parent controller is the GIC, but it has significant power savings for parent IRQ controllers like IRQSteer inside a subsystem on i.MX8 SoCs. Releasing the parent IRQ provides an opportunity for the subsystem to enter suspend states if there are no active users. Signed-off-by: Carlos Song Signed-off-by: Frank Li --- drivers/i2c/busses/i2c-imx-lpi2c.c | 40 ++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c b/drivers/i2c/busses/i2c-imx-lpi2c.c index 23f83f10d5f6..0159ade235ef 100644 --- a/drivers/i2c/busses/i2c-imx-lpi2c.c +++ b/drivers/i2c/busses/i2c-imx-lpi2c.c @@ -168,6 +168,7 @@ struct lpi2c_imx_struct { struct i2c_adapter adapter; int num_clks; struct clk_bulk_data *clks; + int irq; void __iomem *base; __u8 *rx_buf; __u8 *tx_buf; @@ -1252,6 +1253,27 @@ static int lpi2c_dma_init(struct device *dev, dma_addr_t phy_addr) return ret; } +static int lpi2c_manage_irq_handler(struct lpi2c_imx_struct *lpi2c_imx, bool enable) +{ + int ret; + + if (enable) { + ret = devm_request_irq(lpi2c_imx->adapter.dev.parent, lpi2c_imx->irq, + lpi2c_imx_isr, IRQF_NO_SUSPEND, + dev_name(lpi2c_imx->adapter.dev.parent), + lpi2c_imx); + if (ret) { + dev_err(lpi2c_imx->adapter.dev.parent, "can't claim irq %d\n", + lpi2c_imx->irq); + return ret; + } + } else { + devm_free_irq(lpi2c_imx->adapter.dev.parent, lpi2c_imx->irq, lpi2c_imx); + } + + return 0; +} + static u32 lpi2c_imx_func(struct i2c_adapter *adapter) { return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | @@ -1277,7 +1299,7 @@ static int lpi2c_imx_probe(struct platform_device *pdev) struct resource *res; dma_addr_t phy_addr; unsigned int temp; - int irq, ret; + int ret; lpi2c_imx = devm_kzalloc(&pdev->dev, sizeof(*lpi2c_imx), GFP_KERNEL); if (!lpi2c_imx) @@ -1287,9 +1309,9 @@ static int lpi2c_imx_probe(struct platform_device *pdev) if (IS_ERR(lpi2c_imx->base)) return PTR_ERR(lpi2c_imx->base); - irq = platform_get_irq(pdev, 0); - if (irq < 0) - return irq; + lpi2c_imx->irq = platform_get_irq(pdev, 0); + if (lpi2c_imx->irq < 0) + return lpi2c_imx->irq; lpi2c_imx->adapter.owner = THIS_MODULE; lpi2c_imx->adapter.algo = &lpi2c_imx_algo; @@ -1309,10 +1331,9 @@ static int lpi2c_imx_probe(struct platform_device *pdev) if (ret) lpi2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ; - ret = devm_request_irq(&pdev->dev, irq, lpi2c_imx_isr, IRQF_NO_SUSPEND, - pdev->name, lpi2c_imx); + ret = lpi2c_manage_irq_handler(lpi2c_imx, true); if (ret) - return dev_err_probe(&pdev->dev, ret, "can't claim irq %d\n", irq); + return ret; i2c_set_adapdata(&lpi2c_imx->adapter, lpi2c_imx); platform_set_drvdata(pdev, lpi2c_imx); @@ -1392,6 +1413,7 @@ static int __maybe_unused lpi2c_runtime_suspend(struct device *dev) { struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev); + lpi2c_manage_irq_handler(lpi2c_imx, false); clk_bulk_disable(lpi2c_imx->num_clks, lpi2c_imx->clks); pinctrl_pm_select_sleep_state(dev); @@ -1410,6 +1432,10 @@ static int __maybe_unused lpi2c_runtime_resume(struct device *dev) return ret; } + ret = lpi2c_manage_irq_handler(lpi2c_imx, true); + if (ret) + return ret; + return 0; }