From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753649AbdEIMEw (ORCPT ); Tue, 9 May 2017 08:04:52 -0400 Received: from mail-bn3nam01on0058.outbound.protection.outlook.com ([104.47.33.58]:41632 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753493AbdEIMEr (ORCPT ); Tue, 9 May 2017 08:04:47 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Geethasowjanya.Akula@cavium.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: [v4 4/4] iommu/arm-smmu-v3: Add workaround for Cavium ThunderX2 erratum #126 Date: Tue, 9 May 2017 17:15:14 +0530 Message-Id: <1494330314-30179-5-git-send-email-gakula@caviumnetworks.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1494330314-30179-1-git-send-email-gakula@caviumnetworks.com> References: <1494330314-30179-1-git-send-email-gakula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: MA1PR01CA0099.INDPRD01.PROD.OUTLOOK.COM (10.174.56.143) To BY2PR0701MB2024.namprd07.prod.outlook.com (10.163.156.139) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1445fe4f-9969-4ae0-8cb1-08d496d3942c X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:BY2PR0701MB2024; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0701MB2024;3:b4eQ5cvtWuBfGAv0quigVKGQjttYc0RWptwKYG4tjwj5ujCe1heHnrSXyeCyGAeEwT7WL/dkAr/Ia4YzFDYhRx/qJlr/YHuWt5KEH4b9CGt85F2gzFSS4xXD/3Fxndbe/j5/3gdO5AIMdEJObD7YjHhMD95dM1EDogvVn0C+uCYjxSkRWjU7GJjhXKyPFzR1EP216F4OYddUkIX0M6kdU+Gy6/hhqMVgLlvD0VkrmujO7gyJY9LTqoqnsUNd1u6So1yey4eXetHUDr8T+jH4yhF8PimO7fsNNz7xwRYlEzkAB9z7s0pklYNL6rsWB6YApQB9v9l+NXkOvMrSoEzW3A==;25:/JEnZQlDkVkIfWHNaLQfV3ruSyMYSurGD1Vap02w2lyjogrQe1swZXgUcQpeT/QcYs93blsBZ4Lh7bBKLnKqc5J7wwd9g2771/4odtCaqT+AxAhqIcM3xF/7nNLZ0BeBcy1uE1qJRdlpsBfptDWJ/0Ktps7QTEf0tDoo+n1b+YRCH5aGL4ZOIW8wyyAbjBW0Z4zghtR6G7Z0OtTaACHakWM2xYWyULPwRzc76tPJVMR0O0cs42r1aBYK1obDl2bK8Uu3bQHnlLzXM9iVGq/vfOyYTOWuxEUopNGn0j4xdxLmeEYP/sd1EP790qRYVCZyGWg+WpMmZUAmgQh8NjNzJLLwnIpZQIUBQqmIc93Y94QOFmL0/ev+r7VyxYHIzvIb3v5F6S50xRdw3i4J5AoHnI0vcxDBrrcE9jVYueH1vDsvHlonCWPjxms6UYHOhz6cUbwRHKfoOFr1UqVTVKNtcv64ReAYh1+PV5OjqohifR8= X-Microsoft-Exchange-Diagnostics: 1;BY2PR0701MB2024;31:72gDo4LBu/M7rdVBrctprQttSeYChP+wsVuZIVlrVQY0+bgG8S003lLkMwKEP0L/oGLaOFnYqdcuc+LyRjDhzIhJ4a/vi5rJA0oSa7O6+UfUIeQegk6ayYHR4tSWIGLHXLgymixGGDhsotXLeq7taTTC4N9svyp29OvUl6luN4ab5oKR9CnGvhgFa5WCD6CM73XrLowJJN83Pv3NAFz0YKGWD27pSeZibG01ZyEiGy8=;20:Xn+I4TFDGhvSKWPjb6og5Z9SdQiehvR12DXeL0Nx/XgZiNPrcBY/8Eti2EdvZioYJsP9dPzGrQCt+KuWelh3JqkYVqecMJlT30osgCaKrHbiG/a/M+N2DA9zkIJtm2koYZHygtazJ9n6sjg5yE4UChcPHFJhBQDg/z9MzIT1g+Lsuz941jy8m45H4h6ciPOe2PwFvMW571qvzrj3oXCrVC2/Qxol/l3ocgadrZEhs0nao23NRbq8TJp1v5KUQNhDyTHJpG5MXjeLxIHwTVVMyTQoyziaujKaFEkC6qgfvSBlvjN1VGfyYM5xOmW52IggY2Wp9Fth/dkP1Uz/vxwidrwJlQ+CSC/PjrmRCz3ROGG+6694wZW/agE5TtHDoXSeawCH25PWgXNbCZBZAyRbgvsNxIBrnkZ6rJClwPlgKmZlclnI3RlW9zcmUlt/4EsVp9tuMehbI3TsZmNjMDJVmddF9k0highhMfIO8FA45IGLgtRsjFVheLebsz+sznIzTJRRBVffTQCdTt6vQsgK/r08DFQnq6hyiqYCm1Aj2Uuo6Pr7akla5xpajDFfPduxU4cSL/NhU8kRRwSsUqhILl46MvwxJYCzi2tkUBJ3l1w= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(3002001)(10201501046)(6041248)(20161123564025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123555025)(6072148);SRVR:BY2PR0701MB2024;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0701MB2024; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0701MB2024;4:+0pb8ywX1bwJ/cFy0xrKfKJeh6sWW3BW+G5DeaMSZNO/ymus6gPsuUd75V4Vs4tj2nvtJMswP9ws/GGQL+GJuCzqS+e2PvjNIN2EQ+OXv48VNofHXRdN/PHJtrcuzDFa/3mB91Q69BxhLkEodHFRtJtnaS63H3jIFZe2LCSWeaFcqvif5fl+QCLd9mhPMU1uxSRPROlJAJamWCNVdJSwQGK4TEJahCRpEsdlgiUILen5bCraTKVfNpTPtToDFO2Atws05kCUdk6M489vMcZk5q75ZkV4UDYtcu6qFFGjhY0SVVv3sIuyaSEWSmZqeyY3YeOPAJnYZc+lpWwfQX6sof2VgRPWoukBmNl1aHetuDvtICXUUDkGTz4VDUbF87Iee4bIrSOZY5pMvPE/Sp4oXjXlJKSIQBl2PfuREbDxPIA6wdBToGJClrN86nX1vTKfRvPjEKdaVID5pmHeyQGmBljkyRmlVdqwSfDWgskpdhVSoTlsPvv+36fJS+z91gJIbXUtJ3lnGHobno8KjTDjCmt+0O0X/VhmQnF4Lwl4aLz54WRWbXeO0NEXkCFLJTY/61jJhs84rsxbRmLnVhc4y/c82sMOjuKoRCJQiKbGUQnpPL80qqa1cbiaBmNTUG/GI2o7tAbj90WJDxVd/HKIBEVECSwTceqpDWti7cKoOaq+Fr7uZJ4jqAJyVz+ewFeez/ygUq9TU2uBZozkZXSlTL6G8bOi7KRUEn/1HRJPLLbFzK+fKfoaDZiC3bjVoW9RQ0P5gwQHQ8nr+YS6HrCNPA== X-Forefront-PRVS: 0302D4F392 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(39450400003)(39840400002)(39400400002)(39410400002)(47776003)(25786009)(478600001)(36756003)(6666003)(50466002)(230783001)(6486002)(6506006)(33646002)(8676002)(42186005)(5003940100001)(81166006)(50226002)(42882006)(2950100002)(189998001)(7736002)(50986999)(76176999)(305945005)(4326008)(107886003)(38730400002)(110136004)(5009440100003)(7416002)(53936002)(48376002)(5660300001)(66066001)(2906002)(3846002)(6116002)(6512007)(110426004)(42262002);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR0701MB2024;H:localhost.localdomain;FPR:;SPF:None;MLV:nov;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR0701MB2024;23:146PbVlKTbKHI0luvNWRq89okbTcJFPpMtGcRFw?= =?us-ascii?Q?YXr7DNvA1fOB42lNyM44D6U+qKvZyLmbrEIoPiJNuJrpYp2fT45O1Pg6H6/R?= =?us-ascii?Q?beMLgLotRGNFdNSqNYfN3iWZ+xp6zhiNqtEU5VGu+stxiOPlsMZbAGmBoCjF?= =?us-ascii?Q?UTH5JBqGnDXYtun8lRsYkceWrmt1JwwVFzBvm4WSeF+dORgJfI1V3iI313CQ?= =?us-ascii?Q?8TfHKnk7eCvfux8Qn43ZGbxw66muAcgGjho7l3KNlDmozTtoA6+EbqdxRwLn?= =?us-ascii?Q?XGte2TXKFd2B/NqcURat2ajgCmwOnV358UB9aIqQaRRSk69iByrtwzHDJjQS?= =?us-ascii?Q?i0Dx4GRQT6Jd/gaVzyHa+Z83Kgl6qRX2WJ1uA2lG+aRcwdhTSHScohWbJGk0?= =?us-ascii?Q?92XBZdJlsbIun0WdOvAPFhBrxNMJSNzVmHXgFumvY8c1bQi0/m6YvPzSPFPX?= =?us-ascii?Q?Vb/vVuRd8pblpinCzALJRWFNrJBQAs9I60hakrPFDIPfUvSXIJFVd2m+upYK?= =?us-ascii?Q?yF+bsVDiZO3TqEq0Qk1vQ1eXilLWp8r96xOcQd54RPa44tv2JFTuwN/ZdW+B?= =?us-ascii?Q?xDCbT9h/tfz3H2kMaHWwgWwGtDTprDhE0L/7FIK87TWahSk/fFmJiS9ex02l?= =?us-ascii?Q?UUQTuJUiQM8CKyhQDNiF7t9ZltWumajm2KcajAnVKUL6Zg7I23hsfPijwy5Y?= =?us-ascii?Q?k7upMVWvxJXtLLEmyDcakhGBQeiM75drV37DKcyBUtl5mdLiXRl8A/xBUFjN?= =?us-ascii?Q?jTtbeb6J4FtllqewEekL9wuLJTFwo5zHJ1I8MdO0qwpO5ng5e6qIoku+tI8Y?= =?us-ascii?Q?0v8o+LirCIWSWS4pKfHNJ/vQSqIol5jMCtKzIrfN1/CATPCru2wOODyKHpG1?= =?us-ascii?Q?2hlsFrLP9ekdxsC6ljOcE0iuklGYc97YqScp0PNLwAahvBJ6oH3ODtKAjHpB?= =?us-ascii?Q?CikxJg6VR0qqVusE7QdX3g8r8G4qhf7UcvSBD7y6rNbnzVFt2mAg6QTOdCX/?= =?us-ascii?Q?tm/Ele1id+J6+fCGPOXv1lo2c4NaJWor0w3RxMYGS9OBDFkrlplj8ZusmIe9?= =?us-ascii?Q?BKB6MxJPd8ZUGKEmVd+X2RsWrs9PDubOcGfyykI7Yv7lJB/SDe8TQ5JyPW+1?= =?us-ascii?Q?0/+aBGDoHqHSIfpdVSXcphDTo3jpuB4Lf?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR0701MB2024;6:e0QisEyqFfQIEGun8xOqSeH7RSmb1+EDorEK22RjeDtQYw4EPQW0KoBJcBBii0uGImJMmXIhcvKDOoO39Eybir1gFD4VEfKojcPu3IqzQfumdiC6GnDaDXzqVuIvvjIh8WY+x0EpqrKP9dZdlQr5zEFWLFcp7y2c1ctx2cZIUxv+MCgiIYZ76lTS+B08ct0P0CreMf2uiqm5BWjRoNLNgwp+SLSOAZm0ywN2+0czeAA0e8CZf3JbSjst6F0SAIVRIpmuuBuqFriVl38487Vv60XSpReM9+MS+dq2ekcWysham5N96qvEwU2MdVj0crszC73ayDEP7yaZ9YuVJl/9NuIyL/ES7dOPOwsewOfSdE19GGXQXf8sj1xIE7wuoxak7DPev/4u+iX3b8N//6Te2oZt5b4H8ot3cursedSnl2AbSaP6/lY+rgzFEKXLeHZ7uUsxlqrFzI7RrcQL9dSHFUmzTv1ldqSyuTqFcVH7qG46cNx0r2Q5mf/gmU5cTFlo3jTgqIM1HMF6CCkl7Ud03A==;5:aiJCeDSs3yYqjO1uIsfcMsIZRRGcmaEzLb9/dVrGHCeI1qdzYsdM+ihe3lqzCKTQYAwVjZ7hzhAb9+HFmznHu9dFLFpKR9GHo9oi/IVNHeKnUfOo1i+EbrkFOdHY38a5/uMJmn/RgfrjWKHQtNxvBw==;24:95+fYqXMoXekM9dEWmBXY/YLb/nmbCBP4EIUmuXDqxpgrc6PwyTDh9kJpxlBRyOhRWRjLfqSnH5eCN+S5dnKU9++WuI0Im709SdalJIf1U8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BY2PR0701MB2024;7:gnm5Hrin+uuJf1jTYfdvfO5ckfjnK+X1eZv7/baKwtRFOTQvYUeDnUX25sMUDBSAYoiBiMH7WMpGt+UM628eFLNSOoz0oJwXxv2mSFfOp0wF7vfk/aEvDnCN82rg6hCniQqnjFRQVUSFO1Cfcymzoldny3jfVoowBSpoUQwlLEwhMY+PbWdGCi1K/u4NxtTuk4qiyKDqJu81uSU4dYPa0tUAIgeXUoeNc8XGfekd0pQVcJr3HDLFMv/do4fhkzMiS3A+XlL2O7oWNefbxty5D2gnMlNoS89RutHEUdfaMM9T4v2uM84iWlO3MIYnfN+DFPlZ7qfOtGVvML7RmbkFFg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2017 12:04:38.5571 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0701MB2024 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 --- Documentation/arm64/silicon-errata.txt | 1 + drivers/iommu/arm-smmu-v3.c | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt index 4693a32..42422f6 100644 --- a/Documentation/arm64/silicon-errata.txt +++ b/Documentation/arm64/silicon-errata.txt @@ -63,6 +63,7 @@ stable kernels. | Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 | | Cavium | ThunderX SMMUv2 | #27704 | N/A | | Cavium | ThunderX2 SMMUv3| #74 | N/A | +| Cavium | ThunderX2 SMMUv3| #126 | N/A | | | | | | | Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 | | | | | | diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 1e986a0..a1c09f4 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -2236,6 +2236,25 @@ 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 IRQF_ONESHOT; +} + static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) { int ret, irq; @@ -2256,7 +2275,7 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) if (irq) { ret = devm_request_threaded_irq(smmu->dev, irq, NULL, arm_smmu_evtq_thread, - IRQF_ONESHOT, + get_irq_flags(smmu, irq), "arm-smmu-v3-evtq", smmu); if (ret < 0) dev_warn(smmu->dev, "failed to enable evtq irq\n"); @@ -2265,7 +2284,8 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) irq = smmu->cmdq.q.irq; if (irq) { ret = devm_request_irq(smmu->dev, irq, - arm_smmu_cmdq_sync_handler, 0, + arm_smmu_cmdq_sync_handler, + get_irq_flags(smmu, irq), "arm-smmu-v3-cmdq-sync", smmu); if (ret < 0) dev_warn(smmu->dev, "failed to enable cmdq-sync irq\n"); @@ -2274,7 +2294,8 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) irq = smmu->gerr_irq; if (irq) { ret = devm_request_irq(smmu->dev, irq, arm_smmu_gerror_handler, - 0, "arm-smmu-v3-gerror", smmu); + get_irq_flags(smmu, irq), + "arm-smmu-v3-gerror", smmu); if (ret < 0) dev_warn(smmu->dev, "failed to enable gerror irq\n"); } @@ -2284,7 +2305,7 @@ static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) if (irq) { ret = devm_request_threaded_irq(smmu->dev, irq, NULL, arm_smmu_priq_thread, - IRQF_ONESHOT, + get_irq_flags(smmu, irq), "arm-smmu-v3-priq", smmu); if (ret < 0) -- 1.8.3.1