From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753705AbdEHJaK (ORCPT ); Mon, 8 May 2017 05:30:10 -0400 Received: from mail-co1nam03on0067.outbound.protection.outlook.com ([104.47.40.67]:30240 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751373AbdEHJaI (ORCPT ); Mon, 8 May 2017 05:30:08 -0400 Authentication-Results: cavium.com; dkim=none (message not signed) header.d=none;cavium.com; dmarc=none action=none header.from=cavium.com; Date: Mon, 8 May 2017 11:29:52 +0200 From: Robert Richter To: Linu Cherian Cc: Robert Richter , Geetha sowjanya , 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, jcm@redhat.com, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, sgoutham@cavium.com, linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org, geethasowjanya.akula@gmail.com, Charles.Garcia-Tobin@arm.com, Geetha Sowjanya Subject: Re: [PATCH v3 1/7] iommu/arm-smmu-v3: Introduce SMMU option PAGE0_REGS_ONLY for ThunderX2 errata #74 Message-ID: <20170508092952.GF16981@rric.localdomain> References: <1493986091-30521-1-git-send-email-gakula@caviumnetworks.com> <1493986091-30521-2-git-send-email-gakula@caviumnetworks.com> <20170505230328.GN4906@rric.localdomain> <20170508091739.GA26003@virtx40> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170508091739.GA26003@virtx40> User-Agent: Mutt/1.5.23 (2014-03-12) X-Originating-IP: [92.224.62.136] X-ClientProxiedBy: VI1PR07CA0109.eurprd07.prod.outlook.com (10.165.229.163) To CY1PR07MB2346.namprd07.prod.outlook.com (10.166.194.145) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cab6f320-cf8a-4bd5-ab55-08d495f4cff2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:CY1PR07MB2346; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2346;3:dZUbRxFxoPZxE4i4yxw0k396NTfFBZQ+iVtg387OAU1v2cfE6uN0Z7NcaVXy5d0bRwiWwJY+KU6LEMKsTWay3+r7QlNo4MjvKKjermHHDHM+KpT9Iz8bTSc2hJ5bnGfHI7MkJcWdlU+RqAJPbkK0RtZyleAlyUKbpubsBQ7iy6EVQJwnDoVXRA/OX0geTtiXlwwO4e9HKYHOv9tXtOq2t7n7blUZ0dUAsViH8g9i8hP+A3r5skvebitrH3Hvpgi+O9RZFcKfxCNaS98f1g0E4XYHrrcgQqZ1ZJvu3GaQGMsmCYrJ0NrLY4YTMsibC38WD3OmyrDmlxUTLmsKSmWA7Q==;25:nDBvVU7gfbCFgab6w1HYGKYOJd4kIWby64BVm+g07yCcdGwbIDCkvXLnX1BK9aeSisFUdrydsNqQdnEs53z0XExHkO7PCJnUK3X+nYz8vuTMMOqlBgHHrug62ZOaQ0Blu943bIgoq3N8kfcT5tVhQ4nZUj4RmXz4F+tbXj4jBBkI87HrQkfgfsGdACj2lJR669F/lpEeIN7zh4N8ocstIaMxq7F+ItEeooLBQryxCiddlMJTKSNuPI9mDFPu3/SuWDdf8T+bHamVCmH2gWEIgD+YJP+gbdZ65csKO0bMWs6QcexbNBSwCvuuTYvzwu1uH7yY+baB6BJ3tbudxLRuLC+iN+FZ0GhtObOHwIjSEdw2q6DAMp5ipZhOR6WqrHFktZzwzRUxFVtq2QKvwts7HOJqMTjlwKqGb2ahaiSl/5mJWZcNHVWhiqBaynBWHeKOdenYo+6YiwDIcLAlpWb+PtF455g/+wPSxES8Rd4fqCY= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2346;31:/w5TW2NXkdHjkTU++56CkUTv6qtFgCd3j7uqzjk6PCxnt6UFwDpRW6mZ/NOCClgHcatN3HwDbKJ/e6YI4gB4bocXE3fo8YHEnab1QDRa/2m85chNj0Z2abf99DYLv03BY9QeXsZcX+rpdhsWDx+4pr0RoA92xj6YcJIAD+jfoi7acuN014wOFeq9WOIah+KmTKmk9eC/+p8t5HMJjbAi3Z6oQdmtDYLK4/OLbvCbLqMil4IV3a80eNDhsstqcsg9;20:+/vSbS0kNHJZKwNxxQ53+xm5E/RIahztqrgOIgbHp92iSh9bgZjQPTrDMGq0JKuXxgehD6bJK5qLqMn9splhaO7FnvLf1ylHwDatDyMJdJtImHio/6Pfg8nrT4wsGd3RWAe6SgEn81Tg7U/uIvMgSKA7Qohj3ga95mEXKLkxhBKthZJgPozNvnfbcQfXbcOv5f6KfOy5Shi+RJwGjTfskhnGAJE3dF0J939e9yF2sVTSTcvvfc18uCHGTmX/AZj9ngs/PIrB5fhsMziXQUC4qDcXT5R0BSQLSGeeUhYt/y2VUy7zHj0HYnOkreQHErCpBcQyc40Gi3n08edyblOfAvF9S0QAre+XXJ/bqXJtHusLJ9iGqXsqvN2O2QWrPGT1xaJricwvXvh+ZVPMTmlu/KmnSv8PygFif0tWTjRV8fdvAGTU7oSmS4lSrhS7SiCowaUUl8BlkHwSC/TVCwgcnJwrpb5FZW3Yi2KrtDDuNuWs8tap51kIX0wdWWd4b8z4 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)(93001095)(10201501046)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123558100)(20161123562025)(20161123560025)(20161123555025)(6072148);SRVR:CY1PR07MB2346;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2346; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2346;4:lLXPuAnCmaozpO3S4vM/xz14Ms5XGkXbjR9YFPcoRzexZzA90VCON7ebpO4onDI1X0k8RPs5cTthxz6JNoTc4tRr/JAkMgZRUdMNp0NovXuX3VISGSWM7SCRHLHmOLw9w1oeeJkHKF6lm3PC1508eyt7M/dTud1YNzcVWpU5IZDusk6xiJU7rVqLWaOC0Iz0Eroj13U4DtXdrLpbgOhQIXJ+12pudcBhq/grX1wSZ5/co9IIvfRubfZodMknYuiXdVDk/mxQjARtIuF5HrMEzyY9gsznBOeJReTrfjjifSDj/oLceYdXl8oAOdc1UdKHz42vvUA8InsIZtGgiFyIQ2s9UdN1xTtCRg3Hz7h7277MwiA5z2c82XLSBjEwP3y5+k1Z1VtW3Rjew4jVDv43PcOOHU2Zb54oz5DJUMMVW4D4yBM0k3kacE9XI7MkP3IbzioRZcanPLgKC3pdiqCwo+Q2Rzvkq7eCgSBthiDY9PxCrgWjaDRhZOzRe4aHO3MkNp9B4eR2HsEPEJrU8MxrEwr+YKe+V3UnHyO5n03gyQo1UQjS9qL94L0p8UcE0qgDZLenOyOEcYUVBD39446Dy3+/YF9SDJuijouk9IUUAkRF1MeuHMSXerdac4v4O5JuneqkH5l3XgjgAb97uT6ipJpOvxVwijkgwVlrCoOj5IrhYQ25yF62/bb2OirGEGuM2dOSL0kAI5E/3PMjwu4pzLETP5PIOTmOWDDom6tVv46n1OOAmLQKT24GbupF6qyhHSP5Q9HBmtdIilMoGWPSWQR4/oIbPYSbpfnMR+ZOMwg= X-Forefront-PRVS: 0301360BF5 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39450400003)(39410400002)(39840400002)(39850400002)(39400400002)(24454002)(6116002)(3846002)(7736002)(81166006)(8676002)(305945005)(229853002)(6506006)(50466002)(54356999)(4326008)(83506001)(50986999)(93886004)(1076002)(25786009)(23726003)(53546009)(230783001)(189998001)(478600001)(6246003)(2906002)(2950100002)(110136004)(42186005)(55016002)(6862004)(76176999)(7416002)(4001350100001)(86362001)(9686003)(33656002)(66066001)(5660300001)(47776003)(6666003)(53936002)(6636002)(107886003)(38730400002)(18370500001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR07MB2346;H:rric.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR07MB2346;23:uT30sPSfEpnSOuTpyonvw+pbuxAfp9k6S1qpFMTfh?= =?us-ascii?Q?gL1qrNSinT8Qd+Wwjkc0BoHNsxTFsFMGMlTGTI3wy2LjEdWj3IzrcfSV3LKj?= =?us-ascii?Q?MZrBhEKNukD10vWRmSbmoU5RxkLOrdIommMnFS6P+/08iz2LGwt9HeUm6Cl0?= =?us-ascii?Q?m5if0GC8yYg3HNKROQQSW0X3N0CMqQqLI9r4ZpyL8jHteRKb4jezjsIA5XCx?= =?us-ascii?Q?Cf4rVEVTncO8cIPgUX2RYYeBe3wiOAxfiGbFjsL0EvGkHZ4jZnw0O9czBEC/?= =?us-ascii?Q?zN+D1CfzWe7MDdg3PeKFswdq/riXZDDvNgikkgDYFehfnPlTLBTp7PwUOOy2?= =?us-ascii?Q?ZTV7ndw1Ongq7uwfx71cYFPX5hta/I5DA7ALI7wrYoTcpsueNWiCzNBARcog?= =?us-ascii?Q?WLslLBcoduxOLcrEw8WC1fOzhxJ2lfsKVGEw5WCYJbUruUdM207Eq5hzwtuz?= =?us-ascii?Q?g9R+ko6gM7lgjmogTkTPWH/9CymNXY3HfchMqEl7Iys9/xptnLxPs5tvSWoZ?= =?us-ascii?Q?bCCOcn6jUTcqYFZWZp3bqPRoq4GwlntSEFHs0CBdI10dl3ekN/SJplvoT7QW?= =?us-ascii?Q?zQVLgymctDyV54peCbR6EtlqtFd84UESEXNRPkO0ka0FXjFjgbeMO0Pah6VB?= =?us-ascii?Q?0HPbooZEYW848Wjmli+A1mM63ymA0nUn+msof2QrmTLbSah0x1De6YiF7eml?= =?us-ascii?Q?0NMOLpKlwixoaFJO1j6vfGqqrPrMv/sDdP2mjaIPq8GVTIt0SLPGeLdwsxGX?= =?us-ascii?Q?sSad+YyLNPOCS3FKbsm9vDc3JydOTDwssTEYIpEDKsG3arIrmdGS39ENGQWr?= =?us-ascii?Q?qN5wDUer8WNijp2oksC0DIflPYpmZOoa51kVIobDGbt1hMtXLaQ78olxmGaA?= =?us-ascii?Q?Tm8qFxVhMkHTKE7S0wFkQlRkVwyue+VfjUARawDH/AvuAFofahxt7ZNTS9nv?= =?us-ascii?Q?GzMhQY+vvF9sWI6VFplSkQJ4Wn0rEoqY6xa16E+i57rP/BPqF3xjLNhhuvFv?= =?us-ascii?Q?5vg5dOtZVXLTGTJkRgoZj9bBFDzlWqkJi9TR64TWEfTQz23rsEJWmoJ6G/Ok?= =?us-ascii?Q?3ynVcp5pfjyEBriwSqmn2wl95d/MYShqusBANLX+q7fJrX7nLxgqWCQzfujb?= =?us-ascii?Q?nhdileGVLHpDlxVHu+2N4IMB9WRmDC4rL/RHAUqYKDg73OPJGGHa0p4SNJpK?= =?us-ascii?Q?/pmaw78EPl6Yi67CorBbbmAdZflAKwaOPoygVL6OSpxXyGiZFixz/gK0Mvwk?= =?us-ascii?Q?QAgy6IXYsbnPdX+6He95p4sA5pYPy+EhlbuaHNq?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2346;6:LLuTSAeF7HSWu9nWf6erqRBmM5AfGisXccWFP8gDNxTg26Q8Y1A9tY/7wJN0gaXKPGMOiAJ6VnBYx6934kMN5/mQwGmR6mib19wS7PmNwiz/iajxOhK0Cgimy5+qMzJz9GP0PgYeYD7j5hWeAkF6WvyJhFRPZq58FgEsBUC0KLxfGmj4A42cwA0uAfomz37cpObK4W2EXI36yZ7YEGNBqRU7mU04aDjsztahl2O+yMZdkuj2eEUY0Bt2sHlDjsC3kbw1DlaLpHY2OFZUBMcMzcihOZyuSVplwY2GKilkMQKlllWcjNPFUVrad+m14AxDmHQGY2dMfLCI89GLFB6S2YmKxKD5pbgR0cfzRX6vgLHk8OT843HQPqX70kiZa9VXuktMuvTjZn4pdBtBFJFRUsPuE7Nw+CeZlxrnAN1VRHQ1jIzNUtqAx6/+sE/Q1Yxi1UyTXjP4Pe6HY/AIjrxkDjAt861lRArDTglMdLR7bEyi5CzU+iadPslqN8NWQx8by96RhXrbnVEJm4uwS/eUpg==;5:z3Nl17p4zh3JHCR6atLUxKh06lBRPgWv6WrGi1u82n3/gvokJSVAT7D9VqyYH4SvrXc+qgrQr7quhtSZHZfT3gyon6bwIAdKxrzHHoXcOYnwuBFSgVK0VK2kbwGOTfvYj8EaXl6o6wVGEPHyDqBJoQ==;24:bfyvjPNA2I02LNfARisDqd47NJnzfOUTZOfcZkMBwXtzz6AIcBqupUUCbELhiGwaT6L3LuWHesfChOf+9/a+2DEgcMEXjiovfDva4Fy2UD0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2346;7:q3YnQf9Ms6HgJl8/KoDtktbTJ4AWUKAY1uDGTfHZ5msUnbZsmB6+vD6k6y9ZJ/kiookmD9AGVyr50FEVOCYistCRSmfayaW7dHCQNk+A3VV1TLJ9n3i2QIcUAUbM8V/OH983rWraQYnFcqvAeCyL2pMkoitgPm6D2pTE9ja5GUlNXUCwfRAqQm+n+2la6x5q/7oZJ4zP2Rza5aTskRNdD6w6WdKW/T0CTHSMLaAF7pJqdGwmwXsZr9vCZ1XfWc2F+KGfKvqsSK7Lav1mZaBqnXsRtfceF7EFm8CBqNVGEdvIUtTFmGlBXI2kuQ9tNGe6ELBETtU36pj3S4+QV4MNRw== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 May 2017 09:30:02.1615 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2346 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08.05.17 14:47:39, Linu Cherian wrote: > Have pasted here the relevant changes for doing fixups on smmu base instead > of offset to get feedback. To me this looks better than the ARM_SMMU_EVTQ_*() macros. It still needs some more shaping (e.g. maybe remove page1_base var and call arm_smmu_page1_base() directly). But let's see what others say first. Thanks, -Robert > > This actually results in more lines of changes. If you think the below > approach is still better, will post a V4 of this series with this change. > > > +static inline unsigned long arm_smmu_page1_base( > + struct arm_smmu_device *smmu) > +{ > + if (ARM_SMMU_PAGE0_REGS_ONLY(smmu)) > + return smmu->base; > + else > + return smmu->base + SZ_64K; > +} > + > > @@ -1948,8 +1962,8 @@ static void arm_smmu_put_resv_regions(struct device *dev, > /* Probing and initialisation functions */ > static int arm_smmu_init_one_queue(struct arm_smmu_device *smmu, > struct arm_smmu_queue *q, > - unsigned long prod_off, > - unsigned long cons_off, > + unsigned long prod_addr, > + unsigned long cons_addr, > size_t dwords) > { > size_t qsz = ((1 << q->max_n_shift) * dwords) << 3; > @@ -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 = prod_addr; > + q->cons_reg = cons_addr; > q->ent_dwords = dwords; > > q->q_base = Q_BASE_RWA; > @@ -1977,17 +1991,25 @@ static int arm_smmu_init_one_queue(struct arm_smmu_device *smmu, > static int arm_smmu_init_queues(struct arm_smmu_device *smmu) > { > int ret; > + unsigned long page1_base, page0_base; > + > + page0_base = smmu->base; > + page1_base = arm_smmu_page1_base(smmu); > > /* cmdq */ > spin_lock_init(&smmu->cmdq.lock); > - ret = arm_smmu_init_one_queue(smmu, &smmu->cmdq.q, ARM_SMMU_CMDQ_PROD, > - ARM_SMMU_CMDQ_CONS, CMDQ_ENT_DWORDS); > + ret = arm_smmu_init_one_queue(smmu, &smmu->cmdq.q, > + page0_base + ARM_SMMU_CMDQ_PROD, > + page0_base + ARM_SMMU_CMDQ_CONS, > + CMDQ_ENT_DWORDS); > if (ret) > 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, > + page1_base + ARM_SMMU_EVTQ_PROD, > + page1_base + ARM_SMMU_EVTQ_CONS, > + EVTQ_ENT_DWORDS); > if (ret) > return ret; > > @@ -1995,8 +2017,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, > + page1_base + ARM_SMMU_PRIQ_PROD, > + page1_base + ARM_SMMU_PRIQ_CONS, > + PRIQ_ENT_DWORDS); > } > > > > @@ -2301,8 +2349,11 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) > { > int ret; > u32 reg, enables; > + unsigned long page1_base; > struct arm_smmu_cmdq_ent cmd; > > + page1_base = arm_smmu_page1_base(smmu); > + > /* Clear CR0 and sync (disables SMMU and queue processing) */ > reg = readl_relaxed(smmu->base + ARM_SMMU_CR0); > if (reg & CR0_SMMUEN) > @@ -2363,8 +2414,8 @@ 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, page1_base + ARM_SMMU_EVTQ_PROD); > + writel_relaxed(smmu->evtq.q.cons, page1_base + ARM_SMMU_EVTQ_CONS); > > enables |= CR0_EVTQEN; > ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, > @@ -2379,9 +2430,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_qBASE); > writel_relaxed(smmu->priq.q.prod, > - smmu->base + ARM_SMMU_PRIQ_PROD); > + page1_base + ARM_SMMU_PRIQ_PROD); > writel_relaxed(smmu->priq.q.cons, > - smmu->base + ARM_SMMU_PRIQ_CONS); > + page1_base + ARM_SMMU_PRIQ_CONS); > > enables |= CR0_PRIQEN; > ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, > > > > Thanks. > -- > Linu cherian