diff options
author | Dave Airlie <airlied@linux.ie> | 2009-07-10 08:36:26 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-07-15 03:13:18 -0400 |
commit | ad49f501867cba87e1e45e5ebae0b12435d68bf1 (patch) | |
tree | 4602e5caf96451b1dcdda7a38628d494466d2e20 /drivers/gpu/drm/radeon | |
parent | 61b576dbbe6a19d102c025ebc102a0749e2d3c80 (diff) |
drm/ttm/radeon: add dma32 support.
This add support for using dma32 memory on gpus that really need it.
Currently IGPs are left without DMA32 but we might need to change
that unless we can fix rs690.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_ttm.c | 3 |
3 files changed, 18 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index e7662ba9abfb..3060ce14071e 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -624,6 +624,7 @@ struct radeon_device { | |||
624 | bool gpu_lockup; | 624 | bool gpu_lockup; |
625 | bool shutdown; | 625 | bool shutdown; |
626 | bool suspend; | 626 | bool suspend; |
627 | bool need_dma32; | ||
627 | }; | 628 | }; |
628 | 629 | ||
629 | int radeon_device_init(struct radeon_device *rdev, | 630 | int radeon_device_init(struct radeon_device *rdev, |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 332911267ebe..27a5ac969953 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -450,6 +450,7 @@ int radeon_device_init(struct radeon_device *rdev, | |||
450 | uint32_t flags) | 450 | uint32_t flags) |
451 | { | 451 | { |
452 | int r, ret; | 452 | int r, ret; |
453 | int dma_bits; | ||
453 | 454 | ||
454 | DRM_INFO("radeon: Initializing kernel modesetting.\n"); | 455 | DRM_INFO("radeon: Initializing kernel modesetting.\n"); |
455 | rdev->shutdown = false; | 456 | rdev->shutdown = false; |
@@ -492,8 +493,20 @@ int radeon_device_init(struct radeon_device *rdev, | |||
492 | return r; | 493 | return r; |
493 | } | 494 | } |
494 | 495 | ||
495 | /* Report DMA addressing limitation */ | 496 | /* set DMA mask + need_dma32 flags. |
496 | r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(32)); | 497 | * PCIE - can handle 40-bits. |
498 | * IGP - can handle 40-bits (in theory) | ||
499 | * AGP - generally dma32 is safest | ||
500 | * PCI - only dma32 | ||
501 | */ | ||
502 | rdev->need_dma32 = false; | ||
503 | if (rdev->flags & RADEON_IS_AGP) | ||
504 | rdev->need_dma32 = true; | ||
505 | if (rdev->flags & RADEON_IS_PCI) | ||
506 | rdev->need_dma32 = true; | ||
507 | |||
508 | dma_bits = rdev->need_dma32 ? 32 : 40; | ||
509 | r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(dma_bits)); | ||
497 | if (r) { | 510 | if (r) { |
498 | printk(KERN_WARNING "radeon: No suitable DMA available.\n"); | 511 | printk(KERN_WARNING "radeon: No suitable DMA available.\n"); |
499 | } | 512 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index 1227a97f5169..4ca9aa9203d0 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c | |||
@@ -442,7 +442,8 @@ int radeon_ttm_init(struct radeon_device *rdev) | |||
442 | /* No others user of address space so set it to 0 */ | 442 | /* No others user of address space so set it to 0 */ |
443 | r = ttm_bo_device_init(&rdev->mman.bdev, | 443 | r = ttm_bo_device_init(&rdev->mman.bdev, |
444 | rdev->mman.mem_global_ref.object, | 444 | rdev->mman.mem_global_ref.object, |
445 | &radeon_bo_driver, DRM_FILE_PAGE_OFFSET); | 445 | &radeon_bo_driver, DRM_FILE_PAGE_OFFSET, |
446 | rdev->need_dma32); | ||
446 | if (r) { | 447 | if (r) { |
447 | DRM_ERROR("failed initializing buffer object driver(%d).\n", r); | 448 | DRM_ERROR("failed initializing buffer object driver(%d).\n", r); |
448 | return r; | 449 | return r; |