From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754409AbdEEM2z (ORCPT ); Fri, 5 May 2017 08:28:55 -0400 Received: from mail-by2nam03on0073.outbound.protection.outlook.com ([104.47.42.73]:51264 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753080AbdEEM2u (ORCPT ); Fri, 5 May 2017 08:28:50 -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 v3 6/7] iommu/arm-smmu-v3: Add workaround for Cavium ThunderX2 erratum #126 Date: Fri, 5 May 2017 17:38:10 +0530 Message-Id: <1493986091-30521-7-git-send-email-gakula@caviumnetworks.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1493986091-30521-1-git-send-email-gakula@caviumnetworks.com> References: <1493986091-30521-1-git-send-email-gakula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: MA1PR01CA0114.INDPRD01.PROD.OUTLOOK.COM (10.174.56.158) To BN3PR07MB2499.namprd07.prod.outlook.com (10.167.4.136) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9f4d8a42-b3af-4a72-d24b-08d493b2473f X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:BN3PR07MB2499; X-Microsoft-Exchange-Diagnostics: 1;BN3PR07MB2499;3:+wM0URwxTrsh/zM7h0rMGZFR17Ua24f4ODtpoSyn5WxespbUk5ayDvlZ55fMuSjJ0Eu8klrl81QPlcHSCodxfn83Ir+Y8WjC6OFeVbYKERn9FlIGBT3dp8WdLTgj2SrOq34w6jDYRgxLuqeBkuerFEWIozuIrDkvN4QXrg6T6g66aV84/0Swk9zpCSECB+rKFRncHhJt/jT9d1fABq6/pTBK7ZvU66KEa49Il0SwnkspUyzEl1WrTru1fZqjrRSC/L5YgZyIMzjoE62z2PGD50vkZi/DkderNCK8i4ShZmv+T/iY9XXFiRVutg7w7prGR6o3MYDIO45W3Pt1d6mpYQ==;25:zjFtTj1TtSotUYtq28DtLhaSBITjPXzuKBEHgi5HEvg+c3piqshyJaQVb2uNu4lj4X1L0ZDL9sG8VEJI4dAP0HLIgKOWZJOjUSOgStQ+308MCik73YqY8NnkOYjjRp0dQ2c33s3+X/93YLEL+JzvUfoiwdGioyG5t3N9vpzwGiqfcXFIdnAd5NhgA0pDX1w5nEibNiJaUcZV99FIfgaLaXp/CqIiy81tlpUqMd+6j2EoI3C3HL2V7VTXwLi3auUWqkib+PGAAOeYgTOro2rOxH4xv33iOQ5vPLoKY/w9c34dBgIFXFbDJdzkuuJD4Qcwby5Y1xU74bap33u+cHBz4b9roE1AUAJw32EUK56zD/ylp/UjuG0fGCMcr3n9MlLiPOdpqVXRNea4bqG9UtOOUHhMTioScz3rI2JWnlG0ff400g11/XIqrAXzsFA/sNkw9DTX7g2/7GWviwsm+hHaMyO9MN7jZ0Wg5Sndb73HYzs= X-Microsoft-Exchange-Diagnostics: 1;BN3PR07MB2499;31:/eEA6Pob3l+fyl/m4HyyKXYi1kXkxwRb+vIUMroNp7v9d1K8AQm0/rvi8uTd6VA2EN9v9eR13cjosIT8waTwRUqqFVZ+fSeRMP1toF3TRqORgt7pIz4wwPm8RK1XxqTiRENRimNt/rE9FqWGtS2ARa/gXtPADLEaAwCnRmmwRa1AUn5HPwoHS0WmYnSJ8DB5nRd6wyWWMvUjbh3EksZp1/0xgP2AQCyWEDn6Hk/QTBE=;20:NbclldMBpeD+auuhLQ2SR0+5mYzfglGCUhPxk0Y03QTMtiXI1fubjXH93THzKUfrRGHBRqw/NDPRrYs+GeQqVWgwvqxuVbVVmCQUBZ9CS8HKJ3ak0dRZGavVj0bE3eSIqJXkudmjsUI6zxgREpuSi5oUwGPhrjPi2yCv80Ldcvph9V2TGQ8YxPPE7OmHPaL6E3OdrgKk36nOU38yf790hMjTfkFHAdsR8/XoZ7UtQjfVS4v6uNZqXiJtUwAckT5BRN+vuDzX9C2cL6PcDfOM5ctiiQBIh46M905jYVHJj0PRaQfH/go09qwkudw7OOYLk5yHvDb62V1Blp6NoaSyPtc3OymsJWd6XpCeVPJ2l9LKVwBBa1ep+idxBmjJGOlIo4Ub0rxvwZ0L1FYa8dFSe2I7DyZ0bOrSgQKis4NmAb3Uf03eXozgp29qgEjUZ36JiEK35sqqyjGQEDJWlVqgReBqB5Q0Jh7VkUJsXgVLfmAQSYwsZ8VI2t1AolLx8tbO/Fj/ousPmLFW1ExTPqy0ONAbrphgHIRwZLhpdVuSgKQhHt0QPxIw3Zpac6Oyae/mP+179cntwWtn5yEfgkUoDLUC4zkmErRGGoxn7miovIo= 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)(93006095)(10201501046)(3002001)(6041248)(20161123562025)(20161123555025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(6072148);SRVR:BN3PR07MB2499;BCL:0;PCL:0;RULEID:;SRVR:BN3PR07MB2499; X-Microsoft-Exchange-Diagnostics: 1;BN3PR07MB2499;4:TtIddebNG4R5eiBWccXJBRyX1ltki/DauFiWXzueyL0YLSi9x1Am6i7yjUNjCW4rJai76bG3vyNmB4Yzp1SSGQxidvQCe9kj442+j5ljSmQ6JCiFHhRjlrcNwrG6WI/rYQnu6NL6ZYIIATPxTFMV/bkAwno0fgX2vdWbzKOF9u9VfLx8Qvyg0+jX2ngRjD8D3UQ4N2PBHU5ZxoB/hR1YHx/gT9S0NEe0LfWazD6cUioP4SofcHkRq9uvPOBShUvV0bIzjfgaN6ybjsHVohPo6/IoKe85J9/GU/EsAaPTdUD01bXCK4hpIBwih0XfIyuYB1hhhAf4kJiLapycRiBsOI5xDN/DLwR9b2G3pX+ipq0P93z7E/DrtXhuc6XUXBrNZwgEouuVjcffrcJ7g6mSA3VNX/PtHvTpwBDzeSfdKA86N+wQGMIsx0zGKXb3rrD4AtP90lB6fvFNq06mOaMgceqB7tKuVAKDD9BThIT480xkNmqxLFASca+V4K7qWC7/YvYY2JAdItUDjRkl2b+MZP6ombytVJVy7km1LmjQXOm241T4jfdrqe3qhvQiZqaZj9JiQsUsttEekqfkQlbmLxrrf9uBhyOqIstPld9ypMyMLJ2EHJj5MlKWthYiZTOfjuqrET0hoYMU7ySAAH9g781h2xYgkTQrOHuWV8ItXpH92R5ntWDWk2UIqu5rvK3QOU8BulFOvwFYvUhmeqoWsBNPyR/azlPvnnoK3qZgQHzm+j1YWWIe+cfZ+LrWoIUaqPaDPWqvueHedC4l5BcIWA== X-Forefront-PRVS: 02981BE340 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(39450400003)(39840400002)(39400400002)(39410400002)(39850400002)(36756003)(5660300001)(230783001)(53936002)(33646002)(50466002)(5003940100001)(42882006)(2950100002)(25786009)(6666003)(189998001)(305945005)(7416002)(7736002)(42186005)(107886003)(38730400002)(4326008)(110136004)(5009440100003)(6116002)(3846002)(50986999)(76176999)(2906002)(6506006)(66066001)(48376002)(6486002)(47776003)(478600001)(6512007)(81166006)(8676002)(50226002)(110426004)(42262002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR07MB2499;H:localhost.localdomain;FPR:;SPF:None;MLV:nov;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR07MB2499;23:n3wptkppEGHAX9aARTJvInamsbsqHRavPybzcFDaY?= =?us-ascii?Q?3z/rtLpWLuGGWXu06PKCW9oiAFpFwDG7UAL9zDLa5+8VAPIenB5K0e2yYbBG?= =?us-ascii?Q?UgaWYl4VpDCG2/nXnn2QKTnHQuFxveyDgPvSsn9+l1kgEQomTzYoKQNSU0An?= =?us-ascii?Q?VznGsM2BSR4+mGPNFfj16/RYreesbRwoiAEqYbh0oiWnlqfPm6Uu8Ji+JlNq?= =?us-ascii?Q?9RNH2bEqhMZaHUB9tGNYUdOZAmnOq6gsZgoXzv8XELnwTSDnlgzKScJRl2gR?= =?us-ascii?Q?HHWT46o+RZ4w2TMdCJcY3biIoEnroD/L1h7VQenBAYcIJ9u/9/R6Z2fVL47c?= =?us-ascii?Q?EX8TbNhFxXmOS8jbwQOvqtcB6xJBbMQYemD5bZodiMap76oJUIpa+dND4TAl?= =?us-ascii?Q?c15luVhRv8V9C/hYlj0A72ZOI72eTIcI5mJo1DdgOyRPcmQO7DhIbz2v2yw9?= =?us-ascii?Q?ORu2aOKfmKSL1KeMXkI8BdUSnmTeOT2WzhsSC9ZmkRKdcuNf7T1HU3J6DWC8?= =?us-ascii?Q?PVf0QDq1aWU3ciJyLX5GSWhBoo4JQas8KXm9DO0qVPDfryGmVYljwKzIjqKx?= =?us-ascii?Q?pNfeoD1GK7D0eBiKxo9hhMslz2RJe1nClK46fiCDGQ5LxcKaCWbOiqPvyN/J?= =?us-ascii?Q?1/keMsFhoFDhC9kZ5B3MbFXknXS6fPJpUd2tfqGuKUOHbt1QKo6Qh1+9rf7L?= =?us-ascii?Q?rzdvIdNm2DVWZfZ7dLAdKIaz4k886WIcNtNVms+nHoAU+WWXEVwBinIKTwBa?= =?us-ascii?Q?koncqxOPPVzIHz3mUoTsNJ5MMz3nkDvZBi60tzA89ZmbUncR61zFlT/+FXgS?= =?us-ascii?Q?X9WkiXA5M/YTsPOrZZ86YcISAfuD1/3R0i6PF+S/UQvOXI8oWb/g1TdM5hqm?= =?us-ascii?Q?c4zHn9jd3ayLLP0GLfdkahUQCKQksl7EIdmm75f8IE5+bzkuWTNJaHQxkVmw?= =?us-ascii?Q?4AhIeLbO1KWMR/lx4X/CLifc5/p/ZKcr9Kh2I/4n5dMs9Bbts1d00LCvCzN+?= =?us-ascii?Q?/iGF2bgYe0zbrcSbicBqkMuBiwyJUr1pJSm7Or2TlzqSKcXsPaaE5eBm/g0a?= =?us-ascii?Q?LIq7BGg0pBGfadVn2eYfbX+Nk3Qw1LJe0dhUWki7I3poyGTDFn+9+Sq17NnX?= =?us-ascii?Q?iVpgAz9WL6MWY5MlWyHcVL5jtr11Ck4Cp5W4TwPU8s2kH1Af+Y+hA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR07MB2499;6:d9y8AHNBNNKV12vCNWvNxEyyUYEPEmImqMKqjQG3WrIYzIgA6yMyCounX7quinx9OSEz+0PU01Rp4oybZKCKEWtkjJK8dDzVq2xCiohrLcoyyJlkYAEkqbWDzkMpjcrn0mVnytYXQzVNaKYOk6UTPueuCCCbbQpxkFWeTkUtBoti2gVMoZZQy7CAFcyAjHR8SSfPzvYikYAiBeMedZXzVPDlatBv6l75kgV0erYNqGrHPQdLH4EnTyqgkrrzWMxDX5X3dZjSbPWga2J5jNeS8NSbPXm0lGOlMfoNEmlTIjhTT+VVEQofi2Iz+2Xl4zCNbYO6au1FTz9rMXYAdY+GT0fT8aVPtYwdCk3scjMeXPoGRXoB6dqftb3mfhbWNG876mEYzZ4U7QpOXvp0Aw4wzoRPfgssPjO89WlgVYRmJPyFHDO27oLmJsrs8r+NfwascOMumE4zjPuqz3w9CQ2Z2F0/30meJK8ItePEpWIpPOWyYsR8hdkv5FiT2UrJsBHc3lhkRJ7iGSMV5MiRPq5J+Q==;5:rv4pZN421QPOZe3Lxp5x5YpfSSFGaRzFJyjJ/ws9HlZMhdnCNBwnzYxWswYJfZsoVUdfI/IveYQc1X0Aoc2sFUUiFpwCDwYYiOyLNStxRemRbOXiVri2RdnikiySL7N79DFlTkdPgRKsCgfCX71L5Q==;24:ZJp4Lc1fdgJ5mzivWAX+CCuMRd7K/z3I+IkXAuMl4Zpk9etN1JnNLlGP54CaO0L7Tx9p9qrY0OF2oVwWs+F0KKC9zs8pieHr7MBvwFQuO6g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN3PR07MB2499;7:Y8YM+X6MviTI2Kbfvy6bn99X0w6byXjL/a7cC48PriF/8h4pTHv0q+yYgiZp81NhuLbzE8hIV1X6YtGl7TsbLVAlvW4bQswMClkTRBX0wFw084RYTUqKxsqqD3m/SJTMU0zqHoP7dkpmtys1/FN4FtbImxVJnHBVCQKQEl2WHiCw8jHniQmi5VdZ0/bMH/8rzfiBcQbRNch+ZPvwWM3LrbWp0yFhCexRfu6aRjuh/pqzztgTQ4xBeZ9LNRwrRTHOzaZ2gI5fGwKG2InKffviPQrILBMFKV6kbeALkZZTc73A/uSsNqLgIHNX5sdA6HcZS7WILm5qNGzMgO8QvTId3Q== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2017 12:28:39.0179 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR07MB2499 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