[Mesa-dev,1/2] radeonsi: add Polaris12 support

Submitted by Alex Deucher on Dec. 19, 2016, 7:04 p.m.

Details

Message ID 1482174246-19761-1-git-send-email-alexander.deucher@amd.com
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Alex Deucher Dec. 19, 2016, 7:04 p.m.
From: Junwei Zhang <Jerry.Zhang@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            | 3 ++-
 src/amd/addrlib/r800/ciaddrlib.h              | 1 +
 src/amd/common/amd_family.h                   | 1 +
 src/amd/common/amdgpu_id.h                    | 4 ++++
 src/gallium/drivers/radeon/r600_pipe_common.c | 6 ++++++
 src/gallium/drivers/radeon/radeon_vce.c       | 3 ++-
 src/gallium/drivers/radeonsi/si_pipe.c        | 1 +
 src/gallium/drivers/radeonsi/si_state.c       | 1 +
 src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 4 ++++
 9 files changed, 22 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/amd/addrlib/r800/ciaddrlib.cpp b/src/amd/addrlib/r800/ciaddrlib.cpp
index 7c5d29a..c726c4d 100644
--- a/src/amd/addrlib/r800/ciaddrlib.cpp
+++ b/src/amd/addrlib/r800/ciaddrlib.cpp
@@ -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;
     }
diff --git a/src/amd/addrlib/r800/ciaddrlib.h b/src/amd/addrlib/r800/ciaddrlib.h
index de995fa..2c9a4cc 100644
--- a/src/amd/addrlib/r800/ciaddrlib.h
+++ b/src/amd/addrlib/r800/ciaddrlib.h
@@ -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;
     };
diff --git a/src/amd/common/amd_family.h b/src/amd/common/amd_family.h
index 6a713ad..b09bbb8 100644
--- a/src/amd/common/amd_family.h
+++ b/src/amd/common/amd_family.h
@@ -91,6 +91,7 @@  enum radeon_family {
     CHIP_STONEY,
     CHIP_POLARIS10,
     CHIP_POLARIS11,
+    CHIP_POLARIS12,
     CHIP_LAST,
 };
 
diff --git a/src/amd/common/amdgpu_id.h b/src/amd/common/amdgpu_id.h
index f91df55..1683a5a 100644
--- a/src/amd/common/amdgpu_id.h
+++ b/src/amd/common/amdgpu_id.h
@@ -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 {
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
index 0b5c6dc..033e59c 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -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";
 	}
@@ -893,6 +894,11 @@  const char *r600_get_llvm_processor_name(enum radeon_family family)
 	case CHIP_POLARIS10: return "polaris10";
 	case CHIP_POLARIS11: return "polaris11";
 #endif
+#if HAVE_LLVM <= 0x0309
+	case CHIP_POLARIS12: return "polaris11";
+#else
+	case CHIP_POLARIS12: return "polaris12";
+#endif
 	default: return "";
 	}
 }
diff --git a/src/gallium/drivers/radeon/radeon_vce.c b/src/gallium/drivers/radeon/radeon_vce.c
index aad2ec1..dcd56ea 100644
--- a/src/gallium/drivers/radeon/radeon_vce.c
+++ b/src/gallium/drivers/radeon/radeon_vce.c
@@ -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) &&
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 88685f9..11cca6f 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -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:
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 984540d..65737f4 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -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;
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
index 98d72bd..0f7d161 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
@@ -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;

Comments

On Mon, Dec 19, 2016 at 02:04:05PM -0500, Alex Deucher wrote:
> From: Junwei Zhang <Jerry.Zhang@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            | 3 ++-
>  src/amd/addrlib/r800/ciaddrlib.h              | 1 +
>  src/amd/common/amd_family.h                   | 1 +
>  src/amd/common/amdgpu_id.h                    | 4 ++++
>  src/gallium/drivers/radeon/r600_pipe_common.c | 6 ++++++
>  src/gallium/drivers/radeon/radeon_vce.c       | 3 ++-
>  src/gallium/drivers/radeonsi/si_pipe.c        | 1 +
>  src/gallium/drivers/radeonsi/si_state.c       | 1 +
>  src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 4 ++++
>  9 files changed, 22 insertions(+), 2 deletions(-)
> 
> diff --git a/src/amd/addrlib/r800/ciaddrlib.cpp b/src/amd/addrlib/r800/ciaddrlib.cpp
> index 7c5d29a..c726c4d 100644
> --- a/src/amd/addrlib/r800/ciaddrlib.cpp
> +++ b/src/amd/addrlib/r800/ciaddrlib.cpp
> @@ -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;
>      }
> diff --git a/src/amd/addrlib/r800/ciaddrlib.h b/src/amd/addrlib/r800/ciaddrlib.h
> index de995fa..2c9a4cc 100644
> --- a/src/amd/addrlib/r800/ciaddrlib.h
> +++ b/src/amd/addrlib/r800/ciaddrlib.h
> @@ -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;
>      };
> diff --git a/src/amd/common/amd_family.h b/src/amd/common/amd_family.h
> index 6a713ad..b09bbb8 100644
> --- a/src/amd/common/amd_family.h
> +++ b/src/amd/common/amd_family.h
> @@ -91,6 +91,7 @@ enum radeon_family {
>      CHIP_STONEY,
>      CHIP_POLARIS10,
>      CHIP_POLARIS11,
> +    CHIP_POLARIS12,
>      CHIP_LAST,
>  };
>  
> diff --git a/src/amd/common/amdgpu_id.h b/src/amd/common/amdgpu_id.h
> index f91df55..1683a5a 100644
> --- a/src/amd/common/amdgpu_id.h
> +++ b/src/amd/common/amdgpu_id.h
> @@ -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 {
> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
> index 0b5c6dc..033e59c 100644
> --- a/src/gallium/drivers/radeon/r600_pipe_common.c
> +++ b/src/gallium/drivers/radeon/r600_pipe_common.c
> @@ -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";
>  	}
> @@ -893,6 +894,11 @@ const char *r600_get_llvm_processor_name(enum radeon_family family)
>  	case CHIP_POLARIS10: return "polaris10";
>  	case CHIP_POLARIS11: return "polaris11";
>  #endif
> +#if HAVE_LLVM <= 0x0309
> +	case CHIP_POLARIS12: return "polaris11";
> +#else
> +	case CHIP_POLARIS12: return "polaris12";

There is a preference to move away from code names and use
gfxip names in the compiler. For LLVM >= 4.0 this should be "gfx803"

-Tom

> +#endif
>  	default: return "";
>  	}
>  }
> diff --git a/src/gallium/drivers/radeon/radeon_vce.c b/src/gallium/drivers/radeon/radeon_vce.c
> index aad2ec1..dcd56ea 100644
> --- a/src/gallium/drivers/radeon/radeon_vce.c
> +++ b/src/gallium/drivers/radeon/radeon_vce.c
> @@ -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) &&
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
> index 88685f9..11cca6f 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -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:
> diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
> index 984540d..65737f4 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -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;
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> index 98d72bd..0f7d161 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> @@ -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;
> -- 
> 2.5.5
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev