aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorTom St Denis <tom.stdenis@amd.com>2016-09-01 13:29:49 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-09-02 11:32:26 -0400
commitdeca1d1f16eebfa0d070eed50a221e01cf716ee0 (patch)
tree05d57963528214fbc1e2879aadf489042d86a985 /drivers/gpu/drm/amd/amdgpu
parent48fad3aff638c7bc16656e31047f689aa44020a1 (diff)
drm/amd/amdgpu: Add GRBM lock to various SI functions
Add missing lock around SE/SH/INSTANCE selections. Signed-off-by: Tom St Denis <tom.stdenis@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index 040bc7fcf398..1f1b6190e641 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -946,6 +946,7 @@ static void gfx_v6_0_setup_rb(struct amdgpu_device *adev,
946 u32 disabled_rbs = 0; 946 u32 disabled_rbs = 0;
947 u32 enabled_rbs = 0; 947 u32 enabled_rbs = 0;
948 948
949 mutex_lock(&adev->grbm_idx_mutex);
949 for (i = 0; i < se_num; i++) { 950 for (i = 0; i < se_num; i++) {
950 for (j = 0; j < sh_per_se; j++) { 951 for (j = 0; j < sh_per_se; j++) {
951 gfx_v6_0_select_se_sh(adev, i, j, 0xffffffff); 952 gfx_v6_0_select_se_sh(adev, i, j, 0xffffffff);
@@ -954,6 +955,7 @@ static void gfx_v6_0_setup_rb(struct amdgpu_device *adev,
954 } 955 }
955 } 956 }
956 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 957 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
958 mutex_unlock(&adev->grbm_idx_mutex);
957 959
958 mask = 1; 960 mask = 1;
959 for (i = 0; i < max_rb_num_per_se * se_num; i++) { 961 for (i = 0; i < max_rb_num_per_se * se_num; i++) {
@@ -965,6 +967,7 @@ static void gfx_v6_0_setup_rb(struct amdgpu_device *adev,
965 adev->gfx.config.backend_enable_mask = enabled_rbs; 967 adev->gfx.config.backend_enable_mask = enabled_rbs;
966 adev->gfx.config.num_rbs = hweight32(enabled_rbs); 968 adev->gfx.config.num_rbs = hweight32(enabled_rbs);
967 969
970 mutex_lock(&adev->grbm_idx_mutex);
968 for (i = 0; i < se_num; i++) { 971 for (i = 0; i < se_num; i++) {
969 gfx_v6_0_select_se_sh(adev, i, 0xffffffff, 0xffffffff); 972 gfx_v6_0_select_se_sh(adev, i, 0xffffffff, 0xffffffff);
970 data = 0; 973 data = 0;
@@ -986,6 +989,7 @@ static void gfx_v6_0_setup_rb(struct amdgpu_device *adev,
986 WREG32(PA_SC_RASTER_CONFIG, data); 989 WREG32(PA_SC_RASTER_CONFIG, data);
987 } 990 }
988 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 991 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
992 mutex_unlock(&adev->grbm_idx_mutex);
989} 993}
990/* 994/*
991static void gmc_v6_0_init_compute_vmid(struct amdgpu_device *adev) 995static void gmc_v6_0_init_compute_vmid(struct amdgpu_device *adev)
@@ -1017,6 +1021,7 @@ static void gfx_v6_0_setup_spi(struct amdgpu_device *adev,
1017 u32 data, mask; 1021 u32 data, mask;
1018 u32 active_cu = 0; 1022 u32 active_cu = 0;
1019 1023
1024 mutex_lock(&adev->grbm_idx_mutex);
1020 for (i = 0; i < se_num; i++) { 1025 for (i = 0; i < se_num; i++) {
1021 for (j = 0; j < sh_per_se; j++) { 1026 for (j = 0; j < sh_per_se; j++) {
1022 gfx_v6_0_select_se_sh(adev, i, j, 0xffffffff); 1027 gfx_v6_0_select_se_sh(adev, i, j, 0xffffffff);
@@ -1035,6 +1040,7 @@ static void gfx_v6_0_setup_spi(struct amdgpu_device *adev,
1035 } 1040 }
1036 } 1041 }
1037 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 1042 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
1043 mutex_unlock(&adev->grbm_idx_mutex);
1038} 1044}
1039 1045
1040static void gfx_v6_0_gpu_init(struct amdgpu_device *adev) 1046static void gfx_v6_0_gpu_init(struct amdgpu_device *adev)
@@ -2475,10 +2481,12 @@ static u32 gfx_v6_0_get_cu_active_bitmap(struct amdgpu_device *adev,
2475 u32 mask = 0, tmp, tmp1; 2481 u32 mask = 0, tmp, tmp1;
2476 int i; 2482 int i;
2477 2483
2484 mutex_lock(&adev->grbm_idx_mutex);
2478 gfx_v6_0_select_se_sh(adev, se, sh, 0xffffffff); 2485 gfx_v6_0_select_se_sh(adev, se, sh, 0xffffffff);
2479 tmp = RREG32(CC_GC_SHADER_ARRAY_CONFIG); 2486 tmp = RREG32(CC_GC_SHADER_ARRAY_CONFIG);
2480 tmp1 = RREG32(GC_USER_SHADER_ARRAY_CONFIG); 2487 tmp1 = RREG32(GC_USER_SHADER_ARRAY_CONFIG);
2481 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 2488 gfx_v6_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
2489 mutex_unlock(&adev->grbm_idx_mutex);
2482 2490
2483 tmp &= 0xffff0000; 2491 tmp &= 0xffff0000;
2484 2492