|
@@ -3882,8 +3882,15 @@ static int si_mc_init(struct radeon_device *rdev)
|
|
|
rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
|
|
|
rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
|
|
|
/* size in MB on si */
|
|
|
- rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
|
|
|
- rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
|
|
|
+ tmp = RREG32(CONFIG_MEMSIZE);
|
|
|
+ /* some boards may have garbage in the upper 16 bits */
|
|
|
+ if (tmp & 0xffff0000) {
|
|
|
+ DRM_INFO("Probable bad vram size: 0x%08x\n", tmp);
|
|
|
+ if (tmp & 0xffff)
|
|
|
+ tmp &= 0xffff;
|
|
|
+ }
|
|
|
+ rdev->mc.mc_vram_size = tmp * 1024ULL * 1024ULL;
|
|
|
+ rdev->mc.real_vram_size = rdev->mc.mc_vram_size;
|
|
|
rdev->mc.visible_vram_size = rdev->mc.aper_size;
|
|
|
si_vram_gtt_location(rdev, &rdev->mc);
|
|
|
radeon_update_bandwidth_info(rdev);
|