diff options
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.patch | 116 |
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 + |