From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932627AbcHBC0u (ORCPT ); Mon, 1 Aug 2016 22:26:50 -0400 Received: from mail-sn1nam01on0044.outbound.protection.outlook.com ([104.47.32.44]:3192 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932592AbcHBC0o (ORCPT ); Mon, 1 Aug 2016 22:26:44 -0400 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;nxp.com; dkim=none (message not signed) header.d=none; From: Zhao Qiang To: CC: , , , , Zhao Qiang Subject: [PATCH v5 3/3] irqchip/qeic: merge qeic_of_init into qe_ic_init Date: Tue, 2 Aug 2016 09:57:36 +0800 Message-ID: <1470103056-41711-3-git-send-email-qiang.zhao@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1470103056-41711-1-git-send-email-qiang.zhao@nxp.com> References: <1470103056-41711-1-git-send-email-qiang.zhao@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131145773518865254;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.158.2;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(87936001)(229853001)(19580405001)(47776003)(50466002)(19580395003)(2351001)(69596002)(86362001)(85426001)(76176999)(33646002)(50986999)(356003)(8666005)(7846002)(48376002)(106466001)(305945005)(36756003)(97736004)(189998001)(77096005)(110136002)(50226002)(81166006)(105606002)(586003)(4326007)(2906002)(5003940100001)(8676002)(8936002)(68736007)(2950100001)(11100500001)(92566002)(104016004)(81156014)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR0301MB2058;H:az84smr01.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD026;1:WTYdBNG4HLCxVP/5Z1zq3qU/AlVuCagLY/KMvLonS8w+Ql9D0Tl611orukbbcBHvzcbASrQ9e5X9oIhHqppYCBzO7OW+HN7BwFLgdlsvOC0f02oYq5Mr2bNKqMNxbc+t+WPYZDN56r+hrhPXRMlxhXxKegvcFfqg3o6j+XyYUI/sqomJDb2aF5/6AQ0Az1rKhuAfjnPj1hnA70M6bLCDVp91v92ID8jixlcGpon/qZUYG+1xs3KSMr8lmpfCaaqaVSNxgc5n2hBi4lZ0HvmUlA3mWREcTBQET7tqVfaBUtEjfd0TCmLHSawgYkO1F75pYteiPFQrCd2cJWj+/o1eykKdPMhS1gUIrgmCFOghO7HsHTyb96KPexGFNL8YLC+FA66H5wqG2mF4x7RCrMxMQ+dIc3sM2YecbmUEANr/epsxZ/+3m5ArYvHYq31vTLkjPNrlZO7AG7azj3lJQGuILyBKjTm+Pu39GgkbBYWVs5fuqaLdJfxEmdl/KSFilM5EtZQIeS0YhWOnfTSHhJkuIc587YN+WZ0P/LDHn7JS/FHO5pvCBgVtnKs2lat/HagJWOB1VAfKpSDgYjagMb6DVFOqttLQQ4eR9YeJEOyklASoayNgIGTF5z5EtTCYj1v4M5EFKKuVygvZQ1Lll8OAb+rYDWQKCvHsvImJp7Vc+FvzhojcgM1R0yqa03T1TqWkrWjZME+xFgpWZY7PXhPQptEbKedOq4tjYb8fKRNOMM8= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: c83249fe-5b43-4d0b-6206-08d3ba79fed7 X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB2058;2:V5QmkkyWFyY25E0N/bLuPV/CGwVlzTUhy3dj5UPStwO4j42+roy8DFMMdObO9NhRgMGxYDxqQLBSotf6D6bORmaeBW2NDW5MEHYhs3+YTvNY7EVIo7ZJpqVdt1PSMOZEmnPKWCEQwHu5r0rZA1gO5UT+6d+iYtkvilq/pAAxfu7T5MCNNEhGAZu/Jn6kObby;3:vMQcOZzV8tt4lfV+T61SdcRDzamJk3ghlZ6rnbeszJDaqoqP7KHYEdyYMijbABLj4shJi3PD7oB+PoQnz5MpTa8YjqhY9A1LKZaR35SoPDK0lICzP7j5qlfr1NFoslURAo3zDTcVtPDjMEY6EgOZQ8yluUNUivEhiUgPOT50oinw8tvjGW0RmY8+kVdtcx1p3F0Pu7CZJfzd6eUj6W7enrVFWsONMKNPrNgswIQzQUc=;25:YJnCycLrIWfoVqh0xNuwEXjZvpyKkRGHchAa/jSCDPFXzRD4aS6hpgqo6yDletvlOIxKIYcqqQertE0FM44x2Y48oCawFqiniZ8LBQ7t9XWvNzWozUfZ8UZ+8zO8DXq9V5aS8qYGXMKjlvUShelgNZDbWgoLzRlxDoKaswxT4DcKrf7EkaobPEcwdihw3AvStqfV0TAqP1eygIaob0EgEDorUmVWmak1iXKRdp8VbBCE16WxSgm0W7iO4FRJLWbULMSgzdnBWo6F6bskH4Fm23FkU9el90prBkKKzmx3y5PSCB2TxMpGNXSiZbE6AO0WM900B5SFNVG4uV/ont+ApJR2wVjccOeB9UnIh17F58cFLRkhizcB27rp36s9F1lPLMUVmNC81rFKD4uAAZvgV8XMwBB6XSsfsBBYQNE9BS8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB2058; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB2058;31:9MLLxcSjBDn+o6jZwJN+AK75lvW6WzgZvpvb2deaC+kY88ByvUiQPpJDdlwM6KeB2CVwmSPoesoLOLUBJBoSfLBaOjOK5D4Rz34Mkv8hobku6pqsIpsfDEA5gy56sYzByn8lTLrFkbM3f5y4QZsxWQuT5vwHuAM/gvV9q4FAV1cZaJzcnqrMge4bGoyN4XaDmtOpg2lOYuy6MpD7Az/lFQ==;4:F/oUviC0adA5Pl/4ERePjw9yqExp3Zro1GOA+dHOeTmgJsGQUwSZXzWL9535ZLKN9HBYgJYahcSziFXMLrGz4Kt808/xPL0pV/4SvWnjEb/Ee9/aNPB1sXMjVorOPsU6BzeRW4OcoAIYbOaGtbMpM58E6E1JhuUPjLW84XEuJAG/buIZFj9C9SyqypC4CorVo1kUpBUo6MhMN+4MI/zMXR0bIe7b1azXd+NPSwdeM4HJ79TS6qtoySaNzaldlssCYoeS8WLQN/jMuA2TLRXVayV9lhAU78wkdnhCbKw1xkRU1oBQwbyaNDkmsmLT8BWeW/yixnScnDZvfqItcHTM0R/grQMQBGzTEpBGQ07i+CZLtOiSKLiRjBIVqZ0gmX9FMqxCu7l7qTNNXmkqcoBY679N39y1O5TkXuDOOuvHw9L0xP1rQhjPe3W1hGe+LZgTw9R5vStgBuZ8nfPhysko/9OBRtG1Sy5mSpNpXFWJ+Dp9eQ2ZTDsYVpcFktv2a2QtPUntkbowwn2xZY9W04tL9A== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13017025)(13023025)(13018025)(13024025)(13015025)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:CY1PR0301MB2058;BCL:0;PCL:0;RULEID:(400006);SRVR:CY1PR0301MB2058; X-Forefront-PRVS: 0022134A87 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0301MB2058;23:YOtnUJkZihhnHTch0200cS7q3wQOU9MN4bKLkuy?= =?us-ascii?Q?wDfHd8Q/jmSzfY/ShuoCCDbxxbLQxs4HD4v3va0vLKfNTlzOYv+QXyFPS2RZ?= =?us-ascii?Q?O7PWlVcJGpiTXQy7L96ZlRqPVsp0Hd+ynyBAbz3Wwk7Z/DVdWAi2VtmTrp7d?= =?us-ascii?Q?nKekQpBMl4voiFLOQkgf98cjsyHHi8zkh1+kI2hR7hesEU9IobJ6jyc+LzSk?= =?us-ascii?Q?qN4LX9ZcPwYEm00uHagn5EztzvzqNbPqN/pqYyDgHKdc1igRfd8G9e5irpjm?= =?us-ascii?Q?ZOrcaRc4X3sfzRujJkWW+XQCpzLeePpLJ4FU1tfN4bVb1b9xGdCnjGrFAZHA?= =?us-ascii?Q?Xo3+fcsjxUqRgwxpGMNM56CqjOwqpG+drifaxs9xFwQlKjvaQC0mWkA+wgNK?= =?us-ascii?Q?RmwLOSb7DW48cAFdlgCTMhTc2hv6XLomecZLstpn+OYJsZAyO8ERkDkj2laW?= =?us-ascii?Q?YUOXYlyvfekWIcwGybSO5S9HTvz0yPC23TPJvW65z4aiO5IlpgpstXxaqZbe?= =?us-ascii?Q?BCxd9snQxM6hO7T3gNJIe/NPCY+Cc9ShUFjwsQbgtp1HlS2VPsdn8MwAwHiF?= =?us-ascii?Q?UP7llNNmdbvqthmuynhZNw6i4FL49dIAwXC12W/5hbdQxmOjhFgWyM7XhMWS?= =?us-ascii?Q?moX0s3cbLX3KNvF6gN2IU7PxkrjK0389i9wtN6xPVqn8A9tTyz98CsKSHFyx?= =?us-ascii?Q?NdtqBO5lwH3pYVC93BWGggvFkZsW7R0LcFqktpAY1/TbUOr0yVMD3a7z9M6N?= =?us-ascii?Q?ewyJKdCncoVP+5NF5+qmCIHGT7WyE1Vuxpijn8WrcKakj+KfjFiwNKaYvtzy?= =?us-ascii?Q?PEMv47ttlTTbqBFo9pQX6AwmtKU0ebiem+eCLAVw9rnEjNooFQSMG45pgB7x?= =?us-ascii?Q?zwmkqySbX+/Yzp3E4EbK5XadRDvJ2mwk4hMv6/SU/e+yDFFBlqvTuvs6md2G?= =?us-ascii?Q?W93QkBtZThy71a3+9l/wYlPAJT9TCkhj/EWZZrQmvNkwgf27Pq8Rk4+hj6/g?= =?us-ascii?Q?8eD11pu5ppNbscWaukEI3qR/y9JNpCf0GzmeT6QQ+2y/YW5IhB41xsgSZapx?= =?us-ascii?Q?IE/ptT3IjkpHAu5buySdao+Th+5qmliwnsbZVd9RJBX8zOhcHUKh8wJx6N2z?= =?us-ascii?Q?yMixE77zINvWDhoLqEpms31dgCUO+sRU3s8XVX0YNBFx32cPgw+TXIw=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB2058;6:fw9ptX6Vz7E337y8eidf+WPFn5GBHsZMNKSV7n4aUjPoMHXWUJGqAktc6gm9rIYjWuWaE1MGcz5KOYnhWBMMFZ6rz8MBlfunMA1Dz75O7EUzW77scemjseB3zPz0RfJUbhkjFo0NVWb5jG7j/nilPJbkKT0dXaQKX5AXYKNM0Kq9YIY0inWRXb3IQHhvg0N3zepzR1JuC0UcpZri2N/rrejIX/uNHxjoOTykKAQnlHpoA+NAmxZEypf6nDiwBKKEcMsTx9vq6JG8TXqDwDAyYOnC+bcaybERG3Li6WIByYM=;5:uIDBcmVEIpQiMRDI0/1bOhTarl1vmBPvUVTV1qoDGAXd4f4+I/zDZS6w1kbPzJv+gSlv3J6u2wfhBqiCCY0NZasEU3mVVhvMlu3GnePNcsdhMtkbu0xnI1l9iCV62/lz59+/J6Nui7VdR7ULRQSs9oBgwXN+hEoO6Y/wcWFoIFo=;24:CEloQnrkAKpsRzF8njq/2+QmkxviUbh4ebaQZRizlSKoTV85L+jcwbeIy5sOonnp+hAkAuZnkCCA/fAq1PXdIXf+Up0U7fXv4y1WTQdXjjY=;7:KZSGG8svGbeHwAeggYYskh3Tuc+r4n9aH+VM33PCrm3xMU8VN9OvAhy3uiLkHHzoCHtQaLNsmZBNCu65mxGMbJ5LNDrgpYOMjmVnceHu+A/aUnHroCpkn0OFh5IdWBkl6SotBtZqRPl1Dx3rOmYKJaLfn2DCy0sxPU9N8JsTn/KDYNfO9Nuq9lsBp34hQyb/ONBmYQkY/fidDaxrjRwbQoF4D2PjvdneEwt4dnllIU/cF6WzQ/87IfRLXEDwoBMv SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2016 02:09:11.7773 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB2058 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org qeic_of_init just get device_node of qeic from dtb and call qe_ic_init, pass the device_node to qe_ic_init. So merge qeic_of_init into qe_ic_init to get the qeic node in qe_ic_init. Signed-off-by: Zhao Qiang --- Changes for v2: - modify subject and commit msg - return 0 and add put node when return in qe_ic_init Changes for v3: - na Changes for v4: - na Changes for v5: - na drivers/irqchip/irq-qeic.c | 91 +++++++++++++++++++++++++--------------------- include/soc/fsl/qe/qe_ic.h | 7 ---- 2 files changed, 50 insertions(+), 48 deletions(-) diff --git a/drivers/irqchip/irq-qeic.c b/drivers/irqchip/irq-qeic.c index 1463731..4f49d4b 100644 --- a/drivers/irqchip/irq-qeic.c +++ b/drivers/irqchip/irq-qeic.c @@ -406,27 +406,38 @@ unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) return irq_linear_revmap(qe_ic->irqhost, irq); } -void __init qe_ic_init(struct device_node *node, unsigned int flags, - void (*low_handler)(struct irq_desc *desc), - void (*high_handler)(struct irq_desc *desc)) +static int __init qe_ic_init(unsigned int flags) { + struct device_node *node; struct qe_ic *qe_ic; struct resource res; - u32 temp = 0, ret, high_active = 0; + u32 temp = 0, high_active = 0; + int ret = 0; + + node = of_find_compatible_node(NULL, NULL, "fsl,qe-ic"); + if (!node) { + node = of_find_node_by_type(NULL, "qeic"); + if (!node) + return -ENODEV; + } ret = of_address_to_resource(node, 0, &res); - if (ret) - return; + if (ret) { + ret = -ENODEV; + goto err_put_node; + } qe_ic = kzalloc(sizeof(*qe_ic), GFP_KERNEL); - if (qe_ic == NULL) - return; + if (qe_ic == NULL) { + ret = -ENOMEM; + goto err_put_node; + } qe_ic->irqhost = irq_domain_add_linear(node, NR_QE_IC_INTS, &qe_ic_host_ops, qe_ic); if (qe_ic->irqhost == NULL) { - kfree(qe_ic); - return; + ret = -ENOMEM; + goto err_free_qe_ic; } qe_ic->regs = ioremap(res.start, resource_size(&res)); @@ -437,9 +448,9 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags, qe_ic->virq_low = irq_of_parse_and_map(node, 1); if (qe_ic->virq_low == NO_IRQ) { - printk(KERN_ERR "Failed to map QE_IC low IRQ\n"); - kfree(qe_ic); - return; + pr_err("Failed to map QE_IC low IRQ\n"); + ret = -ENOMEM; + goto err_domain_remove; } /* default priority scheme is grouped. If spread mode is */ @@ -466,13 +477,24 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags, qe_ic_write(qe_ic->regs, QEIC_CICR, temp); irq_set_handler_data(qe_ic->virq_low, qe_ic); - irq_set_chained_handler(qe_ic->virq_low, low_handler); + irq_set_chained_handler(qe_ic->virq_low, qe_ic_cascade_low_mpic); if (qe_ic->virq_high != NO_IRQ && qe_ic->virq_high != qe_ic->virq_low) { irq_set_handler_data(qe_ic->virq_high, qe_ic); - irq_set_chained_handler(qe_ic->virq_high, high_handler); + irq_set_chained_handler(qe_ic->virq_high, + qe_ic_cascade_high_mpic); } + of_node_put(node); + return 0; + +err_domain_remove: + irq_domain_remove(qe_ic->irqhost); +err_free_qe_ic: + kfree(qe_ic); +err_put_node: + of_node_put(node); + return ret; } void qe_ic_set_highest_priority(unsigned int virq, int high) @@ -579,39 +601,26 @@ static struct device device_qe_ic = { .bus = &qe_ic_subsys, }; -static int __init init_qe_ic_sysfs(void) +static int __init init_qe_ic(void) { - int rc; + int ret; - printk(KERN_DEBUG "Registering qe_ic with sysfs...\n"); + ret = qe_ic_init(0); + if (ret) + return ret; - rc = subsys_system_register(&qe_ic_subsys, NULL); - if (rc) { - printk(KERN_ERR "Failed registering qe_ic sys class\n"); + ret = subsys_system_register(&qe_ic_subsys, NULL); + if (ret) { + pr_err("Failed registering qe_ic sys class\n"); return -ENODEV; } - rc = device_register(&device_qe_ic); - if (rc) { - printk(KERN_ERR "Failed registering qe_ic sys device\n"); + ret = device_register(&device_qe_ic); + if (ret) { + pr_err("Failed registering qe_ic sys device\n"); return -ENODEV; } - return 0; -} - -static int __init qeic_of_init(void) -{ - struct device_node *np; - np = of_find_compatible_node(NULL, NULL, "fsl,qe-ic"); - if (!np) { - np = of_find_node_by_type(NULL, "qeic"); - if (!np) - return; - } - qe_ic_init(np, 0, qe_ic_cascade_low_mpic, - qe_ic_cascade_high_mpic); - of_node_put(np); + return 0; } -subsys_initcall(qeic_of_init); -subsys_initcall(init_qe_ic_sysfs); +subsys_initcall(init_qe_ic); diff --git a/include/soc/fsl/qe/qe_ic.h b/include/soc/fsl/qe/qe_ic.h index 1e155ca..6113699 100644 --- a/include/soc/fsl/qe/qe_ic.h +++ b/include/soc/fsl/qe/qe_ic.h @@ -58,16 +58,9 @@ enum qe_ic_grp_id { }; #ifdef CONFIG_QUICC_ENGINE -void qe_ic_init(struct device_node *node, unsigned int flags, - void (*low_handler)(struct irq_desc *desc), - void (*high_handler)(struct irq_desc *desc)); unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic); unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic); #else -static inline void qe_ic_init(struct device_node *node, unsigned int flags, - void (*low_handler)(struct irq_desc *desc), - void (*high_handler)(struct irq_desc *desc)) -{} static inline unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic) { return 0; } static inline unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) -- 2.1.0.27.g96db324