Commit a510604d authored by Maarten Maathuis's avatar Maarten Maathuis Committed by Ben Skeggs

drm/nv50: make the blocksize depend on vram size

- This should be better than what we have now.
- I'm less sure about the non power of two path.
Signed-off-by: default avatarMaarten Maathuis <madman2003@gmail.com>
parent 1c7059e4
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
#include "nouveau_drv.h" #include "nouveau_drv.h"
#include "nouveau_dma.h" #include "nouveau_dma.h"
#include <linux/log2.h>
static void static void
nouveau_bo_del_ttm(struct ttm_buffer_object *bo) nouveau_bo_del_ttm(struct ttm_buffer_object *bo)
{ {
...@@ -67,29 +69,29 @@ nouveau_bo_fixup_align(struct drm_device *dev, ...@@ -67,29 +69,29 @@ nouveau_bo_fixup_align(struct drm_device *dev,
* avoid corruption of other buffer objects. * avoid corruption of other buffer objects.
*/ */
if (dev_priv->card_type == NV_50) { if (dev_priv->card_type == NV_50) {
uint32_t block_size = nouveau_mem_fb_amount(dev) >> 15;
int i;
switch (tile_flags) { switch (tile_flags) {
case 0x1800: case 0x1800:
case 0x2800: case 0x2800:
case 0x4800: case 0x4800:
case 0x7a00: case 0x7a00:
if (dev_priv->chipset >= 0xA0) { *size = roundup(*size, block_size);
*size = roundup(*size, 28672); if (is_power_of_2(block_size)) {
/* This is based on high end cards with 448 bits *size += 3 * block_size;
* memory bus, could be different elsewhere.*/ for (i = 1; i < 10; i++) {
*size += 6 * 28672; *align = 12 * i * block_size;
/* 8 * 28672 is the actual alignment requirement if (!(*align % 65536))
* but we must also align to page size. */ break;
*align = 2 * 8 * 28672; }
} else if (dev_priv->chipset >= 0x90) {
*size = roundup(*size, 16384);
*size += 3 * 16384;
*align = 12 * 16384;
} else { } else {
*size = roundup(*size, 8192); *size += 6 * block_size;
*size += 3 * 8192; for (i = 1; i < 10; i++) {
/* 12 * 8192 is the actual alignment requirement *align = 8 * i * block_size;
* but we must also align to page size. */ if (!(*align % 65536))
*align = 2 * 12 * 8192; break;
}
} }
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment