提交 459ca7e5 编写于 作者: B Ben Skeggs

drm/nv40: attempt to reserve just enough vram for all 32 channels

This also makes the fact we're giving 512MiB of GART space to all PCIE
boards explicit, although the vast majority (if not all) of them will
now have a ramin_rsvd_vram larger than 2MiB anyway.
Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
上级 6fdb383e
...@@ -424,14 +424,32 @@ nouveau_mem_vram_init(struct drm_device *dev) ...@@ -424,14 +424,32 @@ nouveau_mem_vram_init(struct drm_device *dev)
} }
/* reserve space at end of VRAM for PRAMIN */ /* reserve space at end of VRAM for PRAMIN */
if (dev_priv->chipset == 0x40 || dev_priv->chipset == 0x47 || if (dev_priv->card_type >= NV_50) {
dev_priv->chipset == 0x49 || dev_priv->chipset == 0x4b) dev_priv->ramin_rsvd_vram = 1 * 1024 * 1024;
dev_priv->ramin_rsvd_vram = (2 * 1024 * 1024); } else
else if (dev_priv->card_type >= NV_40) {
if (dev_priv->card_type >= NV_40) u32 vs = hweight8((nv_rd32(dev, 0x001540) & 0x0000ff00) >> 8);
dev_priv->ramin_rsvd_vram = (1 * 1024 * 1024); u32 rsvd;
else
dev_priv->ramin_rsvd_vram = (512 * 1024); /* estimate grctx size, the magics come from nv40_grctx.c */
if (dev_priv->chipset == 0x40) rsvd = 0x6aa0 * vs;
else if (dev_priv->chipset < 0x43) rsvd = 0x4f00 * vs;
else if (nv44_graph_class(dev)) rsvd = 0x4980 * vs;
else rsvd = 0x4a40 * vs;
rsvd += 16 * 1024;
rsvd *= dev_priv->engine.fifo.channels;
/* pciegart table */
if (drm_pci_device_is_pcie(dev))
rsvd += 512 * 1024;
/* object storage */
rsvd += 512 * 1024;
dev_priv->ramin_rsvd_vram = round_up(rsvd, 4096);
} else {
dev_priv->ramin_rsvd_vram = 512 * 1024;
}
ret = dev_priv->engine.vram.init(dev); ret = dev_priv->engine.vram.init(dev);
if (ret) if (ret)
......
...@@ -427,8 +427,7 @@ nouveau_sgdma_init(struct drm_device *dev) ...@@ -427,8 +427,7 @@ nouveau_sgdma_init(struct drm_device *dev)
u32 aper_size, align; u32 aper_size, align;
int ret; int ret;
if (dev_priv->card_type >= NV_50 || if (dev_priv->card_type >= NV_50 || drm_pci_device_is_pcie(dev))
dev_priv->ramin_rsvd_vram >= 2 * 1024 * 1024)
aper_size = 512 * 1024 * 1024; aper_size = 512 * 1024 * 1024;
else else
aper_size = 64 * 1024 * 1024; aper_size = 64 * 1024 * 1024;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册