aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0382-drm-amdgpu-add-scheduler-initialization.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0382-drm-amdgpu-add-scheduler-initialization.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0382-drm-amdgpu-add-scheduler-initialization.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0382-drm-amdgpu-add-scheduler-initialization.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0382-drm-amdgpu-add-scheduler-initialization.patch
new file mode 100644
index 00000000..d09ec087
--- /dev/null
+++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0382-drm-amdgpu-add-scheduler-initialization.patch
@@ -0,0 +1,116 @@
+From b80d8475c1fdf5f4bcabb65168b2e8a9c3d77731 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Sun, 16 Aug 2015 22:55:02 -0400
+Subject: [PATCH 0382/1050] drm/amdgpu: add scheduler initialization
+
+1. Add kernel parameter option, default 0
+2. Add scheduler initialization for amdgpu
+
+Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
+Signed-off-by: Jammy Zhou <Jammy.Zhou@amd.com>
+Acked-by: Christian K?nig <christian.koenig@amd.com>
+Reviewed-by: Jammy Zhou <Jammy.Zhou@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 4c75e1c..2800cf7 100644
+--- a/drivers/gpu/drm/amd/amdgpu/Makefile
++++ b/drivers/gpu/drm/amd/amdgpu/Makefile
+@@ -4,7 +4,8 @@
+
+ ccflags-y := -Iinclude/drm -Idrivers/gpu/drm/amd/include/asic_reg \
+ -Idrivers/gpu/drm/amd/include \
+- -Idrivers/gpu/drm/amd/amdgpu
++ -Idrivers/gpu/drm/amd/amdgpu \
++ -Idrivers/gpu/drm/amd/scheduler
+
+ amdgpu-y := amdgpu_drv.o
+
+@@ -82,6 +83,10 @@ amdgpu-y += \
+ # add cgs
+ amdgpu-y += amdgpu_cgs.o
+
++# 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 a9ead97..815d40f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -53,6 +53,8 @@
+ #include "amdgpu_ucode.h"
+ #include "amdgpu_gds.h"
+
++#include "gpu_scheduler.h"
++
+ /*
+ * Modules parameters.
+ */
+@@ -77,6 +79,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)
+@@ -860,6 +863,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 e6f2aca..5feea44 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 1b0bc07..4edeb90 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.9.1
+