Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp708101pxb; Tue, 3 Nov 2020 10:17:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJxNAd2UIX4klUJgLl6N06UbywNt8PciBogLi9L5PTVWGU5mYXOyiyyGqYTVMezkB2YFRdkF X-Received: by 2002:a17:906:6d89:: with SMTP id h9mr20505421ejt.152.1604427454080; Tue, 03 Nov 2020 10:17:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604427454; cv=none; d=google.com; s=arc-20160816; b=ef4gvJzv0cCauyKoxVT3nIa76f2a9JD21fJgW/strU0Im04bdtLp5t6EYJAqmOQ2Lr 02dsjwlKp+WvQJdSuCw2TgWTlxCpMipUd7vdJcAj52sL90k/HzJeyrFaSTteKLfvTD2K 68FngZgn66ZdpL1taUL0i166PzxPoS6DQMYgIuPRkQ38bfDhKit54m1M6Htyi1DSSjiC FD71W4Zc9V83CQaoSOOGI+7OQZrVjqbIZ2ALHXDzpIL6V3C8gh5nhm5f8bNEswCAIo2d kBYqlkgTOgy5DKbcbseWfjQj62mTEmkpyRuJS0Ub0EzVU8UnZi4oBd4hGS9DFZE5kmFs S9gQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=gR/SlmlCtWaTEuhJ75HH1ougxe6tbAau9fplmY1Gd1c=; b=xGWpux+8gRwa7uwEqWCsQEopP5S9VC57DxF3NrrVcR9o1Qx4vgn7Obqjv2bb91a9eD hujLGrO+EBSlRyJzqvqA9zkVpzqvzoGi1L+m74XfTLW0DoAy7U8Ry+hpVZHyWn7AZV0i pJRK61miZZyW0mpNqGzWK/7WQJUcm3eq0HNyWaJg0zwFC2LlUzK4PJr8uFyVR25yp8Pe /EYas0Sp3M3J79ZLn/uT/FodkpiZyQdGwqNoeOVlNq4KL3eVYscLqaR/ZlOJIE+12yZt KsGXTma1jIdKHQc9nevjasS4BVBJgXYRBJ2jjWZfkV/w9Ee9nYIv2C/dekysdbRYCLBS c6og== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IDtCg9rs; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x3si9969909eds.522.2020.11.03.10.17.10; Tue, 03 Nov 2020 10:17:34 -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; dkim=pass header.i=@linaro.org header.s=google header.b=IDtCg9rs; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729016AbgKCSNE (ORCPT + 99 others); Tue, 3 Nov 2020 13:13:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54248 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725892AbgKCSNE (ORCPT ); Tue, 3 Nov 2020 13:13:04 -0500 Received: from mail-oi1-x244.google.com (mail-oi1-x244.google.com [IPv6:2607:f8b0:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50200C0613D1 for ; Tue, 3 Nov 2020 10:13:04 -0800 (PST) Received: by mail-oi1-x244.google.com with SMTP id s21so19348057oij.0 for ; Tue, 03 Nov 2020 10:13:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=gR/SlmlCtWaTEuhJ75HH1ougxe6tbAau9fplmY1Gd1c=; b=IDtCg9rskaSN2GRu9GYPUrlAigWfkkKXdz55Esi6x09u3Nz0r64d4Fw9IsXDmga/XN GgDQfpQzJkFyCDSKyUpA0GAoKY1SEr5B7jIxLFrvjg3531Qx9jb49Wx7l2KZDPC5qG4X joRv5XuwsCZbv1u4xmQ6yLpmTNrCZHtzMugF+dmyIIUPMvlbuqryIz99kidhenUsYvxg +DbU2TIV9EXBwbtKsGBcSC0RboDX+NRK/vZNOc5D3FiPiUjb0JG2Fq0G/ypVWi9IUE2w 5d7iOfhaaH6qyc7Aw8JaLq5Rvgvn8/LxsH2VkBjKvwVtud/VXvr4zr5LefWLmUAw8S4M LR5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=gR/SlmlCtWaTEuhJ75HH1ougxe6tbAau9fplmY1Gd1c=; b=nLpP7CC4OQEEhH9EtWNwfIj47EmtBsBjoIQ893Wp9FdVNyz+lmNCrtMQD9Bybr3GFF sisyPhlIwyGX8dqJUwQVbjnwt9vQpBekKzPoFLWtaWrqfyMsGN5tDLbChFdY71+Kp9kR e2R9eSYRNFHZaTzlTAwTyOGhcHBLvNv+3shSoDnA7gr25gy91v7mOS6Ik0dalOIkNUG9 hMwayqzDDe76wIYFpESI3DYVXeMNU/rsQzBBHe2777XMxK8VVWWbwuxsbgPGjpNb5wl3 sCCQI3Ek1bZa3tvIFr2IidkkcUS8WOSyykSuq6n6jnzjtI+pIVXUgZYn/p3iQ2bzaX9a 3mmA== X-Gm-Message-State: AOAM5327gUjmAqSOm5z6jipcV7ucdWjDlz3JmSPH71P9shgE7Kh2QXgT uCeMrYA7J+6l46y8WMAcXD5M5g== X-Received: by 2002:aca:3387:: with SMTP id z129mr221653oiz.123.1604427183670; Tue, 03 Nov 2020 10:13:03 -0800 (PST) Received: from builder.lan (104-57-184-186.lightspeed.austtx.sbcglobal.net. [104.57.184.186]) by smtp.gmail.com with ESMTPSA id e47sm2643616ote.50.2020.11.03.10.13.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Nov 2020 10:13:03 -0800 (PST) Date: Tue, 3 Nov 2020 12:13:01 -0600 From: Bjorn Andersson To: Robin Murphy Cc: Jordan Crouse , linux-arm-msm@vger.kernel.org, iommu@lists.linux-foundation.org, Will Deacon , Rob Clark , 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 Subject: Re: [PATCH v18 2/4] iommu/arm-smmu: Add a way for implementations to influence SCTLR Message-ID: <20201103181301.GR3151@builder.lan> References: <20201102171416.654337-1-jcrouse@codeaurora.org> <20201102171416.654337-3-jcrouse@codeaurora.org> <0a00c162-ad77-46b7-85ad-e11229b57a3d@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <0a00c162-ad77-46b7-85ad-e11229b57a3d@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon 02 Nov 12:18 CST 2020, Robin Murphy wrote: > 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? > I like it. Regards, Bjorn > 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; > > }; > >