From 265899da3a428b34807a43bc244935f513480fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 4 Aug 2022 19:50:10 +0200 Subject: [PATCH] radeon_hd: from Cedar, memory sizes as bytes only for PALM/SUMO/SUMO2 should help with #17664 register change from Tahiti for #17377 Change-Id: I52b9691cd6a04b58b70e905bc29e803f06936789 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5526 Reviewed-by: John Scipione Tested-by: Commit checker robot --- .../private/graphics/radeon_hd/radeon_hd.h | 3 +- .../drivers/graphics/radeon_hd/radeon_hd.cpp | 28 ++++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/headers/private/graphics/radeon_hd/radeon_hd.h b/headers/private/graphics/radeon_hd/radeon_hd.h index eed8d1107b..c0c00f7be7 100644 --- a/headers/private/graphics/radeon_hd/radeon_hd.h +++ b/headers/private/graphics/radeon_hd/radeon_hd.h @@ -290,7 +290,8 @@ struct radeon_free_graphics_memory { // registers #define R6XX_CONFIG_APER_SIZE 0x5430 // r600> #define OLD_CONFIG_APER_SIZE 0x0108 // +#define CONFIG_MEMSIZE 0x5428 // r600> +#define CONFIG_MEMSIZE_TAHITI 0x03de // tahiti> #endif /* RADEON_HD_H */ diff --git a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp index 14c1090722..18bf7ec934 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp +++ b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp @@ -705,16 +705,24 @@ radeon_hd_init(radeon_info &info) mmioMapper.Detach(); // *** Populate frame buffer information - if (info.chipsetID >= RADEON_CEDAR) { - if ((info.chipsetFlags & CHIP_APU) != 0 - || (info.chipsetFlags & CHIP_IGP) != 0) { - // Evergreen+ fusion in bytes - info.shared_info->graphics_memory_size - = read32(info.registers + CONFIG_MEMSIZE) / 1024; - } else { - // Evergreen+ has memory stored in MB - info.shared_info->graphics_memory_size - = read32(info.registers + CONFIG_MEMSIZE) * 1024; + if (info.chipsetID >= RADEON_TAHITI) { + // Tahiti+ has memory stored in MB + info.shared_info->graphics_memory_size + = read32(info.registers + CONFIG_MEMSIZE_TAHITI) * 1024; + } else if (info.chipsetID >= RADEON_CEDAR) { + switch (info.chipsetID) { + default: + // Evergreen+ has memory stored in MB + info.shared_info->graphics_memory_size + = read32(info.registers + CONFIG_MEMSIZE) * 1024; + break; + case RADEON_PALM: + case RADEON_SUMO: + case RADEON_SUMO2: + // Fusion in bytes + info.shared_info->graphics_memory_size + = read32(info.registers + CONFIG_MEMSIZE) / 1024; + break; } } else if (info.chipsetID >= RADEON_R600) { // R600-R700 has memory stored in bytes