radeonsi: add Polaris12 support (v3)
authorJunwei Zhang <Jerry.Zhang@amd.com>
Mon, 19 Dec 2016 18:51:25 +0000 (13:51 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 21 Dec 2016 20:10:03 +0000 (15:10 -0500)
v2: use gfxip names for llvm 4.0+
v3: use tonga for llvm <= 3.8, drop gfxip name,
we can just change that we change the other asics.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Junwei Zhang <Jerry.Zhang@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
src/amd/addrlib/r800/ciaddrlib.cpp
src/amd/addrlib/r800/ciaddrlib.h
src/amd/common/amd_family.h
src/amd/common/amdgpu_id.h
src/gallium/drivers/radeon/r600_pipe_common.c
src/gallium/drivers/radeon/radeon_vce.c
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_state.c
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

index 7c5d29a216602404c94ab227c5d0596efcf75be5..c726c4d8dd00c2ec84d58271c91e137a9d30df3d 100644 (file)
@@ -353,6 +353,7 @@ AddrChipFamily CIAddrLib::HwlConvertChipFamily(
             m_settings.isFiji            = ASICREV_IS_FIJI_P(uChipRevision);
             m_settings.isPolaris10       = ASICREV_IS_POLARIS10_P(uChipRevision);
             m_settings.isPolaris11       = ASICREV_IS_POLARIS11_M(uChipRevision);
+            m_settings.isPolaris12       = ASICREV_IS_POLARIS12_V(uChipRevision);
             break;
         case FAMILY_CZ:
             m_settings.isCarrizo         = 1;
@@ -417,7 +418,7 @@ BOOL_32 CIAddrLib::HwlInitGlobalParams(
     {
         m_pipes = 16;
     }
-    else if (m_settings.isPolaris11)
+    else if (m_settings.isPolaris11 || m_settings.isPolaris12)
     {
         m_pipes = 4;
     }
index de995fa4058284d351addb9333978f2a741beb82..2c9a4cce7a6c8b33481e6031c96487a79d6e8a7d 100644 (file)
@@ -62,6 +62,7 @@ struct CIChipSettings
         UINT_32 isFiji            : 1;
         UINT_32 isPolaris10       : 1;
         UINT_32 isPolaris11       : 1;
+        UINT_32 isPolaris12       : 1;
         // VI fusion (Carrizo)
         UINT_32 isCarrizo         : 1;
     };
index 6a713ad7641cb21a456097055faace681b296a08..b09bbb89a3f9f9210fbf31980c9b3c071ee8f51d 100644 (file)
@@ -91,6 +91,7 @@ enum radeon_family {
     CHIP_STONEY,
     CHIP_POLARIS10,
     CHIP_POLARIS11,
+    CHIP_POLARIS12,
     CHIP_LAST,
 };
 
index f91df55711a2c5dcf0ed605ab46f9a34bd10b1df..1683a5a746c8766e269c75be293edd519b13efd5 100644 (file)
@@ -142,6 +142,8 @@ enum {
 
        VI_POLARIS11_M_A0 = 90,
 
+       VI_POLARIS12_V_A0 = 100,
+
        VI_UNKNOWN        = 0xFF
 };
 
@@ -156,6 +158,8 @@ enum {
        ((eChipRev >= VI_POLARIS10_P_A0) && (eChipRev < VI_POLARIS11_M_A0))
 #define ASICREV_IS_POLARIS11_M(eChipRev)   \
        (eChipRev >= VI_POLARIS11_M_A0)
+#define ASICREV_IS_POLARIS12_V(eChipRev)\
+       (eChipRev >= VI_POLARIS12_V_A0)
 
 /* CZ specific rev IDs */
 enum {
index 0b5c6dca416f47223ef1fc8f81ac8aab6e4bd07c..e0b914c50fd0961d8ce6a1093a8bece21a3c5f18 100644 (file)
@@ -755,6 +755,7 @@ static const char* r600_get_chip_name(struct r600_common_screen *rscreen)
        case CHIP_FIJI: return "AMD FIJI";
        case CHIP_POLARIS10: return "AMD POLARIS10";
        case CHIP_POLARIS11: return "AMD POLARIS11";
+       case CHIP_POLARIS12: return "AMD POLARIS12";
        case CHIP_STONEY: return "AMD STONEY";
        default: return "AMD unknown";
        }
@@ -889,9 +890,11 @@ const char *r600_get_llvm_processor_name(enum radeon_family family)
 #if HAVE_LLVM <= 0x0308
        case CHIP_POLARIS10: return "tonga";
        case CHIP_POLARIS11: return "tonga";
+       case CHIP_POLARIS12: return "tonga";
 #else
        case CHIP_POLARIS10: return "polaris10";
        case CHIP_POLARIS11: return "polaris11";
+       case CHIP_POLARIS12: return "polaris11";
 #endif
        default: return "";
        }
index aad2ec192f992fb68339cb9a6bdc37e9d37c8e3e..dcd56eaffb1a86a8766e5d984645a96ed395594d 100644 (file)
@@ -413,7 +413,8 @@ struct pipe_video_codec *rvce_create_encoder(struct pipe_context *context,
                enc->use_vui = true;
        if (rscreen->info.family >= CHIP_TONGA &&
            rscreen->info.family != CHIP_STONEY &&
-           rscreen->info.family != CHIP_POLARIS11)
+           rscreen->info.family != CHIP_POLARIS11 &&
+           rscreen->info.family != CHIP_POLARIS12)
                enc->dual_pipe = true;
        /* TODO enable B frame with dual instance */
        if ((rscreen->info.family >= CHIP_TONGA) &&
index 88685f9ada887f4ad99b43334634a61b4603a52a..11cca6ff5219a4d2068d1cc5a4a40bd86056a851 100644 (file)
@@ -734,6 +734,7 @@ static bool si_init_gs_info(struct si_screen *sscreen)
        case CHIP_FIJI:
        case CHIP_POLARIS10:
        case CHIP_POLARIS11:
+       case CHIP_POLARIS12:
                sscreen->gs_table_depth = 32;
                return true;
        default:
index 984540d511a69cee94fbf66d3fd3bc0f0ac3a2f1..65737f4f165c2aaf575d0c1a32aad0e295348467 100644 (file)
@@ -3936,6 +3936,7 @@ static void si_init_config(struct si_context *sctx)
                raster_config_1 = 0x0000002a;
                break;
        case CHIP_POLARIS11:
+       case CHIP_POLARIS12:
                raster_config = 0x16000012;
                raster_config_1 = 0x00000000;
                break;
index 98d72bd9f2c8fa4e545211c1a177e04a30ad8946..0f7d16183e24fa60b6f785fa03106ddf0ab37d0e 100644 (file)
@@ -300,6 +300,10 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd)
       ws->family = FAMILY_VI;
       ws->rev_id = VI_POLARIS11_M_A0;
       break;
+   case CHIP_POLARIS12:
+      ws->family = FAMILY_VI;
+      ws->rev_id = VI_POLARIS12_V_A0;
+      break;
    default:
       fprintf(stderr, "amdgpu: Unknown family.\n");
       goto fail;