diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-02-02 00:55:47 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-03-13 00:23:57 -0400 |
commit | 41c2e75e60200a860a74b7c84a6375c105e7437f (patch) | |
tree | 18e97662d6859eead4de816e121d001b34a7352a /drivers/gpu/drm/r128 | |
parent | f77d390c9779c496aa5b99ec832996fb76bb1d13 (diff) |
drm: Make drm_local_map use a resource_size_t offset
This changes drm_local_map to use a resource_size for its "offset"
member instead of an unsigned long, thus allowing 32-bit machines
with a >32-bit physical address space to be able to store there
their register or framebuffer addresses when those are above 4G,
such as when using a PCI video card on a recent AMCC 440 SoC.
This patch isn't as "trivial" as it sounds: A few functions needed
to have some unsigned long/int changed to resource_size_t and a few
printk's had to be adjusted.
But also, because userspace isn't capable of passing such offsets,
I had to modify drm_find_matching_map() to ignore the offset passed
in for maps of type _DRM_FRAMEBUFFER or _DRM_REGISTERS.
If we ever support multiple _DRM_FRAMEBUFFER or _DRM_REGISTERS maps
for a given device, we might have to change that trick, but I don't
think that happens on any current driver.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'drivers/gpu/drm/r128')
-rw-r--r-- | drivers/gpu/drm/r128/r128_cce.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/gpu/drm/r128/r128_cce.c b/drivers/gpu/drm/r128/r128_cce.c index c31afbde62e7..32de4cedc363 100644 --- a/drivers/gpu/drm/r128/r128_cce.c +++ b/drivers/gpu/drm/r128/r128_cce.c | |||
@@ -525,11 +525,12 @@ static int r128_do_init_cce(struct drm_device * dev, drm_r128_init_t * init) | |||
525 | } else | 525 | } else |
526 | #endif | 526 | #endif |
527 | { | 527 | { |
528 | dev_priv->cce_ring->handle = (void *)dev_priv->cce_ring->offset; | 528 | dev_priv->cce_ring->handle = |
529 | (void *)(unsigned long)dev_priv->cce_ring->offset; | ||
529 | dev_priv->ring_rptr->handle = | 530 | dev_priv->ring_rptr->handle = |
530 | (void *)dev_priv->ring_rptr->offset; | 531 | (void *)(unsigned long)dev_priv->ring_rptr->offset; |
531 | dev->agp_buffer_map->handle = | 532 | dev->agp_buffer_map->handle = |
532 | (void *)dev->agp_buffer_map->offset; | 533 | (void *)(unsigned long)dev->agp_buffer_map->offset; |
533 | } | 534 | } |
534 | 535 | ||
535 | #if __OS_HAS_AGP | 536 | #if __OS_HAS_AGP |