Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp6648804rdb; Fri, 15 Dec 2023 04:54:58 -0800 (PST) X-Google-Smtp-Source: AGHT+IF3SIvXbmubsojsb7sbKaydVhkQp2A4pHnPke1lbfJYEWr285kHGMAMLdPi51TskeaRAKHc X-Received: by 2002:a05:6808:3a0d:b0:3b9:e604:1395 with SMTP id gr13-20020a0568083a0d00b003b9e6041395mr9443600oib.101.1702644898604; Fri, 15 Dec 2023 04:54:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702644898; cv=none; d=google.com; s=arc-20160816; b=o/xWf65DrixNfSFTmyqTfGSUhep+FaiyMUiPA9MwoIhsv2Sg6RBKuoEPmtOhFSN/Oc 54mpCGbotUWczb2/rt5C84EN8I+K2dNvoQes8GET6w2JLv2qsu9vx/nUhHJWkpFWUx+v 5V5uf94JWBu2u3mdmIl7g8FlroEdKTEn7fIVAxyZdC5RGo0zegNHmJka6qUC29tlIeZl QF6xf2XausSdRF/RWx4PzJH7+qYvRfv6TvP/tR0TMPFBj5bOlbwZJ/884kGahE07opfE g2F2XEI5ZM1FsfpCSOgtNWH/T8oS7opyimSVa8unvQXHc676MTrc0xSQpSl1ozkhRjQt Namg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:message-id; bh=j6Brf0VxxTeoOuz31eczd8e7Ydz9Pwhm8nJIVWzH7Dg=; fh=zWJtSZP7auMy0Cee+lyOJglJ4Bc9iy6ZiabjpXdJ/Vc=; b=dxFQfxDVmhv7jgrDjhRD04sX5GY66XBiYnudtkei06cbNUDFayAuw+MclYdKR8UBRE +kcCPwI9dFhCoqdWVqXvv+iYjpSJMFlchUioCdOh0Tk7BGBfES4ERXWN0ow1R5QFGpbr fFmF4AiWu2Ek9cVwcYgL3U1zl38JEh7XA7lf0sMA7p8felWclp08XthB0UaEpRlhACs1 jOm/0JlmUV435vFCGUV9hhwWI4PrEdJrkB+HOOnz64pxsTwIOKPlMtAviR5g0TV+LHwV wsiIbUVm5fgQLsWLBsnpgX1mJ8taz3o2ky5RK8GvwLOzzAZQ6CHjQNU7Aco51h6+k8Os GTcA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-958-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-958-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id j12-20020a0ce00c000000b0067f14ada5bbsi2023690qvk.426.2023.12.15.04.54.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Dec 2023 04:54:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-958-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-958-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-958-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 4BEF21C233F4 for ; Fri, 15 Dec 2023 12:54:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4EC5B2C6B2; Fri, 15 Dec 2023 12:54:50 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 07A412C68D; Fri, 15 Dec 2023 12:54:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 9BBDDC15; Fri, 15 Dec 2023 04:55:31 -0800 (PST) Received: from [10.57.86.13] (unknown [10.57.86.13]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7B8503F738; Fri, 15 Dec 2023 04:54:43 -0800 (PST) Message-ID: Date: Fri, 15 Dec 2023 12:54:41 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 3/5] iommu/arm-smmu: add ACTLR data and support for SM8550 Content-Language: en-GB To: Bibek Kumar Patro , Dmitry Baryshkov Cc: will@kernel.org, joro@8bytes.org, konrad.dybcio@linaro.org, jsnitsel@redhat.com, quic_bjorande@quicinc.com, mani@kernel.org, quic_eberman@quicinc.com, robdclark@chromium.org, u.kleine-koenig@pengutronix.de, robh@kernel.org, vladimir.oltean@nxp.com, quic_pkondeti@quicinc.com, quic_molvera@quicinc.com, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, qipl.kernel.upstream@quicinc.com References: <20231215101827.30549-1-quic_bibekkum@quicinc.com> <20231215101827.30549-4-quic_bibekkum@quicinc.com> From: Robin Murphy In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2023-12-15 12:20 pm, Bibek Kumar Patro wrote: > > > On 12/15/2023 4:14 PM, Dmitry Baryshkov wrote: >> On Fri, 15 Dec 2023 at 12:19, Bibek Kumar Patro >> wrote: >>> >>> Add ACTLR data table for SM8550 along with support for >>> same including SM8550 specific implementation operations. >>> >>> Signed-off-by: Bibek Kumar Patro >>> --- >>>   drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 89 ++++++++++++++++++++++ >>>   1 file changed, 89 insertions(+) >>> >>> diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c >>> b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c >>> index cb49291f5233..d2006f610243 100644 >>> --- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c >>> +++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c >>> @@ -20,6 +20,85 @@ struct actlr_config { >>>          u32 actlr; >>>   }; >>> >>> +/* >>> + * SMMU-500 TRM defines BIT(0) as CMTLB (Enable context caching in the >>> + * macro TLB) and BIT(1) as CPRE (Enable context caching in the >>> prefetch >>> + * buffer). The remaining bits are implementation defined and vary >>> across >>> + * SoCs. >>> + */ >>> + >>> +#define PREFETCH_DEFAULT       0 >>> +#define PREFETCH_SHALLOW       BIT(8) >>> +#define PREFETCH_MODERATE      BIT(9) >>> +#define PREFETCH_DEEP          (BIT(9) | BIT(8)) >> >> I thin the following might be more correct: >> >> #include >> >> #define PREFETCH_MASK GENMASK(9, 8) >> #define PREFETCH_DEFAULT FIELD_PREP(PREFETCH_MASK, 0) >> #define PREFETCH_SHALLOW FIELD_PREP(PREFETCH_MASK, 1) >> #define PREFETCH_MODERATE FIELD_PREP(PREFETCH_MASK, 2) >> #define PREFETCH_DEEP FIELD_PREP(PREFETCH_MASK, 3) >> > > Ack, thanks for this suggestion. Let me try this out using > GENMASK. Once tested, will take care of this in next version. FWIW the more typical usage would be to just define the named macros for the raw field values, then put the FIELD_PREP() at the point of use. However in this case that's liable to get pretty verbose, so although I'm usually a fan of bitfield.h, the most readable option here might actually be to stick with simpler definitions of "(0 << 8)", "(1 << 8)", etc. However it's not really a big deal either way, and I defer to whatever Dmitry and Konrad prefer, since they're the ones looking after arm-smmu-qcom the most :) Thanks, Robin. > > Thanks, > Bibek > >>> +#define PREFETCH_SWITCH_GFX    (BIT(5) | BIT(3)) >>> +#define CPRE                   BIT(1) >>> +#define CMTLB                  BIT(0) >>> + >>> +static const struct actlr_config sm8550_apps_actlr_cfg[] = { >>> +       { 0x18a0, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x18e0, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x0800, 0x0020, PREFETCH_DEFAULT | CMTLB }, >>> +       { 0x1800, 0x00c0, PREFETCH_DEFAULT | CMTLB }, >>> +       { 0x1820, 0x0000, PREFETCH_DEFAULT | CMTLB }, >>> +       { 0x1860, 0x0000, PREFETCH_DEFAULT | CMTLB }, >>> +       { 0x0c01, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c02, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c03, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c04, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c05, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c06, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c07, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c08, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c09, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c0c, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c0d, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c0e, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x0c0f, 0x0020, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1961, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1962, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1963, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1964, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1965, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1966, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1967, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1968, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1969, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x196c, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x196d, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x196e, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x196f, 0x0000, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c1, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c2, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c3, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c4, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c5, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c6, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c7, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c8, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19c9, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19cc, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19cd, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19ce, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x19cf, 0x0010, PREFETCH_DEEP | CPRE | CMTLB }, >>> +       { 0x1c00, 0x0002, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1c01, 0x0000, PREFETCH_DEFAULT | CMTLB }, >>> +       { 0x1920, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1923, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1924, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1940, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1941, 0x0004, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1943, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1944, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       { 0x1947, 0x0000, PREFETCH_SHALLOW | CPRE | CMTLB }, >>> +       {}, >>> +}; >>> + >>> +static const struct actlr_config sm8550_gfx_actlr_cfg[] = { >>> +       { 0x0000, 0x03ff, PREFETCH_SWITCH_GFX | PREFETCH_DEEP | CPRE >>> | CMTLB }, >>> +       {}, >>> +}; >>> + >>>   static struct qcom_smmu *to_qcom_smmu(struct arm_smmu_device *smmu) >>>   { >>>          return container_of(smmu, struct qcom_smmu, smmu); >>> @@ -549,6 +628,15 @@ static const struct qcom_smmu_match_data >>> sdm845_smmu_500_data = { >>>          /* Also no debug configuration. */ >>>   }; >>> >>> + >>> +static const struct qcom_smmu_match_data sm8550_smmu_500_impl0_data = { >>> +       .impl = &qcom_smmu_500_impl, >>> +       .adreno_impl = &qcom_adreno_smmu_500_impl, >>> +       .cfg = &qcom_smmu_impl0_cfg, >>> +       .actlrcfg = sm8550_apps_actlr_cfg, >>> +       .actlrcfg_gfx = sm8550_gfx_actlr_cfg, >>> +}; >>> + >>>   static const struct qcom_smmu_match_data qcom_smmu_500_impl0_data = { >>>          .impl = &qcom_smmu_500_impl, >>>          .adreno_impl = &qcom_adreno_smmu_500_impl, >>> @@ -583,6 +671,7 @@ static const struct of_device_id __maybe_unused >>> qcom_smmu_impl_of_match[] = { >>>          { .compatible = "qcom,sm8250-smmu-500", .data = >>> &qcom_smmu_500_impl0_data }, >>>          { .compatible = "qcom,sm8350-smmu-500", .data = >>> &qcom_smmu_500_impl0_data }, >>>          { .compatible = "qcom,sm8450-smmu-500", .data = >>> &qcom_smmu_500_impl0_data }, >>> +       { .compatible = "qcom,sm8550-smmu-500", .data = >>> &sm8550_smmu_500_impl0_data }, >>>          { .compatible = "qcom,smmu-500", .data = >>> &qcom_smmu_500_impl0_data }, >>>          { } >>>   }; >>> -- >>> 2.17.1 >>> >> >>