Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp3496028pxx; Mon, 2 Nov 2020 10:21:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJyAUJtW9UYvrmk6BKAr9L5kU6eKcYcee1DPkNnFfl+6RQumsNzgkFZ5VVQ8S3lvIeK07fIH X-Received: by 2002:a17:906:b7cc:: with SMTP id fy12mr11740227ejb.458.1604341298556; Mon, 02 Nov 2020 10:21:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604341298; cv=none; d=google.com; s=arc-20160816; b=NrHRxWWIXOPGuAaCyWNVd//jhTjZDH4xYE7UovG+hByi/xw0Q3d7xZYyrvN5xiXdQw JIGlq8TyXt45/pzMlESWC5k6CF0ppBp8h7EUGU72QS9aHNulyB8RhtDnsSMMUgD8D/wF Q3Peylp5ayxbBmHrskWnqUpPBDtNvbo9ZpaBqnMj08w07qZGRKPzlRSYw6kaRlX3nUTR crwgEFzh0rRqgZ582MAacO3NObfiBjhtNMDO9fWH0kwIo/hkVdHe7A7iTrF3jkIgqE08 azO0BR9ZTDTPqE3x7MO4HlGI+e4GjOuLRVuf1rzdX/0lHTNH4jCy/C2GjJORVX3i1dgE qGYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=J08DM6CoqeKWK12dFm4fyma85QroJ6HCV6Q+1fz68rA=; b=TfZz9qd83EZr+xOurXKABT+lkp1JOQeErSQkOMfyHrSEK9WusoYctWEdKNqflbYkYF E6sOFn7LQ4ehCAA+/Xdd2NxX9Zgh1ggOQgApPKhyVMNL+jygogyaHqNRiUIX787BdJiM uj44S7CqBjSrlVB8brhyQCnq5vfMfTxXPdChs1PcXrSmXNRWRybRu8RX7Lp0JLWGnMAl hZM4VPtaWkQQ1MI1g+QWexfi6rANS/nfMj0EI/M4QcmtVctMTGUPvM770crfCNZo13+K pmptuIkmuyTDtmpgu4tMaEuthdr0NEGEFFnIdgIxgek+WccKqFvdE9NdutuwP2p9Nueo WaTw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ga41si11422752ejc.620.2020.11.02.10.21.15; Mon, 02 Nov 2020 10:21:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726137AbgKBSTF (ORCPT + 99 others); Mon, 2 Nov 2020 13:19:05 -0500 Received: from foss.arm.com ([217.140.110.172]:35904 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725833AbgKBSTC (ORCPT ); Mon, 2 Nov 2020 13:19:02 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5E14B139F; Mon, 2 Nov 2020 10:19:02 -0800 (PST) Received: from [10.57.54.223] (unknown [10.57.54.223]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DF6BA3F719; Mon, 2 Nov 2020 10:18:46 -0800 (PST) Subject: Re: [PATCH v18 2/4] iommu/arm-smmu: Add a way for implementations to influence SCTLR To: Jordan Crouse , linux-arm-msm@vger.kernel.org Cc: iommu@lists.linux-foundation.org, Will Deacon , Rob Clark , Bjorn Andersson , Greg Kroah-Hartman , Joerg Roedel , Krishna Reddy , Sai Prakash Ranjan , Stephen Boyd , Thierry Reding , Vivek Gautam , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20201102171416.654337-1-jcrouse@codeaurora.org> <20201102171416.654337-3-jcrouse@codeaurora.org> From: Robin Murphy Message-ID: <0a00c162-ad77-46b7-85ad-e11229b57a3d@arm.com> Date: Mon, 2 Nov 2020 18:18:45 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <20201102171416.654337-3-jcrouse@codeaurora.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020-11-02 17:14, Jordan Crouse wrote: > From: Rob Clark > > For the Adreno GPU's SMMU, we want SCTLR.HUPCF set to ensure that > pending translations are not terminated on iova fault. Otherwise > a terminated CP read could hang the GPU by returning invalid > command-stream data. > > Signed-off-by: Rob Clark > Reviewed-by: Bjorn Andersson > Signed-off-by: Jordan Crouse > --- > > drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 6 ++++++ > drivers/iommu/arm/arm-smmu/arm-smmu.c | 3 +++ > drivers/iommu/arm/arm-smmu/arm-smmu.h | 3 +++ > 3 files changed, 12 insertions(+) > > diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > index 1e942eed2dfc..0663d7d26908 100644 > --- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > +++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > @@ -129,6 +129,12 @@ static int qcom_adreno_smmu_init_context(struct arm_smmu_domain *smmu_domain, > (smmu_domain->cfg.fmt == ARM_SMMU_CTX_FMT_AARCH64)) > pgtbl_cfg->quirks |= IO_PGTABLE_QUIRK_ARM_TTBR1; > > + /* > + * On the GPU device we want to process subsequent transactions after a > + * fault to keep the GPU from hanging > + */ > + smmu_domain->cfg.sctlr_set |= ARM_SMMU_SCTLR_HUPCF; > + > /* > * Initialize private interface with GPU: > */ > diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c > index dad7fa86fbd4..1f06ab219819 100644 > --- a/drivers/iommu/arm/arm-smmu/arm-smmu.c > +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c > @@ -617,6 +617,9 @@ void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx) > if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) > reg |= ARM_SMMU_SCTLR_E; > > + reg |= cfg->sctlr_set; > + reg &= ~cfg->sctlr_clr; Since we now have a write_s2cr hook, I'm inclined to think that the consistency of a write_sctlr hook that could similarly apply its own arbitrary tweaks would make sense for this. Does anyone have any strong opinions? Robin. > + > arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_SCTLR, reg); > } > > diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.h b/drivers/iommu/arm/arm-smmu/arm-smmu.h > index 6c5ff9999eae..ddf2ca4c923d 100644 > --- a/drivers/iommu/arm/arm-smmu/arm-smmu.h > +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.h > @@ -144,6 +144,7 @@ enum arm_smmu_cbar_type { > #define ARM_SMMU_CB_SCTLR 0x0 > #define ARM_SMMU_SCTLR_S1_ASIDPNE BIT(12) > #define ARM_SMMU_SCTLR_CFCFG BIT(7) > +#define ARM_SMMU_SCTLR_HUPCF BIT(8) > #define ARM_SMMU_SCTLR_CFIE BIT(6) > #define ARM_SMMU_SCTLR_CFRE BIT(5) > #define ARM_SMMU_SCTLR_E BIT(4) > @@ -341,6 +342,8 @@ struct arm_smmu_cfg { > u16 asid; > u16 vmid; > }; > + u32 sctlr_set; /* extra bits to set in SCTLR */ > + u32 sctlr_clr; /* bits to mask in SCTLR */ > enum arm_smmu_cbar_type cbar; > enum arm_smmu_context_fmt fmt; > }; >