aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c6
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h5
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c71
-rw-r--r--drivers/gpu/drm/i915/i915_gem_tiling.c4
-rw-r--r--drivers/gpu/drm/i915/intel_display.c23
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c3
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c2
-rw-r--r--drivers/gpu/drm/radeon/evergreen_blit_kms.c9
-rw-r--r--drivers/gpu/drm/radeon/radeon_bios.c21
-rw-r--r--drivers/gpu/drm/radeon/radeon_connectors.c6
-rw-r--r--drivers/gpu/drm/radeon/radeon_reg.h2
-rw-r--r--drivers/gpu/drm/radeon/rs600.c6
12 files changed, 101 insertions, 57 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 12712824a6d2..8a3942c4f099 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -61,7 +61,6 @@ static void i915_write_hws_pga(struct drm_device *dev)
61static int i915_init_phys_hws(struct drm_device *dev) 61static int i915_init_phys_hws(struct drm_device *dev)
62{ 62{
63 drm_i915_private_t *dev_priv = dev->dev_private; 63 drm_i915_private_t *dev_priv = dev->dev_private;
64 struct intel_ring_buffer *ring = LP_RING(dev_priv);
65 64
66 /* Program Hardware Status Page */ 65 /* Program Hardware Status Page */
67 dev_priv->status_page_dmah = 66 dev_priv->status_page_dmah =
@@ -71,10 +70,9 @@ static int i915_init_phys_hws(struct drm_device *dev)
71 DRM_ERROR("Can not allocate hardware status page\n"); 70 DRM_ERROR("Can not allocate hardware status page\n");
72 return -ENOMEM; 71 return -ENOMEM;
73 } 72 }
74 ring->status_page.page_addr =
75 (void __force __iomem *)dev_priv->status_page_dmah->vaddr;
76 73
77 memset_io(ring->status_page.page_addr, 0, PAGE_SIZE); 74 memset_io((void __force __iomem *)dev_priv->status_page_dmah->vaddr,
75 0, PAGE_SIZE);
78 76
79 i915_write_hws_pga(dev); 77 i915_write_hws_pga(dev);
80 78
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 78cdd158287a..6867e193d85e 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -264,6 +264,7 @@ enum intel_pch {
264}; 264};
265 265
266#define QUIRK_PIPEA_FORCE (1<<0) 266#define QUIRK_PIPEA_FORCE (1<<0)
267#define QUIRK_LVDS_SSC_DISABLE (1<<1)
267 268
268struct intel_fbdev; 269struct intel_fbdev;
269struct intel_fbc_work; 270struct intel_fbc_work;
@@ -1199,7 +1200,9 @@ void i915_gem_free_all_phys_object(struct drm_device *dev);
1199void i915_gem_release(struct drm_device *dev, struct drm_file *file); 1200void i915_gem_release(struct drm_device *dev, struct drm_file *file);
1200 1201
1201uint32_t 1202uint32_t
1202i915_gem_get_unfenced_gtt_alignment(struct drm_i915_gem_object *obj); 1203i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
1204 uint32_t size,
1205 int tiling_mode);
1203 1206
1204int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj, 1207int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
1205 enum i915_cache_level cache_level); 1208 enum i915_cache_level cache_level);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index e46f2734acc5..a546a71fb060 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1374,25 +1374,24 @@ i915_gem_free_mmap_offset(struct drm_i915_gem_object *obj)
1374} 1374}
1375 1375
1376static uint32_t 1376static uint32_t
1377i915_gem_get_gtt_size(struct drm_i915_gem_object *obj) 1377i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size, int tiling_mode)
1378{ 1378{
1379 struct drm_device *dev = obj->base.dev; 1379 uint32_t gtt_size;
1380 uint32_t size;
1381 1380
1382 if (INTEL_INFO(dev)->gen >= 4 || 1381 if (INTEL_INFO(dev)->gen >= 4 ||
1383 obj->tiling_mode == I915_TILING_NONE) 1382 tiling_mode == I915_TILING_NONE)
1384 return obj->base.size; 1383 return size;
1385 1384
1386 /* Previous chips need a power-of-two fence region when tiling */ 1385 /* Previous chips need a power-of-two fence region when tiling */
1387 if (INTEL_INFO(dev)->gen == 3) 1386 if (INTEL_INFO(dev)->gen == 3)
1388 size = 1024*1024; 1387 gtt_size = 1024*1024;
1389 else 1388 else
1390 size = 512*1024; 1389 gtt_size = 512*1024;
1391 1390
1392 while (size < obj->base.size) 1391 while (gtt_size < size)
1393 size <<= 1; 1392 gtt_size <<= 1;
1394 1393
1395 return size; 1394 return gtt_size;
1396} 1395}
1397 1396
1398/** 1397/**
@@ -1403,59 +1402,52 @@ i915_gem_get_gtt_size(struct drm_i915_gem_object *obj)
1403 * potential fence register mapping. 1402 * potential fence register mapping.
1404 */ 1403 */
1405static uint32_t 1404static uint32_t
1406i915_gem_get_gtt_alignment(struct drm_i915_gem_object *obj) 1405i915_gem_get_gtt_alignment(struct drm_device *dev,
1406 uint32_t size,
1407 int tiling_mode)
1407{ 1408{
1408 struct drm_device *dev = obj->base.dev;
1409
1410 /* 1409 /*
1411 * Minimum alignment is 4k (GTT page size), but might be greater 1410 * Minimum alignment is 4k (GTT page size), but might be greater
1412 * if a fence register is needed for the object. 1411 * if a fence register is needed for the object.
1413 */ 1412 */
1414 if (INTEL_INFO(dev)->gen >= 4 || 1413 if (INTEL_INFO(dev)->gen >= 4 ||
1415 obj->tiling_mode == I915_TILING_NONE) 1414 tiling_mode == I915_TILING_NONE)
1416 return 4096; 1415 return 4096;
1417 1416
1418 /* 1417 /*
1419 * Previous chips need to be aligned to the size of the smallest 1418 * Previous chips need to be aligned to the size of the smallest
1420 * fence register that can contain the object. 1419 * fence register that can contain the object.
1421 */ 1420 */
1422 return i915_gem_get_gtt_size(obj); 1421 return i915_gem_get_gtt_size(dev, size, tiling_mode);
1423} 1422}
1424 1423
1425/** 1424/**
1426 * i915_gem_get_unfenced_gtt_alignment - return required GTT alignment for an 1425 * i915_gem_get_unfenced_gtt_alignment - return required GTT alignment for an
1427 * unfenced object 1426 * unfenced object
1428 * @obj: object to check 1427 * @dev: the device
1428 * @size: size of the object
1429 * @tiling_mode: tiling mode of the object
1429 * 1430 *
1430 * Return the required GTT alignment for an object, only taking into account 1431 * Return the required GTT alignment for an object, only taking into account
1431 * unfenced tiled surface requirements. 1432 * unfenced tiled surface requirements.
1432 */ 1433 */
1433uint32_t 1434uint32_t
1434i915_gem_get_unfenced_gtt_alignment(struct drm_i915_gem_object *obj) 1435i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
1436 uint32_t size,
1437 int tiling_mode)
1435{ 1438{
1436 struct drm_device *dev = obj->base.dev;
1437 int tile_height;
1438
1439 /* 1439 /*
1440 * Minimum alignment is 4k (GTT page size) for sane hw. 1440 * Minimum alignment is 4k (GTT page size) for sane hw.
1441 */ 1441 */
1442 if (INTEL_INFO(dev)->gen >= 4 || IS_G33(dev) || 1442 if (INTEL_INFO(dev)->gen >= 4 || IS_G33(dev) ||
1443 obj->tiling_mode == I915_TILING_NONE) 1443 tiling_mode == I915_TILING_NONE)
1444 return 4096; 1444 return 4096;
1445 1445
1446 /* 1446 /* Previous hardware however needs to be aligned to a power-of-two
1447 * Older chips need unfenced tiled buffers to be aligned to the left 1447 * tile height. The simplest method for determining this is to reuse
1448 * edge of an even tile row (where tile rows are counted as if the bo is 1448 * the power-of-tile object size.
1449 * placed in a fenced gtt region).
1450 */ 1449 */
1451 if (IS_GEN2(dev)) 1450 return i915_gem_get_gtt_size(dev, size, tiling_mode);
1452 tile_height = 16;
1453 else if (obj->tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev))
1454 tile_height = 32;
1455 else
1456 tile_height = 8;
1457
1458 return tile_height * obj->stride * 2;
1459} 1451}
1460 1452
1461int 1453int
@@ -2776,9 +2768,16 @@ i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
2776 return -EINVAL; 2768 return -EINVAL;
2777 } 2769 }
2778 2770
2779 fence_size = i915_gem_get_gtt_size(obj); 2771 fence_size = i915_gem_get_gtt_size(dev,
2780 fence_alignment = i915_gem_get_gtt_alignment(obj); 2772 obj->base.size,
2781 unfenced_alignment = i915_gem_get_unfenced_gtt_alignment(obj); 2773 obj->tiling_mode);
2774 fence_alignment = i915_gem_get_gtt_alignment(dev,
2775 obj->base.size,
2776 obj->tiling_mode);
2777 unfenced_alignment =
2778 i915_gem_get_unfenced_gtt_alignment(dev,
2779 obj->base.size,
2780 obj->tiling_mode);
2782 2781
2783 if (alignment == 0) 2782 if (alignment == 0)
2784 alignment = map_and_fenceable ? fence_alignment : 2783 alignment = map_and_fenceable ? fence_alignment :
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
index 82d70fd9e933..99c4faa59d8f 100644
--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
@@ -348,7 +348,9 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
348 /* Rebind if we need a change of alignment */ 348 /* Rebind if we need a change of alignment */
349 if (!obj->map_and_fenceable) { 349 if (!obj->map_and_fenceable) {
350 u32 unfenced_alignment = 350 u32 unfenced_alignment =
351 i915_gem_get_unfenced_gtt_alignment(obj); 351 i915_gem_get_unfenced_gtt_alignment(dev,
352 obj->base.size,
353 args->tiling_mode);
352 if (obj->gtt_offset & (unfenced_alignment - 1)) 354 if (obj->gtt_offset & (unfenced_alignment - 1))
353 ret = i915_gem_object_unbind(obj); 355 ret = i915_gem_object_unbind(obj);
354 } 356 }
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 261ffe47a5d2..97d28013db79 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2865,14 +2865,18 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
2865 I915_WRITE(PF_WIN_SZ(pipe), dev_priv->pch_pf_size); 2865 I915_WRITE(PF_WIN_SZ(pipe), dev_priv->pch_pf_size);
2866 } 2866 }
2867 2867
2868 /*
2869 * On ILK+ LUT must be loaded before the pipe is running but with
2870 * clocks enabled
2871 */
2872 intel_crtc_load_lut(crtc);
2873
2868 intel_enable_pipe(dev_priv, pipe, is_pch_port); 2874 intel_enable_pipe(dev_priv, pipe, is_pch_port);
2869 intel_enable_plane(dev_priv, plane, pipe); 2875 intel_enable_plane(dev_priv, plane, pipe);
2870 2876
2871 if (is_pch_port) 2877 if (is_pch_port)
2872 ironlake_pch_enable(crtc); 2878 ironlake_pch_enable(crtc);
2873 2879
2874 intel_crtc_load_lut(crtc);
2875
2876 mutex_lock(&dev->struct_mutex); 2880 mutex_lock(&dev->struct_mutex);
2877 intel_update_fbc(dev); 2881 intel_update_fbc(dev);
2878 mutex_unlock(&dev->struct_mutex); 2882 mutex_unlock(&dev->struct_mutex);
@@ -4469,7 +4473,8 @@ static void intel_update_watermarks(struct drm_device *dev)
4469 4473
4470static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) 4474static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
4471{ 4475{
4472 return dev_priv->lvds_use_ssc && i915_panel_use_ssc; 4476 return dev_priv->lvds_use_ssc && i915_panel_use_ssc
4477 && !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE);
4473} 4478}
4474 4479
4475/** 4480/**
@@ -8140,6 +8145,15 @@ static void quirk_pipea_force (struct drm_device *dev)
8140 DRM_DEBUG_DRIVER("applying pipe a force quirk\n"); 8145 DRM_DEBUG_DRIVER("applying pipe a force quirk\n");
8141} 8146}
8142 8147
8148/*
8149 * Some machines (Lenovo U160) do not work with SSC on LVDS for some reason
8150 */
8151static void quirk_ssc_force_disable(struct drm_device *dev)
8152{
8153 struct drm_i915_private *dev_priv = dev->dev_private;
8154 dev_priv->quirks |= QUIRK_LVDS_SSC_DISABLE;
8155}
8156
8143struct intel_quirk { 8157struct intel_quirk {
8144 int device; 8158 int device;
8145 int subsystem_vendor; 8159 int subsystem_vendor;
@@ -8168,6 +8182,9 @@ struct intel_quirk intel_quirks[] = {
8168 /* 855 & before need to leave pipe A & dpll A up */ 8182 /* 855 & before need to leave pipe A & dpll A up */
8169 { 0x3582, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force }, 8183 { 0x3582, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
8170 { 0x2562, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force }, 8184 { 0x2562, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
8185
8186 /* Lenovo U160 cannot use SSC on LVDS */
8187 { 0x0046, 0x17aa, 0x3920, quirk_ssc_force_disable },
8171}; 8188};
8172 8189
8173static void intel_init_quirks(struct drm_device *dev) 8190static void intel_init_quirks(struct drm_device *dev)
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index e9615685a39c..47b9b2777038 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -1321,6 +1321,9 @@ int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
1321 ring->get_seqno = pc_render_get_seqno; 1321 ring->get_seqno = pc_render_get_seqno;
1322 } 1322 }
1323 1323
1324 if (!I915_NEED_GFX_HWS(dev))
1325 ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
1326
1324 ring->dev = dev; 1327 ring->dev = dev;
1325 INIT_LIST_HEAD(&ring->active_list); 1328 INIT_LIST_HEAD(&ring->active_list);
1326 INIT_LIST_HEAD(&ring->request_list); 1329 INIT_LIST_HEAD(&ring->request_list);
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 660f96401a05..15bd0477a3e8 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -2000,7 +2000,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
2000 gb_backend_map = 0x66442200; 2000 gb_backend_map = 0x66442200;
2001 break; 2001 break;
2002 case CHIP_JUNIPER: 2002 case CHIP_JUNIPER:
2003 gb_backend_map = 0x00006420; 2003 gb_backend_map = 0x00002200;
2004 break; 2004 break;
2005 default: 2005 default:
2006 gb_backend_map = 2006 gb_backend_map =
diff --git a/drivers/gpu/drm/radeon/evergreen_blit_kms.c b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
index 57f3bc17b87e..2eb251858e72 100644
--- a/drivers/gpu/drm/radeon/evergreen_blit_kms.c
+++ b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
@@ -252,7 +252,7 @@ draw_auto(struct radeon_device *rdev)
252 252
253} 253}
254 254
255/* emits 36 */ 255/* emits 39 */
256static void 256static void
257set_default_state(struct radeon_device *rdev) 257set_default_state(struct radeon_device *rdev)
258{ 258{
@@ -531,6 +531,11 @@ set_default_state(struct radeon_device *rdev)
531 radeon_ring_write(rdev, (SQ_DYN_GPR_CNTL_PS_FLUSH_REQ - PACKET3_SET_CONFIG_REG_START) >> 2); 531 radeon_ring_write(rdev, (SQ_DYN_GPR_CNTL_PS_FLUSH_REQ - PACKET3_SET_CONFIG_REG_START) >> 2);
532 radeon_ring_write(rdev, 0); 532 radeon_ring_write(rdev, 0);
533 533
534 /* setup LDS */
535 radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
536 radeon_ring_write(rdev, (SQ_LDS_RESOURCE_MGMT - PACKET3_SET_CONFIG_REG_START) >> 2);
537 radeon_ring_write(rdev, 0x10001000);
538
534 /* SQ config */ 539 /* SQ config */
535 radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 11)); 540 radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 11));
536 radeon_ring_write(rdev, (SQ_CONFIG - PACKET3_SET_CONFIG_REG_START) >> 2); 541 radeon_ring_write(rdev, (SQ_CONFIG - PACKET3_SET_CONFIG_REG_START) >> 2);
@@ -773,7 +778,7 @@ int evergreen_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
773 /* calculate number of loops correctly */ 778 /* calculate number of loops correctly */
774 ring_size = num_loops * dwords_per_loop; 779 ring_size = num_loops * dwords_per_loop;
775 /* set default + shaders */ 780 /* set default + shaders */
776 ring_size += 52; /* shaders + def state */ 781 ring_size += 55; /* shaders + def state */
777 ring_size += 10; /* fence emit for VB IB */ 782 ring_size += 10; /* fence emit for VB IB */
778 ring_size += 5; /* done copy */ 783 ring_size += 5; /* done copy */
779 ring_size += 10; /* fence emit for done copy */ 784 ring_size += 10; /* fence emit for done copy */
diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c
index 3fc5fa1aefd0..229a20f10e2b 100644
--- a/drivers/gpu/drm/radeon/radeon_bios.c
+++ b/drivers/gpu/drm/radeon/radeon_bios.c
@@ -331,7 +331,7 @@ static bool avivo_read_disabled_bios(struct radeon_device *rdev)
331 331
332 seprom_cntl1 = RREG32(RADEON_SEPROM_CNTL1); 332 seprom_cntl1 = RREG32(RADEON_SEPROM_CNTL1);
333 viph_control = RREG32(RADEON_VIPH_CONTROL); 333 viph_control = RREG32(RADEON_VIPH_CONTROL);
334 bus_cntl = RREG32(RADEON_BUS_CNTL); 334 bus_cntl = RREG32(RV370_BUS_CNTL);
335 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); 335 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL);
336 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); 336 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL);
337 vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL); 337 vga_render_control = RREG32(AVIVO_VGA_RENDER_CONTROL);
@@ -350,7 +350,7 @@ static bool avivo_read_disabled_bios(struct radeon_device *rdev)
350 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); 350 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN));
351 351
352 /* enable the rom */ 352 /* enable the rom */
353 WREG32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM)); 353 WREG32(RV370_BUS_CNTL, (bus_cntl & ~RV370_BUS_BIOS_DIS_ROM));
354 354
355 /* Disable VGA mode */ 355 /* Disable VGA mode */
356 WREG32(AVIVO_D1VGA_CONTROL, 356 WREG32(AVIVO_D1VGA_CONTROL,
@@ -367,7 +367,7 @@ static bool avivo_read_disabled_bios(struct radeon_device *rdev)
367 /* restore regs */ 367 /* restore regs */
368 WREG32(RADEON_SEPROM_CNTL1, seprom_cntl1); 368 WREG32(RADEON_SEPROM_CNTL1, seprom_cntl1);
369 WREG32(RADEON_VIPH_CONTROL, viph_control); 369 WREG32(RADEON_VIPH_CONTROL, viph_control);
370 WREG32(RADEON_BUS_CNTL, bus_cntl); 370 WREG32(RV370_BUS_CNTL, bus_cntl);
371 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); 371 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control);
372 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); 372 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control);
373 WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control); 373 WREG32(AVIVO_VGA_RENDER_CONTROL, vga_render_control);
@@ -390,7 +390,10 @@ static bool legacy_read_disabled_bios(struct radeon_device *rdev)
390 390
391 seprom_cntl1 = RREG32(RADEON_SEPROM_CNTL1); 391 seprom_cntl1 = RREG32(RADEON_SEPROM_CNTL1);
392 viph_control = RREG32(RADEON_VIPH_CONTROL); 392 viph_control = RREG32(RADEON_VIPH_CONTROL);
393 bus_cntl = RREG32(RADEON_BUS_CNTL); 393 if (rdev->flags & RADEON_IS_PCIE)
394 bus_cntl = RREG32(RV370_BUS_CNTL);
395 else
396 bus_cntl = RREG32(RADEON_BUS_CNTL);
394 crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL); 397 crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL);
395 crtc2_gen_cntl = 0; 398 crtc2_gen_cntl = 0;
396 crtc_ext_cntl = RREG32(RADEON_CRTC_EXT_CNTL); 399 crtc_ext_cntl = RREG32(RADEON_CRTC_EXT_CNTL);
@@ -412,7 +415,10 @@ static bool legacy_read_disabled_bios(struct radeon_device *rdev)
412 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN)); 415 WREG32(RADEON_VIPH_CONTROL, (viph_control & ~RADEON_VIPH_EN));
413 416
414 /* enable the rom */ 417 /* enable the rom */
415 WREG32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM)); 418 if (rdev->flags & RADEON_IS_PCIE)
419 WREG32(RV370_BUS_CNTL, (bus_cntl & ~RV370_BUS_BIOS_DIS_ROM));
420 else
421 WREG32(RADEON_BUS_CNTL, (bus_cntl & ~RADEON_BUS_BIOS_DIS_ROM));
416 422
417 /* Turn off mem requests and CRTC for both controllers */ 423 /* Turn off mem requests and CRTC for both controllers */
418 WREG32(RADEON_CRTC_GEN_CNTL, 424 WREG32(RADEON_CRTC_GEN_CNTL,
@@ -439,7 +445,10 @@ static bool legacy_read_disabled_bios(struct radeon_device *rdev)
439 /* restore regs */ 445 /* restore regs */
440 WREG32(RADEON_SEPROM_CNTL1, seprom_cntl1); 446 WREG32(RADEON_SEPROM_CNTL1, seprom_cntl1);
441 WREG32(RADEON_VIPH_CONTROL, viph_control); 447 WREG32(RADEON_VIPH_CONTROL, viph_control);
442 WREG32(RADEON_BUS_CNTL, bus_cntl); 448 if (rdev->flags & RADEON_IS_PCIE)
449 WREG32(RV370_BUS_CNTL, bus_cntl);
450 else
451 WREG32(RADEON_BUS_CNTL, bus_cntl);
443 WREG32(RADEON_CRTC_GEN_CNTL, crtc_gen_cntl); 452 WREG32(RADEON_CRTC_GEN_CNTL, crtc_gen_cntl);
444 if (!(rdev->flags & RADEON_SINGLE_CRTC)) { 453 if (!(rdev->flags & RADEON_SINGLE_CRTC)) {
445 WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl); 454 WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl);
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index cbfca3a24fdf..9792d4ffdc86 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -52,6 +52,12 @@ void radeon_connector_hotplug(struct drm_connector *connector)
52 struct radeon_device *rdev = dev->dev_private; 52 struct radeon_device *rdev = dev->dev_private;
53 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 53 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
54 54
55 /* bail if the connector does not have hpd pin, e.g.,
56 * VGA, TV, etc.
57 */
58 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE)
59 return;
60
55 radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); 61 radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
56 62
57 /* powering up/down the eDP panel generates hpd events which 63 /* powering up/down the eDP panel generates hpd events which
diff --git a/drivers/gpu/drm/radeon/radeon_reg.h b/drivers/gpu/drm/radeon/radeon_reg.h
index ec93a75369e6..bc44a3d35ec6 100644
--- a/drivers/gpu/drm/radeon/radeon_reg.h
+++ b/drivers/gpu/drm/radeon/radeon_reg.h
@@ -300,6 +300,8 @@
300# define RADEON_BUS_READ_BURST (1 << 30) 300# define RADEON_BUS_READ_BURST (1 << 30)
301#define RADEON_BUS_CNTL1 0x0034 301#define RADEON_BUS_CNTL1 0x0034
302# define RADEON_BUS_WAIT_ON_LOCK_EN (1 << 4) 302# define RADEON_BUS_WAIT_ON_LOCK_EN (1 << 4)
303#define RV370_BUS_CNTL 0x004c
304# define RV370_BUS_BIOS_DIS_ROM (1 << 2)
303/* rv370/rv380, rv410, r423/r430/r480, r5xx */ 305/* rv370/rv380, rv410, r423/r430/r480, r5xx */
304#define RADEON_MSI_REARM_EN 0x0160 306#define RADEON_MSI_REARM_EN 0x0160
305# define RV370_MSI_REARM_EN (1 << 0) 307# define RV370_MSI_REARM_EN (1 << 0)
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 6e3b11e5abbe..1f5850e473cc 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -426,7 +426,7 @@ int rs600_gart_init(struct radeon_device *rdev)
426 return radeon_gart_table_vram_alloc(rdev); 426 return radeon_gart_table_vram_alloc(rdev);
427} 427}
428 428
429int rs600_gart_enable(struct radeon_device *rdev) 429static int rs600_gart_enable(struct radeon_device *rdev)
430{ 430{
431 u32 tmp; 431 u32 tmp;
432 int r, i; 432 int r, i;
@@ -440,8 +440,8 @@ int rs600_gart_enable(struct radeon_device *rdev)
440 return r; 440 return r;
441 radeon_gart_restore(rdev); 441 radeon_gart_restore(rdev);
442 /* Enable bus master */ 442 /* Enable bus master */
443 tmp = RREG32(R_00004C_BUS_CNTL) & C_00004C_BUS_MASTER_DIS; 443 tmp = RREG32(RADEON_BUS_CNTL) & ~RS600_BUS_MASTER_DIS;
444 WREG32(R_00004C_BUS_CNTL, tmp); 444 WREG32(RADEON_BUS_CNTL, tmp);
445 /* FIXME: setup default page */ 445 /* FIXME: setup default page */
446 WREG32_MC(R_000100_MC_PT0_CNTL, 446 WREG32_MC(R_000100_MC_PT0_CNTL,
447 (S_000100_EFFECTIVE_L2_CACHE_SIZE(6) | 447 (S_000100_EFFECTIVE_L2_CACHE_SIZE(6) |