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