}
        nv_grbm_select(adev, 0, 0, 0, 0);
        mutex_unlock(&adev->srbm_mutex);
+ 
+       /* Initialize all compute VMIDs to have no GDS, GWS, or OA
+          acccess. These should be enabled by FW for target VMIDs. */
+       for (i = FIRST_COMPUTE_VMID; i < LAST_COMPUTE_VMID; i++) {
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_BASE, 2 * i, 0);
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_SIZE, 2 * i, 0);
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_GWS_VMID0, i, 0);
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_OA_VMID0, i, 0);
+       }
  }
  
 +static void gfx_v10_0_init_gds_vmid(struct amdgpu_device *adev)
 +{
 +      int vmid;
 +
 +      /*
 +       * Initialize all compute and user-gfx VMIDs to have no GDS, GWS, or OA
 +       * access. Compute VMIDs should be enabled by FW for target VMIDs,
 +       * the driver can enable them for graphics. VMID0 should maintain
 +       * access so that HWS firmware can save/restore entries.
 +       */
 +      for (vmid = 1; vmid < 16; vmid++) {
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_BASE, 2 * vmid, 0);
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_SIZE, 2 * vmid, 0);
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_GWS_VMID0, vmid, 0);
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_OA_VMID0, vmid, 0);
 +      }
 +}
 +
 +
  static void gfx_v10_0_tcp_harvest(struct amdgpu_device *adev)
  {
        int i, j, k;
 
        }
        cik_srbm_select(adev, 0, 0, 0, 0);
        mutex_unlock(&adev->srbm_mutex);
+ 
+       /* Initialize all compute VMIDs to have no GDS, GWS, or OA
+          acccess. These should be enabled by FW for target VMIDs. */
+       for (i = FIRST_COMPUTE_VMID; i < LAST_COMPUTE_VMID; i++) {
+               WREG32(amdgpu_gds_reg_offset[i].mem_base, 0);
+               WREG32(amdgpu_gds_reg_offset[i].mem_size, 0);
+               WREG32(amdgpu_gds_reg_offset[i].gws, 0);
+               WREG32(amdgpu_gds_reg_offset[i].oa, 0);
+       }
  }
  
 +static void gfx_v7_0_init_gds_vmid(struct amdgpu_device *adev)
 +{
 +      int vmid;
 +
 +      /*
 +       * Initialize all compute and user-gfx VMIDs to have no GDS, GWS, or OA
 +       * access. Compute VMIDs should be enabled by FW for target VMIDs,
 +       * the driver can enable them for graphics. VMID0 should maintain
 +       * access so that HWS firmware can save/restore entries.
 +       */
 +      for (vmid = 1; vmid < 16; vmid++) {
 +              WREG32(amdgpu_gds_reg_offset[vmid].mem_base, 0);
 +              WREG32(amdgpu_gds_reg_offset[vmid].mem_size, 0);
 +              WREG32(amdgpu_gds_reg_offset[vmid].gws, 0);
 +              WREG32(amdgpu_gds_reg_offset[vmid].oa, 0);
 +      }
 +}
 +
  static void gfx_v7_0_config_init(struct amdgpu_device *adev)
  {
        adev->gfx.config.double_offchip_lds_buf = 1;
 
        }
        vi_srbm_select(adev, 0, 0, 0, 0);
        mutex_unlock(&adev->srbm_mutex);
+ 
+       /* Initialize all compute VMIDs to have no GDS, GWS, or OA
+          acccess. These should be enabled by FW for target VMIDs. */
+       for (i = FIRST_COMPUTE_VMID; i < LAST_COMPUTE_VMID; i++) {
+               WREG32(amdgpu_gds_reg_offset[i].mem_base, 0);
+               WREG32(amdgpu_gds_reg_offset[i].mem_size, 0);
+               WREG32(amdgpu_gds_reg_offset[i].gws, 0);
+               WREG32(amdgpu_gds_reg_offset[i].oa, 0);
+       }
  }
  
 +static void gfx_v8_0_init_gds_vmid(struct amdgpu_device *adev)
 +{
 +      int vmid;
 +
 +      /*
 +       * Initialize all compute and user-gfx VMIDs to have no GDS, GWS, or OA
 +       * access. Compute VMIDs should be enabled by FW for target VMIDs,
 +       * the driver can enable them for graphics. VMID0 should maintain
 +       * access so that HWS firmware can save/restore entries.
 +       */
 +      for (vmid = 1; vmid < 16; vmid++) {
 +              WREG32(amdgpu_gds_reg_offset[vmid].mem_base, 0);
 +              WREG32(amdgpu_gds_reg_offset[vmid].mem_size, 0);
 +              WREG32(amdgpu_gds_reg_offset[vmid].gws, 0);
 +              WREG32(amdgpu_gds_reg_offset[vmid].oa, 0);
 +      }
 +}
 +
  static void gfx_v8_0_config_init(struct amdgpu_device *adev)
  {
        switch (adev->asic_type) {
 
        }
        soc15_grbm_select(adev, 0, 0, 0, 0);
        mutex_unlock(&adev->srbm_mutex);
+ 
+       /* Initialize all compute VMIDs to have no GDS, GWS, or OA
+          acccess. These should be enabled by FW for target VMIDs. */
+       for (i = FIRST_COMPUTE_VMID; i < LAST_COMPUTE_VMID; i++) {
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_BASE, 2 * i, 0);
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_SIZE, 2 * i, 0);
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_GWS_VMID0, i, 0);
+               WREG32_SOC15_OFFSET(GC, 0, mmGDS_OA_VMID0, i, 0);
+       }
  }
  
 +static void gfx_v9_0_init_gds_vmid(struct amdgpu_device *adev)
 +{
 +      int vmid;
 +
 +      /*
 +       * Initialize all compute and user-gfx VMIDs to have no GDS, GWS, or OA
 +       * access. Compute VMIDs should be enabled by FW for target VMIDs,
 +       * the driver can enable them for graphics. VMID0 should maintain
 +       * access so that HWS firmware can save/restore entries.
 +       */
 +      for (vmid = 1; vmid < 16; vmid++) {
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_BASE, 2 * vmid, 0);
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_VMID0_SIZE, 2 * vmid, 0);
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_GWS_VMID0, vmid, 0);
 +              WREG32_SOC15_OFFSET(GC, 0, mmGDS_OA_VMID0, vmid, 0);
 +      }
 +}
 +
  static void gfx_v9_0_constants_init(struct amdgpu_device *adev)
  {
        u32 tmp;