From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932644AbdELNAj (ORCPT ); Fri, 12 May 2017 09:00:39 -0400 Received: from mail-bl2nam02on0057.outbound.protection.outlook.com ([104.47.38.57]:12640 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932384AbdELNAf (ORCPT ); Fri, 12 May 2017 09:00: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: robert.moore@intel.com, lv.zheng@intel.com, rjw@rjwysocki.net, 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, devel@acpica.org, linu.cherian@cavium.com, Charles.Garcia-Tobin@arm.com, Geetha Sowjanya Subject: [v6 2/3] iommu/arm-smmu-v3: Add workaround for Cavium ThunderX2 erratum #74 Date: Fri, 12 May 2017 18:11:05 +0530 Message-Id: <1494592866-14076-3-git-send-email-gakula@caviumnetworks.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1494592866-14076-1-git-send-email-gakula@caviumnetworks.com> References: <1494592866-14076-1-git-send-email-gakula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BM1PR01CA0013.INDPRD01.PROD.OUTLOOK.COM (10.163.198.148) To CY1PR0701MB2027.namprd07.prod.outlook.com (10.163.142.139) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 42dc7768-dab7-4dbf-ba59-08d49936e026 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:CY1PR0701MB2027; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2027;3:DB0xR1rwu9JyLI6I70pfNaxAh0rhyQRFTgI4YPf9NRQvoNRnmIBsOkz930vp83uVM0T78525rAwBlj5mDL+8wdseKBK3tX+nS7hGrhdFy1IbtIoq0emZ5OWJ9viquMUvAu47L1THiunE9/mCnZDhzcOajuq4Nbo1eS9tS5nBX+a69s+j/Xz+2ju0MbJ00QZtuVb1iapPNXkkH46D54DSxBIMtyN9u+Xf1aCFbS9r0Z47UjC2BNrmwYt+PCXWHwH4Hhv6KY8bRo+xpg5ZHc04TD8m9xuxODzn7eLYAoLHUbjL0emvy45DQe9Y4uQVjBjgIsxynNn6OzOKSn9zqtLO1g==;25:O2vClrY9p7icdmc1WJxfv6yyEiuzcqK/KyP/x6SR6DBmimBsdzFQE5ejRqL895NR+ZKl86OKX7zM9N05DR5CsRnz41DiXJndXj3f+Uyxs7TVjpkl2qoTJx3rpAdHiypOptUY/LUV/0SP8771nBPb99P4IvymrRQgYU0tlu4pxkfVzwX/3NBBo69OSuaWYQtmM9vHou29nSRpAbC5LbxtJoujCSr+Bo+XG08NtxpGKi189sP0BxVNTd+JIX4M6A3sGIJYgtQEHpHkf5wD/i44yJGCoQQGyRQwbp450H1IOb6qfhpwmJWIv3VjU+G6kJGA5MJDMiK5r06gurf0Drgns4g+XQA9ZuaWrgZpQWwZKWPuSaxmKYBNL3ZY22/8Yfh/Yi5iYOUiUul5oO1ip03Oxt5KEeLgQvnJdv+hZDNQEz9hlRRTuxPe7mPF/YRUx2enVYSLF/bNuoGK655A9SZ6ysUj551WcFsGP4VZFFgLSxw= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2027;31:8pcInxLqjlwyJAYmlNW+4AHE0MRTKIuIVbSd4q4a+84oZul+rm8V755wSj90kz+iLbGk63DUci6mivo3QHK69tEHMWon6BVqQc+3XoybrqxKyZ4gcjUAbzvIDECi7CIyFJTxy4OaHkF3ClErGwHNOrq4qPuHY4PgGOHadnsQRffnkJQD3/x4gI/iOGqFdpZ5qiXLYs8UENvrEDGbLlDiEks3QJgmxqwMJmk9IgFQHXI=;20:nOwE8Nx77YLNB7hEeIG/8C0W77RjUqngBD0BuqxGCpviecKEcbAnS2dWl8O96ScXxW4a9AQPdDvI7eGXJCWzztz1EPlUO9zUM6T67J7SMsUfe+tCp0DrO2S6aUmlgknKhZXdJ3RIzDoLqjBOxceN9VbVs8sQ8avcL0Vq4ykNNcxUzClZwj9XJ3g8K+fpYB372KbpGTl5PoTU8TMQCmr4ZwEUN6CCOgXF9I0d7HE4I6ZMvvbI1XEQht1J8qKY6wBB8hPG/J7BF0Rghn2n+87slYLWWybwnwrQgJFfe6B513TLs3WAP5T5eRwX1aTAnxnSxOrGDO5t8n0lnodJikOO9095biLJngxUkVCVDXG6R6vt68o8LfA27QULAknAMxqrxb0SPJZ+e3gj7hCU/cPmAwJeNkI/2xghW7TBqTvVnSvIe9HlYXHqyGAAFBf6WI//OVzBkZVGX5LvmmuTWhoEZFO8dGPbw6uaTShuaKGcD0RbOzgx0U8+urtr5L3nQyHpHXt98QUyBef6VzQS5oIaNOSabFlIT5hXlMcOfnnxiR8TbbYfStuSqtGQSKGkLSku9jN21KPK45gSJF1oQh18sFD2TjviLhBhXng089icWtA= 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)(93006095)(3002001)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123555025)(20161123564025)(20161123562025)(6072148);SRVR:CY1PR0701MB2027;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB2027; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2027;4:Y51WU9hrM+3uQEChEVuWdqhh5TDaTwX3j7f15ECD1DA2QY9XvHIdxFUFya2A4oP0qDmDe8TPQK7PM1eBhqcU37f6DKza//X8V1DlGp05nk2Lr0G7EAM6mXaKT5BSYeoNkaKJVYs6/MN4Uhy7dyst8UnvxVukJiQHqYAIN1aOJZyX2xcQE/zryl/ysMz1fD9VEsQB1UdtQh8mwhvcU8jqflXiuWkL9jush7Q4ThAV9t75+GNChgFH80XOf9YL1a6eoSNZuTFyCkacasF6Lt5GMJSs5I5Xd2TDjSjU9p3a3oWv51mbE+nR28XUu8n6CPt628B7hwnRsskDDbAEhJhmvsMBKVMCktwaBEZ6dnbD0+13+y/4LLZeKI9NfXzahMlwxb3yXVpEyTUqSDPiBmBwFBMNv3IBXkF/dEjV2sRhh2FYtFSMBX+68JIxulwIZ/i+1xSwxORCC/sIWbnj+VAMpqgMSVjKWoZ72uHih7XnDoQGLMwQKGYNF1+ZDSFFTff18Pf06dwszVYkGw4JZGya8ZD3X6ib9EMVVXOjThkJEwR0hHLcf+77DSfB1yBIRUznsblgHKh0yOAnSKAArqlnuTgof9i57WCGhhZx2qVUsEqks1aqveiIBIdb0eO6PNiT+RQ11ZwbHe/LF6Pnw5oqxyrl7nDa6qwY+B+4hhpXC9DFTsLitB3L+JbBDbemjdTLvXGBlBs2u4ex1MVthGFjSoaoLjbTgpmz6uvYAh+dVMkRt68Fj2+78BQAmiG6tIJY71bWVfgfKE5gFKZBbB6YYQ== X-Forefront-PRVS: 0305463112 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(39400400002)(39840400002)(39410400002)(39850400002)(39450400003)(33646002)(25786009)(8676002)(53936002)(36756003)(230783001)(81166006)(6666003)(66066001)(72206003)(2950100002)(47776003)(189998001)(42186005)(42882006)(3846002)(4326008)(50986999)(76176999)(6506006)(305945005)(5660300001)(7736002)(7416002)(478600001)(5003940100001)(5009440100003)(48376002)(6512007)(50226002)(50466002)(6486002)(2906002)(107886003)(6116002)(38730400002)(110136004)(110426004)(42262002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR0701MB2027;H:localhost.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0701MB2027;23:+fEa+Gef2jH3cWzE2KS+DKa0/JJ9SN3t13hFbNK?= =?us-ascii?Q?WqNiJPRqxovGgESMo2sWQTJYsmEpV1XXFuETXgOKsZYduBAAX2TV1F+f8dRJ?= =?us-ascii?Q?G6RdnkWgmG9q+t3yjdL7NnopHIS6lUZre8/2+q39fGDNwVrCaVH5N0zhi4sY?= =?us-ascii?Q?+C5y+iO4Cxt4se5GUpjh7I3U1iBB2oHs4LV0Sp179hMrPgN9u4E0uM4dkpJO?= =?us-ascii?Q?VYXealh+7swouKLuMulB2jEhxKoCKoLyBBL77hdZ7Z93iKPwzPTs4ln8I8Ap?= =?us-ascii?Q?VmeqX9TBSf/mpWwltmbgosW+lBXlsOymUdGdHu9sfgNYTK0LJq3nwgb4LmFO?= =?us-ascii?Q?ofmngs2JBrTzfZXLTUMupmErUfaulXrQr4Ly4ZmmN031nfugz64DtfTHl2N5?= =?us-ascii?Q?h6kJw9UvABHpKLhXXvp8bakD85wfq9nel1Cv/amu8Z2rwpgGvhTtMqmRngS7?= =?us-ascii?Q?ajHVL5qlwkir2X5WcojuOr9XGaCGQoTDQElQ4Pl14FUqYu/Z6zrTN2vXPEpT?= =?us-ascii?Q?t933cImD/L5ainiDerwoXMzwNsHdJ/tH1n11yhsNp1fIg/WR0WcFe3MtnVKm?= =?us-ascii?Q?a24ofemq7HA7UyJke2jTpbUOAbM61HMWIWXnweK4y26Gu7LwzgNQKIh8Q7di?= =?us-ascii?Q?lnVQ2PUAXI2UkuisiTBM5IozurltVJ/DI5X7BbJyeL/kn6WW7f/iQdfWAXGY?= =?us-ascii?Q?3IGBMMaaFiaNDiwSj/uV55q+j/PBPQX+GW/mkqaURTSA+Acf1XHkUhDBREPT?= =?us-ascii?Q?I7h7XooO7T1XffHxBovqWP2JkR+9z2iUBWcanP1mTwW1LsfWlkTFSp0a9c5h?= =?us-ascii?Q?OwkcB31PIfT6XXGNeKWgzPy4sFC4S0TvgzYHjj0zFmSOoICEYWl77uNYQ0on?= =?us-ascii?Q?SRwgHg+O2rEZ3x1t5svZiN9u1s0ZvwaTd+plq5TDipRfrx/rPvUzcNFsNvPx?= =?us-ascii?Q?LGt7lqjadW3xY2F19FKYGA313jpI7Iu1sR+BkORY1qLv4GtyWBovmzzsHWIz?= =?us-ascii?Q?egxhG4NGzrc+OSSXN61KpgW5rpd/WOKyx9iNmqL0/aYJgD33ZbslBhKBETeg?= =?us-ascii?Q?khGr+0ms51x30JYk1SuDPHPMB9i83lh9WerUhyAUA8for0QwT8l3dalu9zt1?= =?us-ascii?Q?U91SLCPqIl9pjc/uZo+io39C/e9zmdAZC9078mz3vGBArii0BMcTITYUE5Ma?= =?us-ascii?Q?26183uf1y4Ff1F9U=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2027;6:BGbczbNo43Vfjuyy/Nc1+iUVkOys6pzSLKMNqokykx5IPAf3bQVCI7vbVGCXqEwI+BdAuZMKRyA1q2QDgbcfEDJ0N2r1rj+KEltTw4rBuMRCocFWWopE9uLwVJy4BBS++RGB4IWYpQr5Q2+YurvmQ/oF340SKIWN25lMXwxuk040Em+ucFDpYwcKuj9l4lD2q+YpRuTt8FpTH5vtLSshQXJZFVaN9M5KL+i8qAWQGQpMz/GtbtLUA7scFWOKK3PQTzeQj2FL5wKOlBOJnC8y1UELDXic41yZQ8SjCkh5SBP5l5YkoQ2iwhPm3kid5SsoRooGgDtJw+ThYg9yYPAG1b35R03iT2uojPDcido80sTU1eqJXYwiK7pjOiaRx/zEe4jAsw7H3ZF/DEzLvrkD7UN2uvhqy46rTADO6/jsdVIU4gExE4C9yc9syehIxmdYC9+uhQRoSAT3JL2FSyP/vr+I/GlYeTa0Ukm+Bn/A4vq9xIQcXxidwqpZuuUwsIQjJkFYK/uvO/pxdtFXprp1fw==;5:Lz40RuUxTQNu9+kLpt4gOG85/WJ0aWK1Xx/nNdavzjSZdW66ImuvxApNCd2vYh/M0rIa4t7xNWHIuqr1NOGVKCil7ReRJWOUAE9f8ILMAJAm7zlmu0E1kUSG7/Coyi//EMsVrI6ut6FJ/2mwEwzD4A==;24:8q8zJsOPmtUyMb9jU/xP9OOMdwI9uRpMCK691G0S9eTVJxs/0qwUjegqwuj6iH5wSa+YgFTGdWhxbkGEnsR07tWg2xLgU+862XiTJnwSTmo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB2027;7:GdC4L46J5RH22XEFnqdPpILQYH7dyqGrLfWbhApnpQmwZNORG1KK8+/t9qrAp4CPH/+79dHmueHGPh55wmbAjXS3CciTgiKTwsH/CJrqvn6Fa09gDjhkF7bZ0g+35Ps+b3XmQ6XJpuRQ6Mnc5QKn/vhdM1rpsT9+cdM9/lu+qot1DPh7F/GIxsNcJwCCxTXED/a4CYxkeM7fPzRuhcWhFXFWyPlDqZTBp48eFqqsZjPDDWjKdZfac85yhiT9LIYy71qmwm5ow55Ymiellgk0U5piW6sHQwIKMUgrda4qCP5Mge0hnNx5mLeyIUPxCtNWoWtL/nF3f67ytfjLWxWgfA== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2017 13:00:26.5873 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB2027 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Linu Cherian Cavium ThunderX2 SMMU implementation doesn't support page 1 register space and PAGE0_REGS_ONLY option is enabled as an errata workaround. This option when turned on, replaces all page 1 offsets used for EVTQ_PROD/CONS, PRIQ_PROD/CONS register access with page 0 offsets. SMMU resource size checks are now based on SMMU option PAGE0_REGS_ONLY, since resource size can be either 64k/128k. For this, arm_smmu_device_dt_probe/acpi_probe has been moved before platform_get_resource call, so that SMMU options are set beforehand. Signed-off-by: Linu Cherian Signed-off-by: Geetha Sowjanya --- Documentation/arm64/silicon-errata.txt | 1 + .../devicetree/bindings/iommu/arm,smmu-v3.txt | 6 ++ drivers/iommu/arm-smmu-v3.c | 64 +++++++++++++++++----- 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt index 10f2ddd..4693a32 100644 --- a/Documentation/arm64/silicon-errata.txt +++ b/Documentation/arm64/silicon-errata.txt @@ -62,6 +62,7 @@ stable kernels. | Cavium | ThunderX GICv3 | #23154 | CAVIUM_ERRATUM_23154 | | Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 | | Cavium | ThunderX SMMUv2 | #27704 | N/A | +| Cavium | ThunderX2 SMMUv3| #74 | N/A | | | | | | | Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 | | | | | | diff --git a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt index be57550..e6da62b 100644 --- a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt +++ b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt @@ -49,6 +49,12 @@ the PCIe specification. - hisilicon,broken-prefetch-cmd : Avoid sending CMD_PREFETCH_* commands to the SMMU. +- cavium-cn99xx,broken-page1-regspace + : Replaces all page 1 offsets used for EVTQ_PROD/CONS, + PRIQ_PROD/CONS register access with page 0 offsets. + Set for Caviun ThunderX2 silicon that doesn't support + SMMU page1 register space. + ** Example smmu@2b400000 { diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 380969a..c519927c 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -412,6 +412,9 @@ #define MSI_IOVA_BASE 0x8000000 #define MSI_IOVA_LENGTH 0x100000 +#define ARM_SMMU_PAGE0_REGS_ONLY(smmu) \ + ((smmu)->options & ARM_SMMU_OPT_PAGE0_REGS_ONLY) + static bool disable_bypass; module_param_named(disable_bypass, disable_bypass, bool, S_IRUGO); MODULE_PARM_DESC(disable_bypass, @@ -597,6 +600,7 @@ struct arm_smmu_device { u32 features; #define ARM_SMMU_OPT_SKIP_PREFETCH (1 << 0) +#define ARM_SMMU_OPT_PAGE0_REGS_ONLY (1 << 1) u32 options; struct arm_smmu_cmdq cmdq; @@ -663,9 +667,19 @@ struct arm_smmu_option_prop { static struct arm_smmu_option_prop arm_smmu_options[] = { { ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" }, + { ARM_SMMU_OPT_PAGE0_REGS_ONLY, "cavium-cn99xx,broken-page1-regspace"}, { 0, NULL}, }; +static inline void __iomem *arm_smmu_page1_fixup(unsigned long offset, + struct arm_smmu_device *smmu) +{ + if (offset > SZ_64K && ARM_SMMU_PAGE0_REGS_ONLY(smmu)) + offset -= SZ_64K; + + return smmu->base + offset; +} + static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom) { return container_of(dom, struct arm_smmu_domain, domain); @@ -1961,8 +1975,8 @@ static int arm_smmu_init_one_queue(struct arm_smmu_device *smmu, return -ENOMEM; } - q->prod_reg = smmu->base + prod_off; - q->cons_reg = smmu->base + cons_off; + q->prod_reg = arm_smmu_page1_fixup(prod_off, smmu); + q->cons_reg = arm_smmu_page1_fixup(cons_off, smmu); q->ent_dwords = dwords; q->q_base = Q_BASE_RWA; @@ -2363,8 +2377,10 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) /* Event queue */ writeq_relaxed(smmu->evtq.q.q_base, smmu->base + ARM_SMMU_EVTQ_BASE); - writel_relaxed(smmu->evtq.q.prod, smmu->base + ARM_SMMU_EVTQ_PROD); - writel_relaxed(smmu->evtq.q.cons, smmu->base + ARM_SMMU_EVTQ_CONS); + writel_relaxed(smmu->evtq.q.prod, + arm_smmu_page1_fixup(ARM_SMMU_EVTQ_PROD, smmu)); + writel_relaxed(smmu->evtq.q.cons, + arm_smmu_page1_fixup(ARM_SMMU_EVTQ_CONS, smmu)); enables |= CR0_EVTQEN; ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, @@ -2379,9 +2395,9 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) writeq_relaxed(smmu->priq.q.q_base, smmu->base + ARM_SMMU_PRIQ_BASE); writel_relaxed(smmu->priq.q.prod, - smmu->base + ARM_SMMU_PRIQ_PROD); + arm_smmu_page1_fixup(ARM_SMMU_PRIQ_PROD, smmu)); writel_relaxed(smmu->priq.q.cons, - smmu->base + ARM_SMMU_PRIQ_CONS); + arm_smmu_page1_fixup(ARM_SMMU_PRIQ_CONS, smmu)); enables |= CR0_PRIQEN; ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, @@ -2605,6 +2621,14 @@ static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu) } #ifdef CONFIG_ACPI +static void acpi_smmu_get_options(u32 model, struct arm_smmu_device *smmu) +{ + if (model == ACPI_IORT_SMMU_CAVIUM_CN99XX) + smmu->options |= ARM_SMMU_OPT_PAGE0_REGS_ONLY; + + dev_notice(smmu->dev, "option mask 0x%x\n", smmu->options); +} + static int arm_smmu_device_acpi_probe(struct platform_device *pdev, struct arm_smmu_device *smmu) { @@ -2617,6 +2641,8 @@ static int arm_smmu_device_acpi_probe(struct platform_device *pdev, /* Retrieve SMMUv3 specific data */ iort_smmu = (struct acpi_iort_smmu_v3 *)node->node_data; + acpi_smmu_get_options(iort_smmu->model, smmu); + if (iort_smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE) smmu->features |= ARM_SMMU_FEAT_COHERENCY; @@ -2652,6 +2678,14 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev, return ret; } +static unsigned long arm_smmu_resource_size(struct arm_smmu_device *smmu) +{ + if (ARM_SMMU_PAGE0_REGS_ONLY(smmu)) + return SZ_64K; + else + return SZ_128K; +} + static int arm_smmu_device_probe(struct platform_device *pdev) { int irq, ret; @@ -2668,9 +2702,17 @@ static int arm_smmu_device_probe(struct platform_device *pdev) } smmu->dev = dev; + if (dev->of_node) { + ret = arm_smmu_device_dt_probe(pdev, smmu); + } else { + ret = arm_smmu_device_acpi_probe(pdev, smmu); + if (ret == -ENODEV) + return ret; + } + /* Base address */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (resource_size(res) + 1 < SZ_128K) { + if (resource_size(res) + 1 < arm_smmu_resource_size(smmu)) { dev_err(dev, "MMIO region too small (%pr)\n", res); return -EINVAL; } @@ -2697,14 +2739,6 @@ static int arm_smmu_device_probe(struct platform_device *pdev) if (irq > 0) smmu->gerr_irq = irq; - if (dev->of_node) { - ret = arm_smmu_device_dt_probe(pdev, smmu); - } else { - ret = arm_smmu_device_acpi_probe(pdev, smmu); - if (ret == -ENODEV) - return ret; - } - /* Set bypass mode according to firmware probing result */ bypass = !!ret; -- 1.8.3.1