Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp76867pxk; Fri, 11 Sep 2020 00:22:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxetmTDn4yqjFGrnnDoTdZVSQHAlG7VIgsMdAkZrIHf+o9sbp62AhdZtC8zt+R7dS/77PPn X-Received: by 2002:a50:e68a:: with SMTP id z10mr675480edm.100.1599808969865; Fri, 11 Sep 2020 00:22:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599808969; cv=none; d=google.com; s=arc-20160816; b=z+Wm3rk8Ng0imtdgZFfoNgl/PHLg8b5V/J379md9sSSJ0k40oyuppw46pE5sacjE7G 1K/m31CA3p/b5yNrJSO2wxAI2UKNyqC3R5fux1WcUXrbn5SWvwYLDZ9f8PmTUlEo9Jdy qPM8FtRDrec3/UJxKIM05R7ntEqO4RsV1T7gz/nDf/X9tZfQ+LHx77eEsC+bL2yYy+KY 8lRXlcpF1Q2UBnzqfMIKBQW7AT53yH8gpx6/Roli2VepsSsKuemFIECm/ZrJv2hVC+p1 KSpWLmCDuL6WBOci3aMFY8zq5Nu2t584+rmGrrMMYY3XNAGbxe8iNkBRtOXiEOerKVuY OcsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=SS7jLbqMqo7oAIExIEmTdCQZIIujYEeMEKPzckwgOOc=; b=UWmulpNNUwz1wmHl3gIKL5frL29Od2jh9tyYe1vlZPer+lKqpHPi8sKhdhHHM1oLpS wIVSK+VlUBYM5zPZWNA+NV39HpQoM+mGU7GmWRb8RpAQuKzgs/H2pzUfkTAlzHbShAKW zX7y/dQmnJTUkFvkcA7jWi++aVSaP3gmdJpCNmmIjpzesWV3SRbm+yini19uEJYj8efp UqmPCXTGpiAeQX26E4hXslgcJr0qQMpcZ37UNBGXYbwTafoV7ug5Ss2E9HEUclcrZM+7 /wJ1HnIyVJcyUUMzMyZbp0tWJ4nyHJuHt92uUGoMZ8nt0D+teTvrTG0Ku/hZ450jXSQu ImbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Inevjptb; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l11si756163ejk.113.2020.09.11.00.22.26; Fri, 11 Sep 2020 00:22:49 -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=@gmail.com header.s=20161025 header.b=Inevjptb; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725843AbgIKHTb (ORCPT + 99 others); Fri, 11 Sep 2020 03:19:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725792AbgIKHTB (ORCPT ); Fri, 11 Sep 2020 03:19:01 -0400 Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8373FC0613ED; Fri, 11 Sep 2020 00:19:01 -0700 (PDT) Received: by mail-pg1-x543.google.com with SMTP id f2so3978642pgd.3; Fri, 11 Sep 2020 00:19:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SS7jLbqMqo7oAIExIEmTdCQZIIujYEeMEKPzckwgOOc=; b=InevjptbbgvQ9h7Iyupif311WbVVYkJoovS5NtNBAZUpv+hJ+zfqvCsdzptDDDruor 6IDBuQHCA7/TgfTD5CDBKJ3O0kqDVHJb9tApHoScRDHil3iMCL/Hns2vP1HOZk3mf45A hcx3d7tI3fITed6XgZdYLMuMj/An3/OK2jriLAqsYq8/zdun2109NEluu0z0wB2gPC3k lV8g/q9/jn3dRqkNk5DA8lnEVnqzqDJBoX6psH8H3nOMYmhcSa3/spdhunDwws5NYG19 XuDDrRtvNnnXpKSW4p/9B+x8+/Eo7M2R+f8Wqwtar5JQGNh7q3Mcs1xpDHF8A0kMDyc3 oBDw== 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; bh=SS7jLbqMqo7oAIExIEmTdCQZIIujYEeMEKPzckwgOOc=; b=BvwI9xxg4lnmIKvR38MLo4ujbTWy9Gehmz8KvWX+az1NsYVya1oFPZCbmm6MXE2JYN HPUK0eG8x6xzV/20MQ9vK18YeiF3CT1h2e/cD10KD5DZTxW5tZKQrd5nFYT1vbSNBb35 LQXZqXHb5+zRoTxdEvbJs5phzmCC7FLnC3uDZNrsUy97PQ7zjB46Zu0lS2FHFrb+HMBo UydaqHZJ7qyz7crF/DwEeoE0WHhB8hudbzMXSEOrOTncpT8ZWfNB32eTbEn0nzN4i3L5 H/UDaKxm5IqXbH0WrJ1VU8P+NMtJvGwZh2w/hJTCjGrztNVjJirsyggOyzSEjKns9bMY NicQ== X-Gm-Message-State: AOAM532do0Ax6oGRWY+Lq/8Tt5GK2LAopaRd98pqoh2RjJIu18dSVM4U lnPz/k0T8IxBGYvsNTpg9HqbqGC5u+Q= X-Received: by 2002:a17:902:bccb:b029:d1:9bf7:22f4 with SMTP id o11-20020a170902bccbb02900d19bf722f4mr1066840pls.27.1599808741034; Fri, 11 Sep 2020 00:19:01 -0700 (PDT) Received: from Asurada-Nvidia.nvidia.com (thunderhill.nvidia.com. [216.228.112.22]) by smtp.gmail.com with ESMTPSA id 131sm1264692pfc.20.2020.09.11.00.19.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Sep 2020 00:19:00 -0700 (PDT) From: Nicolin Chen To: joro@8bytes.org, thierry.reding@gmail.com Cc: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, jonathanh@nvidia.com, vdumpa@nvidia.com Subject: [PATCH 3/3] iommu/tegra-smmu: Allow to group clients in same swgroup Date: Fri, 11 Sep 2020 00:16:43 -0700 Message-Id: <20200911071643.17212-4-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200911071643.17212-1-nicoleotsuka@gmail.com> References: <20200911071643.17212-1-nicoleotsuka@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There can be clients using the same swgroup in DT, for example i2c0 and i2c1. The current driver will add them to separate IOMMU groups, though it has implemented device_group() callback which is to group devices using different swgroups like DC and DCB. All clients having the same swgroup should be also added to the same IOMMU group so as to share an asid. Otherwise, the asid register may get overwritten every time a new device is attached. Signed-off-by: Nicolin Chen --- drivers/iommu/tegra-smmu.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c index 50b962b0647e..84fdee473873 100644 --- a/drivers/iommu/tegra-smmu.c +++ b/drivers/iommu/tegra-smmu.c @@ -23,6 +23,7 @@ struct tegra_smmu_group { struct tegra_smmu *smmu; const struct tegra_smmu_group_soc *soc; struct iommu_group *group; + unsigned int swgroup; }; struct tegra_smmu { @@ -909,14 +910,14 @@ static struct iommu_group *tegra_smmu_group_get(struct tegra_smmu *smmu, struct tegra_smmu_group *group; struct iommu_group *grp; + /* Find group_soc associating with swgroup */ soc = tegra_smmu_find_group(smmu, swgroup); - if (!soc) - return NULL; mutex_lock(&smmu->lock); + /* Find existing iommu_group associating with swgroup or group_soc */ list_for_each_entry(group, &smmu->groups, list) - if (group->soc == soc) { + if ((group->swgroup == swgroup) || (soc && group->soc == soc)) { grp = iommu_group_ref_get(group->group); mutex_unlock(&smmu->lock); return grp; @@ -929,6 +930,7 @@ static struct iommu_group *tegra_smmu_group_get(struct tegra_smmu *smmu, } INIT_LIST_HEAD(&group->list); + group->swgroup = swgroup; group->smmu = smmu; group->soc = soc; @@ -940,7 +942,8 @@ static struct iommu_group *tegra_smmu_group_get(struct tegra_smmu *smmu, } iommu_group_set_iommudata(group->group, group, tegra_smmu_group_release); - iommu_group_set_name(group->group, soc->name); + if (soc) + iommu_group_set_name(group->group, soc->name); list_add_tail(&group->list, &smmu->groups); mutex_unlock(&smmu->lock); -- 2.17.1