Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 May 2014 08:59:24 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r266792 - head/sys/dev/drm2/radeon
Message-ID:  <201405280859.s4S8xONf043452@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Wed May 28 08:59:23 2014
New Revision: 266792
URL: http://svnweb.freebsd.org/changeset/base/266792

Log:
  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

Modified:
  head/sys/dev/drm2/radeon/radeon_device.c

Modified: head/sys/dev/drm2/radeon/radeon_device.c
==============================================================================
--- head/sys/dev/drm2/radeon/radeon_device.c	Wed May 28 07:35:48 2014	(r266791)
+++ head/sys/dev/drm2/radeon/radeon_device.c	Wed May 28 08:59:23 2014	(r266792)
@@ -548,10 +548,10 @@ int radeon_dummy_page_init(struct radeon
 	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;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405280859.s4S8xONf043452>