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); |
