drm/panfrost: Add support for Mali on the MT8186 SoC
[linux-2.6-microblaze.git] / drivers / gpu / drm / panfrost / panfrost_drv.c
index abb0dad..bbada73 100644 (file)
@@ -220,15 +220,8 @@ panfrost_copy_in_sync(struct drm_device *dev,
        }
 
        for (i = 0; i < in_fence_count; i++) {
-               struct dma_fence *fence;
-
-               ret = drm_syncobj_find_fence(file_priv, handles[i], 0, 0,
-                                            &fence);
-               if (ret)
-                       goto fail;
-
-               ret = drm_sched_job_add_dependency(&job->base, fence);
-
+               ret = drm_sched_job_add_syncobj_dependency(&job->base, file_priv,
+                                                          handles[i], 0);
                if (ret)
                        goto fail;
        }
@@ -654,6 +647,14 @@ static const struct panfrost_compatible amlogic_data = {
        .vendor_quirk = panfrost_gpu_amlogic_quirk,
 };
 
+/*
+ * The old data with two power supplies for MT8183 is here only to
+ * keep retro-compatibility with older devicetrees, as DVFS will
+ * not work with this one.
+ *
+ * On new devicetrees please use the _b variant with a single and
+ * coupled regulators instead.
+ */
 static const char * const mediatek_mt8183_supplies[] = { "mali", "sram", NULL };
 static const char * const mediatek_mt8183_pm_domains[] = { "core0", "core1", "core2" };
 static const struct panfrost_compatible mediatek_mt8183_data = {
@@ -663,6 +664,32 @@ static const struct panfrost_compatible mediatek_mt8183_data = {
        .pm_domain_names = mediatek_mt8183_pm_domains,
 };
 
+static const char * const mediatek_mt8183_b_supplies[] = { "mali", NULL };
+static const struct panfrost_compatible mediatek_mt8183_b_data = {
+       .num_supplies = ARRAY_SIZE(mediatek_mt8183_b_supplies) - 1,
+       .supply_names = mediatek_mt8183_b_supplies,
+       .num_pm_domains = ARRAY_SIZE(mediatek_mt8183_pm_domains),
+       .pm_domain_names = mediatek_mt8183_pm_domains,
+};
+
+static const char * const mediatek_mt8186_pm_domains[] = { "core0", "core1" };
+static const struct panfrost_compatible mediatek_mt8186_data = {
+       .num_supplies = ARRAY_SIZE(mediatek_mt8183_b_supplies) - 1,
+       .supply_names = mediatek_mt8183_b_supplies,
+       .num_pm_domains = ARRAY_SIZE(mediatek_mt8186_pm_domains),
+       .pm_domain_names = mediatek_mt8186_pm_domains,
+};
+
+static const char * const mediatek_mt8192_supplies[] = { "mali", NULL };
+static const char * const mediatek_mt8192_pm_domains[] = { "core0", "core1", "core2",
+                                                          "core3", "core4" };
+static const struct panfrost_compatible mediatek_mt8192_data = {
+       .num_supplies = ARRAY_SIZE(mediatek_mt8192_supplies) - 1,
+       .supply_names = mediatek_mt8192_supplies,
+       .num_pm_domains = ARRAY_SIZE(mediatek_mt8192_pm_domains),
+       .pm_domain_names = mediatek_mt8192_pm_domains,
+};
+
 static const struct of_device_id dt_match[] = {
        /* Set first to probe before the generic compatibles */
        { .compatible = "amlogic,meson-gxm-mali",
@@ -681,6 +708,9 @@ static const struct of_device_id dt_match[] = {
        { .compatible = "arm,mali-bifrost", .data = &default_data, },
        { .compatible = "arm,mali-valhall-jm", .data = &default_data, },
        { .compatible = "mediatek,mt8183-mali", .data = &mediatek_mt8183_data },
+       { .compatible = "mediatek,mt8183b-mali", .data = &mediatek_mt8183_b_data },
+       { .compatible = "mediatek,mt8186-mali", .data = &mediatek_mt8186_data },
+       { .compatible = "mediatek,mt8192-mali", .data = &mediatek_mt8192_data },
        {}
 };
 MODULE_DEVICE_TABLE(of, dt_match);