diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/Kconfig | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/Makefile | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 59 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 105 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.h | 33 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 26 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 29 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 97 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/soc15.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vi.c | 21 |
17 files changed, 376 insertions, 75 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/amdgpu/Kconfig index 26682454a446..e8af1f5e8a79 100644 --- a/drivers/gpu/drm/amd/amdgpu/Kconfig +++ b/drivers/gpu/drm/amd/amdgpu/Kconfig | |||
@@ -41,3 +41,4 @@ config DRM_AMDGPU_GART_DEBUGFS | |||
41 | pages. Uses more memory for housekeeping, enable only for debugging. | 41 | pages. Uses more memory for housekeeping, enable only for debugging. |
42 | 42 | ||
43 | source "drivers/gpu/drm/amd/acp/Kconfig" | 43 | source "drivers/gpu/drm/amd/acp/Kconfig" |
44 | source "drivers/gpu/drm/amd/display/Kconfig" | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index 7fc42e077770..78d609123420 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile | |||
@@ -4,13 +4,19 @@ | |||
4 | # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. | 4 | # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. |
5 | 5 | ||
6 | FULL_AMD_PATH=$(src)/.. | 6 | FULL_AMD_PATH=$(src)/.. |
7 | DISPLAY_FOLDER_NAME=display | ||
8 | FULL_AMD_DISPLAY_PATH = $(FULL_AMD_PATH)/$(DISPLAY_FOLDER_NAME) | ||
7 | 9 | ||
8 | ccflags-y := -I$(FULL_AMD_PATH)/include/asic_reg \ | 10 | ccflags-y := -I$(FULL_AMD_PATH)/include/asic_reg \ |
9 | -I$(FULL_AMD_PATH)/include \ | 11 | -I$(FULL_AMD_PATH)/include \ |
10 | -I$(FULL_AMD_PATH)/amdgpu \ | 12 | -I$(FULL_AMD_PATH)/amdgpu \ |
11 | -I$(FULL_AMD_PATH)/scheduler \ | 13 | -I$(FULL_AMD_PATH)/scheduler \ |
12 | -I$(FULL_AMD_PATH)/powerplay/inc \ | 14 | -I$(FULL_AMD_PATH)/powerplay/inc \ |
13 | -I$(FULL_AMD_PATH)/acp/include | 15 | -I$(FULL_AMD_PATH)/acp/include \ |
16 | -I$(FULL_AMD_DISPLAY_PATH) \ | ||
17 | -I$(FULL_AMD_DISPLAY_PATH)/include \ | ||
18 | -I$(FULL_AMD_DISPLAY_PATH)/dc \ | ||
19 | -I$(FULL_AMD_DISPLAY_PATH)/amdgpu_dm | ||
14 | 20 | ||
15 | amdgpu-y := amdgpu_drv.o | 21 | amdgpu-y := amdgpu_drv.o |
16 | 22 | ||
@@ -133,4 +139,13 @@ include $(FULL_AMD_PATH)/powerplay/Makefile | |||
133 | 139 | ||
134 | amdgpu-y += $(AMD_POWERPLAY_FILES) | 140 | amdgpu-y += $(AMD_POWERPLAY_FILES) |
135 | 141 | ||
142 | ifneq ($(CONFIG_DRM_AMD_DC),) | ||
143 | |||
144 | RELATIVE_AMD_DISPLAY_PATH = ../$(DISPLAY_FOLDER_NAME) | ||
145 | include $(FULL_AMD_DISPLAY_PATH)/Makefile | ||
146 | |||
147 | amdgpu-y += $(AMD_DISPLAY_FILES) | ||
148 | |||
149 | endif | ||
150 | |||
136 | obj-$(CONFIG_DRM_AMDGPU)+= amdgpu.o | 151 | obj-$(CONFIG_DRM_AMDGPU)+= amdgpu.o |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index cbcb6a153aba..5afaf6016b4a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -66,6 +66,7 @@ | |||
66 | #include "amdgpu_vce.h" | 66 | #include "amdgpu_vce.h" |
67 | #include "amdgpu_vcn.h" | 67 | #include "amdgpu_vcn.h" |
68 | #include "amdgpu_mn.h" | 68 | #include "amdgpu_mn.h" |
69 | #include "amdgpu_dm.h" | ||
69 | 70 | ||
70 | #include "gpu_scheduler.h" | 71 | #include "gpu_scheduler.h" |
71 | #include "amdgpu_virt.h" | 72 | #include "amdgpu_virt.h" |
@@ -101,6 +102,8 @@ extern int amdgpu_vm_fragment_size; | |||
101 | extern int amdgpu_vm_fault_stop; | 102 | extern int amdgpu_vm_fault_stop; |
102 | extern int amdgpu_vm_debug; | 103 | extern int amdgpu_vm_debug; |
103 | extern int amdgpu_vm_update_mode; | 104 | extern int amdgpu_vm_update_mode; |
105 | extern int amdgpu_dc; | ||
106 | extern int amdgpu_dc_log; | ||
104 | extern int amdgpu_sched_jobs; | 107 | extern int amdgpu_sched_jobs; |
105 | extern int amdgpu_sched_hw_submission; | 108 | extern int amdgpu_sched_hw_submission; |
106 | extern int amdgpu_no_evict; | 109 | extern int amdgpu_no_evict; |
@@ -1535,6 +1538,7 @@ struct amdgpu_device { | |||
1535 | /* display */ | 1538 | /* display */ |
1536 | bool enable_virtual_display; | 1539 | bool enable_virtual_display; |
1537 | struct amdgpu_mode_info mode_info; | 1540 | struct amdgpu_mode_info mode_info; |
1541 | /* For pre-DCE11. DCE11 and later are in "struct amdgpu_device->dm" */ | ||
1538 | struct work_struct hotplug_work; | 1542 | struct work_struct hotplug_work; |
1539 | struct amdgpu_irq_src crtc_irq; | 1543 | struct amdgpu_irq_src crtc_irq; |
1540 | struct amdgpu_irq_src pageflip_irq; | 1544 | struct amdgpu_irq_src pageflip_irq; |
@@ -1590,6 +1594,9 @@ struct amdgpu_device { | |||
1590 | /* GDS */ | 1594 | /* GDS */ |
1591 | struct amdgpu_gds gds; | 1595 | struct amdgpu_gds gds; |
1592 | 1596 | ||
1597 | /* display related functionality */ | ||
1598 | struct amdgpu_display_manager dm; | ||
1599 | |||
1593 | struct amdgpu_ip_block ip_blocks[AMDGPU_MAX_IP_NUM]; | 1600 | struct amdgpu_ip_block ip_blocks[AMDGPU_MAX_IP_NUM]; |
1594 | int num_ip_blocks; | 1601 | int num_ip_blocks; |
1595 | struct mutex mn_lock; | 1602 | struct mutex mn_lock; |
@@ -1653,6 +1660,9 @@ void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v); | |||
1653 | u64 amdgpu_mm_rdoorbell64(struct amdgpu_device *adev, u32 index); | 1660 | u64 amdgpu_mm_rdoorbell64(struct amdgpu_device *adev, u32 index); |
1654 | void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v); | 1661 | void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v); |
1655 | 1662 | ||
1663 | bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type); | ||
1664 | bool amdgpu_device_has_dc_support(struct amdgpu_device *adev); | ||
1665 | |||
1656 | /* | 1666 | /* |
1657 | * Registers read & write functions. | 1667 | * Registers read & write functions. |
1658 | */ | 1668 | */ |
@@ -1911,5 +1921,11 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, | |||
1911 | uint64_t addr, struct amdgpu_bo **bo, | 1921 | uint64_t addr, struct amdgpu_bo **bo, |
1912 | struct amdgpu_bo_va_mapping **mapping); | 1922 | struct amdgpu_bo_va_mapping **mapping); |
1913 | 1923 | ||
1924 | #if defined(CONFIG_DRM_AMD_DC) | ||
1925 | int amdgpu_dm_display_resume(struct amdgpu_device *adev ); | ||
1926 | #else | ||
1927 | static inline int amdgpu_dm_display_resume(struct amdgpu_device *adev) { return 0; } | ||
1928 | #endif | ||
1929 | |||
1914 | #include "amdgpu_object.h" | 1930 | #include "amdgpu_object.h" |
1915 | #endif | 1931 | #endif |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c index a7afe553e0a1..f2b72c7c6857 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | |||
@@ -911,10 +911,6 @@ static int amdgpu_cgs_get_active_displays_info(struct cgs_device *cgs_device, | |||
911 | struct cgs_display_info *info) | 911 | struct cgs_display_info *info) |
912 | { | 912 | { |
913 | CGS_FUNC_ADEV; | 913 | CGS_FUNC_ADEV; |
914 | struct amdgpu_crtc *amdgpu_crtc; | ||
915 | struct drm_device *ddev = adev->ddev; | ||
916 | struct drm_crtc *crtc; | ||
917 | uint32_t line_time_us, vblank_lines; | ||
918 | struct cgs_mode_info *mode_info; | 914 | struct cgs_mode_info *mode_info; |
919 | 915 | ||
920 | if (info == NULL) | 916 | if (info == NULL) |
@@ -928,30 +924,43 @@ static int amdgpu_cgs_get_active_displays_info(struct cgs_device *cgs_device, | |||
928 | mode_info->ref_clock = adev->clock.spll.reference_freq; | 924 | mode_info->ref_clock = adev->clock.spll.reference_freq; |
929 | } | 925 | } |
930 | 926 | ||
931 | if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) { | 927 | if (!amdgpu_device_has_dc_support(adev)) { |
932 | list_for_each_entry(crtc, | 928 | struct amdgpu_crtc *amdgpu_crtc; |
933 | &ddev->mode_config.crtc_list, head) { | 929 | struct drm_device *ddev = adev->ddev; |
934 | amdgpu_crtc = to_amdgpu_crtc(crtc); | 930 | struct drm_crtc *crtc; |
935 | if (crtc->enabled) { | 931 | uint32_t line_time_us, vblank_lines; |
936 | info->active_display_mask |= (1 << amdgpu_crtc->crtc_id); | 932 | |
937 | info->display_count++; | 933 | if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) { |
938 | } | 934 | list_for_each_entry(crtc, |
939 | if (mode_info != NULL && | 935 | &ddev->mode_config.crtc_list, head) { |
940 | crtc->enabled && amdgpu_crtc->enabled && | 936 | amdgpu_crtc = to_amdgpu_crtc(crtc); |
941 | amdgpu_crtc->hw_mode.clock) { | 937 | if (crtc->enabled) { |
942 | line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) / | 938 | info->active_display_mask |= (1 << amdgpu_crtc->crtc_id); |
943 | amdgpu_crtc->hw_mode.clock; | 939 | info->display_count++; |
944 | vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end - | 940 | } |
945 | amdgpu_crtc->hw_mode.crtc_vdisplay + | 941 | if (mode_info != NULL && |
946 | (amdgpu_crtc->v_border * 2); | 942 | crtc->enabled && amdgpu_crtc->enabled && |
947 | mode_info->vblank_time_us = vblank_lines * line_time_us; | 943 | amdgpu_crtc->hw_mode.clock) { |
948 | mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode); | 944 | line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) / |
949 | mode_info->ref_clock = adev->clock.spll.reference_freq; | 945 | amdgpu_crtc->hw_mode.clock; |
950 | mode_info = NULL; | 946 | vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end - |
947 | amdgpu_crtc->hw_mode.crtc_vdisplay + | ||
948 | (amdgpu_crtc->v_border * 2); | ||
949 | mode_info->vblank_time_us = vblank_lines * line_time_us; | ||
950 | mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode); | ||
951 | mode_info->ref_clock = adev->clock.spll.reference_freq; | ||
952 | mode_info = NULL; | ||
953 | } | ||
951 | } | 954 | } |
952 | } | 955 | } |
956 | } else { | ||
957 | info->display_count = adev->pm.pm_display_cfg.num_display; | ||
958 | if (mode_info != NULL) { | ||
959 | mode_info->vblank_time_us = adev->pm.pm_display_cfg.min_vblank_time; | ||
960 | mode_info->refresh_rate = adev->pm.pm_display_cfg.vrefresh; | ||
961 | mode_info->ref_clock = adev->clock.spll.reference_freq; | ||
962 | } | ||
953 | } | 963 | } |
954 | |||
955 | return 0; | 964 | return 0; |
956 | } | 965 | } |
957 | 966 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index efcacb827de7..2d792cdc094c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/debugfs.h> | 31 | #include <linux/debugfs.h> |
32 | #include <drm/drmP.h> | 32 | #include <drm/drmP.h> |
33 | #include <drm/drm_crtc_helper.h> | 33 | #include <drm/drm_crtc_helper.h> |
34 | #include <drm/drm_atomic_helper.h> | ||
34 | #include <drm/amdgpu_drm.h> | 35 | #include <drm/amdgpu_drm.h> |
35 | #include <linux/vgaarb.h> | 36 | #include <linux/vgaarb.h> |
36 | #include <linux/vga_switcheroo.h> | 37 | #include <linux/vga_switcheroo.h> |
@@ -2046,6 +2047,52 @@ static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev) | |||
2046 | } | 2047 | } |
2047 | } | 2048 | } |
2048 | 2049 | ||
2050 | bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type) | ||
2051 | { | ||
2052 | switch (asic_type) { | ||
2053 | #if defined(CONFIG_DRM_AMD_DC) | ||
2054 | case CHIP_BONAIRE: | ||
2055 | case CHIP_HAWAII: | ||
2056 | case CHIP_KAVERI: | ||
2057 | case CHIP_CARRIZO: | ||
2058 | case CHIP_STONEY: | ||
2059 | case CHIP_POLARIS11: | ||
2060 | case CHIP_POLARIS10: | ||
2061 | case CHIP_POLARIS12: | ||
2062 | case CHIP_TONGA: | ||
2063 | case CHIP_FIJI: | ||
2064 | #if defined(CONFIG_DRM_AMD_DC_PRE_VEGA) | ||
2065 | return amdgpu_dc != 0; | ||
2066 | #endif | ||
2067 | case CHIP_KABINI: | ||
2068 | case CHIP_MULLINS: | ||
2069 | return amdgpu_dc > 0; | ||
2070 | case CHIP_VEGA10: | ||
2071 | #if defined(CONFIG_DRM_AMD_DC_DCN1_0) | ||
2072 | case CHIP_RAVEN: | ||
2073 | #endif | ||
2074 | return amdgpu_dc != 0; | ||
2075 | #endif | ||
2076 | default: | ||
2077 | return false; | ||
2078 | } | ||
2079 | } | ||
2080 | |||
2081 | /** | ||
2082 | * amdgpu_device_has_dc_support - check if dc is supported | ||
2083 | * | ||
2084 | * @adev: amdgpu_device_pointer | ||
2085 | * | ||
2086 | * Returns true for supported, false for not supported | ||
2087 | */ | ||
2088 | bool amdgpu_device_has_dc_support(struct amdgpu_device *adev) | ||
2089 | { | ||
2090 | if (amdgpu_sriov_vf(adev)) | ||
2091 | return false; | ||
2092 | |||
2093 | return amdgpu_device_asic_has_dc_support(adev->asic_type); | ||
2094 | } | ||
2095 | |||
2049 | /** | 2096 | /** |
2050 | * amdgpu_device_init - initialize the driver | 2097 | * amdgpu_device_init - initialize the driver |
2051 | * | 2098 | * |
@@ -2100,7 +2147,6 @@ int amdgpu_device_init(struct amdgpu_device *adev, | |||
2100 | adev->audio_endpt_rreg = &amdgpu_block_invalid_rreg; | 2147 | adev->audio_endpt_rreg = &amdgpu_block_invalid_rreg; |
2101 | adev->audio_endpt_wreg = &amdgpu_block_invalid_wreg; | 2148 | adev->audio_endpt_wreg = &amdgpu_block_invalid_wreg; |
2102 | 2149 | ||
2103 | |||
2104 | DRM_INFO("initializing kernel modesetting (%s 0x%04X:0x%04X 0x%04X:0x%04X 0x%02X).\n", | 2150 | DRM_INFO("initializing kernel modesetting (%s 0x%04X:0x%04X 0x%04X:0x%04X 0x%02X).\n", |
2105 | amdgpu_asic_name[adev->asic_type], pdev->vendor, pdev->device, | 2151 | amdgpu_asic_name[adev->asic_type], pdev->vendor, pdev->device, |
2106 | pdev->subsystem_vendor, pdev->subsystem_device, pdev->revision); | 2152 | pdev->subsystem_vendor, pdev->subsystem_device, pdev->revision); |
@@ -2242,7 +2288,8 @@ int amdgpu_device_init(struct amdgpu_device *adev, | |||
2242 | goto failed; | 2288 | goto failed; |
2243 | } | 2289 | } |
2244 | /* init i2c buses */ | 2290 | /* init i2c buses */ |
2245 | amdgpu_atombios_i2c_init(adev); | 2291 | if (!amdgpu_device_has_dc_support(adev)) |
2292 | amdgpu_atombios_i2c_init(adev); | ||
2246 | } | 2293 | } |
2247 | 2294 | ||
2248 | /* Fence driver */ | 2295 | /* Fence driver */ |
@@ -2378,7 +2425,8 @@ void amdgpu_device_fini(struct amdgpu_device *adev) | |||
2378 | adev->accel_working = false; | 2425 | adev->accel_working = false; |
2379 | cancel_delayed_work_sync(&adev->late_init_work); | 2426 | cancel_delayed_work_sync(&adev->late_init_work); |
2380 | /* free i2c buses */ | 2427 | /* free i2c buses */ |
2381 | amdgpu_i2c_fini(adev); | 2428 | if (!amdgpu_device_has_dc_support(adev)) |
2429 | amdgpu_i2c_fini(adev); | ||
2382 | amdgpu_atombios_fini(adev); | 2430 | amdgpu_atombios_fini(adev); |
2383 | kfree(adev->bios); | 2431 | kfree(adev->bios); |
2384 | adev->bios = NULL; | 2432 | adev->bios = NULL; |
@@ -2429,12 +2477,14 @@ int amdgpu_device_suspend(struct drm_device *dev, bool suspend, bool fbcon) | |||
2429 | 2477 | ||
2430 | drm_kms_helper_poll_disable(dev); | 2478 | drm_kms_helper_poll_disable(dev); |
2431 | 2479 | ||
2432 | /* turn off display hw */ | 2480 | if (!amdgpu_device_has_dc_support(adev)) { |
2433 | drm_modeset_lock_all(dev); | 2481 | /* turn off display hw */ |
2434 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | 2482 | drm_modeset_lock_all(dev); |
2435 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); | 2483 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
2484 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); | ||
2485 | } | ||
2486 | drm_modeset_unlock_all(dev); | ||
2436 | } | 2487 | } |
2437 | drm_modeset_unlock_all(dev); | ||
2438 | 2488 | ||
2439 | amdgpu_amdkfd_suspend(adev); | 2489 | amdgpu_amdkfd_suspend(adev); |
2440 | 2490 | ||
@@ -2577,13 +2627,25 @@ int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon) | |||
2577 | 2627 | ||
2578 | /* blat the mode back in */ | 2628 | /* blat the mode back in */ |
2579 | if (fbcon) { | 2629 | if (fbcon) { |
2580 | drm_helper_resume_force_mode(dev); | 2630 | if (!amdgpu_device_has_dc_support(adev)) { |
2581 | /* turn on display hw */ | 2631 | /* pre DCE11 */ |
2582 | drm_modeset_lock_all(dev); | 2632 | drm_helper_resume_force_mode(dev); |
2583 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | 2633 | |
2584 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); | 2634 | /* turn on display hw */ |
2635 | drm_modeset_lock_all(dev); | ||
2636 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
2637 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); | ||
2638 | } | ||
2639 | drm_modeset_unlock_all(dev); | ||
2640 | } else { | ||
2641 | /* | ||
2642 | * There is no equivalent atomic helper to turn on | ||
2643 | * display, so we defined our own function for this, | ||
2644 | * once suspend resume is supported by the atomic | ||
2645 | * framework this will be reworked | ||
2646 | */ | ||
2647 | amdgpu_dm_display_resume(adev); | ||
2585 | } | 2648 | } |
2586 | drm_modeset_unlock_all(dev); | ||
2587 | } | 2649 | } |
2588 | 2650 | ||
2589 | drm_kms_helper_poll_enable(dev); | 2651 | drm_kms_helper_poll_enable(dev); |
@@ -2600,7 +2662,10 @@ int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon) | |||
2600 | #ifdef CONFIG_PM | 2662 | #ifdef CONFIG_PM |
2601 | dev->dev->power.disable_depth++; | 2663 | dev->dev->power.disable_depth++; |
2602 | #endif | 2664 | #endif |
2603 | drm_helper_hpd_irq_event(dev); | 2665 | if (!amdgpu_device_has_dc_support(adev)) |
2666 | drm_helper_hpd_irq_event(dev); | ||
2667 | else | ||
2668 | drm_kms_helper_hotplug_event(dev); | ||
2604 | #ifdef CONFIG_PM | 2669 | #ifdef CONFIG_PM |
2605 | dev->dev->power.disable_depth--; | 2670 | dev->dev->power.disable_depth--; |
2606 | #endif | 2671 | #endif |
@@ -2900,6 +2965,7 @@ give_up_reset: | |||
2900 | */ | 2965 | */ |
2901 | int amdgpu_gpu_reset(struct amdgpu_device *adev) | 2966 | int amdgpu_gpu_reset(struct amdgpu_device *adev) |
2902 | { | 2967 | { |
2968 | struct drm_atomic_state *state = NULL; | ||
2903 | int i, r; | 2969 | int i, r; |
2904 | int resched; | 2970 | int resched; |
2905 | bool need_full_reset, vram_lost = false; | 2971 | bool need_full_reset, vram_lost = false; |
@@ -2913,6 +2979,9 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev) | |||
2913 | 2979 | ||
2914 | /* block TTM */ | 2980 | /* block TTM */ |
2915 | resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev); | 2981 | resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev); |
2982 | /* store modesetting */ | ||
2983 | if (amdgpu_device_has_dc_support(adev)) | ||
2984 | state = drm_atomic_helper_suspend(adev->ddev); | ||
2916 | 2985 | ||
2917 | /* block scheduler */ | 2986 | /* block scheduler */ |
2918 | for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { | 2987 | for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { |
@@ -3029,7 +3098,11 @@ out: | |||
3029 | } | 3098 | } |
3030 | } | 3099 | } |
3031 | 3100 | ||
3032 | drm_helper_resume_force_mode(adev->ddev); | 3101 | if (amdgpu_device_has_dc_support(adev)) { |
3102 | r = drm_atomic_helper_resume(adev->ddev, state); | ||
3103 | amdgpu_dm_display_resume(adev); | ||
3104 | } else | ||
3105 | drm_helper_resume_force_mode(adev->ddev); | ||
3033 | 3106 | ||
3034 | ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched); | 3107 | ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched); |
3035 | if (r) { | 3108 | if (r) { |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 6ad243293a78..138beb550a58 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | |||
@@ -518,7 +518,7 @@ amdgpu_framebuffer_init(struct drm_device *dev, | |||
518 | return 0; | 518 | return 0; |
519 | } | 519 | } |
520 | 520 | ||
521 | static struct drm_framebuffer * | 521 | struct drm_framebuffer * |
522 | amdgpu_user_framebuffer_create(struct drm_device *dev, | 522 | amdgpu_user_framebuffer_create(struct drm_device *dev, |
523 | struct drm_file *file_priv, | 523 | struct drm_file *file_priv, |
524 | const struct drm_mode_fb_cmd2 *mode_cmd) | 524 | const struct drm_mode_fb_cmd2 *mode_cmd) |
@@ -556,7 +556,7 @@ amdgpu_user_framebuffer_create(struct drm_device *dev, | |||
556 | return &amdgpu_fb->base; | 556 | return &amdgpu_fb->base; |
557 | } | 557 | } |
558 | 558 | ||
559 | static void amdgpu_output_poll_changed(struct drm_device *dev) | 559 | void amdgpu_output_poll_changed(struct drm_device *dev) |
560 | { | 560 | { |
561 | struct amdgpu_device *adev = dev->dev_private; | 561 | struct amdgpu_device *adev = dev->dev_private; |
562 | amdgpu_fb_output_poll_changed(adev); | 562 | amdgpu_fb_output_poll_changed(adev); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.h new file mode 100644 index 000000000000..3cc0ef0c055e --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | */ | ||
23 | #ifndef __AMDGPU_DISPLAY_H__ | ||
24 | #define __AMDGPU_DISPLAY_H__ | ||
25 | |||
26 | struct drm_framebuffer * | ||
27 | amdgpu_user_framebuffer_create(struct drm_device *dev, | ||
28 | struct drm_file *file_priv, | ||
29 | const struct drm_mode_fb_cmd2 *mode_cmd); | ||
30 | |||
31 | void amdgpu_output_poll_changed(struct drm_device *dev); | ||
32 | |||
33 | #endif | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h index 7279fb5c3abc..56caaeee6fea 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | |||
@@ -433,7 +433,7 @@ struct amdgpu_pm { | |||
433 | uint32_t fw_version; | 433 | uint32_t fw_version; |
434 | uint32_t pcie_gen_mask; | 434 | uint32_t pcie_gen_mask; |
435 | uint32_t pcie_mlw_mask; | 435 | uint32_t pcie_mlw_mask; |
436 | struct amd_pp_display_configuration pm_display_cfg;/* set by DAL */ | 436 | struct amd_pp_display_configuration pm_display_cfg;/* set by dc */ |
437 | }; | 437 | }; |
438 | 438 | ||
439 | #define R600_SSTU_DFLT 0 | 439 | #define R600_SSTU_DFLT 0 |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index dd2f060d62a8..ec96bb1f9eaf 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | |||
@@ -106,6 +106,8 @@ int amdgpu_vm_debug = 0; | |||
106 | int amdgpu_vram_page_split = 512; | 106 | int amdgpu_vram_page_split = 512; |
107 | int amdgpu_vm_update_mode = -1; | 107 | int amdgpu_vm_update_mode = -1; |
108 | int amdgpu_exp_hw_support = 0; | 108 | int amdgpu_exp_hw_support = 0; |
109 | int amdgpu_dc = -1; | ||
110 | int amdgpu_dc_log = 0; | ||
109 | int amdgpu_sched_jobs = 32; | 111 | int amdgpu_sched_jobs = 32; |
110 | int amdgpu_sched_hw_submission = 2; | 112 | int amdgpu_sched_hw_submission = 2; |
111 | int amdgpu_no_evict = 0; | 113 | int amdgpu_no_evict = 0; |
@@ -211,6 +213,12 @@ module_param_named(vram_page_split, amdgpu_vram_page_split, int, 0444); | |||
211 | MODULE_PARM_DESC(exp_hw_support, "experimental hw support (1 = enable, 0 = disable (default))"); | 213 | MODULE_PARM_DESC(exp_hw_support, "experimental hw support (1 = enable, 0 = disable (default))"); |
212 | module_param_named(exp_hw_support, amdgpu_exp_hw_support, int, 0444); | 214 | module_param_named(exp_hw_support, amdgpu_exp_hw_support, int, 0444); |
213 | 215 | ||
216 | MODULE_PARM_DESC(dc, "Display Core driver (1 = enable, 0 = disable, -1 = auto (default))"); | ||
217 | module_param_named(dc, amdgpu_dc, int, 0444); | ||
218 | |||
219 | MODULE_PARM_DESC(dc, "Display Core Log Level (0 = minimal (default), 1 = chatty"); | ||
220 | module_param_named(dc_log, amdgpu_dc_log, int, 0444); | ||
221 | |||
214 | MODULE_PARM_DESC(sched_jobs, "the max number of jobs supported in the sw queue (default 32)"); | 222 | MODULE_PARM_DESC(sched_jobs, "the max number of jobs supported in the sw queue (default 32)"); |
215 | module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444); | 223 | module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444); |
216 | 224 | ||
@@ -518,15 +526,15 @@ static const struct pci_device_id pciidlist[] = { | |||
518 | {0x1002, 0x6997, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, | 526 | {0x1002, 0x6997, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, |
519 | {0x1002, 0x699F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, | 527 | {0x1002, 0x699F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, |
520 | /* Vega 10 */ | 528 | /* Vega 10 */ |
521 | {0x1002, 0x6860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 529 | {0x1002, 0x6860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
522 | {0x1002, 0x6861, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 530 | {0x1002, 0x6861, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
523 | {0x1002, 0x6862, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 531 | {0x1002, 0x6862, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
524 | {0x1002, 0x6863, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 532 | {0x1002, 0x6863, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
525 | {0x1002, 0x6864, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 533 | {0x1002, 0x6864, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
526 | {0x1002, 0x6867, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 534 | {0x1002, 0x6867, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
527 | {0x1002, 0x6868, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 535 | {0x1002, 0x6868, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
528 | {0x1002, 0x686c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 536 | {0x1002, 0x686c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
529 | {0x1002, 0x687f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, | 537 | {0x1002, 0x687f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
530 | /* Raven */ | 538 | /* Raven */ |
531 | {0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU|AMD_EXP_HW_SUPPORT}, | 539 | {0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU|AMD_EXP_HW_SUPPORT}, |
532 | 540 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c index 562930b17a6d..90fa8e8bc6fb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | |||
@@ -42,11 +42,6 @@ | |||
42 | this contains a helper + a amdgpu fb | 42 | this contains a helper + a amdgpu fb |
43 | the helper contains a pointer to amdgpu framebuffer baseclass. | 43 | the helper contains a pointer to amdgpu framebuffer baseclass. |
44 | */ | 44 | */ |
45 | struct amdgpu_fbdev { | ||
46 | struct drm_fb_helper helper; | ||
47 | struct amdgpu_framebuffer rfb; | ||
48 | struct amdgpu_device *adev; | ||
49 | }; | ||
50 | 45 | ||
51 | static int | 46 | static int |
52 | amdgpufb_open(struct fb_info *info, int user) | 47 | amdgpufb_open(struct fb_info *info, int user) |
@@ -353,7 +348,8 @@ int amdgpu_fbdev_init(struct amdgpu_device *adev) | |||
353 | drm_fb_helper_single_add_all_connectors(&rfbdev->helper); | 348 | drm_fb_helper_single_add_all_connectors(&rfbdev->helper); |
354 | 349 | ||
355 | /* disable all the possible outputs/crtcs before entering KMS mode */ | 350 | /* disable all the possible outputs/crtcs before entering KMS mode */ |
356 | drm_helper_disable_unused_functions(adev->ddev); | 351 | if (!amdgpu_device_has_dc_support(adev)) |
352 | drm_helper_disable_unused_functions(adev->ddev); | ||
357 | 353 | ||
358 | drm_fb_helper_initial_config(&rfbdev->helper, bpp_sel); | 354 | drm_fb_helper_initial_config(&rfbdev->helper, bpp_sel); |
359 | return 0; | 355 | return 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c index 538e5f27d120..47c5ce9807db 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | |||
@@ -37,6 +37,10 @@ | |||
37 | 37 | ||
38 | #include <linux/pm_runtime.h> | 38 | #include <linux/pm_runtime.h> |
39 | 39 | ||
40 | #ifdef CONFIG_DRM_AMD_DC | ||
41 | #include "amdgpu_dm_irq.h" | ||
42 | #endif | ||
43 | |||
40 | #define AMDGPU_WAIT_IDLE_TIMEOUT 200 | 44 | #define AMDGPU_WAIT_IDLE_TIMEOUT 200 |
41 | 45 | ||
42 | /* | 46 | /* |
@@ -221,15 +225,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev) | |||
221 | 225 | ||
222 | spin_lock_init(&adev->irq.lock); | 226 | spin_lock_init(&adev->irq.lock); |
223 | 227 | ||
224 | if (!adev->enable_virtual_display) | ||
225 | /* Disable vblank irqs aggressively for power-saving */ | ||
226 | adev->ddev->vblank_disable_immediate = true; | ||
227 | |||
228 | r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc); | ||
229 | if (r) { | ||
230 | return r; | ||
231 | } | ||
232 | |||
233 | /* enable msi */ | 228 | /* enable msi */ |
234 | adev->irq.msi_enabled = false; | 229 | adev->irq.msi_enabled = false; |
235 | 230 | ||
@@ -241,7 +236,21 @@ int amdgpu_irq_init(struct amdgpu_device *adev) | |||
241 | } | 236 | } |
242 | } | 237 | } |
243 | 238 | ||
244 | INIT_WORK(&adev->hotplug_work, amdgpu_hotplug_work_func); | 239 | if (!amdgpu_device_has_dc_support(adev)) { |
240 | if (!adev->enable_virtual_display) | ||
241 | /* Disable vblank irqs aggressively for power-saving */ | ||
242 | /* XXX: can this be enabled for DC? */ | ||
243 | adev->ddev->vblank_disable_immediate = true; | ||
244 | |||
245 | r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc); | ||
246 | if (r) | ||
247 | return r; | ||
248 | |||
249 | /* pre DCE11 */ | ||
250 | INIT_WORK(&adev->hotplug_work, | ||
251 | amdgpu_hotplug_work_func); | ||
252 | } | ||
253 | |||
245 | INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func); | 254 | INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func); |
246 | 255 | ||
247 | adev->irq.installed = true; | 256 | adev->irq.installed = true; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 6f0b26dae3b0..720139e182a3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |||
@@ -1030,7 +1030,7 @@ const struct drm_ioctl_desc amdgpu_ioctls_kms[] = { | |||
1030 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_METADATA, amdgpu_gem_metadata_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), | 1030 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_METADATA, amdgpu_gem_metadata_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), |
1031 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_VA, amdgpu_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), | 1031 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_VA, amdgpu_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), |
1032 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_OP, amdgpu_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), | 1032 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_OP, amdgpu_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), |
1033 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), | 1033 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW) |
1034 | }; | 1034 | }; |
1035 | const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms); | 1035 | const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms); |
1036 | 1036 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h index 2af2678ddaf6..ffde1e9666e8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | |||
@@ -38,11 +38,15 @@ | |||
38 | #include <drm/drm_crtc_helper.h> | 38 | #include <drm/drm_crtc_helper.h> |
39 | #include <drm/drm_fb_helper.h> | 39 | #include <drm/drm_fb_helper.h> |
40 | #include <drm/drm_plane_helper.h> | 40 | #include <drm/drm_plane_helper.h> |
41 | #include <drm/drm_fb_helper.h> | ||
41 | #include <linux/i2c.h> | 42 | #include <linux/i2c.h> |
42 | #include <linux/i2c-algo-bit.h> | 43 | #include <linux/i2c-algo-bit.h> |
43 | #include <linux/hrtimer.h> | 44 | #include <linux/hrtimer.h> |
44 | #include "amdgpu_irq.h" | 45 | #include "amdgpu_irq.h" |
45 | 46 | ||
47 | #include <drm/drm_dp_mst_helper.h> | ||
48 | #include "modules/inc/mod_freesync.h" | ||
49 | |||
46 | struct amdgpu_bo; | 50 | struct amdgpu_bo; |
47 | struct amdgpu_device; | 51 | struct amdgpu_device; |
48 | struct amdgpu_encoder; | 52 | struct amdgpu_encoder; |
@@ -53,9 +57,13 @@ struct amdgpu_hpd; | |||
53 | #define to_amdgpu_connector(x) container_of(x, struct amdgpu_connector, base) | 57 | #define to_amdgpu_connector(x) container_of(x, struct amdgpu_connector, base) |
54 | #define to_amdgpu_encoder(x) container_of(x, struct amdgpu_encoder, base) | 58 | #define to_amdgpu_encoder(x) container_of(x, struct amdgpu_encoder, base) |
55 | #define to_amdgpu_framebuffer(x) container_of(x, struct amdgpu_framebuffer, base) | 59 | #define to_amdgpu_framebuffer(x) container_of(x, struct amdgpu_framebuffer, base) |
60 | #define to_amdgpu_plane(x) container_of(x, struct amdgpu_plane, base) | ||
61 | |||
62 | #define to_dm_plane_state(x) container_of(x, struct dm_plane_state, base); | ||
56 | 63 | ||
57 | #define AMDGPU_MAX_HPD_PINS 6 | 64 | #define AMDGPU_MAX_HPD_PINS 6 |
58 | #define AMDGPU_MAX_CRTCS 6 | 65 | #define AMDGPU_MAX_CRTCS 6 |
66 | #define AMDGPU_MAX_PLANES 6 | ||
59 | #define AMDGPU_MAX_AFMT_BLOCKS 9 | 67 | #define AMDGPU_MAX_AFMT_BLOCKS 9 |
60 | 68 | ||
61 | enum amdgpu_rmx_type { | 69 | enum amdgpu_rmx_type { |
@@ -292,6 +300,30 @@ struct amdgpu_display_funcs { | |||
292 | uint16_t connector_object_id, | 300 | uint16_t connector_object_id, |
293 | struct amdgpu_hpd *hpd, | 301 | struct amdgpu_hpd *hpd, |
294 | struct amdgpu_router *router); | 302 | struct amdgpu_router *router); |
303 | /* it is used to enter or exit into free sync mode */ | ||
304 | int (*notify_freesync)(struct drm_device *dev, void *data, | ||
305 | struct drm_file *filp); | ||
306 | /* it is used to allow enablement of freesync mode */ | ||
307 | int (*set_freesync_property)(struct drm_connector *connector, | ||
308 | struct drm_property *property, | ||
309 | uint64_t val); | ||
310 | |||
311 | |||
312 | }; | ||
313 | |||
314 | struct amdgpu_framebuffer { | ||
315 | struct drm_framebuffer base; | ||
316 | struct drm_gem_object *obj; | ||
317 | |||
318 | /* caching for later use */ | ||
319 | uint64_t address; | ||
320 | }; | ||
321 | |||
322 | struct amdgpu_fbdev { | ||
323 | struct drm_fb_helper helper; | ||
324 | struct amdgpu_framebuffer rfb; | ||
325 | struct list_head fbdev_list; | ||
326 | struct amdgpu_device *adev; | ||
295 | }; | 327 | }; |
296 | 328 | ||
297 | struct amdgpu_mode_info { | 329 | struct amdgpu_mode_info { |
@@ -299,6 +331,7 @@ struct amdgpu_mode_info { | |||
299 | struct card_info *atom_card_info; | 331 | struct card_info *atom_card_info; |
300 | bool mode_config_initialized; | 332 | bool mode_config_initialized; |
301 | struct amdgpu_crtc *crtcs[AMDGPU_MAX_CRTCS]; | 333 | struct amdgpu_crtc *crtcs[AMDGPU_MAX_CRTCS]; |
334 | struct amdgpu_plane *planes[AMDGPU_MAX_PLANES]; | ||
302 | struct amdgpu_afmt *afmt[AMDGPU_MAX_AFMT_BLOCKS]; | 335 | struct amdgpu_afmt *afmt[AMDGPU_MAX_AFMT_BLOCKS]; |
303 | /* DVI-I properties */ | 336 | /* DVI-I properties */ |
304 | struct drm_property *coherent_mode_property; | 337 | struct drm_property *coherent_mode_property; |
@@ -328,6 +361,7 @@ struct amdgpu_mode_info { | |||
328 | int num_dig; /* number of dig blocks */ | 361 | int num_dig; /* number of dig blocks */ |
329 | int disp_priority; | 362 | int disp_priority; |
330 | const struct amdgpu_display_funcs *funcs; | 363 | const struct amdgpu_display_funcs *funcs; |
364 | const enum drm_plane_type *plane_type; | ||
331 | }; | 365 | }; |
332 | 366 | ||
333 | #define AMDGPU_MAX_BL_LEVEL 0xFF | 367 | #define AMDGPU_MAX_BL_LEVEL 0xFF |
@@ -400,6 +434,14 @@ struct amdgpu_crtc { | |||
400 | /* for virtual dce */ | 434 | /* for virtual dce */ |
401 | struct hrtimer vblank_timer; | 435 | struct hrtimer vblank_timer; |
402 | enum amdgpu_interrupt_state vsync_timer_enabled; | 436 | enum amdgpu_interrupt_state vsync_timer_enabled; |
437 | |||
438 | int otg_inst; | ||
439 | struct drm_pending_vblank_event *event; | ||
440 | }; | ||
441 | |||
442 | struct amdgpu_plane { | ||
443 | struct drm_plane base; | ||
444 | enum drm_plane_type plane_type; | ||
403 | }; | 445 | }; |
404 | 446 | ||
405 | struct amdgpu_encoder_atom_dig { | 447 | struct amdgpu_encoder_atom_dig { |
@@ -489,6 +531,19 @@ enum amdgpu_connector_dither { | |||
489 | AMDGPU_FMT_DITHER_ENABLE = 1, | 531 | AMDGPU_FMT_DITHER_ENABLE = 1, |
490 | }; | 532 | }; |
491 | 533 | ||
534 | struct amdgpu_dm_dp_aux { | ||
535 | struct drm_dp_aux aux; | ||
536 | struct ddc_service *ddc_service; | ||
537 | }; | ||
538 | |||
539 | struct amdgpu_i2c_adapter { | ||
540 | struct i2c_adapter base; | ||
541 | |||
542 | struct ddc_service *ddc_service; | ||
543 | }; | ||
544 | |||
545 | #define TO_DM_AUX(x) container_of((x), struct amdgpu_dm_dp_aux, aux) | ||
546 | |||
492 | struct amdgpu_connector { | 547 | struct amdgpu_connector { |
493 | struct drm_connector base; | 548 | struct drm_connector base; |
494 | uint32_t connector_id; | 549 | uint32_t connector_id; |
@@ -500,6 +555,14 @@ struct amdgpu_connector { | |||
500 | /* we need to mind the EDID between detect | 555 | /* we need to mind the EDID between detect |
501 | and get modes due to analog/digital/tvencoder */ | 556 | and get modes due to analog/digital/tvencoder */ |
502 | struct edid *edid; | 557 | struct edid *edid; |
558 | /* number of modes generated from EDID at 'dc_sink' */ | ||
559 | int num_modes; | ||
560 | /* The 'old' sink - before an HPD. | ||
561 | * The 'current' sink is in dc_link->sink. */ | ||
562 | struct dc_sink *dc_sink; | ||
563 | struct dc_link *dc_link; | ||
564 | struct dc_sink *dc_em_sink; | ||
565 | const struct dc_stream *stream; | ||
503 | void *con_priv; | 566 | void *con_priv; |
504 | bool dac_load_detect; | 567 | bool dac_load_detect; |
505 | bool detected_by_load; /* if the connection status was determined by load */ | 568 | bool detected_by_load; /* if the connection status was determined by load */ |
@@ -510,11 +573,39 @@ struct amdgpu_connector { | |||
510 | enum amdgpu_connector_audio audio; | 573 | enum amdgpu_connector_audio audio; |
511 | enum amdgpu_connector_dither dither; | 574 | enum amdgpu_connector_dither dither; |
512 | unsigned pixelclock_for_modeset; | 575 | unsigned pixelclock_for_modeset; |
576 | |||
577 | struct drm_dp_mst_topology_mgr mst_mgr; | ||
578 | struct amdgpu_dm_dp_aux dm_dp_aux; | ||
579 | struct drm_dp_mst_port *port; | ||
580 | struct amdgpu_connector *mst_port; | ||
581 | struct amdgpu_encoder *mst_encoder; | ||
582 | struct semaphore mst_sem; | ||
583 | |||
584 | /* TODO see if we can merge with ddc_bus or make a dm_connector */ | ||
585 | struct amdgpu_i2c_adapter *i2c; | ||
586 | |||
587 | /* Monitor range limits */ | ||
588 | int min_vfreq ; | ||
589 | int max_vfreq ; | ||
590 | int pixel_clock_mhz; | ||
591 | |||
592 | /*freesync caps*/ | ||
593 | struct mod_freesync_caps caps; | ||
594 | |||
595 | struct mutex hpd_lock; | ||
596 | |||
513 | }; | 597 | }; |
514 | 598 | ||
515 | struct amdgpu_framebuffer { | 599 | /* TODO: start to use this struct and remove same field from base one */ |
516 | struct drm_framebuffer base; | 600 | struct amdgpu_mst_connector { |
517 | struct drm_gem_object *obj; | 601 | struct amdgpu_connector base; |
602 | |||
603 | struct drm_dp_mst_topology_mgr mst_mgr; | ||
604 | struct amdgpu_dm_dp_aux dm_dp_aux; | ||
605 | struct drm_dp_mst_port *port; | ||
606 | struct amdgpu_connector *mst_port; | ||
607 | bool is_mst_connector; | ||
608 | struct amdgpu_encoder *mst_encoder; | ||
518 | }; | 609 | }; |
519 | 610 | ||
520 | #define ENCODER_MODE_IS_DP(em) (((em) == ATOM_ENCODER_MODE_DP) || \ | 611 | #define ENCODER_MODE_IS_DP(em) (((em) == ATOM_ENCODER_MODE_DP) || \ |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index a59e04f3eeba..d6df5728df7f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |||
@@ -1466,7 +1466,7 @@ void amdgpu_pm_compute_clocks(struct amdgpu_device *adev) | |||
1466 | list_for_each_entry(crtc, | 1466 | list_for_each_entry(crtc, |
1467 | &ddev->mode_config.crtc_list, head) { | 1467 | &ddev->mode_config.crtc_list, head) { |
1468 | amdgpu_crtc = to_amdgpu_crtc(crtc); | 1468 | amdgpu_crtc = to_amdgpu_crtc(crtc); |
1469 | if (crtc->enabled) { | 1469 | if (amdgpu_crtc->enabled) { |
1470 | adev->pm.dpm.new_active_crtcs |= (1 << amdgpu_crtc->crtc_id); | 1470 | adev->pm.dpm.new_active_crtcs |= (1 << amdgpu_crtc->crtc_id); |
1471 | adev->pm.dpm.new_active_crtc_count++; | 1471 | adev->pm.dpm.new_active_crtc_count++; |
1472 | } | 1472 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index 567c4a5cf90c..793b1470284d 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c | |||
@@ -65,6 +65,7 @@ | |||
65 | #include "oss/oss_2_0_d.h" | 65 | #include "oss/oss_2_0_d.h" |
66 | #include "oss/oss_2_0_sh_mask.h" | 66 | #include "oss/oss_2_0_sh_mask.h" |
67 | 67 | ||
68 | #include "amdgpu_dm.h" | ||
68 | #include "amdgpu_amdkfd.h" | 69 | #include "amdgpu_amdkfd.h" |
69 | #include "amdgpu_powerplay.h" | 70 | #include "amdgpu_powerplay.h" |
70 | #include "dce_virtual.h" | 71 | #include "dce_virtual.h" |
@@ -1900,6 +1901,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev) | |||
1900 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1901 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1901 | if (adev->enable_virtual_display) | 1902 | if (adev->enable_virtual_display) |
1902 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1903 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1904 | #if defined(CONFIG_DRM_AMD_DC) | ||
1905 | else if (amdgpu_device_has_dc_support(adev)) | ||
1906 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1907 | #endif | ||
1903 | else | 1908 | else |
1904 | amdgpu_ip_block_add(adev, &dce_v8_2_ip_block); | 1909 | amdgpu_ip_block_add(adev, &dce_v8_2_ip_block); |
1905 | amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); | 1910 | amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); |
@@ -1914,6 +1919,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev) | |||
1914 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1919 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1915 | if (adev->enable_virtual_display) | 1920 | if (adev->enable_virtual_display) |
1916 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1921 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1922 | #if defined(CONFIG_DRM_AMD_DC) | ||
1923 | else if (amdgpu_device_has_dc_support(adev)) | ||
1924 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1925 | #endif | ||
1917 | else | 1926 | else |
1918 | amdgpu_ip_block_add(adev, &dce_v8_5_ip_block); | 1927 | amdgpu_ip_block_add(adev, &dce_v8_5_ip_block); |
1919 | amdgpu_ip_block_add(adev, &gfx_v7_3_ip_block); | 1928 | amdgpu_ip_block_add(adev, &gfx_v7_3_ip_block); |
@@ -1928,6 +1937,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev) | |||
1928 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1937 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1929 | if (adev->enable_virtual_display) | 1938 | if (adev->enable_virtual_display) |
1930 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1939 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1940 | #if defined(CONFIG_DRM_AMD_DC) | ||
1941 | else if (amdgpu_device_has_dc_support(adev)) | ||
1942 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1943 | #endif | ||
1931 | else | 1944 | else |
1932 | amdgpu_ip_block_add(adev, &dce_v8_1_ip_block); | 1945 | amdgpu_ip_block_add(adev, &dce_v8_1_ip_block); |
1933 | amdgpu_ip_block_add(adev, &gfx_v7_1_ip_block); | 1946 | amdgpu_ip_block_add(adev, &gfx_v7_1_ip_block); |
@@ -1943,6 +1956,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev) | |||
1943 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1956 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1944 | if (adev->enable_virtual_display) | 1957 | if (adev->enable_virtual_display) |
1945 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1958 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1959 | #if defined(CONFIG_DRM_AMD_DC) | ||
1960 | else if (amdgpu_device_has_dc_support(adev)) | ||
1961 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1962 | #endif | ||
1946 | else | 1963 | else |
1947 | amdgpu_ip_block_add(adev, &dce_v8_3_ip_block); | 1964 | amdgpu_ip_block_add(adev, &dce_v8_3_ip_block); |
1948 | amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); | 1965 | amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); |
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c index 3ca9d114f630..4e67fe1e7955 100644 --- a/drivers/gpu/drm/amd/amdgpu/soc15.c +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c | |||
@@ -532,6 +532,12 @@ int soc15_set_ip_blocks(struct amdgpu_device *adev) | |||
532 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 532 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
533 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) | 533 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) |
534 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 534 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
535 | #if defined(CONFIG_DRM_AMD_DC) | ||
536 | else if (amdgpu_device_has_dc_support(adev)) | ||
537 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
538 | #else | ||
539 | # warning "Enable CONFIG_DRM_AMD_DC for display support on SOC15." | ||
540 | #endif | ||
535 | amdgpu_ip_block_add(adev, &gfx_v9_0_ip_block); | 541 | amdgpu_ip_block_add(adev, &gfx_v9_0_ip_block); |
536 | amdgpu_ip_block_add(adev, &sdma_v4_0_ip_block); | 542 | amdgpu_ip_block_add(adev, &sdma_v4_0_ip_block); |
537 | amdgpu_ip_block_add(adev, &uvd_v7_0_ip_block); | 543 | amdgpu_ip_block_add(adev, &uvd_v7_0_ip_block); |
@@ -545,6 +551,12 @@ int soc15_set_ip_blocks(struct amdgpu_device *adev) | |||
545 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 551 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
546 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) | 552 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) |
547 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 553 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
554 | #if defined(CONFIG_DRM_AMD_DC) | ||
555 | else if (amdgpu_device_has_dc_support(adev)) | ||
556 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
557 | #else | ||
558 | # warning "Enable CONFIG_DRM_AMD_DC for display support on SOC15." | ||
559 | #endif | ||
548 | amdgpu_ip_block_add(adev, &gfx_v9_0_ip_block); | 560 | amdgpu_ip_block_add(adev, &gfx_v9_0_ip_block); |
549 | amdgpu_ip_block_add(adev, &sdma_v4_0_ip_block); | 561 | amdgpu_ip_block_add(adev, &sdma_v4_0_ip_block); |
550 | amdgpu_ip_block_add(adev, &vcn_v1_0_ip_block); | 562 | amdgpu_ip_block_add(adev, &vcn_v1_0_ip_block); |
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c index f3cfef48aa99..3a4c2fa7e36d 100644 --- a/drivers/gpu/drm/amd/amdgpu/vi.c +++ b/drivers/gpu/drm/amd/amdgpu/vi.c | |||
@@ -77,6 +77,7 @@ | |||
77 | #endif | 77 | #endif |
78 | #include "dce_virtual.h" | 78 | #include "dce_virtual.h" |
79 | #include "mxgpu_vi.h" | 79 | #include "mxgpu_vi.h" |
80 | #include "amdgpu_dm.h" | ||
80 | 81 | ||
81 | /* | 82 | /* |
82 | * Indirect registers accessor | 83 | * Indirect registers accessor |
@@ -1502,6 +1503,10 @@ int vi_set_ip_blocks(struct amdgpu_device *adev) | |||
1502 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1503 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1503 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) | 1504 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) |
1504 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1505 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1506 | #if defined(CONFIG_DRM_AMD_DC) | ||
1507 | else if (amdgpu_device_has_dc_support(adev)) | ||
1508 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1509 | #endif | ||
1505 | else | 1510 | else |
1506 | amdgpu_ip_block_add(adev, &dce_v10_1_ip_block); | 1511 | amdgpu_ip_block_add(adev, &dce_v10_1_ip_block); |
1507 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | 1512 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); |
@@ -1518,6 +1523,10 @@ int vi_set_ip_blocks(struct amdgpu_device *adev) | |||
1518 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1523 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1519 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) | 1524 | if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) |
1520 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1525 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1526 | #if defined(CONFIG_DRM_AMD_DC) | ||
1527 | else if (amdgpu_device_has_dc_support(adev)) | ||
1528 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1529 | #endif | ||
1521 | else | 1530 | else |
1522 | amdgpu_ip_block_add(adev, &dce_v10_0_ip_block); | 1531 | amdgpu_ip_block_add(adev, &dce_v10_0_ip_block); |
1523 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | 1532 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); |
@@ -1536,6 +1545,10 @@ int vi_set_ip_blocks(struct amdgpu_device *adev) | |||
1536 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1545 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1537 | if (adev->enable_virtual_display) | 1546 | if (adev->enable_virtual_display) |
1538 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1547 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1548 | #if defined(CONFIG_DRM_AMD_DC) | ||
1549 | else if (amdgpu_device_has_dc_support(adev)) | ||
1550 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1551 | #endif | ||
1539 | else | 1552 | else |
1540 | amdgpu_ip_block_add(adev, &dce_v11_2_ip_block); | 1553 | amdgpu_ip_block_add(adev, &dce_v11_2_ip_block); |
1541 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | 1554 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); |
@@ -1550,6 +1563,10 @@ int vi_set_ip_blocks(struct amdgpu_device *adev) | |||
1550 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1563 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1551 | if (adev->enable_virtual_display) | 1564 | if (adev->enable_virtual_display) |
1552 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1565 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1566 | #if defined(CONFIG_DRM_AMD_DC) | ||
1567 | else if (amdgpu_device_has_dc_support(adev)) | ||
1568 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1569 | #endif | ||
1553 | else | 1570 | else |
1554 | amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); | 1571 | amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); |
1555 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | 1572 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); |
@@ -1567,6 +1584,10 @@ int vi_set_ip_blocks(struct amdgpu_device *adev) | |||
1567 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | 1584 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); |
1568 | if (adev->enable_virtual_display) | 1585 | if (adev->enable_virtual_display) |
1569 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | 1586 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); |
1587 | #if defined(CONFIG_DRM_AMD_DC) | ||
1588 | else if (amdgpu_device_has_dc_support(adev)) | ||
1589 | amdgpu_ip_block_add(adev, &dm_ip_block); | ||
1590 | #endif | ||
1570 | else | 1591 | else |
1571 | amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); | 1592 | amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); |
1572 | amdgpu_ip_block_add(adev, &gfx_v8_1_ip_block); | 1593 | amdgpu_ip_block_add(adev, &gfx_v8_1_ip_block); |