From patchwork Wed Nov 4 20:15:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soren Brinkmann X-Patchwork-Id: 7553161 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id B0760BF90C for ; Wed, 4 Nov 2015 20:19:34 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BA3BF2057E for ; Wed, 4 Nov 2015 20:19:33 +0000 (UTC) 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.kernel.org (Postfix) with ESMTPS id C964A2053F for ; Wed, 4 Nov 2015 20:19:32 +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 1Zu4Ux-0000kK-H5; Wed, 04 Nov 2015 20:17:35 +0000 Received: from mail-by2on0096.outbound.protection.outlook.com ([207.46.100.96] helo=na01-by2-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zu4Ut-0000cf-JU for linux-arm-kernel@lists.infradead.org; Wed, 04 Nov 2015 20:17:32 +0000 Received: from BN1AFFO11FD027.protection.gbl (10.58.52.30) by BN1AFFO11HUB011.protection.gbl (10.58.52.121) with Microsoft SMTP Server (TLS) id 15.1.318.9; Wed, 4 Nov 2015 20:17:09 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; linutronix.de; dkim=none (message not signed) header.d=none;linutronix.de; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.60.83 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.83; helo=xsj-pvapsmtpgw01; Received: from xsj-pvapsmtpgw01 (149.199.60.83) by BN1AFFO11FD027.mail.protection.outlook.com (10.58.52.87) with Microsoft SMTP Server (TLS) id 15.1.318.9 via Frontend Transport; Wed, 4 Nov 2015 20:17:09 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66] helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1Zu4UW-0003Ea-In; Wed, 04 Nov 2015 12:17:08 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1Zu4UV-0002ok-AD; Wed, 04 Nov 2015 12:17:07 -0800 Received: from [172.19.74.49] (helo=localhost) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1Zu4Tj-0001ta-OH; Wed, 04 Nov 2015 12:16:24 -0800 From: Soren Brinkmann To: Thomas Gleixner , Lars-Peter Clausen Subject: [PATCH v2 1/2] genirq: Add irq_pm_(get|put) callbacks to the irqchip Date: Wed, 4 Nov 2015 12:15:59 -0800 Message-ID: <1446668160-17522-2-git-send-email-soren.brinkmann@xilinx.com> X-Mailer: git-send-email 2.6.2.3.ga463a5b In-Reply-To: <1446668160-17522-1-git-send-email-soren.brinkmann@xilinx.com> References: <1446668160-17522-1-git-send-email-soren.brinkmann@xilinx.com> X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-21920.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD027; 1:zA887uQqcIg5mOwdgyDTQlZHS1a/KjRZKMOwT8EY89z6nZZJlxoRw+FONDeVyDfwKvKC/p1MEki2lgOcdVe1INDYf58u8IZpg1EGMtLqUs9+3juL3rYUAmJi4Gk42q7eeozw8vvNZW+CC+Z0GJMphTTqoswJZVFPeqgoCFTwE4ITHBwEZZR5ya+6vIG3mq7TSCHIUJqq7JhLCILYpZi2B7ZQ6J++LnrgapVzWVvqFaSJ5WII/b7hlOA5Uo4+tCKjlK9RiUi44KlWt5l+cIfd5Xg/En715a/FLN0tD2n8TR51WNj7+XeSsDXN3MAKacYE3a2WLFNY88IgyJ8EUiKhaOC87+1DMwfCneS81qLmZjlBhxLCqbTZ+g1V+8kEUKMh X-Forefront-Antispam-Report: CIP:149.199.60.83; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(438002)(189002)(199003)(11100500001)(63266004)(77096005)(57986006)(76506005)(86362001)(50226001)(5007970100001)(4001430100002)(6806005)(50986999)(76176999)(5003940100001)(5008740100001)(5001920100001)(47776003)(16796002)(50466002)(106466001)(36756003)(48376002)(81156007)(229853001)(5001770100001)(19580395003)(19580405001)(87936001)(92566002)(36386004)(107886002)(5001960100002)(33646002)(2950100001)(189998001)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1AFFO11HUB011; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; PTR:unknown-60-83.xilinx.com; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11HUB011; 2:/1Rapn/XR7OygzkH7knLC/ho1U8TjcfUkERDV4mLfP2AY/wVjx51G3cqI3SDkwTdIUbDcDdfhbgvDTDgFSnjQBuyiSfXQqtq4Fc6IE8Mdg3OJYHRGwus2xYwSUXWavjHPi5AzgeGq3GBGNc6ikaDAQa+hZzWMiS7X89LpHwOPDE=; 3:HT7tK9gfEpiKiIfRlvWyPZ8wseKlYS8VvgtDnlRCT9SvWefnHSzEWHvqglwHCntQya4jb4VA9V/n/BtHv6/R4UsLnIW5PCO8EZb+XZXsj/NAaSmV3RzacenbeHEy9jtiSbdDowahvwKD5J3PLEM1jmMjTOByQ3QAw9VeIQs+6NYLyC3/rMlnoRuYnv/WIzMKrl15NpoNXahZQgM1j4rvBRSBKIcnY/X4t2FfYM9sq3ap4HEFpPoopMifeb+UYkRSeAkrtBbkqWUzzRqDU72EMw==; 25:4f9cBG7v/TJrGNxTvepaJrfSIk9WiE/RMuONLEVUHk1dRGjwOyLI5nk2UU+3N35nK4G1f+MSZgKiPV2nesXF9xI9/J+99Ta1sOnSOLgtuBfdEkAHmpWVCH77p5bTpC37G+DK9AiYpskGu3Sm04nH9RmcfIXQhn+QyW2d+vZGXKHSfzuXXtD78mlfggNGs2U6xroh0Xv3sy00kmMh93giecFTM954W+4k7QpVOXOOBGtgFhxLhpyDNNshJO9QghQW X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(8251501001); SRVR:BN1AFFO11HUB011; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11HUB011; 20:wfIqSisdQq+Z6mZW+fh/r56dI8xGGLuQRBsRpX6OeRmwkCuA7Ax4PF48Z7t5N4zjTg7zD9rPW6C5ywjkzIJbJjUCr5jGZkLjjzr9mSH50Tj+KvgHiSc+Tt+jZH69+sP/PFvtmq50nZE3TaeuIkROiwO3Bw95ujDKt6kOdGYm4be7UplsTxP8CEjoerln1rg8rk34qNpA5vIFeeyd63OwsicaUV+MTtEt6JIqWpjcF0e/vz4z1CKdio5lQzoZ1SbWatJ6AwRk8uL1+OZ1amvx2jK0sBvdZPc/mUTomxLGhN6vd7PAWZGrQnLtKW8ZshaMYHn9CGaFx7bAulbiJPNhMUl4jpGCbsBIyS5ynXvtvdpuCfpAenkKM0uJPiUFJEy0grAgswGVjm9azQPuDG3LpYt17vBpjRZfqaGpiAmbtaZBo+bHV2vloHi6V3kqXBKkKyeyLqgWWLNYWPg2FEkcB7ZV4DrfqUrAKNWbXfeU1TPzxuC5xAHeDEeGVENtc7p6; 4:KGVkokfuAF4NwyBUpoX+PQuPSvWxru+gFbfXtBG1ey44MzcIvigRu1dfyx8lQmSQR9zxPE7N1cNkSrCCBuOFY/hAhZHhrCdLseXDkkfMgRfgSz/7+QXPS276xm57ocbcEo1RSF+mGsrko3EiSuWTPSbZJX9ESOTzul0oflgI8EHz023zGDKYQ5skGPiqy7tPvD7M0EPf4D42io882OnNpjo5vcztHRsgV6ge5pcTaBFUbSmjA+VQLosHek2drlC38Xwmq9VrhGkU3XUoCweKYEJzV0MTJPyweD0rEy9yUt/xb6dG76ZmHPB/PLezJGjeo6usOPf2n1bB04OVHlFYYq0FKBvdCFq2gKLY1a7K8g6X8Qm1T3gUfplrqjBqD/JV X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(10201501046)(3002001); SRVR:BN1AFFO11HUB011; BCL:0; PCL:0; RULEID:; SRVR:BN1AFFO11HUB011; X-Forefront-PRVS: 0750463DC9 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1AFFO11HUB011; 23:fGeIp7xLY5Z/WWCOL4O6E62L1bQYs2D8abtA7bE?= =?us-ascii?Q?oZNSJsBJOrbwhu66LXNbp5PxVbQbXoEWzW8AVDbWcQbvrk3z2lnolrvDEiWS?= =?us-ascii?Q?p7w+5ODd3IqaKmdPSEgYcKlSkAtS5ev5ymxq+C9NBetqHyysynPeKiI/1Vzo?= =?us-ascii?Q?qDVm2UMdDPwcDzEcmxGlehQmviPq5DGbL2JKG+mPOhF1KbXJsvFlyXni5Kwc?= =?us-ascii?Q?5gc4/i3EF/lSKAQipRRvDUCh+LsMnUf/qzAyqfmp1g5FKvymqLwwWN/tsOyV?= =?us-ascii?Q?eDCro3f3UBJMOvHQId/jaw51BwBnXog5Sa31X+RDN9xGRbrgBM02lM75Vlrv?= =?us-ascii?Q?yJEqpxcePwIbUBNeAkvXu/EVKZHpeqE+jWvsNG9mfokPdNhA+rP8AkBmLkI1?= =?us-ascii?Q?evqERVRNxl6JDVSv6cFsGNIDiearTs9hFJdgUIFUIpWIPep4u4gHvNlTXZ8D?= =?us-ascii?Q?dY45I3+cd/k/Ty7ImnHTAzf71YRyLFeT26P/a+kvAsl1EyidJ77JtFXLLbLV?= =?us-ascii?Q?9cHio2/PTLRsBnTzXGhkbBMztiFvxfororTeLnK+yUA0xo2ab7n1kDV/pp00?= =?us-ascii?Q?cwoQuNSzn49iRKrqpitbxM0Qc7SLs/i7gRiLOeXS81d1eM+/3YZpSvVHv58i?= =?us-ascii?Q?iu5+jLmkBeBsuBrwnXJtoQTDGNQOtZsmomEIu9cKx+OmN++Tlg/+FFVUQ8KN?= =?us-ascii?Q?Xfy1NAN8eU8TIUlrBWMVrrjmWSW9Hmi741QehOYRh8Ys7nf88maM9+MQgKdO?= =?us-ascii?Q?6WknBwsmjX/C/MSdQEoXbqqh+At2lHrEzlJLi+yUJG1CE/AN0IuERnQvYQr4?= =?us-ascii?Q?HqguWItLKODSIxyW3hkrrC9azHl756HBqe+mu6bhSyIDpKazA5ybom77Kqtj?= =?us-ascii?Q?NahC08RgUTRRzH8eun1p81fgo315f8d5YJqKCElmpbj5stzaeZWLLe42A88h?= =?us-ascii?Q?pA7A/0pqVZZq1W3c1Ry/t7WC/am+XNgg1jevxhwlEL2UYu7rri6wou6eaMQ0?= =?us-ascii?Q?g9jXl6q93HVkFlz4RNDXn/ablijs1JUDbAV1yo2fzo0yRieCTNZEm9McXxOM?= =?us-ascii?Q?96RtGNhZgzVxPLVeakr2xG+LIcpHjvnLIG8+rfSDn/30XvAmpQI4UZ3oG78b?= =?us-ascii?Q?LjhKPqsBhDig=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11HUB011; 5:ol6qe4vj2DHbp9tPOwMxBdKuq3suZ56tf5d8TZIInj7pTz1FA+z4iLkjvJlHvHqYbCxpcwyW3ti8FxaqVPmN6/YydEOFvMETpNI4OyaB7oUWoYrmr/H2XJpYXDV28CxbXUWD69+SKBONeXiMHeFJbQ==; 24:IfVe5hlbXpgpw//O0eYBv+A5Rvt9ATBi3mkZsKqFU1vRCcdTaIpnFfWtdulBgUiQUsq/xR5drGdgRSZ6r5tQVJ/Cgsap07v9nZL/5vRiyUk= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2015 20:17:09.5015 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1AFFO11HUB011 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151104_121731_740803_9A268651 X-CRM114-Status: GOOD ( 18.20 ) X-Spam-Score: -1.9 (-) 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: Alexandre Courbot , Grygorii Strashko , Linus Walleij , Michal Simek , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Soren Brinkmann , 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-Spam-Status: No, score=-4.2 required=5.0 tests=BAD_ENC_HEADER,BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add two new IRQ chip callbacks for power management purposes. These callbacks are supposed to bring the HW into a state that allows it to generate interrupts. The callbacks are called in request_irq and free_irq, respectively, from normal context. Cc: Thomas Gleixner Suggested-by: Lars-Peter Clausen Signed-off-by: Soren Brinkmann --- v2: - report errors up the callchain - add error handling (needed some refactoring of the existing error handling in request_threaded_irq) --- include/linux/irq.h | 4 ++++ kernel/irq/internals.h | 14 ++++++++++++++ kernel/irq/manage.c | 20 ++++++++++++++++---- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/include/linux/irq.h b/include/linux/irq.h index 3c1c96786248..279f6b7118c8 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -341,6 +341,8 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) * @irq_get_irqchip_state: return the internal state of an interrupt * @irq_set_irqchip_state: set the internal state of a interrupt * @irq_set_vcpu_affinity: optional to target a vCPU in a virtual machine + * @irq_pm_get: optional to bring the HW in a state that enables IRQ generation + * @irq_pm_put: undo any effects of @irq_pm_get * @flags: chip specific flags */ struct irq_chip { @@ -384,6 +386,8 @@ struct irq_chip { int (*irq_set_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool state); int (*irq_set_vcpu_affinity)(struct irq_data *data, void *vcpu_info); + int (*irq_pm_get)(struct irq_data *data); + void (*irq_pm_put)(struct irq_data *data); unsigned long flags; }; diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index 05c2188271b8..8a5842431d6c 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -112,6 +112,20 @@ extern void irq_set_thread_affinity(struct irq_desc *desc); extern int irq_do_set_affinity(struct irq_data *data, const struct cpumask *dest, bool force); +static inline int chip_pm_get(struct irq_desc *desc) +{ + if (unlikely(desc->irq_data.chip->irq_pm_get)) + return desc->irq_data.chip->irq_pm_get(&desc->irq_data); + + return 0; +} + +static inline void chip_pm_put(struct irq_desc *desc) +{ + if (unlikely(desc->irq_data.chip->irq_pm_put)) + desc->irq_data.chip->irq_pm_put(&desc->irq_data); +} + /* Inline functions for support of irq chips on slow busses */ static inline void chip_bus_lock(struct irq_desc *desc) { diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 0eebaeef317b..0f6dee35afaa 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -1556,6 +1556,7 @@ void free_irq(unsigned int irq, void *dev_id) chip_bus_lock(desc); kfree(__free_irq(irq, dev_id)); chip_bus_sync_unlock(desc); + chip_pm_put(desc); } EXPORT_SYMBOL(free_irq); @@ -1647,14 +1648,16 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler, action->name = devname; action->dev_id = dev_id; + retval = chip_pm_get(desc); + if (retval < 0) + goto err_pm_get; + chip_bus_lock(desc); retval = __setup_irq(irq, desc, action); chip_bus_sync_unlock(desc); - if (retval) { - kfree(action->secondary); - kfree(action); - } + if (retval) + goto err_setup_irq; #ifdef CONFIG_DEBUG_SHIRQ_FIXME if (!retval && (irqflags & IRQF_SHARED)) { @@ -1675,6 +1678,15 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler, enable_irq(irq); } #endif + + return 0; + +err_setup_irq: + chip_pm_put(desc); +err_pm_get: + kfree(action->secondary); + kfree(action); + return retval; } EXPORT_SYMBOL(request_threaded_irq);