diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 71 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_tiling.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 23 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/evergreen_blit_kms.c | 9 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_bios.c | 21 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_reg.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/rs600.c | 6 |
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) | |||
| 61 | static int i915_init_phys_hws(struct drm_device *dev) | 61 | static 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 | ||
| 268 | struct intel_fbdev; | 269 | struct intel_fbdev; |
| 269 | struct intel_fbc_work; | 270 | struct intel_fbc_work; |
| @@ -1199,7 +1200,9 @@ void i915_gem_free_all_phys_object(struct drm_device *dev); | |||
| 1199 | void i915_gem_release(struct drm_device *dev, struct drm_file *file); | 1200 | void i915_gem_release(struct drm_device *dev, struct drm_file *file); |
| 1200 | 1201 | ||
| 1201 | uint32_t | 1202 | uint32_t |
| 1202 | i915_gem_get_unfenced_gtt_alignment(struct drm_i915_gem_object *obj); | 1203 | i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev, |
| 1204 | uint32_t size, | ||
| 1205 | int tiling_mode); | ||
| 1203 | 1206 | ||
| 1204 | int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj, | 1207 | int 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 | ||
| 1376 | static uint32_t | 1376 | static uint32_t |
| 1377 | i915_gem_get_gtt_size(struct drm_i915_gem_object *obj) | 1377 | i915_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 | */ |
| 1405 | static uint32_t | 1404 | static uint32_t |
| 1406 | i915_gem_get_gtt_alignment(struct drm_i915_gem_object *obj) | 1405 | i915_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 | */ |
| 1433 | uint32_t | 1434 | uint32_t |
| 1434 | i915_gem_get_unfenced_gtt_alignment(struct drm_i915_gem_object *obj) | 1435 | i915_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 | ||
| 1461 | int | 1453 | int |
| @@ -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 | ||
| 4470 | static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) | 4474 | static 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 | */ | ||
| 8151 | static 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 | |||
| 8143 | struct intel_quirk { | 8157 | struct 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 | ||
| 8173 | static void intel_init_quirks(struct drm_device *dev) | 8190 | static 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 */ |
| 256 | static void | 256 | static void |
| 257 | set_default_state(struct radeon_device *rdev) | 257 | set_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 | ||
| 429 | int rs600_gart_enable(struct radeon_device *rdev) | 429 | static 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) | |
