[PATCH] drm/radeon/kms: add support for streamout

Jerome Glisse j.glisse at gmail.com
Mon Jan 9 07:26:16 PST 2012


On Thu, Jan 05, 2012 at 10:21:31PM -0500, Alex Deucher wrote:
> On Thu, Jan 5, 2012 at 9:30 PM, Marek Olšák <maraeo at gmail.com> wrote:
> > People can start using transform feedback on r6xx with this.
> >
> > Strict CS checking will be implemented later.

We really need to have checking in the same patch, otherwise someone can
claim that the non checking property of what you introduce is part of
the API and thus we can't change it. I know it's painful.

Cheers,
Jerome

> >
> > Signed-off-by: Marek Olšák <maraeo at gmail.com>
> > ---
> >  drivers/gpu/drm/radeon/evergreen_cs.c     |  104 +++++++++++++++++++++++++++--
> >  drivers/gpu/drm/radeon/evergreend.h       |   10 +++
> >  drivers/gpu/drm/radeon/r600_cs.c          |  105 +++++++++++++++++++++++++++--
> >  drivers/gpu/drm/radeon/r600d.h            |    6 ++
> >  drivers/gpu/drm/radeon/radeon_drv.c       |    3 +-
> >  drivers/gpu/drm/radeon/reg_srcs/cayman    |   10 +++
> >  drivers/gpu/drm/radeon/reg_srcs/evergreen |   10 +++
> >  drivers/gpu/drm/radeon/reg_srcs/r600      |   10 +++
> >  8 files changed, 246 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c
> > index cd4590a..3150489 100644
> > --- a/drivers/gpu/drm/radeon/evergreen_cs.c
> > +++ b/drivers/gpu/drm/radeon/evergreen_cs.c
> > @@ -60,6 +60,10 @@ struct evergreen_cs_track {
> >        u32                     cb_shader_mask;
> >        u32                     vgt_strmout_config;
> >        u32                     vgt_strmout_buffer_config;
> > +       struct radeon_bo        *vgt_strmout_bo[4];
> > +       u64                     vgt_strmout_bo_mc[4];
> > +       u32                     vgt_strmout_bo_offset[4];
> > +       u32                     vgt_strmout_size[4];
> >        u32                     db_depth_control;
> >        u32                     db_depth_view;
> >        u32                     db_depth_size;
> > @@ -159,18 +163,19 @@ static void evergreen_cs_track_init(struct evergreen_cs_track *track)
> >        track->db_s_write_offset = 0xFFFFFFFF;
> >        track->db_s_read_bo = NULL;
> >        track->db_s_write_bo = NULL;
> > +
> > +       for (i = 0; i < 4; i++) {
> > +               track->vgt_strmout_size[i] = 0;
> > +               track->vgt_strmout_bo[i] = NULL;
> > +               track->vgt_strmout_bo_offset[i] = 0xFFFFFFFF;
> > +               track->vgt_strmout_bo_mc[i] = 0xFFFFFFFF;
> > +       }
> >  }
> >
> >  static int evergreen_cs_track_check(struct radeon_cs_parser *p)
> >  {
> >        struct evergreen_cs_track *track = p->track;
> >
> > -       /* we don't support stream out buffer yet */
> > -       if (track->vgt_strmout_config || track->vgt_strmout_buffer_config) {
> > -               dev_warn(p->dev, "this kernel doesn't support SMX output buffer\n");
> > -               return -EINVAL;
> > -       }
> > -
> >        /* XXX fill in */
> >        return 0;
> >  }
> > @@ -597,6 +602,37 @@ static int evergreen_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx)
> >        case VGT_STRMOUT_BUFFER_CONFIG:
> >                track->vgt_strmout_buffer_config = radeon_get_ib_value(p, idx);
> >                break;
> > +       case VGT_STRMOUT_BUFFER_BASE_0:
> > +       case VGT_STRMOUT_BUFFER_BASE_1:
> > +       case VGT_STRMOUT_BUFFER_BASE_2:
> > +       case VGT_STRMOUT_BUFFER_BASE_3:
> > +               r = evergreen_cs_packet_next_reloc(p, &reloc);
> > +               if (r) {
> > +                       dev_warn(p->dev, "bad SET_CONTEXT_REG "
> > +                                       "0x%04X\n", reg);
> > +                       return -EINVAL;
> > +               }
> > +               tmp = (reg - VGT_STRMOUT_BUFFER_BASE_0) / 16;
> > +               track->vgt_strmout_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8;
> > +               ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
> > +               track->vgt_strmout_bo[tmp] = reloc->robj;
> > +               track->vgt_strmout_bo_mc[tmp] = reloc->lobj.gpu_offset;
> > +               break;
> > +       case VGT_STRMOUT_BUFFER_SIZE_0:
> > +       case VGT_STRMOUT_BUFFER_SIZE_1:
> > +       case VGT_STRMOUT_BUFFER_SIZE_2:
> > +       case VGT_STRMOUT_BUFFER_SIZE_3:
> > +               tmp = (reg - VGT_STRMOUT_BUFFER_SIZE_0) / 16;
> > +               track->vgt_strmout_size[tmp] = radeon_get_ib_value(p, idx);
> > +               break;
> > +       case CP_COHER_BASE:
> > +               r = evergreen_cs_packet_next_reloc(p, &reloc);
> > +               if (r) {
> > +                       dev_warn(p->dev, "missing reloc for CP_COHER_BASE "
> > +                                       "0x%04X\n", reg);
> > +                       return -EINVAL;
> > +               }
> > +               ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
> >        case CB_TARGET_MASK:
> >                track->cb_target_mask = radeon_get_ib_value(p, idx);
> >                break;
> > @@ -1451,6 +1487,62 @@ static int evergreen_packet3_check(struct radeon_cs_parser *p,
> >                        return -EINVAL;
> >                }
> >                break;
> > +       case PACKET3_STRMOUT_BUFFER_UPDATE:
> > +               if (pkt->count != 4) {
> > +                       DRM_ERROR("bad STRMOUT_BUFFER_UPDATE (invalid count)\n");
> > +                       return -EINVAL;
> > +               }
> > +               /* Updating memory at DST_ADDRESS. */
> > +               if (idx_value & 0x1) {
> > +                       r = evergreen_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad STRMOUT_BUFFER_UPDATE (missing reloc 1)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+1] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               }
> > +               /* Reading data from SRC_ADDRESS. */
> > +               if (((idx_value >> 1) & 0x3) == 2) {
> > +                       r = evergreen_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad STRMOUT_BUFFER_UPDATE (missing reloc 2)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+3] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+4] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               }
> > +               break;
> > +       case PACKET3_COPY_DW:
> > +               if (pkt->count != 4) {
> > +                       DRM_ERROR("bad COPY_DW (invalid count)\n");
> > +                       return -EINVAL;
> > +               }
> > +               if (idx_value & 0x1) {
> > +                       /* SRC is memory. */
> > +                       r = evergreen_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad COPY_DW (missing reloc 1)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+1] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               } else {
> > +                       /* SRC is a reg. */
> > +               }
> > +               if (idx_value & 0x2) {
> > +                       /* DST is memory. */
> > +                       r = evergreen_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad COPY_DW (missing reloc 2)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+3] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+4] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               } else {
> > +                       /* DST is a reg. */
> 
> We need to check the destination reg here to avoid userspace doig
> something nefarious.  Something like:
> 	                r = evergreen_cs_check_reg();
>                         if (r)
>                                 return r;
> 
> > +               }
> > +               break;
> >        case PACKET3_NOP:
> >                break;
> >        default:
> > diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h
> > index e00039e..ebc014e 100644
> > --- a/drivers/gpu/drm/radeon/evergreend.h
> > +++ b/drivers/gpu/drm/radeon/evergreend.h
> > @@ -77,6 +77,7 @@
> >
> >  #define        CONFIG_MEMSIZE                                  0x5428
> >
> > +#define        CP_COHER_BASE                                   0x85F8
> >  #define CP_ME_CNTL                                     0x86D8
> >  #define                CP_ME_HALT                                      (1 << 28)
> >  #define                CP_PFP_HALT                                     (1 << 26)
> > @@ -691,6 +692,7 @@
> >  #define        PACKET3_DRAW_INDEX_MULTI_ELEMENT                0x36
> >  #define        PACKET3_MEM_SEMAPHORE                           0x39
> >  #define        PACKET3_MPEG_INDEX                              0x3A
> > +#define        PACKET3_COPY_DW                                 0x3B
> >  #define        PACKET3_WAIT_REG_MEM                            0x3C
> >  #define        PACKET3_MEM_WRITE                               0x3D
> >  #define        PACKET3_INDIRECT_BUFFER                         0x32
> > @@ -918,6 +920,14 @@
> >  #define SQ_PGM_START_HS                                        0x288b8
> >  #define SQ_PGM_START_LS                                        0x288d0
> >
> > +#define        VGT_STRMOUT_BUFFER_BASE_0                       0x28AD8
> > +#define        VGT_STRMOUT_BUFFER_BASE_1                       0x28AE8
> > +#define        VGT_STRMOUT_BUFFER_BASE_2                       0x28AF8
> > +#define        VGT_STRMOUT_BUFFER_BASE_3                       0x28B08
> > +#define VGT_STRMOUT_BUFFER_SIZE_0                      0x28AD0
> > +#define VGT_STRMOUT_BUFFER_SIZE_1                      0x28AE0
> > +#define VGT_STRMOUT_BUFFER_SIZE_2                      0x28AF0
> > +#define VGT_STRMOUT_BUFFER_SIZE_3                      0x28B00
> >  #define VGT_STRMOUT_CONFIG                             0x28b94
> >  #define VGT_STRMOUT_BUFFER_CONFIG                      0x28b98
> >
> > diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
> > index cb1acff..ab3f325 100644
> > --- a/drivers/gpu/drm/radeon/r600_cs.c
> > +++ b/drivers/gpu/drm/radeon/r600_cs.c
> > @@ -61,6 +61,10 @@ struct r600_cs_track {
> >        u32                     cb_color_size[8];
> >        u32                     vgt_strmout_en;
> >        u32                     vgt_strmout_buffer_en;
> > +       struct radeon_bo        *vgt_strmout_bo[4];
> > +       u64                     vgt_strmout_bo_mc[4];
> > +       u32                     vgt_strmout_bo_offset[4];
> > +       u32                     vgt_strmout_size[4];
> >        u32                     db_depth_control;
> >        u32                     db_depth_info;
> >        u32                     db_depth_size_idx;
> > @@ -310,6 +314,13 @@ static void r600_cs_track_init(struct r600_cs_track *track)
> >        track->db_depth_size = 0xFFFFFFFF;
> >        track->db_depth_size_idx = 0;
> >        track->db_depth_control = 0xFFFFFFFF;
> > +
> > +       for (i = 0; i < 4; i++) {
> > +               track->vgt_strmout_size[i] = 0;
> > +               track->vgt_strmout_bo[i] = NULL;
> > +               track->vgt_strmout_bo_offset[i] = 0xFFFFFFFF;
> > +               track->vgt_strmout_bo_mc[i] = 0xFFFFFFFF;
> > +       }
> >  }
> >
> >  static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i)
> > @@ -430,11 +441,7 @@ static int r600_cs_track_check(struct radeon_cs_parser *p)
> >        /* on legacy kernel we don't perform advanced check */
> >        if (p->rdev == NULL)
> >                return 0;
> > -       /* we don't support out buffer yet */
> > -       if (track->vgt_strmout_en || track->vgt_strmout_buffer_en) {
> > -               dev_warn(p->dev, "this kernel doesn't support SMX output buffer\n");
> > -               return -EINVAL;
> > -       }
> > +
> >        /* check that we have a cb for each enabled target, we don't check
> >         * shader_mask because it seems mesa isn't always setting it :(
> >         */
> > @@ -975,6 +982,38 @@ static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx)
> >        case R_028B20_VGT_STRMOUT_BUFFER_EN:
> >                track->vgt_strmout_buffer_en = radeon_get_ib_value(p, idx);
> >                break;
> > +       case VGT_STRMOUT_BUFFER_BASE_0:
> > +       case VGT_STRMOUT_BUFFER_BASE_1:
> > +       case VGT_STRMOUT_BUFFER_BASE_2:
> > +       case VGT_STRMOUT_BUFFER_BASE_3:
> > +               r = r600_cs_packet_next_reloc(p, &reloc);
> > +               if (r) {
> > +                       dev_warn(p->dev, "bad SET_CONTEXT_REG "
> > +                                       "0x%04X\n", reg);
> > +                       return -EINVAL;
> > +               }
> > +               tmp = (reg - VGT_STRMOUT_BUFFER_BASE_0) / 16;
> > +               track->vgt_strmout_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8;
> > +               ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
> > +               track->vgt_strmout_bo[tmp] = reloc->robj;
> > +               track->vgt_strmout_bo_mc[tmp] = reloc->lobj.gpu_offset;
> > +               break;
> > +       case VGT_STRMOUT_BUFFER_SIZE_0:
> > +       case VGT_STRMOUT_BUFFER_SIZE_1:
> > +       case VGT_STRMOUT_BUFFER_SIZE_2:
> > +       case VGT_STRMOUT_BUFFER_SIZE_3:
> > +               tmp = (reg - VGT_STRMOUT_BUFFER_SIZE_0) / 16;
> > +               track->vgt_strmout_size[tmp] = radeon_get_ib_value(p, idx);
> > +               break;
> > +       case CP_COHER_BASE:
> > +               r = r600_cs_packet_next_reloc(p, &reloc);
> > +               if (r) {
> > +                       dev_warn(p->dev, "missing reloc for CP_COHER_BASE "
> > +                                       "0x%04X\n", reg);
> > +                       return -EINVAL;
> > +               }
> > +               ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
> > +               break;
> >        case R_028238_CB_TARGET_MASK:
> >                track->cb_target_mask = radeon_get_ib_value(p, idx);
> >                break;
> > @@ -1742,6 +1781,62 @@ static int r600_packet3_check(struct radeon_cs_parser *p,
> >                        return -EINVAL;
> >                }
> >                break;
> > +       case PACKET3_STRMOUT_BUFFER_UPDATE:
> > +               if (pkt->count != 4) {
> > +                       DRM_ERROR("bad STRMOUT_BUFFER_UPDATE (invalid count)\n");
> > +                       return -EINVAL;
> > +               }
> > +               /* Updating memory at DST_ADDRESS. */
> > +               if (idx_value & 0x1) {
> > +                       r = r600_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad STRMOUT_BUFFER_UPDATE (missing reloc 1)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+1] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               }
> > +               /* Reading data from SRC_ADDRESS. */
> > +               if (((idx_value >> 1) & 0x3) == 2) {
> > +                       r = r600_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad STRMOUT_BUFFER_UPDATE (missing reloc 2)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+3] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+4] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               }
> > +               break;
> > +       case PACKET3_COPY_DW:
> > +               if (pkt->count != 4) {
> > +                       DRM_ERROR("bad COPY_DW (invalid count)\n");
> > +                       return -EINVAL;
> > +               }
> > +               if (idx_value & 0x1) {
> > +                       /* SRC is memory. */
> > +                       r = r600_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad COPY_DW (missing reloc 1)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+1] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               } else {
> > +                       /* SRC is a reg. */
> > +               }
> > +               if (idx_value & 0x2) {
> > +                       /* DST is memory. */
> > +                       r = r600_cs_packet_next_reloc(p, &reloc);
> > +                       if (r) {
> > +                               DRM_ERROR("bad COPY_DW (missing reloc 2)\n");
> > +                               return -EINVAL;
> > +                       }
> > +                       ib[idx+3] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
> > +                       ib[idx+4] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
> > +               } else {
> > +                       /* DST is a reg. */
> 
> Same as above.
> 
> 
> > +               }
> > +               break;
> >        case PACKET3_NOP:
> >                break;
> >        default:
> > diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
> > index 3ee1fd7..aa9d7c3 100644
> > --- a/drivers/gpu/drm/radeon/r600d.h
> > +++ b/drivers/gpu/drm/radeon/r600d.h
> > @@ -493,6 +493,11 @@
> >  #define        VGT_STRMOUT_BUFFER_OFFSET_1                     0x28AEC
> >  #define        VGT_STRMOUT_BUFFER_OFFSET_2                     0x28AFC
> >  #define        VGT_STRMOUT_BUFFER_OFFSET_3                     0x28B0C
> > +#define VGT_STRMOUT_BUFFER_SIZE_0                      0x28AD0
> > +#define VGT_STRMOUT_BUFFER_SIZE_1                      0x28AE0
> > +#define VGT_STRMOUT_BUFFER_SIZE_2                      0x28AF0
> > +#define VGT_STRMOUT_BUFFER_SIZE_3                      0x28B00
> > +
> >  #define        VGT_STRMOUT_EN                                  0x28AB0
> >  #define        VGT_VERTEX_REUSE_BLOCK_CNTL                     0x28C58
> >  #define                VTX_REUSE_DEPTH_MASK                            0x000000FF
> > @@ -834,6 +839,7 @@
> >  #              define PACKET3_SEM_SEL_SIGNAL       (0x6 << 29)
> >  #              define PACKET3_SEM_SEL_WAIT         (0x7 << 29)
> >  #define        PACKET3_MPEG_INDEX                              0x3A
> > +#define        PACKET3_COPY_DW                                 0x3B
> >  #define        PACKET3_WAIT_REG_MEM                            0x3C
> >  #define        PACKET3_MEM_WRITE                               0x3D
> >  #define        PACKET3_INDIRECT_BUFFER                         0x32
> > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> > index c3ef1d2..e977247 100644
> > --- a/drivers/gpu/drm/radeon/radeon_drv.c
> > +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> > @@ -54,9 +54,10 @@
> >  *   2.10.0 - fusion 2D tiling
> >  *   2.11.0 - backend map, initial compute support for the CS checker
> >  *   2.12.0 - RADEON_CS_KEEP_TILING_FLAGS
> > + *   2.13.0 - r600 streamout
> >  */
> >  #define KMS_DRIVER_MAJOR       2
> > -#define KMS_DRIVER_MINOR       12
> > +#define KMS_DRIVER_MINOR       13
> >  #define KMS_DRIVER_PATCHLEVEL  0
> >  int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
> >  int radeon_driver_unload_kms(struct drm_device *dev);
> > diff --git a/drivers/gpu/drm/radeon/reg_srcs/cayman b/drivers/gpu/drm/radeon/reg_srcs/cayman
> > index 2316977..0eac19e 100644
> > --- a/drivers/gpu/drm/radeon/reg_srcs/cayman
> > +++ b/drivers/gpu/drm/radeon/reg_srcs/cayman
> > @@ -1,5 +1,8 @@
> >  cayman 0x9400
> >  0x0000802C GRBM_GFX_INDEX
> > +0x000084FC CP_STRMOUT_CNTL
> > +0x000085F0 CP_COHER_CNTL
> > +0x000085F4 CP_COHER_SIZE
> >  0x000088B0 VGT_VTX_VECT_EJECT_REG
> >  0x000088C4 VGT_CACHE_INVALIDATION
> >  0x000088D4 VGT_GS_VERTEX_REUSE
> > @@ -512,6 +515,13 @@ cayman 0x9400
> >  0x00028AC0 DB_SRESULTS_COMPARE_STATE0
> >  0x00028AC4 DB_SRESULTS_COMPARE_STATE1
> >  0x00028AC8 DB_PRELOAD_CONTROL
> > +0x00028AD4 VGT_STRMOUT_VTX_STRIDE_0
> > +0x00028AE4 VGT_STRMOUT_VTX_STRIDE_1
> > +0x00028AF4 VGT_STRMOUT_VTX_STRIDE_2
> > +0x00028B04 VGT_STRMOUT_VTX_STRIDE_3
> > +0x00028B28 VGT_STRMOUT_DRAW_OPAQUE_OFFSET
> > +0x00028B2C VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
> > +0x00028B30 VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
> >  0x00028B38 VGT_GS_MAX_VERT_OUT
> >  0x00028B54 VGT_SHADER_STAGES_EN
> >  0x00028B58 VGT_LS_HS_CONFIG
> > diff --git a/drivers/gpu/drm/radeon/reg_srcs/evergreen b/drivers/gpu/drm/radeon/reg_srcs/evergreen
> > index 161737a..4e3f208 100644
> > --- a/drivers/gpu/drm/radeon/reg_srcs/evergreen
> > +++ b/drivers/gpu/drm/radeon/reg_srcs/evergreen
> > @@ -4,6 +4,9 @@ evergreen 0x9400
> >  0x00008044 WAIT_UNTIL_POLL_CNTL
> >  0x00008048 WAIT_UNTIL_POLL_MASK
> >  0x0000804c WAIT_UNTIL_POLL_REFDATA
> > +0x000084FC CP_STRMOUT_CNTL
> > +0x000085F0 CP_COHER_CNTL
> > +0x000085F4 CP_COHER_SIZE
> >  0x000088B0 VGT_VTX_VECT_EJECT_REG
> >  0x000088C4 VGT_CACHE_INVALIDATION
> >  0x000088D4 VGT_GS_VERTEX_REUSE
> > @@ -522,6 +525,13 @@ evergreen 0x9400
> >  0x00028AC0 DB_SRESULTS_COMPARE_STATE0
> >  0x00028AC4 DB_SRESULTS_COMPARE_STATE1
> >  0x00028AC8 DB_PRELOAD_CONTROL
> > +0x00028AD4 VGT_STRMOUT_VTX_STRIDE_0
> > +0x00028AE4 VGT_STRMOUT_VTX_STRIDE_1
> > +0x00028AF4 VGT_STRMOUT_VTX_STRIDE_2
> > +0x00028B04 VGT_STRMOUT_VTX_STRIDE_3
> > +0x00028B28 VGT_STRMOUT_DRAW_OPAQUE_OFFSET
> > +0x00028B2C VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
> > +0x00028B30 VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
> >  0x00028B38 VGT_GS_MAX_VERT_OUT
> >  0x00028B54 VGT_SHADER_STAGES_EN
> >  0x00028B58 VGT_LS_HS_CONFIG
> > diff --git a/drivers/gpu/drm/radeon/reg_srcs/r600 b/drivers/gpu/drm/radeon/reg_srcs/r600
> > index 0380c5c..5c33b38 100644
> > --- a/drivers/gpu/drm/radeon/reg_srcs/r600
> > +++ b/drivers/gpu/drm/radeon/reg_srcs/r600
> > @@ -3,6 +3,9 @@ r600 0x9400
> >  0x00028230 R7xx_PA_SC_EDGERULE
> >  0x000286C8 R7xx_SPI_THREAD_GROUPING
> >  0x00008D8C R7xx_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
> > +0x00008490 CP_STRMOUT_CNTL
> > +0x000085F0 CP_COHER_CNTL
> > +0x000085F4 CP_COHER_SIZE
> >  0x000088C4 VGT_CACHE_INVALIDATION
> >  0x00028A50 VGT_ENHANCE
> >  0x000088CC VGT_ES_PER_GS
> > @@ -38,6 +41,13 @@ r600 0x9400
> >  0x00028AB4 VGT_REUSE_OFF
> >  0x00028AB8 VGT_VTX_CNT_EN
> >  0x000088B0 VGT_VTX_VECT_EJECT_REG
> > +0x00028AD4 VGT_STRMOUT_VTX_STRIDE_0
> > +0x00028AE4 VGT_STRMOUT_VTX_STRIDE_1
> > +0x00028AF4 VGT_STRMOUT_VTX_STRIDE_2
> > +0x00028B04 VGT_STRMOUT_VTX_STRIDE_3
> > +0x00028B28 VGT_STRMOUT_DRAW_OPAQUE_OFFSET
> > +0x00028B2C VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
> > +0x00028B30 VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
> >  0x00028810 PA_CL_CLIP_CNTL
> >  0x00008A14 PA_CL_ENHANCE
> >  0x00028C14 PA_CL_GB_HORZ_CLIP_ADJ
> > --
> > 1.7.5.4
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list