Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1117184ybt; Wed, 8 Jul 2020 22:04:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzt70bIISAmhrrUF0/oOcKRiPfa6UT6brv8UTCvQhyILpZk6VJvmXyXAGFdqS+/B+FIsC9w X-Received: by 2002:a05:6402:234b:: with SMTP id r11mr43073568eda.5.1594271065121; Wed, 08 Jul 2020 22:04:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594271065; cv=none; d=google.com; s=arc-20160816; b=WJ0DrLUxfE3uKMX/dP9giUvGlDcJAwfTQD8dsC/v/6TIC6orDKyHlpPDdynE3vHW3q sx/vnFO35Rh6xF70/V5RVKvDH0hSbH/HcVLgnRWI3RdptHlW8eHc4ibX+aMsZ77DLkv9 HpOQFfDH8BSOL55jJlydEYMVheQbhObwu820P9KzG+i3x3nSk1gs4oO4Rnh/zo3Bls6D Ugbz00l5GR/TEpIkvs5mbDsGg5IvTwrIXweCmHpo2KE7dDQ/R6loKGEVwMDp29036Bg1 SMe1C+Zh5wUdOKRh3hwkWBJtLdUoRJst05f4BBOEErYdYDVBkjIJKUDhVOK9qtxOYfFp t8eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=410aRxR/jUVzarYYA7FRja4VMLxxjmJi5LB1naX7CXw=; b=wg3o7a8eVHLPpWWU0ovFjVOyNxpt3c2E5wtbFL/h+OmFkdnTsQ1vL8ju1gpzMI5kUu D1h0e7C+UixyBz/c25CSWZJPzsRVM9E5mnZJUQDNI9PK8ouDHuEGqIcMqS8Ot7B2ferc k9zcC8WEcNk/hGpsHYuaJ64gyeF+iHPsZWmPmDvELicz9Gveql/HOYIxtxnP3X05OEpZ D/35nHftZnkbcXV/++yqPRg4eB3na6esTrnTt57jv0aC97pXmGvuNDdnA2KwXJaApcP9 m8PcxcnRKc8spB5YMcFVsBHpeOQUlOsw0hTzwmmDteeHJw9TUuvR4rOeBgiEPR9O3aSI ZbOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=pMadG799; 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 j8si1364688edt.383.2020.07.08.22.04.02; Wed, 08 Jul 2020 22:04:25 -0700 (PDT) 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=pMadG799; 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 S1726342AbgGIFBv (ORCPT + 99 others); Thu, 9 Jul 2020 01:01:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43756 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726285AbgGIFBq (ORCPT ); Thu, 9 Jul 2020 01:01:46 -0400 Received: from mail-pl1-x644.google.com (mail-pl1-x644.google.com [IPv6:2607:f8b0:4864:20::644]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A8FAC08C5CE for ; Wed, 8 Jul 2020 22:01:46 -0700 (PDT) Received: by mail-pl1-x644.google.com with SMTP id x8so329788plm.10 for ; Wed, 08 Jul 2020 22:01:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=410aRxR/jUVzarYYA7FRja4VMLxxjmJi5LB1naX7CXw=; b=pMadG799IDnLhFVn72xi9qEswo6WriD7WzmvA0YSRVBHLDFdlJlXUWOhI85zGWE8FF BQpX3w8cQhZAmZfj5SzYtuZ734FjH2WvmZuKI3lZTJVr6CXkYaV7PrTLtqTZkMoa3lmq CxOcLRZwzcJUyfNbB93hH9X/KNrEazeClJ1ZzP8aaS/IUKWoyoiYyriWoQwwQ1Gl52ZT bJ6Cv247hS8zFF0YMuarBnAPXKnxQCnfyxx77xzqpbRxFJk4VeCGkPl+gaqr/Kl6U0XB 62aQwYZwvjXo6u+BMOvoipMHZAafGfKkF15TIOrygpjRcjZIZV67V09shv5RSRulIOLZ QHJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=410aRxR/jUVzarYYA7FRja4VMLxxjmJi5LB1naX7CXw=; b=ZSoOk9tEgvbbxIB01D0E9MxRhmIfPIFVAgNs0+6Kd3sb7w9zWWZxR4rVaIazXhyb2x HjZ2ZgLUm+vOO+q3qO8NNl5jvc2NTF0uEHlTxDsNqZCr3h0kzqUVoNvChQgYqQCImGdt Xnc7l+tUbEEf9JXql70rcyQd3R7N8nFnh9jWrSyvtw8MdenA+YOVosEtTiakzCYjV1aE Y+FyBSYkXPOl2M4phiKT0OZuu6pcQks08MbkFxg5i+D0fc48+T298tu6ufpJbQ058y/k B1CRwLIj5PAYBZq3EEgE8KJrHkXD1pXgotz6MBnWw+R8tCSKl1aEB6oWWl8R+SqRxo/M GtOQ== X-Gm-Message-State: AOAM533x3iYKd6zXxa+Q6J/rTiwQ5Vsi38kx9+qDt5ubv0f0h7pI4EoJ zGU6avMnBKDKZ8VqovIr2KEYRA== X-Received: by 2002:a17:90b:30c4:: with SMTP id hi4mr12329792pjb.166.1594270906127; Wed, 08 Jul 2020 22:01:46 -0700 (PDT) Received: from localhost.localdomain (104-188-17-28.lightspeed.sndgca.sbcglobal.net. [104.188.17.28]) by smtp.gmail.com with ESMTPSA id h15sm999974pjc.14.2020.07.08.22.01.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jul 2020 22:01:45 -0700 (PDT) From: Bjorn Andersson To: Will Deacon , Robin Murphy , Joerg Roedel , Thierry Reding , Laurentiu Tudor Cc: linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Jonathan Marek , linux-arm-msm@vger.kernel.org Subject: [PATCH 4/5] iommu/arm-smmu-qcom: Consstently initialize stream mappings Date: Wed, 8 Jul 2020 22:01:44 -0700 Message-Id: <20200709050145.3520931-5-bjorn.andersson@linaro.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200709050145.3520931-1-bjorn.andersson@linaro.org> References: <20200709050145.3520931-1-bjorn.andersson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Firmware that traps writes to S2CR to translate BYPASS into FAULT also ignores writes of type FAULT. As such booting with "disable_bypass" set will result in all S2CR registers left as configured by the bootloader. This has been seen to result in indeterministic results, as these mappings might linger and reference context banks that Linux is reconfiguring. Use the fact that BYPASS writes result in FAULT type to force all stream mappings to FAULT. Signed-off-by: Bjorn Andersson --- drivers/iommu/arm-smmu-qcom.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c index e8a36054e912..86b1917459a4 100644 --- a/drivers/iommu/arm-smmu-qcom.c +++ b/drivers/iommu/arm-smmu-qcom.c @@ -27,6 +27,7 @@ static int qcom_smmu_cfg_probe(struct arm_smmu_device *smmu) { unsigned int last_s2cr = ARM_SMMU_GR0_S2CR(smmu->num_mapping_groups - 1); u32 reg; + int i; /* * With some firmware writes to S2CR of type FAULT are ignored, and @@ -37,9 +38,24 @@ static int qcom_smmu_cfg_probe(struct arm_smmu_device *smmu) FIELD_PREP(ARM_SMMU_S2CR_CBNDX, 0xff) | FIELD_PREP(ARM_SMMU_S2CR_PRIVCFG, S2CR_PRIVCFG_DEFAULT)); reg = arm_smmu_gr0_read(smmu, last_s2cr); - if (FIELD_GET(ARM_SMMU_S2CR_TYPE, reg) != S2CR_TYPE_BYPASS) + if (FIELD_GET(ARM_SMMU_S2CR_TYPE, reg) != S2CR_TYPE_BYPASS) { smmu->qcom_bypass_quirk = true; + /* + * With firmware ignoring writes of type FAULT, booting the + * Linux kernel with disable_bypass disabled (i.e. "enable + * bypass") the initialization during probe will leave mappings + * in an inconsistent state. Avoid this by configuring all + * S2CRs to BYPASS. + */ + for (i = 0; i < smmu->num_mapping_groups; i++) { + smmu->s2crs[i].type = S2CR_TYPE_BYPASS; + smmu->s2crs[i].privcfg = S2CR_PRIVCFG_DEFAULT; + smmu->s2crs[i].cbndx = 0xff; + smmu->s2crs[i].count = 0; + } + } + return 0; } -- 2.26.2