diff options
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_mem.c | 34 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_sgdma.c | 3 |
2 files changed, 27 insertions, 10 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c index 63b9040b5f30..02b48d183f4a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_mem.c +++ b/drivers/gpu/drm/nouveau/nouveau_mem.c | |||
@@ -424,14 +424,32 @@ nouveau_mem_vram_init(struct drm_device *dev) | |||
424 | } | 424 | } |
425 | 425 | ||
426 | /* reserve space at end of VRAM for PRAMIN */ | 426 | /* reserve space at end of VRAM for PRAMIN */ |
427 | if (dev_priv->chipset == 0x40 || dev_priv->chipset == 0x47 || | 427 | if (dev_priv->card_type >= NV_50) { |
428 | dev_priv->chipset == 0x49 || dev_priv->chipset == 0x4b) | 428 | dev_priv->ramin_rsvd_vram = 1 * 1024 * 1024; |
429 | dev_priv->ramin_rsvd_vram = (2 * 1024 * 1024); | 429 | } else |
430 | else | 430 | if (dev_priv->card_type >= NV_40) { |
431 | if (dev_priv->card_type >= NV_40) | 431 | u32 vs = hweight8((nv_rd32(dev, 0x001540) & 0x0000ff00) >> 8); |
432 | dev_priv->ramin_rsvd_vram = (1 * 1024 * 1024); | 432 | u32 rsvd; |
433 | else | 433 | |
434 | dev_priv->ramin_rsvd_vram = (512 * 1024); | 434 | /* estimate grctx size, the magics come from nv40_grctx.c */ |
435 | if (dev_priv->chipset == 0x40) rsvd = 0x6aa0 * vs; | ||
436 | else if (dev_priv->chipset < 0x43) rsvd = 0x4f00 * vs; | ||
437 | else if (nv44_graph_class(dev)) rsvd = 0x4980 * vs; | ||
438 | else rsvd = 0x4a40 * vs; | ||
439 | rsvd += 16 * 1024; | ||
440 | rsvd *= dev_priv->engine.fifo.channels; | ||
441 | |||
442 | /* pciegart table */ | ||
443 | if (drm_pci_device_is_pcie(dev)) | ||
444 | rsvd += 512 * 1024; | ||
445 | |||
446 | /* object storage */ | ||
447 | rsvd += 512 * 1024; | ||
448 | |||
449 | dev_priv->ramin_rsvd_vram = round_up(rsvd, 4096); | ||
450 | } else { | ||
451 | dev_priv->ramin_rsvd_vram = 512 * 1024; | ||
452 | } | ||
435 | 453 | ||
436 | ret = dev_priv->engine.vram.init(dev); | 454 | ret = dev_priv->engine.vram.init(dev); |
437 | if (ret) | 455 | if (ret) |
diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c index 1205f0f345b9..a33fe4019286 100644 --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c | |||
@@ -427,8 +427,7 @@ nouveau_sgdma_init(struct drm_device *dev) | |||
427 | u32 aper_size, align; | 427 | u32 aper_size, align; |
428 | int ret; | 428 | int ret; |
429 | 429 | ||
430 | if (dev_priv->card_type >= NV_50 || | 430 | if (dev_priv->card_type >= NV_50 || drm_pci_device_is_pcie(dev)) |
431 | dev_priv->ramin_rsvd_vram >= 2 * 1024 * 1024) | ||
432 | aper_size = 512 * 1024 * 1024; | 431 | aper_size = 512 * 1024 * 1024; |
433 | else | 432 | else |
434 | aper_size = 64 * 1024 * 1024; | 433 | aper_size = 64 * 1024 * 1024; |