summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-03-06 13:31:06 -0500
committerDave Airlie <airlied@gmail.com>2014-07-02 07:19:00 +1000
commitb7cbbc673ee0e977700ef62b98f7cf2a347c9b35 (patch)
tree758cc5bb52286e2ab3de827607464779bdc93f61
parent7d28b4349e7caedf9225faf56fd528d0052326d1 (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.h10
-rw-r--r--radeon_chipinfo_gen.h33
-rw-r--r--radeonreg.c9
3 files changed, 48 insertions, 4 deletions
diff --git a/radeon.h b/radeon.h
index 6ee0826..30e27b7 100644
--- a/radeon.h
+++ b/radeon.h
@@ -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,