From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752664AbbJZQGK (ORCPT ); Mon, 26 Oct 2015 12:06:10 -0400 Received: from mail-by2on0111.outbound.protection.outlook.com ([207.46.100.111]:22944 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751184AbbJZQEv (ORCPT ); Mon, 26 Oct 2015 12:04:51 -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;freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; From: "J. German Rivera" To: , , , CC: , , , , , , , , , , , , , , "J. German Rivera" Subject: [PATCH 07/10] staging: fsl-mc: set MSI domain for DPRC objects Date: Mon, 26 Oct 2015 10:49:18 -0500 Message-ID: <1445874561-14761-8-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1445874561-14761-1-git-send-email-German.Rivera@freescale.com> References: <1445874561-14761-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD053;1:4si1n1WH8CIPt10gID/JyjsovBMvVuQsEwYAjxQgN3AjnH30GzKH4wXU0GIPenpHcWFSc9J59wWJ9tGFjI8okwwMUqc0zIaPIMPFTsUq9FQbDF6keVHNDhBPOR3g3NLDu3BDuj4hyj8xdjW7EUcCMh8P4EKNr3k7EH8/G6bYkyxvveBshKV4Vdd6eoBp/kkbPIF9FSLJNvfyzPwlkWSu4adflToSaCt8RtWJ0ekz8u+DOcdQKvad267lvJwjrOGG+rlrTqbKs7r/ERJ4J1Sr58JihT5NiwX+YHkhckEFYNPgXMGA4U5Kw3BOZ+laDdROkZ6N5nXH+0iHggTeUw+sAK5m6mWvmJLGtCatPJoV6N7zsuX37O6UPu7aVPx9pcFtAbfOdv+X1++48jZOTRB3/w== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(50986999)(76176999)(47776003)(87936001)(189998001)(86362001)(2201001)(48376002)(50466002)(92566002)(5008740100001)(50226001)(85426001)(5003940100001)(229853001)(105606002)(77096005)(106466001)(107886002)(2950100001)(81156007)(11100500001)(19580405001)(19580395003)(6806005)(5001770100001)(104016004)(97736004)(4001430100002)(5007970100001)(36756003)(5001960100002);DIR:OUT;SFP:1102;SCL:1;SRVR:SN1PR0301MB1647;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1647;2:tgxlfcj+yGwbNUmeDfuGxLBHUZOKBp0SGnnskf+aHIa5S06/ogsaRNNoUiJZAJo3x7LE3KbjvKv5DsU5RwhT2XCr1UzMOqnHWW3BB5LgkapEhcuq+mv7sJQ12EuUBADyjz2YiHVJ4xdc2mINTV79hJs1lOHYesIgJSkbAQnaScs=;3:mggsXY7d9/HLNU3z4HSJLDM/v2C+qsFhHE/LjctYevFdl9ENCH33oDF0pgXqtaqQz1llB5ySzgWYRnh0qjIDkT1F/k/LEkULD7VTF1BO2N9FK+RYr7w9VFlqS3GvXPJmxNaQjrQ56PT5N70bCfHqt+vKWEwLihwvSQnELRSQNizF0g9ElkGpCNWkKvqeT065Rp9GICWwmPb0b5sA4IpJI4qvRV5fELzMlPLJiKD9MEw=;25:3X0U5Z617A1U+ZKOcM1nqqB+MYsKawD0kCehl4YihOSCfwe+P39FchhavcEZDGGAUZWnHIhs4K0DsgijuTIF4547gDM2RRFTKQdl0vAIdGXvdgePGtMb9xNoMICI92woXHY19gEGEhT1WJX4/wyFZIl06nKegU0WcxQ1v8Y0cwsSEaRIJyEGpj+2+ubYCWuiDQjW4ivKSfAyUSN5xSwPThGlV4LARYCMaeykWeMURzLsWeqqEX4TYCd53EqCjGTT9qc8/kgVxfFrT/CMsqmLGQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0301MB1647; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1647;20:eXN3hqrq4eM2HKha6zgLXdcfwP8+Nkd1fVAZMoTDuIDvctTR+R8gkZMRRDUXk7wawAg4RRODOZIt0ayL8ZRQ+zKRrR6IiebPo7fhugIB2XPOT7pY+sRtRD57g1zRNioPu1WA6QmS5ZVrcXZ3pboTZUo+5DcjOdXc4CmzhwYvQy1AqhfKe1IVjrhwlWj5p3+/oCS5RHkmYFo6QvwGjk2csNo+368PMCY7XzXv4uASzFojS0M80m1Yl6jbzQdVUbV4VAiiGvPD8q0UqmAx44UFcHfiKbmDupUaafOPsHxmEtTaJa/eYRcSF6aClSqcPQV/gODce5uexXFHphtkxURrHiuOGpi10lQL3UukEWUQLyo=;4:SxIqwH6SuFFkeR/FVHMFj3XKse6qfJ0X9Bpms0uYJUZD0LCY6T35DYfjpxQa4m1Xyj4E7fp3QUkyrngihTPGMqPqYSKeLdhnzrPj/aJIL3J5HvI5UciAal0UuvYoLsFTlK7xtuGWEfPNrLtgi3n2ROZnMGsaBxgEUC6pYMQUT89r834JoiibBDNhu3K78g+C84pLsCxSsuAxSJR9CMyXhl7JyqISa64jS60CtamOzQkUtYwbce/A0CZMHpniYiStTiCOoVJ81MnwuNj1XkdSUKeCQXBhkftn/nkq8RGa+fjh0ji6LfGHg2gPVFM40wYBFJzo/3SzB4KHc/tqpkAZ08Tnaju7MIQpsqMoIV/OAgV57GwcWRbK3L7ZSgSCw15D 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)(5005006)(8121501046)(3002001)(102215026);SRVR:SN1PR0301MB1647;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0301MB1647; X-Forefront-PRVS: 0741C77572 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR0301MB1647;23:q3JPXr3dqBjfopa4nLNRF3FjEBlMlPLs+nQpnVl?= =?us-ascii?Q?bdLsFwEShZnhxW899T06dti8Fj471bRaESX7RjtGK9d8pHEzDqL5hu+ejCVA?= =?us-ascii?Q?jXo7Xho5lalJFNB/Guyx0RHklgFhdROr8/Gfi8zUhBYG6qiN8N4qL1F0R7qo?= =?us-ascii?Q?Q6++lfNFHB7Qnr0Kk+Cp+D0hq2iuu857zeRcu8P9TQpAgn9feUWT9JMAYcxz?= =?us-ascii?Q?ALxYBCPpyEFSGYtjbVN4AqYhcvi8TJpCaWwr7K4ONonsP1f0lqYCRhANPT7y?= =?us-ascii?Q?2GE1Vy1bz3CwqrrE6e/ZhgRtLxYh4qyy0+vmx+AZamlF/+vrlHa5TZGaqNvS?= =?us-ascii?Q?D82AgiXGHU2NJJbE5pU/vh0S9+i9lmx5kJ9qcxcXvSKKxGzIsBL6YovmIEvx?= =?us-ascii?Q?oYLvPiYx5nKjCSreiVnV9HQR/J2hXXA2Sd/7FkRrz56P7DVlmE2t4RhQVBXO?= =?us-ascii?Q?Qd3g0BKOZa7MPAKbMZb4y3UXioKcCKGsKsmT8tLkJRMCfo+UJuU/YdlDR4Bq?= =?us-ascii?Q?xDMdulde376pmA5zifdFkkQbqajvNnxfp7fElJmDRJFenvDRXE6lbQpKtPq5?= =?us-ascii?Q?XJxroIddNFMSciaDnQm9OA4JzCihN4aYZzNcg9JCy8a+6RxWE9SGMaoI9E7F?= =?us-ascii?Q?+qZK8ur0E2zuwZs3U/ORzcTGZEFfZFRLa8UKi6nAxJYb7m8LnNC5/wTIdnJn?= =?us-ascii?Q?0pgWJxVbZ5RFG0cEsDd1ioiEMszMH1QUa7l1pE7i7wstQLaV4OdiTVCUBMnN?= =?us-ascii?Q?nIeBe/BFx7k1aEGX1gWibml1g4n4GdO3xfSOb6wqSTXo36SI5QMqZHfrQIeR?= =?us-ascii?Q?MZ/mikYjSHVIJ3lyOOhjgM+OD9xIzftPKrYqZSXhOOEMHasoEP8hWCD1Y1Iq?= =?us-ascii?Q?a/6WD6xd+2REo2EdKet5A9h1KwSMxDw8evgWVMQP+0SaNufZ0U+6QzOmZJzG?= =?us-ascii?Q?3y/EC1yQWznYcTR7Fz0Qu6skmWk+u/AIqc4BknTy5Ikg2kFWYAXrkrzbiw3z?= =?us-ascii?Q?Er3uFVuI/ADThUQcDVb5GtDFHu8hJrp5c3GMBJkWvF5jLVRVab1I6ZjCIlUs?= =?us-ascii?Q?Y4J6wOvXD5kvqCspmgRSnQAtyN/+6?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1647;5:wdIWxSz9ZKeJudH9lZNCOcP8mTp3klYgys7eeSOfLxJiwe+V71qtZulqRnvOjwNi2m3FF28EF3EXNRqr0lLIIkRIFfgzxe4E51A8h648ilpbwmKw0jLKRleApLLvBk3drkNw7WGDvvOXtoCRYpZtzA==;24:1rOyr8mPn50fnUlXR49qmhET1vtV0za4KZ0Re4N5kdiU5TpSNt/NyG1pp6K26adWFjTC2PQ4mgu3pguOsWHnAc6zWVQgzZgfUjc1E/uaK6U=;20:oKppxnuis54kzTMxI0DKL5bnzVNt/rCe7+n+vLYIa9Qmg6sSKPufyAPr5zVhyrf0gMls+I4Ce4Mjn3A5uo5q+g== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2015 16:04:48.1861 (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: SN1PR0301MB1647 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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 3bcd161..455379d 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->of_node, + &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