]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
memory: tegra: Create SMMU display groups
authorThierry Reding <treding@nvidia.com>
Thu, 12 Oct 2017 14:29:19 +0000 (16:29 +0200)
committerThierry Reding <treding@nvidia.com>
Fri, 15 Dec 2017 09:12:32 +0000 (10:12 +0100)
Create SMMU display groups for Tegra30, Tegra114, Tegra124 and Tegra210.
This allows the display controllers on these devices to share the same
IOMMU domain using the standard IOMMU group mechanism.

Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/memory/tegra/tegra114.c
drivers/memory/tegra/tegra124.c
drivers/memory/tegra/tegra210.c
drivers/memory/tegra/tegra30.c
include/soc/tegra/mc.h

index ba8fff3d66a655d0875a50f4abb7ea863ea0099c..b20e6e3e208e9324978b95af41020a6d4987c69d 100644 (file)
@@ -912,11 +912,26 @@ static const struct tegra_smmu_swgroup tegra114_swgroups[] = {
        { .name = "tsec",      .swgroup = TEGRA_SWGROUP_TSEC,      .reg = 0x294 },
 };
 
+static const unsigned int tegra114_group_display[] = {
+       TEGRA_SWGROUP_DC,
+       TEGRA_SWGROUP_DCB,
+};
+
+static const struct tegra_smmu_group_soc tegra114_groups[] = {
+       {
+               .name = "display",
+               .swgroups = tegra114_group_display,
+               .num_swgroups = ARRAY_SIZE(tegra114_group_display),
+       },
+};
+
 static const struct tegra_smmu_soc tegra114_smmu_soc = {
        .clients = tegra114_mc_clients,
        .num_clients = ARRAY_SIZE(tegra114_mc_clients),
        .swgroups = tegra114_swgroups,
        .num_swgroups = ARRAY_SIZE(tegra114_swgroups),
+       .groups = tegra114_groups,
+       .num_groups = ARRAY_SIZE(tegra114_groups),
        .supports_round_robin_arbitration = false,
        .supports_request_limit = false,
        .num_tlb_lines = 32,
index 5a58e440f4a7bd58ec87cd2cbaa4b60993b74667..8b6360eabb8a5aef19d9457c1a7e259edcfbda88 100644 (file)
@@ -999,12 +999,27 @@ static const struct tegra_smmu_swgroup tegra124_swgroups[] = {
        { .name = "vi",        .swgroup = TEGRA_SWGROUP_VI,        .reg = 0x280 },
 };
 
+static const unsigned int tegra124_group_display[] = {
+       TEGRA_SWGROUP_DC,
+       TEGRA_SWGROUP_DCB,
+};
+
+static const struct tegra_smmu_group_soc tegra124_groups[] = {
+       {
+               .name = "display",
+               .swgroups = tegra124_group_display,
+               .num_swgroups = ARRAY_SIZE(tegra124_group_display),
+       },
+};
+
 #ifdef CONFIG_ARCH_TEGRA_124_SOC
 static const struct tegra_smmu_soc tegra124_smmu_soc = {
        .clients = tegra124_mc_clients,
        .num_clients = ARRAY_SIZE(tegra124_mc_clients),
        .swgroups = tegra124_swgroups,
        .num_swgroups = ARRAY_SIZE(tegra124_swgroups),
+       .groups = tegra124_groups,
+       .num_groups = ARRAY_SIZE(tegra124_groups),
        .supports_round_robin_arbitration = true,
        .supports_request_limit = true,
        .num_tlb_lines = 32,
@@ -1029,6 +1044,8 @@ static const struct tegra_smmu_soc tegra132_smmu_soc = {
        .num_clients = ARRAY_SIZE(tegra124_mc_clients),
        .swgroups = tegra124_swgroups,
        .num_swgroups = ARRAY_SIZE(tegra124_swgroups),
+       .groups = tegra124_groups,
+       .num_groups = ARRAY_SIZE(tegra124_groups),
        .supports_round_robin_arbitration = true,
        .supports_request_limit = true,
        .num_tlb_lines = 32,
index 5e144abe4c181eea8fb330ec9f68acb9735fe46f..d398bcd3fc5714dc32be85464e11e7cdec88e7a5 100644 (file)
@@ -1059,11 +1059,26 @@ static const struct tegra_smmu_swgroup tegra210_swgroups[] = {
        { .name = "tsecb",     .swgroup = TEGRA_SWGROUP_TSECB,     .reg = 0xad4 },
 };
 
+static const unsigned int tegra210_group_display[] = {
+       TEGRA_SWGROUP_DC,
+       TEGRA_SWGROUP_DCB,
+};
+
+static const struct tegra_smmu_group_soc tegra210_groups[] = {
+       {
+               .name = "display",
+               .swgroups = tegra210_group_display,
+               .num_swgroups = ARRAY_SIZE(tegra210_group_display),
+       },
+};
+
 static const struct tegra_smmu_soc tegra210_smmu_soc = {
        .clients = tegra210_mc_clients,
        .num_clients = ARRAY_SIZE(tegra210_mc_clients),
        .swgroups = tegra210_swgroups,
        .num_swgroups = ARRAY_SIZE(tegra210_swgroups),
+       .groups = tegra210_groups,
+       .num_groups = ARRAY_SIZE(tegra210_groups),
        .supports_round_robin_arbitration = true,
        .supports_request_limit = true,
        .num_tlb_lines = 32,
index b44737840e70c188344c3d51e5edc08ffb02b256..d756c837f23e50cec078a274525d66bb94980bb7 100644 (file)
@@ -934,11 +934,26 @@ static const struct tegra_smmu_swgroup tegra30_swgroups[] = {
        { .name = "isp",  .swgroup = TEGRA_SWGROUP_ISP,  .reg = 0x258 },
 };
 
+static const unsigned int tegra30_group_display[] = {
+       TEGRA_SWGROUP_DC,
+       TEGRA_SWGROUP_DCB,
+};
+
+static const struct tegra_smmu_group_soc tegra30_groups[] = {
+       {
+               .name = "display",
+               .swgroups = tegra30_group_display,
+               .num_swgroups = ARRAY_SIZE(tegra30_group_display),
+       },
+};
+
 static const struct tegra_smmu_soc tegra30_smmu_soc = {
        .clients = tegra30_mc_clients,
        .num_clients = ARRAY_SIZE(tegra30_mc_clients),
        .swgroups = tegra30_swgroups,
        .num_swgroups = ARRAY_SIZE(tegra30_swgroups),
+       .groups = tegra30_groups,
+       .num_groups = ARRAY_SIZE(tegra30_groups),
        .supports_round_robin_arbitration = false,
        .supports_request_limit = false,
        .num_tlb_lines = 16,
index 44202ff897fd93a75e7bc7029d9733ffff2b20ec..233bae954970ac9af71c172b932ee9d56a4c9f84 100644 (file)
@@ -51,6 +51,12 @@ struct tegra_smmu_swgroup {
        unsigned int reg;
 };
 
+struct tegra_smmu_group_soc {
+       const char *name;
+       const unsigned int *swgroups;
+       unsigned int num_swgroups;
+};
+
 struct tegra_smmu_soc {
        const struct tegra_mc_client *clients;
        unsigned int num_clients;
@@ -58,6 +64,9 @@ struct tegra_smmu_soc {
        const struct tegra_smmu_swgroup *swgroups;
        unsigned int num_swgroups;
 
+       const struct tegra_smmu_group_soc *groups;
+       unsigned int num_groups;
+
        bool supports_round_robin_arbitration;
        bool supports_request_limit;