From: Jammy Zhou <jammy.z...@amd.com>

1. Add kernel parameter option, default 0
2. Add scheduler initialization for amdgpu

Signed-off-by: Chunming Zhou <David1.Zhou at amd.com>
Signed-off-by: Jammy Zhou <Jammy.Zhou at amd.com>
Acked-by: Christian K?nig <christian.koenig at amd.com>
Reviewed-by: Jammy Zhou <Jammy.Zhou at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/Makefile       |  7 ++++++-
 drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  4 ++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 10 ++++++++++
 4 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile 
b/drivers/gpu/drm/amd/amdgpu/Makefile
index e07a250..8709026 100644
--- a/drivers/gpu/drm/amd/amdgpu/Makefile
+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
@@ -6,7 +6,8 @@ ccflags-y := -Iinclude/drm 
-Idrivers/gpu/drm/amd/include/asic_reg \
                -Idrivers/gpu/drm/amd/include \
                -Idrivers/gpu/drm/amd/include/bus \
                -Idrivers/gpu/drm/amd/acp/include \
-               -Idrivers/gpu/drm/amd/amdgpu
+               -Idrivers/gpu/drm/amd/amdgpu \
+               -Idrivers/gpu/drm/amd/scheduler

 amdgpu-y := amdgpu_drv.o

@@ -93,6 +94,10 @@ include drivers/gpu/drm/amd/acp/Makefile
 amdgpu-y += $(AMD_ACP_FILES)
 endif

+# GPU scheduler
+amdgpu-y += \
+       ../scheduler/gpu_scheduler.o
+
 amdgpu-$(CONFIG_COMPAT) += amdgpu_ioc32.o
 amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o
 amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 16e7d16..a311029 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -54,6 +54,8 @@
 #include "amdgpu_gds.h"
 #include "amdgpu_acp.h"

+#include "gpu_scheduler.h"
+
 /*
  * Modules parameters.
  */
@@ -78,6 +80,7 @@ extern int amdgpu_bapm;
 extern int amdgpu_deep_color;
 extern int amdgpu_vm_size;
 extern int amdgpu_vm_block_size;
+extern int amdgpu_enable_scheduler;

 #define AMDGPU_MAX_USEC_TIMEOUT                        100000  /* 100 ms */
 #define AMDGPU_FENCE_JIFFIES_TIMEOUT           (HZ / 2)
@@ -859,6 +862,7 @@ struct amdgpu_ring {
        struct amdgpu_device            *adev;
        const struct amdgpu_ring_funcs  *funcs;
        struct amdgpu_fence_driver      fence_drv;
+       struct amd_gpu_scheduler        *scheduler;

        struct mutex            *ring_lock;
        struct amdgpu_bo        *ring_obj;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index c3f9b49..c69611a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -75,6 +75,7 @@ int amdgpu_deep_color = 0;
 int amdgpu_vm_size = 8;
 int amdgpu_vm_block_size = -1;
 int amdgpu_exp_hw_support = 0;
+int amdgpu_enable_scheduler = 0;

 MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes");
 module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
index b89dafe..6cb3290 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
@@ -902,6 +902,14 @@ void amdgpu_fence_driver_init_ring(struct amdgpu_ring 
*ring)
        INIT_DELAYED_WORK(&ring->fence_drv.lockup_work,
                        amdgpu_fence_check_lockup);
        ring->fence_drv.ring = ring;
+
+       if (amdgpu_enable_scheduler) {
+               ring->scheduler = amd_sched_create((void *)ring->adev,
+                                                  NULL, ring->idx, 5, 0);
+               if (!ring->scheduler)
+                       DRM_ERROR("Failed to create scheduler on ring %d.\n",
+                                 ring->idx);
+       }
 }

 /**
@@ -950,6 +958,8 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev)
                wake_up_all(&adev->fence_queue);
                amdgpu_irq_put(adev, ring->fence_drv.irq_src,
                               ring->fence_drv.irq_type);
+               if (ring->scheduler)
+                       amd_sched_destroy(ring->scheduler);
                ring->fence_drv.initialized = false;
        }
        mutex_unlock(&adev->ring_lock);
-- 
1.8.3.1

Reply via email to