diff options
author | Dave Airlie <airlied@redhat.com> | 2018-04-10 18:35:41 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2018-04-10 18:35:41 -0400 |
commit | 871e899db19da3dbd17a5d263b555dc5b7d8fed5 (patch) | |
tree | 97d6232965ab5c5df6d43288a8c744eef9abd58e | |
parent | c975f17d700445051ad0f87c6822bd15816c587f (diff) | |
parent | c60e22f7199b5fe7cee4007ccb3b27bb8a506476 (diff) |
Merge branch 'drm-next-4.17' of git://people.freedesktop.org/~agd5f/linux into drm-next
A few fixes for 4.17:
- Fix a potential use after free in a error case
- Fix pcie lane handling in amdgpu SI dpm
- sdma pipeline sync fix
- A few vega12 cleanups and fixes
- Misc other fixes
* 'drm-next-4.17' of git://people.freedesktop.org/~agd5f/linux:
drm/amdgpu: Fix memory leaks at amdgpu_init() error path
drm/amdgpu: Fix PCIe lane width calculation
drm/radeon: Fix PCIe lane width calculation
drm/amdgpu/si: implement get/set pcie_lanes asic callback
drm/amdgpu: Add support for SRBM selection v3
Revert "drm/amdgpu: Don't change preferred domian when fallback GTT v5"
drm/amd/powerply: fix power reading on Fiji
drm/amd/powerplay: Enable ACG SS feature
drm/amdgpu/sdma: fix mask in emit_pipeline_sync
drm/amdgpu: Fix KIQ hang on bare metal for device unbind/bind back v2.
drm/amd/pp: Clean header file in vega12_smumgr.c
drm/amd/pp: Remove Dead functions on Vega12
drm/amd/pp: silence a static checker warning
drm/amdgpu: drop compute ring timeout setting for non-sriov only (v2)
drm/amdgpu: fix typo of domain fallback
29 files changed, 299 insertions, 1556 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index f44a83ab2bf4..0193f6ced00b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -890,6 +890,7 @@ struct amdgpu_gfx_funcs { | |||
890 | void (*read_wave_data)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t *dst, int *no_fields); | 890 | void (*read_wave_data)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t *dst, int *no_fields); |
891 | void (*read_wave_vgprs)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t thread, uint32_t start, uint32_t size, uint32_t *dst); | 891 | void (*read_wave_vgprs)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t thread, uint32_t start, uint32_t size, uint32_t *dst); |
892 | void (*read_wave_sgprs)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t start, uint32_t size, uint32_t *dst); | 892 | void (*read_wave_sgprs)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t start, uint32_t size, uint32_t *dst); |
893 | void (*select_me_pipe_q)(struct amdgpu_device *adev, u32 me, u32 pipe, u32 queue); | ||
893 | }; | 894 | }; |
894 | 895 | ||
895 | struct amdgpu_ngg_buf { | 896 | struct amdgpu_ngg_buf { |
@@ -1812,6 +1813,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring) | |||
1812 | #define amdgpu_gfx_select_se_sh(adev, se, sh, instance) (adev)->gfx.funcs->select_se_sh((adev), (se), (sh), (instance)) | 1813 | #define amdgpu_gfx_select_se_sh(adev, se, sh, instance) (adev)->gfx.funcs->select_se_sh((adev), (se), (sh), (instance)) |
1813 | #define amdgpu_gds_switch(adev, r, v, d, w, a) (adev)->gds.funcs->patch_gds_switch((r), (v), (d), (w), (a)) | 1814 | #define amdgpu_gds_switch(adev, r, v, d, w, a) (adev)->gds.funcs->patch_gds_switch((r), (v), (d), (w), (a)) |
1814 | #define amdgpu_psp_check_fw_loading_status(adev, i) (adev)->firmware.funcs->check_fw_loading_status((adev), (i)) | 1815 | #define amdgpu_psp_check_fw_loading_status(adev, i) (adev)->firmware.funcs->check_fw_loading_status((adev), (i)) |
1816 | #define amdgpu_gfx_select_me_pipe_q(adev, me, pipe, q) (adev)->gfx.funcs->select_me_pipe_q((adev), (me), (pipe), (q)) | ||
1815 | 1817 | ||
1816 | /* Common functions */ | 1818 | /* Common functions */ |
1817 | int amdgpu_device_gpu_recover(struct amdgpu_device *adev, | 1819 | int amdgpu_device_gpu_recover(struct amdgpu_device *adev, |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c index 369beb5041a2..448d69fe3756 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | |||
@@ -64,16 +64,21 @@ int amdgpu_debugfs_add_files(struct amdgpu_device *adev, | |||
64 | 64 | ||
65 | #if defined(CONFIG_DEBUG_FS) | 65 | #if defined(CONFIG_DEBUG_FS) |
66 | 66 | ||
67 | static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, | 67 | |
68 | size_t size, loff_t *pos) | 68 | static int amdgpu_debugfs_process_reg_op(bool read, struct file *f, |
69 | char __user *buf, size_t size, loff_t *pos) | ||
69 | { | 70 | { |
70 | struct amdgpu_device *adev = file_inode(f)->i_private; | 71 | struct amdgpu_device *adev = file_inode(f)->i_private; |
71 | ssize_t result = 0; | 72 | ssize_t result = 0; |
72 | int r; | 73 | int r; |
73 | bool pm_pg_lock, use_bank; | 74 | bool pm_pg_lock, use_bank, use_ring; |
74 | unsigned instance_bank, sh_bank, se_bank; | 75 | unsigned instance_bank, sh_bank, se_bank, me, pipe, queue; |
75 | 76 | ||
76 | if (size & 0x3 || *pos & 0x3) | 77 | pm_pg_lock = use_bank = use_ring = false; |
78 | instance_bank = sh_bank = se_bank = me = pipe = queue = 0; | ||
79 | |||
80 | if (size & 0x3 || *pos & 0x3 || | ||
81 | ((*pos & (1ULL << 62)) && (*pos & (1ULL << 61)))) | ||
77 | return -EINVAL; | 82 | return -EINVAL; |
78 | 83 | ||
79 | /* are we reading registers for which a PG lock is necessary? */ | 84 | /* are we reading registers for which a PG lock is necessary? */ |
@@ -91,8 +96,15 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, | |||
91 | if (instance_bank == 0x3FF) | 96 | if (instance_bank == 0x3FF) |
92 | instance_bank = 0xFFFFFFFF; | 97 | instance_bank = 0xFFFFFFFF; |
93 | use_bank = 1; | 98 | use_bank = 1; |
99 | } else if (*pos & (1ULL << 61)) { | ||
100 | |||
101 | me = (*pos & GENMASK_ULL(33, 24)) >> 24; | ||
102 | pipe = (*pos & GENMASK_ULL(43, 34)) >> 34; | ||
103 | queue = (*pos & GENMASK_ULL(53, 44)) >> 44; | ||
104 | |||
105 | use_ring = 1; | ||
94 | } else { | 106 | } else { |
95 | use_bank = 0; | 107 | use_bank = use_ring = 0; |
96 | } | 108 | } |
97 | 109 | ||
98 | *pos &= (1UL << 22) - 1; | 110 | *pos &= (1UL << 22) - 1; |
@@ -104,6 +116,9 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, | |||
104 | mutex_lock(&adev->grbm_idx_mutex); | 116 | mutex_lock(&adev->grbm_idx_mutex); |
105 | amdgpu_gfx_select_se_sh(adev, se_bank, | 117 | amdgpu_gfx_select_se_sh(adev, se_bank, |
106 | sh_bank, instance_bank); | 118 | sh_bank, instance_bank); |
119 | } else if (use_ring) { | ||
120 | mutex_lock(&adev->srbm_mutex); | ||
121 | amdgpu_gfx_select_me_pipe_q(adev, me, pipe, queue); | ||
107 | } | 122 | } |
108 | 123 | ||
109 | if (pm_pg_lock) | 124 | if (pm_pg_lock) |
@@ -115,8 +130,14 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, | |||
115 | if (*pos > adev->rmmio_size) | 130 | if (*pos > adev->rmmio_size) |
116 | goto end; | 131 | goto end; |
117 | 132 | ||
118 | value = RREG32(*pos >> 2); | 133 | if (read) { |
119 | r = put_user(value, (uint32_t *)buf); | 134 | value = RREG32(*pos >> 2); |
135 | r = put_user(value, (uint32_t *)buf); | ||
136 | } else { | ||
137 | r = get_user(value, (uint32_t *)buf); | ||
138 | if (!r) | ||
139 | WREG32(*pos >> 2, value); | ||
140 | } | ||
120 | if (r) { | 141 | if (r) { |
121 | result = r; | 142 | result = r; |
122 | goto end; | 143 | goto end; |
@@ -132,6 +153,9 @@ end: | |||
132 | if (use_bank) { | 153 | if (use_bank) { |
133 | amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); | 154 | amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); |
134 | mutex_unlock(&adev->grbm_idx_mutex); | 155 | mutex_unlock(&adev->grbm_idx_mutex); |
156 | } else if (use_ring) { | ||
157 | amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0); | ||
158 | mutex_unlock(&adev->srbm_mutex); | ||
135 | } | 159 | } |
136 | 160 | ||
137 | if (pm_pg_lock) | 161 | if (pm_pg_lock) |
@@ -140,78 +164,17 @@ end: | |||
140 | return result; | 164 | return result; |
141 | } | 165 | } |
142 | 166 | ||
167 | |||
168 | static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, | ||
169 | size_t size, loff_t *pos) | ||
170 | { | ||
171 | return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos); | ||
172 | } | ||
173 | |||
143 | static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf, | 174 | static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf, |
144 | size_t size, loff_t *pos) | 175 | size_t size, loff_t *pos) |
145 | { | 176 | { |
146 | struct amdgpu_device *adev = file_inode(f)->i_private; | 177 | return amdgpu_debugfs_process_reg_op(false, f, (char __user *)buf, size, pos); |
147 | ssize_t result = 0; | ||
148 | int r; | ||
149 | bool pm_pg_lock, use_bank; | ||
150 | unsigned instance_bank, sh_bank, se_bank; | ||
151 | |||
152 | if (size & 0x3 || *pos & 0x3) | ||
153 | return -EINVAL; | ||
154 | |||
155 | /* are we reading registers for which a PG lock is necessary? */ | ||
156 | pm_pg_lock = (*pos >> 23) & 1; | ||
157 | |||
158 | if (*pos & (1ULL << 62)) { | ||
159 | se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24; | ||
160 | sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34; | ||
161 | instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44; | ||
162 | |||
163 | if (se_bank == 0x3FF) | ||
164 | se_bank = 0xFFFFFFFF; | ||
165 | if (sh_bank == 0x3FF) | ||
166 | sh_bank = 0xFFFFFFFF; | ||
167 | if (instance_bank == 0x3FF) | ||
168 | instance_bank = 0xFFFFFFFF; | ||
169 | use_bank = 1; | ||
170 | } else { | ||
171 | use_bank = 0; | ||
172 | } | ||
173 | |||
174 | *pos &= (1UL << 22) - 1; | ||
175 | |||
176 | if (use_bank) { | ||
177 | if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) || | ||
178 | (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) | ||
179 | return -EINVAL; | ||
180 | mutex_lock(&adev->grbm_idx_mutex); | ||
181 | amdgpu_gfx_select_se_sh(adev, se_bank, | ||
182 | sh_bank, instance_bank); | ||
183 | } | ||
184 | |||
185 | if (pm_pg_lock) | ||
186 | mutex_lock(&adev->pm.mutex); | ||
187 | |||
188 | while (size) { | ||
189 | uint32_t value; | ||
190 | |||
191 | if (*pos > adev->rmmio_size) | ||
192 | return result; | ||
193 | |||
194 | r = get_user(value, (uint32_t *)buf); | ||
195 | if (r) | ||
196 | return r; | ||
197 | |||
198 | WREG32(*pos >> 2, value); | ||
199 | |||
200 | result += 4; | ||
201 | buf += 4; | ||
202 | *pos += 4; | ||
203 | size -= 4; | ||
204 | } | ||
205 | |||
206 | if (use_bank) { | ||
207 | amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); | ||
208 | mutex_unlock(&adev->grbm_idx_mutex); | ||
209 | } | ||
210 | |||
211 | if (pm_pg_lock) | ||
212 | mutex_unlock(&adev->pm.mutex); | ||
213 | |||
214 | return result; | ||
215 | } | 178 | } |
216 | 179 | ||
217 | static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf, | 180 | static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf, |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 7379aa5a6849..0b19482b36b8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | |||
@@ -922,6 +922,11 @@ static int __init amdgpu_init(void) | |||
922 | { | 922 | { |
923 | int r; | 923 | int r; |
924 | 924 | ||
925 | if (vgacon_text_force()) { | ||
926 | DRM_ERROR("VGACON disables amdgpu kernel modesetting.\n"); | ||
927 | return -EINVAL; | ||
928 | } | ||
929 | |||
925 | r = amdgpu_sync_init(); | 930 | r = amdgpu_sync_init(); |
926 | if (r) | 931 | if (r) |
927 | goto error_sync; | 932 | goto error_sync; |
@@ -930,10 +935,6 @@ static int __init amdgpu_init(void) | |||
930 | if (r) | 935 | if (r) |
931 | goto error_fence; | 936 | goto error_fence; |
932 | 937 | ||
933 | if (vgacon_text_force()) { | ||
934 | DRM_ERROR("VGACON disables amdgpu kernel modesetting.\n"); | ||
935 | return -EINVAL; | ||
936 | } | ||
937 | DRM_INFO("amdgpu kernel modesetting enabled.\n"); | 938 | DRM_INFO("amdgpu kernel modesetting enabled.\n"); |
938 | driver = &kms_driver; | 939 | driver = &kms_driver; |
939 | pdriver = &amdgpu_kms_pci_driver; | 940 | pdriver = &amdgpu_kms_pci_driver; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c index 455a81e4c246..97449e06a242 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | |||
@@ -410,6 +410,7 @@ int amdgpu_fence_driver_start_ring(struct amdgpu_ring *ring, | |||
410 | int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring, | 410 | int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring, |
411 | unsigned num_hw_submission) | 411 | unsigned num_hw_submission) |
412 | { | 412 | { |
413 | long timeout; | ||
413 | int r; | 414 | int r; |
414 | 415 | ||
415 | /* Check that num_hw_submission is a power of two */ | 416 | /* Check that num_hw_submission is a power of two */ |
@@ -433,11 +434,16 @@ int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring, | |||
433 | 434 | ||
434 | /* No need to setup the GPU scheduler for KIQ ring */ | 435 | /* No need to setup the GPU scheduler for KIQ ring */ |
435 | if (ring->funcs->type != AMDGPU_RING_TYPE_KIQ) { | 436 | if (ring->funcs->type != AMDGPU_RING_TYPE_KIQ) { |
437 | /* for non-sriov case, no timeout enforce on compute ring */ | ||
438 | if ((ring->funcs->type == AMDGPU_RING_TYPE_COMPUTE) | ||
439 | && !amdgpu_sriov_vf(ring->adev)) | ||
440 | timeout = MAX_SCHEDULE_TIMEOUT; | ||
441 | else | ||
442 | timeout = msecs_to_jiffies(amdgpu_lockup_timeout); | ||
443 | |||
436 | r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, | 444 | r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, |
437 | num_hw_submission, amdgpu_job_hang_limit, | 445 | num_hw_submission, amdgpu_job_hang_limit, |
438 | (ring->funcs->type == AMDGPU_RING_TYPE_COMPUTE) ? | 446 | timeout, ring->name); |
439 | MAX_SCHEDULE_TIMEOUT : msecs_to_jiffies(amdgpu_lockup_timeout), | ||
440 | ring->name); | ||
441 | if (r) { | 447 | if (r) { |
442 | DRM_ERROR("Failed to create scheduler on ring %s.\n", | 448 | DRM_ERROR("Failed to create scheduler on ring %s.\n", |
443 | ring->name); | 449 | ring->name); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 28c2706e48d7..46b9ea4e6103 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |||
@@ -56,11 +56,23 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size, | |||
56 | alignment = PAGE_SIZE; | 56 | alignment = PAGE_SIZE; |
57 | } | 57 | } |
58 | 58 | ||
59 | retry: | ||
59 | r = amdgpu_bo_create(adev, size, alignment, initial_domain, | 60 | r = amdgpu_bo_create(adev, size, alignment, initial_domain, |
60 | flags, type, resv, &bo); | 61 | flags, type, resv, &bo); |
61 | if (r) { | 62 | if (r) { |
62 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n", | 63 | if (r != -ERESTARTSYS) { |
63 | size, initial_domain, alignment, r); | 64 | if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) { |
65 | flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; | ||
66 | goto retry; | ||
67 | } | ||
68 | |||
69 | if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) { | ||
70 | initial_domain |= AMDGPU_GEM_DOMAIN_GTT; | ||
71 | goto retry; | ||
72 | } | ||
73 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n", | ||
74 | size, initial_domain, alignment, r); | ||
75 | } | ||
64 | return r; | 76 | return r; |
65 | } | 77 | } |
66 | *obj = &bo->gem_base; | 78 | *obj = &bo->gem_base; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index fac4b6067efd..6d08cde8443c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | |||
@@ -356,7 +356,6 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size, | |||
356 | struct amdgpu_bo *bo; | 356 | struct amdgpu_bo *bo; |
357 | unsigned long page_align; | 357 | unsigned long page_align; |
358 | size_t acc_size; | 358 | size_t acc_size; |
359 | u32 domains; | ||
360 | int r; | 359 | int r; |
361 | 360 | ||
362 | page_align = roundup(byte_align, PAGE_SIZE) >> PAGE_SHIFT; | 361 | page_align = roundup(byte_align, PAGE_SIZE) >> PAGE_SHIFT; |
@@ -418,23 +417,12 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size, | |||
418 | #endif | 417 | #endif |
419 | 418 | ||
420 | bo->tbo.bdev = &adev->mman.bdev; | 419 | bo->tbo.bdev = &adev->mman.bdev; |
421 | domains = bo->preferred_domains; | 420 | amdgpu_ttm_placement_from_domain(bo, domain); |
422 | retry: | 421 | |
423 | amdgpu_ttm_placement_from_domain(bo, domains); | ||
424 | r = ttm_bo_init_reserved(&adev->mman.bdev, &bo->tbo, size, type, | 422 | r = ttm_bo_init_reserved(&adev->mman.bdev, &bo->tbo, size, type, |
425 | &bo->placement, page_align, &ctx, acc_size, | 423 | &bo->placement, page_align, &ctx, acc_size, |
426 | NULL, resv, &amdgpu_ttm_bo_destroy); | 424 | NULL, resv, &amdgpu_ttm_bo_destroy); |
427 | 425 | if (unlikely(r != 0)) | |
428 | if (unlikely(r && r != -ERESTARTSYS)) { | ||
429 | if (bo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) { | ||
430 | bo->flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; | ||
431 | goto retry; | ||
432 | } else if (domains != bo->preferred_domains) { | ||
433 | domains = bo->allowed_domains; | ||
434 | goto retry; | ||
435 | } | ||
436 | } | ||
437 | if (unlikely(r)) | ||
438 | return r; | 426 | return r; |
439 | 427 | ||
440 | if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size && | 428 | if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size && |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index f48ea0dad875..a7576255cc30 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c | |||
@@ -859,7 +859,7 @@ static void cik_sdma_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
859 | amdgpu_ring_write(ring, addr & 0xfffffffc); | 859 | amdgpu_ring_write(ring, addr & 0xfffffffc); |
860 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | 860 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); |
861 | amdgpu_ring_write(ring, seq); /* reference */ | 861 | amdgpu_ring_write(ring, seq); /* reference */ |
862 | amdgpu_ring_write(ring, 0xfffffff); /* mask */ | 862 | amdgpu_ring_write(ring, 0xffffffff); /* mask */ |
863 | amdgpu_ring_write(ring, (0xfff << 16) | 4); /* retry count, poll interval */ | 863 | amdgpu_ring_write(ring, (0xfff << 16) | 4); /* retry count, poll interval */ |
864 | } | 864 | } |
865 | 865 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c index 0fff5b8cd318..cd6bf291a853 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | |||
@@ -3061,11 +3061,18 @@ static void gfx_v6_0_read_wave_sgprs(struct amdgpu_device *adev, uint32_t simd, | |||
3061 | start + SQIND_WAVE_SGPRS_OFFSET, size, dst); | 3061 | start + SQIND_WAVE_SGPRS_OFFSET, size, dst); |
3062 | } | 3062 | } |
3063 | 3063 | ||
3064 | static void gfx_v6_0_select_me_pipe_q(struct amdgpu_device *adev, | ||
3065 | u32 me, u32 pipe, u32 q) | ||
3066 | { | ||
3067 | DRM_INFO("Not implemented\n"); | ||
3068 | } | ||
3069 | |||
3064 | static const struct amdgpu_gfx_funcs gfx_v6_0_gfx_funcs = { | 3070 | static const struct amdgpu_gfx_funcs gfx_v6_0_gfx_funcs = { |
3065 | .get_gpu_clock_counter = &gfx_v6_0_get_gpu_clock_counter, | 3071 | .get_gpu_clock_counter = &gfx_v6_0_get_gpu_clock_counter, |
3066 | .select_se_sh = &gfx_v6_0_select_se_sh, | 3072 | .select_se_sh = &gfx_v6_0_select_se_sh, |
3067 | .read_wave_data = &gfx_v6_0_read_wave_data, | 3073 | .read_wave_data = &gfx_v6_0_read_wave_data, |
3068 | .read_wave_sgprs = &gfx_v6_0_read_wave_sgprs, | 3074 | .read_wave_sgprs = &gfx_v6_0_read_wave_sgprs, |
3075 | .select_me_pipe_q = &gfx_v6_0_select_me_pipe_q | ||
3069 | }; | 3076 | }; |
3070 | 3077 | ||
3071 | static int gfx_v6_0_early_init(void *handle) | 3078 | static int gfx_v6_0_early_init(void *handle) |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index e13d9d83767b..42b6144c1fd5 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
@@ -4270,11 +4270,18 @@ static void gfx_v7_0_read_wave_sgprs(struct amdgpu_device *adev, uint32_t simd, | |||
4270 | start + SQIND_WAVE_SGPRS_OFFSET, size, dst); | 4270 | start + SQIND_WAVE_SGPRS_OFFSET, size, dst); |
4271 | } | 4271 | } |
4272 | 4272 | ||
4273 | static void gfx_v7_0_select_me_pipe_q(struct amdgpu_device *adev, | ||
4274 | u32 me, u32 pipe, u32 q) | ||
4275 | { | ||
4276 | cik_srbm_select(adev, me, pipe, q, 0); | ||
4277 | } | ||
4278 | |||
4273 | static const struct amdgpu_gfx_funcs gfx_v7_0_gfx_funcs = { | 4279 | static const struct amdgpu_gfx_funcs gfx_v7_0_gfx_funcs = { |
4274 | .get_gpu_clock_counter = &gfx_v7_0_get_gpu_clock_counter, | 4280 | .get_gpu_clock_counter = &gfx_v7_0_get_gpu_clock_counter, |
4275 | .select_se_sh = &gfx_v7_0_select_se_sh, | 4281 | .select_se_sh = &gfx_v7_0_select_se_sh, |
4276 | .read_wave_data = &gfx_v7_0_read_wave_data, | 4282 | .read_wave_data = &gfx_v7_0_read_wave_data, |
4277 | .read_wave_sgprs = &gfx_v7_0_read_wave_sgprs, | 4283 | .read_wave_sgprs = &gfx_v7_0_read_wave_sgprs, |
4284 | .select_me_pipe_q = &gfx_v7_0_select_me_pipe_q | ||
4278 | }; | 4285 | }; |
4279 | 4286 | ||
4280 | static const struct amdgpu_rlc_funcs gfx_v7_0_rlc_funcs = { | 4287 | static const struct amdgpu_rlc_funcs gfx_v7_0_rlc_funcs = { |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 27943e57681c..b0e591eaa71a 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -3475,6 +3475,12 @@ static void gfx_v8_0_select_se_sh(struct amdgpu_device *adev, | |||
3475 | WREG32(mmGRBM_GFX_INDEX, data); | 3475 | WREG32(mmGRBM_GFX_INDEX, data); |
3476 | } | 3476 | } |
3477 | 3477 | ||
3478 | static void gfx_v8_0_select_me_pipe_q(struct amdgpu_device *adev, | ||
3479 | u32 me, u32 pipe, u32 q) | ||
3480 | { | ||
3481 | vi_srbm_select(adev, me, pipe, q, 0); | ||
3482 | } | ||
3483 | |||
3478 | static u32 gfx_v8_0_get_rb_active_bitmap(struct amdgpu_device *adev) | 3484 | static u32 gfx_v8_0_get_rb_active_bitmap(struct amdgpu_device *adev) |
3479 | { | 3485 | { |
3480 | u32 data, mask; | 3486 | u32 data, mask; |
@@ -5442,6 +5448,7 @@ static const struct amdgpu_gfx_funcs gfx_v8_0_gfx_funcs = { | |||
5442 | .select_se_sh = &gfx_v8_0_select_se_sh, | 5448 | .select_se_sh = &gfx_v8_0_select_se_sh, |
5443 | .read_wave_data = &gfx_v8_0_read_wave_data, | 5449 | .read_wave_data = &gfx_v8_0_read_wave_data, |
5444 | .read_wave_sgprs = &gfx_v8_0_read_wave_sgprs, | 5450 | .read_wave_sgprs = &gfx_v8_0_read_wave_sgprs, |
5451 | .select_me_pipe_q = &gfx_v8_0_select_me_pipe_q | ||
5445 | }; | 5452 | }; |
5446 | 5453 | ||
5447 | static int gfx_v8_0_early_init(void *handle) | 5454 | static int gfx_v8_0_early_init(void *handle) |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index 1ae3de1094f9..9d39fd5b1822 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | |||
@@ -998,12 +998,19 @@ static void gfx_v9_0_read_wave_vgprs(struct amdgpu_device *adev, uint32_t simd, | |||
998 | start + SQIND_WAVE_VGPRS_OFFSET, size, dst); | 998 | start + SQIND_WAVE_VGPRS_OFFSET, size, dst); |
999 | } | 999 | } |
1000 | 1000 | ||
1001 | static void gfx_v9_0_select_me_pipe_q(struct amdgpu_device *adev, | ||
1002 | u32 me, u32 pipe, u32 q) | ||
1003 | { | ||
1004 | soc15_grbm_select(adev, me, pipe, q, 0); | ||
1005 | } | ||
1006 | |||
1001 | static const struct amdgpu_gfx_funcs gfx_v9_0_gfx_funcs = { | 1007 | static const struct amdgpu_gfx_funcs gfx_v9_0_gfx_funcs = { |
1002 | .get_gpu_clock_counter = &gfx_v9_0_get_gpu_clock_counter, | 1008 | .get_gpu_clock_counter = &gfx_v9_0_get_gpu_clock_counter, |
1003 | .select_se_sh = &gfx_v9_0_select_se_sh, | 1009 | .select_se_sh = &gfx_v9_0_select_se_sh, |
1004 | .read_wave_data = &gfx_v9_0_read_wave_data, | 1010 | .read_wave_data = &gfx_v9_0_read_wave_data, |
1005 | .read_wave_sgprs = &gfx_v9_0_read_wave_sgprs, | 1011 | .read_wave_sgprs = &gfx_v9_0_read_wave_sgprs, |
1006 | .read_wave_vgprs = &gfx_v9_0_read_wave_vgprs, | 1012 | .read_wave_vgprs = &gfx_v9_0_read_wave_vgprs, |
1013 | .select_me_pipe_q = &gfx_v9_0_select_me_pipe_q | ||
1007 | }; | 1014 | }; |
1008 | 1015 | ||
1009 | static void gfx_v9_0_gpu_early_init(struct amdgpu_device *adev) | 1016 | static void gfx_v9_0_gpu_early_init(struct amdgpu_device *adev) |
@@ -2757,6 +2764,45 @@ static int gfx_v9_0_kiq_init_register(struct amdgpu_ring *ring) | |||
2757 | return 0; | 2764 | return 0; |
2758 | } | 2765 | } |
2759 | 2766 | ||
2767 | static int gfx_v9_0_kiq_fini_register(struct amdgpu_ring *ring) | ||
2768 | { | ||
2769 | struct amdgpu_device *adev = ring->adev; | ||
2770 | int j; | ||
2771 | |||
2772 | /* disable the queue if it's active */ | ||
2773 | if (RREG32_SOC15(GC, 0, mmCP_HQD_ACTIVE) & 1) { | ||
2774 | |||
2775 | WREG32_SOC15(GC, 0, mmCP_HQD_DEQUEUE_REQUEST, 1); | ||
2776 | |||
2777 | for (j = 0; j < adev->usec_timeout; j++) { | ||
2778 | if (!(RREG32_SOC15(GC, 0, mmCP_HQD_ACTIVE) & 1)) | ||
2779 | break; | ||
2780 | udelay(1); | ||
2781 | } | ||
2782 | |||
2783 | if (j == AMDGPU_MAX_USEC_TIMEOUT) { | ||
2784 | DRM_DEBUG("KIQ dequeue request failed.\n"); | ||
2785 | |||
2786 | /* Manual disable if dequeue request times out */ | ||
2787 | WREG32_SOC15(GC, 0, mmCP_HQD_ACTIVE, 0); | ||
2788 | } | ||
2789 | |||
2790 | WREG32_SOC15(GC, 0, mmCP_HQD_DEQUEUE_REQUEST, | ||
2791 | 0); | ||
2792 | } | ||
2793 | |||
2794 | WREG32_SOC15(GC, 0, mmCP_HQD_IQ_TIMER, 0); | ||
2795 | WREG32_SOC15(GC, 0, mmCP_HQD_IB_CONTROL, 0); | ||
2796 | WREG32_SOC15(GC, 0, mmCP_HQD_PERSISTENT_STATE, 0); | ||
2797 | WREG32_SOC15(GC, 0, mmCP_HQD_PQ_DOORBELL_CONTROL, 0x40000000); | ||
2798 | WREG32_SOC15(GC, 0, mmCP_HQD_PQ_DOORBELL_CONTROL, 0); | ||
2799 | WREG32_SOC15(GC, 0, mmCP_HQD_PQ_RPTR, 0); | ||
2800 | WREG32_SOC15(GC, 0, mmCP_HQD_PQ_WPTR_HI, 0); | ||
2801 | WREG32_SOC15(GC, 0, mmCP_HQD_PQ_WPTR_LO, 0); | ||
2802 | |||
2803 | return 0; | ||
2804 | } | ||
2805 | |||
2760 | static int gfx_v9_0_kiq_init_queue(struct amdgpu_ring *ring) | 2806 | static int gfx_v9_0_kiq_init_queue(struct amdgpu_ring *ring) |
2761 | { | 2807 | { |
2762 | struct amdgpu_device *adev = ring->adev; | 2808 | struct amdgpu_device *adev = ring->adev; |
@@ -3010,7 +3056,6 @@ static int gfx_v9_0_kcq_disable(struct amdgpu_ring *kiq_ring,struct amdgpu_ring | |||
3010 | return r; | 3056 | return r; |
3011 | } | 3057 | } |
3012 | 3058 | ||
3013 | |||
3014 | static int gfx_v9_0_hw_fini(void *handle) | 3059 | static int gfx_v9_0_hw_fini(void *handle) |
3015 | { | 3060 | { |
3016 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 3061 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
@@ -3033,6 +3078,20 @@ static int gfx_v9_0_hw_fini(void *handle) | |||
3033 | WREG32_FIELD15(GC, 0, CP_PQ_WPTR_POLL_CNTL, EN, 0); | 3078 | WREG32_FIELD15(GC, 0, CP_PQ_WPTR_POLL_CNTL, EN, 0); |
3034 | return 0; | 3079 | return 0; |
3035 | } | 3080 | } |
3081 | |||
3082 | /* Use deinitialize sequence from CAIL when unbinding device from driver, | ||
3083 | * otherwise KIQ is hanging when binding back | ||
3084 | */ | ||
3085 | if (!adev->in_gpu_reset && !adev->gfx.in_suspend) { | ||
3086 | mutex_lock(&adev->srbm_mutex); | ||
3087 | soc15_grbm_select(adev, adev->gfx.kiq.ring.me, | ||
3088 | adev->gfx.kiq.ring.pipe, | ||
3089 | adev->gfx.kiq.ring.queue, 0); | ||
3090 | gfx_v9_0_kiq_fini_register(&adev->gfx.kiq.ring); | ||
3091 | soc15_grbm_select(adev, 0, 0, 0, 0); | ||
3092 | mutex_unlock(&adev->srbm_mutex); | ||
3093 | } | ||
3094 | |||
3036 | gfx_v9_0_cp_enable(adev, false); | 3095 | gfx_v9_0_cp_enable(adev, false); |
3037 | gfx_v9_0_rlc_stop(adev); | 3096 | gfx_v9_0_rlc_stop(adev); |
3038 | 3097 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index 6452101c7aab..c7190c39c4f5 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | |||
@@ -837,7 +837,7 @@ static void sdma_v2_4_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
837 | amdgpu_ring_write(ring, addr & 0xfffffffc); | 837 | amdgpu_ring_write(ring, addr & 0xfffffffc); |
838 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | 838 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); |
839 | amdgpu_ring_write(ring, seq); /* reference */ | 839 | amdgpu_ring_write(ring, seq); /* reference */ |
840 | amdgpu_ring_write(ring, 0xfffffff); /* mask */ | 840 | amdgpu_ring_write(ring, 0xffffffff); /* mask */ |
841 | amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) | | 841 | amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) | |
842 | SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */ | 842 | SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */ |
843 | } | 843 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index ecaef084dab1..be20a387d961 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | |||
@@ -1105,7 +1105,7 @@ static void sdma_v3_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
1105 | amdgpu_ring_write(ring, addr & 0xfffffffc); | 1105 | amdgpu_ring_write(ring, addr & 0xfffffffc); |
1106 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | 1106 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); |
1107 | amdgpu_ring_write(ring, seq); /* reference */ | 1107 | amdgpu_ring_write(ring, seq); /* reference */ |
1108 | amdgpu_ring_write(ring, 0xfffffff); /* mask */ | 1108 | amdgpu_ring_write(ring, 0xffffffff); /* mask */ |
1109 | amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) | | 1109 | amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) | |
1110 | SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */ | 1110 | SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */ |
1111 | } | 1111 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c index 2a8184082cd1..399f876f9cad 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | |||
@@ -1121,7 +1121,7 @@ static void sdma_v4_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
1121 | amdgpu_ring_write(ring, addr & 0xfffffffc); | 1121 | amdgpu_ring_write(ring, addr & 0xfffffffc); |
1122 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | 1122 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); |
1123 | amdgpu_ring_write(ring, seq); /* reference */ | 1123 | amdgpu_ring_write(ring, seq); /* reference */ |
1124 | amdgpu_ring_write(ring, 0xfffffff); /* mask */ | 1124 | amdgpu_ring_write(ring, 0xffffffff); /* mask */ |
1125 | amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) | | 1125 | amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) | |
1126 | SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */ | 1126 | SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */ |
1127 | } | 1127 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c index b154667a8fd9..a675ec6d2811 100644 --- a/drivers/gpu/drm/amd/amdgpu/si.c +++ b/drivers/gpu/drm/amd/amdgpu/si.c | |||
@@ -1252,6 +1252,71 @@ static void si_invalidate_hdp(struct amdgpu_device *adev, | |||
1252 | } | 1252 | } |
1253 | } | 1253 | } |
1254 | 1254 | ||
1255 | static int si_get_pcie_lanes(struct amdgpu_device *adev) | ||
1256 | { | ||
1257 | u32 link_width_cntl; | ||
1258 | |||
1259 | if (adev->flags & AMD_IS_APU) | ||
1260 | return 0; | ||
1261 | |||
1262 | link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); | ||
1263 | |||
1264 | switch ((link_width_cntl & LC_LINK_WIDTH_RD_MASK) >> LC_LINK_WIDTH_RD_SHIFT) { | ||
1265 | case LC_LINK_WIDTH_X1: | ||
1266 | return 1; | ||
1267 | case LC_LINK_WIDTH_X2: | ||
1268 | return 2; | ||
1269 | case LC_LINK_WIDTH_X4: | ||
1270 | return 4; | ||
1271 | case LC_LINK_WIDTH_X8: | ||
1272 | return 8; | ||
1273 | case LC_LINK_WIDTH_X0: | ||
1274 | case LC_LINK_WIDTH_X16: | ||
1275 | default: | ||
1276 | return 16; | ||
1277 | } | ||
1278 | } | ||
1279 | |||
1280 | static void si_set_pcie_lanes(struct amdgpu_device *adev, int lanes) | ||
1281 | { | ||
1282 | u32 link_width_cntl, mask; | ||
1283 | |||
1284 | if (adev->flags & AMD_IS_APU) | ||
1285 | return; | ||
1286 | |||
1287 | switch (lanes) { | ||
1288 | case 0: | ||
1289 | mask = LC_LINK_WIDTH_X0; | ||
1290 | break; | ||
1291 | case 1: | ||
1292 | mask = LC_LINK_WIDTH_X1; | ||
1293 | break; | ||
1294 | case 2: | ||
1295 | mask = LC_LINK_WIDTH_X2; | ||
1296 | break; | ||
1297 | case 4: | ||
1298 | mask = LC_LINK_WIDTH_X4; | ||
1299 | break; | ||
1300 | case 8: | ||
1301 | mask = LC_LINK_WIDTH_X8; | ||
1302 | break; | ||
1303 | case 16: | ||
1304 | mask = LC_LINK_WIDTH_X16; | ||
1305 | break; | ||
1306 | default: | ||
1307 | DRM_ERROR("invalid pcie lane request: %d\n", lanes); | ||
1308 | return; | ||
1309 | } | ||
1310 | |||
1311 | link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); | ||
1312 | link_width_cntl &= ~LC_LINK_WIDTH_MASK; | ||
1313 | link_width_cntl |= mask << LC_LINK_WIDTH_SHIFT; | ||
1314 | link_width_cntl |= (LC_RECONFIG_NOW | | ||
1315 | LC_RECONFIG_ARC_MISSING_ESCAPE); | ||
1316 | |||
1317 | WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); | ||
1318 | } | ||
1319 | |||
1255 | static const struct amdgpu_asic_funcs si_asic_funcs = | 1320 | static const struct amdgpu_asic_funcs si_asic_funcs = |
1256 | { | 1321 | { |
1257 | .read_disabled_bios = &si_read_disabled_bios, | 1322 | .read_disabled_bios = &si_read_disabled_bios, |
@@ -1262,6 +1327,8 @@ static const struct amdgpu_asic_funcs si_asic_funcs = | |||
1262 | .get_xclk = &si_get_xclk, | 1327 | .get_xclk = &si_get_xclk, |
1263 | .set_uvd_clocks = &si_set_uvd_clocks, | 1328 | .set_uvd_clocks = &si_set_uvd_clocks, |
1264 | .set_vce_clocks = NULL, | 1329 | .set_vce_clocks = NULL, |
1330 | .get_pcie_lanes = &si_get_pcie_lanes, | ||
1331 | .set_pcie_lanes = &si_set_pcie_lanes, | ||
1265 | .get_config_memsize = &si_get_config_memsize, | 1332 | .get_config_memsize = &si_get_config_memsize, |
1266 | .flush_hdp = &si_flush_hdp, | 1333 | .flush_hdp = &si_flush_hdp, |
1267 | .invalidate_hdp = &si_invalidate_hdp, | 1334 | .invalidate_hdp = &si_invalidate_hdp, |
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c index 672eaffac0a5..797d505bf9ee 100644 --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c | |||
@@ -6372,9 +6372,9 @@ static void si_set_pcie_lane_width_in_smc(struct amdgpu_device *adev, | |||
6372 | { | 6372 | { |
6373 | u32 lane_width; | 6373 | u32 lane_width; |
6374 | u32 new_lane_width = | 6374 | u32 new_lane_width = |
6375 | (amdgpu_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; | 6375 | ((amdgpu_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1; |
6376 | u32 current_lane_width = | 6376 | u32 current_lane_width = |
6377 | (amdgpu_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; | 6377 | ((amdgpu_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1; |
6378 | 6378 | ||
6379 | if (new_lane_width != current_lane_width) { | 6379 | if (new_lane_width != current_lane_width) { |
6380 | amdgpu_set_pcie_lanes(adev, new_lane_width); | 6380 | amdgpu_set_pcie_lanes(adev, new_lane_width); |
diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h index 3ae3da4e7c14..0f5ad54d3fd3 100644 --- a/drivers/gpu/drm/amd/include/atomfirmware.h +++ b/drivers/gpu/drm/amd/include/atomfirmware.h | |||
@@ -1264,9 +1264,9 @@ struct atom_smc_dpm_info_v4_1 | |||
1264 | uint8_t ledpin2; | 1264 | uint8_t ledpin2; |
1265 | uint8_t padding8_4; | 1265 | uint8_t padding8_4; |
1266 | 1266 | ||
1267 | uint8_t gfxclkspreadenabled; | 1267 | uint8_t pllgfxclkspreadenabled; |
1268 | uint8_t gfxclkspreadpercent; | 1268 | uint8_t pllgfxclkspreadpercent; |
1269 | uint16_t gfxclkspreadfreq; | 1269 | uint16_t pllgfxclkspreadfreq; |
1270 | 1270 | ||
1271 | uint8_t uclkspreadenabled; | 1271 | uint8_t uclkspreadenabled; |
1272 | uint8_t uclkspreadpercent; | 1272 | uint8_t uclkspreadpercent; |
@@ -1276,7 +1276,11 @@ struct atom_smc_dpm_info_v4_1 | |||
1276 | uint8_t socclkspreadpercent; | 1276 | uint8_t socclkspreadpercent; |
1277 | uint16_t socclkspreadfreq; | 1277 | uint16_t socclkspreadfreq; |
1278 | 1278 | ||
1279 | uint32_t boardreserved[3]; | 1279 | uint8_t acggfxclkspreadenabled; |
1280 | uint8_t acggfxclkspreadpercent; | ||
1281 | uint16_t acggfxclkspreadfreq; | ||
1282 | |||
1283 | uint32_t boardreserved[10]; | ||
1280 | }; | 1284 | }; |
1281 | 1285 | ||
1282 | 1286 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile index faf9c880e4f7..210fb3ecd213 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile | |||
@@ -32,7 +32,7 @@ HARDWARE_MGR = hwmgr.o processpptables.o \ | |||
32 | vega10_processpptables.o vega10_hwmgr.o vega10_powertune.o \ | 32 | vega10_processpptables.o vega10_hwmgr.o vega10_powertune.o \ |
33 | vega10_thermal.o smu10_hwmgr.o pp_psm.o\ | 33 | vega10_thermal.o smu10_hwmgr.o pp_psm.o\ |
34 | vega12_processpptables.o vega12_hwmgr.o \ | 34 | vega12_processpptables.o vega12_hwmgr.o \ |
35 | vega12_powertune.o vega12_thermal.o \ | 35 | vega12_thermal.o \ |
36 | pp_overdriver.o smu_helper.o | 36 | pp_overdriver.o smu_helper.o |
37 | 37 | ||
38 | AMD_PP_HWMGR = $(addprefix $(AMD_PP_PATH)/hwmgr/,$(HARDWARE_MGR)) | 38 | AMD_PP_HWMGR = $(addprefix $(AMD_PP_PATH)/hwmgr/,$(HARDWARE_MGR)) |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c index 55f9b30513ff..ad42caac033e 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c | |||
@@ -616,9 +616,9 @@ int pp_atomfwctrl_get_smc_dpm_information(struct pp_hwmgr *hwmgr, | |||
616 | param->ledpin1 = info->ledpin1; | 616 | param->ledpin1 = info->ledpin1; |
617 | param->ledpin2 = info->ledpin2; | 617 | param->ledpin2 = info->ledpin2; |
618 | 618 | ||
619 | param->gfxclkspreadenabled = info->gfxclkspreadenabled; | 619 | param->pllgfxclkspreadenabled = info->pllgfxclkspreadenabled; |
620 | param->gfxclkspreadpercent = info->gfxclkspreadpercent; | 620 | param->pllgfxclkspreadpercent = info->pllgfxclkspreadpercent; |
621 | param->gfxclkspreadfreq = info->gfxclkspreadfreq; | 621 | param->pllgfxclkspreadfreq = info->pllgfxclkspreadfreq; |
622 | 622 | ||
623 | param->uclkspreadenabled = info->uclkspreadenabled; | 623 | param->uclkspreadenabled = info->uclkspreadenabled; |
624 | param->uclkspreadpercent = info->uclkspreadpercent; | 624 | param->uclkspreadpercent = info->uclkspreadpercent; |
@@ -628,5 +628,9 @@ int pp_atomfwctrl_get_smc_dpm_information(struct pp_hwmgr *hwmgr, | |||
628 | param->socclkspreadpercent = info->socclkspreadpercent; | 628 | param->socclkspreadpercent = info->socclkspreadpercent; |
629 | param->socclkspreadfreq = info->socclkspreadfreq; | 629 | param->socclkspreadfreq = info->socclkspreadfreq; |
630 | 630 | ||
631 | param->acggfxclkspreadenabled = info->acggfxclkspreadenabled; | ||
632 | param->acggfxclkspreadpercent = info->acggfxclkspreadpercent; | ||
633 | param->acggfxclkspreadfreq = info->acggfxclkspreadfreq; | ||
634 | |||
631 | return 0; | 635 | return 0; |
632 | } | 636 | } |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.h b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.h index a957d8f08029..8df1e84f27c9 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.h +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.h | |||
@@ -192,9 +192,9 @@ struct pp_atomfwctrl_smc_dpm_parameters | |||
192 | uint8_t ledpin1; | 192 | uint8_t ledpin1; |
193 | uint8_t ledpin2; | 193 | uint8_t ledpin2; |
194 | 194 | ||
195 | uint8_t gfxclkspreadenabled; | 195 | uint8_t pllgfxclkspreadenabled; |
196 | uint8_t gfxclkspreadpercent; | 196 | uint8_t pllgfxclkspreadpercent; |
197 | uint16_t gfxclkspreadfreq; | 197 | uint16_t pllgfxclkspreadfreq; |
198 | 198 | ||
199 | uint8_t uclkspreadenabled; | 199 | uint8_t uclkspreadenabled; |
200 | uint8_t uclkspreadpercent; | 200 | uint8_t uclkspreadpercent; |
@@ -203,6 +203,10 @@ struct pp_atomfwctrl_smc_dpm_parameters | |||
203 | uint8_t socclkspreadenabled; | 203 | uint8_t socclkspreadenabled; |
204 | uint8_t socclkspreadpercent; | 204 | uint8_t socclkspreadpercent; |
205 | uint16_t socclkspreadfreq; | 205 | uint16_t socclkspreadfreq; |
206 | |||
207 | uint8_t acggfxclkspreadenabled; | ||
208 | uint8_t acggfxclkspreadpercent; | ||
209 | uint16_t acggfxclkspreadfreq; | ||
206 | }; | 210 | }; |
207 | 211 | ||
208 | int pp_atomfwctrl_get_gpu_pll_dividers_vega10(struct pp_hwmgr *hwmgr, | 212 | int pp_atomfwctrl_get_gpu_pll_dividers_vega10(struct pp_hwmgr *hwmgr, |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c index 2b0c366d6149..add90675fd2a 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | |||
@@ -3374,7 +3374,8 @@ static int smu7_get_gpu_power(struct pp_hwmgr *hwmgr, | |||
3374 | "Failed to start pm status log!", | 3374 | "Failed to start pm status log!", |
3375 | return -1); | 3375 | return -1); |
3376 | 3376 | ||
3377 | msleep_interruptible(20); | 3377 | /* Sampling period from 50ms to 4sec */ |
3378 | msleep_interruptible(200); | ||
3378 | 3379 | ||
3379 | PP_ASSERT_WITH_CODE(!smum_send_msg_to_smc(hwmgr, | 3380 | PP_ASSERT_WITH_CODE(!smum_send_msg_to_smc(hwmgr, |
3380 | PPSMC_MSG_PmStatusLogSample), | 3381 | PPSMC_MSG_PmStatusLogSample), |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c index 75a465f771f0..7b26607c646a 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c | |||
@@ -319,13 +319,13 @@ static int smu8_get_system_info_data(struct pp_hwmgr *hwmgr) | |||
319 | GetIndexIntoMasterTable(DATA, IntegratedSystemInfo), | 319 | GetIndexIntoMasterTable(DATA, IntegratedSystemInfo), |
320 | &size, &frev, &crev); | 320 | &size, &frev, &crev); |
321 | 321 | ||
322 | if (crev != 9) { | 322 | if (info == NULL) { |
323 | pr_err("Unsupported IGP table: %d %d\n", frev, crev); | 323 | pr_err("Could not retrieve the Integrated System Info Table!\n"); |
324 | return -EINVAL; | 324 | return -EINVAL; |
325 | } | 325 | } |
326 | 326 | ||
327 | if (info == NULL) { | 327 | if (crev != 9) { |
328 | pr_err("Could not retrieve the Integrated System Info Table!\n"); | 328 | pr_err("Unsupported IGP table: %d %d\n", frev, crev); |
329 | return -EINVAL; | 329 | return -EINVAL; |
330 | } | 330 | } |
331 | 331 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c index 15ce1e825021..200de46bd06b 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include "ppatomfwctrl.h" | 33 | #include "ppatomfwctrl.h" |
34 | #include "atomfirmware.h" | 34 | #include "atomfirmware.h" |
35 | #include "cgs_common.h" | 35 | #include "cgs_common.h" |
36 | #include "vega12_powertune.h" | ||
37 | #include "vega12_inc.h" | 36 | #include "vega12_inc.h" |
38 | #include "pp_soc15.h" | 37 | #include "pp_soc15.h" |
39 | #include "pppcielanes.h" | 38 | #include "pppcielanes.h" |
@@ -893,6 +892,28 @@ static int vega12_odn_initialize_default_settings( | |||
893 | return 0; | 892 | return 0; |
894 | } | 893 | } |
895 | 894 | ||
895 | static int vega12_set_overdrive_target_percentage(struct pp_hwmgr *hwmgr, | ||
896 | uint32_t adjust_percent) | ||
897 | { | ||
898 | return smum_send_msg_to_smc_with_parameter(hwmgr, | ||
899 | PPSMC_MSG_OverDriveSetPercentage, adjust_percent); | ||
900 | } | ||
901 | |||
902 | static int vega12_power_control_set_level(struct pp_hwmgr *hwmgr) | ||
903 | { | ||
904 | int adjust_percent, result = 0; | ||
905 | |||
906 | if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { | ||
907 | adjust_percent = | ||
908 | hwmgr->platform_descriptor.TDPAdjustmentPolarity ? | ||
909 | hwmgr->platform_descriptor.TDPAdjustment : | ||
910 | (-1 * hwmgr->platform_descriptor.TDPAdjustment); | ||
911 | result = vega12_set_overdrive_target_percentage(hwmgr, | ||
912 | (uint32_t)adjust_percent); | ||
913 | } | ||
914 | return result; | ||
915 | } | ||
916 | |||
896 | static int vega12_enable_dpm_tasks(struct pp_hwmgr *hwmgr) | 917 | static int vega12_enable_dpm_tasks(struct pp_hwmgr *hwmgr) |
897 | { | 918 | { |
898 | int tmp_result, result = 0; | 919 | int tmp_result, result = 0; |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_powertune.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_powertune.c deleted file mode 100644 index 76e60c0181ac..000000000000 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_powertune.c +++ /dev/null | |||
@@ -1,1364 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #include "hwmgr.h" | ||
25 | #include "vega12_hwmgr.h" | ||
26 | #include "vega12_powertune.h" | ||
27 | #include "vega12_smumgr.h" | ||
28 | #include "vega12_ppsmc.h" | ||
29 | #include "vega12_inc.h" | ||
30 | #include "pp_debug.h" | ||
31 | #include "pp_soc15.h" | ||
32 | |||
33 | static const struct vega12_didt_config_reg SEDiDtTuningCtrlConfig_Vega12[] = | ||
34 | { | ||
35 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
36 | * Offset Mask Shift Value | ||
37 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
38 | */ | ||
39 | /* DIDT_SQ */ | ||
40 | { ixDIDT_SQ_TUNING_CTRL, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3853 }, | ||
41 | { ixDIDT_SQ_TUNING_CTRL, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3153 }, | ||
42 | |||
43 | /* DIDT_TD */ | ||
44 | { ixDIDT_TD_TUNING_CTRL, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x0dde }, | ||
45 | { ixDIDT_TD_TUNING_CTRL, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x0dde }, | ||
46 | |||
47 | /* DIDT_TCP */ | ||
48 | { ixDIDT_TCP_TUNING_CTRL, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3dde }, | ||
49 | { ixDIDT_TCP_TUNING_CTRL, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3dde }, | ||
50 | |||
51 | /* DIDT_DB */ | ||
52 | { ixDIDT_DB_TUNING_CTRL, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT, 0x3dde }, | ||
53 | { ixDIDT_DB_TUNING_CTRL, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK, DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT, 0x3dde }, | ||
54 | |||
55 | { 0xFFFFFFFF } /* End of list */ | ||
56 | }; | ||
57 | |||
58 | static const struct vega12_didt_config_reg SEDiDtCtrl3Config_vega12[] = | ||
59 | { | ||
60 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
61 | * Offset Mask Shift Value | ||
62 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
63 | */ | ||
64 | /*DIDT_SQ_CTRL3 */ | ||
65 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_SQ_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 }, | ||
66 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
67 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__THROTTLE_POLICY_MASK, DIDT_SQ_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 }, | ||
68 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
69 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 }, | ||
70 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 }, | ||
71 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
72 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
73 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_SQ_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 }, | ||
74 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_STALL_SEL_MASK, DIDT_SQ_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 }, | ||
75 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_SQ_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 }, | ||
76 | { ixDIDT_SQ_CTRL3, DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 }, | ||
77 | |||
78 | /*DIDT_TCP_CTRL3 */ | ||
79 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_TCP_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 }, | ||
80 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
81 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__THROTTLE_POLICY_MASK, DIDT_TCP_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 }, | ||
82 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
83 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 }, | ||
84 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 }, | ||
85 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
86 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
87 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_TCP_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 }, | ||
88 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_STALL_SEL_MASK, DIDT_TCP_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 }, | ||
89 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_TCP_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 }, | ||
90 | { ixDIDT_TCP_CTRL3, DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 }, | ||
91 | |||
92 | /*DIDT_TD_CTRL3 */ | ||
93 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_TD_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 }, | ||
94 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
95 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__THROTTLE_POLICY_MASK, DIDT_TD_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 }, | ||
96 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
97 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 }, | ||
98 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 }, | ||
99 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
100 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
101 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_TD_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 }, | ||
102 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_STALL_SEL_MASK, DIDT_TD_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 }, | ||
103 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_TD_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 }, | ||
104 | { ixDIDT_TD_CTRL3, DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 }, | ||
105 | |||
106 | /*DIDT_DB_CTRL3 */ | ||
107 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__GC_DIDT_ENABLE_MASK, DIDT_DB_CTRL3__GC_DIDT_ENABLE__SHIFT, 0x0000 }, | ||
108 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK, DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
109 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__THROTTLE_POLICY_MASK, DIDT_DB_CTRL3__THROTTLE_POLICY__SHIFT, 0x0003 }, | ||
110 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
111 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK, DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT, 0x0000 }, | ||
112 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK, DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0003 }, | ||
113 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK, DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
114 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK, DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
115 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__QUALIFY_STALL_EN_MASK, DIDT_DB_CTRL3__QUALIFY_STALL_EN__SHIFT, 0x0000 }, | ||
116 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_STALL_SEL_MASK, DIDT_DB_CTRL3__DIDT_STALL_SEL__SHIFT, 0x0000 }, | ||
117 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_FORCE_STALL_MASK, DIDT_DB_CTRL3__DIDT_FORCE_STALL__SHIFT, 0x0000 }, | ||
118 | { ixDIDT_DB_CTRL3, DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN_MASK, DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN__SHIFT, 0x0000 }, | ||
119 | |||
120 | { 0xFFFFFFFF } /* End of list */ | ||
121 | }; | ||
122 | |||
123 | static const struct vega12_didt_config_reg SEDiDtCtrl2Config_Vega12[] = | ||
124 | { | ||
125 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
126 | * Offset Mask Shift Value | ||
127 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
128 | */ | ||
129 | /* DIDT_SQ */ | ||
130 | { ixDIDT_SQ_CTRL2, DIDT_SQ_CTRL2__MAX_POWER_DELTA_MASK, DIDT_SQ_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3853 }, | ||
131 | { ixDIDT_SQ_CTRL2, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 }, | ||
132 | { ixDIDT_SQ_CTRL2, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0000 }, | ||
133 | |||
134 | /* DIDT_TD */ | ||
135 | { ixDIDT_TD_CTRL2, DIDT_TD_CTRL2__MAX_POWER_DELTA_MASK, DIDT_TD_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3fff }, | ||
136 | { ixDIDT_TD_CTRL2, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 }, | ||
137 | { ixDIDT_TD_CTRL2, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 }, | ||
138 | |||
139 | /* DIDT_TCP */ | ||
140 | { ixDIDT_TCP_CTRL2, DIDT_TCP_CTRL2__MAX_POWER_DELTA_MASK, DIDT_TCP_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3dde }, | ||
141 | { ixDIDT_TCP_CTRL2, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 }, | ||
142 | { ixDIDT_TCP_CTRL2, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 }, | ||
143 | |||
144 | /* DIDT_DB */ | ||
145 | { ixDIDT_DB_CTRL2, DIDT_DB_CTRL2__MAX_POWER_DELTA_MASK, DIDT_DB_CTRL2__MAX_POWER_DELTA__SHIFT, 0x3dde }, | ||
146 | { ixDIDT_DB_CTRL2, DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK, DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT, 0x00c0 }, | ||
147 | { ixDIDT_DB_CTRL2, DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK, DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT, 0x0001 }, | ||
148 | |||
149 | { 0xFFFFFFFF } /* End of list */ | ||
150 | }; | ||
151 | |||
152 | static const struct vega12_didt_config_reg SEDiDtCtrl1Config_Vega12[] = | ||
153 | { | ||
154 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
155 | * Offset Mask Shift Value | ||
156 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
157 | */ | ||
158 | /* DIDT_SQ */ | ||
159 | { ixDIDT_SQ_CTRL1, DIDT_SQ_CTRL1__MIN_POWER_MASK, DIDT_SQ_CTRL1__MIN_POWER__SHIFT, 0x0000 }, | ||
160 | { ixDIDT_SQ_CTRL1, DIDT_SQ_CTRL1__MAX_POWER_MASK, DIDT_SQ_CTRL1__MAX_POWER__SHIFT, 0xffff }, | ||
161 | /* DIDT_TD */ | ||
162 | { ixDIDT_TD_CTRL1, DIDT_TD_CTRL1__MIN_POWER_MASK, DIDT_TD_CTRL1__MIN_POWER__SHIFT, 0x0000 }, | ||
163 | { ixDIDT_TD_CTRL1, DIDT_TD_CTRL1__MAX_POWER_MASK, DIDT_TD_CTRL1__MAX_POWER__SHIFT, 0xffff }, | ||
164 | /* DIDT_TCP */ | ||
165 | { ixDIDT_TCP_CTRL1, DIDT_TCP_CTRL1__MIN_POWER_MASK, DIDT_TCP_CTRL1__MIN_POWER__SHIFT, 0x0000 }, | ||
166 | { ixDIDT_TCP_CTRL1, DIDT_TCP_CTRL1__MAX_POWER_MASK, DIDT_TCP_CTRL1__MAX_POWER__SHIFT, 0xffff }, | ||
167 | /* DIDT_DB */ | ||
168 | { ixDIDT_DB_CTRL1, DIDT_DB_CTRL1__MIN_POWER_MASK, DIDT_DB_CTRL1__MIN_POWER__SHIFT, 0x0000 }, | ||
169 | { ixDIDT_DB_CTRL1, DIDT_DB_CTRL1__MAX_POWER_MASK, DIDT_DB_CTRL1__MAX_POWER__SHIFT, 0xffff }, | ||
170 | |||
171 | { 0xFFFFFFFF } /* End of list */ | ||
172 | }; | ||
173 | |||
174 | |||
175 | static const struct vega12_didt_config_reg SEDiDtWeightConfig_Vega12[] = | ||
176 | { | ||
177 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
178 | * Offset Mask Shift Value | ||
179 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
180 | */ | ||
181 | /* DIDT_SQ */ | ||
182 | { ixDIDT_SQ_WEIGHT0_3, 0xFFFFFFFF, 0, 0x2B363B1A }, | ||
183 | { ixDIDT_SQ_WEIGHT4_7, 0xFFFFFFFF, 0, 0x270B2432 }, | ||
184 | { ixDIDT_SQ_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000018 }, | ||
185 | |||
186 | /* DIDT_TD */ | ||
187 | { ixDIDT_TD_WEIGHT0_3, 0xFFFFFFFF, 0, 0x2B1D220F }, | ||
188 | { ixDIDT_TD_WEIGHT4_7, 0xFFFFFFFF, 0, 0x00007558 }, | ||
189 | { ixDIDT_TD_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000000 }, | ||
190 | |||
191 | /* DIDT_TCP */ | ||
192 | { ixDIDT_TCP_WEIGHT0_3, 0xFFFFFFFF, 0, 0x5ACE160D }, | ||
193 | { ixDIDT_TCP_WEIGHT4_7, 0xFFFFFFFF, 0, 0x00000000 }, | ||
194 | { ixDIDT_TCP_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000000 }, | ||
195 | |||
196 | /* DIDT_DB */ | ||
197 | { ixDIDT_DB_WEIGHT0_3, 0xFFFFFFFF, 0, 0x0E152A0F }, | ||
198 | { ixDIDT_DB_WEIGHT4_7, 0xFFFFFFFF, 0, 0x09061813 }, | ||
199 | { ixDIDT_DB_WEIGHT8_11, 0xFFFFFFFF, 0, 0x00000013 }, | ||
200 | |||
201 | { 0xFFFFFFFF } /* End of list */ | ||
202 | }; | ||
203 | |||
204 | static const struct vega12_didt_config_reg SEDiDtCtrl0Config_Vega12[] = | ||
205 | { | ||
206 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
207 | * Offset Mask Shift Value | ||
208 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
209 | */ | ||
210 | /* DIDT_SQ */ | ||
211 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK, DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 }, | ||
212 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__PHASE_OFFSET_MASK, DIDT_SQ_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 }, | ||
213 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_CTRL_RST_MASK, DIDT_SQ_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 }, | ||
214 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
215 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 }, | ||
216 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 }, | ||
217 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 }, | ||
218 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff }, | ||
219 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 }, | ||
220 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 }, | ||
221 | { ixDIDT_SQ_CTRL0, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 }, | ||
222 | /* DIDT_TD */ | ||
223 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK, DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 }, | ||
224 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__PHASE_OFFSET_MASK, DIDT_TD_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 }, | ||
225 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_CTRL_RST_MASK, DIDT_TD_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 }, | ||
226 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
227 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 }, | ||
228 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 }, | ||
229 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 }, | ||
230 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff }, | ||
231 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 }, | ||
232 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 }, | ||
233 | { ixDIDT_TD_CTRL0, DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 }, | ||
234 | /* DIDT_TCP */ | ||
235 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK, DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 }, | ||
236 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__PHASE_OFFSET_MASK, DIDT_TCP_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 }, | ||
237 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_CTRL_RST_MASK, DIDT_TCP_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 }, | ||
238 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
239 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 }, | ||
240 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 }, | ||
241 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 }, | ||
242 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff }, | ||
243 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 }, | ||
244 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 }, | ||
245 | { ixDIDT_TCP_CTRL0, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 }, | ||
246 | /* DIDT_DB */ | ||
247 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK, DIDT_DB_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 }, | ||
248 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__PHASE_OFFSET_MASK, DIDT_DB_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 }, | ||
249 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_CTRL_RST_MASK, DIDT_DB_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 }, | ||
250 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
251 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN_MASK, DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 }, | ||
252 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN_MASK, DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 }, | ||
253 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK, DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 }, | ||
254 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK, DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff }, | ||
255 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN_MASK, DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 }, | ||
256 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN_MASK, DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 }, | ||
257 | { ixDIDT_DB_CTRL0, DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK, DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 }, | ||
258 | |||
259 | { 0xFFFFFFFF } /* End of list */ | ||
260 | }; | ||
261 | |||
262 | |||
263 | static const struct vega12_didt_config_reg SEDiDtStallCtrlConfig_vega12[] = | ||
264 | { | ||
265 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
266 | * Offset Mask Shift Value | ||
267 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
268 | */ | ||
269 | /* DIDT_SQ */ | ||
270 | { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0004 }, | ||
271 | { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0004 }, | ||
272 | { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a }, | ||
273 | { ixDIDT_SQ_STALL_CTRL, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_SQ_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a }, | ||
274 | |||
275 | /* DIDT_TD */ | ||
276 | { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0001 }, | ||
277 | { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0001 }, | ||
278 | { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a }, | ||
279 | { ixDIDT_TD_STALL_CTRL, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_TD_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a }, | ||
280 | |||
281 | /* DIDT_TCP */ | ||
282 | { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0001 }, | ||
283 | { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0001 }, | ||
284 | { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a }, | ||
285 | { ixDIDT_TCP_STALL_CTRL, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_TCP_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a }, | ||
286 | |||
287 | /* DIDT_DB */ | ||
288 | { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT, 0x0004 }, | ||
289 | { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK, DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT, 0x0004 }, | ||
290 | { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI_MASK, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT, 0x000a }, | ||
291 | { ixDIDT_DB_STALL_CTRL, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO_MASK, DIDT_DB_STALL_CTRL__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT, 0x000a }, | ||
292 | |||
293 | { 0xFFFFFFFF } /* End of list */ | ||
294 | }; | ||
295 | |||
296 | static const struct vega12_didt_config_reg SEDiDtStallPatternConfig_vega12[] = | ||
297 | { | ||
298 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
299 | * Offset Mask Shift Value | ||
300 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
301 | */ | ||
302 | /* DIDT_SQ_STALL_PATTERN_1_2 */ | ||
303 | { ixDIDT_SQ_STALL_PATTERN_1_2, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 }, | ||
304 | { ixDIDT_SQ_STALL_PATTERN_1_2, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_SQ_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 }, | ||
305 | |||
306 | /* DIDT_SQ_STALL_PATTERN_3_4 */ | ||
307 | { ixDIDT_SQ_STALL_PATTERN_3_4, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 }, | ||
308 | { ixDIDT_SQ_STALL_PATTERN_3_4, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_SQ_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 }, | ||
309 | |||
310 | /* DIDT_SQ_STALL_PATTERN_5_6 */ | ||
311 | { ixDIDT_SQ_STALL_PATTERN_5_6, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 }, | ||
312 | { ixDIDT_SQ_STALL_PATTERN_5_6, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_SQ_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 }, | ||
313 | |||
314 | /* DIDT_SQ_STALL_PATTERN_7 */ | ||
315 | { ixDIDT_SQ_STALL_PATTERN_7, DIDT_SQ_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_SQ_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 }, | ||
316 | |||
317 | /* DIDT_TCP_STALL_PATTERN_1_2 */ | ||
318 | { ixDIDT_TCP_STALL_PATTERN_1_2, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 }, | ||
319 | { ixDIDT_TCP_STALL_PATTERN_1_2, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_TCP_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 }, | ||
320 | |||
321 | /* DIDT_TCP_STALL_PATTERN_3_4 */ | ||
322 | { ixDIDT_TCP_STALL_PATTERN_3_4, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 }, | ||
323 | { ixDIDT_TCP_STALL_PATTERN_3_4, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_TCP_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 }, | ||
324 | |||
325 | /* DIDT_TCP_STALL_PATTERN_5_6 */ | ||
326 | { ixDIDT_TCP_STALL_PATTERN_5_6, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 }, | ||
327 | { ixDIDT_TCP_STALL_PATTERN_5_6, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_TCP_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 }, | ||
328 | |||
329 | /* DIDT_TCP_STALL_PATTERN_7 */ | ||
330 | { ixDIDT_TCP_STALL_PATTERN_7, DIDT_TCP_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_TCP_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 }, | ||
331 | |||
332 | /* DIDT_TD_STALL_PATTERN_1_2 */ | ||
333 | { ixDIDT_TD_STALL_PATTERN_1_2, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 }, | ||
334 | { ixDIDT_TD_STALL_PATTERN_1_2, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_TD_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 }, | ||
335 | |||
336 | /* DIDT_TD_STALL_PATTERN_3_4 */ | ||
337 | { ixDIDT_TD_STALL_PATTERN_3_4, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 }, | ||
338 | { ixDIDT_TD_STALL_PATTERN_3_4, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_TD_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 }, | ||
339 | |||
340 | /* DIDT_TD_STALL_PATTERN_5_6 */ | ||
341 | { ixDIDT_TD_STALL_PATTERN_5_6, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 }, | ||
342 | { ixDIDT_TD_STALL_PATTERN_5_6, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_TD_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 }, | ||
343 | |||
344 | /* DIDT_TD_STALL_PATTERN_7 */ | ||
345 | { ixDIDT_TD_STALL_PATTERN_7, DIDT_TD_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_TD_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 }, | ||
346 | |||
347 | /* DIDT_DB_STALL_PATTERN_1_2 */ | ||
348 | { ixDIDT_DB_STALL_PATTERN_1_2, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1_MASK, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_1__SHIFT, 0x0001 }, | ||
349 | { ixDIDT_DB_STALL_PATTERN_1_2, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2_MASK, DIDT_DB_STALL_PATTERN_1_2__DIDT_STALL_PATTERN_2__SHIFT, 0x0001 }, | ||
350 | |||
351 | /* DIDT_DB_STALL_PATTERN_3_4 */ | ||
352 | { ixDIDT_DB_STALL_PATTERN_3_4, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3_MASK, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_3__SHIFT, 0x0001 }, | ||
353 | { ixDIDT_DB_STALL_PATTERN_3_4, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4_MASK, DIDT_DB_STALL_PATTERN_3_4__DIDT_STALL_PATTERN_4__SHIFT, 0x0001 }, | ||
354 | |||
355 | /* DIDT_DB_STALL_PATTERN_5_6 */ | ||
356 | { ixDIDT_DB_STALL_PATTERN_5_6, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5_MASK, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_5__SHIFT, 0x0000 }, | ||
357 | { ixDIDT_DB_STALL_PATTERN_5_6, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6_MASK, DIDT_DB_STALL_PATTERN_5_6__DIDT_STALL_PATTERN_6__SHIFT, 0x0000 }, | ||
358 | |||
359 | /* DIDT_DB_STALL_PATTERN_7 */ | ||
360 | { ixDIDT_DB_STALL_PATTERN_7, DIDT_DB_STALL_PATTERN_7__DIDT_STALL_PATTERN_7_MASK, DIDT_DB_STALL_PATTERN_7__DIDT_STALL_PATTERN_7__SHIFT, 0x0000 }, | ||
361 | |||
362 | { 0xFFFFFFFF } /* End of list */ | ||
363 | }; | ||
364 | |||
365 | static const struct vega12_didt_config_reg SELCacConfig_Vega12[] = | ||
366 | { | ||
367 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
368 | * Offset Mask Shift Value | ||
369 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
370 | */ | ||
371 | /* SQ */ | ||
372 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00060021 }, | ||
373 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00860021 }, | ||
374 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01060021 }, | ||
375 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01860021 }, | ||
376 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x02060021 }, | ||
377 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x02860021 }, | ||
378 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x03060021 }, | ||
379 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x03860021 }, | ||
380 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x04060021 }, | ||
381 | /* TD */ | ||
382 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x000E0020 }, | ||
383 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x008E0020 }, | ||
384 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x010E0020 }, | ||
385 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x018E0020 }, | ||
386 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x020E0020 }, | ||
387 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x028E0020 }, | ||
388 | /* TCP */ | ||
389 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x001c0020 }, | ||
390 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x009c0020 }, | ||
391 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x011c0020 }, | ||
392 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x019c0020 }, | ||
393 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x021c0020 }, | ||
394 | /* DB */ | ||
395 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00200008 }, | ||
396 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x00820008 }, | ||
397 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01020008 }, | ||
398 | { ixSE_CAC_CNTL, 0xFFFFFFFF, 0, 0x01820008 }, | ||
399 | |||
400 | { 0xFFFFFFFF } /* End of list */ | ||
401 | }; | ||
402 | |||
403 | |||
404 | static const struct vega12_didt_config_reg SEEDCStallPatternConfig_Vega12[] = | ||
405 | { | ||
406 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
407 | * Offset Mask Shift Value | ||
408 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
409 | */ | ||
410 | /* SQ */ | ||
411 | { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00030001 }, | ||
412 | { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x000F0007 }, | ||
413 | { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x003F001F }, | ||
414 | { ixDIDT_SQ_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x0000007F }, | ||
415 | /* TD */ | ||
416 | { ixDIDT_TD_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000000 }, | ||
417 | { ixDIDT_TD_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 }, | ||
418 | { ixDIDT_TD_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 }, | ||
419 | { ixDIDT_TD_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 }, | ||
420 | /* TCP */ | ||
421 | { ixDIDT_TCP_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000000 }, | ||
422 | { ixDIDT_TCP_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 }, | ||
423 | { ixDIDT_TCP_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 }, | ||
424 | { ixDIDT_TCP_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 }, | ||
425 | /* DB */ | ||
426 | { ixDIDT_DB_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000000 }, | ||
427 | { ixDIDT_DB_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 }, | ||
428 | { ixDIDT_DB_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 }, | ||
429 | { ixDIDT_DB_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 }, | ||
430 | |||
431 | { 0xFFFFFFFF } /* End of list */ | ||
432 | }; | ||
433 | |||
434 | static const struct vega12_didt_config_reg SEEDCForceStallPatternConfig_Vega12[] = | ||
435 | { | ||
436 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
437 | * Offset Mask Shift Value | ||
438 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
439 | */ | ||
440 | /* SQ */ | ||
441 | { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000015 }, | ||
442 | { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 }, | ||
443 | { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 }, | ||
444 | { ixDIDT_SQ_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 }, | ||
445 | /* TD */ | ||
446 | { ixDIDT_TD_EDC_STALL_PATTERN_1_2, 0xFFFFFFFF, 0, 0x00000015 }, | ||
447 | { ixDIDT_TD_EDC_STALL_PATTERN_3_4, 0xFFFFFFFF, 0, 0x00000000 }, | ||
448 | { ixDIDT_TD_EDC_STALL_PATTERN_5_6, 0xFFFFFFFF, 0, 0x00000000 }, | ||
449 | { ixDIDT_TD_EDC_STALL_PATTERN_7, 0xFFFFFFFF, 0, 0x00000000 }, | ||
450 | |||
451 | { 0xFFFFFFFF } /* End of list */ | ||
452 | }; | ||
453 | |||
454 | static const struct vega12_didt_config_reg SEEDCStallDelayConfig_Vega12[] = | ||
455 | { | ||
456 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
457 | * Offset Mask Shift Value | ||
458 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
459 | */ | ||
460 | /* SQ */ | ||
461 | { ixDIDT_SQ_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 }, | ||
462 | { ixDIDT_SQ_EDC_STALL_DELAY_2, 0xFFFFFFFF, 0, 0x00000000 }, | ||
463 | /* TD */ | ||
464 | { ixDIDT_TD_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 }, | ||
465 | { ixDIDT_TD_EDC_STALL_DELAY_2, 0xFFFFFFFF, 0, 0x00000000 }, | ||
466 | /* TCP */ | ||
467 | { ixDIDT_TCP_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 }, | ||
468 | { ixDIDT_TCP_EDC_STALL_DELAY_2, 0xFFFFFFFF, 0, 0x00000000 }, | ||
469 | /* DB */ | ||
470 | { ixDIDT_DB_EDC_STALL_DELAY_1, 0xFFFFFFFF, 0, 0x00000000 }, | ||
471 | |||
472 | { 0xFFFFFFFF } /* End of list */ | ||
473 | }; | ||
474 | |||
475 | static const struct vega12_didt_config_reg SEEDCThresholdConfig_Vega12[] = | ||
476 | { | ||
477 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
478 | * Offset Mask Shift Value | ||
479 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
480 | */ | ||
481 | { ixDIDT_SQ_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0x0000010E }, | ||
482 | { ixDIDT_TD_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0xFFFFFFFF }, | ||
483 | { ixDIDT_TCP_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0xFFFFFFFF }, | ||
484 | { ixDIDT_DB_EDC_THRESHOLD, 0xFFFFFFFF, 0, 0xFFFFFFFF }, | ||
485 | |||
486 | { 0xFFFFFFFF } /* End of list */ | ||
487 | }; | ||
488 | |||
489 | static const struct vega12_didt_config_reg SEEDCCtrlResetConfig_Vega12[] = | ||
490 | { | ||
491 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
492 | * Offset Mask Shift Value | ||
493 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
494 | */ | ||
495 | /* SQ */ | ||
496 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0000 }, | ||
497 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 }, | ||
498 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
499 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 }, | ||
500 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
501 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0000 }, | ||
502 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
503 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 }, | ||
504 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 }, | ||
505 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
506 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
507 | |||
508 | { 0xFFFFFFFF } /* End of list */ | ||
509 | }; | ||
510 | |||
511 | static const struct vega12_didt_config_reg SEEDCCtrlConfig_Vega12[] = | ||
512 | { | ||
513 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
514 | * Offset Mask Shift Value | ||
515 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
516 | */ | ||
517 | /* SQ */ | ||
518 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 }, | ||
519 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 }, | ||
520 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
521 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 }, | ||
522 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0004 }, | ||
523 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0006 }, | ||
524 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
525 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 }, | ||
526 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 }, | ||
527 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 }, | ||
528 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
529 | |||
530 | { 0xFFFFFFFF } /* End of list */ | ||
531 | }; | ||
532 | |||
533 | static const struct vega12_didt_config_reg SEEDCCtrlForceStallConfig_Vega12[] = | ||
534 | { | ||
535 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
536 | * Offset Mask Shift Value | ||
537 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
538 | */ | ||
539 | /* SQ */ | ||
540 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0000 }, | ||
541 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 }, | ||
542 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
543 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0001 }, | ||
544 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0001 }, | ||
545 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000C }, | ||
546 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
547 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 }, | ||
548 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 }, | ||
549 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
550 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 }, | ||
551 | |||
552 | /* TD */ | ||
553 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_EN_MASK, DIDT_TD_EDC_CTRL__EDC_EN__SHIFT, 0x0000 }, | ||
554 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK, DIDT_TD_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 }, | ||
555 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
556 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_TD_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0001 }, | ||
557 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0001 }, | ||
558 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_TD_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000E }, | ||
559 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
560 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__GC_EDC_EN_MASK, DIDT_TD_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 }, | ||
561 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 }, | ||
562 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_TD_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
563 | { ixDIDT_TD_EDC_CTRL, DIDT_TD_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_TD_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 }, | ||
564 | |||
565 | { 0xFFFFFFFF } /* End of list */ | ||
566 | }; | ||
567 | |||
568 | static const struct vega12_didt_config_reg GCDiDtDroopCtrlConfig_vega12[] = | ||
569 | { | ||
570 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
571 | * Offset Mask Shift Value | ||
572 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
573 | */ | ||
574 | { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN__SHIFT, 0x0000 }, | ||
575 | { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD__SHIFT, 0x0000 }, | ||
576 | { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX__SHIFT, 0x0000 }, | ||
577 | { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL_MASK, GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL__SHIFT, 0x0000 }, | ||
578 | { mmGC_DIDT_DROOP_CTRL, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW_MASK, GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW__SHIFT, 0x0000 }, | ||
579 | |||
580 | { 0xFFFFFFFF } /* End of list */ | ||
581 | }; | ||
582 | |||
583 | static const struct vega12_didt_config_reg GCDiDtCtrl0Config_vega12[] = | ||
584 | { | ||
585 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
586 | * Offset Mask Shift Value | ||
587 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
588 | */ | ||
589 | { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_CTRL_EN_MASK, GC_DIDT_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 }, | ||
590 | { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__PHASE_OFFSET_MASK, GC_DIDT_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 }, | ||
591 | { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_SW_RST_MASK, GC_DIDT_CTRL0__DIDT_SW_RST__SHIFT, 0x0000 }, | ||
592 | { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK, GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
593 | { mmGC_DIDT_CTRL0, GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK, GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
594 | { 0xFFFFFFFF } /* End of list */ | ||
595 | }; | ||
596 | |||
597 | |||
598 | static const struct vega12_didt_config_reg PSMSEEDCStallPatternConfig_Vega12[] = | ||
599 | { | ||
600 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
601 | * Offset Mask Shift Value | ||
602 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
603 | */ | ||
604 | /* SQ EDC STALL PATTERNs */ | ||
605 | { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_1_MASK, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_1__SHIFT, 0x0101 }, | ||
606 | { ixDIDT_SQ_EDC_STALL_PATTERN_1_2, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_2_MASK, DIDT_SQ_EDC_STALL_PATTERN_1_2__EDC_STALL_PATTERN_2__SHIFT, 0x0101 }, | ||
607 | { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_3_MASK, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_3__SHIFT, 0x1111 }, | ||
608 | { ixDIDT_SQ_EDC_STALL_PATTERN_3_4, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_4_MASK, DIDT_SQ_EDC_STALL_PATTERN_3_4__EDC_STALL_PATTERN_4__SHIFT, 0x1111 }, | ||
609 | |||
610 | { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_5_MASK, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_5__SHIFT, 0x1515 }, | ||
611 | { ixDIDT_SQ_EDC_STALL_PATTERN_5_6, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_6_MASK, DIDT_SQ_EDC_STALL_PATTERN_5_6__EDC_STALL_PATTERN_6__SHIFT, 0x1515 }, | ||
612 | |||
613 | { ixDIDT_SQ_EDC_STALL_PATTERN_7, DIDT_SQ_EDC_STALL_PATTERN_7__EDC_STALL_PATTERN_7_MASK, DIDT_SQ_EDC_STALL_PATTERN_7__EDC_STALL_PATTERN_7__SHIFT, 0x5555 }, | ||
614 | |||
615 | { 0xFFFFFFFF } /* End of list */ | ||
616 | }; | ||
617 | |||
618 | static const struct vega12_didt_config_reg PSMSEEDCStallDelayConfig_Vega12[] = | ||
619 | { | ||
620 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
621 | * Offset Mask Shift Value | ||
622 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
623 | */ | ||
624 | /* SQ EDC STALL DELAYs */ | ||
625 | { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ0_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ0__SHIFT, 0x0000 }, | ||
626 | { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ1_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ1__SHIFT, 0x0000 }, | ||
627 | { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ2_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ2__SHIFT, 0x0000 }, | ||
628 | { ixDIDT_SQ_EDC_STALL_DELAY_1, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ3_MASK, DIDT_SQ_EDC_STALL_DELAY_1__EDC_STALL_DELAY_SQ3__SHIFT, 0x0000 }, | ||
629 | |||
630 | { ixDIDT_SQ_EDC_STALL_DELAY_2, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ4_MASK, DIDT_SQ_EDC_STALL_DELAY_2__EDC_STALL_DELAY_SQ4__SHIFT, 0x0000 }, | ||
631 | |||
632 | { 0xFFFFFFFF } /* End of list */ | ||
633 | }; | ||
634 | |||
635 | static const struct vega12_didt_config_reg PSMSEEDCThresholdConfig_Vega12[] = | ||
636 | { | ||
637 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
638 | * Offset Mask Shift Value | ||
639 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
640 | */ | ||
641 | /* SQ EDC THRESHOLD */ | ||
642 | { ixDIDT_SQ_EDC_THRESHOLD, DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD_MASK, DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT, 0x0000 }, | ||
643 | |||
644 | { 0xFFFFFFFF } /* End of list */ | ||
645 | }; | ||
646 | |||
647 | static const struct vega12_didt_config_reg PSMSEEDCCtrlResetConfig_Vega12[] = | ||
648 | { | ||
649 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
650 | * Offset Mask Shift Value | ||
651 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
652 | */ | ||
653 | /* SQ EDC CTRL */ | ||
654 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0000 }, | ||
655 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 }, | ||
656 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
657 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 }, | ||
658 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
659 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x0000 }, | ||
660 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
661 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0000 }, | ||
662 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0000 }, | ||
663 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
664 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
665 | |||
666 | { 0xFFFFFFFF } /* End of list */ | ||
667 | }; | ||
668 | |||
669 | static const struct vega12_didt_config_reg PSMSEEDCCtrlConfig_Vega12[] = | ||
670 | { | ||
671 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
672 | * Offset Mask Shift Value | ||
673 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
674 | */ | ||
675 | /* SQ EDC CTRL */ | ||
676 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_EN_MASK, DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT, 0x0001 }, | ||
677 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK, DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 }, | ||
678 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
679 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK, DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 }, | ||
680 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
681 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS_MASK, DIDT_SQ_EDC_CTRL__EDC_STALL_PATTERN_BIT_NUMS__SHIFT, 0x000E }, | ||
682 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
683 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT, 0x0001 }, | ||
684 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT, 0x0003 }, | ||
685 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__GC_EDC_LEVEL_COMB_EN__SHIFT, 0x0001 }, | ||
686 | { ixDIDT_SQ_EDC_CTRL, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN_MASK, DIDT_SQ_EDC_CTRL__SE_EDC_LEVEL_COMB_EN__SHIFT, 0x0000 }, | ||
687 | |||
688 | { 0xFFFFFFFF } /* End of list */ | ||
689 | }; | ||
690 | |||
691 | static const struct vega12_didt_config_reg PSMGCEDCThresholdConfig_vega12[] = | ||
692 | { | ||
693 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
694 | * Offset Mask Shift Value | ||
695 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
696 | */ | ||
697 | { mmGC_EDC_THRESHOLD, GC_EDC_THRESHOLD__EDC_THRESHOLD_MASK, GC_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT, 0x0000000 }, | ||
698 | |||
699 | { 0xFFFFFFFF } /* End of list */ | ||
700 | }; | ||
701 | |||
702 | static const struct vega12_didt_config_reg PSMGCEDCDroopCtrlConfig_vega12[] = | ||
703 | { | ||
704 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
705 | * Offset Mask Shift Value | ||
706 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
707 | */ | ||
708 | { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN_MASK, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN__SHIFT, 0x0001 }, | ||
709 | { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD_MASK, GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD__SHIFT, 0x0384 }, | ||
710 | { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX_MASK, GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX__SHIFT, 0x0001 }, | ||
711 | { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__AVG_PSM_SEL_MASK, GC_EDC_DROOP_CTRL__AVG_PSM_SEL__SHIFT, 0x0001 }, | ||
712 | { mmGC_EDC_DROOP_CTRL, GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL_MASK, GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL__SHIFT, 0x0001 }, | ||
713 | |||
714 | { 0xFFFFFFFF } /* End of list */ | ||
715 | }; | ||
716 | |||
717 | static const struct vega12_didt_config_reg PSMGCEDCCtrlResetConfig_vega12[] = | ||
718 | { | ||
719 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
720 | * Offset Mask Shift Value | ||
721 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
722 | */ | ||
723 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_EN_MASK, GC_EDC_CTRL__EDC_EN__SHIFT, 0x0000 }, | ||
724 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_SW_RST_MASK, GC_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0001 }, | ||
725 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
726 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_FORCE_STALL_MASK, GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 }, | ||
727 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
728 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
729 | |||
730 | { 0xFFFFFFFF } /* End of list */ | ||
731 | }; | ||
732 | |||
733 | static const struct vega12_didt_config_reg PSMGCEDCCtrlConfig_vega12[] = | ||
734 | { | ||
735 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
736 | * Offset Mask Shift Value | ||
737 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
738 | */ | ||
739 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_EN_MASK, GC_EDC_CTRL__EDC_EN__SHIFT, 0x0001 }, | ||
740 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_SW_RST_MASK, GC_EDC_CTRL__EDC_SW_RST__SHIFT, 0x0000 }, | ||
741 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK, GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, | ||
742 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_FORCE_STALL_MASK, GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT, 0x0000 }, | ||
743 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK, GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT, 0x0000 }, | ||
744 | { mmGC_EDC_CTRL, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK, GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT, 0x0000 }, | ||
745 | |||
746 | { 0xFFFFFFFF } /* End of list */ | ||
747 | }; | ||
748 | |||
749 | static const struct vega12_didt_config_reg AvfsPSMResetConfig_vega12[]= | ||
750 | { | ||
751 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
752 | * Offset Mask Shift Value | ||
753 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
754 | */ | ||
755 | { 0x16A02, 0xFFFFFFFF, 0x0, 0x0000005F }, | ||
756 | { 0x16A05, 0xFFFFFFFF, 0x0, 0x00000001 }, | ||
757 | { 0x16A06, 0x00000001, 0x0, 0x02000000 }, | ||
758 | { 0x16A01, 0xFFFFFFFF, 0x0, 0x00003027 }, | ||
759 | |||
760 | { 0xFFFFFFFF } /* End of list */ | ||
761 | }; | ||
762 | |||
763 | static const struct vega12_didt_config_reg AvfsPSMInitConfig_vega12[] = | ||
764 | { | ||
765 | /* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
766 | * Offset Mask Shift Value | ||
767 | * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
768 | */ | ||
769 | { 0x16A05, 0xFFFFFFFF, 0x18, 0x00000001 }, | ||
770 | { 0x16A05, 0xFFFFFFFF, 0x8, 0x00000003 }, | ||
771 | { 0x16A05, 0xFFFFFFFF, 0xa, 0x00000006 }, | ||
772 | { 0x16A05, 0xFFFFFFFF, 0x7, 0x00000000 }, | ||
773 | { 0x16A06, 0xFFFFFFFF, 0x18, 0x00000001 }, | ||
774 | { 0x16A06, 0xFFFFFFFF, 0x19, 0x00000001 }, | ||
775 | { 0x16A01, 0xFFFFFFFF, 0x0, 0x00003027 }, | ||
776 | |||
777 | { 0xFFFFFFFF } /* End of list */ | ||
778 | }; | ||
779 | |||
780 | static int vega12_program_didt_config_registers(struct pp_hwmgr *hwmgr, const struct vega12_didt_config_reg *config_regs, enum vega12_didt_config_reg_type reg_type) | ||
781 | { | ||
782 | uint32_t data; | ||
783 | |||
784 | PP_ASSERT_WITH_CODE((config_regs != NULL), "[vega12_program_didt_config_registers] Invalid config register table!", return -EINVAL); | ||
785 | |||
786 | while (config_regs->offset != 0xFFFFFFFF) { | ||
787 | switch (reg_type) { | ||
788 | case VEGA12_CONFIGREG_DIDT: | ||
789 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, config_regs->offset); | ||
790 | data &= ~config_regs->mask; | ||
791 | data |= ((config_regs->value << config_regs->shift) & config_regs->mask); | ||
792 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, config_regs->offset, data); | ||
793 | break; | ||
794 | case VEGA12_CONFIGREG_GCCAC: | ||
795 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG_GC_CAC, config_regs->offset); | ||
796 | data &= ~config_regs->mask; | ||
797 | data |= ((config_regs->value << config_regs->shift) & config_regs->mask); | ||
798 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG_GC_CAC, config_regs->offset, data); | ||
799 | break; | ||
800 | case VEGA12_CONFIGREG_SECAC: | ||
801 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG_SE_CAC, config_regs->offset); | ||
802 | data &= ~config_regs->mask; | ||
803 | data |= ((config_regs->value << config_regs->shift) & config_regs->mask); | ||
804 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG_SE_CAC, config_regs->offset, data); | ||
805 | break; | ||
806 | default: | ||
807 | return -EINVAL; | ||
808 | } | ||
809 | |||
810 | config_regs++; | ||
811 | } | ||
812 | |||
813 | return 0; | ||
814 | } | ||
815 | |||
816 | static int vega12_program_gc_didt_config_registers(struct pp_hwmgr *hwmgr, const struct vega12_didt_config_reg *config_regs) | ||
817 | { | ||
818 | uint32_t data; | ||
819 | |||
820 | while (config_regs->offset != 0xFFFFFFFF) { | ||
821 | data = cgs_read_register(hwmgr->device, config_regs->offset); | ||
822 | data &= ~config_regs->mask; | ||
823 | data |= ((config_regs->value << config_regs->shift) & config_regs->mask); | ||
824 | cgs_write_register(hwmgr->device, config_regs->offset, data); | ||
825 | config_regs++; | ||
826 | } | ||
827 | |||
828 | return 0; | ||
829 | } | ||
830 | |||
831 | static void vega12_didt_set_mask(struct pp_hwmgr *hwmgr, const bool enable) | ||
832 | { | ||
833 | uint32_t data; | ||
834 | int result; | ||
835 | uint32_t en = (enable ? 1 : 0); | ||
836 | uint32_t didt_block_info = SQ_IR_MASK | TCP_IR_MASK | TD_PCC_MASK; | ||
837 | |||
838 | if (PP_CAP(PHM_PlatformCaps_SQRamping)) { | ||
839 | CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, | ||
840 | DIDT_SQ_CTRL0, DIDT_CTRL_EN, en); | ||
841 | didt_block_info &= ~SQ_Enable_MASK; | ||
842 | didt_block_info |= en << SQ_Enable_SHIFT; | ||
843 | } | ||
844 | |||
845 | if (PP_CAP(PHM_PlatformCaps_DBRamping)) { | ||
846 | CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, | ||
847 | DIDT_DB_CTRL0, DIDT_CTRL_EN, en); | ||
848 | didt_block_info &= ~DB_Enable_MASK; | ||
849 | didt_block_info |= en << DB_Enable_SHIFT; | ||
850 | } | ||
851 | |||
852 | if (PP_CAP(PHM_PlatformCaps_TDRamping)) { | ||
853 | CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, | ||
854 | DIDT_TD_CTRL0, DIDT_CTRL_EN, en); | ||
855 | didt_block_info &= ~TD_Enable_MASK; | ||
856 | didt_block_info |= en << TD_Enable_SHIFT; | ||
857 | } | ||
858 | |||
859 | if (PP_CAP(PHM_PlatformCaps_TCPRamping)) { | ||
860 | CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, | ||
861 | DIDT_TCP_CTRL0, DIDT_CTRL_EN, en); | ||
862 | didt_block_info &= ~TCP_Enable_MASK; | ||
863 | didt_block_info |= en << TCP_Enable_SHIFT; | ||
864 | } | ||
865 | |||
866 | #if 0 | ||
867 | if (PP_CAP(PHM_PlatformCaps_DBRRamping)) { | ||
868 | CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, | ||
869 | DIDT_DBR_CTRL0, DIDT_CTRL_EN, en); | ||
870 | } | ||
871 | #endif | ||
872 | |||
873 | if (PP_CAP(PHM_PlatformCaps_DiDtEDCEnable)) { | ||
874 | if (PP_CAP(PHM_PlatformCaps_SQRamping)) { | ||
875 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL); | ||
876 | data = CGS_REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_EN, en); | ||
877 | data = CGS_REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_SW_RST, ~en); | ||
878 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL, data); | ||
879 | } | ||
880 | |||
881 | if (PP_CAP(PHM_PlatformCaps_DBRamping)) { | ||
882 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL); | ||
883 | data = CGS_REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_EN, en); | ||
884 | data = CGS_REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_SW_RST, ~en); | ||
885 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL, data); | ||
886 | } | ||
887 | |||
888 | if (PP_CAP(PHM_PlatformCaps_TDRamping)) { | ||
889 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL); | ||
890 | data = CGS_REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_EN, en); | ||
891 | data = CGS_REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_SW_RST, ~en); | ||
892 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL, data); | ||
893 | } | ||
894 | |||
895 | if (PP_CAP(PHM_PlatformCaps_TCPRamping)) { | ||
896 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL); | ||
897 | data = CGS_REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_EN, en); | ||
898 | data = CGS_REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_SW_RST, ~en); | ||
899 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL, data); | ||
900 | } | ||
901 | |||
902 | #if 0 | ||
903 | if (PP_CAP(PHM_PlatformCaps_DBRRamping)) { | ||
904 | data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL); | ||
905 | data = CGS_REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_EN, en); | ||
906 | data = CGS_REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_SW_RST, ~en); | ||
907 | cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL, data); | ||
908 | } | ||
909 | #endif | ||
910 | } | ||
911 | |||
912 | if (enable) { | ||
913 | /* For Vega12, SMC does not support any mask yet. */ | ||
914 | result = smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_ConfigureGfxDidt, didt_block_info); | ||
915 | PP_ASSERT((0 == result), "[EnableDiDtConfig] SMC Configure Gfx Didt Failed!"); | ||
916 | } | ||
917 | } | ||
918 | |||
919 | static int vega12_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr) | ||
920 | { | ||
921 | int result; | ||
922 | uint32_t num_se = 0, count, data; | ||
923 | struct amdgpu_device *adev = hwmgr->adev; | ||
924 | uint32_t reg; | ||
925 | |||
926 | num_se = adev->gfx.config.max_shader_engines; | ||
927 | |||
928 | cgs_enter_safe_mode(hwmgr->device, true); | ||
929 | |||
930 | cgs_lock_grbm_idx(hwmgr->device, true); | ||
931 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
932 | for (count = 0; count < num_se; count++) { | ||
933 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | ||
934 | cgs_write_register(hwmgr->device, reg, data); | ||
935 | |||
936 | result = vega12_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega12, VEGA12_CONFIGREG_DIDT); | ||
937 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega12, VEGA12_CONFIGREG_DIDT); | ||
938 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
939 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl1Config_Vega12, VEGA12_CONFIGREG_DIDT); | ||
940 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl2Config_Vega12, VEGA12_CONFIGREG_DIDT); | ||
941 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl3Config_vega12, VEGA12_CONFIGREG_DIDT); | ||
942 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtTuningCtrlConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
943 | result |= vega12_program_didt_config_registers(hwmgr, SELCacConfig_Vega12, VEGA12_CONFIGREG_SECAC); | ||
944 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl0Config_Vega12, VEGA12_CONFIGREG_DIDT); | ||
945 | |||
946 | if (0 != result) | ||
947 | break; | ||
948 | } | ||
949 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | ||
950 | cgs_lock_grbm_idx(hwmgr->device, false); | ||
951 | |||
952 | vega12_didt_set_mask(hwmgr, true); | ||
953 | |||
954 | cgs_enter_safe_mode(hwmgr->device, false); | ||
955 | |||
956 | return 0; | ||
957 | } | ||
958 | |||
959 | static int vega12_disable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr) | ||
960 | { | ||
961 | cgs_enter_safe_mode(hwmgr->device, true); | ||
962 | |||
963 | vega12_didt_set_mask(hwmgr, false); | ||
964 | |||
965 | cgs_enter_safe_mode(hwmgr->device, false); | ||
966 | |||
967 | return 0; | ||
968 | } | ||
969 | |||
970 | static int vega12_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr) | ||
971 | { | ||
972 | int result; | ||
973 | uint32_t num_se = 0, count, data; | ||
974 | struct amdgpu_device *adev = hwmgr->adev; | ||
975 | uint32_t reg; | ||
976 | |||
977 | num_se = adev->gfx.config.max_shader_engines; | ||
978 | |||
979 | cgs_enter_safe_mode(hwmgr->device, true); | ||
980 | |||
981 | cgs_lock_grbm_idx(hwmgr->device, true); | ||
982 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
983 | for (count = 0; count < num_se; count++) { | ||
984 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | ||
985 | cgs_write_register(hwmgr->device, reg, data); | ||
986 | |||
987 | result = vega12_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega12, VEGA12_CONFIGREG_DIDT); | ||
988 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega12, VEGA12_CONFIGREG_DIDT); | ||
989 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl3Config_vega12, VEGA12_CONFIGREG_DIDT); | ||
990 | result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl0Config_Vega12, VEGA12_CONFIGREG_DIDT); | ||
991 | if (0 != result) | ||
992 | break; | ||
993 | } | ||
994 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | ||
995 | cgs_lock_grbm_idx(hwmgr->device, false); | ||
996 | |||
997 | vega12_didt_set_mask(hwmgr, true); | ||
998 | |||
999 | cgs_enter_safe_mode(hwmgr->device, false); | ||
1000 | |||
1001 | vega12_program_gc_didt_config_registers(hwmgr, GCDiDtDroopCtrlConfig_vega12); | ||
1002 | if (PP_CAP(PHM_PlatformCaps_GCEDC)) | ||
1003 | vega12_program_gc_didt_config_registers(hwmgr, GCDiDtCtrl0Config_vega12); | ||
1004 | |||
1005 | if (PP_CAP(PHM_PlatformCaps_PSM)) | ||
1006 | vega12_program_gc_didt_config_registers(hwmgr, AvfsPSMInitConfig_vega12); | ||
1007 | |||
1008 | return 0; | ||
1009 | } | ||
1010 | |||
1011 | static int vega12_disable_psm_gc_didt_config(struct pp_hwmgr *hwmgr) | ||
1012 | { | ||
1013 | uint32_t data; | ||
1014 | |||
1015 | cgs_enter_safe_mode(hwmgr->device, true); | ||
1016 | |||
1017 | vega12_didt_set_mask(hwmgr, false); | ||
1018 | |||
1019 | cgs_enter_safe_mode(hwmgr->device, false); | ||
1020 | |||
1021 | if (PP_CAP(PHM_PlatformCaps_GCEDC)) { | ||
1022 | data = 0x00000000; | ||
1023 | cgs_write_register(hwmgr->device, mmGC_DIDT_CTRL0, data); | ||
1024 | } | ||
1025 | |||
1026 | if (PP_CAP(PHM_PlatformCaps_PSM)) | ||
1027 | vega12_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega12); | ||
1028 | |||
1029 | return 0; | ||
1030 | } | ||
1031 | |||
1032 | static int vega12_enable_se_edc_config(struct pp_hwmgr *hwmgr) | ||
1033 | { | ||
1034 | int result; | ||
1035 | uint32_t num_se = 0, count, data; | ||
1036 | struct amdgpu_device *adev = hwmgr->adev; | ||
1037 | uint32_t reg; | ||
1038 | |||
1039 | num_se = adev->gfx.config.max_shader_engines; | ||
1040 | |||
1041 | cgs_enter_safe_mode(hwmgr->device, true); | ||
1042 | |||
1043 | cgs_lock_grbm_idx(hwmgr->device, true); | ||
1044 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
1045 | for (count = 0; count < num_se; count++) { | ||
1046 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | ||
1047 | cgs_write_register(hwmgr->device, reg, data); | ||
1048 | result = vega12_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1049 | result |= vega12_program_didt_config_registers(hwmgr, SEEDCStallPatternConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1050 | result |= vega12_program_didt_config_registers(hwmgr, SEEDCStallDelayConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1051 | result |= vega12_program_didt_config_registers(hwmgr, SEEDCThresholdConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1052 | result |= vega12_program_didt_config_registers(hwmgr, SEEDCCtrlResetConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1053 | result |= vega12_program_didt_config_registers(hwmgr, SEEDCCtrlConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1054 | |||
1055 | if (0 != result) | ||
1056 | break; | ||
1057 | } | ||
1058 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | ||
1059 | cgs_lock_grbm_idx(hwmgr->device, false); | ||
1060 | |||
1061 | vega12_didt_set_mask(hwmgr, true); | ||
1062 | |||
1063 | cgs_enter_safe_mode(hwmgr->device, false); | ||
1064 | |||
1065 | return 0; | ||
1066 | } | ||
1067 | |||
1068 | static int vega12_disable_se_edc_config(struct pp_hwmgr *hwmgr) | ||
1069 | { | ||
1070 | cgs_enter_safe_mode(hwmgr->device, true); | ||
1071 | |||
1072 | vega12_didt_set_mask(hwmgr, false); | ||
1073 | |||
1074 | cgs_enter_safe_mode(hwmgr->device, false); | ||
1075 | |||
1076 | return 0; | ||
1077 | } | ||
1078 | |||
1079 | static int vega12_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) | ||
1080 | { | ||
1081 | int result; | ||
1082 | uint32_t num_se = 0; | ||
1083 | uint32_t count, data; | ||
1084 | struct amdgpu_device *adev = hwmgr->adev; | ||
1085 | uint32_t reg; | ||
1086 | |||
1087 | num_se = adev->gfx.config.max_shader_engines; | ||
1088 | |||
1089 | cgs_enter_safe_mode(hwmgr->device, true); | ||
1090 | |||
1091 | vega12_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega12); | ||
1092 | |||
1093 | cgs_lock_grbm_idx(hwmgr->device, true); | ||
1094 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
1095 | for (count = 0; count < num_se; count++) { | ||
1096 | data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); | ||
1097 | cgs_write_register(hwmgr->device, reg, data); | ||
1098 | result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCStallPatternConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1099 | result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCStallDelayConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1100 | result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCCtrlResetConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1101 | result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCCtrlConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1102 | |||
1103 | if (0 != result) | ||
1104 | break; | ||
1105 | } | ||
1106 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | ||
1107 | cgs_lock_grbm_idx(hwmgr->device, false); | ||
1108 | |||
1109 | vega12_didt_set_mask(hwmgr, true); | ||
1110 | |||
1111 | cgs_enter_safe_mode(hwmgr->device, false); | ||
1112 | |||
1113 | vega12_program_gc_didt_config_registers(hwmgr, PSMGCEDCDroopCtrlConfig_vega12); | ||
1114 | |||
1115 | if (PP_CAP(PHM_PlatformCaps_GCEDC)) { | ||
1116 | vega12_program_gc_didt_config_registers(hwmgr, PSMGCEDCCtrlResetConfig_vega12); | ||
1117 | vega12_program_gc_didt_config_registers(hwmgr, PSMGCEDCCtrlConfig_vega12); | ||
1118 | } | ||
1119 | |||
1120 | if (PP_CAP(PHM_PlatformCaps_PSM)) | ||
1121 | vega12_program_gc_didt_config_registers(hwmgr, AvfsPSMInitConfig_vega12); | ||
1122 | |||
1123 | return 0; | ||
1124 | } | ||
1125 | |||
1126 | static int vega12_disable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) | ||
1127 | { | ||
1128 | uint32_t data; | ||
1129 | |||
1130 | cgs_enter_safe_mode(hwmgr->device, true); | ||
1131 | |||
1132 | vega12_didt_set_mask(hwmgr, false); | ||
1133 | |||
1134 | cgs_enter_safe_mode(hwmgr->device, false); | ||
1135 | |||
1136 | if (PP_CAP(PHM_PlatformCaps_GCEDC)) { | ||
1137 | data = 0x00000000; | ||
1138 | cgs_write_register(hwmgr->device, mmGC_EDC_CTRL, data); | ||
1139 | } | ||
1140 | |||
1141 | if (PP_CAP(PHM_PlatformCaps_PSM)) | ||
1142 | vega12_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega12); | ||
1143 | |||
1144 | return 0; | ||
1145 | } | ||
1146 | |||
1147 | static int vega12_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr) | ||
1148 | { | ||
1149 | uint32_t reg; | ||
1150 | int result; | ||
1151 | |||
1152 | cgs_enter_safe_mode(hwmgr->device, true); | ||
1153 | |||
1154 | cgs_lock_grbm_idx(hwmgr->device, true); | ||
1155 | reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); | ||
1156 | cgs_write_register(hwmgr->device, reg, 0xE0000000); | ||
1157 | cgs_lock_grbm_idx(hwmgr->device, false); | ||
1158 | |||
1159 | result = vega12_program_didt_config_registers(hwmgr, SEEDCForceStallPatternConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1160 | result |= vega12_program_didt_config_registers(hwmgr, SEEDCCtrlForceStallConfig_Vega12, VEGA12_CONFIGREG_DIDT); | ||
1161 | if (0 != result) | ||
1162 | return result; | ||
1163 | |||
1164 | vega12_didt_set_mask(hwmgr, false); | ||
1165 | |||
1166 | cgs_enter_safe_mode(hwmgr->device, false); | ||
1167 | |||
1168 | return 0; | ||
1169 | } | ||
1170 | |||
1171 | static int vega12_disable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr) | ||
1172 | { | ||
1173 | int result; | ||
1174 | |||
1175 | result = vega12_disable_se_edc_config(hwmgr); | ||
1176 | PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDtConfig] Pre DIDT disable clock gating failed!", return result); | ||
1177 | |||
1178 | return 0; | ||
1179 | } | ||
1180 | |||
1181 | int vega12_enable_didt_config(struct pp_hwmgr *hwmgr) | ||
1182 | { | ||
1183 | int result = 0; | ||
1184 | struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); | ||
1185 | |||
1186 | if (data->smu_features[GNLD_DIDT].supported) { | ||
1187 | if (data->smu_features[GNLD_DIDT].enabled) | ||
1188 | PP_DBG_LOG("[EnableDiDtConfig] Feature DiDt Already enabled!\n"); | ||
1189 | |||
1190 | switch (data->registry_data.didt_mode) { | ||
1191 | case 0: | ||
1192 | result = vega12_enable_cac_driving_se_didt_config(hwmgr); | ||
1193 | PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 0 Failed!", return result); | ||
1194 | break; | ||
1195 | case 2: | ||
1196 | result = vega12_enable_psm_gc_didt_config(hwmgr); | ||
1197 | PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 2 Failed!", return result); | ||
1198 | break; | ||
1199 | case 3: | ||
1200 | result = vega12_enable_se_edc_config(hwmgr); | ||
1201 | PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 3 Failed!", return result); | ||
1202 | break; | ||
1203 | case 1: | ||
1204 | case 4: | ||
1205 | case 5: | ||
1206 | result = vega12_enable_psm_gc_edc_config(hwmgr); | ||
1207 | PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 5 Failed!", return result); | ||
1208 | break; | ||
1209 | case 6: | ||
1210 | result = vega12_enable_se_edc_force_stall_config(hwmgr); | ||
1211 | PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 6 Failed!", return result); | ||
1212 | break; | ||
1213 | default: | ||
1214 | result = -EINVAL; | ||
1215 | break; | ||
1216 | } | ||
1217 | |||
1218 | #if 0 | ||
1219 | if (0 == result) { | ||
1220 | result = vega12_enable_smc_features(hwmgr, true, data->smu_features[GNLD_DIDT].smu_feature_bitmap); | ||
1221 | PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDtConfig] Attempt to Enable DiDt feature Failed!", return result); | ||
1222 | data->smu_features[GNLD_DIDT].enabled = true; | ||
1223 | } | ||
1224 | #endif | ||
1225 | } | ||
1226 | |||
1227 | return result; | ||
1228 | } | ||
1229 | |||
1230 | int vega12_disable_didt_config(struct pp_hwmgr *hwmgr) | ||
1231 | { | ||
1232 | int result = 0; | ||
1233 | struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); | ||
1234 | |||
1235 | if (data->smu_features[GNLD_DIDT].supported) { | ||
1236 | if (!data->smu_features[GNLD_DIDT].enabled) | ||
1237 | PP_DBG_LOG("[DisableDiDtConfig] Feature DiDt Already Disabled!\n"); | ||
1238 | |||
1239 | switch (data->registry_data.didt_mode) { | ||
1240 | case 0: | ||
1241 | result = vega12_disable_cac_driving_se_didt_config(hwmgr); | ||
1242 | PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 0 Failed!", return result); | ||
1243 | break; | ||
1244 | case 2: | ||
1245 | result = vega12_disable_psm_gc_didt_config(hwmgr); | ||
1246 | PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 2 Failed!", return result); | ||
1247 | break; | ||
1248 | case 3: | ||
1249 | result = vega12_disable_se_edc_config(hwmgr); | ||
1250 | PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 3 Failed!", return result); | ||
1251 | break; | ||
1252 | case 1: | ||
1253 | case 4: | ||
1254 | case 5: | ||
1255 | result = vega12_disable_psm_gc_edc_config(hwmgr); | ||
1256 | PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 5 Failed!", return result); | ||
1257 | break; | ||
1258 | case 6: | ||
1259 | result = vega12_disable_se_edc_force_stall_config(hwmgr); | ||
1260 | PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 6 Failed!", return result); | ||
1261 | break; | ||
1262 | default: | ||
1263 | result = -EINVAL; | ||
1264 | break; | ||
1265 | } | ||
1266 | |||
1267 | if (0 == result) { | ||
1268 | result = vega12_enable_smc_features(hwmgr, false, data->smu_features[GNLD_DIDT].smu_feature_bitmap); | ||
1269 | PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDtConfig] Attempt to Disable DiDt feature Failed!", return result); | ||
1270 | data->smu_features[GNLD_DIDT].enabled = false; | ||
1271 | } | ||
1272 | } | ||
1273 | |||
1274 | return result; | ||
1275 | } | ||
1276 | |||
1277 | int vega12_set_power_limit(struct pp_hwmgr *hwmgr, uint32_t n) | ||
1278 | { | ||
1279 | struct vega12_hwmgr *data = | ||
1280 | (struct vega12_hwmgr *)(hwmgr->backend); | ||
1281 | |||
1282 | if (data->smu_features[GNLD_PPT].enabled) | ||
1283 | return smum_send_msg_to_smc_with_parameter(hwmgr, | ||
1284 | PPSMC_MSG_SetPptLimit, n); | ||
1285 | |||
1286 | return 0; | ||
1287 | } | ||
1288 | |||
1289 | int vega12_enable_power_containment(struct pp_hwmgr *hwmgr) | ||
1290 | { | ||
1291 | struct vega12_hwmgr *data = | ||
1292 | (struct vega12_hwmgr *)(hwmgr->backend); | ||
1293 | struct phm_ppt_v2_information *table_info = | ||
1294 | (struct phm_ppt_v2_information *)(hwmgr->pptable); | ||
1295 | struct phm_tdp_table *tdp_table = table_info->tdp_table; | ||
1296 | uint32_t default_pwr_limit = | ||
1297 | (uint32_t)(tdp_table->usMaximumPowerDeliveryLimit); | ||
1298 | int result = 0; | ||
1299 | |||
1300 | if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { | ||
1301 | if (data->smu_features[GNLD_PPT].supported) | ||
1302 | PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, | ||
1303 | true, data->smu_features[GNLD_PPT].smu_feature_bitmap), | ||
1304 | "Attempt to enable PPT feature Failed!", | ||
1305 | data->smu_features[GNLD_PPT].supported = false); | ||
1306 | |||
1307 | if (data->smu_features[GNLD_TDC].supported) | ||
1308 | PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, | ||
1309 | true, data->smu_features[GNLD_TDC].smu_feature_bitmap), | ||
1310 | "Attempt to enable PPT feature Failed!", | ||
1311 | data->smu_features[GNLD_TDC].supported = false); | ||
1312 | |||
1313 | result = vega12_set_power_limit(hwmgr, default_pwr_limit); | ||
1314 | PP_ASSERT_WITH_CODE(!result, | ||
1315 | "Failed to set Default Power Limit in SMC!", | ||
1316 | return result); | ||
1317 | } | ||
1318 | |||
1319 | return result; | ||
1320 | } | ||
1321 | |||
1322 | int vega12_disable_power_containment(struct pp_hwmgr *hwmgr) | ||
1323 | { | ||
1324 | struct vega12_hwmgr *data = | ||
1325 | (struct vega12_hwmgr *)(hwmgr->backend); | ||
1326 | |||
1327 | if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { | ||
1328 | if (data->smu_features[GNLD_PPT].supported) | ||
1329 | PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, | ||
1330 | false, data->smu_features[GNLD_PPT].smu_feature_bitmap), | ||
1331 | "Attempt to disable PPT feature Failed!", | ||
1332 | data->smu_features[GNLD_PPT].supported = false); | ||
1333 | |||
1334 | if (data->smu_features[GNLD_TDC].supported) | ||
1335 | PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, | ||
1336 | false, data->smu_features[GNLD_TDC].smu_feature_bitmap), | ||
1337 | "Attempt to disable PPT feature Failed!", | ||
1338 | data->smu_features[GNLD_TDC].supported = false); | ||
1339 | } | ||
1340 | |||
1341 | return 0; | ||
1342 | } | ||
1343 | |||
1344 | static int vega12_set_overdrive_target_percentage(struct pp_hwmgr *hwmgr, | ||
1345 | uint32_t adjust_percent) | ||
1346 | { | ||
1347 | return smum_send_msg_to_smc_with_parameter(hwmgr, | ||
1348 | PPSMC_MSG_OverDriveSetPercentage, adjust_percent); | ||
1349 | } | ||
1350 | |||
1351 | int vega12_power_control_set_level(struct pp_hwmgr *hwmgr) | ||
1352 | { | ||
1353 | int adjust_percent, result = 0; | ||
1354 | |||
1355 | if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { | ||
1356 | adjust_percent = | ||
1357 | hwmgr->platform_descriptor.TDPAdjustmentPolarity ? | ||
1358 | hwmgr->platform_descriptor.TDPAdjustment : | ||
1359 | (-1 * hwmgr->platform_descriptor.TDPAdjustment); | ||
1360 | result = vega12_set_overdrive_target_percentage(hwmgr, | ||
1361 | (uint32_t)adjust_percent); | ||
1362 | } | ||
1363 | return result; | ||
1364 | } | ||
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_powertune.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_powertune.h deleted file mode 100644 index 78d31a6747dd..000000000000 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_powertune.h +++ /dev/null | |||
@@ -1,53 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | */ | ||
23 | #ifndef _VEGA12_POWERTUNE_H_ | ||
24 | #define _VEGA12_POWERTUNE_H_ | ||
25 | |||
26 | enum vega12_didt_config_reg_type { | ||
27 | VEGA12_CONFIGREG_DIDT = 0, | ||
28 | VEGA12_CONFIGREG_GCCAC, | ||
29 | VEGA12_CONFIGREG_SECAC | ||
30 | }; | ||
31 | |||
32 | /* PowerContainment Features */ | ||
33 | #define POWERCONTAINMENT_FEATURE_DTE 0x00000001 | ||
34 | #define POWERCONTAINMENT_FEATURE_TDCLimit 0x00000002 | ||
35 | #define POWERCONTAINMENT_FEATURE_PkgPwrLimit 0x00000004 | ||
36 | |||
37 | struct vega12_didt_config_reg { | ||
38 | uint32_t offset; | ||
39 | uint32_t mask; | ||
40 | uint32_t shift; | ||
41 | uint32_t value; | ||
42 | }; | ||
43 | |||
44 | int vega12_enable_power_containment(struct pp_hwmgr *hwmgr); | ||
45 | int vega12_set_power_limit(struct pp_hwmgr *hwmgr, uint32_t n); | ||
46 | int vega12_power_control_set_level(struct pp_hwmgr *hwmgr); | ||
47 | int vega12_disable_power_containment(struct pp_hwmgr *hwmgr); | ||
48 | |||
49 | int vega12_enable_didt_config(struct pp_hwmgr *hwmgr); | ||
50 | int vega12_disable_didt_config(struct pp_hwmgr *hwmgr); | ||
51 | |||
52 | #endif /* _VEGA12_POWERTUNE_H_ */ | ||
53 | |||
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c index e7d794980b84..b34113f45904 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c | |||
@@ -208,9 +208,9 @@ static int append_vbios_pptable(struct pp_hwmgr *hwmgr, PPTable_t *ppsmc_pptable | |||
208 | ppsmc_pptable->LedPin1 = smc_dpm_table.ledpin1; | 208 | ppsmc_pptable->LedPin1 = smc_dpm_table.ledpin1; |
209 | ppsmc_pptable->LedPin2 = smc_dpm_table.ledpin2; | 209 | ppsmc_pptable->LedPin2 = smc_dpm_table.ledpin2; |
210 | 210 | ||
211 | ppsmc_pptable->GfxclkSpreadEnabled = smc_dpm_table.gfxclkspreadenabled; | 211 | ppsmc_pptable->PllGfxclkSpreadEnabled = smc_dpm_table.pllgfxclkspreadenabled; |
212 | ppsmc_pptable->GfxclkSpreadPercent = smc_dpm_table.gfxclkspreadpercent; | 212 | ppsmc_pptable->PllGfxclkSpreadPercent = smc_dpm_table.pllgfxclkspreadpercent; |
213 | ppsmc_pptable->GfxclkSpreadFreq = smc_dpm_table.gfxclkspreadfreq; | 213 | ppsmc_pptable->PllGfxclkSpreadFreq = smc_dpm_table.pllgfxclkspreadfreq; |
214 | 214 | ||
215 | ppsmc_pptable->UclkSpreadEnabled = 0; | 215 | ppsmc_pptable->UclkSpreadEnabled = 0; |
216 | ppsmc_pptable->UclkSpreadPercent = smc_dpm_table.uclkspreadpercent; | 216 | ppsmc_pptable->UclkSpreadPercent = smc_dpm_table.uclkspreadpercent; |
@@ -220,6 +220,11 @@ static int append_vbios_pptable(struct pp_hwmgr *hwmgr, PPTable_t *ppsmc_pptable | |||
220 | ppsmc_pptable->SocclkSpreadPercent = smc_dpm_table.socclkspreadpercent; | 220 | ppsmc_pptable->SocclkSpreadPercent = smc_dpm_table.socclkspreadpercent; |
221 | ppsmc_pptable->SocclkSpreadFreq = smc_dpm_table.socclkspreadfreq; | 221 | ppsmc_pptable->SocclkSpreadFreq = smc_dpm_table.socclkspreadfreq; |
222 | 222 | ||
223 | ppsmc_pptable->AcgGfxclkSpreadEnabled = smc_dpm_table.acggfxclkspreadenabled; | ||
224 | ppsmc_pptable->AcgGfxclkSpreadPercent = smc_dpm_table.acggfxclkspreadpercent; | ||
225 | ppsmc_pptable->AcgGfxclkSpreadFreq = smc_dpm_table.acggfxclkspreadfreq; | ||
226 | |||
227 | |||
223 | return 0; | 228 | return 0; |
224 | } | 229 | } |
225 | 230 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/inc/vega12/smu9_driver_if.h b/drivers/gpu/drm/amd/powerplay/inc/vega12/smu9_driver_if.h index cd2e503a87da..fb696e3d06cf 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/vega12/smu9_driver_if.h +++ b/drivers/gpu/drm/amd/powerplay/inc/vega12/smu9_driver_if.h | |||
@@ -127,7 +127,7 @@ | |||
127 | #define FEATURE_GFX_EDC_MASK (1 << FEATURE_GFX_EDC_BIT ) | 127 | #define FEATURE_GFX_EDC_MASK (1 << FEATURE_GFX_EDC_BIT ) |
128 | #define FEATURE_GFXOFF_MASK (1 << FEATURE_GFXOFF_BIT ) | 128 | #define FEATURE_GFXOFF_MASK (1 << FEATURE_GFXOFF_BIT ) |
129 | #define FEATURE_CG_MASK (1 << FEATURE_CG_BIT ) | 129 | #define FEATURE_CG_MASK (1 << FEATURE_CG_BIT ) |
130 | #define FEATURE_ACG_MASK (1 << FEATURE_ACG_BIT ) | 130 | #define FEATURE_ACG_MASK (1 << FEATURE_ACG_BIT) |
131 | #define FEATURE_SPARE_29_MASK (1 << FEATURE_SPARE_29_BIT ) | 131 | #define FEATURE_SPARE_29_MASK (1 << FEATURE_SPARE_29_BIT ) |
132 | #define FEATURE_SPARE_30_MASK (1 << FEATURE_SPARE_30_BIT ) | 132 | #define FEATURE_SPARE_30_MASK (1 << FEATURE_SPARE_30_BIT ) |
133 | #define FEATURE_SPARE_31_MASK (1 << FEATURE_SPARE_31_BIT ) | 133 | #define FEATURE_SPARE_31_MASK (1 << FEATURE_SPARE_31_BIT ) |
@@ -481,9 +481,9 @@ typedef struct { | |||
481 | uint8_t padding8_4; | 481 | uint8_t padding8_4; |
482 | 482 | ||
483 | 483 | ||
484 | uint8_t GfxclkSpreadEnabled; | 484 | uint8_t PllGfxclkSpreadEnabled; |
485 | uint8_t GfxclkSpreadPercent; | 485 | uint8_t PllGfxclkSpreadPercent; |
486 | uint16_t GfxclkSpreadFreq; | 486 | uint16_t PllGfxclkSpreadFreq; |
487 | 487 | ||
488 | uint8_t UclkSpreadEnabled; | 488 | uint8_t UclkSpreadEnabled; |
489 | uint8_t UclkSpreadPercent; | 489 | uint8_t UclkSpreadPercent; |
@@ -493,7 +493,11 @@ typedef struct { | |||
493 | uint8_t SocclkSpreadPercent; | 493 | uint8_t SocclkSpreadPercent; |
494 | uint16_t SocclkSpreadFreq; | 494 | uint16_t SocclkSpreadFreq; |
495 | 495 | ||
496 | uint32_t BoardReserved[3]; | 496 | uint8_t AcgGfxclkSpreadEnabled; |
497 | uint8_t AcgGfxclkSpreadPercent; | ||
498 | uint16_t AcgGfxclkSpreadFreq; | ||
499 | |||
500 | uint32_t BoardReserved[10]; | ||
497 | 501 | ||
498 | 502 | ||
499 | uint32_t MmHubPadding[7]; | 503 | uint32_t MmHubPadding[7]; |
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c index 55cd204c1789..651a3f28734b 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/vega12_smumgr.c | |||
@@ -30,8 +30,7 @@ | |||
30 | 30 | ||
31 | #include "ppatomctrl.h" | 31 | #include "ppatomctrl.h" |
32 | #include "pp_debug.h" | 32 | #include "pp_debug.h" |
33 | #include "smu_ucode_xfer_vi.h" | 33 | |
34 | #include "smu7_smumgr.h" | ||
35 | 34 | ||
36 | /* MP Apertures */ | 35 | /* MP Apertures */ |
37 | #define MP0_Public 0x03800000 | 36 | #define MP0_Public 0x03800000 |
@@ -392,8 +391,7 @@ static int vega12_smu_init(struct pp_hwmgr *hwmgr) | |||
392 | struct cgs_firmware_info info = {0}; | 391 | struct cgs_firmware_info info = {0}; |
393 | int ret; | 392 | int ret; |
394 | 393 | ||
395 | ret = cgs_get_firmware_info(hwmgr->device, | 394 | ret = cgs_get_firmware_info(hwmgr->device, CGS_UCODE_ID_SMU, |
396 | smu7_convert_fw_type_to_cgs(UCODE_ID_SMU), | ||
397 | &info); | 395 | &info); |
398 | if (ret || !info.kptr) | 396 | if (ret || !info.kptr) |
399 | return -EINVAL; | 397 | return -EINVAL; |
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c index 97a0a639dad9..90d5b41007bf 100644 --- a/drivers/gpu/drm/radeon/si_dpm.c +++ b/drivers/gpu/drm/radeon/si_dpm.c | |||
@@ -5912,9 +5912,9 @@ static void si_set_pcie_lane_width_in_smc(struct radeon_device *rdev, | |||
5912 | { | 5912 | { |
5913 | u32 lane_width; | 5913 | u32 lane_width; |
5914 | u32 new_lane_width = | 5914 | u32 new_lane_width = |
5915 | (radeon_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; | 5915 | ((radeon_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1; |
5916 | u32 current_lane_width = | 5916 | u32 current_lane_width = |
5917 | (radeon_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; | 5917 | ((radeon_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1; |
5918 | 5918 | ||
5919 | if (new_lane_width != current_lane_width) { | 5919 | if (new_lane_width != current_lane_width) { |
5920 | radeon_set_pcie_lanes(rdev, new_lane_width); | 5920 | radeon_set_pcie_lanes(rdev, new_lane_width); |