Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp10649510rwd; Thu, 22 Jun 2023 02:57:07 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5i2TREKS81WCO0k/cxCjbGn7/IYN4KNMKGAlsi6x+E2uX7Bj4ImFi0Sif/+8ekFAScpbsc X-Received: by 2002:a05:6359:d1d:b0:132:d0ff:fcc4 with SMTP id gp29-20020a0563590d1d00b00132d0fffcc4mr1189649rwb.11.1687427827512; Thu, 22 Jun 2023 02:57:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687427827; cv=none; d=google.com; s=arc-20160816; b=oxSn41d+I5FheMGqCPFUwsRILQozG9VcBiVCb0fj6jvflrHHbzlUUqY0wSCup9eGWZ pL3HeoNKsh6FoNtbuUYqeXirit008ugLbDxuujsq8x0YCWdHkqfPqVCPHM8Kt6RmC2YF bfc6Aefmyj1Qg3piQaFWUO+w7Kh2MKzJ9RpV7xAEuQpMjnzZ+629JmsUwuMbUthW9PQm LskN+F6dFNMP4bn2v6GA2Y0pfWREUcBLkAJAF4tAbgX1+bFijQDXTrWEwZajXY5B966A ML/JZfMmJh2jdc8uitovF2g1g/EAH4a+IBHYE1804YWT9cVxpwiRub4il03+YhzgMYJi uOeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=uD01/Us/kNN8dexpaf6Eg6YDBfK5k8VPCQKWGU6I0f4=; b=m1QUE8BQUEuZKGeYvYxFdvac8Emp5YsW4McfFY/5RNaG78nixl2B8OkLTCzu7mUSIj 1N/GZfhk91CAlJN8XSJHOEwae+5ibZPXxtrbDt+RFwn1ovtNCYLcfxw5KJqmONeTHlN+ wqNllU3EZDPQlLyhiAD08G9s5zDTl2QURZKS/xLRjcL3V4wWl8fv5BNx2gzj0axO6Z8G s1KjCv2dVOAZ1YCLCdS/po+s7KDSU68tGO7s/Wa/KMRjewPeHbXMrF/XNt6B4pAVb9XC Ikduc16trU3UHbN4YDTUuTsslPZHyKvAEl0EuoUoiyewK/tFvHbfzBnyR0lp5atcWoSZ s50g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=hjpr1ZOf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w13-20020a637b0d000000b00553ebb05d25si449880pgc.80.2023.06.22.02.56.56; Thu, 22 Jun 2023 02:57:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=hjpr1ZOf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232039AbjFVJeq (ORCPT + 99 others); Thu, 22 Jun 2023 05:34:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232174AbjFVJdn (ORCPT ); Thu, 22 Jun 2023 05:33:43 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 442F9269F; Thu, 22 Jun 2023 02:28:02 -0700 (PDT) Received: from IcarusMOD.eternityproject.eu (unknown [IPv6:2001:b07:2ed:14ed:c5f8:7372:f042:90a2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by madras.collabora.co.uk (Postfix) with ESMTPSA id 1B33A6607073; Thu, 22 Jun 2023 10:28:00 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1687426081; bh=CngEEwFWw5udIT5tiX3hlaCWhy4SYtKzrubNQdXxupI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hjpr1ZOfp2SXOJIs7zShgoYvD+7NxZTzrN02RusmiW3IlVvIw1bJjaubw7M3/qvd3 SvFjuo+LlqtOn6ZgEK1QIEg/kuL4TWUJdsy+lOPkofvqK6oywLdSd4BIxLRT4B8dxi FRT6osdAe1ieG4iUoB1CB+SA7npGuvQyvjsO1Gutu3jqcPmeb5xKhFlNna1m3zk4Kz 6vJrtnwbGNfRnscEO5vugE0QHCSbZtUpttU+VgrMCZbWksuEbYuW+d5KzuwiCQnMCY hdaIhOI5megPxHNI96aZtaQnlaGLH3jLJsH8iOIl9ebBwKP/H8wZaz5d87kK8SsTPm vjC8tHyXqqgnA== From: AngeloGioacchino Del Regno To: agross@kernel.org Cc: andersson@kernel.org, luca@z3ntu.xyz, konrad.dybcio@linaro.org, dmitry.baryshkov@linaro.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, robdclark@gmail.com, linux-arm-msm@vger.kernel.org, iommu@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, AngeloGioacchino Del Regno , kernel@collabora.com Subject: [PATCH v5 4/6] iommu/qcom: Index contexts by asid number to allow asid 0 Date: Thu, 22 Jun 2023 11:27:40 +0200 Message-Id: <20230622092742.74819-5-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230622092742.74819-1-angelogioacchino.delregno@collabora.com> References: <20230622092742.74819-1-angelogioacchino.delregno@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This driver was indexing the contexts by asid-1, which is probably done under the assumption that the first ASID is always 1. Unfortunately this is not always true: at least for MSM8956 and MSM8976's GPU IOMMU, the gpu_user context's ASID number is zero. To allow using a zero asid number, index the contexts by `asid` instead of by `asid - 1`. While at it, also enhance human readability by renaming the `num_ctxs` member of struct qcom_iommu_dev to `max_asid`. Signed-off-by: AngeloGioacchino Del Regno --- drivers/iommu/arm/arm-smmu/qcom_iommu.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu/qcom_iommu.c b/drivers/iommu/arm/arm-smmu/qcom_iommu.c index f1bd7c035db8..9786fd094e7d 100644 --- a/drivers/iommu/arm/arm-smmu/qcom_iommu.c +++ b/drivers/iommu/arm/arm-smmu/qcom_iommu.c @@ -51,8 +51,8 @@ struct qcom_iommu_dev { struct clk_bulk_data clks[CLK_NUM]; void __iomem *local_base; u32 sec_id; - u8 num_ctxs; - struct qcom_iommu_ctx *ctxs[]; /* indexed by asid-1 */ + u8 max_asid; + struct qcom_iommu_ctx *ctxs[]; /* indexed by asid */ }; struct qcom_iommu_ctx { @@ -94,7 +94,7 @@ static struct qcom_iommu_ctx * to_ctx(struct qcom_iommu_domain *d, unsigned asid struct qcom_iommu_dev *qcom_iommu = d->iommu; if (!qcom_iommu) return NULL; - return qcom_iommu->ctxs[asid - 1]; + return qcom_iommu->ctxs[asid]; } static inline void @@ -534,12 +534,10 @@ static int qcom_iommu_of_xlate(struct device *dev, struct of_phandle_args *args) qcom_iommu = platform_get_drvdata(iommu_pdev); /* make sure the asid specified in dt is valid, so we don't have - * to sanity check this elsewhere, since 'asid - 1' is used to - * index into qcom_iommu->ctxs: + * to sanity check this elsewhere: */ - if (WARN_ON(asid < 1) || - WARN_ON(asid > qcom_iommu->num_ctxs) || - WARN_ON(qcom_iommu->ctxs[asid - 1] == NULL)) { + if (WARN_ON(asid > qcom_iommu->max_asid) || + WARN_ON(qcom_iommu->ctxs[asid] == NULL)) { put_device(&iommu_pdev->dev); return -EINVAL; } @@ -696,7 +694,7 @@ static int qcom_iommu_ctx_probe(struct platform_device *pdev) dev_dbg(dev, "found asid %u\n", ctx->asid); - qcom_iommu->ctxs[ctx->asid - 1] = ctx; + qcom_iommu->ctxs[ctx->asid] = ctx; return 0; } @@ -708,7 +706,7 @@ static void qcom_iommu_ctx_remove(struct platform_device *pdev) platform_set_drvdata(pdev, NULL); - qcom_iommu->ctxs[ctx->asid - 1] = NULL; + qcom_iommu->ctxs[ctx->asid] = NULL; } static const struct of_device_id ctx_of_match[] = { @@ -755,11 +753,11 @@ static int qcom_iommu_device_probe(struct platform_device *pdev) for_each_child_of_node(dev->of_node, child) max_asid = max(max_asid, get_asid(child)); - qcom_iommu = devm_kzalloc(dev, struct_size(qcom_iommu, ctxs, max_asid), + qcom_iommu = devm_kzalloc(dev, struct_size(qcom_iommu, ctxs, max_asid + 1), GFP_KERNEL); if (!qcom_iommu) return -ENOMEM; - qcom_iommu->num_ctxs = max_asid; + qcom_iommu->max_asid = max_asid; qcom_iommu->dev = dev; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -- 2.40.1