From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030694AbbJ3UCi (ORCPT ); Fri, 30 Oct 2015 16:02:38 -0400 Received: from mail-bl2on0101.outbound.protection.outlook.com ([65.55.169.101]:3440 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1760159AbbJ3T7P (ORCPT ); Fri, 30 Oct 2015 15:59:15 -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 v2 04/11] staging: fsl-mc: Added GICv3-ITS support for FSL-MC MSIs Date: Fri, 30 Oct 2015 14:43:30 -0500 Message-ID: <1446234217-25512-5-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1446234217-25512-1-git-send-email-German.Rivera@freescale.com> References: <1446234217-25512-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD027;1:k4xBtRaegEQ6zzc08vLxiVWhnaRMSRxz6yi42DSjn95A3Efql5LbyKxycxQggofoiBl+8PffLj6Pb/JX2Wyh9V7D3uWvzdRBowUJHlM4jCsZzQN3m9v6PBzDtZI434oeZIzaQ8yF/8RRDbU28sSl3t4DqtGDB4Ur6pftGz8jG73AOUMjSnoIg/yLRwJ2G363/UBLxJJHyr+wbAkObBQjNQ5undSPJqHaUiwq5nAWiIMTTSNUVp3o/59SFATfcIwFj7GQSagc3v2teuBX4BdqHOT8Cv1LmonmddZ9AgCeyIEufkTZpt39ek60mM7GcK5CprUsgZevHu/2SD+9323Ds12f3wUZIYT9mDCUf2GW75ROYJGK83mbvpdxUoHuHaEdgxiZQ4pG2llJfMwHKhF6HA== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(19580395003)(87936001)(47776003)(85426001)(97736004)(105606002)(11100500001)(5008740100001)(104016004)(2201001)(81156007)(5001770100001)(5003940100001)(50986999)(76176999)(50226001)(6806005)(4001430100002)(5001960100002)(189998001)(5007970100001)(229853001)(36756003)(107886002)(2950100001)(86362001)(50466002)(48376002)(19580405001)(106466001)(77096005)(92566002);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR0301MB0745;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;CY1PR0301MB0745;2:wcivfEvcV67p5vWoX/H/s8nbeGmcYU3ulYCiHl8ycKBDdE+UczcZZ8krIa6yaKy8L3EpuaC/hWrJrp3OhIJr6oa/XqL+FnyvdANmbNxP0wtmepSxjZtlUg0P/C7knGhvcZ2nXSYtuRPVGsrWhIoej3DEPaizhCGBoI1vyl5GdG8=;3:Mj8H5/YbRRyioX3n/4dgZg/Gx6G+WC3UEY5l02X5d5/OG/Ys9qtB3xRet95raEa1ZmJt7D4NPol817iVdn2x42Jq/XBhK1nks6RzgW2Cdu1elG7l7GcD6CbkLM39or27aTx9N59FYfEuwrxpvD16Elviv+Z4J1JxlbK0LfUGtShhClR1qc5kNdRpeZv2GghDRQSNcl/6eTpx80Bx4s9WyzwXGWiNmgfx0lEQEr9M8WI=;25:9Fo1PYrahwBebCYA8PYuk9YIxznQ6n5SNsy639Y/heSNqpO6hprc7WBEs2ziUg72rcCLyzAwijJ8+3nvDUzsqS0BjrDwuF64Gt8dt7ZMggSCcUBBpI5CRZpuAYotIbXBeoTRqrrr0AAKUnTCoOG/UyR0R2UAAsE5c+3751vHD2d5qzpLMyTxwslDV3ahrVUJLnX7qkpzqSUrsNzFpwmB+/E7/Xa5JkCbb5P8bNcx5fEVVYLT2DIoJ9ANHLKOG5sEJ+kU3R+ICWenQpYe2zhZVA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB0745; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB0745;20:1h2k5n5/7kB+8KMnQqiGqJLsQue/2F5GaEYN5cdqlmgXv2H6nFHWu+Ezkeg9q4f5MvVoB28RzBDyIhm2zTWyd+R8TZdjykuJnvQfJu81I07LiVvtScyGP8K2TZLM4Fy6t/XNTqMm+vJn/2nUr37LXwDmFn3YrONcRv06ayQNnp4iLxn3bW+TNBNXgXrJrofUaffRIhmcTISIel1xkXf2cx7LRttbR5XJvjPi5rpJ8xpU7nqktcGByUal//madHKpo6VWyeDqSs7bx89UkxTDuIHuZiXMV1VBGMlaGj6q8h9bD5EqUTZCJQrh4UF2q5xn5bPolIFEcESosS/I2Z0PxVoIyWUPDfRhSIkPQcmIcBw=;4:rJm5cX5duG2W8dlDSW0tEqcCpN3sRboqXZkaUEVkacGB8CJGmVFPE5lsJ4yJmaoh9iut8nG7524NyzspuOoarDzyWFhMXgBUiMmwl7SBwHAadCN6yc26dF2SuDp+5tJZoPMd79HYHKlDuRcsB+LMzh6xM0EDPlrm15WonhX5wEY/yIRaqMCVHs/KB+HEmEwxs7qlmiLVo873yJJXk2eirJzowdEwUC1M1K5BMq5PFgZBzRM2oRTSRqx+OfkoJ1Xx0kuChwn4X1UOITqX9YG+5pqSJHrz8Tl6XlilWes+6vCkb/GMvq1tybL2ezukHV+/nSHO9zzxP5BJRuwdXs/McI+jUuUEZtDtd6LRCxcxymBAfDvTKkgk8ac8GIYmzCFcu3P8ilHWQK0uM9IKMVlK0w== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(10201501046)(3002001)(102215026);SRVR:CY1PR0301MB0745;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB0745; X-Forefront-PRVS: 07459438AA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0301MB0745;23:vRxwWKeKaQkR+GGf02E8WOnNayqYg7aOqXBzyY1?= =?us-ascii?Q?3rcAbsglDR3M3zOqcpF4tJ9mQiyH8zO4wjGGiEYDSBBPMfTPj1dDRX4B6N4m?= =?us-ascii?Q?ZROYeTLosHEHz/ScBsK3mxi5XLlekNDaoBTicuNXPXvBZOFSwxauNErFinyC?= =?us-ascii?Q?hIO3K/nNxxSc4Gw55Tff9IcqCDp4zODqqrucpjLNubt7xmheQedY/sfF9FuV?= =?us-ascii?Q?MSG3HhcEBqvMRaHrFmqgvxcCqiV58tyz5E8pi+fg1WWiawTi87cMnnvbD+ov?= =?us-ascii?Q?UeLWdEh+ukA4aEwzkwfMJ2WRAAS56h9mbEeoAoffitfO03VjfESz3TWTQ4aD?= =?us-ascii?Q?DjRHu+atDPbzaoFN72WqZJK6smZydA1xTx5yEIoK22MhkUCKETJVkeSLNXql?= =?us-ascii?Q?zVnzyKAUw8os1O32oAhwcK2Nll0BV9DGdHNQRcw5F7Qe6EfSq6PZh4PqqN0S?= =?us-ascii?Q?5/6czEN87iuVb+xVobfdVObpF9QMHLxgthVz0Sj90rdD9bzt7rzQx8f7cle6?= =?us-ascii?Q?NM8qSJykBRdpN33kKPyDPQZkoi0J8OpYBbnxJOtJahY5OqiQABcQE5xY1aUr?= =?us-ascii?Q?t1Zpcf7R8+kygIl6/ODeslXslBsFVYB1HUIGunncNCU6CJfoHL8nxu1J/QWN?= =?us-ascii?Q?ba54OD+tBqNN3hILNEfHDMbP70o+G2kutSw0RhxRwG5fJ7OUrczLipRqkoSh?= =?us-ascii?Q?JQA4pshx2DfirZRy+GWEofTcw0ry9axkPLCk9RisbZKnY+CroEJXZRBBGa7M?= =?us-ascii?Q?FYTY2TYkWpsY9JX/3ahX+RiZtcul4bcDofF23H5zfCLH+wElhAPTOxAVGBG7?= =?us-ascii?Q?UyjrCrYPfQh/E3RTlWKeq4K1y/J7OX1Z3tk7GRycG7X/HvLz6dmG9HkkL8wC?= =?us-ascii?Q?gGJ+V6/eFgHathbzRNymEnMjEnxae9vK8jG3UE/q6LlOH3aZ+lXGDpeES577?= =?us-ascii?Q?ysBwkNs6WU1ngucvHiduMU/COb92xsZvUhczfmD30eDKJxtgNrGaSRMoHxmh?= =?us-ascii?Q?PU4JQgL9hpr3LOm4PMCnIshxsdHWLajShxO900StAHUpCF1B48wBE2mIwh10?= =?us-ascii?Q?L4SQLnJjjg5iLzfbeHo8KGzZgJ2zU?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB0745;5:d0F0J1q0qhXyMQNIGf5Ig+Qgw2GZMuNMuPm2fLULyHoz+RFQDQEUiY2zmLASWrbwZAS2tYtspcL/ClPSJJZkbqtTLoKlwq/gpl6mUegPT0633KaZ2p+vGjjJFb+WNH+jx9lubxaJh3Rj4MzZ0aF80w==;24:wqBzRDELG1GwCEN1l2CMkcQJ7zn+i+V2/pJJs8SNcYsx3oaSA6Sgu5YC+hTkTbaeNXi5NV9LJijKwTiesxMJJszpTICS6cqUtpo8ibxZ4MQ=;20:5gXtxjS73kFCTXgQrdTnprZdap/+OjpG6FqRAfgHTOgAypurC4tDY1s53Ie6cmvNZmMudfCQx8JUBQJmAZMqOg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2015 19:59:11.7297 (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: CY1PR0301MB0745 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Added platform-specific MSI support layer for FSL-MC devices. Signed-off-by: J. German Rivera --- Changes in v2: none drivers/staging/fsl-mc/bus/Makefile | 1 + .../staging/fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c | 127 +++++++++++++++++++++ drivers/staging/fsl-mc/include/mc-private.h | 4 + 3 files changed, 132 insertions(+) create mode 100644 drivers/staging/fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c diff --git a/drivers/staging/fsl-mc/bus/Makefile b/drivers/staging/fsl-mc/bus/Makefile index a5f2ba4..e731517 100644 --- a/drivers/staging/fsl-mc/bus/Makefile +++ b/drivers/staging/fsl-mc/bus/Makefile @@ -14,5 +14,6 @@ mc-bus-driver-objs := mc-bus.o \ dprc-driver.o \ mc-allocator.o \ mc-msi.o \ + irq-gic-v3-its-fsl-mc-msi.o \ dpmcp.o \ dpbp.o diff --git a/drivers/staging/fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c b/drivers/staging/fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c new file mode 100644 index 0000000..5319afa --- /dev/null +++ b/drivers/staging/fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c @@ -0,0 +1,127 @@ +/* + * Freescale Management Complex (MC) bus driver MSI support + * + * Copyright (C) 2015 Freescale Semiconductor, Inc. + * Author: German Rivera + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include "../include/mc-private.h" +#include +#include +#include +#include +#include +#include +#include +#include "../include/mc-sys.h" +#include "dprc-cmd.h" + +static struct irq_chip its_msi_irq_chip = { + .name = "fsl-mc-bus-msi", + .irq_mask = irq_chip_mask_parent, + .irq_unmask = irq_chip_unmask_parent, + .irq_eoi = irq_chip_eoi_parent, + .irq_set_affinity = msi_domain_set_affinity +}; + +static int its_fsl_mc_msi_prepare(struct irq_domain *msi_domain, + struct device *dev, + int nvec, msi_alloc_info_t *info) +{ + u32 its_dev_id; + struct fsl_mc_device *mc_bus_dev = to_fsl_mc_device(dev); + struct msi_domain_info *msi_info; + + if (WARN_ON(dev->bus != &fsl_mc_bus_type)) + return -EINVAL; + + if (WARN_ON(!(mc_bus_dev->flags & FSL_MC_IS_DPRC))) + return -EINVAL; + + /* + * Set the device Id to be passed to the GIC-ITS: + * + * NOTE: This device id corresponds to the IOMMU stream ID + * associated with the DPRC object (ICID). + */ + its_dev_id = mc_bus_dev->icid; + info->scratchpad[0].ul = its_dev_id; + msi_info = msi_get_domain_info(msi_domain->parent); + return msi_info->ops->msi_prepare(msi_domain->parent, dev, nvec, info); +} + +static struct msi_domain_ops its_fsl_mc_msi_ops = { + .msi_prepare = its_fsl_mc_msi_prepare, +}; + +static struct msi_domain_info its_fsl_mc_msi_domain_info = { + .flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS), + .ops = &its_fsl_mc_msi_ops, + .chip = &its_msi_irq_chip, +}; + +static const struct of_device_id its_device_id[] = { + { .compatible = "arm,gic-v3-its", }, + {}, +}; + +int __init its_fsl_mc_msi_init(void) +{ + struct device_node *np; + struct irq_domain *parent; + struct irq_domain *mc_msi_domain; + + for (np = of_find_matching_node(NULL, its_device_id); np; + np = of_find_matching_node(np, its_device_id)) { + if (!of_property_read_bool(np, "msi-controller")) + continue; + + parent = irq_find_matching_host(np, DOMAIN_BUS_NEXUS); + if (!parent || !msi_get_domain_info(parent)) { + pr_err("%s: unable to locate ITS domain\n", + np->full_name); + continue; + } + + mc_msi_domain = + fsl_mc_msi_create_irq_domain(of_node_to_fwnode(np), + &its_fsl_mc_msi_domain_info, + parent); + if (!mc_msi_domain) { + pr_err("%s: unable to create fsl-mc domain\n", + np->full_name); + continue; + } + + WARN_ON(mc_msi_domain->host_data != + &its_fsl_mc_msi_domain_info); + + pr_info("fsl-mc MSI: %s domain created\n", np->full_name); + } + + return 0; +} + +void its_fsl_mc_msi_cleanup(void) +{ + struct device_node *np; + + for (np = of_find_matching_node(NULL, its_device_id); np; + np = of_find_matching_node(np, its_device_id)) { + struct irq_domain *mc_msi_domain = + irq_find_matching_host(np, DOMAIN_BUS_FSL_MC_MSI); + + if (!of_property_read_bool(np, "msi-controller")) + continue; + + mc_msi_domain = + irq_find_matching_host(np, DOMAIN_BUS_FSL_MC_MSI); + if (mc_msi_domain && + mc_msi_domain->host_data == &its_fsl_mc_msi_domain_info) + irq_domain_remove(mc_msi_domain); + } +} diff --git a/drivers/staging/fsl-mc/include/mc-private.h b/drivers/staging/fsl-mc/include/mc-private.h index 3dabd003..f2504bc 100644 --- a/drivers/staging/fsl-mc/include/mc-private.h +++ b/drivers/staging/fsl-mc/include/mc-private.h @@ -133,4 +133,8 @@ int fsl_mc_msi_domain_alloc_irqs(struct device *dev, void fsl_mc_msi_domain_free_irqs(struct device *dev); +int __init its_fsl_mc_msi_init(void); + +void its_fsl_mc_msi_cleanup(void); + #endif /* _FSL_MC_PRIVATE_H_ */ -- 2.3.3