diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 29 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vi.c | 2 |
5 files changed, 35 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 54f71565e6cc..46f250c80a31 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -92,7 +92,7 @@ extern unsigned amdgpu_cg_mask; | |||
92 | extern unsigned amdgpu_pg_mask; | 92 | extern unsigned amdgpu_pg_mask; |
93 | extern char *amdgpu_disable_cu; | 93 | extern char *amdgpu_disable_cu; |
94 | extern int amdgpu_sclk_deep_sleep_en; | 94 | extern int amdgpu_sclk_deep_sleep_en; |
95 | extern int amdgpu_virtual_display; | 95 | extern char *amdgpu_virtual_display; |
96 | 96 | ||
97 | #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 | 97 | #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 |
98 | #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ | 98 | #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ |
@@ -2072,6 +2072,7 @@ struct amdgpu_device { | |||
2072 | atomic_t gpu_reset_counter; | 2072 | atomic_t gpu_reset_counter; |
2073 | 2073 | ||
2074 | /* display */ | 2074 | /* display */ |
2075 | bool enable_virtual_display; | ||
2075 | struct amdgpu_mode_info mode_info; | 2076 | struct amdgpu_mode_info mode_info; |
2076 | struct work_struct hotplug_work; | 2077 | struct work_struct hotplug_work; |
2077 | struct amdgpu_irq_src crtc_irq; | 2078 | struct amdgpu_irq_src crtc_irq; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 4bf9bd96a46e..3751d262de68 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -46,6 +46,7 @@ | |||
46 | #endif | 46 | #endif |
47 | #include "vi.h" | 47 | #include "vi.h" |
48 | #include "bif/bif_4_1_d.h" | 48 | #include "bif/bif_4_1_d.h" |
49 | #include <linux/pci.h> | ||
49 | 50 | ||
50 | static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); | 51 | static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); |
51 | static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); | 52 | static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); |
@@ -1181,11 +1182,37 @@ int amdgpu_ip_block_version_cmp(struct amdgpu_device *adev, | |||
1181 | return 1; | 1182 | return 1; |
1182 | } | 1183 | } |
1183 | 1184 | ||
1185 | static void amdgpu_whether_enable_virtual_display(struct amdgpu_device *adev) | ||
1186 | { | ||
1187 | adev->enable_virtual_display = false; | ||
1188 | |||
1189 | if (amdgpu_virtual_display) { | ||
1190 | struct drm_device *ddev = adev->ddev; | ||
1191 | const char *pci_address_name = pci_name(ddev->pdev); | ||
1192 | char *pciaddstr, *pciaddstr_tmp, *pciaddname; | ||
1193 | |||
1194 | pciaddstr = kstrdup(amdgpu_virtual_display, GFP_KERNEL); | ||
1195 | pciaddstr_tmp = pciaddstr; | ||
1196 | while ((pciaddname = strsep(&pciaddstr_tmp, ";"))) { | ||
1197 | if (!strcmp(pci_address_name, pciaddname)) { | ||
1198 | adev->enable_virtual_display = true; | ||
1199 | break; | ||
1200 | } | ||
1201 | } | ||
1202 | |||
1203 | DRM_INFO("virtual display string:%s, %s:virtual_display:%d\n", | ||
1204 | amdgpu_virtual_display, pci_address_name, | ||
1205 | adev->enable_virtual_display); | ||
1206 | |||
1207 | kfree(pciaddstr); | ||
1208 | } | ||
1209 | } | ||
1210 | |||
1184 | static int amdgpu_early_init(struct amdgpu_device *adev) | 1211 | static int amdgpu_early_init(struct amdgpu_device *adev) |
1185 | { | 1212 | { |
1186 | int i, r; | 1213 | int i, r; |
1187 | 1214 | ||
1188 | DRM_INFO("virtual display enabled:%d\n", amdgpu_virtual_display); | 1215 | amdgpu_whether_enable_virtual_display(adev); |
1189 | 1216 | ||
1190 | switch (adev->asic_type) { | 1217 | switch (adev->asic_type) { |
1191 | case CHIP_TOPAZ: | 1218 | case CHIP_TOPAZ: |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 421dbbfd5e1b..58b1db82f589 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | |||
@@ -90,7 +90,7 @@ unsigned amdgpu_pcie_lane_cap = 0; | |||
90 | unsigned amdgpu_cg_mask = 0xffffffff; | 90 | unsigned amdgpu_cg_mask = 0xffffffff; |
91 | unsigned amdgpu_pg_mask = 0xffffffff; | 91 | unsigned amdgpu_pg_mask = 0xffffffff; |
92 | char *amdgpu_disable_cu = NULL; | 92 | char *amdgpu_disable_cu = NULL; |
93 | int amdgpu_virtual_display = 0; | 93 | char *amdgpu_virtual_display = NULL; |
94 | 94 | ||
95 | MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); | 95 | MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); |
96 | module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); | 96 | module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); |
@@ -190,8 +190,8 @@ module_param_named(pg_mask, amdgpu_pg_mask, uint, 0444); | |||
190 | MODULE_PARM_DESC(disable_cu, "Disable CUs (se.sh.cu,...)"); | 190 | MODULE_PARM_DESC(disable_cu, "Disable CUs (se.sh.cu,...)"); |
191 | module_param_named(disable_cu, amdgpu_disable_cu, charp, 0444); | 191 | module_param_named(disable_cu, amdgpu_disable_cu, charp, 0444); |
192 | 192 | ||
193 | MODULE_PARM_DESC(virtual_display, "enable virtual display (0 = disable virtual display)"); | 193 | MODULE_PARM_DESC(virtual_display, "Enable virtual display feature (the virtual_display will be set like xxxx:xx:xx.x;xxxx:xx:xx.x)"); |
194 | module_param_named(virtual_display, amdgpu_virtual_display, int, 0444); | 194 | module_param_named(virtual_display, amdgpu_virtual_display, charp, 0444); |
195 | 195 | ||
196 | static const struct pci_device_id pciidlist[] = { | 196 | static const struct pci_device_id pciidlist[] = { |
197 | #ifdef CONFIG_DRM_AMDGPU_CIK | 197 | #ifdef CONFIG_DRM_AMDGPU_CIK |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index e539b28dbef7..825de800b798 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c | |||
@@ -2323,7 +2323,7 @@ static const struct amdgpu_ip_block_version kaveri_ip_blocks_vd[] = | |||
2323 | 2323 | ||
2324 | int cik_set_ip_blocks(struct amdgpu_device *adev) | 2324 | int cik_set_ip_blocks(struct amdgpu_device *adev) |
2325 | { | 2325 | { |
2326 | if (amdgpu_virtual_display) { | 2326 | if (adev->enable_virtual_display) { |
2327 | switch (adev->asic_type) { | 2327 | switch (adev->asic_type) { |
2328 | case CHIP_BONAIRE: | 2328 | case CHIP_BONAIRE: |
2329 | adev->ip_blocks = bonaire_ip_blocks_vd; | 2329 | adev->ip_blocks = bonaire_ip_blocks_vd; |
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c index 69c2f8175e68..f2e8aa1a0dbd 100644 --- a/drivers/gpu/drm/amd/amdgpu/vi.c +++ b/drivers/gpu/drm/amd/amdgpu/vi.c | |||
@@ -1441,7 +1441,7 @@ static const struct amdgpu_ip_block_version cz_ip_blocks_vd[] = | |||
1441 | 1441 | ||
1442 | int vi_set_ip_blocks(struct amdgpu_device *adev) | 1442 | int vi_set_ip_blocks(struct amdgpu_device *adev) |
1443 | { | 1443 | { |
1444 | if (amdgpu_virtual_display) { | 1444 | if (adev->enable_virtual_display) { |
1445 | switch (adev->asic_type) { | 1445 | switch (adev->asic_type) { |
1446 | case CHIP_TOPAZ: | 1446 | case CHIP_TOPAZ: |
1447 | adev->ip_blocks = topaz_ip_blocks_vd; | 1447 | adev->ip_blocks = topaz_ip_blocks_vd; |