Fix DMA handling in radeon_dummy_page_init():

- Based on actual usage and on what Linux does, dummy_page.addr should
  contain the physical bus address of the dummy page rather than its
  virtual one. As a side-effect, correcting this bug fixes compilation
  with PAE support enabled by getting rid of an inappropriate cast.
- Also based on actual usage of dummy_page.addr, theoretically Radeon
  devices could do a maximum of 44-bit DMA. In reality, though, it is
  more likely that they only support 32-bit DMA, at least that is what
  radeon_gart_table_ram_alloc() sets up for, too. However, passing ~0
  to drm_pci_alloc() as maxaddr parameter translates to 64-bit DMA on
  amd64/64-bit machines. Thus, use BUS_SPACE_MAXSIZE_32BIT instead,
  which the existing 32-bit DMA limits within the drm2 code spelled as
  0xFFFFFFFF should also be changed to.

Reviewed by:	dumbbell
MFC after:      1 week
Sponsored by:   Bally Wulff Games & Entertainment GmbH
This commit is contained in:
Marius Strobl 2014-05-28 08:59:23 +00:00
parent 0d88706547
commit 0c12d5ed93

View File

@ -548,10 +548,10 @@ int radeon_dummy_page_init(struct radeon_device *rdev)
if (rdev->dummy_page.dmah)
return 0;
rdev->dummy_page.dmah = drm_pci_alloc(rdev->ddev,
PAGE_SIZE, PAGE_SIZE, ~0);
PAGE_SIZE, PAGE_SIZE, BUS_SPACE_MAXSIZE_32BIT);
if (rdev->dummy_page.dmah == NULL)
return -ENOMEM;
rdev->dummy_page.addr = (dma_addr_t)rdev->dummy_page.dmah->vaddr;
rdev->dummy_page.addr = rdev->dummy_page.dmah->busaddr;
return 0;
}