diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2014-03-06 13:31:06 -0500 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2014-07-02 07:19:00 +1000 |
commit | b7cbbc673ee0e977700ef62b98f7cf2a347c9b35 (patch) | |
tree | 758cc5bb52286e2ab3de827607464779bdc93f61 | |
parent | 7d28b4349e7caedf9225faf56fd528d0052326d1 (diff) |
radeonreg: add support for SI and CIK parts
CIK parts use a different PCI BAR for registers.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@gmail.com>
-rw-r--r-- | radeon.h | 10 | ||||
-rw-r--r-- | radeon_chipinfo_gen.h | 33 | ||||
-rw-r--r-- | radeonreg.c | 9 |
3 files changed, 48 insertions, 4 deletions
@@ -14,7 +14,8 @@ static char *family_strings[] = {"Unknown", "legacy", "radeon", "palm", "sumo", "sumo2", "barts", "turks", "caicos", "cayman", "aruba", - "tahiti", "pitcairn", "verde" }; + "tahiti", "pitcairn", "verde", "oland", "hainan", + "bonaire", "kaveri", "kabini", "hawaii" }; typedef enum { CHIP_FAMILY_UNKNOW, @@ -79,6 +80,7 @@ typedef enum { CHIP_FAMILY_BONAIRE, CHIP_FAMILY_KAVERI, CHIP_FAMILY_KABINI, + CHIP_FAMILY_HAWAII, CHIP_FAMILY_LAST } RADEONChipFamily; @@ -114,4 +116,8 @@ typedef struct { (card_info->chip_family <= CHIP_FAMILY_CAYMAN)) #define IS_DISPLAY_DCE6(card_info) (card_info && \ (card_info->chip_family >= CHIP_FAMILY_ARUBA) && \ - (card_info->chip_family <= CHIP_FAMILY_VERDE)) + (card_info->chip_family <= CHIP_FAMILY_OLAND)) + +#define IS_DISPLAY_DCE8(card_info) (card_info && \ + (card_info->chip_family >= CHIP_FAMILY_BONAIRE) && \ + (card_info->chip_family <= CHIP_FAMILY_HAWAII)) diff --git a/radeon_chipinfo_gen.h b/radeon_chipinfo_gen.h index 221d93e..be038b6 100644 --- a/radeon_chipinfo_gen.h +++ b/radeon_chipinfo_gen.h @@ -642,4 +642,37 @@ static RADEONCardInfo RADEONCards[] = { { 0x983D, CHIP_FAMILY_KABINI, 0, 1, 0, 0, 1 }, { 0x983E, CHIP_FAMILY_KABINI, 0, 1, 0, 0, 1 }, { 0x983F, CHIP_FAMILY_KABINI, 0, 1, 0, 0, 1 }, + { 0x1304, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x1305, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1306, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x1307, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1309, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130A, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130B, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130C, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130D, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130E, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130F, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1310, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1311, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1312, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1313, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1315, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1316, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1317, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x131B, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x131C, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x131D, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x67A0, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A1, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A2, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A8, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A9, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67AA, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B0, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B1, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B8, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B9, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67BA, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67BE, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, }; diff --git a/radeonreg.c b/radeonreg.c index 37efdd7..92ff896 100644 --- a/radeonreg.c +++ b/radeonreg.c @@ -437,8 +437,13 @@ static int map_radeon_mem(void) card_info = &RADEONCards[i]; } - ctrl_base = device->regions[2].base_addr; - ctrl_size = device->regions[2].size; + if (card_info->chip_family < CHIP_FAMILY_BONAIRE) { + ctrl_base = device->regions[2].base_addr; + ctrl_size = device->regions[2].size; + } else { + ctrl_base = device->regions[5].base_addr; + ctrl_size = device->regions[5].size; + } if (!ctrl_size) die("missing ctrl region"); ret = pci_device_map_range(device, ctrl_base, ctrl_size, |