On Wed, Jul 11, 2018 at 4:11 PM, Marek Olšák <mar...@gmail.com> wrote:
> From: Marek Olšák <marek.ol...@amd.com>
>
> ---
>  include/pci_ids/radeonsi_pci_ids.h              | 7 +++++++
>  src/amd/addrlib/amdgpu_asic_addr.h              | 2 ++
>  src/amd/addrlib/gfx9/gfx9addrlib.cpp            | 3 ++-
>  src/amd/addrlib/gfx9/gfx9addrlib.h              | 1 +
>  src/amd/common/ac_llvm_util.c                   | 4 +++-
>  src/amd/common/ac_surface.c                     | 4 ++++
>  src/amd/common/amd_family.h                     | 1 +
>  src/amd/common/gfx9d.h                          | 1 +
>  src/gallium/drivers/radeonsi/si_get.c           | 1 +
>  src/gallium/drivers/radeonsi/si_pipe.c          | 3 ++-
>  src/gallium/drivers/radeonsi/si_state.c         | 1 +
>  src/gallium/drivers/radeonsi/si_state_binning.c | 1 +
>  12 files changed, 26 insertions(+), 3 deletions(-)

Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

>
> diff --git a/include/pci_ids/radeonsi_pci_ids.h 
> b/include/pci_ids/radeonsi_pci_ids.h
> index 6386d21a19f..c8d30597230 100644
> --- a/include/pci_ids/radeonsi_pci_ids.h
> +++ b/include/pci_ids/radeonsi_pci_ids.h
> @@ -228,11 +228,18 @@ CHIPSET(0x6867, VEGA10)
>  CHIPSET(0x6868, VEGA10)
>  CHIPSET(0x687F, VEGA10)
>  CHIPSET(0x686C, VEGA10)
>
>  CHIPSET(0x69A0, VEGA12)
>  CHIPSET(0x69A1, VEGA12)
>  CHIPSET(0x69A2, VEGA12)
>  CHIPSET(0x69A3, VEGA12)
>  CHIPSET(0x69AF, VEGA12)
>
> +CHIPSET(0x66A0, VEGA20)
> +CHIPSET(0x66A1, VEGA20)
> +CHIPSET(0x66A2, VEGA20)
> +CHIPSET(0x66A3, VEGA20)
> +CHIPSET(0x66A7, VEGA20)
> +CHIPSET(0x66AF, VEGA20)
> +
>  CHIPSET(0x15DD, RAVEN)
> diff --git a/src/amd/addrlib/amdgpu_asic_addr.h 
> b/src/amd/addrlib/amdgpu_asic_addr.h
> index b4b8aecd42d..e5838d42a3c 100644
> --- a/src/amd/addrlib/amdgpu_asic_addr.h
> +++ b/src/amd/addrlib/amdgpu_asic_addr.h
> @@ -80,20 +80,21 @@
>  #define AMDGPU_POLARIS11_RANGE  0x5A, 0x64
>  #define AMDGPU_POLARIS12_RANGE  0x64, 0x6E
>  #define AMDGPU_VEGAM_RANGE      0x6E, 0xFF
>
>  #define AMDGPU_CARRIZO_RANGE    0x01, 0x21
>  #define AMDGPU_BRISTOL_RANGE    0x10, 0x21
>  #define AMDGPU_STONEY_RANGE     0x61, 0xFF
>
>  #define AMDGPU_VEGA10_RANGE     0x01, 0x14
>  #define AMDGPU_VEGA12_RANGE     0x14, 0x28
> +#define AMDGPU_VEGA20_RANGE     0x28, 0xFF
>
>  #define AMDGPU_RAVEN_RANGE      0x01, 0x81
>
>  #define AMDGPU_EXPAND_FIX(x) x
>  #define AMDGPU_RANGE_HELPER(val, min, max) ((val >= min) && (val < max))
>  #define AMDGPU_IN_RANGE(val, ...)   
> AMDGPU_EXPAND_FIX(AMDGPU_RANGE_HELPER(val, __VA_ARGS__))
>
>
>  // ASICREV_IS(eRevisionId, revisionName)
>  #define ASICREV_IS(r, rn)              AMDGPU_IN_RANGE(r, 
> AMDGPU_##rn##_RANGE)
> @@ -121,14 +122,15 @@
>  #define ASICREV_IS_VEGAM_P(r)          ASICREV_IS(r, VEGAM)
>
>  #define ASICREV_IS_CARRIZO(r)          ASICREV_IS(r, CARRIZO)
>  #define ASICREV_IS_CARRIZO_BRISTOL(r)  ASICREV_IS(r, BRISTOL)
>  #define ASICREV_IS_STONEY(r)           ASICREV_IS(r, STONEY)
>
>  #define ASICREV_IS_VEGA10_M(r)         ASICREV_IS(r, VEGA10)
>  #define ASICREV_IS_VEGA10_P(r)         ASICREV_IS(r, VEGA10)
>  #define ASICREV_IS_VEGA12_P(r)         ASICREV_IS(r, VEGA12)
>  #define ASICREV_IS_VEGA12_p(r)         ASICREV_IS(r, VEGA12)
> +#define ASICREV_IS_VEGA20_P(r)         ASICREV_IS(r, VEGA20)
>
>  #define ASICREV_IS_RAVEN(r)            ASICREV_IS(r, RAVEN)
>
>  #endif // _AMDGPU_ASIC_ADDR_H
> diff --git a/src/amd/addrlib/gfx9/gfx9addrlib.cpp 
> b/src/amd/addrlib/gfx9/gfx9addrlib.cpp
> index b88d3243228..ef86c3bc7b5 100644
> --- a/src/amd/addrlib/gfx9/gfx9addrlib.cpp
> +++ b/src/amd/addrlib/gfx9/gfx9addrlib.cpp
> @@ -1223,20 +1223,21 @@ BOOL_32 Gfx9Lib::HwlInitGlobalParams(
>          ADDR_ASSERT((m_blockVarSizeLog2 == 0) ||
>                      ((m_blockVarSizeLog2 >= 17u) && (m_blockVarSizeLog2 <= 
> 20u)));
>          m_blockVarSizeLog2 = Min(Max(17u, m_blockVarSizeLog2), 20u);
>
>          if ((m_rbPerSeLog2 == 1) &&
>              (((m_pipesLog2 == 1) && ((m_seLog2 == 2) || (m_seLog2 == 3))) ||
>               ((m_pipesLog2 == 2) && ((m_seLog2 == 1) || (m_seLog2 == 2)))))
>          {
>              ADDR_ASSERT(m_settings.isVega10 == FALSE);
>              ADDR_ASSERT(m_settings.isRaven == FALSE);
> +            ADDR_ASSERT(m_settings.isVega20 == FALSE);
>
>              if (m_settings.isVega12)
>              {
>                  m_settings.htileCacheRbConflict = 1;
>              }
>          }
>      }
>      else
>      {
>          valid = FALSE;
> @@ -1266,21 +1267,21 @@ ChipFamily Gfx9Lib::HwlConvertChipFamily(
>      UINT_32 uChipRevision)      ///< [in] chip revision defined in 
> "asic_family"_id.h
>  {
>      ChipFamily family = ADDR_CHIP_FAMILY_AI;
>
>      switch (uChipFamily)
>      {
>          case FAMILY_AI:
>              m_settings.isArcticIsland = 1;
>              m_settings.isVega10    = ASICREV_IS_VEGA10_P(uChipRevision);
>              m_settings.isVega12    = ASICREV_IS_VEGA12_P(uChipRevision);
> -
> +            m_settings.isVega20    = ASICREV_IS_VEGA20_P(uChipRevision);
>              m_settings.isDce12 = 1;
>
>              if (m_settings.isVega10 == 0)
>              {
>                  m_settings.htileAlignFix = 1;
>                  m_settings.applyAliasFix = 1;
>              }
>
>              m_settings.metaBaseAlignFix = 1;
>
> diff --git a/src/amd/addrlib/gfx9/gfx9addrlib.h 
> b/src/amd/addrlib/gfx9/gfx9addrlib.h
> index 7c61a40880e..cf56507964c 100644
> --- a/src/amd/addrlib/gfx9/gfx9addrlib.h
> +++ b/src/amd/addrlib/gfx9/gfx9addrlib.h
> @@ -49,20 +49,21 @@ namespace V2
>  */
>  struct Gfx9ChipSettings
>  {
>      struct
>      {
>          // Asic/Generation name
>          UINT_32 isArcticIsland      : 1;
>          UINT_32 isVega10            : 1;
>          UINT_32 isRaven             : 1;
>          UINT_32 isVega12            : 1;
> +        UINT_32 isVega20            : 1;
>
>          // Display engine IP version name
>          UINT_32 isDce12             : 1;
>          UINT_32 isDcn1              : 1;
>
>          // Misc configuration bits
>          UINT_32 metaBaseAlignFix    : 1;
>          UINT_32 depthPipeXorDisable : 1;
>          UINT_32 htileAlignFix       : 1;
>          UINT_32 applyAliasFix       : 1;
> diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
> index 9e7a106afa5..c817f94a2d1 100644
> --- a/src/amd/common/ac_llvm_util.c
> +++ b/src/amd/common/ac_llvm_util.c
> @@ -121,34 +121,36 @@ const char *ac_get_llvm_processor_name(enum 
> radeon_family family)
>         case CHIP_POLARIS11:
>         case CHIP_POLARIS12:
>         case CHIP_VEGAM:
>                 return "polaris11";
>         case CHIP_VEGA10:
>                 return "gfx900";
>         case CHIP_RAVEN:
>                 return "gfx902";
>         case CHIP_VEGA12:
>                 return HAVE_LLVM >= 0x0700 ? "gfx904" : "gfx902";
> +       case CHIP_VEGA20:
> +               return HAVE_LLVM >= 0x0700 ? "gfx906" : "gfx902";
>         default:
>                 return "";
>         }
>  }
>
>  static LLVMTargetMachineRef ac_create_target_machine(enum radeon_family 
> family,
>                                                      enum 
> ac_target_machine_options tm_options,
>                                                      const char **out_triple)
>  {
>         assert(family >= CHIP_TAHITI);
>         char features[256];
>         const char *triple = (tm_options & AC_TM_SUPPORTS_SPILL) ? 
> "amdgcn-mesa-mesa3d" : "amdgcn--";
>         LLVMTargetRef target = ac_get_llvm_target(triple);
> -       bool barrier_does_waitcnt = true; /* TODO: not for Vega20 */
> +       bool barrier_does_waitcnt = family != CHIP_VEGA20;
>
>         snprintf(features, sizeof(features),
>                  
> "+DumpCode,+vgpr-spilling,-fp32-denormals,+fp64-denormals%s%s%s%s%s",
>                  tm_options & AC_TM_SISCHED ? ",+si-scheduler" : "",
>                  tm_options & AC_TM_FORCE_ENABLE_XNACK ? ",+xnack" : "",
>                  tm_options & AC_TM_FORCE_DISABLE_XNACK ? ",-xnack" : "",
>                  tm_options & AC_TM_PROMOTE_ALLOCA_TO_SCRATCH ? 
> ",-promote-alloca" : "",
>                  barrier_does_waitcnt ? ",+auto-waitcnt-before-barrier" : "");
>
>         LLVMTargetMachineRef tm = LLVMCreateTargetMachine(
> diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
> index 9eb63bab038..959e7b3d735 100644
> --- a/src/amd/common/ac_surface.c
> +++ b/src/amd/common/ac_surface.c
> @@ -136,20 +136,24 @@ static void addrlib_family_rev_id(enum radeon_family 
> family,
>                 *addrlib_revid = get_first(AMDGPU_VEGAM_RANGE);
>                 break;
>         case CHIP_VEGA10:
>                 *addrlib_family = FAMILY_AI;
>                 *addrlib_revid = get_first(AMDGPU_VEGA10_RANGE);
>                 break;
>         case CHIP_VEGA12:
>                 *addrlib_family = FAMILY_AI;
>                 *addrlib_revid = get_first(AMDGPU_VEGA12_RANGE);
>                 break;
> +       case CHIP_VEGA20:
> +               *addrlib_family = FAMILY_AI;
> +               *addrlib_revid = get_first(AMDGPU_VEGA20_RANGE);
> +               break;
>         case CHIP_RAVEN:
>                 *addrlib_family = FAMILY_RV;
>                 *addrlib_revid = get_first(AMDGPU_RAVEN_RANGE);
>                 break;
>         default:
>                 fprintf(stderr, "amdgpu: Unknown family.\n");
>         }
>  }
>
>  static void *ADDR_API allocSysMem(const ADDR_ALLOCSYSMEM_INPUT * pInput)
> diff --git a/src/amd/common/amd_family.h b/src/amd/common/amd_family.h
> index 6410368f2f8..a282898be06 100644
> --- a/src/amd/common/amd_family.h
> +++ b/src/amd/common/amd_family.h
> @@ -88,20 +88,21 @@ enum radeon_family {
>      CHIP_ICELAND,
>      CHIP_CARRIZO,
>      CHIP_FIJI,
>      CHIP_STONEY,
>      CHIP_POLARIS10,
>      CHIP_POLARIS11,
>      CHIP_POLARIS12,
>      CHIP_VEGAM,
>      CHIP_VEGA10,
>      CHIP_VEGA12,
> +    CHIP_VEGA20,
>      CHIP_RAVEN,
>      CHIP_LAST,
>  };
>
>  enum chip_class {
>      CLASS_UNKNOWN = 0,
>      R300,
>      R400,
>      R500,
>      R600,
> diff --git a/src/amd/common/gfx9d.h b/src/amd/common/gfx9d.h
> index 485fd7d0fed..d18e6655d33 100644
> --- a/src/amd/common/gfx9d.h
> +++ b/src/amd/common/gfx9d.h
> @@ -5757,20 +5757,21 @@
>  #define   C_02883C_DISCARD_0_AREA_LINES                               
> 0xFFFFFFFD
>  #define   S_02883C_DISCARD_0_AREA_POINTS(x)                           
> (((unsigned)(x) & 0x1) << 2)
>  #define   G_02883C_DISCARD_0_AREA_POINTS(x)                           (((x) 
> >> 2) & 0x1)
>  #define   C_02883C_DISCARD_0_AREA_POINTS                              
> 0xFFFFFFFB
>  #define   S_02883C_DISCARD_0_AREA_RECTANGLES(x)                       
> (((unsigned)(x) & 0x1) << 3)
>  #define   G_02883C_DISCARD_0_AREA_RECTANGLES(x)                       (((x) 
> >> 3) & 0x1)
>  #define   C_02883C_DISCARD_0_AREA_RECTANGLES                          
> 0xFFFFFFF7
>  #define   S_02883C_USE_PROVOKING_ZW(x)                                
> (((unsigned)(x) & 0x1) << 4)
>  #define   G_02883C_USE_PROVOKING_ZW(x)                                (((x) 
> >> 4) & 0x1)
>  #define   C_02883C_USE_PROVOKING_ZW                                   
> 0xFFFFFFEF
> +#define R_028840_PA_STEREO_CNTL                                         
> 0x028840
>  #define R_028A00_PA_SU_POINT_SIZE                                       
> 0x028A00
>  #define   S_028A00_HEIGHT(x)                                          
> (((unsigned)(x) & 0xFFFF) << 0)
>  #define   G_028A00_HEIGHT(x)                                          (((x) 
> >> 0) & 0xFFFF)
>  #define   C_028A00_HEIGHT                                             
> 0xFFFF0000
>  #define   S_028A00_WIDTH(x)                                           
> (((unsigned)(x) & 0xFFFF) << 16)
>  #define   G_028A00_WIDTH(x)                                           (((x) 
> >> 16) & 0xFFFF)
>  #define   C_028A00_WIDTH                                              
> 0x0000FFFF
>  #define R_028A04_PA_SU_POINT_MINMAX                                     
> 0x028A04
>  #define   S_028A04_MIN_SIZE(x)                                        
> (((unsigned)(x) & 0xFFFF) << 0)
>  #define   G_028A04_MIN_SIZE(x)                                        (((x) 
> >> 0) & 0xFFFF)
> diff --git a/src/gallium/drivers/radeonsi/si_get.c 
> b/src/gallium/drivers/radeonsi/si_get.c
> index 96ff2a9e46b..b8ee8734379 100644
> --- a/src/gallium/drivers/radeonsi/si_get.c
> +++ b/src/gallium/drivers/radeonsi/si_get.c
> @@ -71,20 +71,21 @@ const char *si_get_family_name(const struct si_screen 
> *sscreen)
>         case CHIP_ICELAND: return "AMD ICELAND";
>         case CHIP_CARRIZO: return "AMD CARRIZO";
>         case CHIP_FIJI: return "AMD FIJI";
>         case CHIP_STONEY: return "AMD STONEY";
>         case CHIP_POLARIS10: return "AMD POLARIS10";
>         case CHIP_POLARIS11: return "AMD POLARIS11";
>         case CHIP_POLARIS12: return "AMD POLARIS12";
>         case CHIP_VEGAM: return "AMD VEGAM";
>         case CHIP_VEGA10: return "AMD VEGA10";
>         case CHIP_VEGA12: return "AMD VEGA12";
> +       case CHIP_VEGA20: return "AMD VEGA20";
>         case CHIP_RAVEN: return "AMD RAVEN";
>         default: return "AMD unknown";
>         }
>  }
>
>  static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>  {
>         struct si_screen *sscreen = (struct si_screen *)pscreen;
>
>         switch (param) {
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c 
> b/src/gallium/drivers/radeonsi/si_pipe.c
> index ac4f77a8964..d3d0c0ef075 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -885,21 +885,22 @@ struct pipe_screen *radeonsi_screen_create(struct 
> radeon_winsys *ws,
>         /* Determine tessellation ring info. */
>         bool double_offchip_buffers = sscreen->info.chip_class >= CIK &&
>                                       sscreen->info.family != CHIP_CARRIZO &&
>                                       sscreen->info.family != CHIP_STONEY;
>         /* This must be one less than the maximum number due to a hw 
> limitation.
>          * Various hardware bugs in SI, CIK, and GFX9 need this.
>          */
>         unsigned max_offchip_buffers_per_se;
>
>         /* Only certain chips can use the maximum value. */
> -       if (sscreen->info.family == CHIP_VEGA12)
> +       if (sscreen->info.family == CHIP_VEGA12 ||
> +           sscreen->info.family == CHIP_VEGA20)
>                 max_offchip_buffers_per_se = double_offchip_buffers ? 128 : 
> 64;
>         else
>                 max_offchip_buffers_per_se = double_offchip_buffers ? 127 : 
> 63;
>
>         unsigned max_offchip_buffers = max_offchip_buffers_per_se *
>                                        sscreen->info.max_se;
>         unsigned offchip_granularity;
>
>         /* Hawaii has a bug with offchip buffers > 256 that can be worked
>          * around by setting 4K granularity.
> diff --git a/src/gallium/drivers/radeonsi/si_state.c 
> b/src/gallium/drivers/radeonsi/si_state.c
> index 1214f446fc1..a51b3739f03 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -4985,20 +4985,21 @@ static void si_init_config(struct si_context *sctx)
>         si_pm4_add_bo(pm4, sctx->border_color_buffer, RADEON_USAGE_READ,
>                       RADEON_PRIO_BORDER_COLORS);
>
>         if (sctx->chip_class >= GFX9) {
>                 unsigned num_se = sscreen->info.max_se;
>                 unsigned pc_lines = 0;
>
>                 switch (sctx->family) {
>                 case CHIP_VEGA10:
>                 case CHIP_VEGA12:
> +               case CHIP_VEGA20:
>                         pc_lines = 4096;
>                         break;
>                 case CHIP_RAVEN:
>                         pc_lines = 1024;
>                         break;
>                 default:
>                         assert(0);
>                 }
>
>                 si_pm4_set_reg(pm4, R_028C48_PA_SC_BINNER_CNTL_1,
> diff --git a/src/gallium/drivers/radeonsi/si_state_binning.c 
> b/src/gallium/drivers/radeonsi/si_state_binning.c
> index b68c637e1e2..4aad94d95f9 100644
> --- a/src/gallium/drivers/radeonsi/si_state_binning.c
> +++ b/src/gallium/drivers/radeonsi/si_state_binning.c
> @@ -394,20 +394,21 @@ void si_emit_dpbb_state(struct si_context *sctx)
>         }
>
>         /* Tunable parameters. Also test with DFSM enabled/disabled. */
>         unsigned context_states_per_bin; /* allowed range: [0, 5] */
>         unsigned persistent_states_per_bin; /* allowed range: [0, 31] */
>         unsigned fpovs_per_batch; /* allowed range: [0, 255], 0 = unlimited */
>
>         switch (sctx->family) {
>         case CHIP_VEGA10:
>         case CHIP_VEGA12:
> +       case CHIP_VEGA20:
>         case CHIP_RAVEN:
>                 /* Tuned for Raven. Vega might need different values. */
>                 context_states_per_bin = 5;
>                 persistent_states_per_bin = 31;
>                 fpovs_per_batch = 63;
>                 break;
>         default:
>                 assert(0);
>         }
>
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to