summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nouveau_bo.c
diff options
context:
space:
mode:
authorMaarten Maathuis2009-12-25 18:51:17 +0100
committerBen Skeggs2010-01-11 00:06:36 +0100
commit1c7059e4f36e76c72cefbb6c9bd2bcf45c12e777 (patch)
tree3bf415ce10c2f5760cb73f2a6a69480f6a71eee1 /drivers/gpu/drm/nouveau/nouveau_bo.c
parentdrm/nouveau: Don't skip card take down on nv0x. (diff)
downloadkernel-qcow2-linux-1c7059e4f36e76c72cefbb6c9bd2bcf45c12e777.tar.gz
kernel-qcow2-linux-1c7059e4f36e76c72cefbb6c9bd2bcf45c12e777.tar.xz
kernel-qcow2-linux-1c7059e4f36e76c72cefbb6c9bd2bcf45c12e777.zip
drm/nouveau: better alignment of bo sizes and use roundup instead of ALIGN
- Aligning to block size should ensure that the extra size is enough. - Using roundup, because not all sizes are powers of two. Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_bo.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_bo.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 5fd462f49407..a0c9e00e7062 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -73,6 +73,7 @@ nouveau_bo_fixup_align(struct drm_device *dev,
case 0x4800:
case 0x7a00:
if (dev_priv->chipset >= 0xA0) {
+ *size = roundup(*size, 28672);
/* This is based on high end cards with 448 bits
* memory bus, could be different elsewhere.*/
*size += 6 * 28672;
@@ -80,9 +81,11 @@ nouveau_bo_fixup_align(struct drm_device *dev,
* but we must also align to page size. */
*align = 2 * 8 * 28672;
} else if (dev_priv->chipset >= 0x90) {
+ *size = roundup(*size, 16384);
*size += 3 * 16384;
*align = 12 * 16384;
} else {
+ *size = roundup(*size, 8192);
*size += 3 * 8192;
/* 12 * 8192 is the actual alignment requirement
* but we must also align to page size. */
@@ -114,10 +117,11 @@ nouveau_bo_fixup_align(struct drm_device *dev,
}
}
- *size = ALIGN(*size, PAGE_SIZE);
+ /* ALIGN works only on powers of two. */
+ *size = roundup(*size, PAGE_SIZE);
if (dev_priv->card_type == NV_50) {
- *size = ALIGN(*size, 65536);
+ *size = roundup(*size, 65536);
*align = max(65536, *align);
}
}