From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754223AbdEDM4c (ORCPT ); Thu, 4 May 2017 08:56:32 -0400 Received: from mail-by2nam03on0047.outbound.protection.outlook.com ([104.47.42.47]:46396 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753940AbdEDMzt (ORCPT ); Thu, 4 May 2017 08:55:49 -0400 Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=caviumnetworks.com; From: Geetha sowjanya To: will.deacon@arm.com, robin.murphy@arm.com, lorenzo.pieralisi@arm.com, hanjun.guo@linaro.org, sudeep.holla@arm.com, iommu@lists.linux-foundation.org Cc: jcm@redhat.com, linux-kernel@vger.kernel.org, robert.richter@cavium.com, catalin.marinas@arm.com, sgoutham@cavium.com, linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org, geethasowjanya.akula@gmail.com, linu.cherian@cavium.com, Charles.Garcia-Tobin@arm.com, Geetha Sowjanya Subject: [PATCH v2 6/7] iommu/arm-smmu-v3: Add workaround for Cavium ThunderX2 erratum #126 Date: Thu, 4 May 2017 18:05:38 +0530 Message-Id: <1493901339-14929-7-git-send-email-gakula@caviumnetworks.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1493901339-14929-1-git-send-email-gakula@caviumnetworks.com> References: <1493901339-14929-1-git-send-email-gakula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: MA1PR01CA0079.INDPRD01.PROD.OUTLOOK.COM (10.174.56.19) To CO2PR07MB2504.namprd07.prod.outlook.com (10.166.200.150) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 14af10cf-26a5-4910-e648-08d492ece1df X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:CO2PR07MB2504; X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;3:W4rJNUZzGDVYAVVoslCqXyXFu08loT1ltSc33urfL0o82yFWECyUnIwzh9f2Fz/i1BFo4ISYDNL0NzzTNoFmmc807xPNoSf4bU4epO4LrwRcYjdfxKnOQwvQD3k415lrTGfT3Q5OTaQWeuWFbrRgYDp3y37NpOalNSu1VhiqcDc0704Z29zspSwVMCSR04jCyxKjpOIZhWIrEt2M1E1kGP2T6GbLmZdrIQ0O7Y3Ca88aIpBsPijA/X0BgoNP9xtv/tUwfs4ZYl+DEsPlec+UhkqH5jOAOxXWtA71FK4C6ZOa8AUbzLgunEPtn10LlunybrBbX4xfWW5VnUgneSJlcw==;25:9PMxlTdGNWUUAndlmxqdTjbRHmOwyjMGQifRGCGjbZw7BtCZv/OviliPzP6uUhUB6UiU2o4curDajYApWm9BuctkY6X6eISfm6SmhByRUD5F/O5bR1HEnzqLuBUFsBx2guG53wVYH2rhYVwD8DPZilrs2c2f1xXismqf3/z0p6cnporr6dqT0Nfxg8j0ZMzzxYeKfYHdOJpaPdsW7XbYsyUX8nuAn3gHAeLpPbUgAZFNpiZS/D/3rRrsCWHu5miGgVbF8rnFWlpWtOoYOGZg1UIF7frcubZRpRQugJ64rvtM6ucPb8AExKcvLH9WAThKdfV4JZ4G3QLhI97J9XKwGM88cg8+kZbwzMeEe/2RJXstsNqKSzR/H/+Q2CaI7Q63ZFh5ze027u1bT59D53IhX0RfCup3+LNU3PtJF5FO7Eaebd8uo34/UcnV6XV4JTDXzwLrn9jh6ylmw9L378dMrQ== X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;31:qHQNV7gcx7wwnZnC0lPqfLXvuzd99c6iP/6YPUeMOBGcGmiWVAgLoHljBJMYFObgEN28o9i31lhuMMWVHclKyQH1KEhu47QfUqJJwq7fyE3rrcIQI1WfkSltYq4T9N2dx5vPPMt/RtBynvQ30ZDXQzgq1mc1fohdGnKbtOBwWRXSi5WwzTTqHS+bQ83cfGLNQaORaGymvIgHGt6Y2iAEB4/EqQLJ3vMo/Gy7SftHud1Kc07e8R+LPkl9m7YhOtJ9;20:v2DNu6mMu9e8f4uhYX2YOEXESY3lYEzfrCmj7jTyPawerCqKYM/sUVd8HWZSNyjNGt3JlSBJv+cf7DawBWNjxB0ia5wYIQVWVxzLJDBIidyQ+wEBuH76RFUXoAb2e5/VPfUu0p7oywrtAnyMMzqIG6F3wKodRu1kWXhpzsJzM5aC8VOY086Io90lYgXWYFSmIDBQI0EarwZfMPozLp8AE/sfRieHiUoIUQiWR3mkdokOoRgb2xophWryMToODpBpX0oVU4SAgiSN6hIvp+Km+Y6z63ilkLKupFEca8rjXgqyNZMWIjLhkW9VUGm3zOfZ7vGIM20ehd4BXg7UoccRHubXaJlVdUyZQ48eNrqqUzADLynqHtm3a7e7mSdnvtsreDZCoyD6lK6ygB76Q6AUAghoEDVMbnhAgXfvLWucB79w/fvlizUlHJRFi6+eCIbLHkmKH7QaZdtm2ZOuytqOfOi8ali+js7b/hzUzXU91iim+LGHS+zKETcIdLWGWa/keEQoUgJorW7cAU9phSJDWDzN3W14Tu+0yi8QpB5dV+2i+NUbiTZRMziV6V1AJw2I+kaCpk53+CzaFN6YUjCZZOwXzZQA0hb7d3nd2HeX1E8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(6041248)(201703131423075)(201702281528075)(201703061421075)(20161123560025)(20161123562025)(20161123555025)(20161123564025)(6072148);SRVR:CO2PR07MB2504;BCL:0;PCL:0;RULEID:;SRVR:CO2PR07MB2504; X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;4:O+dp042wUFfni2UmdgcaUiYsCC7axtKOIM+zTCiaPCnvWPY0709B7uN4T8UDbU6+eHX6nFPG6DVNzi8RQzniskiGXFCsmUtnWF4VL34ArAoxKHHVtMXK+jZvvLsjdUTCErY5b4aUYVXj4pegJVhv14jAVkRod/YSh2x3g945SDhaLaDqIlSGFUvW9gEOzxXIMIrmJ+fZxmxCVL4hkTlzkQVwZQu6IXTyyxYvQmqJQ4E4JjvERF9+IwIt+rlN/X0SxkLrs7Gx+jHf5c4EBbwipvK8Tj5x62iXdmj3PBpneFgtbmIKqnNihu5wa0qQsn2Wr6h/hqsEH7V30rYV57lCUm5eW7KD54UmWY2qnqGcz0w9My+173LFcmYiga29BRNc1fjt2EKqyh/4hfqk+hAcPDTQ+BTWAC1SNGTIrrwaqyv+N8tYEziYU3iQHZ3lz3fdcMq7WVFI+aLl2ow8kAKbQySvyQ7UusxcQrpFKFw5wp1Zuaum/jfjiCvMj2R0MqXqoLh/CbPFo2yJXOSduIBhufYO/lJX5ITf/9hufrz77d0AxWeDC+3+nSbVgIwrffIyOzF448QUiX4xTbD/BfUXu0qbdShxJNDCEPZW9lDjEDmd8Z1mh0jj92NtQNxZ2fQp6/wLEjU+nL1w/6UkZVclX0G5bHzvdENXugn8g5q8jud3sTXcx1ssjkHNzeemw/iu X-Forefront-PRVS: 02973C87BC X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(39400400002)(39840400002)(39450400003)(39850400002)(39410400002)(33646002)(230783001)(110136004)(107886003)(5003940100001)(6666003)(6486002)(76176999)(50986999)(42186005)(6506006)(7416002)(42882006)(2950100002)(5660300001)(47776003)(38730400002)(66066001)(48376002)(5009440100003)(6512007)(25786009)(8676002)(189998001)(4326008)(81166006)(53936002)(6116002)(7736002)(3846002)(50466002)(36756003)(508600001)(2906002)(50226002)(305945005)(110426004)(42262002);DIR:OUT;SFP:1101;SCL:1;SRVR:CO2PR07MB2504;H:localhost.localdomain;FPR:;SPF:None;MLV:nov;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CO2PR07MB2504;23:1M3TYgUUkH9CKbEDWfgN3YD30Jt03yuhGCF7m0uy8?= =?us-ascii?Q?+Ewd+u5RzNGdUnbJas/lRrTCV6zNTPqntuLwVaS9XSsGs1JWNFWzAU9o4IQ4?= =?us-ascii?Q?VksDvexraIMvTzppO+z96wvrafqodC+6TclGZVOIAD0RMniPN+ahHaACeaW5?= =?us-ascii?Q?saE4YnZXDJdBy3xn9BSKMQ+9KAfIWGTelm8OGt5Zn3KcADPqoSpyI3eAIBrE?= =?us-ascii?Q?42lytkidt+NJTBiyNVPN//oFbeAtm1URtAagZ1VXMSTXvv6Sa0l8z7iGWcN9?= =?us-ascii?Q?wG1zWTL6DtKcbOnSpgpId1QVY7ElNl36ip7rUWBB3JXTfKQWfuPzX/fwU7WA?= =?us-ascii?Q?YIiJHNuogTFP5EOLKWlu/zM04+nPhLLNY/ygJcUP/5+ZcJxyVB1M1ALU8PIf?= =?us-ascii?Q?AIO74Pzn7JV2ih03c23fC+BKxTKMMPU2OCA9/oPf+SAOQEHmAv3vxkMUKKTk?= =?us-ascii?Q?cw7rLO782UB4hE7BvEmwdKmuWqNyua4uKEQFGR2QuCceSqevS/KAe83lxpbT?= =?us-ascii?Q?OZT8c6RQ0ZZVY4nyt/0LlIk7kph0VTmwR7B4jl3u+CPnaB3R9EAnTgQ/RxBS?= =?us-ascii?Q?WMg5e26CEVP/j6mDd931Yv0VwtcECOueIJMT0BVjNEX3ncj2BzjRVIpSyjif?= =?us-ascii?Q?Ee5D/Rt2X2pa1J2X7/zY3oH3QgrebE7E66TjU1bmOsVJAf3/MrkSfJnBpEUN?= =?us-ascii?Q?qxTyCJM0j+D2YqWfENd3MG6dFFHOuBYd2hmL+wlTgJgugtZhBCokWZ3BEC9R?= =?us-ascii?Q?8jnqOt7nc2SO1J5FfteFvd9Sks/eotEWBFIxlT8yfoZCrIz0+rVlStViFFYl?= =?us-ascii?Q?qC/lxWHgwo6QJ7ID3745izDZUNwra0WUxxPUY6ndwwkG0/7pfa1QG+05D9GE?= =?us-ascii?Q?iTE+GGokmaX8JnrXsLQ6e1QaVXf7BqWPW1NB256rluTRsPXEqpYzam884oOO?= =?us-ascii?Q?77PIWk9PanhdqeNhFP2gQkKZnhqC+km+4WDDHvWBQbNKJZI5lDBkm4Iu/oVV?= =?us-ascii?Q?hRJfMa1YURjEMQTb6+FqAo5/vScTDUiqA5iK63wgVlmcXjt0pSyK4fy3YxCk?= =?us-ascii?Q?AwIEm4/0nFhOoOnK/1JnUdfSHPG7lcd6+EoNW3WaCAG0l8IMP9fu7wVuC9dW?= =?us-ascii?Q?vAvLinfEVNYDw7opPhFj5C8+uXCpLkBVwZ2ZQkNL3Uq4EXyJzLHrg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;6:3aWDoVI5oybshP6p402P13Bm77xa2us1k9wURvZ0yo+EdbNfjA4HHmUQpcANovrHdP1DZBT7pEgoKosum2h3BnUcVS7hgWKvF1DIJvcDm01/bhhAeRE4PncW47sBNUhrZEY0wI26YnBDNH9J7KOWHZY5+vhIaiNAEszcD69LIriKSZa4aBcXlnQO6hWxRZVjVyxcjDkeSXdYh9r/9Gkv2MnnVDjL3w9rrY3rLFKtLfTiONFzdr2RPRBTcwRys8wm9+7jWnkedYwmrjAIuq3JtPYMklTCLf8JzRYV5ICLp7X1Z6y3rVasZAH4p4hqcj7cNd32ULVhAbacV39ju1EYv6sk4lgP1gH1ZL2sqJySQIMc1TQy2usebFnwTjNoAlf9VqoQ1znRZu5gsFrKD5skEFqshZJTgl88hhx8oLJIzZtAsH3Ba0WIUEGF7ue1rpo7VmlPgzCs0PDc82n4KgppC1xwizOHuhIiQ9xVr7FUueupxNv5rCDtuocf8v23GtxU/AkrHEbQUHsVWhw8upnWhA==;5:ZqlZKih7fQE5jF6mGNWbIieQzA2HUbH6dtGgDWuAJrin0ILECfOx57hRNfLIVO+1NCtqzr6PhGCksFTXiSPrZHn6Z2a3hVuVWWI7TDCfRBv031lp6o+kRavxiW8okAEPcH+Tuk/ynbMcZLwyYCYfTQ==;24:aCiiv6ckWPPfqQdXJDE4K1P0gN4iljkQajMHzsGWKOxa3g28NTgyh5b2LTPMo67qQXFA7rBSLS3QBgPy5Hit6QqQZXi2FG96EYnW4I+4+pQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;7:rQnn98zQtEoONl6WZfcpkzaZWMIVdeL8VfiIR4QKyPo5Li29hmCt/zcyqMOSlbXf5wEbNXbCyUzqYeaC/EHEz5NfNo64NmAzUxPbeWKRQ7CD4UpCbgAXm6fcgrUA20k55hY5Bpoe72plGqKcoXw7awzY3PnIwp0D6vOJQfkkeZs/HDD2FIjcMFHiuNxgssc18e6M0gFELTC8rzBll9FZJho5uKgtK6h3C35WLAj1Q8Yv1+szPIFXIPN9bgHTWda45SVaBNrhD4mL6TCYqlNqtLlQKHIkbtJtHJd5RFyhmNchfXLAkl9+EaGJrxEft2RZbwJycnAEvdNkcX45kyKNsg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2017 12:55:41.0340 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR07MB2504 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Geetha Sowjanya Cavium ThunderX2 SMMU doesn't support MSI and also doesn't have unique irq lines for gerror, eventq and cmdq-sync. This patch addresses the issue by checking if any interrupt sources are using same irq number, then they are registered as shared irqs. Signed-off-by: Geetha Sowjanya --- drivers/iommu/arm-smmu-v3.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 016b702..46428e7 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -2236,10 +2236,30 @@ static void arm_smmu_setup_msis(struct arm_smmu_device *smmu) devm_add_action(dev, arm_smmu_free_msis, dev); } +static int get_irq_flags(struct arm_smmu_device *smmu, int irq) +{ + int match_count = 0; + + if (irq == smmu->evtq.q.irq) + match_count++; + if (irq == smmu->cmdq.q.irq) + match_count++; + if (irq == smmu->gerr_irq) + match_count++; + if (irq == smmu->priq.q.irq) + match_count++; + + if (match_count > 1) + return IRQF_SHARED | IRQF_ONESHOT; + + return 0; +} + static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) { int ret, irq; u32 irqen_flags = IRQ_CTRL_EVTQ_IRQEN | IRQ_CTRL_GERROR_IRQEN; + u32 irqflags = 0; /* Disable IRQs first */ ret = arm_smmu_write_reg_sync(smmu, 0, ARM_SMMU_IRQ_CTRL, @@ -2254,9 +2274,10 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) /* Request interrupt lines */ irq = smmu->evtq.q.irq; if (irq) { + irqflags = get_irq_flags(smmu, irq); ret = devm_request_threaded_irq(smmu->dev, irq, NULL, arm_smmu_evtq_thread, - IRQF_ONESHOT, + IRQF_ONESHOT | irqflags, "arm-smmu-v3-evtq", smmu); if (ret < 0) dev_warn(smmu->dev, "failed to enable evtq irq\n"); @@ -2264,8 +2285,9 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) irq = smmu->cmdq.q.irq; if (irq) { + irqflags = get_irq_flags(smmu, irq); ret = devm_request_irq(smmu->dev, irq, - arm_smmu_cmdq_sync_handler, 0, + arm_smmu_cmdq_sync_handler, irqflags, "arm-smmu-v3-cmdq-sync", smmu); if (ret < 0) dev_warn(smmu->dev, "failed to enable cmdq-sync irq\n"); @@ -2273,8 +2295,9 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) irq = smmu->gerr_irq; if (irq) { + irqflags = get_irq_flags(smmu, irq); ret = devm_request_irq(smmu->dev, irq, arm_smmu_gerror_handler, - 0, "arm-smmu-v3-gerror", smmu); + irqflags, "arm-smmu-v3-gerror", smmu); if (ret < 0) dev_warn(smmu->dev, "failed to enable gerror irq\n"); } @@ -2282,9 +2305,10 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) if (smmu->features & ARM_SMMU_FEAT_PRI) { irq = smmu->priq.q.irq; if (irq) { + irqflags = get_irq_flags(smmu, irq); ret = devm_request_threaded_irq(smmu->dev, irq, NULL, arm_smmu_priq_thread, - IRQF_ONESHOT, + IRQF_ONESHOT | irqflags, "arm-smmu-v3-priq", smmu); if (ret < 0) -- 1.8.3.1