From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751408AbdJBJ4Z (ORCPT ); Mon, 2 Oct 2017 05:56:25 -0400 Received: from mail-he1eur01on0058.outbound.protection.outlook.com ([104.47.0.58]:19808 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751015AbdJBJ4U (ORCPT ); Mon, 2 Oct 2017 05:56:20 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ed.blake@sondrel.com; From: Ed Blake To: tglx@linutronix.de, jason@lakedaemon.net, marc.zyngier@arm.com Cc: linux-kernel@vger.kernel.org, Ed Blake Subject: [PATCH 4/4] irqchip: imgpdc: Pass on peripheral mask/unmasks to the parent Date: Mon, 2 Oct 2017 10:55:59 +0100 Message-Id: <1506938159-466-5-git-send-email-ed.blake@sondrel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1506938159-466-1-git-send-email-ed.blake@sondrel.com> References: <1506938159-466-1-git-send-email-ed.blake@sondrel.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.88.9.101] X-ClientProxiedBy: DB6PR07CA0121.eurprd07.prod.outlook.com (2603:10a6:6:16::14) To AM4P191MB0001.EURP191.PROD.OUTLOOK.COM (2603:10a6:200:64::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bf14877c-15d3-4881-47aa-08d5097bd2cf X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:AM4P191MB0001; X-Microsoft-Exchange-Diagnostics: 1;AM4P191MB0001;3:imrN6Al0nsU7UPo7Py9H7h0G3x16P582NhejukEbmvD7ALsVWMRsXrez/S4TWtH7rCZ1Nmi9+m6hYjIwbmZKnD73iAvHSgCUwBUIRSPd39f7iVreU7XUfAxVfJ5TTvgTwXXWHNH5ldAcowmcp5fjc4XvDytNuE0ZMvhzLy06taDeMdzK8PJ+A/sKSF2JBttoE+wKb7qqQNt+57H4UQbPjXz7hnvwHjs6QuuSFnGDgGE6SBBmcEXLP5zLq2oHyPpZ;25:kNhlu0SpxU1asSgpn4sQxMWkC/B3u58M1asm6Nw1369WAS2P2F1CMNPlsxKjHFRkf4SgvoU+6pDFWK34njHxU3Nc64xY6skgC4BXdFGA9TVdUTW+QuMGFU+RYaWuoemmFWYN41or2qZmoHHvjlNh6dlfORUAa58kCysCUMb2lMbVMLvG7ApS7kMd6T4gchilwhqQRSiIlAnsIR6rQgUlwRvMVfrUaBeFYs1o7lQh6PYR7jS6i6j7rlxN/0sr9RenVdZZ4ZFwaFMaBJUCMM5J/apUtklM+4jwr/j/4KiRRK/9lzfmrS0wJLk54ZkGc6rSVpM5JtdRzO4c7iH4ABuT4w==;31:dAdcrUujPd3mImz9KHIzMevDeAqYOkuzvkJ3R5350oeISzkOGV+2dNH6s5LZfqzwk4XmRhwngamEpTLkvKy4lQysuWknYPT6Lt0ybAKfeerJ37xflHt6LMCEOoSpIiOFwBPy/wD12GzMVI0a3fdwP8qSXEsVE3/J+lbox12Ie2pLAJt4JaNSYMxBhWtUPQprFi+Cxtp589QNMUW7fThJGPBSKUX5oIdBkyAwO3T9yLU= X-MS-TrafficTypeDiagnostic: AM4P191MB0001: X-Microsoft-Exchange-Diagnostics: 1;AM4P191MB0001;20:i+IdqeMgMChnGW+nw5bR+ojmTA8uysVGMvofPGBFObjhkRkIsnx5jUatGHM1F8sQIePG1LllMf3JC85fp3BpMQK0NqMhygNX9+oM6y84np98tAFVqIiZLKh4hciLbjUAG/VolR56g3Aj79pMhK54HoL7NnSASg2sEAbsPK72UQaOm5WHIVqL7ramT8hCQ6V+QPahSApeM63rlpbnzAelV9tfgyQCe5cbyKlFByF4VjGtg01tKo6mCEA09OmV78ng;4:WiZeFkcnx29OHVwPUWnabfxxOu5HjWwcMNEX45EpFgK4xBHpAPWPyX6O/8oNVhO5NyI4QvdqOZfwLqt9Gkq0W+cMqGPRk4DEkcg53vvOAnHdCgSD3vOzEj9c/mR2PB+aVzISHu14Hgj+QQh45gtoa24QKttdTHgqXtR2tn7qghzI4ocWOgkwK9WnGJ8NqF4hAXaor/IUmXtKnEAs3kJX+qSOLuADNH/qCs29PMyIzBqifL+GbLCH/od/vixV4Q4z X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(93006095)(93001095)(10201501046)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(20161123555025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:AM4P191MB0001;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:AM4P191MB0001; X-Forefront-PRVS: 0448A97BF2 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(376002)(39830400002)(346002)(199003)(189002)(66066001)(47776003)(6666003)(6116002)(3846002)(97736004)(69596002)(76176999)(50986999)(4326008)(5660300001)(101416001)(6486002)(107886003)(8936002)(8676002)(81166006)(81156014)(50226002)(5003940100001)(189998001)(68736007)(53936002)(305945005)(7736002)(50466002)(48376002)(25786009)(36756003)(2906002)(2950100002)(106356001)(105586002)(33646002)(53416004)(478600001)(16526017)(316002)(16586007)(86362001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM4P191MB0001;H:iw-build-2.sondrel.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM4P191MB0001;23:9VyU3K21WLrELxmbd3LjY4sJV4h1IZ9EyixbR36ru?= =?us-ascii?Q?v/3etG03Cgit5tfvXUYQPwjCej+tNV3q0DvqaD21ooiwSuyZSL+YKqgRbbSU?= =?us-ascii?Q?ymJ3PdUq056U1qErBdCOKCIaNJZ9LfgT4cKkfbY9Z3M9VOSf2UV4jUSJjBO9?= =?us-ascii?Q?nZFoaF7VBxednRhArelK8WYe+ngajtrlhHQN5dTzqayh9kK/bV709KithoFq?= =?us-ascii?Q?EQ5xI1l/NZCDRXDX/fPSk0tj/CNSwP58NSu+7k8M4F0/XnT5vk47OhpPZZUP?= =?us-ascii?Q?9+4M5eWv+hJX/w6SYOfcy+GcNmUSfAwY4ztrRoHyx5CIbRY/yg6P/z0Ilb5v?= =?us-ascii?Q?nnTAkzweYkNqQyFySLuEsWlJW/yJCpLFkdwELfw/h7hIM/0E+B3OpAUjloql?= =?us-ascii?Q?+GW0lIt6a1aGIGzhBm4yUMRh+crBI2lySDG6wzFyklUEzEna9FZU9a5Q4xAP?= =?us-ascii?Q?VFMal4rCHExBIPUtly2Y+d6TuHARZwt9yg/Nj6UTHaKlV9ndUm9JRM1nVFP8?= =?us-ascii?Q?vDGVSw6fkBXgzDb4VEofSM8A+lAXw4Pqs77qbZPfZGVC5a+KZ1rm1VQSJGdR?= =?us-ascii?Q?Lflw1l4tKgaomyuL0vlqYqkr1nVtsDZY0Myfg1XvByOz91Q/yAzh4akZI9ae?= =?us-ascii?Q?NncQ5P47XdQ+mA3VGISX111X1WBOKeZsIGmWY280GLdL2onGd6AC7GWx+BhG?= =?us-ascii?Q?d/ntoR/Jb4A0xqBCy+zoOC+slzUvSlhs+cDEyV8WU23I9zpcIQIYsrO6ujYO?= =?us-ascii?Q?aJ1ae+nKf9Zq7BAEqoUzD5F0VexxNhMga/uLHoaEIKzfJ3h2bVKyStuwhW4o?= =?us-ascii?Q?IIR1T4aIhwUMCOkuuMDafT28TQtVrH8gBZTPg1Ta1uvhVh9aVVzKgEO/WskP?= =?us-ascii?Q?WAugqx8ieQQVhNSQI3WrPEWSFMIxTmqo5y6Dh9ljKooMS0KNQc7Qhj7/t/iE?= =?us-ascii?Q?+JiJi18LIEuUlfmcJl4Q4y4l446GNNB8ZQ/Ms0fdBrJBUkCMJmXUukxbHsl+?= =?us-ascii?Q?/DKfsaE/Om0OjHBNgDX4ET4kaHtS6ulxNLl3vV2zfQbWIr6MV433Ns6NQ/gb?= =?us-ascii?Q?4M92jQw9YVsd27Zt7fug+UZPYyrtCLtISZXJmxeH9wSpS5xSw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM4P191MB0001;6:3ub8CR0zYHEm4LzVSc3LMDECjLs23e5KEQTcURj1QJp04NBf+iFIpJ3czlIS4IfQazv54TY+KRTfruJBNR7IZI4BfUHHlLkiBZgnxfCQzbsqVMTGlXjcLNzQ4MggU0Rsyk9r+RlbHAhC9DS1LeCuS6BuRtm/cRlLQQD6nz2b2FfiWsy6o8d6ovUHV2QJoFJSM5rBq4zFxNu9InAcMh921dpN6GTV/JZ9p1F6GFSb+9fKfoFPcIzRQ7qIle6o0zdQ3lkWw86IsuXVbskiDRrjdbnFPQDhdQXsQyDRYQzidTwn5eKhPbsNPqFnGxkuEnrQDhJGSWEoR08VarJePcH3zA==;5:K92u5+FpwW0fN6DqQXYD/H8ac4IT7GgrZuK2tI/viFxbGd7Adkhao7i1RMbHL8BajpKio4TENx9XQkDzANqmNNaG8N40uO9K4ZRaVJ282ATgZAB/z6LBlOlV/9H5i9ibfx5QPss9V1OYFXFqKM9XLw==;24:WuEziJPMLm7MgcmL4irg3blUo1SCx3zhVMLrK2zo+bVab4YsugQe0IskySFdYUssAQP7HnxfJ61nytckKchCr+9b9mgFtEZQOUZmp0hcRto=;7:wESGJeNhXPLympIjq+pJM0m5imZGzL0HOPvSGCJvDj2SH8wp0ggSCMNpbGUO7IFOGJUJ0LO4AQvC3CcTu5d28PB/cm/0YdBM2Ois+kxRXZuMhWL1Jr+NLYvygl1AGCSmNUpDoJsPiyoSaHXPLYskFbhuhF2SqDyDPL49BtENluWdoFSKnHdxmgV4dsVFw3lXOK+YxGhMLSmDlUEKO2poZCOnpa+WqHPyLjpMdqMX4tk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: sondrel.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 09:56:16.2407 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4faa3872-698e-4896-80ec-148b916cb1ba X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4P191MB0001 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Pass on peripheral (RTC/IR/WD) irq masks and unmasks to the parent interrupt controller, as well as setting / clearing the relevant bits in the IRQ_ROUTE register. Clearing bits in the IRQ_ROUTE register will prevent future interrupts from being passed on to the parent, but won't mask an existing interrupt which has already made it to the parent. This is currently causing peipheral interrupts to fire continuously when the system wakes from a suspended state when one of the peripherals is used to wake the system (e.g. RTC, IR). The interrupt occurs early in the wake process (still in the noirq phase) and because the peripheral interrupt is disabled at that point, the core marks it as pending and masks it out. This mask must be passed to the parent controller to be effective. Signed-off-by: Ed Blake --- drivers/irqchip/irq-imgpdc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/irqchip/irq-imgpdc.c b/drivers/irqchip/irq-imgpdc.c index d1bcfef..05c48dd 100644 --- a/drivers/irqchip/irq-imgpdc.c +++ b/drivers/irqchip/irq-imgpdc.c @@ -141,21 +141,31 @@ static struct pdc_intc_priv *irqd_to_priv(struct irq_data *data) static void perip_irq_mask(struct irq_data *data) { struct pdc_intc_priv *priv = irqd_to_priv(data); + unsigned int parent_irq = priv->perip_irqs[data->hwirq]; + struct irq_data *parent_irq_data = irq_get_irq_data(parent_irq); raw_spin_lock(&priv->lock); priv->irq_route &= ~data->mask; pdc_write(priv, PDC_IRQ_ROUTE, priv->irq_route); raw_spin_unlock(&priv->lock); + + /* Pass on the mask to the parent */ + parent_irq_data->chip->irq_mask(parent_irq_data); } static void perip_irq_unmask(struct irq_data *data) { struct pdc_intc_priv *priv = irqd_to_priv(data); + unsigned int parent_irq = priv->perip_irqs[data->hwirq]; + struct irq_data *parent_irq_data = irq_get_irq_data(parent_irq); raw_spin_lock(&priv->lock); priv->irq_route |= data->mask; pdc_write(priv, PDC_IRQ_ROUTE, priv->irq_route); raw_spin_unlock(&priv->lock); + + /* Pass on the unmask to the parent */ + parent_irq_data->chip->irq_unmask(parent_irq_data); } static int syswake_irq_set_type(struct irq_data *data, unsigned int flow_type) -- 1.9.1