Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756894AbbHZTgM (ORCPT ); Wed, 26 Aug 2015 15:36:12 -0400 Received: from mail-bl2on0107.outbound.protection.outlook.com ([65.55.169.107]:2477 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751900AbbHZTgJ (ORCPT ); Wed, 26 Aug 2015 15:36:09 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; From: Shenwei Wang To: , , , CC: , , Subject: [PATCH v2 1/1] irqchip: imx-gpcv2: Simplify the implementation Date: Wed, 26 Aug 2015 14:35:55 -0500 Message-ID: <1440617755-2942-1-git-send-email-shenwei.wang@freescale.com> X-Mailer: git-send-email 2.5.0.rc2 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD014;1:/6yfOjjErxfNS7A032804V3lgqLptxz0Yo+erTpxhJaF5oHm7RSJTNYOm1hfT/Bx81dToWGCnVEcjOGxVaAiBcOVZoAa8UXgj3fAYZ+9KiKOwZ7aMkHjpV6hpKWWjLROHlJvXWsF2oJvOnaEx+VDPTUBN7toC+emgXLLvUzjtotfN355Ff0oKaafCZFppYq6A/vaMAewU7GLOCJw9C2pzg6VCPBsr1pHafUs+6Yk14/rtv4e3vRViy4YdWdvqTgALyEpcVkNOGcegQ5MLxckal3cv2AvproMQoLzc1PPVkkhX+bD5/GypWn9wDtAOo4838cRC3hVODQsPi0fHnI0T+t3fziyUSR5NVxAsBEKOCUUyyIWPJWdRb3fOeHhGgk+RFLY0l5Ve6rD1nqg+R3GNVBxGuECEiyc4YQvGawlpPM= X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(339900001)(3050300001)(54534003)(189002)(199003)(50226001)(189998001)(106466001)(19580405001)(6806004)(5001770100001)(81156007)(229853001)(5001830100001)(50466002)(5001860100001)(105606002)(50986999)(33646002)(4001540100001)(36756003)(19580395003)(5001960100002)(46102003)(97736004)(87936001)(68736005)(5007970100001)(77156002)(48376002)(85426001)(104016003)(77096005)(47776003)(107886002)(5003940100001)(2201001)(86362001)(64706001)(62966003)(92566002)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR03MB1376;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;CY1PR03MB1376;2:ygR6rFDj6OehVI6t5Of2QKLI+xzCTUwpMTOV7g6kxhrE4H63cpqpbIDxKHJDFh5WYyDNOVOjb2Btqhw56HHi18dVu3RDvpsTPw35eZlecACKPt3v+qVH4HUuVjOAlEknLWgxijpXLS5fT75sHJQCrUZPWLmEi7fqW07x/7h+g6w=;3:dp7PhsOSriaVOoFFulrBxxt5vYjFSMHsDqtENQ0vFZKijET+dATfYBTOLzy8cwMBwLqKRnDxXjEiOIA1kRKf6LPkg2J0HwdHayLKow0vVghaBP+Xc9L0UQqW2ioteoPlmQpcxWyiateeIUpO/vfQNOoT7EDEL2Lh5l5xcBxird/x/0LKX+ARU3bkjuS3X8Zc9QJYd8Wb7mf0AffI6YLo1Arhxyg2EFKwiZf734SvBts=;25:0VwJGpZDOHy3kAgQsEo6fnER3UkHP8kcJQFLC5wFoLEEl76EgtlpUz8xEvhPKiUxuEb/td+/8fKs5KHdQFrGvuPQv6ygpBDAG1Kvl+auv3xHiHYbliWkgIGPkENJG74io39sQJOxQ6MyBPiMQpcHI+ElDk2mdRzasMZ9mBvU71fP/dLwul1be2Sdv3G0p29zxFnj6sStTvNo7VQB5UOZ3kf36+PjwzVoe4JRyEmr17Hb6gBOapEGT67BWG2hcPWsjMu8lNcaxc6XwBUMqliqDQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1376; X-Microsoft-Exchange-Diagnostics: 1;CY1PR03MB1376;20:WTZQqxtjWARjj8K4WVubAqwLy7WGzNC7y8hBWSTI2PJ+ylROSK4/HZ+eZdAzrthgxRfQlqiEFQUeWIyn4TkklX2NwTxJEYPSaiNHu+bNSbx/8cQMbVS8Ld7jaEJj1NvVkTrgPLDihVSzfU8ER8AVyebEKjH7ufuHyi6iOK2G3+cW4uQj/w1xGn3sBaWFSLgtW4UCfONhX9jFm4iY2PRBd9BH78NaDYkRX1+sT6tjj+GYcn6kTRb8N4iq+fandFKcSb3vDawjxZ7zQ8+77x8yuCyTMBTuc2me8kjpADVm9mDlkBpJb2dBkWxO2N7TzcK/NLScvmDhhReqvZ2D0o9KHjI6IVtYs0LLi8m2g4VoLFU=;4:ACh/FvectR6zB42bgup1LEg2p0XwM69qBAMdsCEZcq6+C+C/q5u8X8wAcMT4FvEIbhQjqMUPaG9t7ZwVpG3feGcZfqvrafpsO8mIA1lFehORcWf/XEsrVY+UcNgEY6WxMk9xmqJoTfZbSXy0yXx+hiI3Cw6Bg/uMlch7r9UnF4hoaauKs/T4uAdyw1HM5JnBHepHiCQxqvwEFdSsXKZOqNj1QUesxH7mLNPxIlS7CXifgQOsx1BNVdVfpQWZJdB6XZHon0qm80M9FBC8+V418ucy7jIyAGxm/o1dmcJBJw8QzeghxlDJlf+15f4BVAJJ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:CY1PR03MB1376;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1376; X-Forefront-PRVS: 0680FADD48 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR03MB1376;23:q7wFrC9b16RN7cdK3vMrZQQ43yboMdONza4PGwMlF?= =?us-ascii?Q?zyDmVCr4vuQs/fdGsDCfSmwsu5h/LeLT4r50qZg3cVWbdilKy1rGEd6dDMLD?= =?us-ascii?Q?ECkWoHG/7yFOQdSW0Cbbvm5WLegRu1UAiCiJm0JgAM4SydQcI+wqN+1GP7c3?= =?us-ascii?Q?K8trIyVUAFaf9ZEgmm5mVpbRK1Nmf0sfsxRSes/sD54s+XxYrMjBMpVGDiUz?= =?us-ascii?Q?AZSexA6+Tgcwer5OEfU/vhWX0SiVMtwgocbxKcJjziR8RMvKle+ZFxd7ce+n?= =?us-ascii?Q?7wywuRGYhT4derDW3GFH+LdL2H7YNggDS2keRUQ519zwPT3cFOkm9ECZ8H6p?= =?us-ascii?Q?8IVWMZq+MNrqxUDZCt6CVp8KmcfiTw/9ehMYmHL5VjJ54uE0er+oP7DfWPlj?= =?us-ascii?Q?d/UojUm31UwG/tPhBskaDeG1qYkEIHIixZAOSOntZIyBszffNgj4vwQ1Lz/T?= =?us-ascii?Q?1bn4qEZGcdMXRG8Yd5t4l4V96isisDSbdUt3e7UXfi5W09TPWVSRT95ZNaIP?= =?us-ascii?Q?ejaJqxDOu+Lt9hBICUlmRLnzpCsxq1giG19Tvje2VRM427WwMyvQahH6ZRSC?= =?us-ascii?Q?/ZvYL0anhBpuYaOzm8/acibJwI4Ab8VSdpafoSQABwfSIRA5JWTuZ84Tm+8t?= =?us-ascii?Q?btBeUk/Ug9eNwWg68IJTWbVnxJwkJDVHc/WvHGQ6D1pfgKWdCE1LEvsGLaE7?= =?us-ascii?Q?udb1NdQl4Rs1j5ospocbxtPjLCplqgBQzSBI8AIgzyisC/xH4S7Y+fWygm/P?= =?us-ascii?Q?3i40R9bXBwlxJ/C8hnh0xkUihP+mEB0GalsbcQKZYBnXYDNjNMDdePAgHLYe?= =?us-ascii?Q?n1e8hy1OPE/3GR5OFeDL5Xdbsso1wNsrPmthPdKODQBsiIcEnQJoyiRNFNeX?= =?us-ascii?Q?rEvRAMbNBP1KXJy28UYm6LSCOuGmbVENYeDcN5vpTB+Or6jwaIoJOSOP89gE?= =?us-ascii?Q?P7qGar4CMejLZBt40vwJO7vHqjyXqRBOcfYFQZ0Auqaig5KhLacSsdEcUqFq?= =?us-ascii?Q?LvBrfNoe1yFTzRRaBfYDsrdgK4Z7vwulPfcJHiHMrmvLsvZT8b2p5kMBo5Hv?= =?us-ascii?Q?iAoxRWbi0+BWPf3M3oHwc5L+JAUcLjzrnB/wMh+9Tx8AXlVMYbltYby7GB/k?= =?us-ascii?Q?OC+5YIlHwJtsonyFIE6Aff6OdilE+K5IZ5ywfklrCf9jKVD+12aJFS7whUCh?= =?us-ascii?Q?BOYqu71PiLGkD4XiXmyLs3zXST8i7c4REo5?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR03MB1376;5:aj0NpmRVp16WnL+v+ZF7tCIEUfpg0xSrNonour3JmHYBb4sy2Hyxk7e+ZSOo8OsAMHtRJfynwNKvqayctmrdrmmQgIPG31UpsQWYoQrKPU26Edg8AG8UHbSXUb4Lz17/6RiG/WNB8UiON/rsKcEi9A==;24:h1+yPSFtQ688f1IjNv6z4Mg8bScovsjj1w3/qAqnFnD2blqI55aGcGPNlxz6P4A/MFxAFc+5y+XXGSdGobLcKH8a7B0WtxUUFQtGbfwFq9I=;20:KM16/FGsPqYEqNvwi5buTmQC3EXk3jD0ro/3GGT1Sn0niB1nJ2HiUX17awfCXU/JWBl8rwTLKmWEHq2v2qXZXg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2015 19:36:05.1845 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR03MB1376 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4243 Lines: 155 Based on Sudeep Holla's review comments, the implementation can be simplified by using the two flags: IRQCHIP_SKIP_SET_WAKE and IRQCHIP_MASK_ON_SUSPEND. This patch enables the flags in the struct irq_chip and removes the unnecessory syscore_ops callbacks. Signed-off-by: Shenwei Wang --- Change log: v2 - Fixed the typo in the subject. drivers/irqchip/irq-imx-gpcv2.c | 83 +++++++---------------------------------- 1 file changed, 13 insertions(+), 70 deletions(-) diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv2.c index 4a97afa..e25df78 100644 --- a/drivers/irqchip/irq-imx-gpcv2.c +++ b/drivers/irqchip/irq-imx-gpcv2.c @@ -22,7 +22,6 @@ struct gpcv2_irqchip_data { struct raw_spinlock rlock; void __iomem *gpc_base; u32 wakeup_sources[IMR_NUM]; - u32 saved_irq_mask[IMR_NUM]; u32 cpu2wakeup; }; @@ -30,79 +29,25 @@ static struct gpcv2_irqchip_data *imx_gpcv2_instance; u32 imx_gpcv2_get_wakeup_source(u32 **sources) { - if (!imx_gpcv2_instance) + struct gpcv2_irqchip_data *cd; + void __iomem *reg; + int i; + + cd = imx_gpcv2_instance; + if (!cd) return 0; + for (i = 0; i < IMR_NUM; i++) { + reg = cd->gpc_base + cd->cpu2wakeup + i * 4; + cd->wakeup_sources[i] = readl_relaxed(reg); + } + if (sources) - *sources = imx_gpcv2_instance->wakeup_sources; + *sources = cd->wakeup_sources; return IMR_NUM; } -static int gpcv2_wakeup_source_save(void) -{ - struct gpcv2_irqchip_data *cd; - void __iomem *reg; - int i; - - cd = imx_gpcv2_instance; - if (!cd) - return 0; - - for (i = 0; i < IMR_NUM; i++) { - reg = cd->gpc_base + cd->cpu2wakeup + i * 4; - cd->saved_irq_mask[i] = readl_relaxed(reg); - writel_relaxed(cd->wakeup_sources[i], reg); - } - - return 0; -} - -static void gpcv2_wakeup_source_restore(void) -{ - struct gpcv2_irqchip_data *cd; - void __iomem *reg; - int i; - - cd = imx_gpcv2_instance; - if (!cd) - return; - - for (i = 0; i < IMR_NUM; i++) { - reg = cd->gpc_base + cd->cpu2wakeup + i * 4; - writel_relaxed(cd->saved_irq_mask[i], reg); - } -} - -static struct syscore_ops imx_gpcv2_syscore_ops = { - .suspend = gpcv2_wakeup_source_save, - .resume = gpcv2_wakeup_source_restore, -}; - -static int imx_gpcv2_irq_set_wake(struct irq_data *d, unsigned int on) -{ - struct gpcv2_irqchip_data *cd = d->chip_data; - unsigned int idx = d->hwirq / 32; - unsigned long flags; - void __iomem *reg; - u32 mask, val; - - raw_spin_lock_irqsave(&cd->rlock, flags); - reg = cd->gpc_base + cd->cpu2wakeup + idx * 4; - mask = 1 << d->hwirq % 32; - val = cd->wakeup_sources[idx]; - - cd->wakeup_sources[idx] = on ? (val & ~mask) : (val | mask); - raw_spin_unlock_irqrestore(&cd->rlock, flags); - - /* - * Do *not* call into the parent, as the GIC doesn't have any - * wake-up facility... - */ - - return 0; -} - static void imx_gpcv2_irq_unmask(struct irq_data *d) { struct gpcv2_irqchip_data *cd = d->chip_data; @@ -140,11 +85,11 @@ static struct irq_chip gpcv2_irqchip_data_chip = { .irq_eoi = irq_chip_eoi_parent, .irq_mask = imx_gpcv2_irq_mask, .irq_unmask = imx_gpcv2_irq_unmask, - .irq_set_wake = imx_gpcv2_irq_set_wake, .irq_retrigger = irq_chip_retrigger_hierarchy, #ifdef CONFIG_SMP .irq_set_affinity = irq_chip_set_affinity_parent, #endif + .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND, }; static int imx_gpcv2_domain_xlate(struct irq_domain *domain, @@ -253,7 +198,6 @@ static int __init imx_gpcv2_irqchip_init(struct device_node *node, for (i = 0; i < IMR_NUM; i++) { writel_relaxed(~0, cd->gpc_base + GPC_IMR1_CORE0 + i * 4); writel_relaxed(~0, cd->gpc_base + GPC_IMR1_CORE1 + i * 4); - cd->wakeup_sources[i] = ~0; } /* Let CORE0 as the default CPU to wake up by GPC */ @@ -267,7 +211,6 @@ static int __init imx_gpcv2_irqchip_init(struct device_node *node, writel_relaxed(~0x1, cd->gpc_base + cd->cpu2wakeup); imx_gpcv2_instance = cd; - register_syscore_ops(&imx_gpcv2_syscore_ops); return 0; } -- 2.5.0.rc2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/