From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752881AbdEJLvv (ORCPT ); Wed, 10 May 2017 07:51:51 -0400 Received: from mail-by2nam01on0084.outbound.protection.outlook.com ([104.47.34.84]:22234 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752238AbdEJLvf (ORCPT ); Wed, 10 May 2017 07:51:35 -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: [v5 4/4] iommu/arm-smmu-v3: Add workaround for Cavium ThunderX2 erratum #126 Date: Wed, 10 May 2017 17:01:58 +0530 Message-Id: <1494415918-13770-5-git-send-email-gakula@caviumnetworks.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1494415918-13770-1-git-send-email-gakula@caviumnetworks.com> References: <1494415918-13770-1-git-send-email-gakula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BMXPR01CA0046.INDPRD01.PROD.OUTLOOK.COM (10.174.214.32) To CY1PR0701MB2025.namprd07.prod.outlook.com (10.163.142.12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f47e1337-51b9-4361-ebe0-08d4979ae657 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:CY1PR0701MB2025; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2025;3:pBMLqjSz3w0pLo6NC1fPMZnoWnyXlZLsvyVhpLraDtVmMIcCCiRfzdewHASdJpZQvvP2Qyh47zwTi7DqdEvCncGOgMyo3dihaJA07ap0Hbuea9DXv+KLGJgDe7lHgWi6sMKF34k9HOh1P7fZdgxFNg+NT20lA15KRcyHD2XuOH5B8Dmju5a8R/HYb9uVziqITDuq6yYDRtOO8KKIhqlMgYZq8T+67omdQtuYomz7FtbXkuXrqd4Fmt5tPD/xjSGGrMxF6iqWiFkkjl9kyOBbXGGpj5hIMvR83w8T8ais6BoqOzRbHHVv0zUb3By+yciKaRZ4N1lGrUfIFmIv80zjUA==;25:ZLagvrRuqe6wGqcE5tDvD4oAypGyVrt8xu5kNpg7N6i1+C+biGbQdmNaKcMEfv6Mp9Ynts5BAuC1PIyJcU65IjjpLUcXRYZErS/tffzRLeYoaiqVE4NjWvZMIduhwMB3LtOj5OdLsiTxxTvGFSawsbuZbpnVTN7KcIO8RXiFsbqG/A1/FnbotraWoFLUyqEf8E50x7ce1LoNfq2Ni+VXb9GYhM7bk2j8d1ZUy9xFF/f7ARKS429egG0DNI9Kpo+6ip6jN+F5mxjY2IGSmBacxorT+AvGUeA7COMcvPIO4hVgZUqI0eXoQfXFEmTt2/JORRlYFC9AWifnhLRKde1iebsX18G89vZSRATZmdU+0XkYwXAEgD8b5FqzCyMzOL8lpQ6EZU3mBRnWukVWdUH9IKQWYMHglpNSyd/orVIaKL6e+QwPG9Z7qbX0oaAJwNw5DEiTh1MAG2Kpj7dqEM3Or1CV2NfmYt9/jz6uvsBB9c0= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2025;31:otuiX3FPKAMRucJ7xOWehIVB5Y3OGg1XAapwJmQmKRcEdNoffjYMA0pqmxav4synclGYgmNILj97+U7sHEj7xhhuW86r0xAf9ZH+++0JqqAQ2AkWGTpUwuGSHOV1y+8BCJyNjpPO6rwHwDfAl91WInmT2FiSNYYUnS/yp+sylou23VBPkrP3rWM6HYPnzr8g3fGk7u3wy6o2/R1G4tGhEyoRRAW6fUpgq2q0hLBa6NmlK7+rBoqp0ecTU21guJNb;20:v7rjWw5IwCA8S4m7KPAhCm8GPri+gxRBTS8hnegdHuceAmAryIOYF5HlzhBVVE321MfW4QGYAxXmVeYFk8jn/tcqNGJT6Pcxm56OIelralshjVQY1H412RIEKDkNY9gRxqxcpczCp0uHggTH1CR4DSAPJ2ZTXaX00EGLKb/+GQFgEKG/xWaHMVMxVrNhiKEad/9n3bas4478YK2wqdzyeTts00weWDHlyOLsychGUnscC0gE8VqSaxanmV4/m8DrstTg+02BE/4sTM5lVaKgSx81brliSvf5YGm7xBDp5HSfrpt8OBU8kIi8DyysLZjfKO1y1fqhDbG+ZSwWv3jH4arp2vHaPg5eMSY8xGQcgloF1slT6rl74Uj/o/OWaxgqyNd+gp/bmFF5dcPjICkk2FvvVs5z8noboc/fIdVpKl9WXVesNtoh1QwA4q3QL72LAShbtzF0d+9Lh7bxpNpFGt1ZTJ25MFgmZp/BELp03Ju05sHr5nOO1yN3/OC4u1eDnCOJFANE7pIEw2O93AWsSYqXldsuSWATMBfLAvwlO3HhJgEH0fn0vTHrFgtru4XfsGJxgXt2KtAdjE0Tp4P/AfKKvOhsDXe8s4GRVB4r3AY= 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)(10201501046)(3002001)(93006095)(6041248)(20161123560025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(6072148);SRVR:CY1PR0701MB2025;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB2025; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2025;4:7YrY0tI3RbHRU/bjRd8p6AEvqc/KrJK/8T2iDB7dqrnrAT5XfyXiB7CQP7NBPShLQMfSVedKwZxc4BdZ4SFvcCGUi9KOrFtUgynB1ID3Yl0ckBkZlwUthsVgoFLSm6JRg4nGNHCoavEXy1PjZ2plW++yB7NGdNiJ2ZfBImnXWHiR8oJJtZeKEWbfIr2IHMlFKr2M8vfy5aF6bdnVfs2kahalZwXc87lRgC98nppvhaMIO7g7R8lCH/pKblZpkV+goG855xYVDIQ+GcH+RrewFHXatyIelLvbK60IgTdSopmVl3yFJU0cHLy5FVZXmGSyVzmqLqB9qB/VU/9iHMHptGYXErZzX28u6usTBJxoJtJJ3/Kn4YVVRiV6beE/q7MGa1tz+Hbb0TNclsABgMFKciE95OPfqvy5bA+ujRtaJq9OUeUn4SVsC3bHfL6tdVnfGSyqx1hinUI6Ou3TV6wVA9zU0muBvBgsiFCcFronEoUzclQvoLY+IWL6kT+s8AHWvCzxrSQwQusGRl5uSpVb8gnm9HVM9KzHU0o1MkieoqKhyI7rbvCUBaekUH1xrAY+C8yJ9oAvxVba5VDJi4VJgCeEFKBh8qH7hn7bTNalHHPcroUMFA2PGShmsbLkPEJaGV9c0fEflbzR8Wy6WxPLNQaxqddP9olhHnjUASu3cWoaO/cHCD4YcjViiznYkRlbBugeUdFlak7Zi8Av9ZPsZiViNM1ezNlLJkNbv5beRvpQqJNL50vg0BAh4MlQtVJDpv12JGKAsQoVj80nEy/x3w== X-Forefront-PRVS: 03030B9493 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(39850400002)(39400400002)(39840400002)(39410400002)(39450400003)(478600001)(33646002)(42186005)(107886003)(5009440100003)(110136004)(48376002)(6116002)(2906002)(38730400002)(3846002)(50466002)(97736004)(7736002)(305945005)(25786009)(50986999)(76176999)(4326008)(42882006)(2950100002)(6486002)(6666003)(36756003)(189998001)(230783001)(5003940100001)(6506006)(5660300001)(66066001)(72206003)(53936002)(81166006)(6512007)(47776003)(7416002)(8676002)(50226002)(110426004)(42262002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR0701MB2025;H:localhost.localdomain;FPR:;SPF:None;MLV:nov;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0701MB2025;23:J1Bx+MdpClhqQj4i7idRALWibFovgJUvK0v+dPs?= =?us-ascii?Q?0qO4g+GOPcPa/KVs3hZ3xRrO+k9wxAk+w+otIK+Ei0/YpT5+pLOiah3CIenJ?= =?us-ascii?Q?RtqR1Bh8zjYVGlE5qAPCGLDLq+eTMXtwzjv4brMCH/QSw3DM8R70Noi0OTE6?= =?us-ascii?Q?M65LAFV3AeKsEaI8Gu/9aZzsNAfnCEJy82ZYsws6kYRD34zHDMJvwYaIDKun?= =?us-ascii?Q?auLNTiTQP3cUmvLwI7tRvengeIUCsBNcl9G5risO4lBj7zHIy0KBFb8vRUIJ?= =?us-ascii?Q?+zq+aUiR9ZKmT5hrfROAxNAHB6Wqw3yE4e/C5xKjQX0mIwP+/3Is9XMiSSmg?= =?us-ascii?Q?cUhs66WIeteO8FauxUXMX8c17Jtt93N4G7cn1fYdK8cbIFbcV5d2tR+PAZz7?= =?us-ascii?Q?6NxNYeal0twhurmteO7ksfLc5dgpmd3jubjwQBcCnf/tulQGVW90BdW/P3yi?= =?us-ascii?Q?46Hto6NV2gMiUXzXxAkS2KIV3keF4mmYP65j7whWJneJCDUgUBMwjWeD43fB?= =?us-ascii?Q?AjwBYlOJenKYTwhNmvL9+yQKI0WYtJtedNi6Gw9CIAdvIrJC930CyFDBajPn?= =?us-ascii?Q?whiP+gbhhRA4DAmvFXWRtfhDccdA7xvwlFR+U78EpJ1s4CdBGodFtx3KbgMe?= =?us-ascii?Q?3XZgpoaCfyu3ECTw+pasSAJ9iGQXZ5w953IuGLfZAadX9ag3AgBPkuINxEtX?= =?us-ascii?Q?iFemGSpEIOE8p7UXk/cEN1QaTJ26rkFzhH32L2Bl1Pt/dyXeFxpoqVF/0DRq?= =?us-ascii?Q?D6dSEs61YoU4K32uL30FV25y/daslBlhdh05G1lS4CHT5uJYdKdoTGOg+E/w?= =?us-ascii?Q?vPI34yx7YDlHZoI8C6m/DB/nzxGALGFQdjZvwcF5rTWty42lNcWGPo1qTdd9?= =?us-ascii?Q?EHw157UGgsZKxHs5Ziz5B0MYkHb477UJaQ6OXznmwqEGiIH4H7VkMWK3GSrq?= =?us-ascii?Q?csg7ibeCNT/QK1hrsIW/KUs+UAJiXPCjUhobp00uB9zqniuHoGxsQySP5t5p?= =?us-ascii?Q?SNxgQhBa6HJdFuSbv/Kzlac3GwRvbUBb5dInq5YwOUaGnaRWh9qP744G5WvH?= =?us-ascii?Q?JCyc1/IE+4qjldBP2xGlWBevXPrXWL4H/syxP/22b5eKYBIAyQE89AeZc+rw?= =?us-ascii?Q?5JsiNNCxC9nxStsuDIEe94+7wWKK8M1PeigA8vPnpD9CoCJ5oisEVJSUwo5U?= =?us-ascii?Q?tXdE5EitJUTYocKjf4c8MSIqlGLDijcnfgLaE?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2025;6:ce/EOtdDLnqox5rQuz3XsB54qJFrz/47KhNz7S8KBeK6AMAgcuFoQdnJgkWIgVCFjla+/lANiXDZwzWgqizDO8+rKYgHjD+3hDi9itutLMQGpQpkc1G8UKfo3QFlRB0cl6I54lQtEaXDTYKt8V3SLeoQY6Ow7AZhEBrSb9xdij9JIX4BwwwA9QZkb8cQE0V5SjwjfTlkgH4+F8BY6Adnnpgc3NPz+tPmo5OjpxnDzVskHUHkjkAW/RZKhYn1n26gjb5G9fs3k0n9Cw33IM2F0Ny971MX9ICv5xRL2Hddr9ywL1bhql7YvKS3o2Qt4F/jYDYYglEur2a/2xOnXYcG52MRfJUI4nfN1oS+/kAbo+VOf5yXSohxJYMFRz5imzprdH3hS62ZBMiEQ4e5k7dsHh5UD+IoH2W5GsWn2TFHsnqM6uE/L9qURFZ/M1EI0qIJW1KHt06AdYGopBxwfahLe9GUpmu10MhX9KShQeGqU7biDuMrG2E6J+1/UxZ4s98p2UpLYZ+7S+nnl6NZucP10A==;5:lJk7xkYeDAXRuqldcziRKY5rIYmmJ3N8G+rardnQ3GYktG+t9rhrJZ3Bb9tk/iBlfMXXfbWzupYxAHfYPm0wdWg3Byz4l8BcaOXB48me0vdXUCn+nFuwX0JO53H7Kqlx7JKm5OnF534SirIPpWzNRA==;24:k1L83rhEmROwOIIFgvKb/C5nwCmNtx8UDjQ3jI9YT8ghzcr14WlljDDN7qWSBW+6FZX7OYVjsMaJSxUau2czNKo+gFWZD1zcibBDDOG14U4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2025;7:G8rp89HXVRAsHHkhrrqLxEg51HwkQn36wlwPOFmJ8KQgaZVWgP45RL4IxPwOcXY+h7Vm4OcOHQvHeVVy+Jzph9akFpk0jNri3aGmbduV+47RJLvFHgQthY9iT/EM0HDT6oK3+qYP9tUJb56zfJNCPeRYfleF0RWufJx3OiXjXYNYOfx7T4V+Ju25holp16G8r8CpkhIoTKyWN5TKrcYjHAhoFAWvFNCpFJbBucfy5O82JO5UEp/DnVgGPYF1iWLjDGSLwD01tJztV8C9kZHx9nZgmN/Yz5Td+i5RGmq+wdHCRZnD769LEVkJLCCxL+AtCOhAq70Y/tilaEY/82vWtw== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 May 2017 11:51:25.6032 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB2025 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 5836b72..6ae5d3b 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -2232,6 +2232,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; @@ -2252,7 +2271,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"); @@ -2261,7 +2280,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"); @@ -2270,7 +2290,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"); } @@ -2280,7 +2301,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