aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
diff options
context:
space:
mode:
authorSean Paul <seanpaul@chromium.org>2018-03-21 09:40:55 -0400
committerSean Paul <seanpaul@chromium.org>2018-03-21 09:40:55 -0400
commit1c7095d2836baafd84e596dd34ba1a1293a4faa9 (patch)
tree498f529809b9c0a3c75c8b8bb1098ed4f71233db /drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
parent2793c1d77aa8876e5674e901d051c79570e99db2 (diff)
parent78230c46ec0a91dd4256c9e54934b3c7095a7ee3 (diff)
Merge airlied/drm-next into drm-misc-next
Refresh -misc-next Signed-off-by: Sean Paul <seanpaul@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index ba4335fd4f65..2337d4bfd85c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -73,9 +73,11 @@
73 * - 3.21.0 - Add DRM_AMDGPU_FENCE_TO_HANDLE ioctl 73 * - 3.21.0 - Add DRM_AMDGPU_FENCE_TO_HANDLE ioctl
74 * - 3.22.0 - Add DRM_AMDGPU_SCHED ioctl 74 * - 3.22.0 - Add DRM_AMDGPU_SCHED ioctl
75 * - 3.23.0 - Add query for VRAM lost counter 75 * - 3.23.0 - Add query for VRAM lost counter
76 * - 3.24.0 - Add high priority compute support for gfx9
77 * - 3.25.0 - Add support for sensor query info (stable pstate sclk/mclk).
76 */ 78 */
77#define KMS_DRIVER_MAJOR 3 79#define KMS_DRIVER_MAJOR 3
78#define KMS_DRIVER_MINOR 23 80#define KMS_DRIVER_MINOR 25
79#define KMS_DRIVER_PATCHLEVEL 0 81#define KMS_DRIVER_PATCHLEVEL 0
80 82
81int amdgpu_vram_limit = 0; 83int amdgpu_vram_limit = 0;
@@ -119,7 +121,7 @@ uint amdgpu_pg_mask = 0xffffffff;
119uint amdgpu_sdma_phase_quantum = 32; 121uint amdgpu_sdma_phase_quantum = 32;
120char *amdgpu_disable_cu = NULL; 122char *amdgpu_disable_cu = NULL;
121char *amdgpu_virtual_display = NULL; 123char *amdgpu_virtual_display = NULL;
122uint amdgpu_pp_feature_mask = 0xffffffff; 124uint amdgpu_pp_feature_mask = 0xffffbfff;
123int amdgpu_ngg = 0; 125int amdgpu_ngg = 0;
124int amdgpu_prim_buf_per_se = 0; 126int amdgpu_prim_buf_per_se = 0;
125int amdgpu_pos_buf_per_se = 0; 127int amdgpu_pos_buf_per_se = 0;
@@ -129,6 +131,7 @@ int amdgpu_job_hang_limit = 0;
129int amdgpu_lbpw = -1; 131int amdgpu_lbpw = -1;
130int amdgpu_compute_multipipe = -1; 132int amdgpu_compute_multipipe = -1;
131int amdgpu_gpu_recovery = -1; /* auto */ 133int amdgpu_gpu_recovery = -1; /* auto */
134int amdgpu_emu_mode = 0;
132 135
133MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); 136MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes");
134module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); 137module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
@@ -281,9 +284,12 @@ module_param_named(lbpw, amdgpu_lbpw, int, 0444);
281MODULE_PARM_DESC(compute_multipipe, "Force compute queues to be spread across pipes (1 = enable, 0 = disable, -1 = auto)"); 284MODULE_PARM_DESC(compute_multipipe, "Force compute queues to be spread across pipes (1 = enable, 0 = disable, -1 = auto)");
282module_param_named(compute_multipipe, amdgpu_compute_multipipe, int, 0444); 285module_param_named(compute_multipipe, amdgpu_compute_multipipe, int, 0444);
283 286
284MODULE_PARM_DESC(gpu_recovery, "Enable GPU recovery mechanism, (1 = enable, 0 = disable, -1 = auto"); 287MODULE_PARM_DESC(gpu_recovery, "Enable GPU recovery mechanism, (1 = enable, 0 = disable, -1 = auto)");
285module_param_named(gpu_recovery, amdgpu_gpu_recovery, int, 0444); 288module_param_named(gpu_recovery, amdgpu_gpu_recovery, int, 0444);
286 289
290MODULE_PARM_DESC(emu_mode, "Emulation mode, (1 = enable, 0 = disable)");
291module_param_named(emu_mode, amdgpu_emu_mode, int, 0444);
292
287#ifdef CONFIG_DRM_AMDGPU_SI 293#ifdef CONFIG_DRM_AMDGPU_SI
288 294
289#if defined(CONFIG_DRM_RADEON) || defined(CONFIG_DRM_RADEON_MODULE) 295#if defined(CONFIG_DRM_RADEON) || defined(CONFIG_DRM_RADEON_MODULE)
@@ -576,6 +582,11 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
576 struct drm_device *dev; 582 struct drm_device *dev;
577 unsigned long flags = ent->driver_data; 583 unsigned long flags = ent->driver_data;
578 int ret, retry = 0; 584 int ret, retry = 0;
585 bool supports_atomic = false;
586
587 if (!amdgpu_virtual_display &&
588 amdgpu_device_asic_has_dc_support(flags & AMD_ASIC_MASK))
589 supports_atomic = true;
579 590
580 if ((flags & AMD_EXP_HW_SUPPORT) && !amdgpu_exp_hw_support) { 591 if ((flags & AMD_EXP_HW_SUPPORT) && !amdgpu_exp_hw_support) {
581 DRM_INFO("This hardware requires experimental hardware support.\n" 592 DRM_INFO("This hardware requires experimental hardware support.\n"
@@ -596,6 +607,13 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
596 if (ret) 607 if (ret)
597 return ret; 608 return ret;
598 609
610 /* warn the user if they mix atomic and non-atomic capable GPUs */
611 if ((kms_driver.driver_features & DRIVER_ATOMIC) && !supports_atomic)
612 DRM_ERROR("Mixing atomic and non-atomic capable GPUs!\n");
613 /* support atomic early so the atomic debugfs stuff gets created */
614 if (supports_atomic)
615 kms_driver.driver_features |= DRIVER_ATOMIC;
616
599 dev = drm_dev_alloc(&kms_driver, &pdev->dev); 617 dev = drm_dev_alloc(&kms_driver, &pdev->dev);
600 if (IS_ERR(dev)) 618 if (IS_ERR(dev))
601 return PTR_ERR(dev); 619 return PTR_ERR(dev);
@@ -833,8 +851,8 @@ amdgpu_get_crtc_scanout_position(struct drm_device *dev, unsigned int pipe,
833 ktime_t *stime, ktime_t *etime, 851 ktime_t *stime, ktime_t *etime,
834 const struct drm_display_mode *mode) 852 const struct drm_display_mode *mode)
835{ 853{
836 return amdgpu_get_crtc_scanoutpos(dev, pipe, 0, vpos, hpos, 854 return amdgpu_display_get_crtc_scanoutpos(dev, pipe, 0, vpos, hpos,
837 stime, etime, mode); 855 stime, etime, mode);
838} 856}
839 857
840static struct drm_driver kms_driver = { 858static struct drm_driver kms_driver = {
@@ -852,9 +870,6 @@ static struct drm_driver kms_driver = {
852 .disable_vblank = amdgpu_disable_vblank_kms, 870 .disable_vblank = amdgpu_disable_vblank_kms,
853 .get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos, 871 .get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos,
854 .get_scanout_position = amdgpu_get_crtc_scanout_position, 872 .get_scanout_position = amdgpu_get_crtc_scanout_position,
855 .irq_preinstall = amdgpu_irq_preinstall,
856 .irq_postinstall = amdgpu_irq_postinstall,
857 .irq_uninstall = amdgpu_irq_uninstall,
858 .irq_handler = amdgpu_irq_handler, 873 .irq_handler = amdgpu_irq_handler,
859 .ioctls = amdgpu_ioctls_kms, 874 .ioctls = amdgpu_ioctls_kms,
860 .gem_free_object_unlocked = amdgpu_gem_object_free, 875 .gem_free_object_unlocked = amdgpu_gem_object_free,
@@ -867,9 +882,7 @@ static struct drm_driver kms_driver = {
867 .prime_handle_to_fd = drm_gem_prime_handle_to_fd, 882 .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
868 .prime_fd_to_handle = drm_gem_prime_fd_to_handle, 883 .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
869 .gem_prime_export = amdgpu_gem_prime_export, 884 .gem_prime_export = amdgpu_gem_prime_export,
870 .gem_prime_import = drm_gem_prime_import, 885 .gem_prime_import = amdgpu_gem_prime_import,
871 .gem_prime_pin = amdgpu_gem_prime_pin,
872 .gem_prime_unpin = amdgpu_gem_prime_unpin,
873 .gem_prime_res_obj = amdgpu_gem_prime_res_obj, 886 .gem_prime_res_obj = amdgpu_gem_prime_res_obj,
874 .gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table, 887 .gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
875 .gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table, 888 .gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,