From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753073AbdEDMzL (ORCPT ); Thu, 4 May 2017 08:55:11 -0400 Received: from mail-sn1nam02on0048.outbound.protection.outlook.com ([104.47.36.48]:40685 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751211AbdEDMzE (ORCPT ); Thu, 4 May 2017 08:55:04 -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 1/7] iommu/arm-smmu-v3: Introduce SMMU option PAGE0_REGS_ONLY Date: Thu, 4 May 2017 18:05:33 +0530 Message-Id: <1493901339-14929-2-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: a3916c01-6c50-4c1e-c305-08d492ecc6de X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:CO2PR07MB2504; X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;3:50vU0BDiDLiFrq8OcdXeiMA6xCh/JhldIBfM+PQ4td20xXa8AIwTODA7+k6tAv4FRlHWMUkP8AJKhMYsW5BcXt6rj7wmyN85WCSvNoQkzREJvEnT1t/59X2MhHLQsQ2GpbpW/kv01tRqemE0UzanwXhd/245EAzTbNsH5tG9tpYwWxl52c5UCWqsxspdiozilBlQMQkIgSzujV/L7giIACE6bVE4Gvu+Mpszf2AsxmjuV5SRY5PiyWOqy78Td2uFQSTVxXaIXMhSi9ERyRlEblD0NgiTN8c0sTUIKNRXqA41BCJi2COijmmw4o58NK3oTZDtlL+WLjVuceZaBRuO4w==;25:W6ISTXHRPGKuokr6Gjl4q2fZvqtM7R6tSBX9I1fsgolUeyLy7xgsjjOP/9WMmKaczl6ynNmMF8X80FkDcPQKT4WxRYx7UqvBncY8EXLwUjAv+R7ZhBHwShY1N7drJgUN69Ul3HIqZctYHJMg5KXXU+Qf4lbSPRz1gOQeZXWvps8lVLbZ0gOw2ubQgaMFHjyAnHMyALgBewNlHZ4/CpqUECLYSCT0jV1WsQQ3VR2mnJ9QwEPVIpJaonn/QBeBewycyld9g/o0Qqyh8VnMWr6Z4MzG0b2uxu9q+K4vKB4XPfuNwDffDRelV7I7WkQvEIZuF8jeYVo3doHIKDCBHgJVzBZyyNO9Ir0o8XpQOMlVdiQKzHgf3dgIOJX1l1mnbtnfhVnfVb0obwXcHcFnktSK1iZgwsBiqeWARp+q2xs2+ITYGCT8eWfZnSJVQK/mUdvnxclTcF+kGdU0NDt/OOACKA== X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;31:mvXggHEESxqgtoJF8wU8nAF9tqJhYXUnCp6EQFfbl8d0Yhd0ymAKtOrgF1hLDRrbp6AbOMTV1loUKPRz0UpaOctSRH+nAAxrDEepxMoo3eC/fARK7+MWEDH2Lc4YHfPSt+9jFfBhXLFKOQcEAER2gYY5var2jsdZefDOdCogIGYADNuN1EvmH9O4Djmwljg0X/tze0B8/8GlNB18IBcr4pYQVcOtCNdrYPrKGBkIse8=;20:loRzTRXNh0ltfPjR9M5eMSuZflubFKEpZjPlLT/8dOiJ0x3ZmOwEQrzy5qprl6aJbVcy8m9M+oJIoGBrCZ1/0fHOucAGRaO9E85pxwqa1OntvY1GioTnKN4W+h8ocwsQEJVM4fNXzT7hmWatfemvtmQMcGj/PY/m59bpVRW2ITVjDtPr45ifS7uwATWj0ZVF5XJzRY4Go3SC0nfyYj1q0Dk6H9LU2F3adsbbiH5Cd/nWet+kNpzHeRaxx7w7D3z8igq66AhK+96/ys/zUh6JH0jFy8bNic4Ccw67T8yAdKfheAUDULmALFIatWCEpH1fvWsW12rZafbybtc1vMlLHEL4cBu+tzsaMIR1MMjb53e2DOhtGJgdqu3a62qLzMuTNhIPgbq6PRkpkydGHcWZNlXh4Hl2H9Jp1Zf2CRdOcJEhM+InCDBi9euj9ZKqW0HSG3MFmNj+p8br0Hcgwt52Xm4Iaqtt7YwLxIhG+kNX15hVJFKIe27UQcJnYJBJV7cJl8/QeMsi6KPlw3cb8tWHbAJvRDtmYnvVeWhYXnNVXdp7wLhfJdjQIKe2RMbOxGfs8NZze8Kylg43LjcLe6FAbrdkI/1GO5jOrPdxaVh75t0= 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:dWqO1pl7Y85ZibU+v2Ff/wnwIccSKYtsa9BeAexET6Gmf/SlicO4NtFLtF1F0hKWL/wHqMLeD7mnKfzO8n8XMgy8+oU307K7KFRlRTLY7iGFtcRlz/hCwPNKdkgn3B4DogUK98x6joT72qQw3r5GWgxw+rQDHojewC9PT+c+slXhN1etAngPV0o2nRequwNTRqcsGOJX65rr0XQpeb5lxEyYYyZwbCF6X4if1Vid1KcQSu8zSujwsNBqox4Tlhq5tY1Nq9B0XdcXQqGwZSUT2R8/VWFrMYpzKDJDpPUVlgJlrtCy7UofZHDl1RMOu4iHfTM1tTN7PTKgwsmhuimKg8bqk5vYKM0IRT05sjDK/+EK1mNXb+a2WKXdJpHvVnFwYPTLOXDVmb6k/QCnntl/p3/JW4j0Yx+QCjPIy31kvf4yihhZm41mmwjHp3BfJghCQ9A8Xy3SyZnEEYBs3FY/+C/Tb2ooljCzV4h3XHADlKukccCFbg4e4oOuzdkAf+EHNJncD2Fe8dMmMF4iVQEe+ZyT5NfYNR9UD8AljJVfpBj/01x5PBQqvowfC6y6hv0CT9G9yEMMrKnEC24AKOiPCJgjcwB9KiORby3Tsah/JmfDTfgasuVQucIfbOGII023EB+HjbxUbIzrYC5ssCcPRHqrVyaAwEzSxXmhdsAltYKGL8FOWqyEUAIW/HPdtGwm X-Forefront-PRVS: 02973C87BC X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(39850400002)(39410400002)(39450400003)(39400400002)(39840400002)(25786009)(6512007)(48376002)(5009440100003)(36756003)(50466002)(508600001)(53936002)(3846002)(7736002)(6116002)(2906002)(50226002)(305945005)(8676002)(189998001)(81166006)(4326008)(6486002)(50986999)(42186005)(76176999)(107886003)(110136004)(6666003)(5003940100001)(33646002)(230783001)(66066001)(38730400002)(47776003)(5660300001)(42882006)(7416002)(6506006)(2950100002)(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:tyd7wEzszn0+5OKgVJ+q1F3uv/sG5Iy95Qac5Wd2j?= =?us-ascii?Q?SpihM0fZnDp0tB/mAZQUaF8lp5AqZI8ovblMObEU76BY896swrg9v1gDEI1X?= =?us-ascii?Q?4nO1uQafEXjl7IAXDhdnpoe5pRpZZe4ueSoGCTHyxc01/Pi/12m4gj/amZSa?= =?us-ascii?Q?ERM7VMK5sqxyy0sIMgtL2a6EUnBo7vstcESCFHl80BGtXsXPMafx72udPTYu?= =?us-ascii?Q?K0UxsZszdEeK/6Wx/bxr7ogVsZAjjiqU6Gcv0cSVJc9VmCrxQd7Y8CMxh+Xm?= =?us-ascii?Q?+Y798tgsUazUa95xlCr2JbSs8S7LA77qbczG60jKkV4ZugaQqJhMc0qx8ULF?= =?us-ascii?Q?6zoMEH6stTxwWoGnqnyz4uTFzNtlovTT1ax+YSKvJMcq7Kmdd90/O/F1pzoo?= =?us-ascii?Q?tcb6jSAma0udR1ru5m8cfToC8U5G0afJfOk5CaDwmhSHv+NVS4WTnMrvuj6o?= =?us-ascii?Q?c5N4avw9xeq2qy/MwfqbrwMwLi2MLTlCEvpNpklFCf9VJuAn0hRutKplJPyq?= =?us-ascii?Q?jUeK9iJcI+AzaPGKJpVI5w5bbBz3hdFO4RTIQeSymEv9D+s1Z+pdrXu1iFIp?= =?us-ascii?Q?4oranbQCAwPtyD5Lp/aCHR1drKjuz0pNl2Sq9suQznrovNjdpmFA3Islfv3g?= =?us-ascii?Q?UwyXcFaONlfo9V3GR3i+NisEBp3ejtDhjwkdT1pZ15uaz5nbIUej1X6U1YY8?= =?us-ascii?Q?C3/6q6Hm/+WUAzd8aw8qO3pKUGnzPv799RkHoHOKANF4VTKP9D7av6N7Ktxy?= =?us-ascii?Q?zSR1WM6OAAztzkxhEZDsnvWb25wvqIwVY1sx+IWrjluUvnewyNt6XCtDsvwt?= =?us-ascii?Q?uLkbjJG673g6ws097935Wl0NMVsTLjdWI564avpdpN6+gmTWR9BtSpAf3l/M?= =?us-ascii?Q?CtFygcVqbtgtKZ1/hhsBZb1JboQMyth92/rzhpU9s4hIWivJJkKWSPRmd6Nj?= =?us-ascii?Q?dqc0S3Swn2FdmNT1vsJ6fWfMcaTFXPALZdbFUCMLVfpAQ0mGlRV41YVtbrqh?= =?us-ascii?Q?2PWfrUfAemV6RzLCY67nqrvf2/J7Cy90RBCSYIJifp1FfFozp6fB5A3ClrY4?= =?us-ascii?Q?VJtq0K1UsnbHVjYgxWy1Fa7LBUelfYz2ubjhVaemPf9B48bk/Iy6L0r90RVY?= =?us-ascii?Q?dTypWOo5ZVDbOvtfpP7x3FrJn910eypT6fEL/vwIU840Fv+ivFkMw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;6:wwaUac5pFiknbUmXnF7sG+mhyZcfN8h94l5afRX3nJOgiPDHjDBIX+Qe3sA61RIYcVNLc2lMRwHjVjC2GnqWYDoLmihZuJ/7K6FgBBagtbcim3kmG/7KG0ZbIgz+tpFcmNIP13wtqjb8qrpKB1mu8nMTpXsr+891SCMFMd2rpyCR7qNellePdZ8omVXd543QSxsVTVeT0QbCW0FI1qrc1vyaYDyitsryLftg5x0RjFBYJ0mmgXocoXvBihtZunIZURg+N0UHn+k7fL0EignYN5eXLkgPPy17E8b/xsZrtR1ZhnfY1FaOWleZC/4+rDIaUZrOSLrnkthpKWtEiy4BnbSiVcnFRxFUF0DxVrw8KH4UiD9Jkr0ezi9A2tkutcIOieRluoIPfUgfSDFNWG51mdiWKg8MU+8xUayLl3dBZwuxR70yPZhzN9F/cB2lNAuQtoGmHKAWbVfvF55DXGgb/EhYN6rM35+n7aSJkVf9zcIX/y9Xs753V+7GXbmQWI55N+KagwRKvkycpKnwTuDeNQ==;5:PHkOx5P8S3osJYCbwXNBNVq38spxgqCYVjs7Lp+OsS3QTvb06iyUoFBH4aRXQVOpvhNtUmE14UhQ6f7J+7g8pp3YrIIgwPNlbtgyKxdZgsV1Cp7odpekLAd/NYBWHLYxStmCAYZ2oOClpmWhjYHojA==;24:TjhYhiFtdmWtuPutE6Xl16R/GWkjS14yeNFKomCJmcs5aH5tpyOPR8ocQE/IOwQGijwPymaHNWi9UYId6X7LLN63kpGbGUCwHWAW/rmopKU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO2PR07MB2504;7:ZoPxFQe2b1siqt1ZGg0RxtG/Be86tzwJDsyN3yYH1hxu2cCCKHmpW4HxmqqtmcofTFXuZvUZucQ9207HkfgkNvFNG5CfEXdGIXXpjxkkByOfYCZhJlBBGkeTHpKwbHWgaKDsb0p0zamgh3GFhNf0ywWDil8Q6to29GgzJTWUPvbvSFmYskNKqhppPD01MK2wyj+zQGmQq8sWZdBPm3OpT6LS+hjKSc161em5G9e7nvltLWk2SFJFDj0P+OpRTIBR2Dls1Hi7kN9HQlErzGNnQotWVw+T4e3VoAhCkDgX2wnNZCGqLpMyQ10jar9fXZIMF0YBTRCtjkVy1yMd4FlnAQ== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2017 12:54:55.9593 (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: Linu Cherian Cavium ThunderX2 SMMU implementation doesn't support page 1 register space and PAGE0_REGS_ONLY option will be 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. Signed-off-by: Linu Cherian Signed-off-by: Geetha Sowjanya --- drivers/iommu/arm-smmu-v3.c | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 380969a..107b4a6 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -176,15 +176,15 @@ #define ARM_SMMU_CMDQ_CONS 0x9c #define ARM_SMMU_EVTQ_BASE 0xa0 -#define ARM_SMMU_EVTQ_PROD 0x100a8 -#define ARM_SMMU_EVTQ_CONS 0x100ac +#define ARM_SMMU_EVTQ_PROD(smmu) (page1_offset_adjust(0x100a8, smmu)) +#define ARM_SMMU_EVTQ_CONS(smmu) (page1_offset_adjust(0x100ac, smmu)) #define ARM_SMMU_EVTQ_IRQ_CFG0 0xb0 #define ARM_SMMU_EVTQ_IRQ_CFG1 0xb8 #define ARM_SMMU_EVTQ_IRQ_CFG2 0xbc #define ARM_SMMU_PRIQ_BASE 0xc0 -#define ARM_SMMU_PRIQ_PROD 0x100c8 -#define ARM_SMMU_PRIQ_CONS 0x100cc +#define ARM_SMMU_PRIQ_PROD(smmu) (page1_offset_adjust(0x100c8, smmu)) +#define ARM_SMMU_PRIQ_CONS(smmu) (page1_offset_adjust(0x100cc, smmu)) #define ARM_SMMU_PRIQ_IRQ_CFG0 0xd0 #define ARM_SMMU_PRIQ_IRQ_CFG1 0xd8 #define ARM_SMMU_PRIQ_IRQ_CFG2 0xdc @@ -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 unsigned long page1_offset_adjust( + unsigned long off, struct arm_smmu_device *smmu) +{ + if (!ARM_SMMU_PAGE0_REGS_ONLY(smmu)) + return off; + else + return (off - SZ_64K); +} + static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom) { return container_of(dom, struct arm_smmu_domain, domain); @@ -1986,8 +2000,10 @@ static int arm_smmu_init_queues(struct arm_smmu_device *smmu) return ret; /* evtq */ - ret = arm_smmu_init_one_queue(smmu, &smmu->evtq.q, ARM_SMMU_EVTQ_PROD, - ARM_SMMU_EVTQ_CONS, EVTQ_ENT_DWORDS); + ret = arm_smmu_init_one_queue(smmu, &smmu->evtq.q, + ARM_SMMU_EVTQ_PROD(smmu), + ARM_SMMU_EVTQ_CONS(smmu), + EVTQ_ENT_DWORDS); if (ret) return ret; @@ -1995,8 +2011,10 @@ static int arm_smmu_init_queues(struct arm_smmu_device *smmu) if (!(smmu->features & ARM_SMMU_FEAT_PRI)) return 0; - return arm_smmu_init_one_queue(smmu, &smmu->priq.q, ARM_SMMU_PRIQ_PROD, - ARM_SMMU_PRIQ_CONS, PRIQ_ENT_DWORDS); + return arm_smmu_init_one_queue(smmu, &smmu->priq.q, + ARM_SMMU_PRIQ_PROD(smmu), + ARM_SMMU_PRIQ_CONS(smmu), + PRIQ_ENT_DWORDS); } static int arm_smmu_init_l1_strtab(struct arm_smmu_device *smmu) @@ -2363,8 +2381,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, smmu->base + + ARM_SMMU_EVTQ_PROD(smmu)); + writel_relaxed(smmu->evtq.q.cons, smmu->base + + ARM_SMMU_EVTQ_CONS(smmu)); enables |= CR0_EVTQEN; ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, @@ -2379,9 +2399,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); + smmu->base + ARM_SMMU_PRIQ_PROD(smmu)); writel_relaxed(smmu->priq.q.cons, - smmu->base + ARM_SMMU_PRIQ_CONS); + smmu->base + ARM_SMMU_PRIQ_CONS(smmu)); enables |= CR0_PRIQEN; ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, -- 1.8.3.1