diff options
Diffstat (limited to 'drivers')
42 files changed, 466 insertions, 1644 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index f44a83ab2bf4..c8b605f3dc05 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 {  	void (*read_wave_data)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t *dst, int *no_fields);  	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);  	void (*read_wave_sgprs)(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t start, uint32_t size, uint32_t *dst); +	void (*select_me_pipe_q)(struct amdgpu_device *adev, u32 me, u32 pipe, u32 queue);  };  struct amdgpu_ngg_buf { @@ -1378,6 +1379,7 @@ enum amd_hw_ip_block_type {  	ATHUB_HWIP,  	NBIO_HWIP,  	MP0_HWIP, +	MP1_HWIP,  	UVD_HWIP,  	VCN_HWIP = UVD_HWIP,  	VCE_HWIP, @@ -1387,6 +1389,7 @@ enum amd_hw_ip_block_type {  	SMUIO_HWIP,  	PWR_HWIP,  	NBIF_HWIP, +	THM_HWIP,  	MAX_HWIP  }; @@ -1812,6 +1815,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring)  #define amdgpu_gfx_select_se_sh(adev, se, sh, instance) (adev)->gfx.funcs->select_se_sh((adev), (se), (sh), (instance))  #define amdgpu_gds_switch(adev, r, v, d, w, a) (adev)->gds.funcs->patch_gds_switch((r), (v), (d), (w), (a))  #define amdgpu_psp_check_fw_loading_status(adev, i) (adev)->firmware.funcs->check_fw_loading_status((adev), (i)) +#define amdgpu_gfx_select_me_pipe_q(adev, me, pipe, q) (adev)->gfx.funcs->select_me_pipe_q((adev), (me), (pipe), (q))  /* Common functions */  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,  #if defined(CONFIG_DEBUG_FS) -static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, -					size_t size, loff_t *pos) + +static int  amdgpu_debugfs_process_reg_op(bool read, struct file *f, +		char __user *buf, size_t size, loff_t *pos)  {  	struct amdgpu_device *adev = file_inode(f)->i_private;  	ssize_t result = 0;  	int r; -	bool pm_pg_lock, use_bank; -	unsigned instance_bank, sh_bank, se_bank; +	bool pm_pg_lock, use_bank, use_ring; +	unsigned instance_bank, sh_bank, se_bank, me, pipe, queue; -	if (size & 0x3 || *pos & 0x3) +	pm_pg_lock = use_bank = use_ring = false; +	instance_bank = sh_bank = se_bank = me = pipe = queue = 0; + +	if (size & 0x3 || *pos & 0x3 || +			((*pos & (1ULL << 62)) && (*pos & (1ULL << 61))))  		return -EINVAL;  	/* 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,  		if (instance_bank == 0x3FF)  			instance_bank = 0xFFFFFFFF;  		use_bank = 1; +	} else if (*pos & (1ULL << 61)) { + +		me = (*pos & GENMASK_ULL(33, 24)) >> 24; +		pipe = (*pos & GENMASK_ULL(43, 34)) >> 34; +		queue = (*pos & GENMASK_ULL(53, 44)) >> 44; + +		use_ring = 1;  	} else { -		use_bank = 0; +		use_bank = use_ring = 0;  	}  	*pos &= (1UL << 22) - 1; @@ -104,6 +116,9 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,  		mutex_lock(&adev->grbm_idx_mutex);  		amdgpu_gfx_select_se_sh(adev, se_bank,  					sh_bank, instance_bank); +	} else if (use_ring) { +		mutex_lock(&adev->srbm_mutex); +		amdgpu_gfx_select_me_pipe_q(adev, me, pipe, queue);  	}  	if (pm_pg_lock) @@ -115,8 +130,14 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,  		if (*pos > adev->rmmio_size)  			goto end; -		value = RREG32(*pos >> 2); -		r = put_user(value, (uint32_t *)buf); +		if (read) { +			value = RREG32(*pos >> 2); +			r = put_user(value, (uint32_t *)buf); +		} else { +			r = get_user(value, (uint32_t *)buf); +			if (!r) +				WREG32(*pos >> 2, value); +		}  		if (r) {  			result = r;  			goto end; @@ -132,6 +153,9 @@ end:  	if (use_bank) {  		amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);  		mutex_unlock(&adev->grbm_idx_mutex); +	} else if (use_ring) { +		amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0); +		mutex_unlock(&adev->srbm_mutex);  	}  	if (pm_pg_lock) @@ -140,78 +164,17 @@ end:  	return result;  } + +static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, +					size_t size, loff_t *pos) +{ +	return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos); +} +  static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf,  					 size_t size, loff_t *pos)  { -	struct amdgpu_device *adev = file_inode(f)->i_private; -	ssize_t result = 0; -	int r; -	bool pm_pg_lock, use_bank; -	unsigned instance_bank, sh_bank, se_bank; - -	if (size & 0x3 || *pos & 0x3) -		return -EINVAL; - -	/* are we reading registers for which a PG lock is necessary? */ -	pm_pg_lock = (*pos >> 23) & 1; - -	if (*pos & (1ULL << 62)) { -		se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24; -		sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34; -		instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44; - -		if (se_bank == 0x3FF) -			se_bank = 0xFFFFFFFF; -		if (sh_bank == 0x3FF) -			sh_bank = 0xFFFFFFFF; -		if (instance_bank == 0x3FF) -			instance_bank = 0xFFFFFFFF; -		use_bank = 1; -	} else { -		use_bank = 0; -	} - -	*pos &= (1UL << 22) - 1; - -	if (use_bank) { -		if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) || -		    (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) -			return -EINVAL; -		mutex_lock(&adev->grbm_idx_mutex); -		amdgpu_gfx_select_se_sh(adev, se_bank, -					sh_bank, instance_bank); -	} - -	if (pm_pg_lock) -		mutex_lock(&adev->pm.mutex); - -	while (size) { -		uint32_t value; - -		if (*pos > adev->rmmio_size) -			return result; - -		r = get_user(value, (uint32_t *)buf); -		if (r) -			return r; - -		WREG32(*pos >> 2, value); - -		result += 4; -		buf += 4; -		*pos += 4; -		size -= 4; -	} - -	if (use_bank) { -		amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); -		mutex_unlock(&adev->grbm_idx_mutex); -	} - -	if (pm_pg_lock) -		mutex_unlock(&adev->pm.mutex); - -	return result; +	return amdgpu_debugfs_process_reg_op(false, f, (char __user *)buf, size, pos);  }  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)  {  	int r; +	if (vgacon_text_force()) { +		DRM_ERROR("VGACON disables amdgpu kernel modesetting.\n"); +		return -EINVAL; +	} +  	r = amdgpu_sync_init();  	if (r)  		goto error_sync; @@ -930,10 +935,6 @@ static int __init amdgpu_init(void)  	if (r)  		goto error_fence; -	if (vgacon_text_force()) { -		DRM_ERROR("VGACON disables amdgpu kernel modesetting.\n"); -		return -EINVAL; -	}  	DRM_INFO("amdgpu kernel modesetting enabled.\n");  	driver = &kms_driver;  	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,  int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring,  				  unsigned num_hw_submission)  { +	long timeout;  	int r;  	/* Check that num_hw_submission is a power of two */ @@ -433,11 +434,16 @@ int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring,  	/* No need to setup the GPU scheduler for KIQ ring */  	if (ring->funcs->type != AMDGPU_RING_TYPE_KIQ) { +		/* for non-sriov case, no timeout enforce on compute ring */ +		if ((ring->funcs->type == AMDGPU_RING_TYPE_COMPUTE) +				&& !amdgpu_sriov_vf(ring->adev)) +			timeout = MAX_SCHEDULE_TIMEOUT; +		else +			timeout = msecs_to_jiffies(amdgpu_lockup_timeout); +  		r = drm_sched_init(&ring->sched, &amdgpu_sched_ops,  				   num_hw_submission, amdgpu_job_hang_limit, -				   (ring->funcs->type == AMDGPU_RING_TYPE_COMPUTE) ? -				   MAX_SCHEDULE_TIMEOUT : msecs_to_jiffies(amdgpu_lockup_timeout), -				   ring->name); +				   timeout, ring->name);  		if (r) {  			DRM_ERROR("Failed to create scheduler on ring %s.\n",  				  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,  		alignment = PAGE_SIZE;  	} +retry:  	r = amdgpu_bo_create(adev, size, alignment, initial_domain,  			     flags, type, resv, &bo);  	if (r) { -		DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n", -			  size, initial_domain, alignment, r); +		if (r != -ERESTARTSYS) { +			if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) { +				flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; +				goto retry; +			} + +			if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) { +				initial_domain |= AMDGPU_GEM_DOMAIN_GTT; +				goto retry; +			} +			DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n", +				  size, initial_domain, alignment, r); +		}  		return r;  	}  	*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,  	struct amdgpu_bo *bo;  	unsigned long page_align;  	size_t acc_size; -	u32 domains;  	int r;  	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,  #endif  	bo->tbo.bdev = &adev->mman.bdev; -	domains = bo->preferred_domains; -retry: -	amdgpu_ttm_placement_from_domain(bo, domains); +	amdgpu_ttm_placement_from_domain(bo, domain); +  	r = ttm_bo_init_reserved(&adev->mman.bdev, &bo->tbo, size, type,  				 &bo->placement, page_align, &ctx, acc_size,  				 NULL, resv, &amdgpu_ttm_bo_destroy); - -	if (unlikely(r && r != -ERESTARTSYS)) { -		if (bo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) { -			bo->flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; -			goto retry; -		} else if (domains != bo->preferred_domains) { -			domains = bo->allowed_domains; -			goto retry; -		} -	} -	if (unlikely(r)) +	if (unlikely(r != 0))  		return r;  	if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size && diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index 19e71f4a8ac2..c7d43e064fc7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -505,6 +505,9 @@ failed:  int psp_gpu_reset(struct amdgpu_device *adev)  { +	if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) +		return 0; +  	return psp_mode1_reset(&adev->psp);  } 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)  	amdgpu_ring_write(ring, addr & 0xfffffffc);  	amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff);  	amdgpu_ring_write(ring, seq); /* reference */ -	amdgpu_ring_write(ring, 0xfffffff); /* mask */ +	amdgpu_ring_write(ring, 0xffffffff); /* mask */  	amdgpu_ring_write(ring, (0xfff << 16) | 4); /* retry count, poll interval */  } 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,  		start + SQIND_WAVE_SGPRS_OFFSET, size, dst);  } +static void gfx_v6_0_select_me_pipe_q(struct amdgpu_device *adev, +				  u32 me, u32 pipe, u32 q) +{ +	DRM_INFO("Not implemented\n"); +} +  static const struct amdgpu_gfx_funcs gfx_v6_0_gfx_funcs = {  	.get_gpu_clock_counter = &gfx_v6_0_get_gpu_clock_counter,  	.select_se_sh = &gfx_v6_0_select_se_sh,  	.read_wave_data = &gfx_v6_0_read_wave_data,  	.read_wave_sgprs = &gfx_v6_0_read_wave_sgprs, +	.select_me_pipe_q = &gfx_v6_0_select_me_pipe_q  };  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,  		start + SQIND_WAVE_SGPRS_OFFSET, size, dst);  } +static void gfx_v7_0_select_me_pipe_q(struct amdgpu_device *adev, +				  u32 me, u32 pipe, u32 q) +{ +	cik_srbm_select(adev, me, pipe, q, 0); +} +  static const struct amdgpu_gfx_funcs gfx_v7_0_gfx_funcs = {  	.get_gpu_clock_counter = &gfx_v7_0_get_gpu_clock_counter,  	.select_se_sh = &gfx_v7_0_select_se_sh,  	.read_wave_data = &gfx_v7_0_read_wave_data,  	.read_wave_sgprs = &gfx_v7_0_read_wave_sgprs, +	.select_me_pipe_q = &gfx_v7_0_select_me_pipe_q  };  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,  	WREG32(mmGRBM_GFX_INDEX, data);  } +static void gfx_v8_0_select_me_pipe_q(struct amdgpu_device *adev, +				  u32 me, u32 pipe, u32 q) +{ +	vi_srbm_select(adev, me, pipe, q, 0); +} +  static u32 gfx_v8_0_get_rb_active_bitmap(struct amdgpu_device *adev)  {  	u32 data, mask; @@ -5442,6 +5448,7 @@ static const struct amdgpu_gfx_funcs gfx_v8_0_gfx_funcs = {  	.select_se_sh = &gfx_v8_0_select_se_sh,  	.read_wave_data = &gfx_v8_0_read_wave_data,  	.read_wave_sgprs = &gfx_v8_0_read_wave_sgprs, +	.select_me_pipe_q = &gfx_v8_0_select_me_pipe_q  };  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,  		start + SQIND_WAVE_VGPRS_OFFSET, size, dst);  } +static void gfx_v9_0_select_me_pipe_q(struct amdgpu_device *adev, +				  u32 me, u32 pipe, u32 q) +{ +	soc15_grbm_select(adev, me, pipe, q, 0); +} +  static const struct amdgpu_gfx_funcs gfx_v9_0_gfx_funcs = {  	.get_gpu_clock_counter = &gfx_v9_0_get_gpu_clock_counter,  	.select_se_sh = &gfx_v9_0_select_se_sh,  	.read_wave_data = &gfx_v9_0_read_wave_data,  	.read_wave_sgprs = &gfx_v9_0_read_wave_sgprs,  	.read_wave_vgprs = &gfx_v9_0_read_wave_vgprs, +	.select_me_pipe_q = &gfx_v9_0_select_me_pipe_q  };  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)  	return 0;  } +static int gfx_v9_0_kiq_fini_register(struct amdgpu_ring *ring) +{ +	struct amdgpu_device *adev = ring->adev; +	int j; + +	/* disable the queue if it's active */ +	if (RREG32_SOC15(GC, 0, mmCP_HQD_ACTIVE) & 1) { + +		WREG32_SOC15(GC, 0, mmCP_HQD_DEQUEUE_REQUEST, 1); + +		for (j = 0; j < adev->usec_timeout; j++) { +			if (!(RREG32_SOC15(GC, 0, mmCP_HQD_ACTIVE) & 1)) +				break; +			udelay(1); +		} + +		if (j == AMDGPU_MAX_USEC_TIMEOUT) { +			DRM_DEBUG("KIQ dequeue request failed.\n"); + +			/* Manual disable if dequeue request times out */ +			WREG32_SOC15(GC, 0, mmCP_HQD_ACTIVE, 0); +		} + +		WREG32_SOC15(GC, 0, mmCP_HQD_DEQUEUE_REQUEST, +		      0); +	} + +	WREG32_SOC15(GC, 0, mmCP_HQD_IQ_TIMER, 0); +	WREG32_SOC15(GC, 0, mmCP_HQD_IB_CONTROL, 0); +	WREG32_SOC15(GC, 0, mmCP_HQD_PERSISTENT_STATE, 0); +	WREG32_SOC15(GC, 0, mmCP_HQD_PQ_DOORBELL_CONTROL, 0x40000000); +	WREG32_SOC15(GC, 0, mmCP_HQD_PQ_DOORBELL_CONTROL, 0); +	WREG32_SOC15(GC, 0, mmCP_HQD_PQ_RPTR, 0); +	WREG32_SOC15(GC, 0, mmCP_HQD_PQ_WPTR_HI, 0); +	WREG32_SOC15(GC, 0, mmCP_HQD_PQ_WPTR_LO, 0); + +	return 0; +} +  static int gfx_v9_0_kiq_init_queue(struct amdgpu_ring *ring)  {  	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  	return r;  } -  static int gfx_v9_0_hw_fini(void *handle)  {  	struct amdgpu_device *adev = (struct amdgpu_device *)handle; @@ -3033,6 +3078,20 @@ static int gfx_v9_0_hw_fini(void *handle)  		WREG32_FIELD15(GC, 0, CP_PQ_WPTR_POLL_CNTL, EN, 0);  		return 0;  	} + +	/* Use deinitialize sequence from CAIL when unbinding device from driver, +	 * otherwise KIQ is hanging when binding back +	 */ +	if (!adev->in_gpu_reset && !adev->gfx.in_suspend) { +		mutex_lock(&adev->srbm_mutex); +		soc15_grbm_select(adev, adev->gfx.kiq.ring.me, +				adev->gfx.kiq.ring.pipe, +				adev->gfx.kiq.ring.queue, 0); +		gfx_v9_0_kiq_fini_register(&adev->gfx.kiq.ring); +		soc15_grbm_select(adev, 0, 0, 0, 0); +		mutex_unlock(&adev->srbm_mutex); +	} +  	gfx_v9_0_cp_enable(adev, false);  	gfx_v9_0_rlc_stop(adev); 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)  	amdgpu_ring_write(ring, addr & 0xfffffffc);  	amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff);  	amdgpu_ring_write(ring, seq); /* reference */ -	amdgpu_ring_write(ring, 0xfffffff); /* mask */ +	amdgpu_ring_write(ring, 0xffffffff); /* mask */  	amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) |  			  SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */  } 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)  	amdgpu_ring_write(ring, addr & 0xfffffffc);  	amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff);  	amdgpu_ring_write(ring, seq); /* reference */ -	amdgpu_ring_write(ring, 0xfffffff); /* mask */ +	amdgpu_ring_write(ring, 0xffffffff); /* mask */  	amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) |  			  SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */  } 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)  	amdgpu_ring_write(ring, addr & 0xfffffffc);  	amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff);  	amdgpu_ring_write(ring, seq); /* reference */ -	amdgpu_ring_write(ring, 0xfffffff); /* mask */ +	amdgpu_ring_write(ring, 0xffffffff); /* mask */  	amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) |  			  SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */  } 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,  	}  } +static int si_get_pcie_lanes(struct amdgpu_device *adev) +{ +	u32 link_width_cntl; + +	if (adev->flags & AMD_IS_APU) +		return 0; + +	link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); + +	switch ((link_width_cntl & LC_LINK_WIDTH_RD_MASK) >> LC_LINK_WIDTH_RD_SHIFT) { +	case LC_LINK_WIDTH_X1: +		return 1; +	case LC_LINK_WIDTH_X2: +		return 2; +	case LC_LINK_WIDTH_X4: +		return 4; +	case LC_LINK_WIDTH_X8: +		return 8; +	case LC_LINK_WIDTH_X0: +	case LC_LINK_WIDTH_X16: +	default: +		return 16; +	} +} + +static void si_set_pcie_lanes(struct amdgpu_device *adev, int lanes) +{ +	u32 link_width_cntl, mask; + +	if (adev->flags & AMD_IS_APU) +		return; + +	switch (lanes) { +	case 0: +		mask = LC_LINK_WIDTH_X0; +		break; +	case 1: +		mask = LC_LINK_WIDTH_X1; +		break; +	case 2: +		mask = LC_LINK_WIDTH_X2; +		break; +	case 4: +		mask = LC_LINK_WIDTH_X4; +		break; +	case 8: +		mask = LC_LINK_WIDTH_X8; +		break; +	case 16: +		mask = LC_LINK_WIDTH_X16; +		break; +	default: +		DRM_ERROR("invalid pcie lane request: %d\n", lanes); +		return; +	} + +	link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); +	link_width_cntl &= ~LC_LINK_WIDTH_MASK; +	link_width_cntl |= mask << LC_LINK_WIDTH_SHIFT; +	link_width_cntl |= (LC_RECONFIG_NOW | +			    LC_RECONFIG_ARC_MISSING_ESCAPE); + +	WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); +} +  static const struct amdgpu_asic_funcs si_asic_funcs =  {  	.read_disabled_bios = &si_read_disabled_bios, @@ -1262,6 +1327,8 @@ static const struct amdgpu_asic_funcs si_asic_funcs =  	.get_xclk = &si_get_xclk,  	.set_uvd_clocks = &si_set_uvd_clocks,  	.set_vce_clocks = NULL, +	.get_pcie_lanes = &si_get_pcie_lanes, +	.set_pcie_lanes = &si_set_pcie_lanes,  	.get_config_memsize = &si_get_config_memsize,  	.flush_hdp = &si_flush_hdp,  	.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,  {  	u32 lane_width;  	u32 new_lane_width = -		(amdgpu_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; +		((amdgpu_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1;  	u32 current_lane_width = -		(amdgpu_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; +		((amdgpu_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1;  	if (new_lane_width != current_lane_width) {  		amdgpu_set_pcie_lanes(adev, new_lane_width); diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_reg_init.c b/drivers/gpu/drm/amd/amdgpu/vega10_reg_init.c index 4c45db7f1157..45aafca7f315 100644 --- a/drivers/gpu/drm/amd/amdgpu/vega10_reg_init.c +++ b/drivers/gpu/drm/amd/amdgpu/vega10_reg_init.c @@ -38,6 +38,7 @@ int vega10_reg_base_init(struct amdgpu_device *adev)  		adev->reg_offset[ATHUB_HWIP][i] = (uint32_t *)(&(ATHUB_BASE.instance[i]));  		adev->reg_offset[NBIO_HWIP][i] = (uint32_t *)(&(NBIO_BASE.instance[i]));  		adev->reg_offset[MP0_HWIP][i] = (uint32_t *)(&(MP0_BASE.instance[i])); +		adev->reg_offset[MP1_HWIP][i] = (uint32_t *)(&(MP1_BASE.instance[i]));  		adev->reg_offset[UVD_HWIP][i] = (uint32_t *)(&(UVD_BASE.instance[i]));  		adev->reg_offset[VCE_HWIP][i] = (uint32_t *)(&(VCE_BASE.instance[i]));  		adev->reg_offset[VCN_HWIP][i] = (uint32_t *)(&(VCN_BASE.instance[i])); @@ -49,7 +50,7 @@ int vega10_reg_base_init(struct amdgpu_device *adev)  		adev->reg_offset[SMUIO_HWIP][i] = (uint32_t *)(&(SMUIO_BASE.instance[i]));  		adev->reg_offset[PWR_HWIP][i] = (uint32_t *)(&(PWR_BASE.instance[i]));  		adev->reg_offset[NBIF_HWIP][i] = (uint32_t *)(&(NBIF_BASE.instance[i])); - +		adev->reg_offset[THM_HWIP][i] = (uint32_t *)(&(THM_BASE.instance[i]));  	}  	return 0;  } diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index e42a28e3adc5..4e2f379ce217 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -1403,6 +1403,28 @@ static int initialize_plane(struct amdgpu_display_manager *dm,  	return ret;  } + +static void register_backlight_device(struct amdgpu_display_manager *dm, +				      struct dc_link *link) +{ +#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) ||\ +	defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) + +	if ((link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) && +	    link->type != dc_connection_none) { +		/* Event if registration failed, we should continue with +		 * DM initialization because not having a backlight control +		 * is better then a black screen. +		 */ +		amdgpu_dm_register_backlight_device(dm); + +		if (dm->backlight_dev) +			dm->backlight_link = link; +	} +#endif +} + +  /* In this architecture, the association   * connector -> encoder -> crtc   * id not really requried. The crtc and connector will hold the @@ -1456,6 +1478,7 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)  	/* loops over all connectors on the board */  	for (i = 0; i < link_cnt; i++) { +		struct dc_link *link = NULL;  		if (i > AMDGPU_DM_MAX_DISPLAY_INDEX) {  			DRM_ERROR( @@ -1482,9 +1505,14 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)  			goto fail;  		} -		if (dc_link_detect(dc_get_link_at_index(dm->dc, i), -				DETECT_REASON_BOOT)) +		link = dc_get_link_at_index(dm->dc, i); + +		if (dc_link_detect(link, DETECT_REASON_BOOT)) {  			amdgpu_dm_update_connector_after_detect(aconnector); +			register_backlight_device(dm, link); +		} + +  	}  	/* Software is initialized. Now we can register interrupt handlers. */ @@ -2685,7 +2713,8 @@ static void amdgpu_dm_connector_destroy(struct drm_connector *connector)  #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) ||\  	defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) -	if (link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) { +	if ((link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) && +	    link->type != dc_connection_none) {  		amdgpu_dm_register_backlight_device(dm);  		if (dm->backlight_dev) { @@ -3561,6 +3590,7 @@ create_i2c(struct ddc_service *ddc_service,  	return i2c;  } +  /* Note: this function assumes that dc_link_detect() was called for the   * dc_link which will be represented by this aconnector.   */ @@ -3630,28 +3660,6 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,  		|| connector_type == DRM_MODE_CONNECTOR_eDP)  		amdgpu_dm_initialize_dp_connector(dm, aconnector); -#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) ||\ -	defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) - -	/* NOTE: this currently will create backlight device even if a panel -	 * is not connected to the eDP/LVDS connector. -	 * -	 * This is less than ideal but we don't have sink information at this -	 * stage since detection happens after. We can't do detection earlier -	 * since MST detection needs connectors to be created first. -	 */ -	if (link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) { -		/* Event if registration failed, we should continue with -		 * DM initialization because not having a backlight control -		 * is better then a black screen. -		 */ -		amdgpu_dm_register_backlight_device(dm); - -		if (dm->backlight_dev) -			dm->backlight_link = link; -	} -#endif -  out_free:  	if (res) {  		kfree(i2c); @@ -4840,33 +4848,6 @@ static int dm_update_planes_state(struct dc *dc,  	return ret;  } -static int dm_atomic_check_plane_state_fb(struct drm_atomic_state *state, -					  struct drm_crtc *crtc) -{ -	struct drm_plane *plane; -	struct drm_crtc_state *crtc_state; - -	WARN_ON(!drm_atomic_get_new_crtc_state(state, crtc)); - -	drm_for_each_plane_mask(plane, state->dev, crtc->state->plane_mask) { -		struct drm_plane_state *plane_state = -			drm_atomic_get_plane_state(state, plane); - -		if (IS_ERR(plane_state)) -			return -EDEADLK; - -		crtc_state = drm_atomic_get_crtc_state(plane_state->state, crtc); -		if (IS_ERR(crtc_state)) -			return PTR_ERR(crtc_state); - -		if (crtc->primary == plane && crtc_state->active) { -			if (!plane_state->fb) -				return -EINVAL; -		} -	} -	return 0; -} -  static int amdgpu_dm_atomic_check(struct drm_device *dev,  				  struct drm_atomic_state *state)  { @@ -4890,10 +4871,6 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,  		goto fail;  	for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { -		ret = dm_atomic_check_plane_state_fb(state, crtc); -		if (ret) -			goto fail; -  		if (!drm_atomic_crtc_needs_modeset(new_crtc_state) &&  		    !new_crtc_state->color_mgmt_changed)  			continue; diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c index eeb04471b2f5..6d1c4981a185 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c @@ -1997,6 +1997,19 @@ bool dc_link_set_backlight_level(const struct dc_link *link, uint32_t level,  	return true;  } +bool dc_link_set_abm_disable(const struct dc_link *link) +{ +	struct dc  *core_dc = link->ctx->dc; +	struct abm *abm = core_dc->res_pool->abm; + +	if ((abm == NULL) || (abm->funcs->set_backlight_level == NULL)) +		return false; + +	abm->funcs->set_abm_immediate_disable(abm); + +	return true; +} +  bool dc_link_set_psr_enable(const struct dc_link *link, bool enable, bool wait)  {  	struct dc  *core_dc = link->ctx->dc; diff --git a/drivers/gpu/drm/amd/display/dc/dc_link.h b/drivers/gpu/drm/amd/display/dc/dc_link.h index fb4d9eafdc6e..dc34515ef01f 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_link.h +++ b/drivers/gpu/drm/amd/display/dc/dc_link.h @@ -132,6 +132,8 @@ static inline struct dc_link *dc_get_link_at_index(struct dc *dc, uint32_t link_  bool dc_link_set_backlight_level(const struct dc_link *dc_link, uint32_t level,  		uint32_t frame_ramp, const struct dc_stream_state *stream); +bool dc_link_set_abm_disable(const struct dc_link *dc_link); +  bool dc_link_set_psr_enable(const struct dc_link *dc_link, bool enable, bool wait);  bool dc_link_get_psr_state(const struct dc_link *dc_link, uint32_t *psr_state); diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c index 444558ca6533..162f6a6c4208 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c @@ -735,6 +735,8 @@ static void dce110_stream_encoder_update_hdmi_info_packets(  		if (info_frame->avi.valid) {  			const uint32_t *content =  				(const uint32_t *) &info_frame->avi.sb[0]; +			/*we need turn on clock before programming AFMT block*/ +			REG_UPDATE(AFMT_CNTL, AFMT_AUDIO_CLOCK_EN, 1);  			REG_WRITE(AFMT_AVI_INFO0, content[0]); diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c index 775d3bf0bd39..9150d2694450 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c @@ -102,6 +102,43 @@ static uint32_t align_to_chunks_number_per_line(uint32_t pixels)  	return 256 * ((pixels + 255) / 256);  } +static void reset_lb_on_vblank(struct dc_context *ctx) +{ +	uint32_t value, frame_count; +	uint32_t retry = 0; +	uint32_t status_pos = +			dm_read_reg(ctx, mmCRTC_STATUS_POSITION); + + +	/* Only if CRTC is enabled and counter is moving we wait for one frame. */ +	if (status_pos != dm_read_reg(ctx, mmCRTC_STATUS_POSITION)) { +		/* Resetting LB on VBlank */ +		value = dm_read_reg(ctx, mmLB_SYNC_RESET_SEL); +		set_reg_field_value(value, 3, LB_SYNC_RESET_SEL, LB_SYNC_RESET_SEL); +		set_reg_field_value(value, 1, LB_SYNC_RESET_SEL, LB_SYNC_RESET_SEL2); +		dm_write_reg(ctx, mmLB_SYNC_RESET_SEL, value); + +		frame_count = dm_read_reg(ctx, mmCRTC_STATUS_FRAME_COUNT); + + +		for (retry = 100; retry > 0; retry--) { +			if (frame_count != dm_read_reg(ctx, mmCRTC_STATUS_FRAME_COUNT)) +				break; +			msleep(1); +		} +		if (!retry) +			dm_error("Frame count did not increase for 100ms.\n"); + +		/* Resetting LB on VBlank */ +		value = dm_read_reg(ctx, mmLB_SYNC_RESET_SEL); +		set_reg_field_value(value, 2, LB_SYNC_RESET_SEL, LB_SYNC_RESET_SEL); +		set_reg_field_value(value, 0, LB_SYNC_RESET_SEL, LB_SYNC_RESET_SEL2); +		dm_write_reg(ctx, mmLB_SYNC_RESET_SEL, value); + +	} + +} +  static void wait_for_fbc_state_changed(  	struct dce110_compressor *cp110,  	bool enabled) @@ -232,19 +269,23 @@ void dce110_compressor_disable_fbc(struct compressor *compressor)  {  	struct dce110_compressor *cp110 = TO_DCE110_COMPRESSOR(compressor); -	if (compressor->options.bits.FBC_SUPPORT && -		dce110_compressor_is_fbc_enabled_in_hw(compressor, NULL)) { -		uint32_t reg_data; -		/* Turn off compression */ -		reg_data = dm_read_reg(compressor->ctx, mmFBC_CNTL); -		set_reg_field_value(reg_data, 0, FBC_CNTL, FBC_GRPH_COMP_EN); -		dm_write_reg(compressor->ctx, mmFBC_CNTL, reg_data); - -		/* Reset enum controller_id to undefined */ -		compressor->attached_inst = 0; -		compressor->is_enabled = false; - -		wait_for_fbc_state_changed(cp110, false); +	if (compressor->options.bits.FBC_SUPPORT) { +		if (dce110_compressor_is_fbc_enabled_in_hw(compressor, NULL)) { +			uint32_t reg_data; +			/* Turn off compression */ +			reg_data = dm_read_reg(compressor->ctx, mmFBC_CNTL); +			set_reg_field_value(reg_data, 0, FBC_CNTL, FBC_GRPH_COMP_EN); +			dm_write_reg(compressor->ctx, mmFBC_CNTL, reg_data); + +			/* Reset enum controller_id to undefined */ +			compressor->attached_inst = 0; +			compressor->is_enabled = false; + +			wait_for_fbc_state_changed(cp110, false); +		} + +		/* Sync line buffer  - dce100/110 only*/ +		reset_lb_on_vblank(compressor->ctx);  	}  } diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c index 30dd62f0f5fa..d0575999f172 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c @@ -453,10 +453,13 @@ dce110_translate_regamma_to_hw_format(const struct dc_transfer_func *output_tf,  	} else {  		/* 10 segments -		 * segment is from 2^-10 to 2^0 +		 * segment is from 2^-10 to 2^1 +		 * We include an extra segment for range [2^0, 2^1). This is to +		 * ensure that colors with normalized values of 1 don't miss the +		 * LUT.  		 */  		region_start = -10; -		region_end = 0; +		region_end = 1;  		seg_distr[0] = 4;  		seg_distr[1] = 4; @@ -468,7 +471,7 @@ dce110_translate_regamma_to_hw_format(const struct dc_transfer_func *output_tf,  		seg_distr[7] = 4;  		seg_distr[8] = 4;  		seg_distr[9] = 4; -		seg_distr[10] = -1; +		seg_distr[10] = 0;  		seg_distr[11] = -1;  		seg_distr[12] = -1;  		seg_distr[13] = -1; @@ -1016,8 +1019,10 @@ void dce110_blank_stream(struct pipe_ctx *pipe_ctx)  	struct dc_stream_state *stream = pipe_ctx->stream;  	struct dc_link *link = stream->sink->link; -	if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) +	if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) {  		link->dc->hwss.edp_backlight_control(link, false); +		dc_link_set_abm_disable(link); +	}  	if (dc_is_dp_signal(pipe_ctx->stream->signal))  		pipe_ctx->stream_res.stream_enc->funcs->dp_blank(pipe_ctx->stream_res.stream_enc); 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    uint8_t  ledpin2;    uint8_t  padding8_4; -  uint8_t  gfxclkspreadenabled; -  uint8_t  gfxclkspreadpercent; -  uint16_t gfxclkspreadfreq; +	uint8_t  pllgfxclkspreadenabled; +	uint8_t  pllgfxclkspreadpercent; +	uint16_t pllgfxclkspreadfreq;    uint8_t uclkspreadenabled;    uint8_t uclkspreadpercent; @@ -1276,7 +1276,11 @@ struct atom_smc_dpm_info_v4_1    uint8_t socclkspreadpercent;    uint16_t socclkspreadfreq; -  uint32_t boardreserved[3]; +	uint8_t  acggfxclkspreadenabled; +	uint8_t  acggfxclkspreadpercent; +	uint16_t acggfxclkspreadfreq; + +	uint32_t boardreserved[10];  }; 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 \  		vega10_processpptables.o vega10_hwmgr.o vega10_powertune.o \  		vega10_thermal.o smu10_hwmgr.o pp_psm.o\  		vega12_processpptables.o vega12_hwmgr.o \ -		vega12_powertune.o vega12_thermal.o \ +		vega12_thermal.o \  		pp_overdriver.o smu_helper.o  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,  	param->ledpin1 = info->ledpin1;  	param->ledpin2 = info->ledpin2; -	param->gfxclkspreadenabled = info->gfxclkspreadenabled; -	param->gfxclkspreadpercent = info->gfxclkspreadpercent; -	param->gfxclkspreadfreq = info->gfxclkspreadfreq; +	param->pllgfxclkspreadenabled = info->pllgfxclkspreadenabled; +	param->pllgfxclkspreadpercent = info->pllgfxclkspreadpercent; +	param->pllgfxclkspreadfreq = info->pllgfxclkspreadfreq;  	param->uclkspreadenabled = info->uclkspreadenabled;  	param->uclkspreadpercent = info->uclkspreadpercent; @@ -628,5 +628,9 @@ int pp_atomfwctrl_get_smc_dpm_information(struct pp_hwmgr *hwmgr,  	param->socclkspreadpercent = info->socclkspreadpercent;  	param->socclkspreadfreq = info->socclkspreadfreq; +	param->acggfxclkspreadenabled = info->acggfxclkspreadenabled; +	param->acggfxclkspreadpercent = info->acggfxclkspreadpercent; +	param->acggfxclkspreadfreq = info->acggfxclkspreadfreq; +  	return 0;  } 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    uint8_t  ledpin1;    uint8_t  ledpin2; -  uint8_t  gfxclkspreadenabled; -  uint8_t  gfxclkspreadpercent; -  uint16_t gfxclkspreadfreq; +	uint8_t  pllgfxclkspreadenabled; +	uint8_t  pllgfxclkspreadpercent; +	uint16_t pllgfxclkspreadfreq;    uint8_t  uclkspreadenabled;    uint8_t  uclkspreadpercent; @@ -203,6 +203,10 @@ struct pp_atomfwctrl_smc_dpm_parameters    uint8_t socclkspreadenabled;    uint8_t socclkspreadpercent;    uint16_t socclkspreadfreq; + +	uint8_t  acggfxclkspreadenabled; +	uint8_t  acggfxclkspreadpercent; +	uint16_t acggfxclkspreadfreq;  };  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,  			"Failed to start pm status log!",  			return -1); -	msleep_interruptible(20); +	/* Sampling period from 50ms to 4sec */ +	msleep_interruptible(200);  	PP_ASSERT_WITH_CODE(!smum_send_msg_to_smc(hwmgr,  			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)  			GetIndexIntoMasterTable(DATA, IntegratedSystemInfo),  			&size, &frev, &crev); -	if (crev != 9) { -		pr_err("Unsupported IGP table: %d %d\n", frev, crev); +	if (info == NULL) { +		pr_err("Could not retrieve the Integrated System Info Table!\n");  		return -EINVAL;  	} -	if (info == NULL) { -		pr_err("Could not retrieve the Integrated System Info Table!\n"); +	if (crev != 9) { +		pr_err("Unsupported IGP table: %d %d\n", frev, crev);  		return -EINVAL;  	} 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 @@  #include "ppatomfwctrl.h"  #include "atomfirmware.h"  #include "cgs_common.h" -#include "vega12_powertune.h"  #include "vega12_inc.h"  #include "pp_soc15.h"  #include "pppcielanes.h" @@ -893,6 +892,28 @@ static int vega12_odn_initialize_default_settings(  	return 0;  } +static int vega12_set_overdrive_target_percentage(struct pp_hwmgr *hwmgr, +		uint32_t adjust_percent) +{ +	return smum_send_msg_to_smc_with_parameter(hwmgr, +			PPSMC_MSG_OverDriveSetPercentage, adjust_percent); +} + +static int vega12_power_control_set_level(struct pp_hwmgr *hwmgr) +{ +	int adjust_percent, result = 0; + +	if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { +		adjust_percent = +				hwmgr->platform_descriptor.TDPAdjustmentPolarity ? +				hwmgr->platform_descriptor.TDPAdjustment : +				(-1 * hwmgr->platform_descriptor.TDPAdjustment); +		result = vega12_set_overdrive_target_percentage(hwmgr, +				(uint32_t)adjust_percent); +	} +	return result; +} +  static int vega12_enable_dpm_tasks(struct pp_hwmgr *hwmgr)  {  	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 @@ -/* - * Copyright 2017 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - */ - -#include "hwmgr.h" -#include "vega12_hwmgr.h" -#include "vega12_powertune.h" -#include "vega12_smumgr.h" -#include "vega12_ppsmc.h" -#include "vega12_inc.h" -#include "pp_debug.h" -#include "pp_soc15.h" - -static const struct vega12_didt_config_reg SEDiDtTuningCtrlConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* DIDT_SQ */ -	{   ixDIDT_SQ_TUNING_CTRL,             DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,        DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT,        0x3853 }, -	{   ixDIDT_SQ_TUNING_CTRL,             DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,        DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT,        0x3153 }, - -	/* DIDT_TD */ -	{   ixDIDT_TD_TUNING_CTRL,             DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,        DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT,        0x0dde }, -	{   ixDIDT_TD_TUNING_CTRL,             DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,        DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT,        0x0dde }, - -	/* DIDT_TCP */ -	{   ixDIDT_TCP_TUNING_CTRL,            DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,       DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT,       0x3dde }, -	{   ixDIDT_TCP_TUNING_CTRL,            DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,       DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT,       0x3dde }, - -	/* DIDT_DB */ -	{   ixDIDT_DB_TUNING_CTRL,             DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK,        DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT,        0x3dde }, -	{   ixDIDT_DB_TUNING_CTRL,             DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK,        DIDT_DB_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT,        0x3dde }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEDiDtCtrl3Config_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset               Mask                                                     Shift                                                            Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/*DIDT_SQ_CTRL3 */ -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__GC_DIDT_ENABLE_MASK,       DIDT_SQ_CTRL3__GC_DIDT_ENABLE__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,       DIDT_SQ_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__THROTTLE_POLICY_MASK,       DIDT_SQ_CTRL3__THROTTLE_POLICY__SHIFT,             0x0003 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,       DIDT_SQ_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,       DIDT_SQ_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,       DIDT_SQ_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT,             0x0003 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,       DIDT_SQ_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,       DIDT_SQ_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__QUALIFY_STALL_EN_MASK,       DIDT_SQ_CTRL3__QUALIFY_STALL_EN__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__DIDT_STALL_SEL_MASK,       DIDT_SQ_CTRL3__DIDT_STALL_SEL__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__DIDT_FORCE_STALL_MASK,       DIDT_SQ_CTRL3__DIDT_FORCE_STALL__SHIFT,             0x0000 }, -	{   ixDIDT_SQ_CTRL3,     DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN_MASK,       DIDT_SQ_CTRL3__DIDT_STALL_DELAY_EN__SHIFT,             0x0000 }, - -	/*DIDT_TCP_CTRL3 */ -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__GC_DIDT_ENABLE_MASK,      DIDT_TCP_CTRL3__GC_DIDT_ENABLE__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,      DIDT_TCP_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__THROTTLE_POLICY_MASK,      DIDT_TCP_CTRL3__THROTTLE_POLICY__SHIFT,            0x0003 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,      DIDT_TCP_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,      DIDT_TCP_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,      DIDT_TCP_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT,            0x0003 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,      DIDT_TCP_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,      DIDT_TCP_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__QUALIFY_STALL_EN_MASK,      DIDT_TCP_CTRL3__QUALIFY_STALL_EN__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__DIDT_STALL_SEL_MASK,      DIDT_TCP_CTRL3__DIDT_STALL_SEL__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__DIDT_FORCE_STALL_MASK,      DIDT_TCP_CTRL3__DIDT_FORCE_STALL__SHIFT,            0x0000 }, -	{   ixDIDT_TCP_CTRL3,    DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN_MASK,      DIDT_TCP_CTRL3__DIDT_STALL_DELAY_EN__SHIFT,            0x0000 }, - -	/*DIDT_TD_CTRL3 */ -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__GC_DIDT_ENABLE_MASK,       DIDT_TD_CTRL3__GC_DIDT_ENABLE__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,       DIDT_TD_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__THROTTLE_POLICY_MASK,       DIDT_TD_CTRL3__THROTTLE_POLICY__SHIFT,             0x0003 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,       DIDT_TD_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,       DIDT_TD_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,       DIDT_TD_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT,             0x0003 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,       DIDT_TD_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,       DIDT_TD_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__QUALIFY_STALL_EN_MASK,       DIDT_TD_CTRL3__QUALIFY_STALL_EN__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__DIDT_STALL_SEL_MASK,       DIDT_TD_CTRL3__DIDT_STALL_SEL__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__DIDT_FORCE_STALL_MASK,       DIDT_TD_CTRL3__DIDT_FORCE_STALL__SHIFT,             0x0000 }, -	{   ixDIDT_TD_CTRL3,     DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN_MASK,       DIDT_TD_CTRL3__DIDT_STALL_DELAY_EN__SHIFT,             0x0000 }, - -	/*DIDT_DB_CTRL3 */ -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__GC_DIDT_ENABLE_MASK,       DIDT_DB_CTRL3__GC_DIDT_ENABLE__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE_MASK,       DIDT_DB_CTRL3__GC_DIDT_CLK_EN_OVERRIDE__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__THROTTLE_POLICY_MASK,       DIDT_DB_CTRL3__THROTTLE_POLICY__SHIFT,             0x0003 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,       DIDT_DB_CTRL3__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT_MASK,       DIDT_DB_CTRL3__DIDT_POWER_LEVEL_LOWBIT__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS_MASK,       DIDT_DB_CTRL3__DIDT_STALL_PATTERN_BIT_NUMS__SHIFT,             0x0003 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN_MASK,       DIDT_DB_CTRL3__GC_DIDT_LEVEL_COMB_EN__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN_MASK,       DIDT_DB_CTRL3__SE_DIDT_LEVEL_COMB_EN__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__QUALIFY_STALL_EN_MASK,       DIDT_DB_CTRL3__QUALIFY_STALL_EN__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__DIDT_STALL_SEL_MASK,       DIDT_DB_CTRL3__DIDT_STALL_SEL__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__DIDT_FORCE_STALL_MASK,       DIDT_DB_CTRL3__DIDT_FORCE_STALL__SHIFT,             0x0000 }, -	{   ixDIDT_DB_CTRL3,     DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN_MASK,       DIDT_DB_CTRL3__DIDT_STALL_DELAY_EN__SHIFT,             0x0000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEDiDtCtrl2Config_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                            Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* DIDT_SQ */ -	{   ixDIDT_SQ_CTRL2,                  DIDT_SQ_CTRL2__MAX_POWER_DELTA_MASK,                 DIDT_SQ_CTRL2__MAX_POWER_DELTA__SHIFT,                 0x3853 }, -	{   ixDIDT_SQ_CTRL2,                  DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,        DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT,        0x00c0 }, -	{   ixDIDT_SQ_CTRL2,                  DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,        DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT,        0x0000 }, - -	/* DIDT_TD */ -	{   ixDIDT_TD_CTRL2,                  DIDT_TD_CTRL2__MAX_POWER_DELTA_MASK,                 DIDT_TD_CTRL2__MAX_POWER_DELTA__SHIFT,                 0x3fff }, -	{   ixDIDT_TD_CTRL2,                  DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,        DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT,        0x00c0 }, -	{   ixDIDT_TD_CTRL2,                  DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,        DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT,        0x0001 }, - -	/* DIDT_TCP */ -	{   ixDIDT_TCP_CTRL2,                 DIDT_TCP_CTRL2__MAX_POWER_DELTA_MASK,                DIDT_TCP_CTRL2__MAX_POWER_DELTA__SHIFT,                0x3dde }, -	{   ixDIDT_TCP_CTRL2,                 DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,       DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT,       0x00c0 }, -	{   ixDIDT_TCP_CTRL2,                 DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,       DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT,       0x0001 }, - -	/* DIDT_DB */ -	{   ixDIDT_DB_CTRL2,                  DIDT_DB_CTRL2__MAX_POWER_DELTA_MASK,                 DIDT_DB_CTRL2__MAX_POWER_DELTA__SHIFT,                 0x3dde }, -	{   ixDIDT_DB_CTRL2,                  DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK,        DIDT_DB_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT,        0x00c0 }, -	{   ixDIDT_DB_CTRL2,                  DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK,        DIDT_DB_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT,        0x0001 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEDiDtCtrl1Config_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* DIDT_SQ */ -	{   ixDIDT_SQ_CTRL1,                   DIDT_SQ_CTRL1__MIN_POWER_MASK,                       DIDT_SQ_CTRL1__MIN_POWER__SHIFT,                       0x0000 }, -	{   ixDIDT_SQ_CTRL1,                   DIDT_SQ_CTRL1__MAX_POWER_MASK,                       DIDT_SQ_CTRL1__MAX_POWER__SHIFT,                       0xffff }, -	/* DIDT_TD */ -	{   ixDIDT_TD_CTRL1,                   DIDT_TD_CTRL1__MIN_POWER_MASK,                       DIDT_TD_CTRL1__MIN_POWER__SHIFT,                       0x0000 }, -	{   ixDIDT_TD_CTRL1,                   DIDT_TD_CTRL1__MAX_POWER_MASK,                       DIDT_TD_CTRL1__MAX_POWER__SHIFT,                       0xffff }, -	/* DIDT_TCP */ -	{   ixDIDT_TCP_CTRL1,                  DIDT_TCP_CTRL1__MIN_POWER_MASK,                      DIDT_TCP_CTRL1__MIN_POWER__SHIFT,                      0x0000 }, -	{   ixDIDT_TCP_CTRL1,                  DIDT_TCP_CTRL1__MAX_POWER_MASK,                      DIDT_TCP_CTRL1__MAX_POWER__SHIFT,                      0xffff }, -	/* DIDT_DB */ -	{   ixDIDT_DB_CTRL1,                   DIDT_DB_CTRL1__MIN_POWER_MASK,                       DIDT_DB_CTRL1__MIN_POWER__SHIFT,                       0x0000 }, -	{   ixDIDT_DB_CTRL1,                   DIDT_DB_CTRL1__MAX_POWER_MASK,                       DIDT_DB_CTRL1__MAX_POWER__SHIFT,                       0xffff }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - - -static const struct vega12_didt_config_reg SEDiDtWeightConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                  Shift                                                 Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* DIDT_SQ */ -	{   ixDIDT_SQ_WEIGHT0_3,               0xFFFFFFFF,                                           0,                                                    0x2B363B1A }, -	{   ixDIDT_SQ_WEIGHT4_7,               0xFFFFFFFF,                                           0,                                                    0x270B2432 }, -	{   ixDIDT_SQ_WEIGHT8_11,              0xFFFFFFFF,                                           0,                                                    0x00000018 }, - -	/* DIDT_TD */ -	{   ixDIDT_TD_WEIGHT0_3,               0xFFFFFFFF,                                           0,                                                    0x2B1D220F }, -	{   ixDIDT_TD_WEIGHT4_7,               0xFFFFFFFF,                                           0,                                                    0x00007558 }, -	{   ixDIDT_TD_WEIGHT8_11,              0xFFFFFFFF,                                           0,                                                    0x00000000 }, - -	/* DIDT_TCP */ -	{   ixDIDT_TCP_WEIGHT0_3,               0xFFFFFFFF,                                          0,                                                    0x5ACE160D }, -	{   ixDIDT_TCP_WEIGHT4_7,               0xFFFFFFFF,                                          0,                                                    0x00000000 }, -	{   ixDIDT_TCP_WEIGHT8_11,              0xFFFFFFFF,                                          0,                                                    0x00000000 }, - -	/* DIDT_DB */ -	{   ixDIDT_DB_WEIGHT0_3,                0xFFFFFFFF,                                          0,                                                    0x0E152A0F }, -	{   ixDIDT_DB_WEIGHT4_7,                0xFFFFFFFF,                                          0,                                                    0x09061813 }, -	{   ixDIDT_DB_WEIGHT8_11,               0xFFFFFFFF,                                          0,                                                    0x00000013 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEDiDtCtrl0Config_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* DIDT_SQ */ -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK,   DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT,  0x0000 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__PHASE_OFFSET_MASK,   DIDT_SQ_CTRL0__PHASE_OFFSET__SHIFT,  0x0000 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_CTRL_RST_MASK,   DIDT_SQ_CTRL0__DIDT_CTRL_RST__SHIFT,  0x0000 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,   DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT,  0x0000 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN_MASK,   DIDT_SQ_CTRL0__DIDT_STALL_CTRL_EN__SHIFT,  0x0001 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN_MASK,   DIDT_SQ_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT,  0x0001 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,   DIDT_SQ_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT,  0x0001 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,   DIDT_SQ_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT,  0xffff }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN_MASK,   DIDT_SQ_CTRL0__DIDT_AUTO_MPD_EN__SHIFT,  0x0000 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN_MASK,   DIDT_SQ_CTRL0__DIDT_STALL_EVENT_EN__SHIFT,  0x0000 }, -	{  ixDIDT_SQ_CTRL0,                   DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,   DIDT_SQ_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT,  0x0000 }, -	/* DIDT_TD */ -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK,   DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT,  0x0000 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__PHASE_OFFSET_MASK,   DIDT_TD_CTRL0__PHASE_OFFSET__SHIFT,  0x0000 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_CTRL_RST_MASK,   DIDT_TD_CTRL0__DIDT_CTRL_RST__SHIFT,  0x0000 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,   DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT,  0x0000 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN_MASK,   DIDT_TD_CTRL0__DIDT_STALL_CTRL_EN__SHIFT,  0x0001 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN_MASK,   DIDT_TD_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT,  0x0001 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,   DIDT_TD_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT,  0x0001 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,   DIDT_TD_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT,  0xffff }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN_MASK,   DIDT_TD_CTRL0__DIDT_AUTO_MPD_EN__SHIFT,  0x0000 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN_MASK,   DIDT_TD_CTRL0__DIDT_STALL_EVENT_EN__SHIFT,  0x0000 }, -	{  ixDIDT_TD_CTRL0,                   DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,   DIDT_TD_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT,  0x0000 }, -	/* DIDT_TCP */ -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK,  DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT, 0x0000 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__PHASE_OFFSET_MASK,  DIDT_TCP_CTRL0__PHASE_OFFSET__SHIFT, 0x0000 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_CTRL_RST_MASK,  DIDT_TCP_CTRL0__DIDT_CTRL_RST__SHIFT, 0x0000 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,  DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT, 0x0000 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN_MASK,  DIDT_TCP_CTRL0__DIDT_STALL_CTRL_EN__SHIFT, 0x0001 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN_MASK,  DIDT_TCP_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT, 0x0001 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,  DIDT_TCP_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT, 0x0001 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,  DIDT_TCP_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT, 0xffff }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN_MASK,  DIDT_TCP_CTRL0__DIDT_AUTO_MPD_EN__SHIFT, 0x0000 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN_MASK,  DIDT_TCP_CTRL0__DIDT_STALL_EVENT_EN__SHIFT, 0x0000 }, -	{  ixDIDT_TCP_CTRL0,                  DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,  DIDT_TCP_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT, 0x0000 }, -	/* DIDT_DB */ -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK,   DIDT_DB_CTRL0__DIDT_CTRL_EN__SHIFT,  0x0000 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__PHASE_OFFSET_MASK,   DIDT_DB_CTRL0__PHASE_OFFSET__SHIFT,  0x0000 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_CTRL_RST_MASK,   DIDT_DB_CTRL0__DIDT_CTRL_RST__SHIFT,  0x0000 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,   DIDT_DB_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT,  0x0000 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN_MASK,   DIDT_DB_CTRL0__DIDT_STALL_CTRL_EN__SHIFT,  0x0001 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN_MASK,   DIDT_DB_CTRL0__DIDT_TUNING_CTRL_EN__SHIFT,  0x0001 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN_MASK,   DIDT_DB_CTRL0__DIDT_STALL_AUTO_RELEASE_EN__SHIFT,  0x0001 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD_MASK,   DIDT_DB_CTRL0__DIDT_HI_POWER_THRESHOLD__SHIFT,  0xffff }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN_MASK,   DIDT_DB_CTRL0__DIDT_AUTO_MPD_EN__SHIFT,  0x0000 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN_MASK,   DIDT_DB_CTRL0__DIDT_STALL_EVENT_EN__SHIFT,  0x0000 }, -	{  ixDIDT_DB_CTRL0,                   DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR_MASK,   DIDT_DB_CTRL0__DIDT_STALL_EVENT_COUNTER_CLEAR__SHIFT,  0x0000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - - -static const struct vega12_didt_config_reg SEDiDtStallCtrlConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                   Mask                                                     Shift                                                      Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* DIDT_SQ */ -	{   ixDIDT_SQ_STALL_CTRL,    DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,    DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT,     0x0004 }, -	{   ixDIDT_SQ_STALL_CTRL,    DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,    DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT,     0x0004 }, -	{   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 }, -	{   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 }, - -	/* DIDT_TD */ -	{   ixDIDT_TD_STALL_CTRL,    DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,    DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT,     0x0001 }, -	{   ixDIDT_TD_STALL_CTRL,    DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,    DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT,     0x0001 }, -	{   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 }, -	{   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 }, - -	/* DIDT_TCP */ -	{   ixDIDT_TCP_STALL_CTRL,   DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,   DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT,    0x0001 }, -	{   ixDIDT_TCP_STALL_CTRL,   DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,   DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT,    0x0001 }, -	{   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 }, -	{   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 }, - -	/* DIDT_DB */ -	{   ixDIDT_DB_STALL_CTRL,    DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK,    DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT,     0x0004 }, -	{   ixDIDT_DB_STALL_CTRL,    DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK,    DIDT_DB_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT,     0x0004 }, -	{   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 }, -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEDiDtStallPatternConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                        Mask                                                      Shift                                                    Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* DIDT_SQ_STALL_PATTERN_1_2 */ -	{   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 }, -	{   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 }, - -	/* DIDT_SQ_STALL_PATTERN_3_4 */ -	{   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 }, -	{   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 }, - -	/* DIDT_SQ_STALL_PATTERN_5_6 */ -	{   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 }, -	{   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 }, - -	/* DIDT_SQ_STALL_PATTERN_7 */ -	{   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 }, - -	/* DIDT_TCP_STALL_PATTERN_1_2 */ -	{   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 }, -	{   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 }, - -	/* DIDT_TCP_STALL_PATTERN_3_4 */ -	{   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 }, -	{   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 }, - -	/* DIDT_TCP_STALL_PATTERN_5_6 */ -	{   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 }, -	{   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 }, - -	/* DIDT_TCP_STALL_PATTERN_7 */ -	{   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 }, - -	/* DIDT_TD_STALL_PATTERN_1_2 */ -	{   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 }, -	{   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 }, - -	/* DIDT_TD_STALL_PATTERN_3_4 */ -	{   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 }, -	{   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 }, - -	/* DIDT_TD_STALL_PATTERN_5_6 */ -	{   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 }, -	{   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 }, - -	/* DIDT_TD_STALL_PATTERN_7 */ -	{   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 }, - -	/* DIDT_DB_STALL_PATTERN_1_2 */ -	{   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 }, -	{   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 }, - -	/* DIDT_DB_STALL_PATTERN_3_4 */ -	{   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 }, -	{   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 }, - -	/* DIDT_DB_STALL_PATTERN_5_6 */ -	{   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 }, -	{   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 }, - -	/* DIDT_DB_STALL_PATTERN_7 */ -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SELCacConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ */ -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x00060021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x00860021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x01060021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x01860021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x02060021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x02860021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x03060021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x03860021 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x04060021 }, -	/* TD */ -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x000E0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x008E0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x010E0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x018E0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x020E0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x028E0020 }, -	/* TCP */ -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x001c0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x009c0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x011c0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x019c0020 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x021c0020 }, -	/* DB */ -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x00200008 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x00820008 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x01020008 }, -	{   ixSE_CAC_CNTL,                     0xFFFFFFFF,                                          0,                                                     0x01820008 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - - -static const struct vega12_didt_config_reg SEEDCStallPatternConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ */ -	{   ixDIDT_SQ_EDC_STALL_PATTERN_1_2,   0xFFFFFFFF,                                          0,                                                     0x00030001 }, -	{   ixDIDT_SQ_EDC_STALL_PATTERN_3_4,   0xFFFFFFFF,                                          0,                                                     0x000F0007 }, -	{   ixDIDT_SQ_EDC_STALL_PATTERN_5_6,   0xFFFFFFFF,                                          0,                                                     0x003F001F }, -	{   ixDIDT_SQ_EDC_STALL_PATTERN_7,     0xFFFFFFFF,                                          0,                                                     0x0000007F }, -	/* TD */ -	{   ixDIDT_TD_EDC_STALL_PATTERN_1_2,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_TD_EDC_STALL_PATTERN_3_4,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_TD_EDC_STALL_PATTERN_5_6,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_TD_EDC_STALL_PATTERN_7,     0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	/* TCP */ -	{   ixDIDT_TCP_EDC_STALL_PATTERN_1_2,   0xFFFFFFFF,                                         0,                                                     0x00000000 }, -	{   ixDIDT_TCP_EDC_STALL_PATTERN_3_4,   0xFFFFFFFF,                                         0,                                                     0x00000000 }, -	{   ixDIDT_TCP_EDC_STALL_PATTERN_5_6,   0xFFFFFFFF,                                         0,                                                     0x00000000 }, -	{   ixDIDT_TCP_EDC_STALL_PATTERN_7,     0xFFFFFFFF,                                         0,                                                     0x00000000 }, -	/* DB */ -	{   ixDIDT_DB_EDC_STALL_PATTERN_1_2,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_DB_EDC_STALL_PATTERN_3_4,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_DB_EDC_STALL_PATTERN_5_6,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_DB_EDC_STALL_PATTERN_7,     0xFFFFFFFF,                                          0,                                                     0x00000000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEEDCForceStallPatternConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ */ -	{   ixDIDT_SQ_EDC_STALL_PATTERN_1_2,   0xFFFFFFFF,                                          0,                                                     0x00000015 }, -	{   ixDIDT_SQ_EDC_STALL_PATTERN_3_4,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_SQ_EDC_STALL_PATTERN_5_6,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_SQ_EDC_STALL_PATTERN_7,     0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	/* TD */ -	{   ixDIDT_TD_EDC_STALL_PATTERN_1_2,   0xFFFFFFFF,                                          0,                                                     0x00000015 }, -	{   ixDIDT_TD_EDC_STALL_PATTERN_3_4,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_TD_EDC_STALL_PATTERN_5_6,   0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_TD_EDC_STALL_PATTERN_7,     0xFFFFFFFF,                                          0,                                                     0x00000000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEEDCStallDelayConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ */ -	{   ixDIDT_SQ_EDC_STALL_DELAY_1,       0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_SQ_EDC_STALL_DELAY_2,       0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	/* TD */ -	{   ixDIDT_TD_EDC_STALL_DELAY_1,       0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_TD_EDC_STALL_DELAY_2,       0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	/* TCP */ -	{   ixDIDT_TCP_EDC_STALL_DELAY_1,      0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	{   ixDIDT_TCP_EDC_STALL_DELAY_2,      0xFFFFFFFF,                                          0,                                                     0x00000000 }, -	/* DB */ -	{   ixDIDT_DB_EDC_STALL_DELAY_1,       0xFFFFFFFF,                                          0,                                                     0x00000000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEEDCThresholdConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   ixDIDT_SQ_EDC_THRESHOLD,           0xFFFFFFFF,                                          0,                                                     0x0000010E }, -	{   ixDIDT_TD_EDC_THRESHOLD,           0xFFFFFFFF,                                          0,                                                     0xFFFFFFFF }, -	{   ixDIDT_TCP_EDC_THRESHOLD,          0xFFFFFFFF,                                          0,                                                     0xFFFFFFFF }, -	{   ixDIDT_DB_EDC_THRESHOLD,           0xFFFFFFFF,                                          0,                                                     0xFFFFFFFF }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEEDCCtrlResetConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ */ -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_EN_MASK,                       DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT,                        0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,                   DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT,                    0x0001 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,          DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,           0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,              DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT,               0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,  DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,   0x0000 }, -	{   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 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,     DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,      0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,                    DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT,                     0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,          DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT,           0x0000 }, -	{   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 }, -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEEDCCtrlConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ */ -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_EN_MASK,                       DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT,                        0x0001 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,                   DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT,                    0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,          DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,           0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,              DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT,               0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,  DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,   0x0004 }, -	{   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 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,     DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,      0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,                    DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT,                     0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,          DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT,           0x0000 }, -	{   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 }, -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg SEEDCCtrlForceStallConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ */ -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_EN_MASK,                       DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT,                        0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,                   DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT,                    0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,          DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,           0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,              DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT,               0x0001 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,  DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,   0x0001 }, -	{   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 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,     DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,      0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,                    DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT,                     0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,          DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT,           0x0000 }, -	{   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 }, -	{   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 }, - -	/* TD */ -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__EDC_EN_MASK,                       DIDT_TD_EDC_CTRL__EDC_EN__SHIFT,                        0x0000 }, -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__EDC_SW_RST_MASK,                   DIDT_TD_EDC_CTRL__EDC_SW_RST__SHIFT,                    0x0000 }, -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,          DIDT_TD_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,           0x0000 }, -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__EDC_FORCE_STALL_MASK,              DIDT_TD_EDC_CTRL__EDC_FORCE_STALL__SHIFT,               0x0001 }, -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,  DIDT_TD_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,   0x0001 }, -	{   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 }, -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,     DIDT_TD_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,      0x0000 }, -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__GC_EDC_EN_MASK,                    DIDT_TD_EDC_CTRL__GC_EDC_EN__SHIFT,                     0x0000 }, -	{   ixDIDT_TD_EDC_CTRL,                DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,          DIDT_TD_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT,           0x0000 }, -	{   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 }, -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg    GCDiDtDroopCtrlConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   mmGC_DIDT_DROOP_CTRL,             GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN_MASK,   GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_EN__SHIFT,  0x0000 }, -	{   mmGC_DIDT_DROOP_CTRL,             GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD_MASK,   GC_DIDT_DROOP_CTRL__DIDT_DROOP_THRESHOLD__SHIFT,  0x0000 }, -	{   mmGC_DIDT_DROOP_CTRL,             GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX_MASK,   GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_INDEX__SHIFT,  0x0000 }, -	{   mmGC_DIDT_DROOP_CTRL,             GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL_MASK,   GC_DIDT_DROOP_CTRL__DIDT_LEVEL_SEL__SHIFT,  0x0000 }, -	{   mmGC_DIDT_DROOP_CTRL,             GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW_MASK,   GC_DIDT_DROOP_CTRL__DIDT_DROOP_LEVEL_OVERFLOW__SHIFT,  0x0000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg    GCDiDtCtrl0Config_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   mmGC_DIDT_CTRL0,                  GC_DIDT_CTRL0__DIDT_CTRL_EN_MASK,   GC_DIDT_CTRL0__DIDT_CTRL_EN__SHIFT,  0x0000 }, -	{   mmGC_DIDT_CTRL0,                  GC_DIDT_CTRL0__PHASE_OFFSET_MASK,   GC_DIDT_CTRL0__PHASE_OFFSET__SHIFT,  0x0000 }, -	{   mmGC_DIDT_CTRL0,                  GC_DIDT_CTRL0__DIDT_SW_RST_MASK,   GC_DIDT_CTRL0__DIDT_SW_RST__SHIFT,  0x0000 }, -	{   mmGC_DIDT_CTRL0,                  GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK,   GC_DIDT_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT,  0x0000 }, -	{   mmGC_DIDT_CTRL0,                  GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT_MASK,   GC_DIDT_CTRL0__DIDT_TRIGGER_THROTTLE_LOWBIT__SHIFT,  0x0000 }, -	{   0xFFFFFFFF  }  /* End of list */ -}; - - -static const struct vega12_didt_config_reg   PSMSEEDCStallPatternConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ EDC STALL PATTERNs */ -	{   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 }, -	{   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 }, -	{   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 }, -	{   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 }, - -	{   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 }, -	{   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 }, - -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMSEEDCStallDelayConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ EDC STALL DELAYs */ -	{   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 }, -	{   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 }, -	{   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 }, -	{   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 }, - -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMSEEDCThresholdConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ EDC THRESHOLD */ -	{   ixDIDT_SQ_EDC_THRESHOLD,           DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD_MASK,           DIDT_SQ_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT,            0x0000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMSEEDCCtrlResetConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ EDC CTRL */ -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_EN_MASK,                       DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT,                        0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,                   DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT,                    0x0001 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,          DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,           0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,              DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT,               0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,  DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,   0x0000 }, -	{   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 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,     DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,      0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,                    DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT,                     0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,          DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT,           0x0000 }, -	{   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 }, -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMSEEDCCtrlConfig_Vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	/* SQ EDC CTRL */ -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_EN_MASK,                       DIDT_SQ_EDC_CTRL__EDC_EN__SHIFT,                        0x0001 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_SW_RST_MASK,                   DIDT_SQ_EDC_CTRL__EDC_SW_RST__SHIFT,                    0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,          DIDT_SQ_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,           0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL_MASK,              DIDT_SQ_EDC_CTRL__EDC_FORCE_STALL__SHIFT,               0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,  DIDT_SQ_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,   0x0000 }, -	{   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 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,     DIDT_SQ_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,      0x0000 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_EN_MASK,                    DIDT_SQ_EDC_CTRL__GC_EDC_EN__SHIFT,                     0x0001 }, -	{   ixDIDT_SQ_EDC_CTRL,                DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY_MASK,          DIDT_SQ_EDC_CTRL__GC_EDC_STALL_POLICY__SHIFT,           0x0003 }, -	{   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 }, -	{   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 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMGCEDCThresholdConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   mmGC_EDC_THRESHOLD,                GC_EDC_THRESHOLD__EDC_THRESHOLD_MASK,                GC_EDC_THRESHOLD__EDC_THRESHOLD__SHIFT,                 0x0000000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMGCEDCDroopCtrlConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   mmGC_EDC_DROOP_CTRL,               GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN_MASK,          GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_EN__SHIFT,           0x0001 }, -	{   mmGC_EDC_DROOP_CTRL,               GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD_MASK,         GC_EDC_DROOP_CTRL__EDC_DROOP_THRESHOLD__SHIFT,          0x0384 }, -	{   mmGC_EDC_DROOP_CTRL,               GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX_MASK,       GC_EDC_DROOP_CTRL__EDC_DROOP_LEVEL_INDEX__SHIFT,        0x0001 }, -	{   mmGC_EDC_DROOP_CTRL,               GC_EDC_DROOP_CTRL__AVG_PSM_SEL_MASK,                 GC_EDC_DROOP_CTRL__AVG_PSM_SEL__SHIFT,                  0x0001 }, -	{   mmGC_EDC_DROOP_CTRL,               GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL_MASK,               GC_EDC_DROOP_CTRL__EDC_LEVEL_SEL__SHIFT,                0x0001 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMGCEDCCtrlResetConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_EN_MASK,                            GC_EDC_CTRL__EDC_EN__SHIFT,                             0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_SW_RST_MASK,                        GC_EDC_CTRL__EDC_SW_RST__SHIFT,                         0x0001 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,               GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,                0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_FORCE_STALL_MASK,                   GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT,                    0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,       GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,        0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,          GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,           0x0000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg   PSMGCEDCCtrlConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_EN_MASK,                            GC_EDC_CTRL__EDC_EN__SHIFT,                             0x0001 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_SW_RST_MASK,                        GC_EDC_CTRL__EDC_SW_RST__SHIFT,                         0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE_MASK,               GC_EDC_CTRL__EDC_CLK_EN_OVERRIDE__SHIFT,                0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_FORCE_STALL_MASK,                   GC_EDC_CTRL__EDC_FORCE_STALL__SHIFT,                    0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT_MASK,       GC_EDC_CTRL__EDC_TRIGGER_THROTTLE_LOWBIT__SHIFT,        0x0000 }, -	{   mmGC_EDC_CTRL,                     GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA_MASK,          GC_EDC_CTRL__EDC_ALLOW_WRITE_PWRDELTA__SHIFT,           0x0000 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg    AvfsPSMResetConfig_vega12[]= -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   0x16A02,                         0xFFFFFFFF,                                            0x0,                                                    0x0000005F }, -	{   0x16A05,                         0xFFFFFFFF,                                            0x0,                                                    0x00000001 }, -	{   0x16A06,                         0x00000001,                                            0x0,                                                    0x02000000 }, -	{   0x16A01,                         0xFFFFFFFF,                                            0x0,                                                    0x00003027 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -static const struct vega12_didt_config_reg    AvfsPSMInitConfig_vega12[] = -{ -/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - *      Offset                             Mask                                                 Shift                                                  Value - * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - */ -	{   0x16A05,                         0xFFFFFFFF,                                            0x18,                                                    0x00000001 }, -	{   0x16A05,                         0xFFFFFFFF,                                            0x8,                                                     0x00000003 }, -	{   0x16A05,                         0xFFFFFFFF,                                            0xa,                                                     0x00000006 }, -	{   0x16A05,                         0xFFFFFFFF,                                            0x7,                                                     0x00000000 }, -	{   0x16A06,                         0xFFFFFFFF,                                            0x18,                                                    0x00000001 }, -	{   0x16A06,                         0xFFFFFFFF,                                            0x19,                                                    0x00000001 }, -	{   0x16A01,                         0xFFFFFFFF,                                            0x0,                                                     0x00003027 }, - -	{   0xFFFFFFFF  }  /* End of list */ -}; - -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) -{ -	uint32_t data; - -	PP_ASSERT_WITH_CODE((config_regs != NULL), "[vega12_program_didt_config_registers] Invalid config register table!", return -EINVAL); - -	while (config_regs->offset != 0xFFFFFFFF) { -		switch (reg_type) { -		case VEGA12_CONFIGREG_DIDT: -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, config_regs->offset); -			data &= ~config_regs->mask; -			data |= ((config_regs->value << config_regs->shift) & config_regs->mask); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, config_regs->offset, data); -			break; -		case VEGA12_CONFIGREG_GCCAC: -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG_GC_CAC, config_regs->offset); -			data &= ~config_regs->mask; -			data |= ((config_regs->value << config_regs->shift) & config_regs->mask); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG_GC_CAC, config_regs->offset, data); -			break; -		case VEGA12_CONFIGREG_SECAC: -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG_SE_CAC, config_regs->offset); -			data &= ~config_regs->mask; -			data |= ((config_regs->value << config_regs->shift) & config_regs->mask); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG_SE_CAC, config_regs->offset, data); -			break; -		default: -			return -EINVAL; -		} - -		config_regs++; -	} - -	return 0; -} - -static int vega12_program_gc_didt_config_registers(struct pp_hwmgr *hwmgr, const struct vega12_didt_config_reg *config_regs) -{ -	uint32_t data; - -	while (config_regs->offset != 0xFFFFFFFF) { -		data = cgs_read_register(hwmgr->device, config_regs->offset); -		data &= ~config_regs->mask; -		data |= ((config_regs->value << config_regs->shift) & config_regs->mask); -		cgs_write_register(hwmgr->device, config_regs->offset, data); -		config_regs++; -	} - -	return 0; -} - -static void vega12_didt_set_mask(struct pp_hwmgr *hwmgr, const bool enable) -{ -	uint32_t data; -	int result; -	uint32_t en = (enable ? 1 : 0); -	uint32_t didt_block_info = SQ_IR_MASK | TCP_IR_MASK | TD_PCC_MASK; - -	if (PP_CAP(PHM_PlatformCaps_SQRamping)) { -		CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, -				     DIDT_SQ_CTRL0, DIDT_CTRL_EN, en); -		didt_block_info &= ~SQ_Enable_MASK; -		didt_block_info |= en << SQ_Enable_SHIFT; -	} - -	if (PP_CAP(PHM_PlatformCaps_DBRamping)) { -		CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, -				     DIDT_DB_CTRL0, DIDT_CTRL_EN, en); -		didt_block_info &= ~DB_Enable_MASK; -		didt_block_info |= en << DB_Enable_SHIFT; -	} - -	if (PP_CAP(PHM_PlatformCaps_TDRamping)) { -		CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, -				     DIDT_TD_CTRL0, DIDT_CTRL_EN, en); -		didt_block_info &= ~TD_Enable_MASK; -		didt_block_info |= en << TD_Enable_SHIFT; -	} - -	if (PP_CAP(PHM_PlatformCaps_TCPRamping)) { -		CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, -				     DIDT_TCP_CTRL0, DIDT_CTRL_EN, en); -		didt_block_info &= ~TCP_Enable_MASK; -		didt_block_info |= en << TCP_Enable_SHIFT; -	} - -#if 0 -	if (PP_CAP(PHM_PlatformCaps_DBRRamping)) { -		CGS_WREG32_FIELD_IND(hwmgr->device, CGS_IND_REG__DIDT, -				     DIDT_DBR_CTRL0, DIDT_CTRL_EN, en); -	} -#endif - -	if (PP_CAP(PHM_PlatformCaps_DiDtEDCEnable)) { -		if (PP_CAP(PHM_PlatformCaps_SQRamping)) { -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL); -			data = CGS_REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_EN, en); -			data = CGS_REG_SET_FIELD(data, DIDT_SQ_EDC_CTRL, EDC_SW_RST, ~en); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_SQ_EDC_CTRL, data); -		} - -		if (PP_CAP(PHM_PlatformCaps_DBRamping)) { -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL); -			data = CGS_REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_EN, en); -			data = CGS_REG_SET_FIELD(data, DIDT_DB_EDC_CTRL, EDC_SW_RST, ~en); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DB_EDC_CTRL, data); -		} - -		if (PP_CAP(PHM_PlatformCaps_TDRamping)) { -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL); -			data = CGS_REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_EN, en); -			data = CGS_REG_SET_FIELD(data, DIDT_TD_EDC_CTRL, EDC_SW_RST, ~en); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TD_EDC_CTRL, data); -		} - -		if (PP_CAP(PHM_PlatformCaps_TCPRamping)) { -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL); -			data = CGS_REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_EN, en); -			data = CGS_REG_SET_FIELD(data, DIDT_TCP_EDC_CTRL, EDC_SW_RST, ~en); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_TCP_EDC_CTRL, data); -		} - -#if 0 -		if (PP_CAP(PHM_PlatformCaps_DBRRamping)) { -			data = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL); -			data = CGS_REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_EN, en); -			data = CGS_REG_SET_FIELD(data, DIDT_DBR_EDC_CTRL, EDC_SW_RST, ~en); -			cgs_write_ind_register(hwmgr->device, CGS_IND_REG__DIDT, ixDIDT_DBR_EDC_CTRL, data); -		} -#endif -	} - -	if (enable) { -		/* For Vega12, SMC does not support any mask yet. */ -		result = smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_ConfigureGfxDidt, didt_block_info); -		PP_ASSERT((0 == result), "[EnableDiDtConfig] SMC Configure Gfx Didt Failed!"); -	} -} - -static int vega12_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr) -{ -	int result; -	uint32_t num_se = 0, count, data; -	struct amdgpu_device *adev = hwmgr->adev; -	uint32_t reg; - -	num_se = adev->gfx.config.max_shader_engines; - -	cgs_enter_safe_mode(hwmgr->device, true); - -	cgs_lock_grbm_idx(hwmgr->device, true); -	reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); -	for (count = 0; count < num_se; count++) { -		data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); -		cgs_write_register(hwmgr->device, reg, data); - -		result =  vega12_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl1Config_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl2Config_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl3Config_vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtTuningCtrlConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SELCacConfig_Vega12, VEGA12_CONFIGREG_SECAC); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl0Config_Vega12, VEGA12_CONFIGREG_DIDT); - -		if (0 != result) -			break; -	} -	cgs_write_register(hwmgr->device, reg, 0xE0000000); -	cgs_lock_grbm_idx(hwmgr->device, false); - -	vega12_didt_set_mask(hwmgr, true); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	return 0; -} - -static int vega12_disable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr) -{ -	cgs_enter_safe_mode(hwmgr->device, true); - -	vega12_didt_set_mask(hwmgr, false); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	return 0; -} - -static int vega12_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr) -{ -	int result; -	uint32_t num_se = 0, count, data; -	struct amdgpu_device *adev = hwmgr->adev; -	uint32_t reg; - -	num_se = adev->gfx.config.max_shader_engines; - -	cgs_enter_safe_mode(hwmgr->device, true); - -	cgs_lock_grbm_idx(hwmgr->device, true); -	reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); -	for (count = 0; count < num_se; count++) { -		data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); -		cgs_write_register(hwmgr->device, reg, data); - -		result = vega12_program_didt_config_registers(hwmgr, SEDiDtStallCtrlConfig_vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtStallPatternConfig_vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl3Config_vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEDiDtCtrl0Config_Vega12, VEGA12_CONFIGREG_DIDT); -		if (0 != result) -			break; -	} -	cgs_write_register(hwmgr->device, reg, 0xE0000000); -	cgs_lock_grbm_idx(hwmgr->device, false); - -	vega12_didt_set_mask(hwmgr, true); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	vega12_program_gc_didt_config_registers(hwmgr, GCDiDtDroopCtrlConfig_vega12); -	if (PP_CAP(PHM_PlatformCaps_GCEDC)) -		vega12_program_gc_didt_config_registers(hwmgr, GCDiDtCtrl0Config_vega12); - -	if (PP_CAP(PHM_PlatformCaps_PSM)) -		vega12_program_gc_didt_config_registers(hwmgr,  AvfsPSMInitConfig_vega12); - -	return 0; -} - -static int vega12_disable_psm_gc_didt_config(struct pp_hwmgr *hwmgr) -{ -	uint32_t data; - -	cgs_enter_safe_mode(hwmgr->device, true); - -	vega12_didt_set_mask(hwmgr, false); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	if (PP_CAP(PHM_PlatformCaps_GCEDC)) { -		data = 0x00000000; -		cgs_write_register(hwmgr->device, mmGC_DIDT_CTRL0, data); -	} - -	if (PP_CAP(PHM_PlatformCaps_PSM)) -		vega12_program_gc_didt_config_registers(hwmgr,  AvfsPSMResetConfig_vega12); - -	return 0; -} - -static int vega12_enable_se_edc_config(struct pp_hwmgr *hwmgr) -{ -	int result; -	uint32_t num_se = 0, count, data; -	struct amdgpu_device *adev = hwmgr->adev; -	uint32_t reg; - -	num_se = adev->gfx.config.max_shader_engines; - -	cgs_enter_safe_mode(hwmgr->device, true); - -	cgs_lock_grbm_idx(hwmgr->device, true); -	reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); -	for (count = 0; count < num_se; count++) { -		data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); -		cgs_write_register(hwmgr->device, reg, data); -		result = vega12_program_didt_config_registers(hwmgr, SEDiDtWeightConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEEDCStallPatternConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEEDCStallDelayConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEEDCThresholdConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEEDCCtrlResetConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, SEEDCCtrlConfig_Vega12, VEGA12_CONFIGREG_DIDT); - -		if (0 != result) -			break; -	} -	cgs_write_register(hwmgr->device, reg, 0xE0000000); -	cgs_lock_grbm_idx(hwmgr->device, false); - -	vega12_didt_set_mask(hwmgr, true); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	return 0; -} - -static int vega12_disable_se_edc_config(struct pp_hwmgr *hwmgr) -{ -	cgs_enter_safe_mode(hwmgr->device, true); - -	vega12_didt_set_mask(hwmgr, false); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	return 0; -} - -static int vega12_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) -{ -	int result; -	uint32_t num_se = 0; -	uint32_t count, data; -	struct amdgpu_device *adev = hwmgr->adev; -	uint32_t reg; - -	num_se = adev->gfx.config.max_shader_engines; - -	cgs_enter_safe_mode(hwmgr->device, true); - -	vega12_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega12); - -	cgs_lock_grbm_idx(hwmgr->device, true); -	reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); -	for (count = 0; count < num_se; count++) { -		data = GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK | GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK | ( count << GRBM_GFX_INDEX__SE_INDEX__SHIFT); -		cgs_write_register(hwmgr->device, reg, data); -		result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCStallPatternConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCStallDelayConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCCtrlResetConfig_Vega12, VEGA12_CONFIGREG_DIDT); -		result |= vega12_program_didt_config_registers(hwmgr, PSMSEEDCCtrlConfig_Vega12, VEGA12_CONFIGREG_DIDT); - -		if (0 != result) -			break; -	} -	cgs_write_register(hwmgr->device, reg, 0xE0000000); -	cgs_lock_grbm_idx(hwmgr->device, false); - -	vega12_didt_set_mask(hwmgr, true); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	vega12_program_gc_didt_config_registers(hwmgr, PSMGCEDCDroopCtrlConfig_vega12); - -	if (PP_CAP(PHM_PlatformCaps_GCEDC)) { -		vega12_program_gc_didt_config_registers(hwmgr, PSMGCEDCCtrlResetConfig_vega12); -		vega12_program_gc_didt_config_registers(hwmgr, PSMGCEDCCtrlConfig_vega12); -	} - -	if (PP_CAP(PHM_PlatformCaps_PSM)) -		vega12_program_gc_didt_config_registers(hwmgr,  AvfsPSMInitConfig_vega12); - -	return 0; -} - -static int vega12_disable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) -{ -	uint32_t data; - -	cgs_enter_safe_mode(hwmgr->device, true); - -	vega12_didt_set_mask(hwmgr, false); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	if (PP_CAP(PHM_PlatformCaps_GCEDC)) { -		data = 0x00000000; -		cgs_write_register(hwmgr->device, mmGC_EDC_CTRL, data); -	} - -	if (PP_CAP(PHM_PlatformCaps_PSM)) -		vega12_program_gc_didt_config_registers(hwmgr,  AvfsPSMResetConfig_vega12); - -	return 0; -} - -static int vega12_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr) -{ -	uint32_t reg; -	int result; - -	cgs_enter_safe_mode(hwmgr->device, true); - -	cgs_lock_grbm_idx(hwmgr->device, true); -	reg = soc15_get_register_offset(GC_HWID, 0, mmGRBM_GFX_INDEX_BASE_IDX, mmGRBM_GFX_INDEX); -	cgs_write_register(hwmgr->device, reg, 0xE0000000); -	cgs_lock_grbm_idx(hwmgr->device, false); - -	result = vega12_program_didt_config_registers(hwmgr, SEEDCForceStallPatternConfig_Vega12, VEGA12_CONFIGREG_DIDT); -	result |= vega12_program_didt_config_registers(hwmgr, SEEDCCtrlForceStallConfig_Vega12, VEGA12_CONFIGREG_DIDT); -	if (0 != result) -		return result; - -	vega12_didt_set_mask(hwmgr, false); - -	cgs_enter_safe_mode(hwmgr->device, false); - -	return 0; -} - -static int vega12_disable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr) -{ -	int result; - -	result = vega12_disable_se_edc_config(hwmgr); -	PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDtConfig] Pre DIDT disable clock gating failed!", return result); - -	return 0; -} - -int vega12_enable_didt_config(struct pp_hwmgr *hwmgr) -{ -	int result = 0; -	struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); - -	if (data->smu_features[GNLD_DIDT].supported) { -		if (data->smu_features[GNLD_DIDT].enabled) -			PP_DBG_LOG("[EnableDiDtConfig] Feature DiDt Already enabled!\n"); - -		switch (data->registry_data.didt_mode) { -		case 0: -			result = vega12_enable_cac_driving_se_didt_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 0 Failed!", return result); -			break; -		case 2: -			result = vega12_enable_psm_gc_didt_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 2 Failed!", return result); -			break; -		case 3: -			result = vega12_enable_se_edc_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 3 Failed!", return result); -			break; -		case 1: -		case 4: -		case 5: -			result = vega12_enable_psm_gc_edc_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 5 Failed!", return result); -			break; -		case 6: -			result = vega12_enable_se_edc_force_stall_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDt] Attempt to enable DiDt Mode 6 Failed!", return result); -			break; -		default: -			result = -EINVAL; -			break; -		} - -#if 0 -		if (0 == result) { -			result = vega12_enable_smc_features(hwmgr, true, data->smu_features[GNLD_DIDT].smu_feature_bitmap); -			PP_ASSERT_WITH_CODE((0 == result), "[EnableDiDtConfig] Attempt to Enable DiDt feature Failed!", return result); -			data->smu_features[GNLD_DIDT].enabled = true; -		} -#endif -	} - -	return result; -} - -int vega12_disable_didt_config(struct pp_hwmgr *hwmgr) -{ -	int result = 0; -	struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); - -	if (data->smu_features[GNLD_DIDT].supported) { -		if (!data->smu_features[GNLD_DIDT].enabled) -			PP_DBG_LOG("[DisableDiDtConfig] Feature DiDt Already Disabled!\n"); - -		switch (data->registry_data.didt_mode) { -		case 0: -			result = vega12_disable_cac_driving_se_didt_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 0 Failed!", return result); -			break; -		case 2: -			result = vega12_disable_psm_gc_didt_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 2 Failed!", return result); -			break; -		case 3: -			result = vega12_disable_se_edc_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 3 Failed!", return result); -			break; -		case 1: -		case 4: -		case 5: -			result = vega12_disable_psm_gc_edc_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 5 Failed!", return result); -			break; -		case 6: -			result = vega12_disable_se_edc_force_stall_config(hwmgr); -			PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDt] Attempt to disable DiDt Mode 6 Failed!", return result); -			break; -		default: -			result = -EINVAL; -			break; -		} - -		if (0 == result) { -			result = vega12_enable_smc_features(hwmgr, false, data->smu_features[GNLD_DIDT].smu_feature_bitmap); -			PP_ASSERT_WITH_CODE((0 == result), "[DisableDiDtConfig] Attempt to Disable DiDt feature Failed!", return result); -			data->smu_features[GNLD_DIDT].enabled = false; -		} -	} - -	return result; -} - -int vega12_set_power_limit(struct pp_hwmgr *hwmgr, uint32_t n) -{ -	struct vega12_hwmgr *data = -			(struct vega12_hwmgr *)(hwmgr->backend); - -	if (data->smu_features[GNLD_PPT].enabled) -		return smum_send_msg_to_smc_with_parameter(hwmgr, -				PPSMC_MSG_SetPptLimit, n); - -	return 0; -} - -int vega12_enable_power_containment(struct pp_hwmgr *hwmgr) -{ -	struct vega12_hwmgr *data = -			(struct vega12_hwmgr *)(hwmgr->backend); -	struct phm_ppt_v2_information *table_info = -			(struct phm_ppt_v2_information *)(hwmgr->pptable); -	struct phm_tdp_table *tdp_table = table_info->tdp_table; -	uint32_t default_pwr_limit = -			(uint32_t)(tdp_table->usMaximumPowerDeliveryLimit); -	int result = 0; - -	if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { -		if (data->smu_features[GNLD_PPT].supported) -			PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, -					true, data->smu_features[GNLD_PPT].smu_feature_bitmap), -					"Attempt to enable PPT feature Failed!", -					data->smu_features[GNLD_PPT].supported = false); - -		if (data->smu_features[GNLD_TDC].supported) -			PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, -					true, data->smu_features[GNLD_TDC].smu_feature_bitmap), -					"Attempt to enable PPT feature Failed!", -					data->smu_features[GNLD_TDC].supported = false); - -		result = vega12_set_power_limit(hwmgr, default_pwr_limit); -		PP_ASSERT_WITH_CODE(!result, -				"Failed to set Default Power Limit in SMC!", -				return result); -	} - -	return result; -} - -int vega12_disable_power_containment(struct pp_hwmgr *hwmgr) -{ -	struct vega12_hwmgr *data = -			(struct vega12_hwmgr *)(hwmgr->backend); - -	if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { -		if (data->smu_features[GNLD_PPT].supported) -			PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, -					false, data->smu_features[GNLD_PPT].smu_feature_bitmap), -					"Attempt to disable PPT feature Failed!", -					data->smu_features[GNLD_PPT].supported = false); - -		if (data->smu_features[GNLD_TDC].supported) -			PP_ASSERT_WITH_CODE(!vega12_enable_smc_features(hwmgr, -					false, data->smu_features[GNLD_TDC].smu_feature_bitmap), -					"Attempt to disable PPT feature Failed!", -					data->smu_features[GNLD_TDC].supported = false); -	} - -	return 0; -} - -static int vega12_set_overdrive_target_percentage(struct pp_hwmgr *hwmgr, -		uint32_t adjust_percent) -{ -	return smum_send_msg_to_smc_with_parameter(hwmgr, -			PPSMC_MSG_OverDriveSetPercentage, adjust_percent); -} - -int vega12_power_control_set_level(struct pp_hwmgr *hwmgr) -{ -	int adjust_percent, result = 0; - -	if (PP_CAP(PHM_PlatformCaps_PowerContainment)) { -		adjust_percent = -				hwmgr->platform_descriptor.TDPAdjustmentPolarity ? -				hwmgr->platform_descriptor.TDPAdjustment : -				(-1 * hwmgr->platform_descriptor.TDPAdjustment); -		result = vega12_set_overdrive_target_percentage(hwmgr, -				(uint32_t)adjust_percent); -	} -	return result; -} 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 @@ -/* - * Copyright 2017 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - */ -#ifndef _VEGA12_POWERTUNE_H_ -#define _VEGA12_POWERTUNE_H_ - -enum vega12_didt_config_reg_type { -	VEGA12_CONFIGREG_DIDT = 0, -	VEGA12_CONFIGREG_GCCAC, -	VEGA12_CONFIGREG_SECAC -}; - -/* PowerContainment Features */ -#define POWERCONTAINMENT_FEATURE_DTE             0x00000001 -#define POWERCONTAINMENT_FEATURE_TDCLimit        0x00000002 -#define POWERCONTAINMENT_FEATURE_PkgPwrLimit     0x00000004 - -struct vega12_didt_config_reg { -	uint32_t		offset; -	uint32_t		mask; -	uint32_t		shift; -	uint32_t		value; -}; - -int vega12_enable_power_containment(struct pp_hwmgr *hwmgr); -int vega12_set_power_limit(struct pp_hwmgr *hwmgr, uint32_t n); -int vega12_power_control_set_level(struct pp_hwmgr *hwmgr); -int vega12_disable_power_containment(struct pp_hwmgr *hwmgr); - -int vega12_enable_didt_config(struct pp_hwmgr *hwmgr); -int vega12_disable_didt_config(struct pp_hwmgr *hwmgr); - -#endif  /* _VEGA12_POWERTUNE_H_ */ - 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  	ppsmc_pptable->LedPin1 = smc_dpm_table.ledpin1;  	ppsmc_pptable->LedPin2 = smc_dpm_table.ledpin2; -	ppsmc_pptable->GfxclkSpreadEnabled = smc_dpm_table.gfxclkspreadenabled; -	ppsmc_pptable->GfxclkSpreadPercent = smc_dpm_table.gfxclkspreadpercent; -	ppsmc_pptable->GfxclkSpreadFreq = smc_dpm_table.gfxclkspreadfreq; +	ppsmc_pptable->PllGfxclkSpreadEnabled = smc_dpm_table.pllgfxclkspreadenabled; +	ppsmc_pptable->PllGfxclkSpreadPercent = smc_dpm_table.pllgfxclkspreadpercent; +	ppsmc_pptable->PllGfxclkSpreadFreq = smc_dpm_table.pllgfxclkspreadfreq;  	ppsmc_pptable->UclkSpreadEnabled = 0;  	ppsmc_pptable->UclkSpreadPercent = smc_dpm_table.uclkspreadpercent; @@ -220,6 +220,11 @@ static int append_vbios_pptable(struct pp_hwmgr *hwmgr, PPTable_t *ppsmc_pptable  	ppsmc_pptable->SocclkSpreadPercent = smc_dpm_table.socclkspreadpercent;  	ppsmc_pptable->SocclkSpreadFreq = smc_dpm_table.socclkspreadfreq; +	ppsmc_pptable->AcgGfxclkSpreadEnabled = smc_dpm_table.acggfxclkspreadenabled; +	ppsmc_pptable->AcgGfxclkSpreadPercent = smc_dpm_table.acggfxclkspreadpercent; +	ppsmc_pptable->AcgGfxclkSpreadFreq = smc_dpm_table.acggfxclkspreadfreq; + +  	return 0;  } 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 @@  #define FEATURE_GFX_EDC_MASK            (1 << FEATURE_GFX_EDC_BIT            )  #define FEATURE_GFXOFF_MASK             (1 << FEATURE_GFXOFF_BIT             )  #define FEATURE_CG_MASK                 (1 << FEATURE_CG_BIT                 ) -#define FEATURE_ACG_MASK                (1 << FEATURE_ACG_BIT                ) +#define FEATURE_ACG_MASK          (1 << FEATURE_ACG_BIT)  #define FEATURE_SPARE_29_MASK           (1 << FEATURE_SPARE_29_BIT           )  #define FEATURE_SPARE_30_MASK           (1 << FEATURE_SPARE_30_BIT           )  #define FEATURE_SPARE_31_MASK           (1 << FEATURE_SPARE_31_BIT           ) @@ -481,9 +481,9 @@ typedef struct {    uint8_t      padding8_4; -  uint8_t      GfxclkSpreadEnabled; -  uint8_t      GfxclkSpreadPercent; -  uint16_t     GfxclkSpreadFreq; +	uint8_t      PllGfxclkSpreadEnabled; +	uint8_t      PllGfxclkSpreadPercent; +	uint16_t     PllGfxclkSpreadFreq;    uint8_t      UclkSpreadEnabled;    uint8_t      UclkSpreadPercent; @@ -493,7 +493,11 @@ typedef struct {    uint8_t      SocclkSpreadPercent;    uint16_t     SocclkSpreadFreq; -  uint32_t     BoardReserved[3]; +	uint8_t      AcgGfxclkSpreadEnabled; +	uint8_t      AcgGfxclkSpreadPercent; +	uint16_t     AcgGfxclkSpreadFreq; + +	uint32_t     BoardReserved[10];    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 @@  #include "ppatomctrl.h"  #include "pp_debug.h" -#include "smu_ucode_xfer_vi.h" -#include "smu7_smumgr.h" +  /* MP Apertures */  #define MP0_Public                  0x03800000 @@ -392,8 +391,7 @@ static int vega12_smu_init(struct pp_hwmgr *hwmgr)  	struct cgs_firmware_info info = {0};  	int ret; -	ret = cgs_get_firmware_info(hwmgr->device, -				smu7_convert_fw_type_to_cgs(UCODE_ID_SMU), +	ret = cgs_get_firmware_info(hwmgr->device, CGS_UCODE_ID_SMU,  				&info);  	if (ret || !info.kptr)  		return -EINVAL; diff --git a/drivers/gpu/drm/drm_dp_dual_mode_helper.c b/drivers/gpu/drm/drm_dp_dual_mode_helper.c index 02a50929af67..e7f4fe2848a5 100644 --- a/drivers/gpu/drm/drm_dp_dual_mode_helper.c +++ b/drivers/gpu/drm/drm_dp_dual_mode_helper.c @@ -350,19 +350,44 @@ int drm_dp_dual_mode_set_tmds_output(enum drm_dp_dual_mode_type type,  {  	uint8_t tmds_oen = enable ? 0 : DP_DUAL_MODE_TMDS_DISABLE;  	ssize_t ret; +	int retry;  	if (type < DRM_DP_DUAL_MODE_TYPE2_DVI)  		return 0; -	ret = drm_dp_dual_mode_write(adapter, DP_DUAL_MODE_TMDS_OEN, -				     &tmds_oen, sizeof(tmds_oen)); -	if (ret) { -		DRM_DEBUG_KMS("Failed to %s TMDS output buffers\n", -			      enable ? "enable" : "disable"); -		return ret; +	/* +	 * LSPCON adapters in low-power state may ignore the first write, so +	 * read back and verify the written value a few times. +	 */ +	for (retry = 0; retry < 3; retry++) { +		uint8_t tmp; + +		ret = drm_dp_dual_mode_write(adapter, DP_DUAL_MODE_TMDS_OEN, +					     &tmds_oen, sizeof(tmds_oen)); +		if (ret) { +			DRM_DEBUG_KMS("Failed to %s TMDS output buffers (%d attempts)\n", +				      enable ? "enable" : "disable", +				      retry + 1); +			return ret; +		} + +		ret = drm_dp_dual_mode_read(adapter, DP_DUAL_MODE_TMDS_OEN, +					    &tmp, sizeof(tmp)); +		if (ret) { +			DRM_DEBUG_KMS("I2C read failed during TMDS output buffer %s (%d attempts)\n", +				      enable ? "enabling" : "disabling", +				      retry + 1); +			return ret; +		} + +		if (tmp == tmds_oen) +			return 0;  	} -	return 0; +	DRM_DEBUG_KMS("I2C write value mismatch during TMDS output buffer %s\n", +		      enable ? "enabling" : "disabling"); + +	return -EIO;  }  EXPORT_SYMBOL(drm_dp_dual_mode_set_tmds_output); diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c index fb1c27f69e3a..3d662e6805eb 100644 --- a/drivers/gpu/drm/omapdrm/dss/dpi.c +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c @@ -142,7 +142,7 @@ static enum dss_clk_source dpi_get_clk_src(struct dpi_data *dpi)  }  struct dpi_clk_calc_ctx { -	struct dss_pll *pll; +	struct dpi_data *dpi;  	unsigned int clkout_idx;  	/* inputs */ @@ -191,7 +191,7 @@ static bool dpi_calc_hsdiv_cb(int m_dispc, unsigned long dispc,  	ctx->pll_cinfo.mX[ctx->clkout_idx] = m_dispc;  	ctx->pll_cinfo.clkout[ctx->clkout_idx] = dispc; -	return dispc_div_calc(ctx->pll->dss->dispc, dispc, +	return dispc_div_calc(ctx->dpi->dss->dispc, dispc,  			      ctx->pck_min, ctx->pck_max,  			      dpi_calc_dispc_cb, ctx);  } @@ -208,8 +208,8 @@ static bool dpi_calc_pll_cb(int n, int m, unsigned long fint,  	ctx->pll_cinfo.fint = fint;  	ctx->pll_cinfo.clkdco = clkdco; -	return dss_pll_hsdiv_calc_a(ctx->pll, clkdco, -		ctx->pck_min, dss_get_max_fck_rate(ctx->pll->dss), +	return dss_pll_hsdiv_calc_a(ctx->dpi->pll, clkdco, +		ctx->pck_min, dss_get_max_fck_rate(ctx->dpi->dss),  		dpi_calc_hsdiv_cb, ctx);  } @@ -219,7 +219,7 @@ static bool dpi_calc_dss_cb(unsigned long fck, void *data)  	ctx->fck = fck; -	return dispc_div_calc(ctx->pll->dss->dispc, fck, +	return dispc_div_calc(ctx->dpi->dss->dispc, fck,  			      ctx->pck_min, ctx->pck_max,  			      dpi_calc_dispc_cb, ctx);  } @@ -230,7 +230,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi, unsigned long pck,  	unsigned long clkin;  	memset(ctx, 0, sizeof(*ctx)); -	ctx->pll = dpi->pll; +	ctx->dpi = dpi;  	ctx->clkout_idx = dss_pll_get_clkout_idx_for_src(dpi->clk_src);  	clkin = clk_get_rate(dpi->pll->clkin); @@ -244,7 +244,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi, unsigned long pck,  		pll_min = 0;  		pll_max = 0; -		return dss_pll_calc_a(ctx->pll, clkin, +		return dss_pll_calc_a(ctx->dpi->pll, clkin,  				pll_min, pll_max,  				dpi_calc_pll_cb, ctx);  	} else { /* DSS_PLL_TYPE_B */ @@ -275,6 +275,7 @@ static bool dpi_dss_clk_calc(struct dpi_data *dpi, unsigned long pck,  		bool ok;  		memset(ctx, 0, sizeof(*ctx)); +		ctx->dpi = dpi;  		if (pck > 1000 * i * i * i)  			ctx->pck_min = max(pck - 1000 * i * i * i, 0lu);  		else diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index e415d2c097a7..48d0e6bd0508 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -140,6 +140,10 @@ static struct radeon_px_quirk radeon_px_quirk_list[] = {  	 * https://bugs.freedesktop.org/show_bug.cgi?id=101491  	 */  	{ PCI_VENDOR_ID_ATI, 0x6741, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX }, +	/* Asus K73TK laptop with AMD A6-3420M APU and Radeon 7670m GPU +	 * https://bugzilla.kernel.org/show_bug.cgi?id=51381#c52 +	 */ +	{ PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2123, RADEON_PX_QUIRK_DISABLE_PX },  	{ 0, 0, 0, 0, 0 },  }; 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,  {  	u32 lane_width;  	u32 new_lane_width = -		(radeon_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; +		((radeon_new_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1;  	u32 current_lane_width = -		(radeon_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT; +		((radeon_current_state->caps & ATOM_PPLIB_PCIE_LINK_WIDTH_MASK) >> ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT) + 1;  	if (new_lane_width != current_lane_width) {  		radeon_set_pcie_lanes(rdev, new_lane_width); diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c index 2decc8e2c79f..add9cc97a3b6 100644 --- a/drivers/gpu/drm/vc4/vc4_bo.c +++ b/drivers/gpu/drm/vc4/vc4_bo.c @@ -195,6 +195,7 @@ static void vc4_bo_destroy(struct vc4_bo *bo)  	vc4_bo_set_label(obj, -1);  	if (bo->validated_shader) { +		kfree(bo->validated_shader->uniform_addr_offsets);  		kfree(bo->validated_shader->texture_samples);  		kfree(bo->validated_shader);  		bo->validated_shader = NULL; @@ -591,6 +592,7 @@ void vc4_free_object(struct drm_gem_object *gem_bo)  	}  	if (bo->validated_shader) { +		kfree(bo->validated_shader->uniform_addr_offsets);  		kfree(bo->validated_shader->texture_samples);  		kfree(bo->validated_shader);  		bo->validated_shader = NULL; diff --git a/drivers/gpu/drm/vc4/vc4_validate_shaders.c b/drivers/gpu/drm/vc4/vc4_validate_shaders.c index d3f15bf60900..7cf82b071de2 100644 --- a/drivers/gpu/drm/vc4/vc4_validate_shaders.c +++ b/drivers/gpu/drm/vc4/vc4_validate_shaders.c @@ -942,6 +942,7 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj)  fail:  	kfree(validation_state.branch_targets);  	if (validated_shader) { +		kfree(validated_shader->uniform_addr_offsets);  		kfree(validated_shader->texture_samples);  		kfree(validated_shader);  	}  | 

