From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80E8FC7EE25 for ; Tue, 9 May 2023 21:23:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236168AbjEIVXP (ORCPT ); Tue, 9 May 2023 17:23:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236076AbjEIVWC (ORCPT ); Tue, 9 May 2023 17:22:02 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E8C3376BF; Tue, 9 May 2023 14:20:48 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 844A56345E; Tue, 9 May 2023 21:20:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C1B0C4339C; Tue, 9 May 2023 21:20:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1683667247; bh=18SUlECuH8ecv+har8QPVK6ThxrdIZBitTCya2J9bcE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uknj3Fgf9VTyUM1sa+9tf/tAJuAdADyyzOoSYgfRA4PW+JugyqIPjxmQnDBhyNM92 sgSe5TrkwAaH03wzuYz6ee2ptLvX1TxWnZ5RQo33YWord6uRTa9+4V9cSDAAHNByZK yy0hob5LetOqYYxYgYLnFoZP7/4R4owmijuqWLGIUQeJ3Z6IJS2QZ9S0aSya2s6AgF qDSl8RcY7aQTyTFPqgkRaZnP8w7t7oVM79O9kPtZQW0X91NNCRxWpNR1nMGysq8DnK GaTTDEh0KhWPVsnmSxR8QLyXGInoiG8LnnrVwA46CXmMbXGYi7n8uMqXvPb+5jbTMu ga1b5og9LmbUw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Manivannan Sadhasivam , Johan Hovold , Will Deacon , Sasha Levin , joro@8bytes.org, dmitry.baryshkov@linaro.org, quic_saipraka@quicinc.com, konrad.dybcio@linaro.org, quic_bjorande@quicinc.com, emma@anholt.net, marijn.suijten@somainline.org, a39.skl@gmail.com, mani@kernel.org, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev Subject: [PATCH AUTOSEL 5.10 2/5] iommu/arm-smmu-qcom: Limit the SMR groups to 128 Date: Tue, 9 May 2023 17:20:38 -0400 Message-Id: <20230509212044.22294-2-sashal@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230509212044.22294-1-sashal@kernel.org> References: <20230509212044.22294-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Manivannan Sadhasivam [ Upstream commit 12261134732689b7e30c59db9978f81230965181 ] Some platforms support more than 128 stream matching groups than what is defined by the ARM SMMU architecture specification. But due to some unknown reasons, those additional groups don't exhibit the same behavior as the architecture supported ones. For instance, the additional groups will not detect the quirky behavior of some firmware versions intercepting writes to S2CR register, thus skipping the quirk implemented in the driver and causing boot crash. So let's limit the groups to 128 for now until the issue with those groups are fixed and issue a notice to users in that case. Reviewed-by: Johan Hovold Tested-by: Johan Hovold Signed-off-by: Manivannan Sadhasivam Link: https://lore.kernel.org/r/20230327080029.11584-1-manivannan.sadhasivam@linaro.org [will: Reworded the comment slightly] Signed-off-by: Will Deacon Signed-off-by: Sasha Levin --- drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c index 63f7173b241f0..1598a1ddbf694 100644 --- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c +++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c @@ -32,12 +32,26 @@ static const struct of_device_id qcom_smmu_client_of_match[] __maybe_unused = { static int qcom_smmu_cfg_probe(struct arm_smmu_device *smmu) { - unsigned int last_s2cr = ARM_SMMU_GR0_S2CR(smmu->num_mapping_groups - 1); struct qcom_smmu *qsmmu = to_qcom_smmu(smmu); + unsigned int last_s2cr; u32 reg; u32 smr; int i; + /* + * Some platforms support more than the Arm SMMU architected maximum of + * 128 stream matching groups. For unknown reasons, the additional + * groups don't exhibit the same behavior as the architected registers, + * so limit the groups to 128 until the behavior is fixed for the other + * groups. + */ + if (smmu->num_mapping_groups > 128) { + dev_notice(smmu->dev, "\tLimiting the stream matching groups to 128\n"); + smmu->num_mapping_groups = 128; + } + + last_s2cr = ARM_SMMU_GR0_S2CR(smmu->num_mapping_groups - 1); + /* * With some firmware versions writes to S2CR of type FAULT are * ignored, and writing BYPASS will end up written as FAULT in the -- 2.39.2