summaryrefslogtreecommitdiffstats
path: root/gralloc_drm_radeon.c
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2011-08-10 17:43:28 +0800
committerChia-I Wu <olvaffe@gmail.com>2011-08-10 17:54:22 +0800
commit74a2f65af1c31d9239988ecdeca8dfbda46dc2e9 (patch)
treead1c3eb031d83fe0673ef7d65b56fcbce9bb388e /gralloc_drm_radeon.c
parent5bb8620b617569995832898887ee861f61341b4c (diff)
downloadexternal_drm_gralloc-74a2f65af1c31d9239988ecdeca8dfbda46dc2e9.zip
external_drm_gralloc-74a2f65af1c31d9239988ecdeca8dfbda46dc2e9.tar.gz
external_drm_gralloc-74a2f65af1c31d9239988ecdeca8dfbda46dc2e9.tar.bz2
radeon: use a table to detect chip family
Diffstat (limited to 'gralloc_drm_radeon.c')
-rw-r--r--gralloc_drm_radeon.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/gralloc_drm_radeon.c b/gralloc_drm_radeon.c
index 40fd53e..d7d8c98 100644
--- a/gralloc_drm_radeon.c
+++ b/gralloc_drm_radeon.c
@@ -40,26 +40,24 @@
#include "gralloc_drm.h"
#include "gralloc_drm_priv.h"
+#include "radeon/radeon.h"
+#include "radeon/radeon_chipinfo_gen.h"
+
#define RADEON_GPU_PAGE_SIZE 4096
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define ALIGN(val, align) (((val) + (align) - 1) & ~((align) - 1))
-enum {
- CHIP_FAMILY_R600,
- CHIP_FAMILY_CEDAR,
- CHIP_FAMILY_PALM,
- CHIP_FAMILY_LAST
-};
-
struct radeon_info {
struct gralloc_drm_drv_t base;
int fd;
struct radeon_bo_manager *bufmgr;
- int chipset;
- int chip_family;
+ uint32_t chipset;
+ RADEONChipFamily chip_family;
+ int is_mobility;
+ int is_igp;
uint32_t tile_config;
int num_channels;
@@ -464,6 +462,7 @@ static int radeon_probe(struct radeon_info *info)
{
struct drm_radeon_info kinfo;
struct drm_radeon_gem_info mminfo;
+ unsigned int i;
int err;
memset(&kinfo, 0, sizeof(kinfo));
@@ -475,14 +474,18 @@ static int radeon_probe(struct radeon_info *info)
return err;
}
- /* XXX this is wrong and a table should be used */
- if (info->chipset >= 0x68e4 && info->chipset <= 0x68fe) {
- info->chip_family = CHIP_FAMILY_CEDAR;
- }
- else if (info->chipset >= 0x9802 && info->chipset <= 0x9807) {
- info->chip_family = CHIP_FAMILY_PALM;
+ for (i = 0; i < sizeof(RADEONCards) / sizeof(RADEONCards[0]); i++) {
+ const RADEONCardInfo *card = &RADEONCards[i];
+
+ if (info->chipset == card->pci_device_id) {
+ info->chip_family = card->chip_family;
+ info->is_mobility = card->mobility;
+ info->is_igp = card->igp;
+ break;
+ }
}
- else {
+
+ if (info->chip_family == CHIP_FAMILY_UNKNOW) {
LOGE("unknown device id 0x%04x", info->chipset);
return -EINVAL;
}
@@ -506,9 +509,8 @@ static int radeon_probe(struct radeon_info *info)
info->vram_size = mminfo.vram_visible;
info->gart_size = mminfo.gart_size;
- LOGI("detected chip family %s (vram size %dMiB, gart size %dMiB)",
- (info->chip_family == CHIP_FAMILY_CEDAR) ?
- "CEDAR" : "PALM",
+ LOGI("detected chipset 0x%04x family 0x%02x (vram size %dMiB, gart size %dMiB)",
+ info->chipset, info->chip_family,
info->vram_size / 1024 / 1024,
info->gart_size / 1024 / 1024);