From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752231AbcAFWWG (ORCPT ); Wed, 6 Jan 2016 17:22:06 -0500 Received: from mail-by2on0113.outbound.protection.outlook.com ([207.46.100.113]:55491 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751906AbcAFWWD (ORCPT ); Wed, 6 Jan 2016 17:22:03 -0500 Authentication-Results: spf=permerror (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none;freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; From: "J. German Rivera" To: , , , CC: , , , , , , , , , , , , , , "J. German Rivera" Subject: [PATCH RESEND v4 08/11] staging: fsl-mc: set MSI domain for DPRC objects Date: Wed, 6 Jan 2016 16:03:26 -0600 Message-ID: <1452117809-1870-9-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1452117809-1870-1-git-send-email-German.Rivera@freescale.com> References: <1452117809-1870-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD051;1:W0WoOKgskrQV26l0DtDtHzeNLwRicV982WAM3PZK5UWlPv7lxoao1A54t5BJfMo8i5W9TdfP2KIsqc1ITtQzqYKkxF7APMfDTjZeuvGY6DAQIeDveJmUoQvpK8uholqV50MpM5sLFP6tLfc+Q1Pvyuol7o+Pm7HPL2zbCcEXHhQD36H8OHk1eBu+0BTA8b8KCNMGHkue2DS1WTMMaEq0iuhxa5Nzi969GVpREGlRYB3I7LYb5HFb3KQiYMCJibA756q7VOTe6Llj4CbaFxitWI7Ugud5R1X+ufGxngRYTYBEDPunvlblKMyQ7zdt4dRUu77kTd5S8D7VSNs64X5hl+1MMzhgThwLmvV8PgGE/jHpdL50BWeHtCllNDeAFpHoslBR1UgPyelXpHlTPQ9NfE7nwzYE1RyJY2mwB8X1m4zFq4+ROTJpyExgk6FE094h X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(448002)(3190300001)(199003)(189002)(87936001)(19580405001)(5008740100001)(5003940100001)(2950100001)(50226001)(2201001)(104016004)(6806005)(19580395003)(92566002)(77096005)(2906002)(4326007)(48376002)(106466001)(50466002)(1220700001)(11100500001)(5001770100001)(36756003)(47776003)(586003)(50986999)(97736004)(81156007)(189998001)(107886002)(85326001)(4001430100002)(1096002)(229853001)(86362001)(76176999)(5001960100002)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:BY1PR0301MB1303;H:tx30smr01.am.freescale.net;FPR:;SPF:PermError;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1303;2:Wjn9c4uj/DbbULyKShGdcDrew/Rxob4aMQA2EkLLNVjqJnebQUzKW7ggOkXHOOdxM6DBsVNQYEUZDby6ktmCije+l8WEyHBkkSPZ33MZt3L5mFO3u8wZWVPHLH01WgOYatBdRQDkZbIxu5EA22XTZA==;3:BuF2s6yMRCvfTYlqIRBdu+rvgaiuib4Y/zztEIX4dfUGQsxScqSYmGbukmpfCQmzGuIdmsbWTYfOLdu1g/0NoL2VpV/g7ntBnCdnW5GxJM+eqQG13U2cJ0Yzoa1OL4wHohu1HNRRmdzgJwSjeGpdWWaFBD/U8o7QVHNSGqnT6k+wYK/kdzwBChJbL+7IGHYwTL+v2bWXvo1zOycSMLupS/juG4DMIgnccdR+GW0CcD4=;25:xEDWAmZ7J9lkfk+GThmwCzyPdzi0zjQ1xzf32Scg6eOfWU5KxToUqLOiw+FyL5Sj2W1lzsDmg8AmdgbBTQGURzbco1GPmO3KcahvbN5Pr8jiX+w/ldu5X7FT+bCHIQHMKPNEF/S9Lnkl8JdMd6E1Aofia6mPyTmemg0U10v/KEmjcry45mH2WY92oZ0+Z3Dwz8IBCmpeLHzMW4+yRV3CIQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1303; X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1303;20:vTKV9YVt15O3N9TFqnRWr0mhcmeJ8SESCcADvomOWsR2/ICOOlPca8WahMpwjzYMRL3NGwLj33xD/bUupMs6WG9hGZ4niUeCy0dHW/rF3l8xfcVaMbeoxKtpIq1P8ReqgYw30v+K8bH76yXLFOr4krYR3ipSSkhgbAPEtMrFAETjAMcGtXW6NhaWBfXbZypQt+bV9/BHpFHpg+fJpKl5wLF1a1JPfjpBlF0jmcFwuIRmNc7pA2K3bKv34LNHUZnrJ/tHCJGcYqMZ+qLeYhugUX8TL0YWjuCun2ilk+eCfc0xOI5zk7qAJr/SI4tcXsekczAmpfUDmeSXv1oi5FwGZkb/FL2i/ofjlnsc4uvBl5w=;4:ZOf57STquYyA3cbYjDZWfJdBQGILt+6fwjMCHLL4ZzR9YwNtV0VZ25Q7I8ZA0DHD/ahvNnYZI7XKcg6ReFZO6s/QxA5U30NkSu0RZwGZnzlqeoxyn4Mbnrhk1GF8JX7QRcUKlf9XjFcWo6BSB/Ng3vVVT4xW5ImENmniG3+WnTDjjRf3uYy656bJ2svHRvJTdmMz20AOvxZgvIF+DV+HABIULWi6m6HsvqpASxQek7f2/hvO//ohP1Mktwl2FYh8h7+OgQDksxe5Y58JkA6SlIDloWpGWrPD+1kFSNq4xCCCgsiCSTgk5YkVKUv43QeLzPVwc7hquOFDBhj/JUVoGU4J06d3CH08lNw6ez5CnZINh9qG1+3nFgqdU9u+4yoOojpnlY/zZPgtEjkh92Z/hp+HNlUBU7gJMS/OX7ZrSUUJhSC+FUWWpokWx5xSL9BB X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(3002001)(10201501046);SRVR:BY1PR0301MB1303;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1303; X-Forefront-PRVS: 0813C68E65 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY1PR0301MB1303;23:PkBpeCODX/K8uz/dNxlPa6pT2ADg9T21s8l+kyp?= =?us-ascii?Q?qi2WK02cJ3sr+VBm2z8rJ13Y6qcjay5yfK+Q7YycmqKJixvFX993cYD5Epum?= =?us-ascii?Q?2V1nsA7FAJHpxWzWKy7jJ67598bQ3GlSEvxd6ariW5+8woSbJWJbe5XACugO?= =?us-ascii?Q?BB1vJT9BEw2/4GuqMHeG6RPJJ7lIoe+VedqW9jTFt/a42dtVb1mMOvMiQyKz?= =?us-ascii?Q?qNwrkkxVFmRyJEUiMwWqhsEdSU6uMnG+fvBA+FRma8/WaG+9d8sQ0XCJA4Du?= =?us-ascii?Q?UDtAvg1UevTIGJkeTX2b1e21xlP+yxHKgm1gLEeIk8X5UyHvzNQ1I4p5VOl3?= =?us-ascii?Q?BcAD8M/jSw1wLTzZV7k8ab6CddlHFFRcXTrqcmI2hONAsAOSF/WZAcWte3ml?= =?us-ascii?Q?qq3zfl91OuRWhZh2qnYk/Rt4Et2TOf2Dx81Prd2zm3fw8/Tf/xu83joX6wRt?= =?us-ascii?Q?Km/86NE6uefJikYUWsjHZ8NABPO19yfNmRByY7XjjOmR9B7g/23hgg3qEddE?= =?us-ascii?Q?FNMZBRYvQlfUH+qEJzoRUHkrRCXX01tSOpO3KfgM/7YQPUGwV2PvflhDiHnU?= =?us-ascii?Q?SauoQWCz8fzun/GyfAeKN814Nzk16tve/WbxbJDVk+RHpt3FW4sNy6HvGhRp?= =?us-ascii?Q?VOzUKxx9f6GFPBv985d7cdMzuDSNc7udR94w04+pCwsexVesut48vA8K92UO?= =?us-ascii?Q?xqL6dO5VxqQEdDqx4x3/MesECesfTi/G7vdlrd+vNRcHK1fo2Z/ZBdOimBzj?= =?us-ascii?Q?cXDPn0WBVsCZCqZL+BvIzcNyc606lPqF1bPzvGW08m2bryfRKIfqjXqz9k7w?= =?us-ascii?Q?a9lRSbAL9hld+/MckN260YT22/r3POz4+IGDN9phwO9WiUvJtkZb7tAaLttk?= =?us-ascii?Q?8Y81Tmc0Vyo9fd0EYPLOJR1IGVicmLFh6dY1XE3mw7mvQJ0R5YPRuDwFwPZF?= =?us-ascii?Q?L7ofrbc+2//JgMv0vHWptseEFw8crt6Qiaouk7JZdAFZ5GPvDze8/Xp/MSo5?= =?us-ascii?Q?rCl6DyZSWoQliHdouPFhxTYyc5L92fE1cRmwRGmFMWHz+OTYka4EPwxUaHc5?= =?us-ascii?Q?cznNbhSbXIbbcTLTE8a+hDRZtqSGn46TdhUIis1Xh2T+OEh/6+pwtvaT5W+q?= =?us-ascii?Q?ozs4OS7MzuzQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1303;5:Vdx0l06vewsqsmbAdhpznISgOKqqFkzNnVop/GGWgMkBIuu9wTphDaBaULPChg2SGgft/PCLAReb2LuecypPVUSCusqA7LqBllef14DZyUY6JzSQs7UyQJsBEAv96vZNV8jX6YKs+Zeu2Z8rvcaCBA==;24:u/siSXEHe3WKlAKdnBevffJTTYrQcATZLLufCpOGxmxJdO1/6krr/SZGbPOOef3XuY+Ye2UrpsrPXtLO0rQNv8WNWppogkjMKqcyxeoAN9w= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2016 22:21:55.8542 (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: BY1PR0301MB1303 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "J. German Rivera" THE MSI domain associated with a root DPRC object is obtained form the device tree. Child DPRCs inherit the parent DPRC MSI domain. Signed-off-by: J. German Rivera --- CHANGE HISTORY Changes in v4: - Addressed comments from Marc Zyngier: * Changed call to fsl_mc_find_msi_domain() to match new signature changed in patch 3. Changes in v3: none Changes in v2: none drivers/staging/fsl-mc/bus/dprc-driver.c | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/staging/fsl-mc/bus/dprc-driver.c b/drivers/staging/fsl-mc/bus/dprc-driver.c index ef1bb93..38fc404 100644 --- a/drivers/staging/fsl-mc/bus/dprc-driver.c +++ b/drivers/staging/fsl-mc/bus/dprc-driver.c @@ -13,6 +13,7 @@ #include "../include/mc-sys.h" #include #include +#include #include "dprc-cmd.h" struct dprc_child_objs { @@ -398,11 +399,16 @@ static int dprc_probe(struct fsl_mc_device *mc_dev) { int error; size_t region_size; + struct device *parent_dev = mc_dev->dev.parent; struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev); + bool msi_domain_set = false; if (WARN_ON(strcmp(mc_dev->obj_desc.type, "dprc") != 0)) return -EINVAL; + if (WARN_ON(dev_get_msi_domain(&mc_dev->dev))) + return -EINVAL; + if (!mc_dev->mc_io) { /* * This is a child DPRC: @@ -421,6 +427,30 @@ static int dprc_probe(struct fsl_mc_device *mc_dev) &mc_dev->mc_io); if (error < 0) return error; + /* + * Inherit parent MSI domain: + */ + dev_set_msi_domain(&mc_dev->dev, + dev_get_msi_domain(parent_dev)); + msi_domain_set = true; + } else { + /* + * This is a root DPRC + */ + struct irq_domain *mc_msi_domain; + + if (WARN_ON(parent_dev->bus == &fsl_mc_bus_type)) + return -EINVAL; + + error = fsl_mc_find_msi_domain(parent_dev, + &mc_msi_domain); + if (error < 0) { + dev_warn(&mc_dev->dev, + "WARNING: MC bus without interrupt support\n"); + } else { + dev_set_msi_domain(&mc_dev->dev, mc_msi_domain); + msi_domain_set = true; + } } error = dprc_open(mc_dev->mc_io, 0, mc_dev->obj_desc.id, @@ -446,6 +476,9 @@ error_cleanup_open: (void)dprc_close(mc_dev->mc_io, 0, mc_dev->mc_handle); error_cleanup_mc_io: + if (msi_domain_set) + dev_set_msi_domain(&mc_dev->dev, NULL); + fsl_destroy_mc_io(mc_dev->mc_io); return error; } @@ -463,6 +496,7 @@ error_cleanup_mc_io: static int dprc_remove(struct fsl_mc_device *mc_dev) { int error; + struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev); if (WARN_ON(strcmp(mc_dev->obj_desc.type, "dprc") != 0)) return -EINVAL; @@ -475,6 +509,11 @@ static int dprc_remove(struct fsl_mc_device *mc_dev) if (error < 0) dev_err(&mc_dev->dev, "dprc_close() failed: %d\n", error); + if (dev_get_msi_domain(&mc_dev->dev)) { + fsl_mc_cleanup_irq_pool(mc_bus); + dev_set_msi_domain(&mc_dev->dev, NULL); + } + dev_info(&mc_dev->dev, "DPRC device unbound from driver"); return 0; } -- 2.3.3