diff options
| author | Mauro Carvalho Chehab <mchehab+huawei@kernel.org> | 2021-08-05 16:28:43 +0200 | 
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab+huawei@kernel.org> | 2021-08-05 16:28:43 +0200 | 
| commit | 9c3a0f285248899dfa81585bc5d5bc9ebdb8fead (patch) | |
| tree | 908decd51fbb0e1c774444b002e3b89dee3fae26 /drivers/gpu/drm | |
| parent | bfee75f73c37a2f46a6326eaa06f5db701f76f01 (diff) | |
| parent | c500bee1c5b2f1d59b1081ac879d73268ab0ff17 (diff) | |
Merge tag 'v5.14-rc4' into media_tree
Linux 5.14-rc4
* tag 'v5.14-rc4': (948 commits)
  Linux 5.14-rc4
  pipe: make pipe writes always wake up readers
  Revert "perf map: Fix dso->nsinfo refcounting"
  mm/memcg: fix NULL pointer dereference in memcg_slab_free_hook()
  slub: fix unreclaimable slab stat for bulk free
  mm/migrate: fix NR_ISOLATED corruption on 64-bit
  mm: memcontrol: fix blocking rstat function called from atomic cgroup1 thresholding code
  ocfs2: issue zeroout to EOF blocks
  ocfs2: fix zero out valid data
  lib/test_string.c: move string selftest in the Runtime Testing menu
  gve: Update MAINTAINERS list
  arch: Kconfig: clean up obsolete use of HAVE_IDE
  can: esd_usb2: fix memory leak
  can: ems_usb: fix memory leak
  can: usb_8dev: fix memory leak
  can: mcba_usb_start(): add missing urb->transfer_dma initialization
  can: hi311x: fix a signedness bug in hi3110_cmd()
  MAINTAINERS: add Yasushi SHOJI as reviewer for the Microchip CAN BUS Analyzer Tool driver
  scsi: fas216: Fix fall-through warning for Clang
  scsi: acornscsi: Fix fall-through warning for clang
  ...
Diffstat (limited to 'drivers/gpu/drm')
92 files changed, 707 insertions, 2211 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index c0316eaba547..8ac6eb9f1fdb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -619,6 +619,13 @@ struct amdgpu_video_codec_info {  	u32 max_level;  }; +#define codec_info_build(type, width, height, level) \ +			 .codec_type = type,\ +			 .max_width = width,\ +			 .max_height = height,\ +			 .max_pixels_per_frame = height * width,\ +			 .max_level = level, +  struct amdgpu_video_codecs {  	const u32 codec_count;  	const struct amdgpu_video_codec_info *codec_array; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c index 84a1b4bc9bb4..6cc0d4fa4d0a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c @@ -26,6 +26,7 @@  #include <linux/slab.h>  #include <linux/power_supply.h>  #include <linux/pm_runtime.h> +#include <linux/suspend.h>  #include <acpi/video.h>  #include <acpi/actbl.h> @@ -1042,7 +1043,7 @@ bool amdgpu_acpi_is_s0ix_supported(struct amdgpu_device *adev)  #if defined(CONFIG_AMD_PMC) || defined(CONFIG_AMD_PMC_MODULE)  	if (acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0) {  		if (adev->flags & AMD_IS_APU) -			return true; +			return pm_suspend_target_state == PM_SUSPEND_TO_IDLE;  	}  #endif  	return false; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h index db16b3e83694..cf62f43a03da 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h @@ -269,7 +269,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(  		struct kgd_dev *kgd, struct kgd_mem *mem, void *drm_priv,  		uint64_t *size);  int amdgpu_amdkfd_gpuvm_map_memory_to_gpu( -		struct kgd_dev *kgd, struct kgd_mem *mem, void *drm_priv, bool *table_freed); +		struct kgd_dev *kgd, struct kgd_mem *mem, void *drm_priv);  int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(  		struct kgd_dev *kgd, struct kgd_mem *mem, void *drm_priv);  int amdgpu_amdkfd_gpuvm_sync_memory( diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 3b8e1ee8c475..4fb15750b9bb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1057,8 +1057,7 @@ static void unmap_bo_from_gpuvm(struct kgd_mem *mem,  static int update_gpuvm_pte(struct kgd_mem *mem,  			    struct kfd_mem_attachment *entry, -			    struct amdgpu_sync *sync, -			    bool *table_freed) +			    struct amdgpu_sync *sync)  {  	struct amdgpu_bo_va *bo_va = entry->bo_va;  	struct amdgpu_device *adev = entry->adev; @@ -1069,7 +1068,7 @@ static int update_gpuvm_pte(struct kgd_mem *mem,  		return ret;  	/* Update the page tables  */ -	ret = amdgpu_vm_bo_update(adev, bo_va, false, table_freed); +	ret = amdgpu_vm_bo_update(adev, bo_va, false);  	if (ret) {  		pr_err("amdgpu_vm_bo_update failed\n");  		return ret; @@ -1081,8 +1080,7 @@ static int update_gpuvm_pte(struct kgd_mem *mem,  static int map_bo_to_gpuvm(struct kgd_mem *mem,  			   struct kfd_mem_attachment *entry,  			   struct amdgpu_sync *sync, -			   bool no_update_pte, -			   bool *table_freed) +			   bool no_update_pte)  {  	int ret; @@ -1099,7 +1097,7 @@ static int map_bo_to_gpuvm(struct kgd_mem *mem,  	if (no_update_pte)  		return 0; -	ret = update_gpuvm_pte(mem, entry, sync, table_freed); +	ret = update_gpuvm_pte(mem, entry, sync);  	if (ret) {  		pr_err("update_gpuvm_pte() failed\n");  		goto update_gpuvm_pte_failed; @@ -1393,8 +1391,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(  		domain = alloc_domain = AMDGPU_GEM_DOMAIN_VRAM;  		alloc_flags = AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE;  		alloc_flags |= (flags & KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC) ? -			AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED : -			AMDGPU_GEM_CREATE_NO_CPU_ACCESS; +			AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED : 0;  	} else if (flags & KFD_IOC_ALLOC_MEM_FLAGS_GTT) {  		domain = alloc_domain = AMDGPU_GEM_DOMAIN_GTT;  		alloc_flags = 0; @@ -1597,8 +1594,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(  }  int amdgpu_amdkfd_gpuvm_map_memory_to_gpu( -		struct kgd_dev *kgd, struct kgd_mem *mem, -		void *drm_priv, bool *table_freed) +		struct kgd_dev *kgd, struct kgd_mem *mem, void *drm_priv)  {  	struct amdgpu_device *adev = get_amdgpu_device(kgd);  	struct amdgpu_vm *avm = drm_priv_to_vm(drm_priv); @@ -1686,7 +1682,7 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(  			 entry->va, entry->va + bo_size, entry);  		ret = map_bo_to_gpuvm(mem, entry, ctx.sync, -				      is_invalid_userptr, table_freed); +				      is_invalid_userptr);  		if (ret) {  			pr_err("Failed to map bo to gpuvm\n");  			goto out_unreserve; @@ -2136,7 +2132,7 @@ static int validate_invalid_user_pages(struct amdkfd_process_info *process_info)  				continue;  			kfd_mem_dmaunmap_attachment(mem, attachment); -			ret = update_gpuvm_pte(mem, attachment, &sync, NULL); +			ret = update_gpuvm_pte(mem, attachment, &sync);  			if (ret) {  				pr_err("%s: update PTE failed\n", __func__);  				/* make sure this gets validated again */ @@ -2342,7 +2338,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)  				continue;  			kfd_mem_dmaunmap_attachment(mem, attachment); -			ret = update_gpuvm_pte(mem, attachment, &sync_obj, NULL); +			ret = update_gpuvm_pte(mem, attachment, &sync_obj);  			if (ret) {  				pr_debug("Memory eviction: update PTE failed. Try again\n");  				goto validate_map_fail; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 76fe5b71e35d..30fa1f61e0e5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -781,7 +781,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)  	if (r)  		return r; -	r = amdgpu_vm_bo_update(adev, fpriv->prt_va, false, NULL); +	r = amdgpu_vm_bo_update(adev, fpriv->prt_va, false);  	if (r)  		return r; @@ -792,7 +792,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)  	if (amdgpu_mcbp || amdgpu_sriov_vf(adev)) {  		bo_va = fpriv->csa_va;  		BUG_ON(!bo_va); -		r = amdgpu_vm_bo_update(adev, bo_va, false, NULL); +		r = amdgpu_vm_bo_update(adev, bo_va, false);  		if (r)  			return r; @@ -811,7 +811,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)  		if (bo_va == NULL)  			continue; -		r = amdgpu_vm_bo_update(adev, bo_va, false, NULL); +		r = amdgpu_vm_bo_update(adev, bo_va, false);  		if (r)  			return r; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index d303e88e3c23..f3fd5ec710b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -3504,13 +3504,13 @@ int amdgpu_device_init(struct amdgpu_device *adev,  	r = amdgpu_device_get_job_timeout_settings(adev);  	if (r) {  		dev_err(adev->dev, "invalid lockup_timeout parameter syntax\n"); -		goto failed_unmap; +		return r;  	}  	/* early init functions */  	r = amdgpu_device_ip_early_init(adev);  	if (r) -		goto failed_unmap; +		return r;  	/* doorbell bar mapping and doorbell index init*/  	amdgpu_device_doorbell_init(adev); @@ -3736,10 +3736,6 @@ release_ras_con:  failed:  	amdgpu_vf_error_trans_all(adev); -failed_unmap: -	iounmap(adev->rmmio); -	adev->rmmio = NULL; -  	return r;  } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 71beb0db0125..361b86b71b56 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -1168,6 +1168,7 @@ static const struct pci_device_id pciidlist[] = {  	{0x1002, 0x734F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14},  	/* Renoir */ +	{0x1002, 0x15E7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU},  	{0x1002, 0x1636, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU},  	{0x1002, 0x1638, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU},  	{0x1002, 0x164C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU}, @@ -1189,6 +1190,10 @@ static const struct pci_device_id pciidlist[] = {  	/* Van Gogh */  	{0x1002, 0x163F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VANGOGH|AMD_IS_APU}, +	/* Yellow Carp */ +	{0x1002, 0x164D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_YELLOW_CARP|AMD_IS_APU}, +	{0x1002, 0x1681, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_YELLOW_CARP|AMD_IS_APU}, +  	/* Navy_Flounder */  	{0x1002, 0x73C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVY_FLOUNDER},  	{0x1002, 0x73C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVY_FLOUNDER}, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index b3404c43a911..854fc497844b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -255,6 +255,15 @@ static int amdgpu_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_str  	if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS)  		return -EPERM; +	/* Workaround for Thunk bug creating PROT_NONE,MAP_PRIVATE mappings +	 * for debugger access to invisible VRAM. Should have used MAP_SHARED +	 * instead. Clearing VM_MAYWRITE prevents the mapping from ever +	 * becoming writable and makes is_cow_mapping(vm_flags) false. +	 */ +	if (is_cow_mapping(vma->vm_flags) && +	    !(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC))) +		vma->vm_flags &= ~VM_MAYWRITE; +  	return drm_gem_ttm_mmap(obj, vma);  } @@ -612,7 +621,7 @@ static void amdgpu_gem_va_update_vm(struct amdgpu_device *adev,  	if (operation == AMDGPU_VA_OP_MAP ||  	    operation == AMDGPU_VA_OP_REPLACE) { -		r = amdgpu_vm_bo_update(adev, bo_va, false, NULL); +		r = amdgpu_vm_bo_update(adev, bo_va, false);  		if (r)  			goto error;  	} diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c index 32ce0e679dc7..83af307e97cd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c @@ -278,6 +278,21 @@ static bool amdgpu_msi_ok(struct amdgpu_device *adev)  	return true;  } +static void amdgpu_restore_msix(struct amdgpu_device *adev) +{ +	u16 ctrl; + +	pci_read_config_word(adev->pdev, adev->pdev->msix_cap + PCI_MSIX_FLAGS, &ctrl); +	if (!(ctrl & PCI_MSIX_FLAGS_ENABLE)) +		return; + +	/* VF FLR */ +	ctrl &= ~PCI_MSIX_FLAGS_ENABLE; +	pci_write_config_word(adev->pdev, adev->pdev->msix_cap + PCI_MSIX_FLAGS, ctrl); +	ctrl |= PCI_MSIX_FLAGS_ENABLE; +	pci_write_config_word(adev->pdev, adev->pdev->msix_cap + PCI_MSIX_FLAGS, ctrl); +} +  /**   * amdgpu_irq_init - initialize interrupt handling   * @@ -569,6 +584,9 @@ void amdgpu_irq_gpu_reset_resume_helper(struct amdgpu_device *adev)  {  	int i, j, k; +	if (amdgpu_sriov_vf(adev)) +		amdgpu_restore_msix(adev); +  	for (i = 0; i < AMDGPU_IRQ_CLIENTID_MAX; ++i) {  		if (!adev->irq.client[i].sources)  			continue; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c index c13b02caf8c3..fc66aca28594 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c @@ -809,7 +809,7 @@ static int amdgpu_ras_enable_all_features(struct amdgpu_device *adev,  /* query/inject/cure begin */  int amdgpu_ras_query_error_status(struct amdgpu_device *adev, -	struct ras_query_if *info) +				  struct ras_query_if *info)  {  	struct ras_manager *obj = amdgpu_ras_find_obj(adev, &info->head);  	struct ras_err_data err_data = {0, 0, 0, NULL}; @@ -1043,17 +1043,32 @@ int amdgpu_ras_error_inject(struct amdgpu_device *adev,  	return ret;  } -/* get the total error counts on all IPs */ -void amdgpu_ras_query_error_count(struct amdgpu_device *adev, -				  unsigned long *ce_count, -				  unsigned long *ue_count) +/** + * amdgpu_ras_query_error_count -- Get error counts of all IPs + * adev: pointer to AMD GPU device + * ce_count: pointer to an integer to be set to the count of correctible errors. + * ue_count: pointer to an integer to be set to the count of uncorrectible + * errors. + * + * If set, @ce_count or @ue_count, count and return the corresponding + * error counts in those integer pointers. Return 0 if the device + * supports RAS. Return -EOPNOTSUPP if the device doesn't support RAS. + */ +int amdgpu_ras_query_error_count(struct amdgpu_device *adev, +				 unsigned long *ce_count, +				 unsigned long *ue_count)  {  	struct amdgpu_ras *con = amdgpu_ras_get_context(adev);  	struct ras_manager *obj;  	unsigned long ce, ue;  	if (!adev->ras_enabled || !con) -		return; +		return -EOPNOTSUPP; + +	/* Don't count since no reporting. +	 */ +	if (!ce_count && !ue_count) +		return 0;  	ce = 0;  	ue = 0; @@ -1061,9 +1076,11 @@ void amdgpu_ras_query_error_count(struct amdgpu_device *adev,  		struct ras_query_if info = {  			.head = obj->head,  		}; +		int res; -		if (amdgpu_ras_query_error_status(adev, &info)) -			return; +		res = amdgpu_ras_query_error_status(adev, &info); +		if (res) +			return res;  		ce += info.ce_count;  		ue += info.ue_count; @@ -1074,6 +1091,8 @@ void amdgpu_ras_query_error_count(struct amdgpu_device *adev,  	if (ue_count)  		*ue_count = ue; + +	return 0;  }  /* query/inject/cure end */ @@ -2137,9 +2156,10 @@ static void amdgpu_ras_counte_dw(struct work_struct *work)  	/* Cache new values.  	 */ -	amdgpu_ras_query_error_count(adev, &ce_count, &ue_count); -	atomic_set(&con->ras_ce_count, ce_count); -	atomic_set(&con->ras_ue_count, ue_count); +	if (amdgpu_ras_query_error_count(adev, &ce_count, &ue_count) == 0) { +		atomic_set(&con->ras_ce_count, ce_count); +		atomic_set(&con->ras_ue_count, ue_count); +	}  	pm_runtime_mark_last_busy(dev->dev);  Out: @@ -2312,9 +2332,10 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev,  	/* Those are the cached values at init.  	 */ -	amdgpu_ras_query_error_count(adev, &ce_count, &ue_count); -	atomic_set(&con->ras_ce_count, ce_count); -	atomic_set(&con->ras_ue_count, ue_count); +	if (amdgpu_ras_query_error_count(adev, &ce_count, &ue_count) == 0) { +		atomic_set(&con->ras_ce_count, ce_count); +		atomic_set(&con->ras_ue_count, ue_count); +	}  	return 0;  cleanup: diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h index 256cea5d34f2..b504ed8c9b50 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h @@ -490,9 +490,9 @@ int amdgpu_ras_request_reset_on_boot(struct amdgpu_device *adev,  void amdgpu_ras_resume(struct amdgpu_device *adev);  void amdgpu_ras_suspend(struct amdgpu_device *adev); -void amdgpu_ras_query_error_count(struct amdgpu_device *adev, -				  unsigned long *ce_count, -				  unsigned long *ue_count); +int amdgpu_ras_query_error_count(struct amdgpu_device *adev, +				 unsigned long *ce_count, +				 unsigned long *ue_count);  /* error handling functions */  int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 79cfa2d68487..078c068937fe 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -1758,7 +1758,7 @@ int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,  	r = vm->update_funcs->commit(¶ms, fence);  	if (table_freed) -		*table_freed = *table_freed || params.table_freed; +		*table_freed = params.table_freed;  error_unlock:  	amdgpu_vm_eviction_unlock(vm); @@ -1816,7 +1816,6 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,   * @adev: amdgpu_device pointer   * @bo_va: requested BO and VM object   * @clear: if true clear the entries - * @table_freed: return true if page table is freed   *   * Fill in the page table entries for @bo_va.   * @@ -1824,7 +1823,7 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,   * 0 for success, -EINVAL for failure.   */  int amdgpu_vm_bo_update(struct amdgpu_device *adev, struct amdgpu_bo_va *bo_va, -			bool clear, bool *table_freed) +			bool clear)  {  	struct amdgpu_bo *bo = bo_va->base.bo;  	struct amdgpu_vm *vm = bo_va->base.vm; @@ -1903,7 +1902,7 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, struct amdgpu_bo_va *bo_va,  						resv, mapping->start,  						mapping->last, update_flags,  						mapping->offset, mem, -						pages_addr, last_update, table_freed); +						pages_addr, last_update, NULL);  		if (r)  			return r;  	} @@ -2155,7 +2154,7 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,  	list_for_each_entry_safe(bo_va, tmp, &vm->moved, base.vm_status) {  		/* Per VM BOs never need to bo cleared in the page tables */ -		r = amdgpu_vm_bo_update(adev, bo_va, false, NULL); +		r = amdgpu_vm_bo_update(adev, bo_va, false);  		if (r)  			return r;  	} @@ -2174,7 +2173,7 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,  		else  			clear = true; -		r = amdgpu_vm_bo_update(adev, bo_va, clear, NULL); +		r = amdgpu_vm_bo_update(adev, bo_va, clear);  		if (r)  			return r; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index ddb85a85cbba..f8fa653d4da7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h @@ -406,7 +406,7 @@ int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,  				struct dma_fence **fence, bool *free_table);  int amdgpu_vm_bo_update(struct amdgpu_device *adev,  			struct amdgpu_bo_va *bo_va, -			bool clear, bool *table_freed); +			bool clear);  bool amdgpu_vm_evictable(struct amdgpu_bo *bo);  void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,  			     struct amdgpu_bo *bo, bool evicted); diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c index 33324427b555..7e0d8c092c7e 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c @@ -766,7 +766,7 @@ static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {  static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev)  { -	adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_VBLANK6 + 1; +	adev->crtc_irq.num_types = adev->mode_info.num_crtc;  	adev->crtc_irq.funcs = &dce_virtual_crtc_irq_funcs;  } diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c index f5e9c022960b..a64b2c706090 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c @@ -3300,6 +3300,7 @@ static const struct soc15_reg_golden golden_settings_gc_10_3[] =  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_PERFCOUNTER7_SELECT, 0xf0f001ff, 0x00000000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_PERFCOUNTER8_SELECT, 0xf0f001ff, 0x00000000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_PERFCOUNTER9_SELECT, 0xf0f001ff, 0x00000000), +	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSX_DEBUG_1, 0x00010000, 0x00010020),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmTA_CNTL_AUX, 0xfff7ffff, 0x01030000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmUTCL1_CTRL, 0xffbfffff, 0x00a00000)  }; @@ -3379,6 +3380,7 @@ static const struct soc15_reg_golden golden_settings_gc_10_3_vangogh[] =  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmPA_SC_ENHANCE_2, 0xffffffbf, 0x00000020),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSPI_CONFIG_CNTL_1_Vangogh, 0xffffffff, 0x00070103),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQG_CONFIG, 0x000017ff, 0x00001000), +	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSX_DEBUG_1, 0x00010000, 0x00010020),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmTA_CNTL_AUX, 0xfff7ffff, 0x01030000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmUTCL1_CTRL, 0xffffffff, 0x00400000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmVGT_GS_MAX_WAVE_ID, 0x00000fff, 0x000000ff), @@ -3445,6 +3447,7 @@ static const struct soc15_reg_golden golden_settings_gc_10_3_4[] =  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_PERFCOUNTER7_SELECT, 0xf0f001ff, 0x00000000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_PERFCOUNTER8_SELECT, 0xf0f001ff, 0x00000000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_PERFCOUNTER9_SELECT, 0xf0f001ff, 0x00000000), +	SOC15_REG_GOLDEN_VALUE(GC, 0, mmSX_DEBUG_1, 0x00010000, 0x00010020),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmTA_CNTL_AUX, 0x01030000, 0x01030000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmUTCL1_CTRL, 0x03a00000, 0x00a00000),  	SOC15_REG_GOLDEN_VALUE(GC, 0, mmLDS_CONFIG,  0x00000020, 0x00000020) diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c index 3ee481557fc9..ff2307d7ee0f 100644 --- a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c +++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c @@ -252,7 +252,7 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct *work)  	 * otherwise the mailbox msg will be ruined/reseted by  	 * the VF FLR.  	 */ -	if (!down_read_trylock(&adev->reset_sem)) +	if (!down_write_trylock(&adev->reset_sem))  		return;  	amdgpu_virt_fini_data_exchange(adev); @@ -268,7 +268,7 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct *work)  flr_done:  	atomic_set(&adev->in_gpu_reset, 0); -	up_read(&adev->reset_sem); +	up_write(&adev->reset_sem);  	/* Trigger recovery for world switch failure if no TDR */  	if (amdgpu_device_should_recover_gpu(adev) diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c b/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c index 48e588d3c409..9f7aac435d69 100644 --- a/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c +++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c @@ -273,7 +273,7 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct *work)  	 * otherwise the mailbox msg will be ruined/reseted by  	 * the VF FLR.  	 */ -	if (!down_read_trylock(&adev->reset_sem)) +	if (!down_write_trylock(&adev->reset_sem))  		return;  	amdgpu_virt_fini_data_exchange(adev); @@ -289,7 +289,7 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct *work)  flr_done:  	atomic_set(&adev->in_gpu_reset, 0); -	up_read(&adev->reset_sem); +	up_write(&adev->reset_sem);  	/* Trigger recovery for world switch failure if no TDR */  	if (amdgpu_device_should_recover_gpu(adev) diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c b/drivers/gpu/drm/amd/amdgpu/nv.c index 94a2c0742ee5..94d029dbf30d 100644 --- a/drivers/gpu/drm/amd/amdgpu/nv.c +++ b/drivers/gpu/drm/amd/amdgpu/nv.c @@ -64,32 +64,13 @@  #include "smuio_v11_0.h"  #include "smuio_v11_0_6.h" -#define codec_info_build(type, width, height, level) \ -			 .codec_type = type,\ -			 .max_width = width,\ -			 .max_height = height,\ -			 .max_pixels_per_frame = height * width,\ -			 .max_level = level, -  static const struct amd_ip_funcs nv_common_ip_funcs;  /* Navi */  static const struct amdgpu_video_codec_info nv_video_codecs_encode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 2304, -		.max_pixels_per_frame = 4096 * 2304, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 4096, -		.max_height = 2304, -		.max_pixels_per_frame = 4096 * 2304, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)},  };  static const struct amdgpu_video_codecs nv_video_codecs_encode = @@ -101,55 +82,13 @@ static const struct amdgpu_video_codecs nv_video_codecs_encode =  /* Navi1x */  static const struct amdgpu_video_codec_info nv_video_codecs_decode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 3, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 5, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 52, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 4, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 186, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4906, 3)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4906, 5)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4906, 4)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)},  };  static const struct amdgpu_video_codecs nv_video_codecs_decode = @@ -161,62 +100,14 @@ static const struct amdgpu_video_codecs nv_video_codecs_decode =  /* Sienna Cichlid */  static const struct amdgpu_video_codec_info sc_video_codecs_decode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 3, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 5, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 52, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 4, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 186, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4906, 3)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4906, 5)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4906, 4)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, 8192, 4352, 0)},  };  static const struct amdgpu_video_codecs sc_video_codecs_decode = @@ -228,80 +119,20 @@ static const struct amdgpu_video_codecs sc_video_codecs_decode =  /* SRIOV Sienna Cichlid, not const since data is controlled by host */  static struct amdgpu_video_codec_info sriov_sc_video_codecs_encode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 2304, -		.max_pixels_per_frame = 4096 * 2304, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 4096, -		.max_height = 2304, -		.max_pixels_per_frame = 4096 * 2304, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)},  };  static struct amdgpu_video_codec_info sriov_sc_video_codecs_decode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 3, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 5, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 52, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 4, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 186, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 8192 * 4352, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4906, 3)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4906, 5)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4906, 4)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, 8192, 4352, 0)},  };  static struct amdgpu_video_codecs sriov_sc_video_codecs_encode = @@ -333,6 +164,19 @@ static const struct amdgpu_video_codecs bg_video_codecs_encode = {  	.codec_array = NULL,  }; +/* Yellow Carp*/ +static const struct amdgpu_video_codec_info yc_video_codecs_decode_array[] = { +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, +}; + +static const struct amdgpu_video_codecs yc_video_codecs_decode = { +	.codec_count = ARRAY_SIZE(yc_video_codecs_decode_array), +	.codec_array = yc_video_codecs_decode_array, +}; +  static int nv_query_video_codecs(struct amdgpu_device *adev, bool encode,  				 const struct amdgpu_video_codecs **codecs)  { @@ -353,12 +197,17 @@ static int nv_query_video_codecs(struct amdgpu_device *adev, bool encode,  	case CHIP_NAVY_FLOUNDER:  	case CHIP_DIMGREY_CAVEFISH:  	case CHIP_VANGOGH: -	case CHIP_YELLOW_CARP:  		if (encode)  			*codecs = &nv_video_codecs_encode;  		else  			*codecs = &sc_video_codecs_decode;  		return 0; +	case CHIP_YELLOW_CARP: +		if (encode) +			*codecs = &nv_video_codecs_encode; +		else +			*codecs = &yc_video_codecs_decode; +		return 0;  	case CHIP_BEIGE_GOBY:  		if (encode)  			*codecs = &bg_video_codecs_encode; @@ -1387,7 +1236,10 @@ static int nv_common_early_init(void *handle)  			AMD_PG_SUPPORT_VCN |  			AMD_PG_SUPPORT_VCN_DPG |  			AMD_PG_SUPPORT_JPEG; -		adev->external_rev_id = adev->rev_id + 0x01; +		if (adev->pdev->device == 0x1681) +			adev->external_rev_id = adev->rev_id + 0x19; +		else +			adev->external_rev_id = adev->rev_id + 0x01;  		break;  	default:  		/* FIXME: not supported yet */ diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c index 618e5b6b85d9..536d41f327c1 100644 --- a/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c +++ b/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c @@ -67,7 +67,7 @@ static int psp_v12_0_init_microcode(struct psp_context *psp)  	err = psp_init_asd_microcode(psp, chip_name);  	if (err) -		goto out; +		return err;  	snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ta.bin", chip_name);  	err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); @@ -80,7 +80,7 @@ static int psp_v12_0_init_microcode(struct psp_context *psp)  	} else {  		err = amdgpu_ucode_validate(adev->psp.ta_fw);  		if (err) -			goto out2; +			goto out;  		ta_hdr = (const struct ta_firmware_header_v1_0 *)  				 adev->psp.ta_fw->data; @@ -105,10 +105,9 @@ static int psp_v12_0_init_microcode(struct psp_context *psp)  	return 0; -out2: +out:  	release_firmware(adev->psp.ta_fw);  	adev->psp.ta_fw = NULL; -out:  	if (err) {  		dev_err(adev->dev,  			"psp v12.0: Failed to load firmware \"%s\"\n", diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c index b02436401d46..b7d350be8050 100644 --- a/drivers/gpu/drm/amd/amdgpu/soc15.c +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c @@ -88,20 +88,8 @@  /* Vega, Raven, Arcturus */  static const struct amdgpu_video_codec_info vega_video_codecs_encode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 2304, -		.max_pixels_per_frame = 4096 * 2304, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 4096, -		.max_height = 2304, -		.max_pixels_per_frame = 4096 * 2304, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)},  };  static const struct amdgpu_video_codecs vega_video_codecs_encode = @@ -113,48 +101,12 @@ static const struct amdgpu_video_codecs vega_video_codecs_encode =  /* Vega */  static const struct amdgpu_video_codec_info vega_video_codecs_decode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 3, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 5, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 52, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 4, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 186, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4906, 3)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4906, 5)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4906, 4)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 4096, 186)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)},  };  static const struct amdgpu_video_codecs vega_video_codecs_decode = @@ -166,55 +118,13 @@ static const struct amdgpu_video_codecs vega_video_codecs_decode =  /* Raven */  static const struct amdgpu_video_codec_info rv_video_codecs_decode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 3, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 5, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 52, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 4, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 186, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4906, 3)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4906, 5)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4906, 4)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 4096, 186)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 4096, 4096, 0)},  };  static const struct amdgpu_video_codecs rv_video_codecs_decode = @@ -226,55 +136,13 @@ static const struct amdgpu_video_codecs rv_video_codecs_decode =  /* Renoir, Arcturus */  static const struct amdgpu_video_codec_info rn_video_codecs_decode_array[] =  { -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 3, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 5, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 52, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 4, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 186, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, -		.max_width = 4096, -		.max_height = 4096, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, -	{ -		.codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, -		.max_width = 8192, -		.max_height = 4352, -		.max_pixels_per_frame = 4096 * 4096, -		.max_level = 0, -	}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4906, 3)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4906, 5)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4906, 4)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)},  };  static const struct amdgpu_video_codecs rn_video_codecs_decode = diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index 67541c30327a..e48acdd03c1a 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -1393,7 +1393,6 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,  	long err = 0;  	int i;  	uint32_t *devices_arr = NULL; -	bool table_freed = false;  	dev = kfd_device_by_id(GET_GPU_ID(args->handle));  	if (!dev) @@ -1451,8 +1450,7 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,  			goto get_mem_obj_from_handle_failed;  		}  		err = amdgpu_amdkfd_gpuvm_map_memory_to_gpu( -			peer->kgd, (struct kgd_mem *)mem, -			peer_pdd->drm_priv, &table_freed); +			peer->kgd, (struct kgd_mem *)mem, peer_pdd->drm_priv);  		if (err) {  			pr_err("Failed to map to gpu %d/%d\n",  			       i, args->n_devices); @@ -1470,17 +1468,16 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,  	}  	/* Flush TLBs after waiting for the page table updates to complete */ -	if (table_freed) { -		for (i = 0; i < args->n_devices; i++) { -			peer = kfd_device_by_id(devices_arr[i]); -			if (WARN_ON_ONCE(!peer)) -				continue; -			peer_pdd = kfd_get_process_device_data(peer, p); -			if (WARN_ON_ONCE(!peer_pdd)) -				continue; -			kfd_flush_tlb(peer_pdd, TLB_FLUSH_LEGACY); -		} +	for (i = 0; i < args->n_devices; i++) { +		peer = kfd_device_by_id(devices_arr[i]); +		if (WARN_ON_ONCE(!peer)) +			continue; +		peer_pdd = kfd_get_process_device_data(peer, p); +		if (WARN_ON_ONCE(!peer_pdd)) +			continue; +		kfd_flush_tlb(peer_pdd, TLB_FLUSH_LEGACY);  	} +  	kfree(devices_arr);  	return err; @@ -1568,27 +1565,10 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep,  		}  		args->n_success = i+1;  	} -	mutex_unlock(&p->mutex); - -	err = amdgpu_amdkfd_gpuvm_sync_memory(dev->kgd, (struct kgd_mem *) mem, true); -	if (err) { -		pr_debug("Sync memory failed, wait interrupted by user signal\n"); -		goto sync_memory_failed; -	} - -	/* Flush TLBs after waiting for the page table updates to complete */ -	for (i = 0; i < args->n_devices; i++) { -		peer = kfd_device_by_id(devices_arr[i]); -		if (WARN_ON_ONCE(!peer)) -			continue; -		peer_pdd = kfd_get_process_device_data(peer, p); -		if (WARN_ON_ONCE(!peer_pdd)) -			continue; -		kfd_flush_tlb(peer_pdd, TLB_FLUSH_HEAVYWEIGHT); -	} -  	kfree(devices_arr); +	mutex_unlock(&p->mutex); +  	return 0;  bind_process_to_device_failed: @@ -1596,7 +1576,6 @@ get_mem_obj_from_handle_failed:  unmap_memory_from_gpu_failed:  	mutex_unlock(&p->mutex);  copy_from_user_failed: -sync_memory_failed:  	kfree(devices_arr);  	return err;  } diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c index 21ec8a18cad2..8a2c6fc438c0 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c @@ -714,8 +714,7 @@ static int kfd_process_alloc_gpuvm(struct kfd_process_device *pdd,  	if (err)  		goto err_alloc_mem; -	err = amdgpu_amdkfd_gpuvm_map_memory_to_gpu(kdev->kgd, mem, -			pdd->drm_priv, NULL); +	err = amdgpu_amdkfd_gpuvm_map_memory_to_gpu(kdev->kgd, mem, pdd->drm_priv);  	if (err)  		goto err_map_mem; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c index 9a71d8919bd6..c7b364e4a287 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c @@ -2375,21 +2375,27 @@ static bool svm_range_skip_recover(struct svm_range *prange)  static void  svm_range_count_fault(struct amdgpu_device *adev, struct kfd_process *p, -		      struct svm_range *prange, int32_t gpuidx) +		      int32_t gpuidx)  {  	struct kfd_process_device *pdd; -	if (gpuidx == MAX_GPU_INSTANCE) -		/* fault is on different page of same range -		 * or fault is skipped to recover later -		 */ -		pdd = svm_range_get_pdd_by_adev(prange, adev); -	else -		/* fault recovered -		 * or fault cannot recover because GPU no access on the range -		 */ -		pdd = kfd_process_device_from_gpuidx(p, gpuidx); +	/* fault is on different page of same range +	 * or fault is skipped to recover later +	 * or fault is on invalid virtual address +	 */ +	if (gpuidx == MAX_GPU_INSTANCE) { +		uint32_t gpuid; +		int r; +		r = kfd_process_gpuid_from_kgd(p, adev, &gpuid, &gpuidx); +		if (r < 0) +			return; +	} + +	/* fault is recovered +	 * or fault cannot recover because GPU no access on the range +	 */ +	pdd = kfd_process_device_from_gpuidx(p, gpuidx);  	if (pdd)  		WRITE_ONCE(pdd->faults, pdd->faults + 1);  } @@ -2525,7 +2531,7 @@ out_unlock_svms:  	mutex_unlock(&svms->lock);  	mmap_read_unlock(mm); -	svm_range_count_fault(adev, p, prange, gpuidx); +	svm_range_count_fault(adev, p, gpuidx);  	mmput(mm);  out: 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 01e1062dc235..b53f49a23ddc 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -2429,9 +2429,9 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)  	max_cll = conn_base->hdr_sink_metadata.hdmi_type1.max_cll;  	min_cll = conn_base->hdr_sink_metadata.hdmi_type1.min_cll; -	if (caps->ext_caps->bits.oled == 1 || +	if (caps->ext_caps->bits.oled == 1 /*||  	    caps->ext_caps->bits.sdr_aux_backlight_control == 1 || -	    caps->ext_caps->bits.hdr_aux_backlight_control == 1) +	    caps->ext_caps->bits.hdr_aux_backlight_control == 1*/)  		caps->aux_support = true;  	if (amdgpu_backlight == 0) @@ -9191,7 +9191,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)  #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) ||		\  	defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)  	/* restore the backlight level */ -	if (dm->backlight_dev) +	if (dm->backlight_dev && (amdgpu_dm_backlight_get_level(dm) != dm->brightness[0]))  		amdgpu_dm_backlight_set_level(dm, dm->brightness[0]);  #endif  	/* diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c index 6e0c5c664fdc..a5331b96f551 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c @@ -197,7 +197,7 @@ void dcn20_update_clocks_update_dentist(struct clk_mgr_internal *clk_mgr, struct  	REG_UPDATE(DENTIST_DISPCLK_CNTL,  			DENTIST_DISPCLK_WDIVIDER, dispclk_wdivider); -//	REG_WAIT(DENTIST_DISPCLK_CNTL, DENTIST_DISPCLK_CHG_DONE, 1, 5, 100); +	REG_WAIT(DENTIST_DISPCLK_CNTL, DENTIST_DISPCLK_CHG_DONE, 1, 50, 1000);  	REG_UPDATE(DENTIST_DISPCLK_CNTL,  			DENTIST_DPPCLK_WDIVIDER, dppclk_wdivider);  	REG_WAIT(DENTIST_DISPCLK_CNTL, DENTIST_DPPCLK_CHG_DONE, 1, 5, 100); diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c index 513676a6f52b..af7004b770ae 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c @@ -190,6 +190,10 @@ void dcn3_init_clocks(struct clk_mgr *clk_mgr_base)  			&clk_mgr_base->bw_params->clk_table.entries[0].dtbclk_mhz,  			&num_levels); +	/* SOCCLK */ +	dcn3_init_single_clock(clk_mgr, PPCLK_SOCCLK, +					&clk_mgr_base->bw_params->clk_table.entries[0].socclk_mhz, +					&num_levels);  	// DPREFCLK ???  	/* DISPCLK */ diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c index 7b7d884d58be..4a4894e9d9c9 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c @@ -48,6 +48,21 @@  #include "dc_dmub_srv.h" +#include "yellow_carp_offset.h" + +#define regCLK1_CLK_PLL_REQ			0x0237 +#define regCLK1_CLK_PLL_REQ_BASE_IDX		0 + +#define CLK1_CLK_PLL_REQ__FbMult_int__SHIFT	0x0 +#define CLK1_CLK_PLL_REQ__PllSpineDiv__SHIFT	0xc +#define CLK1_CLK_PLL_REQ__FbMult_frac__SHIFT	0x10 +#define CLK1_CLK_PLL_REQ__FbMult_int_MASK	0x000001FFL +#define CLK1_CLK_PLL_REQ__PllSpineDiv_MASK	0x0000F000L +#define CLK1_CLK_PLL_REQ__FbMult_frac_MASK	0xFFFF0000L + +#define REG(reg_name) \ +	(CLK_BASE.instance[0].segment[reg ## reg_name ## _BASE_IDX] + reg ## reg_name) +  #define TO_CLK_MGR_DCN31(clk_mgr)\  	container_of(clk_mgr, struct clk_mgr_dcn31, base) @@ -124,10 +139,10 @@ static void dcn31_update_clocks(struct clk_mgr *clk_mgr_base,  	 * also if safe to lower is false, we just go in the higher state  	 */  	if (safe_to_lower) { -		if (new_clocks->z9_support == DCN_Z9_SUPPORT_ALLOW && -				new_clocks->z9_support != clk_mgr_base->clks.z9_support) { +		if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_ALLOW && +				new_clocks->zstate_support != clk_mgr_base->clks.zstate_support) {  			dcn31_smu_set_Z9_support(clk_mgr, true); -			clk_mgr_base->clks.z9_support = new_clocks->z9_support; +			clk_mgr_base->clks.zstate_support = new_clocks->zstate_support;  		}  		if (clk_mgr_base->clks.dtbclk_en && !new_clocks->dtbclk_en) { @@ -148,10 +163,10 @@ static void dcn31_update_clocks(struct clk_mgr *clk_mgr_base,  			}  		}  	} else { -		if (new_clocks->z9_support == DCN_Z9_SUPPORT_DISALLOW && -				new_clocks->z9_support != clk_mgr_base->clks.z9_support) { +		if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_DISALLOW && +				new_clocks->zstate_support != clk_mgr_base->clks.zstate_support) {  			dcn31_smu_set_Z9_support(clk_mgr, false); -			clk_mgr_base->clks.z9_support = new_clocks->z9_support; +			clk_mgr_base->clks.zstate_support = new_clocks->zstate_support;  		}  		if (!clk_mgr_base->clks.dtbclk_en && new_clocks->dtbclk_en) { @@ -229,7 +244,32 @@ static void dcn31_update_clocks(struct clk_mgr *clk_mgr_base,  static int get_vco_frequency_from_reg(struct clk_mgr_internal *clk_mgr)  { -	return 0; +	/* get FbMult value */ +	struct fixed31_32 pll_req; +	unsigned int fbmult_frac_val = 0; +	unsigned int fbmult_int_val = 0; + +	/* +	 * Register value of fbmult is in 8.16 format, we are converting to 31.32 +	 * to leverage the fix point operations available in driver +	 */ + +	REG_GET(CLK1_CLK_PLL_REQ, FbMult_frac, &fbmult_frac_val); /* 16 bit fractional part*/ +	REG_GET(CLK1_CLK_PLL_REQ, FbMult_int, &fbmult_int_val); /* 8 bit integer part */ + +	pll_req = dc_fixpt_from_int(fbmult_int_val); + +	/* +	 * since fractional part is only 16 bit in register definition but is 32 bit +	 * in our fix point definiton, need to shift left by 16 to obtain correct value +	 */ +	pll_req.value |= fbmult_frac_val << 16; + +	/* multiply by REFCLK period */ +	pll_req = dc_fixpt_mul_int(pll_req, clk_mgr->dfs_ref_freq_khz); + +	/* integer part is now VCO frequency in kHz */ +	return dc_fixpt_floor(pll_req);  }  static void dcn31_enable_pme_wa(struct clk_mgr *clk_mgr_base) @@ -246,7 +286,7 @@ static void dcn31_init_clocks(struct clk_mgr *clk_mgr)  	clk_mgr->clks.p_state_change_support = true;  	clk_mgr->clks.prev_p_state_change_support = true;  	clk_mgr->clks.pwr_state = DCN_PWR_STATE_UNKNOWN; -	clk_mgr->clks.z9_support = DCN_Z9_SUPPORT_UNKNOWN; +	clk_mgr->clks.zstate_support = DCN_ZSTATE_SUPPORT_UNKNOWN;  }  static bool dcn31_are_clock_states_equal(struct dc_clocks *a, @@ -260,7 +300,7 @@ static bool dcn31_are_clock_states_equal(struct dc_clocks *a,  		return false;  	else if (a->dcfclk_deep_sleep_khz != b->dcfclk_deep_sleep_khz)  		return false; -	else if (a->z9_support != b->z9_support) +	else if (a->zstate_support != b->zstate_support)  		return false;  	else if (a->dtbclk_en != b->dtbclk_en)  		return false; @@ -592,6 +632,7 @@ void dcn31_clk_mgr_construct(  	clk_mgr->base.dprefclk_ss_percentage = 0;  	clk_mgr->base.dprefclk_ss_divider = 1000;  	clk_mgr->base.ss_on_dprefclk = false; +	clk_mgr->base.dfs_ref_freq_khz = 48000;  	clk_mgr->smu_wm_set.wm_set = (struct dcn31_watermarks *)dm_helpers_allocate_gpu_mem(  				clk_mgr->base.base.ctx, diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.h b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.h index cc21cf75eafd..f8f100535526 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.h +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.h @@ -27,60 +27,6 @@  #define __DCN31_CLK_MGR_H__  #include "clk_mgr_internal.h" -//CLK1_CLK_PLL_REQ -#ifndef CLK11_CLK1_CLK_PLL_REQ__FbMult_int__SHIFT -#define CLK11_CLK1_CLK_PLL_REQ__FbMult_int__SHIFT                                                                   0x0 -#define CLK11_CLK1_CLK_PLL_REQ__PllSpineDiv__SHIFT                                                                  0xc -#define CLK11_CLK1_CLK_PLL_REQ__FbMult_frac__SHIFT                                                                  0x10 -#define CLK11_CLK1_CLK_PLL_REQ__FbMult_int_MASK                                                                     0x000001FFL -#define CLK11_CLK1_CLK_PLL_REQ__PllSpineDiv_MASK                                                                    0x0000F000L -#define CLK11_CLK1_CLK_PLL_REQ__FbMult_frac_MASK                                                                    0xFFFF0000L -//CLK1_CLK0_DFS_CNTL -#define CLK11_CLK1_CLK0_DFS_CNTL__CLK0_DIVIDER__SHIFT                                                               0x0 -#define CLK11_CLK1_CLK0_DFS_CNTL__CLK0_DIVIDER_MASK                                                                 0x0000007FL -/*DPREF clock related*/ -#define CLK0_CLK3_DFS_CNTL__CLK3_DIVIDER__SHIFT                                                               0x0 -#define CLK0_CLK3_DFS_CNTL__CLK3_DIVIDER_MASK                                                                 0x0000007FL -#define CLK1_CLK3_DFS_CNTL__CLK3_DIVIDER__SHIFT                                                               0x0 -#define CLK1_CLK3_DFS_CNTL__CLK3_DIVIDER_MASK                                                                 0x0000007FL -#define CLK2_CLK3_DFS_CNTL__CLK3_DIVIDER__SHIFT                                                               0x0 -#define CLK2_CLK3_DFS_CNTL__CLK3_DIVIDER_MASK                                                                 0x0000007FL -#define CLK3_CLK3_DFS_CNTL__CLK3_DIVIDER__SHIFT                                                               0x0 -#define CLK3_CLK3_DFS_CNTL__CLK3_DIVIDER_MASK                                                                 0x0000007FL - -//CLK3_0_CLK3_CLK_PLL_REQ -#define CLK3_0_CLK3_CLK_PLL_REQ__FbMult_int__SHIFT                                                            0x0 -#define CLK3_0_CLK3_CLK_PLL_REQ__PllSpineDiv__SHIFT                                                           0xc -#define CLK3_0_CLK3_CLK_PLL_REQ__FbMult_frac__SHIFT                                                           0x10 -#define CLK3_0_CLK3_CLK_PLL_REQ__FbMult_int_MASK                                                              0x000001FFL -#define CLK3_0_CLK3_CLK_PLL_REQ__PllSpineDiv_MASK                                                             0x0000F000L -#define CLK3_0_CLK3_CLK_PLL_REQ__FbMult_frac_MASK                                                             0xFFFF0000L - -#define mmCLK0_CLK3_DFS_CNTL                            0x16C60 -#define mmCLK00_CLK0_CLK3_DFS_CNTL                      0x16C60 -#define mmCLK01_CLK0_CLK3_DFS_CNTL                      0x16E60 -#define mmCLK02_CLK0_CLK3_DFS_CNTL                      0x17060 -#define mmCLK03_CLK0_CLK3_DFS_CNTL                      0x17260 - -#define mmCLK0_CLK_PLL_REQ                              0x16C10 -#define mmCLK00_CLK0_CLK_PLL_REQ                        0x16C10 -#define mmCLK01_CLK0_CLK_PLL_REQ                        0x16E10 -#define mmCLK02_CLK0_CLK_PLL_REQ                        0x17010 -#define mmCLK03_CLK0_CLK_PLL_REQ                        0x17210 - -#define mmCLK1_CLK_PLL_REQ                              0x1B00D -#define mmCLK10_CLK1_CLK_PLL_REQ                        0x1B00D -#define mmCLK11_CLK1_CLK_PLL_REQ                        0x1B20D -#define mmCLK12_CLK1_CLK_PLL_REQ                        0x1B40D -#define mmCLK13_CLK1_CLK_PLL_REQ                        0x1B60D - -#define mmCLK2_CLK_PLL_REQ                              0x17E0D - -/*AMCLK*/ -#define mmCLK11_CLK1_CLK0_DFS_CNTL                      0x1B23F -#define mmCLK11_CLK1_CLK_PLL_REQ                        0x1B20D -#endif -  struct dcn31_watermarks;  struct dcn31_smu_watermark_set { diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c index 66db5e988bc1..dad4a4c18bcf 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c @@ -31,8 +31,8 @@  #include "dcn31_smu.h"  #include "yellow_carp_offset.h" -#include "mp/mp_13_0_1_offset.h" -#include "mp/mp_13_0_1_sh_mask.h" +#include "mp/mp_13_0_2_offset.h" +#include "mp/mp_13_0_2_sh_mask.h"  #define REG(reg_name) \  	(MP0_BASE.instance[0].segment[reg ## reg_name ## _BASE_IDX] + reg ## reg_name) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c index b8832bdde2bc..9fb8c46dc606 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c @@ -1620,11 +1620,12 @@ enum dc_status dpcd_configure_lttpr_mode(struct dc_link *link, struct link_train  {  	enum dc_status status = DC_OK; -	if (lt_settings->lttpr_mode == LTTPR_MODE_NON_TRANSPARENT) -		status = configure_lttpr_mode_non_transparent(link, lt_settings); -	else +	if (lt_settings->lttpr_mode == LTTPR_MODE_TRANSPARENT)  		status = configure_lttpr_mode_transparent(link); +	else if (lt_settings->lttpr_mode == LTTPR_MODE_NON_TRANSPARENT) +		status = configure_lttpr_mode_non_transparent(link, lt_settings); +  	return status;  } @@ -1784,7 +1785,6 @@ bool perform_link_training_with_retries(  		link_enc = stream->link_enc;  	else  		link_enc = link->link_enc; -	ASSERT(link_enc);  	/* We need to do this before the link training to ensure the idle pattern in SST  	 * mode will be sent right after the link training @@ -1820,8 +1820,7 @@ bool perform_link_training_with_retries(  					 */  					panel_mode = DP_PANEL_MODE_DEFAULT;  				} -			} else -				panel_mode = DP_PANEL_MODE_DEFAULT; +			}  		}  #endif @@ -4650,7 +4649,10 @@ enum dp_panel_mode dp_get_panel_mode(struct dc_link *link)  		}  	} -	if (link->dpcd_caps.panel_mode_edp) { +	if (link->dpcd_caps.panel_mode_edp && +		(link->connector_signal == SIGNAL_TYPE_EDP || +		 (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT && +		  link->is_internal_display))) {  		return DP_PANEL_MODE_EDP;  	} @@ -4914,9 +4916,7 @@ bool dc_link_set_default_brightness_aux(struct dc_link *link)  {  	uint32_t default_backlight; -	if (link && -		(link->dpcd_sink_ext_caps.bits.hdr_aux_backlight_control == 1 || -		link->dpcd_sink_ext_caps.bits.sdr_aux_backlight_control == 1)) { +	if (link && link->dpcd_sink_ext_caps.bits.oled == 1) {  		if (!dc_link_read_default_bl_aux(link, &default_backlight))  			default_backlight = 150000;  		// if < 5 nits or > 5000, it might be wrong readback diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c index a6a67244a322..1596f6b7fed7 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -1062,7 +1062,7 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)  	 * so use only 30 bpp on DCE_VERSION_11_0. Testing with DCE 11.2 and 8.3  	 * did not show such problems, so this seems to be the exception.  	 */ -	if (plane_state->ctx->dce_version != DCE_VERSION_11_0) +	if (plane_state->ctx->dce_version > DCE_VERSION_11_0)  		pipe_ctx->plane_res.scl_data.lb_params.depth = LB_PIXEL_DEPTH_36BPP;  	else  		pipe_ctx->plane_res.scl_data.lb_params.depth = LB_PIXEL_DEPTH_30BPP; diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index 45640f1c26c4..8dcea8ff5c5a 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -354,10 +354,10 @@ enum dcn_pwr_state {  };  #if defined(CONFIG_DRM_AMD_DC_DCN) -enum dcn_z9_support_state { -	DCN_Z9_SUPPORT_UNKNOWN, -	DCN_Z9_SUPPORT_ALLOW, -	DCN_Z9_SUPPORT_DISALLOW, +enum dcn_zstate_support_state { +	DCN_ZSTATE_SUPPORT_UNKNOWN, +	DCN_ZSTATE_SUPPORT_ALLOW, +	DCN_ZSTATE_SUPPORT_DISALLOW,  };  #endif  /* @@ -378,7 +378,7 @@ struct dc_clocks {  	int dramclk_khz;  	bool p_state_change_support;  #if defined(CONFIG_DRM_AMD_DC_DCN) -	enum dcn_z9_support_state z9_support; +	enum dcn_zstate_support_state zstate_support;  	bool dtbclk_en;  #endif  	enum dcn_pwr_state pwr_state; diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h index df6539e4c730..0464a8f3db3c 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h @@ -636,6 +636,7 @@ struct dce_hwseq_registers {  	uint32_t ODM_MEM_PWR_CTRL3;  	uint32_t DMU_MEM_PWR_CNTL;  	uint32_t MMHUBBUB_MEM_PWR_CNTL; +	uint32_t DCHUBBUB_ARB_HOSTVM_CNTL;  };   /* set field name */  #define HWS_SF(blk_name, reg_name, field_name, post_fix)\ @@ -1110,7 +1111,8 @@ struct dce_hwseq_registers {  	type DOMAIN_POWER_FORCEON;\  	type DOMAIN_POWER_GATE;\  	type DOMAIN_PGFSM_PWR_STATUS;\ -	type HPO_HDMISTREAMCLK_G_GATE_DIS; +	type HPO_HDMISTREAMCLK_G_GATE_DIS;\ +	type DISABLE_HOSTVM_FORCE_ALLOW_PSTATE;  struct dce_hwseq_shift {  	HWSEQ_REG_FIELD_LIST(uint8_t) diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c index 673b93f4fea5..cb9767ddf93d 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c @@ -217,6 +217,8 @@ static void dpp1_dscl_set_lb(  	const struct line_buffer_params *lb_params,  	enum lb_memory_config mem_size_config)  { +	uint32_t max_partitions = 63; /* Currently hardcoded on all ASICs before DCN 3.2 */ +  	/* LB */  	if (dpp->base.caps->dscl_data_proc_format == DSCL_DATA_PRCESSING_FIXED_FORMAT) {  		/* DSCL caps: pixel data processed in fixed format */ @@ -239,9 +241,12 @@ static void dpp1_dscl_set_lb(  			LB_DATA_FORMAT__ALPHA_EN, lb_params->alpha_en); /* Alpha enable */  	} +	if (dpp->base.caps->max_lb_partitions == 31) +		max_partitions = 31; +  	REG_SET_2(LB_MEMORY_CTRL, 0,  		MEMORY_CONFIG, mem_size_config, -		LB_MAX_PARTITIONS, 63); +		LB_MAX_PARTITIONS, max_partitions);  }  static const uint16_t *dpp1_dscl_get_filter_coeffs_64p(int taps, struct fixed31_32 ratio) diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c index 1b05a37b674d..b173fa3653b5 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c @@ -2093,8 +2093,10 @@ int dcn20_populate_dml_pipes_from_context(  				- timing->v_border_bottom;  		pipes[pipe_cnt].pipe.dest.htotal = timing->h_total;  		pipes[pipe_cnt].pipe.dest.vtotal = v_total; -		pipes[pipe_cnt].pipe.dest.hactive = timing->h_addressable; -		pipes[pipe_cnt].pipe.dest.vactive = timing->v_addressable; +		pipes[pipe_cnt].pipe.dest.hactive = +			timing->h_addressable + timing->h_border_left + timing->h_border_right; +		pipes[pipe_cnt].pipe.dest.vactive = +			timing->v_addressable + timing->v_border_top + timing->v_border_bottom;  		pipes[pipe_cnt].pipe.dest.interlaced = timing->flags.INTERLACE;  		pipes[pipe_cnt].pipe.dest.pixel_rate_mhz = timing->pix_clk_100hz/10000.0;  		if (timing->timing_3d_format == TIMING_3D_FORMAT_HW_FRAME_PACKING) @@ -3079,6 +3081,37 @@ static bool is_dtbclk_required(struct dc *dc, struct dc_state *context)  	return false;  } +static enum dcn_zstate_support_state  decide_zstate_support(struct dc *dc, struct dc_state *context) +{ +	int plane_count; +	int i; + +	plane_count = 0; +	for (i = 0; i < dc->res_pool->pipe_count; i++) { +		if (context->res_ctx.pipe_ctx[i].plane_state) +			plane_count++; +	} + +	/* +	 * Zstate is allowed in following scenarios: +	 * 	1. Single eDP with PSR enabled +	 * 	2. 0 planes (No memory requests) +	 * 	3. Single eDP without PSR but > 5ms stutter period +	 */ +	if (plane_count == 0) +		return DCN_ZSTATE_SUPPORT_ALLOW; +	else if (context->stream_count == 1 &&  context->streams[0]->signal == SIGNAL_TYPE_EDP) { +		struct dc_link *link = context->streams[0]->sink->link; + +		if ((link->link_index == 0 && link->psr_settings.psr_feature_enabled) +				|| context->bw_ctx.dml.vba.StutterPeriod > 5000.0) +			return DCN_ZSTATE_SUPPORT_ALLOW; +		else +			return DCN_ZSTATE_SUPPORT_DISALLOW; +	} else +		return DCN_ZSTATE_SUPPORT_DISALLOW; +} +  void dcn20_calculate_dlg_params(  		struct dc *dc, struct dc_state *context,  		display_e2e_pipe_params_st *pipes, @@ -3086,7 +3119,6 @@ void dcn20_calculate_dlg_params(  		int vlevel)  {  	int i, pipe_idx; -	int plane_count;  	/* Writeback MCIF_WB arbitration parameters */  	dc->res_pool->funcs->set_mcif_arb_params(dc, context, pipes, pipe_cnt); @@ -3102,17 +3134,7 @@ void dcn20_calculate_dlg_params(  							!= dm_dram_clock_change_unsupported;  	context->bw_ctx.bw.dcn.clk.dppclk_khz = 0; -	context->bw_ctx.bw.dcn.clk.z9_support = (context->bw_ctx.dml.vba.StutterPeriod > 5000.0) ? -			DCN_Z9_SUPPORT_ALLOW : DCN_Z9_SUPPORT_DISALLOW; - -	plane_count = 0; -	for (i = 0; i < dc->res_pool->pipe_count; i++) { -		if (context->res_ctx.pipe_ctx[i].plane_state) -			plane_count++; -	} - -	if (plane_count == 0) -		context->bw_ctx.bw.dcn.clk.z9_support = DCN_Z9_SUPPORT_ALLOW; +	context->bw_ctx.bw.dcn.clk.zstate_support = decide_zstate_support(dc, context);  	context->bw_ctx.bw.dcn.clk.dtbclk_en = is_dtbclk_required(dc, context); diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c index f3d98e3ba624..bf0a198eae15 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c @@ -109,6 +109,7 @@ struct _vcs_dpi_ip_params_st dcn2_1_ip = {  	.max_page_table_levels = 4,  	.pte_chunk_size_kbytes = 2,  	.meta_chunk_size_kbytes = 2, +	.min_meta_chunk_size_bytes = 256,  	.writeback_chunk_size_kbytes = 2,  	.line_buffer_size_bits = 789504,  	.is_line_buffer_bpp_fixed = 0, diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c index 2140b75540cf..23a52d47e61c 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c +++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c @@ -383,13 +383,6 @@ bool dpp3_get_optimal_number_of_taps(  	int min_taps_y, min_taps_c;  	enum lb_memory_config lb_config; -	/* Some ASICs does not support  FP16 scaling, so we reject modes require this*/ -	if (scl_data->viewport.width  != scl_data->h_active && -		scl_data->viewport.height != scl_data->v_active && -		dpp->caps->dscl_data_proc_format == DSCL_DATA_PRCESSING_FIXED_FORMAT && -		scl_data->format == PIXEL_FORMAT_FP16) -		return false; -  	if (scl_data->viewport.width > scl_data->h_active &&  		dpp->ctx->dc->debug.max_downscale_src_width != 0 &&  		scl_data->viewport.width > dpp->ctx->dc->debug.max_downscale_src_width) @@ -1440,15 +1433,6 @@ bool dpp3_construct(  	dpp->tf_shift = tf_shift;  	dpp->tf_mask = tf_mask; -	dpp->lb_pixel_depth_supported = -		LB_PIXEL_DEPTH_18BPP | -		LB_PIXEL_DEPTH_24BPP | -		LB_PIXEL_DEPTH_30BPP | -		LB_PIXEL_DEPTH_36BPP; - -	dpp->lb_bits_per_entry = LB_BITS_PER_ENTRY; -	dpp->lb_memory_size = LB_TOTAL_NUMBER_OF_ENTRIES; /*0x1404*/ -  	return true;  } diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.h b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.h index 3fa86cd090a0..ac644ae6b9f2 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.h +++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.h @@ -154,6 +154,7 @@  	SRI(COLOR_KEYER_BLUE, CNVC_CFG, id), \  	SRI(CURSOR_CONTROL, CURSOR0_, id),\  	SRI(OBUF_MEM_PWR_CTRL, DSCL, id),\ +	SRI(DSCL_MEM_PWR_STATUS, DSCL, id), \  	SRI(DSCL_MEM_PWR_CTRL, DSCL, id)  #define DPP_REG_LIST_DCN30(id)\ @@ -163,8 +164,6 @@  	SRI(CM_SHAPER_LUT_DATA, CM, id),\  	SRI(CM_MEM_PWR_CTRL2, CM, id), \  	SRI(CM_MEM_PWR_STATUS2, CM, id), \ -	SRI(DSCL_MEM_PWR_STATUS, DSCL, id), \ -	SRI(DSCL_MEM_PWR_CTRL, DSCL, id), \  	SRI(CM_BLNDGAM_RAMA_START_SLOPE_CNTL_B, CM, id),\  	SRI(CM_BLNDGAM_RAMA_START_SLOPE_CNTL_G, CM, id),\  	SRI(CM_BLNDGAM_RAMA_START_SLOPE_CNTL_R, CM, id),\ diff --git a/drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c b/drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c index 16a75ba0ca82..7d3ff5d44402 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c @@ -1398,11 +1398,18 @@ void dcn302_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param  			dcn3_02_soc.clock_limits[i].dispclk_mhz = max_dispclk_mhz;  			dcn3_02_soc.clock_limits[i].dppclk_mhz  = max_dppclk_mhz;  			dcn3_02_soc.clock_limits[i].phyclk_mhz  = max_phyclk_mhz; -			dcn3_02_soc.clock_limits[i].dtbclk_mhz = dcn3_02_soc.clock_limits[0].dtbclk_mhz; +			/* Populate from bw_params for DTBCLK, SOCCLK */ +			if (!bw_params->clk_table.entries[i].dtbclk_mhz && i > 0) +				dcn3_02_soc.clock_limits[i].dtbclk_mhz  = dcn3_02_soc.clock_limits[i-1].dtbclk_mhz; +			else +				dcn3_02_soc.clock_limits[i].dtbclk_mhz  = bw_params->clk_table.entries[i].dtbclk_mhz; +			if (!bw_params->clk_table.entries[i].socclk_mhz && i > 0) +				dcn3_02_soc.clock_limits[i].socclk_mhz = dcn3_02_soc.clock_limits[i-1].socclk_mhz; +			else +				dcn3_02_soc.clock_limits[i].socclk_mhz = bw_params->clk_table.entries[i].socclk_mhz;  			/* These clocks cannot come from bw_params, always fill from dcn3_02_soc[1] */ -			/* FCLK, PHYCLK_D18, SOCCLK, DSCCLK */ +			/* FCLK, PHYCLK_D18, DSCCLK */  			dcn3_02_soc.clock_limits[i].phyclk_d18_mhz = dcn3_02_soc.clock_limits[0].phyclk_d18_mhz; -			dcn3_02_soc.clock_limits[i].socclk_mhz = dcn3_02_soc.clock_limits[0].socclk_mhz;  			dcn3_02_soc.clock_limits[i].dscclk_mhz = dcn3_02_soc.clock_limits[0].dscclk_mhz;  		}  		/* re-init DML with updated bb */ diff --git a/drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c b/drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c index 34b89464ae02..833ab13fa834 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c @@ -1326,11 +1326,18 @@ void dcn303_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param  			dcn3_03_soc.clock_limits[i].dispclk_mhz = max_dispclk_mhz;  			dcn3_03_soc.clock_limits[i].dppclk_mhz  = max_dppclk_mhz;  			dcn3_03_soc.clock_limits[i].phyclk_mhz  = max_phyclk_mhz; -			dcn3_03_soc.clock_limits[i].dtbclk_mhz = dcn3_03_soc.clock_limits[0].dtbclk_mhz; +			/* Populate from bw_params for DTBCLK, SOCCLK */ +			if (!bw_params->clk_table.entries[i].dtbclk_mhz && i > 0) +				dcn3_03_soc.clock_limits[i].dtbclk_mhz = dcn3_03_soc.clock_limits[i-1].dtbclk_mhz; +			else +				dcn3_03_soc.clock_limits[i].dtbclk_mhz = bw_params->clk_table.entries[i].dtbclk_mhz; +			if (!bw_params->clk_table.entries[i].socclk_mhz && i > 0) +				dcn3_03_soc.clock_limits[i].socclk_mhz = dcn3_03_soc.clock_limits[i-1].socclk_mhz; +			else +				dcn3_03_soc.clock_limits[i].socclk_mhz = bw_params->clk_table.entries[i].socclk_mhz;  			/* These clocks cannot come from bw_params, always fill from dcn3_03_soc[1] */ -			/* FCLK, PHYCLK_D18, SOCCLK, DSCCLK */ +			/* FCLK, PHYCLK_D18, DSCCLK */  			dcn3_03_soc.clock_limits[i].phyclk_d18_mhz = dcn3_03_soc.clock_limits[0].phyclk_d18_mhz; -			dcn3_03_soc.clock_limits[i].socclk_mhz = dcn3_03_soc.clock_limits[0].socclk_mhz;  			dcn3_03_soc.clock_limits[i].dscclk_mhz = dcn3_03_soc.clock_limits[0].dscclk_mhz;  		}  		/* re-init DML with updated bb */ diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c index fc1fc1a4bf8b..6ac6faf0c533 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c @@ -47,6 +47,7 @@  #include "dce/dmub_outbox.h"  #include "dc_link_dp.h"  #include "inc/link_dpcd.h" +#include "dcn10/dcn10_hw_sequencer.h"  #define DC_LOGGER_INIT(logger) @@ -390,7 +391,7 @@ void dcn31_update_info_frame(struct pipe_ctx *pipe_ctx)  	is_hdmi_tmds = dc_is_hdmi_tmds_signal(pipe_ctx->stream->signal);  	is_dp = dc_is_dp_signal(pipe_ctx->stream->signal); -	if (!is_hdmi_tmds) +	if (!is_hdmi_tmds && !is_dp)  		return;  	if (is_hdmi_tmds) @@ -594,3 +595,20 @@ bool dcn31_is_abm_supported(struct dc *dc,  	}  	return false;  } + +static void apply_riommu_invalidation_wa(struct dc *dc) +{ +	struct dce_hwseq *hws = dc->hwseq; + +	if (!hws->wa.early_riommu_invalidation) +		return; + +	REG_UPDATE(DCHUBBUB_ARB_HOSTVM_CNTL, DISABLE_HOSTVM_FORCE_ALLOW_PSTATE, 0); +} + +void dcn31_init_pipes(struct dc *dc, struct dc_state *context) +{ +	dcn10_init_pipes(dc, context); +	apply_riommu_invalidation_wa(dc); + +} diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.h b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.h index ff72f0fdd5be..40dfebe78fdd 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.h +++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.h @@ -52,5 +52,6 @@ void dcn31_reset_hw_ctx_wrap(  		struct dc_state *context);  bool dcn31_is_abm_supported(struct dc *dc,  		struct dc_state *context, struct dc_stream_state *stream); +void dcn31_init_pipes(struct dc *dc, struct dc_state *context);  #endif /* __DC_HWSS_DCN31_H__ */ diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c index e3048f8827d2..aaf2dbd095fe 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c +++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c @@ -93,7 +93,6 @@ static const struct hw_sequencer_funcs dcn31_funcs = {  	.set_flip_control_gsl = dcn20_set_flip_control_gsl,  	.get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,  	.calc_vupdate_position = dcn10_calc_vupdate_position, -	.apply_idle_power_optimizations = dcn30_apply_idle_power_optimizations,  	.set_backlight_level = dcn21_set_backlight_level,  	.set_abm_immediate_disable = dcn21_set_abm_immediate_disable,  	.set_pipe = dcn21_set_pipe, @@ -104,7 +103,7 @@ static const struct hw_sequencer_funcs dcn31_funcs = {  };  static const struct hwseq_private_funcs dcn31_private_funcs = { -	.init_pipes = dcn10_init_pipes, +	.init_pipes = dcn31_init_pipes,  	.update_plane_addr = dcn20_update_plane_addr,  	.plane_atomic_disconnect = dcn10_plane_atomic_disconnect,  	.update_mpcc = dcn20_update_mpcc, diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c index c67bc9544f5d..38c010afade1 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c @@ -220,6 +220,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_1_soc = {  	.sr_exit_z8_time_us = 402.0,  	.sr_enter_plus_exit_z8_time_us = 520.0,  	.writeback_latency_us = 12.0, +	.dram_channel_width_bytes = 4,  	.round_trip_ping_latency_dcfclk_cycles = 106,  	.urgent_latency_pixel_data_only_us = 4.0,  	.urgent_latency_pixel_mixed_with_vm_data_us = 4.0, @@ -741,6 +742,7 @@ static const struct dccg_mask dccg_mask = {  #define HWSEQ_DCN31_REG_LIST()\  	SR(DCHUBBUB_GLOBAL_TIMER_CNTL), \ +	SR(DCHUBBUB_ARB_HOSTVM_CNTL), \  	SR(DIO_MEM_PWR_CTRL), \  	SR(ODM_MEM_PWR_CTRL3), \  	SR(DMU_MEM_PWR_CNTL), \ @@ -801,6 +803,7 @@ static const struct dce_hwseq_registers hwseq_reg = {  #define HWSEQ_DCN31_MASK_SH_LIST(mask_sh)\  	HWSEQ_DCN_MASK_SH_LIST(mask_sh), \  	HWS_SF(, DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_REFDIV, mask_sh), \ +	HWS_SF(, DCHUBBUB_ARB_HOSTVM_CNTL, DISABLE_HOSTVM_FORCE_ALLOW_PSTATE, mask_sh), \  	HWS_SF(, DOMAIN0_PG_CONFIG, DOMAIN_POWER_FORCEON, mask_sh), \  	HWS_SF(, DOMAIN0_PG_CONFIG, DOMAIN_POWER_GATE, mask_sh), \  	HWS_SF(, DOMAIN1_PG_CONFIG, DOMAIN_POWER_FORCEON, mask_sh), \ @@ -1299,6 +1302,7 @@ static struct dce_hwseq *dcn31_hwseq_create(  		hws->regs = &hwseq_reg;  		hws->shifts = &hwseq_shift;  		hws->masks = &hwseq_mask; +		hws->wa.early_riommu_invalidation = true;  	}  	return hws;  } diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c b/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c index c26e742e8137..6655bb99fdfd 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c @@ -841,6 +841,9 @@ static bool CalculatePrefetchSchedule(  	else  		*DestinationLinesForPrefetch = dst_y_prefetch_equ; +	// Limit to prevent overflow in DST_Y_PREFETCH register +	*DestinationLinesForPrefetch = dml_min(*DestinationLinesForPrefetch, 63.75); +  	dml_print("DML: VStartup: %d\n", VStartup);  	dml_print("DML: TCalc: %f\n", TCalc);  	dml_print("DML: TWait: %f\n", TWait); @@ -4889,7 +4892,7 @@ void dml21_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l  				}  			} while ((locals->PrefetchSupported[i][j] != true || locals->VRatioInPrefetchSupported[i][j] != true)  					&& (mode_lib->vba.NextMaxVStartup != mode_lib->vba.MaxMaxVStartup[0][0] -						|| mode_lib->vba.NextPrefetchMode < mode_lib->vba.MaxPrefetchMode)); +						|| mode_lib->vba.NextPrefetchMode <= mode_lib->vba.MaxPrefetchMode));  			if (locals->PrefetchSupported[i][j] == true && locals->VRatioInPrefetchSupported[i][j] == true) {  				mode_lib->vba.BandwidthAvailableForImmediateFlip = locals->ReturnBWPerState[i][0]; diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h index 2a0db2b03047..9ac9d5e8df8b 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h @@ -289,6 +289,9 @@ struct dpp_caps {  	/* DSCL processing pixel data in fixed or float format */  	enum dscl_data_processing_format dscl_data_proc_format; +	/* max LB partitions */ +	unsigned int max_lb_partitions; +  	/* Calculates the number of partitions in the line buffer.  	 * The implementation of this function is overloaded for  	 * different versions of DSCL LB. diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer_private.h b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer_private.h index f7f7e4fff0c2..082549f75978 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer_private.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer_private.h @@ -41,6 +41,7 @@ struct dce_hwseq_wa {  	bool DEGVIDCN10_254;  	bool DEGVIDCN21;  	bool disallow_self_refresh_during_multi_plane_transition; +	bool early_riommu_invalidation;  };  struct hwseq_wa_state { diff --git a/drivers/gpu/drm/amd/include/asic_reg/mp/mp_13_0_1_offset.h b/drivers/gpu/drm/amd/include/asic_reg/mp/mp_13_0_1_offset.h deleted file mode 100644 index dfacc6b5d89d..000000000000 --- a/drivers/gpu/drm/amd/include/asic_reg/mp/mp_13_0_1_offset.h +++ /dev/null @@ -1,355 +0,0 @@ -/* - * Copyright 2020 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 _mp_13_0_1_OFFSET_HEADER -#define _mp_13_0_1_OFFSET_HEADER - - - -// addressBlock: mp_SmuMp0_SmnDec -// base address: 0x0 -#define regMP0_SMN_C2PMSG_32                                                                            0x0060 -#define regMP0_SMN_C2PMSG_32_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_33                                                                            0x0061 -#define regMP0_SMN_C2PMSG_33_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_34                                                                            0x0062 -#define regMP0_SMN_C2PMSG_34_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_35                                                                            0x0063 -#define regMP0_SMN_C2PMSG_35_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_36                                                                            0x0064 -#define regMP0_SMN_C2PMSG_36_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_37                                                                            0x0065 -#define regMP0_SMN_C2PMSG_37_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_38                                                                            0x0066 -#define regMP0_SMN_C2PMSG_38_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_39                                                                            0x0067 -#define regMP0_SMN_C2PMSG_39_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_40                                                                            0x0068 -#define regMP0_SMN_C2PMSG_40_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_41                                                                            0x0069 -#define regMP0_SMN_C2PMSG_41_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_42                                                                            0x006a -#define regMP0_SMN_C2PMSG_42_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_43                                                                            0x006b -#define regMP0_SMN_C2PMSG_43_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_44                                                                            0x006c -#define regMP0_SMN_C2PMSG_44_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_45                                                                            0x006d -#define regMP0_SMN_C2PMSG_45_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_46                                                                            0x006e -#define regMP0_SMN_C2PMSG_46_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_47                                                                            0x006f -#define regMP0_SMN_C2PMSG_47_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_48                                                                            0x0070 -#define regMP0_SMN_C2PMSG_48_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_49                                                                            0x0071 -#define regMP0_SMN_C2PMSG_49_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_50                                                                            0x0072 -#define regMP0_SMN_C2PMSG_50_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_51                                                                            0x0073 -#define regMP0_SMN_C2PMSG_51_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_52                                                                            0x0074 -#define regMP0_SMN_C2PMSG_52_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_53                                                                            0x0075 -#define regMP0_SMN_C2PMSG_53_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_54                                                                            0x0076 -#define regMP0_SMN_C2PMSG_54_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_55                                                                            0x0077 -#define regMP0_SMN_C2PMSG_55_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_56                                                                            0x0078 -#define regMP0_SMN_C2PMSG_56_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_57                                                                            0x0079 -#define regMP0_SMN_C2PMSG_57_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_58                                                                            0x007a -#define regMP0_SMN_C2PMSG_58_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_59                                                                            0x007b -#define regMP0_SMN_C2PMSG_59_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_60                                                                            0x007c -#define regMP0_SMN_C2PMSG_60_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_61                                                                            0x007d -#define regMP0_SMN_C2PMSG_61_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_62                                                                            0x007e -#define regMP0_SMN_C2PMSG_62_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_63                                                                            0x007f -#define regMP0_SMN_C2PMSG_63_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_64                                                                            0x0080 -#define regMP0_SMN_C2PMSG_64_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_65                                                                            0x0081 -#define regMP0_SMN_C2PMSG_65_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_66                                                                            0x0082 -#define regMP0_SMN_C2PMSG_66_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_67                                                                            0x0083 -#define regMP0_SMN_C2PMSG_67_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_68                                                                            0x0084 -#define regMP0_SMN_C2PMSG_68_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_69                                                                            0x0085 -#define regMP0_SMN_C2PMSG_69_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_70                                                                            0x0086 -#define regMP0_SMN_C2PMSG_70_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_71                                                                            0x0087 -#define regMP0_SMN_C2PMSG_71_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_72                                                                            0x0088 -#define regMP0_SMN_C2PMSG_72_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_73                                                                            0x0089 -#define regMP0_SMN_C2PMSG_73_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_74                                                                            0x008a -#define regMP0_SMN_C2PMSG_74_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_75                                                                            0x008b -#define regMP0_SMN_C2PMSG_75_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_76                                                                            0x008c -#define regMP0_SMN_C2PMSG_76_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_77                                                                            0x008d -#define regMP0_SMN_C2PMSG_77_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_78                                                                            0x008e -#define regMP0_SMN_C2PMSG_78_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_79                                                                            0x008f -#define regMP0_SMN_C2PMSG_79_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_80                                                                            0x0090 -#define regMP0_SMN_C2PMSG_80_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_81                                                                            0x0091 -#define regMP0_SMN_C2PMSG_81_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_82                                                                            0x0092 -#define regMP0_SMN_C2PMSG_82_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_83                                                                            0x0093 -#define regMP0_SMN_C2PMSG_83_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_84                                                                            0x0094 -#define regMP0_SMN_C2PMSG_84_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_85                                                                            0x0095 -#define regMP0_SMN_C2PMSG_85_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_86                                                                            0x0096 -#define regMP0_SMN_C2PMSG_86_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_87                                                                            0x0097 -#define regMP0_SMN_C2PMSG_87_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_88                                                                            0x0098 -#define regMP0_SMN_C2PMSG_88_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_89                                                                            0x0099 -#define regMP0_SMN_C2PMSG_89_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_90                                                                            0x009a -#define regMP0_SMN_C2PMSG_90_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_91                                                                            0x009b -#define regMP0_SMN_C2PMSG_91_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_92                                                                            0x009c -#define regMP0_SMN_C2PMSG_92_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_93                                                                            0x009d -#define regMP0_SMN_C2PMSG_93_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_94                                                                            0x009e -#define regMP0_SMN_C2PMSG_94_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_95                                                                            0x009f -#define regMP0_SMN_C2PMSG_95_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_96                                                                            0x00a0 -#define regMP0_SMN_C2PMSG_96_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_97                                                                            0x00a1 -#define regMP0_SMN_C2PMSG_97_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_98                                                                            0x00a2 -#define regMP0_SMN_C2PMSG_98_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_99                                                                            0x00a3 -#define regMP0_SMN_C2PMSG_99_BASE_IDX                                                                   0 -#define regMP0_SMN_C2PMSG_100                                                                           0x00a4 -#define regMP0_SMN_C2PMSG_100_BASE_IDX                                                                  0 -#define regMP0_SMN_C2PMSG_101                                                                           0x00a5 -#define regMP0_SMN_C2PMSG_101_BASE_IDX                                                                  0 -#define regMP0_SMN_C2PMSG_102                                                                           0x00a6 -#define regMP0_SMN_C2PMSG_102_BASE_IDX                                                                  0 -#define regMP0_SMN_C2PMSG_103                                                                           0x00a7 -#define regMP0_SMN_C2PMSG_103_BASE_IDX                                                                  0 -#define regMP0_SMN_IH_CREDIT                                                                            0x00c1 -#define regMP0_SMN_IH_CREDIT_BASE_IDX                                                                   0 -#define regMP0_SMN_IH_SW_INT                                                                            0x00c2 -#define regMP0_SMN_IH_SW_INT_BASE_IDX                                                                   0 -#define regMP0_SMN_IH_SW_INT_CTRL                                                                       0x00c3 -#define regMP0_SMN_IH_SW_INT_CTRL_BASE_IDX                                                              0 - - -// addressBlock: mp_SmuMp1_SmnDec -// base address: 0x0 -#define regMP1_SMN_C2PMSG_32                                                                            0x0260 -#define regMP1_SMN_C2PMSG_32_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_33                                                                            0x0261 -#define regMP1_SMN_C2PMSG_33_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_34                                                                            0x0262 -#define regMP1_SMN_C2PMSG_34_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_35                                                                            0x0263 -#define regMP1_SMN_C2PMSG_35_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_36                                                                            0x0264 -#define regMP1_SMN_C2PMSG_36_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_37                                                                            0x0265 -#define regMP1_SMN_C2PMSG_37_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_38                                                                            0x0266 -#define regMP1_SMN_C2PMSG_38_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_39                                                                            0x0267 -#define regMP1_SMN_C2PMSG_39_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_40                                                                            0x0268 -#define regMP1_SMN_C2PMSG_40_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_41                                                                            0x0269 -#define regMP1_SMN_C2PMSG_41_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_42                                                                            0x026a -#define regMP1_SMN_C2PMSG_42_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_43                                                                            0x026b -#define regMP1_SMN_C2PMSG_43_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_44                                                                            0x026c -#define regMP1_SMN_C2PMSG_44_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_45                                                                            0x026d -#define regMP1_SMN_C2PMSG_45_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_46                                                                            0x026e -#define regMP1_SMN_C2PMSG_46_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_47                                                                            0x026f -#define regMP1_SMN_C2PMSG_47_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_48                                                                            0x0270 -#define regMP1_SMN_C2PMSG_48_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_49                                                                            0x0271 -#define regMP1_SMN_C2PMSG_49_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_50                                                                            0x0272 -#define regMP1_SMN_C2PMSG_50_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_51                                                                            0x0273 -#define regMP1_SMN_C2PMSG_51_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_52                                                                            0x0274 -#define regMP1_SMN_C2PMSG_52_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_53                                                                            0x0275 -#define regMP1_SMN_C2PMSG_53_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_54                                                                            0x0276 -#define regMP1_SMN_C2PMSG_54_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_55                                                                            0x0277 -#define regMP1_SMN_C2PMSG_55_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_56                                                                            0x0278 -#define regMP1_SMN_C2PMSG_56_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_57                                                                            0x0279 -#define regMP1_SMN_C2PMSG_57_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_58                                                                            0x027a -#define regMP1_SMN_C2PMSG_58_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_59                                                                            0x027b -#define regMP1_SMN_C2PMSG_59_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_60                                                                            0x027c -#define regMP1_SMN_C2PMSG_60_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_61                                                                            0x027d -#define regMP1_SMN_C2PMSG_61_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_62                                                                            0x027e -#define regMP1_SMN_C2PMSG_62_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_63                                                                            0x027f -#define regMP1_SMN_C2PMSG_63_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_64                                                                            0x0280 -#define regMP1_SMN_C2PMSG_64_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_65                                                                            0x0281 -#define regMP1_SMN_C2PMSG_65_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_66                                                                            0x0282 -#define regMP1_SMN_C2PMSG_66_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_67                                                                            0x0283 -#define regMP1_SMN_C2PMSG_67_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_68                                                                            0x0284 -#define regMP1_SMN_C2PMSG_68_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_69                                                                            0x0285 -#define regMP1_SMN_C2PMSG_69_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_70                                                                            0x0286 -#define regMP1_SMN_C2PMSG_70_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_71                                                                            0x0287 -#define regMP1_SMN_C2PMSG_71_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_72                                                                            0x0288 -#define regMP1_SMN_C2PMSG_72_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_73                                                                            0x0289 -#define regMP1_SMN_C2PMSG_73_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_74                                                                            0x028a -#define regMP1_SMN_C2PMSG_74_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_75                                                                            0x028b -#define regMP1_SMN_C2PMSG_75_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_76                                                                            0x028c -#define regMP1_SMN_C2PMSG_76_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_77                                                                            0x028d -#define regMP1_SMN_C2PMSG_77_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_78                                                                            0x028e -#define regMP1_SMN_C2PMSG_78_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_79                                                                            0x028f -#define regMP1_SMN_C2PMSG_79_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_80                                                                            0x0290 -#define regMP1_SMN_C2PMSG_80_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_81                                                                            0x0291 -#define regMP1_SMN_C2PMSG_81_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_82                                                                            0x0292 -#define regMP1_SMN_C2PMSG_82_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_83                                                                            0x0293 -#define regMP1_SMN_C2PMSG_83_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_84                                                                            0x0294 -#define regMP1_SMN_C2PMSG_84_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_85                                                                            0x0295 -#define regMP1_SMN_C2PMSG_85_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_86                                                                            0x0296 -#define regMP1_SMN_C2PMSG_86_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_87                                                                            0x0297 -#define regMP1_SMN_C2PMSG_87_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_88                                                                            0x0298 -#define regMP1_SMN_C2PMSG_88_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_89                                                                            0x0299 -#define regMP1_SMN_C2PMSG_89_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_90                                                                            0x029a -#define regMP1_SMN_C2PMSG_90_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_91                                                                            0x029b -#define regMP1_SMN_C2PMSG_91_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_92                                                                            0x029c -#define regMP1_SMN_C2PMSG_92_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_93                                                                            0x029d -#define regMP1_SMN_C2PMSG_93_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_94                                                                            0x029e -#define regMP1_SMN_C2PMSG_94_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_95                                                                            0x029f -#define regMP1_SMN_C2PMSG_95_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_96                                                                            0x02a0 -#define regMP1_SMN_C2PMSG_96_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_97                                                                            0x02a1 -#define regMP1_SMN_C2PMSG_97_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_98                                                                            0x02a2 -#define regMP1_SMN_C2PMSG_98_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_99                                                                            0x02a3 -#define regMP1_SMN_C2PMSG_99_BASE_IDX                                                                   0 -#define regMP1_SMN_C2PMSG_100                                                                           0x02a4 -#define regMP1_SMN_C2PMSG_100_BASE_IDX                                                                  0 -#define regMP1_SMN_C2PMSG_101                                                                           0x02a5 -#define regMP1_SMN_C2PMSG_101_BASE_IDX                                                                  0 -#define regMP1_SMN_C2PMSG_102                                                                           0x02a6 -#define regMP1_SMN_C2PMSG_102_BASE_IDX                                                                  0 -#define regMP1_SMN_C2PMSG_103                                                                           0x02a7 -#define regMP1_SMN_C2PMSG_103_BASE_IDX                                                                  0 -#define regMP1_SMN_IH_CREDIT                                                                            0x02c1 -#define regMP1_SMN_IH_CREDIT_BASE_IDX                                                                   0 -#define regMP1_SMN_IH_SW_INT                                                                            0x02c2 -#define regMP1_SMN_IH_SW_INT_BASE_IDX                                                                   0 -#define regMP1_SMN_IH_SW_INT_CTRL                                                                       0x02c3 -#define regMP1_SMN_IH_SW_INT_CTRL_BASE_IDX                                                              0 -#define regMP1_SMN_FPS_CNT                                                                              0x02c4 -#define regMP1_SMN_FPS_CNT_BASE_IDX                                                                     0 -#define regMP1_SMN_EXT_SCRATCH0                                                                         0x0340 -#define regMP1_SMN_EXT_SCRATCH0_BASE_IDX                                                                0 -#define regMP1_SMN_EXT_SCRATCH1                                                                         0x0341 -#define regMP1_SMN_EXT_SCRATCH1_BASE_IDX                                                                0 -#define regMP1_SMN_EXT_SCRATCH2                                                                         0x0342 -#define regMP1_SMN_EXT_SCRATCH2_BASE_IDX                                                                0 -#define regMP1_SMN_EXT_SCRATCH3                                                                         0x0343 -#define regMP1_SMN_EXT_SCRATCH3_BASE_IDX                                                                0 -#define regMP1_SMN_EXT_SCRATCH4                                                                         0x0344 -#define regMP1_SMN_EXT_SCRATCH4_BASE_IDX                                                                0 -#define regMP1_SMN_EXT_SCRATCH5                                                                         0x0345 -#define regMP1_SMN_EXT_SCRATCH5_BASE_IDX                                                                0 -#define regMP1_SMN_EXT_SCRATCH6                                                                         0x0346 -#define regMP1_SMN_EXT_SCRATCH6_BASE_IDX                                                                0 -#define regMP1_SMN_EXT_SCRATCH7                                                                         0x0347 -#define regMP1_SMN_EXT_SCRATCH7_BASE_IDX                                                                0 - - -#endif diff --git a/drivers/gpu/drm/amd/include/asic_reg/mp/mp_13_0_1_sh_mask.h b/drivers/gpu/drm/amd/include/asic_reg/mp/mp_13_0_1_sh_mask.h deleted file mode 100644 index 2d5e8b58e693..000000000000 --- a/drivers/gpu/drm/amd/include/asic_reg/mp/mp_13_0_1_sh_mask.h +++ /dev/null @@ -1,531 +0,0 @@ -/* - * Copyright 2020 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 _mp_13_0_1_SH_MASK_HEADER -#define _mp_13_0_1_SH_MASK_HEADER - - -// addressBlock: mp_SmuMp0_SmnDec -//MP0_SMN_C2PMSG_32 -#define MP0_SMN_C2PMSG_32__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_32__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_33 -#define MP0_SMN_C2PMSG_33__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_33__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_34 -#define MP0_SMN_C2PMSG_34__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_34__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_35 -#define MP0_SMN_C2PMSG_35__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_35__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_36 -#define MP0_SMN_C2PMSG_36__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_36__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_37 -#define MP0_SMN_C2PMSG_37__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_37__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_38 -#define MP0_SMN_C2PMSG_38__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_38__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_39 -#define MP0_SMN_C2PMSG_39__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_39__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_40 -#define MP0_SMN_C2PMSG_40__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_40__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_41 -#define MP0_SMN_C2PMSG_41__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_41__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_42 -#define MP0_SMN_C2PMSG_42__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_42__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_43 -#define MP0_SMN_C2PMSG_43__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_43__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_44 -#define MP0_SMN_C2PMSG_44__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_44__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_45 -#define MP0_SMN_C2PMSG_45__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_45__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_46 -#define MP0_SMN_C2PMSG_46__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_46__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_47 -#define MP0_SMN_C2PMSG_47__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_47__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_48 -#define MP0_SMN_C2PMSG_48__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_48__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_49 -#define MP0_SMN_C2PMSG_49__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_49__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_50 -#define MP0_SMN_C2PMSG_50__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_50__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_51 -#define MP0_SMN_C2PMSG_51__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_51__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_52 -#define MP0_SMN_C2PMSG_52__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_52__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_53 -#define MP0_SMN_C2PMSG_53__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_53__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_54 -#define MP0_SMN_C2PMSG_54__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_54__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_55 -#define MP0_SMN_C2PMSG_55__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_55__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_56 -#define MP0_SMN_C2PMSG_56__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_56__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_57 -#define MP0_SMN_C2PMSG_57__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_57__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_58 -#define MP0_SMN_C2PMSG_58__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_58__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_59 -#define MP0_SMN_C2PMSG_59__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_59__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_60 -#define MP0_SMN_C2PMSG_60__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_60__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_61 -#define MP0_SMN_C2PMSG_61__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_61__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_62 -#define MP0_SMN_C2PMSG_62__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_62__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_63 -#define MP0_SMN_C2PMSG_63__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_63__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_64 -#define MP0_SMN_C2PMSG_64__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_64__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_65 -#define MP0_SMN_C2PMSG_65__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_65__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_66 -#define MP0_SMN_C2PMSG_66__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_66__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_67 -#define MP0_SMN_C2PMSG_67__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_67__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_68 -#define MP0_SMN_C2PMSG_68__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_68__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_69 -#define MP0_SMN_C2PMSG_69__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_69__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_70 -#define MP0_SMN_C2PMSG_70__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_70__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_71 -#define MP0_SMN_C2PMSG_71__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_71__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_72 -#define MP0_SMN_C2PMSG_72__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_72__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_73 -#define MP0_SMN_C2PMSG_73__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_73__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_74 -#define MP0_SMN_C2PMSG_74__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_74__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_75 -#define MP0_SMN_C2PMSG_75__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_75__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_76 -#define MP0_SMN_C2PMSG_76__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_76__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_77 -#define MP0_SMN_C2PMSG_77__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_77__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_78 -#define MP0_SMN_C2PMSG_78__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_78__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_79 -#define MP0_SMN_C2PMSG_79__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_79__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_80 -#define MP0_SMN_C2PMSG_80__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_80__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_81 -#define MP0_SMN_C2PMSG_81__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_81__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_82 -#define MP0_SMN_C2PMSG_82__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_82__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_83 -#define MP0_SMN_C2PMSG_83__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_83__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_84 -#define MP0_SMN_C2PMSG_84__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_84__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_85 -#define MP0_SMN_C2PMSG_85__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_85__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_86 -#define MP0_SMN_C2PMSG_86__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_86__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_87 -#define MP0_SMN_C2PMSG_87__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_87__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_88 -#define MP0_SMN_C2PMSG_88__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_88__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_89 -#define MP0_SMN_C2PMSG_89__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_89__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_90 -#define MP0_SMN_C2PMSG_90__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_90__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_91 -#define MP0_SMN_C2PMSG_91__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_91__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_92 -#define MP0_SMN_C2PMSG_92__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_92__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_93 -#define MP0_SMN_C2PMSG_93__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_93__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_94 -#define MP0_SMN_C2PMSG_94__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_94__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_95 -#define MP0_SMN_C2PMSG_95__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_95__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_96 -#define MP0_SMN_C2PMSG_96__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_96__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_97 -#define MP0_SMN_C2PMSG_97__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_97__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_98 -#define MP0_SMN_C2PMSG_98__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_98__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_99 -#define MP0_SMN_C2PMSG_99__CONTENT__SHIFT                                                                     0x0 -#define MP0_SMN_C2PMSG_99__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP0_SMN_C2PMSG_100 -#define MP0_SMN_C2PMSG_100__CONTENT__SHIFT                                                                    0x0 -#define MP0_SMN_C2PMSG_100__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP0_SMN_C2PMSG_101 -#define MP0_SMN_C2PMSG_101__CONTENT__SHIFT                                                                    0x0 -#define MP0_SMN_C2PMSG_101__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP0_SMN_C2PMSG_102 -#define MP0_SMN_C2PMSG_102__CONTENT__SHIFT                                                                    0x0 -#define MP0_SMN_C2PMSG_102__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP0_SMN_C2PMSG_103 -#define MP0_SMN_C2PMSG_103__CONTENT__SHIFT                                                                    0x0 -#define MP0_SMN_C2PMSG_103__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP0_SMN_IH_CREDIT -#define MP0_SMN_IH_CREDIT__CREDIT_VALUE__SHIFT                                                                0x0 -#define MP0_SMN_IH_CREDIT__CLIENT_ID__SHIFT                                                                   0x10 -#define MP0_SMN_IH_CREDIT__CREDIT_VALUE_MASK                                                                  0x00000003L -#define MP0_SMN_IH_CREDIT__CLIENT_ID_MASK                                                                     0x00FF0000L -//MP0_SMN_IH_SW_INT -#define MP0_SMN_IH_SW_INT__ID__SHIFT                                                                          0x0 -#define MP0_SMN_IH_SW_INT__VALID__SHIFT                                                                       0x8 -#define MP0_SMN_IH_SW_INT__ID_MASK                                                                            0x000000FFL -#define MP0_SMN_IH_SW_INT__VALID_MASK                                                                         0x00000100L -//MP0_SMN_IH_SW_INT_CTRL -#define MP0_SMN_IH_SW_INT_CTRL__INT_MASK__SHIFT                                                               0x0 -#define MP0_SMN_IH_SW_INT_CTRL__INT_ACK__SHIFT                                                                0x8 -#define MP0_SMN_IH_SW_INT_CTRL__INT_MASK_MASK                                                                 0x00000001L -#define MP0_SMN_IH_SW_INT_CTRL__INT_ACK_MASK                                                                  0x00000100L - - -// addressBlock: mp_SmuMp1Pub_CruDec -//MP1_FIRMWARE_FLAGS -#define MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED__SHIFT                                                         0x0 -#define MP1_FIRMWARE_FLAGS__RESERVED__SHIFT                                                                   0x1 -#define MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK                                                           0x00000001L -#define MP1_FIRMWARE_FLAGS__RESERVED_MASK                                                                     0xFFFFFFFEL - - -// addressBlock: mp_SmuMp1_SmnDec -//MP1_SMN_C2PMSG_32 -#define MP1_SMN_C2PMSG_32__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_32__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_33 -#define MP1_SMN_C2PMSG_33__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_33__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_34 -#define MP1_SMN_C2PMSG_34__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_34__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_35 -#define MP1_SMN_C2PMSG_35__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_35__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_36 -#define MP1_SMN_C2PMSG_36__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_36__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_37 -#define MP1_SMN_C2PMSG_37__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_37__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_38 -#define MP1_SMN_C2PMSG_38__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_38__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_39 -#define MP1_SMN_C2PMSG_39__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_39__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_40 -#define MP1_SMN_C2PMSG_40__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_40__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_41 -#define MP1_SMN_C2PMSG_41__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_41__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_42 -#define MP1_SMN_C2PMSG_42__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_42__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_43 -#define MP1_SMN_C2PMSG_43__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_43__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_44 -#define MP1_SMN_C2PMSG_44__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_44__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_45 -#define MP1_SMN_C2PMSG_45__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_45__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_46 -#define MP1_SMN_C2PMSG_46__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_46__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_47 -#define MP1_SMN_C2PMSG_47__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_47__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_48 -#define MP1_SMN_C2PMSG_48__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_48__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_49 -#define MP1_SMN_C2PMSG_49__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_49__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_50 -#define MP1_SMN_C2PMSG_50__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_50__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_51 -#define MP1_SMN_C2PMSG_51__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_51__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_52 -#define MP1_SMN_C2PMSG_52__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_52__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_53 -#define MP1_SMN_C2PMSG_53__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_53__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_54 -#define MP1_SMN_C2PMSG_54__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_54__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_55 -#define MP1_SMN_C2PMSG_55__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_55__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_56 -#define MP1_SMN_C2PMSG_56__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_56__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_57 -#define MP1_SMN_C2PMSG_57__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_57__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_58 -#define MP1_SMN_C2PMSG_58__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_58__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_59 -#define MP1_SMN_C2PMSG_59__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_59__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_60 -#define MP1_SMN_C2PMSG_60__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_60__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_61 -#define MP1_SMN_C2PMSG_61__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_61__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_62 -#define MP1_SMN_C2PMSG_62__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_62__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_63 -#define MP1_SMN_C2PMSG_63__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_63__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_64 -#define MP1_SMN_C2PMSG_64__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_64__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_65 -#define MP1_SMN_C2PMSG_65__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_65__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_66 -#define MP1_SMN_C2PMSG_66__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_66__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_67 -#define MP1_SMN_C2PMSG_67__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_67__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_68 -#define MP1_SMN_C2PMSG_68__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_68__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_69 -#define MP1_SMN_C2PMSG_69__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_69__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_70 -#define MP1_SMN_C2PMSG_70__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_70__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_71 -#define MP1_SMN_C2PMSG_71__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_71__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_72 -#define MP1_SMN_C2PMSG_72__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_72__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_73 -#define MP1_SMN_C2PMSG_73__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_73__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_74 -#define MP1_SMN_C2PMSG_74__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_74__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_75 -#define MP1_SMN_C2PMSG_75__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_75__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_76 -#define MP1_SMN_C2PMSG_76__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_76__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_77 -#define MP1_SMN_C2PMSG_77__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_77__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_78 -#define MP1_SMN_C2PMSG_78__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_78__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_79 -#define MP1_SMN_C2PMSG_79__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_79__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_80 -#define MP1_SMN_C2PMSG_80__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_80__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_81 -#define MP1_SMN_C2PMSG_81__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_81__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_82 -#define MP1_SMN_C2PMSG_82__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_82__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_83 -#define MP1_SMN_C2PMSG_83__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_83__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_84 -#define MP1_SMN_C2PMSG_84__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_84__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_85 -#define MP1_SMN_C2PMSG_85__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_85__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_86 -#define MP1_SMN_C2PMSG_86__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_86__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_87 -#define MP1_SMN_C2PMSG_87__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_87__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_88 -#define MP1_SMN_C2PMSG_88__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_88__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_89 -#define MP1_SMN_C2PMSG_89__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_89__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_90 -#define MP1_SMN_C2PMSG_90__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_90__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_91 -#define MP1_SMN_C2PMSG_91__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_91__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_92 -#define MP1_SMN_C2PMSG_92__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_92__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_93 -#define MP1_SMN_C2PMSG_93__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_93__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_94 -#define MP1_SMN_C2PMSG_94__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_94__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_95 -#define MP1_SMN_C2PMSG_95__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_95__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_96 -#define MP1_SMN_C2PMSG_96__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_96__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_97 -#define MP1_SMN_C2PMSG_97__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_97__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_98 -#define MP1_SMN_C2PMSG_98__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_98__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_99 -#define MP1_SMN_C2PMSG_99__CONTENT__SHIFT                                                                     0x0 -#define MP1_SMN_C2PMSG_99__CONTENT_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_C2PMSG_100 -#define MP1_SMN_C2PMSG_100__CONTENT__SHIFT                                                                    0x0 -#define MP1_SMN_C2PMSG_100__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP1_SMN_C2PMSG_101 -#define MP1_SMN_C2PMSG_101__CONTENT__SHIFT                                                                    0x0 -#define MP1_SMN_C2PMSG_101__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP1_SMN_C2PMSG_102 -#define MP1_SMN_C2PMSG_102__CONTENT__SHIFT                                                                    0x0 -#define MP1_SMN_C2PMSG_102__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP1_SMN_C2PMSG_103 -#define MP1_SMN_C2PMSG_103__CONTENT__SHIFT                                                                    0x0 -#define MP1_SMN_C2PMSG_103__CONTENT_MASK                                                                      0xFFFFFFFFL -//MP1_SMN_IH_CREDIT -#define MP1_SMN_IH_CREDIT__CREDIT_VALUE__SHIFT                                                                0x0 -#define MP1_SMN_IH_CREDIT__CLIENT_ID__SHIFT                                                                   0x10 -#define MP1_SMN_IH_CREDIT__CREDIT_VALUE_MASK                                                                  0x00000003L -#define MP1_SMN_IH_CREDIT__CLIENT_ID_MASK                                                                     0x00FF0000L -//MP1_SMN_IH_SW_INT -#define MP1_SMN_IH_SW_INT__ID__SHIFT                                                                          0x0 -#define MP1_SMN_IH_SW_INT__VALID__SHIFT                                                                       0x8 -#define MP1_SMN_IH_SW_INT__ID_MASK                                                                            0x000000FFL -#define MP1_SMN_IH_SW_INT__VALID_MASK                                                                         0x00000100L -//MP1_SMN_IH_SW_INT_CTRL -#define MP1_SMN_IH_SW_INT_CTRL__INT_MASK__SHIFT                                                               0x0 -#define MP1_SMN_IH_SW_INT_CTRL__INT_ACK__SHIFT                                                                0x8 -#define MP1_SMN_IH_SW_INT_CTRL__INT_MASK_MASK                                                                 0x00000001L -#define MP1_SMN_IH_SW_INT_CTRL__INT_ACK_MASK                                                                  0x00000100L -//MP1_SMN_FPS_CNT -#define MP1_SMN_FPS_CNT__COUNT__SHIFT                                                                         0x0 -#define MP1_SMN_FPS_CNT__COUNT_MASK                                                                           0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH0 -#define MP1_SMN_EXT_SCRATCH0__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH0__DATA_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH1 -#define MP1_SMN_EXT_SCRATCH1__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH1__DATA_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH2 -#define MP1_SMN_EXT_SCRATCH2__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH2__DATA_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH3 -#define MP1_SMN_EXT_SCRATCH3__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH3__DATA_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH4 -#define MP1_SMN_EXT_SCRATCH4__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH4__DATA_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH5 -#define MP1_SMN_EXT_SCRATCH5__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH5__DATA_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH6 -#define MP1_SMN_EXT_SCRATCH6__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH6__DATA_MASK                                                                       0xFFFFFFFFL -//MP1_SMN_EXT_SCRATCH7 -#define MP1_SMN_EXT_SCRATCH7__DATA__SHIFT                                                                     0x0 -#define MP1_SMN_EXT_SCRATCH7__DATA_MASK                                                                       0xFFFFFFFFL - - -#endif diff --git a/drivers/gpu/drm/amd/pm/inc/aldebaran_ppsmc.h b/drivers/gpu/drm/amd/pm/inc/aldebaran_ppsmc.h index 610266088ff1..35fa0d8e92dd 100644 --- a/drivers/gpu/drm/amd/pm/inc/aldebaran_ppsmc.h +++ b/drivers/gpu/drm/amd/pm/inc/aldebaran_ppsmc.h @@ -101,7 +101,8 @@  #define PPSMC_MSG_SetSystemVirtualSTBtoDramAddrLow  0x41  #define PPSMC_MSG_GfxDriverResetRecovery	0x42 -#define PPSMC_Message_Count			0x43 +#define PPSMC_MSG_BoardPowerCalibration 	0x43 +#define PPSMC_Message_Count			0x44  //PPSMC Reset Types  #define PPSMC_RESET_TYPE_WARM_RESET              0x00 diff --git a/drivers/gpu/drm/amd/pm/inc/smu_types.h b/drivers/gpu/drm/amd/pm/inc/smu_types.h index 89a16dcd0fff..1d3765b873df 100644 --- a/drivers/gpu/drm/amd/pm/inc/smu_types.h +++ b/drivers/gpu/drm/amd/pm/inc/smu_types.h @@ -225,7 +225,8 @@  	__SMU_DUMMY_MAP(DisableDeterminism),		\  	__SMU_DUMMY_MAP(SetUclkDpmMode),		\  	__SMU_DUMMY_MAP(LightSBR),			\ -	__SMU_DUMMY_MAP(GfxDriverResetRecovery), +	__SMU_DUMMY_MAP(GfxDriverResetRecovery),	\ +	__SMU_DUMMY_MAP(BoardPowerCalibration),  #undef __SMU_DUMMY_MAP  #define __SMU_DUMMY_MAP(type)	SMU_MSG_##type diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h index 1962a5877191..f61b5c914a3d 100644 --- a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h +++ b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h @@ -34,7 +34,7 @@  #define SMU11_DRIVER_IF_VERSION_Navy_Flounder 0xE  #define SMU11_DRIVER_IF_VERSION_VANGOGH 0x03  #define SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish 0xF -#define SMU11_DRIVER_IF_VERSION_Beige_Goby 0x9 +#define SMU11_DRIVER_IF_VERSION_Beige_Goby 0xD  /* MP Apertures */  #define MP0_Public			0x03800000 diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h b/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h index 6119a36b2cba..3fea2430dec0 100644 --- a/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h +++ b/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h @@ -26,6 +26,7 @@  #include "amdgpu_smu.h"  #define SMU13_DRIVER_IF_VERSION_INV 0xFFFFFFFF +#define SMU13_DRIVER_IF_VERSION_YELLOW_CARP 0x03  #define SMU13_DRIVER_IF_VERSION_ALDE 0x07  /* MP Apertures */ diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v13_0_1.h b/drivers/gpu/drm/amd/pm/inc/smu_v13_0_1.h deleted file mode 100644 index b6c976a4d578..000000000000 --- a/drivers/gpu/drm/amd/pm/inc/smu_v13_0_1.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2020 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 __SMU_V13_0_1_H__ -#define __SMU_V13_0_1_H__ - -#include "amdgpu_smu.h" - -#define SMU13_0_1_DRIVER_IF_VERSION_INV 0xFFFFFFFF -#define SMU13_0_1_DRIVER_IF_VERSION_YELLOW_CARP 0x3 - -/* MP Apertures */ -#define MP0_Public			0x03800000 -#define MP0_SRAM			0x03900000 -#define MP1_Public			0x03b00000 -#define MP1_SRAM			0x03c00004 - -/* address block */ -#define smnMP1_FIRMWARE_FLAGS		0x3010024 - - -#if defined(SWSMU_CODE_LAYER_L2) || defined(SWSMU_CODE_LAYER_L3) - -int smu_v13_0_1_check_fw_status(struct smu_context *smu); - -int smu_v13_0_1_check_fw_version(struct smu_context *smu); - -int smu_v13_0_1_fini_smc_tables(struct smu_context *smu); - -int smu_v13_0_1_get_vbios_bootup_values(struct smu_context *smu); - -int smu_v13_0_1_set_default_dpm_tables(struct smu_context *smu); - -int smu_v13_0_1_set_driver_table_location(struct smu_context *smu); - -int smu_v13_0_1_gfx_off_control(struct smu_context *smu, bool enable); -#endif -#endif diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c index 388c5cb5c647..0a5d46ac9ccd 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c @@ -1528,6 +1528,7 @@ int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state)  		case CHIP_SIENNA_CICHLID:  		case CHIP_NAVY_FLOUNDER:  		case CHIP_DIMGREY_CAVEFISH: +		case CHIP_BEIGE_GOBY:  			if (amdgpu_runtime_pm == 2)  				ret = smu_cmn_send_smc_msg_with_param(smu,  								      SMU_MSG_EnterBaco, diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/Makefile b/drivers/gpu/drm/amd/pm/swsmu/smu13/Makefile index 9b3a8503f5cd..d4c4c495762c 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/Makefile +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/Makefile @@ -23,7 +23,7 @@  # Makefile for the 'smu manager' sub-component of powerplay.  # It provides the smu management services for the driver. -SMU13_MGR = smu_v13_0.o aldebaran_ppt.o smu_v13_0_1.o yellow_carp_ppt.o +SMU13_MGR = smu_v13_0.o aldebaran_ppt.o yellow_carp_ppt.o  AMD_SWSMU_SMU13MGR = $(addprefix $(AMD_SWSMU_PATH)/smu13/,$(SMU13_MGR)) diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c index 9316a726195c..cb5485cf243f 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c @@ -134,6 +134,7 @@ static const struct cmn2asic_msg_mapping aldebaran_message_map[SMU_MSG_MAX_COUNT  	MSG_MAP(DisableDeterminism,		     PPSMC_MSG_DisableDeterminism,		0),  	MSG_MAP(SetUclkDpmMode,			     PPSMC_MSG_SetUclkDpmMode,			0),  	MSG_MAP(GfxDriverResetRecovery,		     PPSMC_MSG_GfxDriverResetRecovery,		0), +	MSG_MAP(BoardPowerCalibration,		     PPSMC_MSG_BoardPowerCalibration,		0),  };  static const struct cmn2asic_mapping aldebaran_clk_map[SMU_CLK_COUNT] = { @@ -440,6 +441,39 @@ static int aldebaran_setup_pptable(struct smu_context *smu)  	return ret;  } +static bool aldebaran_is_primary(struct smu_context *smu) +{ +	struct amdgpu_device *adev = smu->adev; + +	if (adev->smuio.funcs && adev->smuio.funcs->get_die_id) +		return adev->smuio.funcs->get_die_id(adev) == 0; + +	return true; +} + +static int aldebaran_run_board_btc(struct smu_context *smu) +{ +	u32 smu_version; +	int ret; + +	if (!aldebaran_is_primary(smu)) +		return 0; + +	ret = smu_cmn_get_smc_version(smu, NULL, &smu_version); +	if (ret) { +		dev_err(smu->adev->dev, "Failed to get smu version!\n"); +		return ret; +	} +	if (smu_version <= 0x00441d00) +		return 0; + +	ret = smu_cmn_send_smc_msg(smu, SMU_MSG_BoardPowerCalibration, NULL); +	if (ret) +		dev_err(smu->adev->dev, "Board power calibration failed!\n"); + +	return ret; +} +  static int aldebaran_run_btc(struct smu_context *smu)  {  	int ret; @@ -447,6 +481,8 @@ static int aldebaran_run_btc(struct smu_context *smu)  	ret = smu_cmn_send_smc_msg(smu, SMU_MSG_RunDcBtc, NULL);  	if (ret)  		dev_err(smu->adev->dev, "RunDcBtc failed!\n"); +	else +		ret = aldebaran_run_board_btc(smu);  	return ret;  } @@ -524,16 +560,6 @@ static int aldebaran_freqs_in_same_level(int32_t frequency1,  	return (abs(frequency1 - frequency2) <= EPSILON);  } -static bool aldebaran_is_primary(struct smu_context *smu) -{ -	struct amdgpu_device *adev = smu->adev; - -	if (adev->smuio.funcs && adev->smuio.funcs->get_die_id) -		return adev->smuio.funcs->get_die_id(adev) == 0; - -	return true; -} -  static int aldebaran_get_smu_metrics_data(struct smu_context *smu,  					  MetricsMember_t member,  					  uint32_t *value) diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c index a3dc7194aaf8..a421ba85bd6d 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c @@ -210,6 +210,9 @@ int smu_v13_0_check_fw_version(struct smu_context *smu)  	case CHIP_ALDEBARAN:  		smu->smc_driver_if_version = SMU13_DRIVER_IF_VERSION_ALDE;  		break; +	case CHIP_YELLOW_CARP: +		smu->smc_driver_if_version = SMU13_DRIVER_IF_VERSION_YELLOW_CARP; +		break;  	default:  		dev_err(smu->adev->dev, "smu unsupported asic type:%d.\n", smu->adev->asic_type);  		smu->smc_driver_if_version = SMU13_DRIVER_IF_VERSION_INV; @@ -694,6 +697,27 @@ failed:  	return ret;  } +int smu_v13_0_gfx_off_control(struct smu_context *smu, bool enable) +{ +	int ret = 0; +	struct amdgpu_device *adev = smu->adev; + +	switch (adev->asic_type) { +	case CHIP_YELLOW_CARP: +		if (!(adev->pm.pp_feature & PP_GFXOFF_MASK)) +			return 0; +		if (enable) +			ret = smu_cmn_send_smc_msg(smu, SMU_MSG_AllowGfxOff, NULL); +		else +			ret = smu_cmn_send_smc_msg(smu, SMU_MSG_DisallowGfxOff, NULL); +		break; +	default: +		break; +	} + +	return ret; +} +  int smu_v13_0_system_features_control(struct smu_context *smu,  				      bool en)  { diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_1.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_1.c deleted file mode 100644 index 61917b49f2bf..000000000000 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_1.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright 2020 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 <linux/reboot.h> - -#define SWSMU_CODE_LAYER_L3 - -#include "amdgpu.h" -#include "amdgpu_smu.h" -#include "smu_v13_0_1.h" -#include "soc15_common.h" -#include "smu_cmn.h" -#include "atomfirmware.h" -#include "amdgpu_atomfirmware.h" -#include "amdgpu_atombios.h" -#include "atom.h" - -#include "asic_reg/mp/mp_13_0_1_offset.h" -#include "asic_reg/mp/mp_13_0_1_sh_mask.h" - -/* - * DO NOT use these for err/warn/info/debug messages. - * Use dev_err, dev_warn, dev_info and dev_dbg instead. - * They are more MGPU friendly. - */ -#undef pr_err -#undef pr_warn -#undef pr_info -#undef pr_debug - -int smu_v13_0_1_check_fw_status(struct smu_context *smu) -{ -	struct amdgpu_device *adev = smu->adev; -	uint32_t mp1_fw_flags; - -	mp1_fw_flags = RREG32_PCIE(MP1_Public | -				   (smnMP1_FIRMWARE_FLAGS & 0xffffffff)); - -	if ((mp1_fw_flags & MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK) >> -	    MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED__SHIFT) -		return 0; - -	return -EIO; -} - -int smu_v13_0_1_check_fw_version(struct smu_context *smu) -{ -	uint32_t if_version = 0xff, smu_version = 0xff; -	uint16_t smu_major; -	uint8_t smu_minor, smu_debug; -	int ret = 0; - -	ret = smu_cmn_get_smc_version(smu, &if_version, &smu_version); -	if (ret) -		return ret; - -	smu_major = (smu_version >> 16) & 0xffff; -	smu_minor = (smu_version >> 8) & 0xff; -	smu_debug = (smu_version >> 0) & 0xff; - -	switch (smu->adev->asic_type) { -	case CHIP_YELLOW_CARP: -		smu->smc_driver_if_version = SMU13_0_1_DRIVER_IF_VERSION_YELLOW_CARP; -		break; - -	default: -		dev_err(smu->adev->dev, "smu unsupported asic type:%d.\n", smu->adev->asic_type); -		smu->smc_driver_if_version = SMU13_0_1_DRIVER_IF_VERSION_INV; -		break; -	} - -	dev_info(smu->adev->dev, "smu fw reported version = 0x%08x (%d.%d.%d)\n", -			 smu_version, smu_major, smu_minor, smu_debug); - -	/* -	 * 1. if_version mismatch is not critical as our fw is designed -	 * to be backward compatible. -	 * 2. New fw usually brings some optimizations. But that's visible -	 * only on the paired driver. -	 * Considering above, we just leave user a warning message instead -	 * of halt driver loading. -	 */ -	if (if_version != smu->smc_driver_if_version) { -		dev_info(smu->adev->dev, "smu driver if version = 0x%08x, smu fw if version = 0x%08x, " -			 "smu fw version = 0x%08x (%d.%d.%d)\n", -			 smu->smc_driver_if_version, if_version, -			 smu_version, smu_major, smu_minor, smu_debug); -		dev_warn(smu->adev->dev, "SMU driver if version not matched\n"); -	} - -	return ret; -} - -int smu_v13_0_1_fini_smc_tables(struct smu_context *smu) -{ -	struct smu_table_context *smu_table = &smu->smu_table; - -	kfree(smu_table->clocks_table); -	smu_table->clocks_table = NULL; - -	kfree(smu_table->metrics_table); -	smu_table->metrics_table = NULL; - -	kfree(smu_table->watermarks_table); -	smu_table->watermarks_table = NULL; - -	return 0; -} - -static int smu_v13_0_1_atom_get_smu_clockinfo(struct amdgpu_device *adev, -						uint8_t clk_id, -						uint8_t syspll_id, -						uint32_t *clk_freq) -{ -	struct atom_get_smu_clock_info_parameters_v3_1 input = {0}; -	struct atom_get_smu_clock_info_output_parameters_v3_1 *output; -	int ret, index; - -	input.clk_id = clk_id; -	input.syspll_id = syspll_id; -	input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ; -	index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1, -					    getsmuclockinfo); - -	ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index, -					(uint32_t *)&input); -	if (ret) -		return -EINVAL; - -	output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input; -	*clk_freq = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000; - -	return 0; -} - -int smu_v13_0_1_get_vbios_bootup_values(struct smu_context *smu) -{ -	int ret, index; -	uint16_t size; -	uint8_t frev, crev; -	struct atom_common_table_header *header; -	struct atom_firmware_info_v3_4 *v_3_4; -	struct atom_firmware_info_v3_3 *v_3_3; -	struct atom_firmware_info_v3_1 *v_3_1; - -	index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1, -					    firmwareinfo); - -	ret = amdgpu_atombios_get_data_table(smu->adev, index, &size, &frev, &crev, -					     (uint8_t **)&header); -	if (ret) -		return ret; - -	if (header->format_revision != 3) { -		dev_err(smu->adev->dev, "unknown atom_firmware_info version! for smu13\n"); -		return -EINVAL; -	} - -	switch (header->content_revision) { -	case 0: -	case 1: -	case 2: -		v_3_1 = (struct atom_firmware_info_v3_1 *)header; -		smu->smu_table.boot_values.revision = v_3_1->firmware_revision; -		smu->smu_table.boot_values.gfxclk = v_3_1->bootup_sclk_in10khz; -		smu->smu_table.boot_values.uclk = v_3_1->bootup_mclk_in10khz; -		smu->smu_table.boot_values.socclk = 0; -		smu->smu_table.boot_values.dcefclk = 0; -		smu->smu_table.boot_values.vddc = v_3_1->bootup_vddc_mv; -		smu->smu_table.boot_values.vddci = v_3_1->bootup_vddci_mv; -		smu->smu_table.boot_values.mvddc = v_3_1->bootup_mvddc_mv; -		smu->smu_table.boot_values.vdd_gfx = v_3_1->bootup_vddgfx_mv; -		smu->smu_table.boot_values.cooling_id = v_3_1->coolingsolution_id; -		break; -	case 3: -		v_3_3 = (struct atom_firmware_info_v3_3 *)header; -		smu->smu_table.boot_values.revision = v_3_3->firmware_revision; -		smu->smu_table.boot_values.gfxclk = v_3_3->bootup_sclk_in10khz; -		smu->smu_table.boot_values.uclk = v_3_3->bootup_mclk_in10khz; -		smu->smu_table.boot_values.socclk = 0; -		smu->smu_table.boot_values.dcefclk = 0; -		smu->smu_table.boot_values.vddc = v_3_3->bootup_vddc_mv; -		smu->smu_table.boot_values.vddci = v_3_3->bootup_vddci_mv; -		smu->smu_table.boot_values.mvddc = v_3_3->bootup_mvddc_mv; -		smu->smu_table.boot_values.vdd_gfx = v_3_3->bootup_vddgfx_mv; -		smu->smu_table.boot_values.cooling_id = v_3_3->coolingsolution_id; -		break; -	case 4: -	default: -		v_3_4 = (struct atom_firmware_info_v3_4 *)header; -		smu->smu_table.boot_values.revision = v_3_4->firmware_revision; -		smu->smu_table.boot_values.gfxclk = v_3_4->bootup_sclk_in10khz; -		smu->smu_table.boot_values.uclk = v_3_4->bootup_mclk_in10khz; -		smu->smu_table.boot_values.socclk = 0; -		smu->smu_table.boot_values.dcefclk = 0; -		smu->smu_table.boot_values.vddc = v_3_4->bootup_vddc_mv; -		smu->smu_table.boot_values.vddci = v_3_4->bootup_vddci_mv; -		smu->smu_table.boot_values.mvddc = v_3_4->bootup_mvddc_mv; -		smu->smu_table.boot_values.vdd_gfx = v_3_4->bootup_vddgfx_mv; -		smu->smu_table.boot_values.cooling_id = v_3_4->coolingsolution_id; -		break; -	} - -	smu->smu_table.boot_values.format_revision = header->format_revision; -	smu->smu_table.boot_values.content_revision = header->content_revision; - -	smu_v13_0_1_atom_get_smu_clockinfo(smu->adev, -					(uint8_t)SMU11_SYSPLL0_SOCCLK_ID, -					(uint8_t)0, -					&smu->smu_table.boot_values.socclk); - -	smu_v13_0_1_atom_get_smu_clockinfo(smu->adev, -					(uint8_t)SMU11_SYSPLL0_DCEFCLK_ID, -					(uint8_t)0, -					&smu->smu_table.boot_values.dcefclk); - -	smu_v13_0_1_atom_get_smu_clockinfo(smu->adev, -					(uint8_t)SMU11_SYSPLL0_ECLK_ID, -					(uint8_t)0, -					&smu->smu_table.boot_values.eclk); - -	smu_v13_0_1_atom_get_smu_clockinfo(smu->adev, -					(uint8_t)SMU11_SYSPLL0_VCLK_ID, -					(uint8_t)0, -					&smu->smu_table.boot_values.vclk); - -	smu_v13_0_1_atom_get_smu_clockinfo(smu->adev, -					(uint8_t)SMU11_SYSPLL0_DCLK_ID, -					(uint8_t)0, -					&smu->smu_table.boot_values.dclk); - -	if ((smu->smu_table.boot_values.format_revision == 3) && -	    (smu->smu_table.boot_values.content_revision >= 2)) -		smu_v13_0_1_atom_get_smu_clockinfo(smu->adev, -						(uint8_t)SMU11_SYSPLL1_0_FCLK_ID, -						(uint8_t)SMU11_SYSPLL1_2_ID, -						&smu->smu_table.boot_values.fclk); - -	return 0; -} - -int smu_v13_0_1_set_default_dpm_tables(struct smu_context *smu) -{ -	struct smu_table_context *smu_table = &smu->smu_table; - -	return smu_cmn_update_table(smu, SMU_TABLE_DPMCLOCKS, 0, smu_table->clocks_table, false); -} - -int smu_v13_0_1_set_driver_table_location(struct smu_context *smu) -{ -	struct smu_table *driver_table = &smu->smu_table.driver_table; -	int ret = 0; - -	if (!driver_table->mc_address) -		return 0; - -	ret = smu_cmn_send_smc_msg_with_param(smu, -			SMU_MSG_SetDriverDramAddrHigh, -			upper_32_bits(driver_table->mc_address), -			NULL); - -	if (ret) -		return ret; - -	ret = smu_cmn_send_smc_msg_with_param(smu, -			SMU_MSG_SetDriverDramAddrLow, -			lower_32_bits(driver_table->mc_address), -			NULL); - -	return ret; -} - -int smu_v13_0_1_gfx_off_control(struct smu_context *smu, bool enable) -{ -	int ret = 0; -	struct amdgpu_device *adev = smu->adev; - -	switch (adev->asic_type) { -	case CHIP_YELLOW_CARP: -		if (!(adev->pm.pp_feature & PP_GFXOFF_MASK)) -			return 0; -		if (enable) -			ret = smu_cmn_send_smc_msg(smu, SMU_MSG_AllowGfxOff, NULL); -		else -			ret = smu_cmn_send_smc_msg(smu, SMU_MSG_DisallowGfxOff, NULL); -		break; -	default: -		break; -	} - -	return ret; -} diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c index 18a1ffdca227..0cfeb9fc7c03 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c @@ -25,7 +25,7 @@  #include "amdgpu.h"  #include "amdgpu_smu.h" -#include "smu_v13_0_1.h" +#include "smu_v13_0.h"  #include "smu13_driver_if_yellow_carp.h"  #include "yellow_carp_ppt.h"  #include "smu_v13_0_1_ppsmc.h" @@ -186,6 +186,22 @@ err0_out:  	return -ENOMEM;  } +static int yellow_carp_fini_smc_tables(struct smu_context *smu) +{ +	struct smu_table_context *smu_table = &smu->smu_table; + +	kfree(smu_table->clocks_table); +	smu_table->clocks_table = NULL; + +	kfree(smu_table->metrics_table); +	smu_table->metrics_table = NULL; + +	kfree(smu_table->watermarks_table); +	smu_table->watermarks_table = NULL; + +	return 0; +} +  static int yellow_carp_system_features_control(struct smu_context *smu, bool en)  {  	struct smu_feature *feature = &smu->smu_feature; @@ -282,13 +298,9 @@ static int yellow_carp_mode_reset(struct smu_context *smu, int type)  	if (index < 0)  		return index == -EACCES ? 0 : index; -	mutex_lock(&smu->message_lock); - -	ret = smu_cmn_send_msg_without_waiting(smu, (uint16_t)index, type); - -	mutex_unlock(&smu->message_lock); - -	mdelay(10); +	ret = smu_cmn_send_smc_msg_with_param(smu, (uint16_t)index, type, NULL); +	if (ret) +		dev_err(smu->adev->dev, "Failed to mode reset!\n");  	return ret;  } @@ -659,6 +671,13 @@ static ssize_t yellow_carp_get_gpu_metrics(struct smu_context *smu,  	return sizeof(struct gpu_metrics_v2_1);  } +static int yellow_carp_set_default_dpm_tables(struct smu_context *smu) +{ +	struct smu_table_context *smu_table = &smu->smu_table; + +	return smu_cmn_update_table(smu, SMU_TABLE_DPMCLOCKS, 0, smu_table->clocks_table, false); +} +  static int yellow_carp_od_edit_dpm_table(struct smu_context *smu, enum PP_OD_DPM_TABLE_COMMAND type,  					long input[], uint32_t size)  { @@ -1203,17 +1222,17 @@ static int yellow_carp_set_fine_grain_gfx_freq_parameters(struct smu_context *sm  }  static const struct pptable_funcs yellow_carp_ppt_funcs = { -	.check_fw_status = smu_v13_0_1_check_fw_status, -	.check_fw_version = smu_v13_0_1_check_fw_version, +	.check_fw_status = smu_v13_0_check_fw_status, +	.check_fw_version = smu_v13_0_check_fw_version,  	.init_smc_tables = yellow_carp_init_smc_tables, -	.fini_smc_tables = smu_v13_0_1_fini_smc_tables, -	.get_vbios_bootup_values = smu_v13_0_1_get_vbios_bootup_values, +	.fini_smc_tables = yellow_carp_fini_smc_tables, +	.get_vbios_bootup_values = smu_v13_0_get_vbios_bootup_values,  	.system_features_control = yellow_carp_system_features_control,  	.send_smc_msg_with_param = smu_cmn_send_smc_msg_with_param,  	.send_smc_msg = smu_cmn_send_smc_msg,  	.dpm_set_vcn_enable = yellow_carp_dpm_set_vcn_enable,  	.dpm_set_jpeg_enable = yellow_carp_dpm_set_jpeg_enable, -	.set_default_dpm_table = smu_v13_0_1_set_default_dpm_tables, +	.set_default_dpm_table = yellow_carp_set_default_dpm_tables,  	.read_sensor = yellow_carp_read_sensor,  	.is_dpm_running = yellow_carp_is_dpm_running,  	.set_watermarks_table = yellow_carp_set_watermarks_table, @@ -1222,8 +1241,8 @@ static const struct pptable_funcs yellow_carp_ppt_funcs = {  	.get_gpu_metrics = yellow_carp_get_gpu_metrics,  	.get_enabled_mask = smu_cmn_get_enabled_32_bits_mask,  	.get_pp_feature_mask = smu_cmn_get_pp_feature_mask, -	.set_driver_table_location = smu_v13_0_1_set_driver_table_location, -	.gfx_off_control = smu_v13_0_1_gfx_off_control, +	.set_driver_table_location = smu_v13_0_set_driver_table_location, +	.gfx_off_control = smu_v13_0_gfx_off_control,  	.post_init = yellow_carp_post_smu_init,  	.mode2_reset = yellow_carp_mode2_reset,  	.get_dpm_ultimate_freq = yellow_carp_get_dpm_ultimate_freq, diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 98ae00661656..f454e0424086 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -834,6 +834,9 @@ long drm_ioctl(struct file *filp,  	if (drm_dev_is_unplugged(dev))  		return -ENODEV; +       if (DRM_IOCTL_TYPE(cmd) != DRM_IOCTL_BASE) +               return -ENOTTY; +  	is_driver_ioctl = nr >= DRM_COMMAND_BASE && nr < DRM_COMMAND_END;  	if (is_driver_ioctl) { diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index 5b6922e28ef2..aa667fa71158 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -2166,7 +2166,8 @@ static void  init_vbt_missing_defaults(struct drm_i915_private *i915)  {  	enum port port; -	int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F; +	int ports = BIT(PORT_A) | BIT(PORT_B) | BIT(PORT_C) | +		    BIT(PORT_D) | BIT(PORT_E) | BIT(PORT_F);  	if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))  		return; diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 3bad4e00f7be..2d5d21740c25 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -11361,13 +11361,19 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)  		intel_ddi_init(dev_priv, PORT_B);  		intel_ddi_init(dev_priv, PORT_C);  		vlv_dsi_init(dev_priv); -	} else if (DISPLAY_VER(dev_priv) >= 9) { +	} else if (DISPLAY_VER(dev_priv) == 10) {  		intel_ddi_init(dev_priv, PORT_A);  		intel_ddi_init(dev_priv, PORT_B);  		intel_ddi_init(dev_priv, PORT_C);  		intel_ddi_init(dev_priv, PORT_D);  		intel_ddi_init(dev_priv, PORT_E);  		intel_ddi_init(dev_priv, PORT_F); +	} else if (DISPLAY_VER(dev_priv) >= 9) { +		intel_ddi_init(dev_priv, PORT_A); +		intel_ddi_init(dev_priv, PORT_B); +		intel_ddi_init(dev_priv, PORT_C); +		intel_ddi_init(dev_priv, PORT_D); +		intel_ddi_init(dev_priv, PORT_E);  	} else if (HAS_DDI(dev_priv)) {  		u32 found; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c index a8abc9af5ff4..4a6419d7be93 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c @@ -25,10 +25,8 @@  #include "i915_gem_clflush.h"  #include "i915_gem_context.h"  #include "i915_gem_ioctls.h" -#include "i915_sw_fence_work.h"  #include "i915_trace.h"  #include "i915_user_extensions.h" -#include "i915_memcpy.h"  struct eb_vma {  	struct i915_vma *vma; @@ -1456,6 +1454,10 @@ static u32 *reloc_gpu(struct i915_execbuffer *eb,  		int err;  		struct intel_engine_cs *engine = eb->engine; +		/* If we need to copy for the cmdparser, we will stall anyway */ +		if (eb_use_cmdparser(eb)) +			return ERR_PTR(-EWOULDBLOCK); +  		if (!reloc_can_use_engine(engine)) {  			engine = engine->gt->engine_class[COPY_ENGINE_CLASS][0];  			if (!engine) @@ -2372,217 +2374,6 @@ shadow_batch_pin(struct i915_execbuffer *eb,  	return vma;  } -struct eb_parse_work { -	struct dma_fence_work base; -	struct intel_engine_cs *engine; -	struct i915_vma *batch; -	struct i915_vma *shadow; -	struct i915_vma *trampoline; -	unsigned long batch_offset; -	unsigned long batch_length; -	unsigned long *jump_whitelist; -	const void *batch_map; -	void *shadow_map; -}; - -static int __eb_parse(struct dma_fence_work *work) -{ -	struct eb_parse_work *pw = container_of(work, typeof(*pw), base); -	int ret; -	bool cookie; - -	cookie = dma_fence_begin_signalling(); -	ret = intel_engine_cmd_parser(pw->engine, -				      pw->batch, -				      pw->batch_offset, -				      pw->batch_length, -				      pw->shadow, -				      pw->jump_whitelist, -				      pw->shadow_map, -				      pw->batch_map); -	dma_fence_end_signalling(cookie); - -	return ret; -} - -static void __eb_parse_release(struct dma_fence_work *work) -{ -	struct eb_parse_work *pw = container_of(work, typeof(*pw), base); - -	if (!IS_ERR_OR_NULL(pw->jump_whitelist)) -		kfree(pw->jump_whitelist); - -	if (pw->batch_map) -		i915_gem_object_unpin_map(pw->batch->obj); -	else -		i915_gem_object_unpin_pages(pw->batch->obj); - -	i915_gem_object_unpin_map(pw->shadow->obj); - -	if (pw->trampoline) -		i915_active_release(&pw->trampoline->active); -	i915_active_release(&pw->shadow->active); -	i915_active_release(&pw->batch->active); -} - -static const struct dma_fence_work_ops eb_parse_ops = { -	.name = "eb_parse", -	.work = __eb_parse, -	.release = __eb_parse_release, -}; - -static inline int -__parser_mark_active(struct i915_vma *vma, -		     struct intel_timeline *tl, -		     struct dma_fence *fence) -{ -	struct intel_gt_buffer_pool_node *node = vma->private; - -	return i915_active_ref(&node->active, tl->fence_context, fence); -} - -static int -parser_mark_active(struct eb_parse_work *pw, struct intel_timeline *tl) -{ -	int err; - -	mutex_lock(&tl->mutex); - -	err = __parser_mark_active(pw->shadow, tl, &pw->base.dma); -	if (err) -		goto unlock; - -	if (pw->trampoline) { -		err = __parser_mark_active(pw->trampoline, tl, &pw->base.dma); -		if (err) -			goto unlock; -	} - -unlock: -	mutex_unlock(&tl->mutex); -	return err; -} - -static int eb_parse_pipeline(struct i915_execbuffer *eb, -			     struct i915_vma *shadow, -			     struct i915_vma *trampoline) -{ -	struct eb_parse_work *pw; -	struct drm_i915_gem_object *batch = eb->batch->vma->obj; -	bool needs_clflush; -	int err; - -	GEM_BUG_ON(overflows_type(eb->batch_start_offset, pw->batch_offset)); -	GEM_BUG_ON(overflows_type(eb->batch_len, pw->batch_length)); - -	pw = kzalloc(sizeof(*pw), GFP_KERNEL); -	if (!pw) -		return -ENOMEM; - -	err = i915_active_acquire(&eb->batch->vma->active); -	if (err) -		goto err_free; - -	err = i915_active_acquire(&shadow->active); -	if (err) -		goto err_batch; - -	if (trampoline) { -		err = i915_active_acquire(&trampoline->active); -		if (err) -			goto err_shadow; -	} - -	pw->shadow_map = i915_gem_object_pin_map(shadow->obj, I915_MAP_WB); -	if (IS_ERR(pw->shadow_map)) { -		err = PTR_ERR(pw->shadow_map); -		goto err_trampoline; -	} - -	needs_clflush = -		!(batch->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ); - -	pw->batch_map = ERR_PTR(-ENODEV); -	if (needs_clflush && i915_has_memcpy_from_wc()) -		pw->batch_map = i915_gem_object_pin_map(batch, I915_MAP_WC); - -	if (IS_ERR(pw->batch_map)) { -		err = i915_gem_object_pin_pages(batch); -		if (err) -			goto err_unmap_shadow; -		pw->batch_map = NULL; -	} - -	pw->jump_whitelist = -		intel_engine_cmd_parser_alloc_jump_whitelist(eb->batch_len, -							     trampoline); -	if (IS_ERR(pw->jump_whitelist)) { -		err = PTR_ERR(pw->jump_whitelist); -		goto err_unmap_batch; -	} - -	dma_fence_work_init(&pw->base, &eb_parse_ops); - -	pw->engine = eb->engine; -	pw->batch = eb->batch->vma; -	pw->batch_offset = eb->batch_start_offset; -	pw->batch_length = eb->batch_len; -	pw->shadow = shadow; -	pw->trampoline = trampoline; - -	/* Mark active refs early for this worker, in case we get interrupted */ -	err = parser_mark_active(pw, eb->context->timeline); -	if (err) -		goto err_commit; - -	err = dma_resv_reserve_shared(pw->batch->resv, 1); -	if (err) -		goto err_commit; - -	err = dma_resv_reserve_shared(shadow->resv, 1); -	if (err) -		goto err_commit; - -	/* Wait for all writes (and relocs) into the batch to complete */ -	err = i915_sw_fence_await_reservation(&pw->base.chain, -					      pw->batch->resv, NULL, false, -					      0, I915_FENCE_GFP); -	if (err < 0) -		goto err_commit; - -	/* Keep the batch alive and unwritten as we parse */ -	dma_resv_add_shared_fence(pw->batch->resv, &pw->base.dma); - -	/* Force execution to wait for completion of the parser */ -	dma_resv_add_excl_fence(shadow->resv, &pw->base.dma); - -	dma_fence_work_commit_imm(&pw->base); -	return 0; - -err_commit: -	i915_sw_fence_set_error_once(&pw->base.chain, err); -	dma_fence_work_commit_imm(&pw->base); -	return err; - -err_unmap_batch: -	if (pw->batch_map) -		i915_gem_object_unpin_map(batch); -	else -		i915_gem_object_unpin_pages(batch); -err_unmap_shadow: -	i915_gem_object_unpin_map(shadow->obj); -err_trampoline: -	if (trampoline) -		i915_active_release(&trampoline->active); -err_shadow: -	i915_active_release(&shadow->active); -err_batch: -	i915_active_release(&eb->batch->vma->active); -err_free: -	kfree(pw); -	return err; -} -  static struct i915_vma *eb_dispatch_secure(struct i915_execbuffer *eb, struct i915_vma *vma)  {  	/* @@ -2672,7 +2463,15 @@ static int eb_parse(struct i915_execbuffer *eb)  		goto err_trampoline;  	} -	err = eb_parse_pipeline(eb, shadow, trampoline); +	err = dma_resv_reserve_shared(shadow->resv, 1); +	if (err) +		goto err_trampoline; + +	err = intel_engine_cmd_parser(eb->engine, +				      eb->batch->vma, +				      eb->batch_start_offset, +				      eb->batch_len, +				      shadow, trampoline);  	if (err)  		goto err_unpin_batch; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c index f4fb68e8955a..e382b7f2353b 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c @@ -62,6 +62,7 @@ static void try_to_writeback(struct drm_i915_gem_object *obj,  	switch (obj->mm.madv) {  	case I915_MADV_DONTNEED:  		i915_gem_object_truncate(obj); +		return;  	case __I915_MADV_PURGED:  		return;  	} diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_execbuffer.c index 4df505e4c53a..16162fc2782d 100644 --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_execbuffer.c @@ -125,6 +125,10 @@ static int igt_gpu_reloc(void *arg)  	intel_gt_pm_get(&eb.i915->gt);  	for_each_uabi_engine(eb.engine, eb.i915) { +		if (intel_engine_requires_cmd_parser(eb.engine) || +		    intel_engine_using_cmd_parser(eb.engine)) +			continue; +  		reloc_cache_init(&eb.reloc_cache, eb.i915);  		memset(map, POISON_INUSE, 4096); diff --git a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c index 21c8b7350b7a..da4f5eb43ac2 100644 --- a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c +++ b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c @@ -303,10 +303,7 @@ static void __gen8_ppgtt_alloc(struct i915_address_space * const vm,  			__i915_gem_object_pin_pages(pt->base);  			i915_gem_object_make_unshrinkable(pt->base); -			if (lvl || -			    gen8_pt_count(*start, end) < I915_PDES || -			    intel_vgpu_active(vm->i915)) -				fill_px(pt, vm->scratch[lvl]->encode); +			fill_px(pt, vm->scratch[lvl]->encode);  			spin_lock(&pd->lock);  			if (likely(!pd->entry[idx])) { diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c index cac7f3f44642..f8948de72036 100644 --- a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c +++ b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c @@ -348,7 +348,7 @@ static struct i915_fence_reg *fence_find(struct i915_ggtt *ggtt)  	if (intel_has_pending_fb_unpin(ggtt->vm.i915))  		return ERR_PTR(-EAGAIN); -	return ERR_PTR(-EDEADLK); +	return ERR_PTR(-ENOBUFS);  }  int __i915_vma_pin_fence(struct i915_vma *vma) diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c index 98eb48c24c46..06024d321a1a 100644 --- a/drivers/gpu/drm/i915/gvt/handlers.c +++ b/drivers/gpu/drm/i915/gvt/handlers.c @@ -1977,6 +1977,21 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,  	if (drm_WARN_ON(&i915->drm, !engine))  		return -EINVAL; +	/* +	 * Due to d3_entered is used to indicate skipping PPGTT invalidation on +	 * vGPU reset, it's set on D0->D3 on PCI config write, and cleared after +	 * vGPU reset if in resuming. +	 * In S0ix exit, the device power state also transite from D3 to D0 as +	 * S3 resume, but no vGPU reset (triggered by QEMU devic model). After +	 * S0ix exit, all engines continue to work. However the d3_entered +	 * remains set which will break next vGPU reset logic (miss the expected +	 * PPGTT invalidation). +	 * Engines can only work in D0. Thus the 1st elsp write gives GVT a +	 * chance to clear d3_entered. +	 */ +	if (vgpu->d3_entered) +		vgpu->d3_entered = false; +  	execlist = &vgpu->submission.execlist[engine->id];  	execlist->elsp_dwords.data[3 - execlist->elsp_dwords.index] = data; diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c index 3992c25a191d..a3b4d99d64b9 100644 --- a/drivers/gpu/drm/i915/i915_cmd_parser.c +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c @@ -1145,19 +1145,41 @@ find_reg(const struct intel_engine_cs *engine, u32 addr)  static u32 *copy_batch(struct drm_i915_gem_object *dst_obj,  		       struct drm_i915_gem_object *src_obj,  		       unsigned long offset, unsigned long length, -		       void *dst, const void *src) +		       bool *needs_clflush_after)  { -	bool needs_clflush = -		!(src_obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ); - -	if (src) { -		GEM_BUG_ON(!needs_clflush); -		i915_unaligned_memcpy_from_wc(dst, src + offset, length); -	} else { -		struct scatterlist *sg; +	unsigned int src_needs_clflush; +	unsigned int dst_needs_clflush; +	void *dst, *src; +	int ret; + +	ret = i915_gem_object_prepare_write(dst_obj, &dst_needs_clflush); +	if (ret) +		return ERR_PTR(ret); + +	dst = i915_gem_object_pin_map(dst_obj, I915_MAP_WB); +	i915_gem_object_finish_access(dst_obj); +	if (IS_ERR(dst)) +		return dst; + +	ret = i915_gem_object_prepare_read(src_obj, &src_needs_clflush); +	if (ret) { +		i915_gem_object_unpin_map(dst_obj); +		return ERR_PTR(ret); +	} + +	src = ERR_PTR(-ENODEV); +	if (src_needs_clflush && i915_has_memcpy_from_wc()) { +		src = i915_gem_object_pin_map(src_obj, I915_MAP_WC); +		if (!IS_ERR(src)) { +			i915_unaligned_memcpy_from_wc(dst, +						      src + offset, +						      length); +			i915_gem_object_unpin_map(src_obj); +		} +	} +	if (IS_ERR(src)) { +		unsigned long x, n, remain;  		void *ptr; -		unsigned int x, sg_ofs; -		unsigned long remain;  		/*  		 * We can avoid clflushing partial cachelines before the write @@ -1168,40 +1190,34 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj,  		 * validate up to the end of the batch.  		 */  		remain = length; -		if (!(dst_obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ)) +		if (dst_needs_clflush & CLFLUSH_BEFORE)  			remain = round_up(remain,  					  boot_cpu_data.x86_clflush_size);  		ptr = dst;  		x = offset_in_page(offset); -		sg = i915_gem_object_get_sg(src_obj, offset >> PAGE_SHIFT, &sg_ofs, false); - -		while (remain) { -			unsigned long sg_max = sg->length >> PAGE_SHIFT; - -			for (; remain && sg_ofs < sg_max; sg_ofs++) { -				unsigned long len = min(remain, PAGE_SIZE - x); -				void *map; - -				map = kmap_atomic(nth_page(sg_page(sg), sg_ofs)); -				if (needs_clflush) -					drm_clflush_virt_range(map + x, len); -				memcpy(ptr, map + x, len); -				kunmap_atomic(map); - -				ptr += len; -				remain -= len; -				x = 0; -			} - -			sg_ofs = 0; -			sg = sg_next(sg); +		for (n = offset >> PAGE_SHIFT; remain; n++) { +			int len = min(remain, PAGE_SIZE - x); + +			src = kmap_atomic(i915_gem_object_get_page(src_obj, n)); +			if (src_needs_clflush) +				drm_clflush_virt_range(src + x, len); +			memcpy(ptr, src + x, len); +			kunmap_atomic(src); + +			ptr += len; +			remain -= len; +			x = 0;  		}  	} +	i915_gem_object_finish_access(src_obj); +  	memset32(dst + length, 0, (dst_obj->base.size - length) / sizeof(u32));  	/* dst_obj is returned with vmap pinned */ +	*needs_clflush_after = dst_needs_clflush & CLFLUSH_AFTER; +  	return dst;  } @@ -1360,6 +1376,9 @@ static int check_bbstart(u32 *cmd, u32 offset, u32 length,  	if (target_cmd_index == offset)  		return 0; +	if (IS_ERR(jump_whitelist)) +		return PTR_ERR(jump_whitelist); +  	if (!test_bit(target_cmd_index, jump_whitelist)) {  		DRM_DEBUG("CMD: BB_START to 0x%llx not a previously executed cmd\n",  			  jump_target); @@ -1369,28 +1388,10 @@ static int check_bbstart(u32 *cmd, u32 offset, u32 length,  	return 0;  } -/** - * intel_engine_cmd_parser_alloc_jump_whitelist() - preallocate jump whitelist for intel_engine_cmd_parser() - * @batch_length: length of the commands in batch_obj - * @trampoline: Whether jump trampolines are used. - * - * Preallocates a jump whitelist for parsing the cmd buffer in intel_engine_cmd_parser(). - * This has to be preallocated, because the command parser runs in signaling context, - * and may not allocate any memory. - * - * Return: NULL or pointer to a jump whitelist, or ERR_PTR() on failure. Use - * IS_ERR() to check for errors. Must bre freed() with kfree(). - * - * NULL is a valid value, meaning no allocation was required. - */ -unsigned long *intel_engine_cmd_parser_alloc_jump_whitelist(u32 batch_length, -							    bool trampoline) +static unsigned long *alloc_whitelist(u32 batch_length)  {  	unsigned long *jmp; -	if (trampoline) -		return NULL; -  	/*  	 * We expect batch_length to be less than 256KiB for known users,  	 * i.e. we need at most an 8KiB bitmap allocation which should be @@ -1415,9 +1416,7 @@ unsigned long *intel_engine_cmd_parser_alloc_jump_whitelist(u32 batch_length,   * @batch_offset: byte offset in the batch at which execution starts   * @batch_length: length of the commands in batch_obj   * @shadow: validated copy of the batch buffer in question - * @jump_whitelist: buffer preallocated with intel_engine_cmd_parser_alloc_jump_whitelist() - * @shadow_map: mapping to @shadow vma - * @batch_map: mapping to @batch vma + * @trampoline: true if we need to trampoline into privileged execution   *   * Parses the specified batch buffer looking for privilege violations as   * described in the overview. @@ -1425,21 +1424,21 @@ unsigned long *intel_engine_cmd_parser_alloc_jump_whitelist(u32 batch_length,   * Return: non-zero if the parser finds violations or otherwise fails; -EACCES   * if the batch appears legal but should use hardware parsing   */ +  int intel_engine_cmd_parser(struct intel_engine_cs *engine,  			    struct i915_vma *batch,  			    unsigned long batch_offset,  			    unsigned long batch_length,  			    struct i915_vma *shadow, -			    unsigned long *jump_whitelist, -			    void *shadow_map, -			    const void *batch_map) +			    bool trampoline)  {  	u32 *cmd, *batch_end, offset = 0;  	struct drm_i915_cmd_descriptor default_desc = noop_desc;  	const struct drm_i915_cmd_descriptor *desc = &default_desc; +	bool needs_clflush_after = false; +	unsigned long *jump_whitelist;  	u64 batch_addr, shadow_addr;  	int ret = 0; -	bool trampoline = !jump_whitelist;  	GEM_BUG_ON(!IS_ALIGNED(batch_offset, sizeof(*cmd)));  	GEM_BUG_ON(!IS_ALIGNED(batch_length, sizeof(*cmd))); @@ -1447,8 +1446,18 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine,  				     batch->size));  	GEM_BUG_ON(!batch_length); -	cmd = copy_batch(shadow->obj, batch->obj, batch_offset, batch_length, -			 shadow_map, batch_map); +	cmd = copy_batch(shadow->obj, batch->obj, +			 batch_offset, batch_length, +			 &needs_clflush_after); +	if (IS_ERR(cmd)) { +		DRM_DEBUG("CMD: Failed to copy batch\n"); +		return PTR_ERR(cmd); +	} + +	jump_whitelist = NULL; +	if (!trampoline) +		/* Defer failure until attempted use */ +		jump_whitelist = alloc_whitelist(batch_length);  	shadow_addr = gen8_canonical_addr(shadow->node.start);  	batch_addr = gen8_canonical_addr(batch->node.start + batch_offset); @@ -1549,6 +1558,9 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine,  	i915_gem_object_flush_map(shadow->obj); +	if (!IS_ERR_OR_NULL(jump_whitelist)) +		kfree(jump_whitelist); +	i915_gem_object_unpin_map(shadow->obj);  	return ret;  } diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 38ff2fb89744..b30397b04529 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1906,17 +1906,12 @@ const char *i915_cache_level_str(struct drm_i915_private *i915, int type);  int i915_cmd_parser_get_version(struct drm_i915_private *dev_priv);  int intel_engine_init_cmd_parser(struct intel_engine_cs *engine);  void intel_engine_cleanup_cmd_parser(struct intel_engine_cs *engine); -unsigned long *intel_engine_cmd_parser_alloc_jump_whitelist(u32 batch_length, -							    bool trampoline); -  int intel_engine_cmd_parser(struct intel_engine_cs *engine,  			    struct i915_vma *batch,  			    unsigned long batch_offset,  			    unsigned long batch_length,  			    struct i915_vma *shadow, -			    unsigned long *jump_whitelist, -			    void *shadow_map, -			    const void *batch_map); +			    bool trampoline);  #define I915_CMD_PARSER_TRAMPOLINE_SIZE 8  /* intel_device_info.c */ diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c index 1014c71cf7f5..37aef1308573 100644 --- a/drivers/gpu/drm/i915/i915_request.c +++ b/drivers/gpu/drm/i915/i915_request.c @@ -1426,10 +1426,8 @@ i915_request_await_execution(struct i915_request *rq,  	do {  		fence = *child++; -		if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { -			i915_sw_fence_set_error_once(&rq->submit, fence->error); +		if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))  			continue; -		}  		if (fence->context == rq->fence.context)  			continue; @@ -1527,10 +1525,8 @@ i915_request_await_dma_fence(struct i915_request *rq, struct dma_fence *fence)  	do {  		fence = *child++; -		if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { -			i915_sw_fence_set_error_once(&rq->submit, fence->error); +		if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))  			continue; -		}  		/*  		 * Requests on the same timeline are explicitly ordered, along diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c index 7eaa92fee421..e0a10f36acc1 100644 --- a/drivers/gpu/drm/i915/intel_device_info.c +++ b/drivers/gpu/drm/i915/intel_device_info.c @@ -325,7 +325,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)  			info->pipe_mask &= ~BIT(PIPE_C);  			info->cpu_transcoder_mask &= ~BIT(TRANSCODER_C);  		} -	} else if (HAS_DISPLAY(dev_priv) && GRAPHICS_VER(dev_priv) >= 9) { +	} else if (HAS_DISPLAY(dev_priv) && DISPLAY_VER(dev_priv) >= 9) {  		u32 dfsm = intel_de_read(dev_priv, SKL_DFSM);  		if (dfsm & SKL_DFSM_PIPE_A_DISABLE) { @@ -340,7 +340,8 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)  			info->pipe_mask &= ~BIT(PIPE_C);  			info->cpu_transcoder_mask &= ~BIT(TRANSCODER_C);  		} -		if (GRAPHICS_VER(dev_priv) >= 12 && + +		if (DISPLAY_VER(dev_priv) >= 12 &&  		    (dfsm & TGL_DFSM_PIPE_D_DISABLE)) {  			info->pipe_mask &= ~BIT(PIPE_D);  			info->cpu_transcoder_mask &= ~BIT(TRANSCODER_D); @@ -352,10 +353,10 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)  		if (dfsm & SKL_DFSM_DISPLAY_PM_DISABLE)  			info->display.has_fbc = 0; -		if (GRAPHICS_VER(dev_priv) >= 11 && (dfsm & ICL_DFSM_DMC_DISABLE)) +		if (DISPLAY_VER(dev_priv) >= 11 && (dfsm & ICL_DFSM_DMC_DISABLE))  			info->display.has_dmc = 0; -		if (GRAPHICS_VER(dev_priv) >= 10 && +		if (DISPLAY_VER(dev_priv) >= 10 &&  		    (dfsm & CNL_DFSM_DISPLAY_DSC_DISABLE))  			info->display.has_dsc = 0;  	} diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c index d01c4c919504..704dace895cb 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c @@ -296,7 +296,7 @@ static const struct dpu_mdp_cfg sc7180_mdp[] = {  static const struct dpu_mdp_cfg sm8250_mdp[] = {  	{  	.name = "top_0", .id = MDP_TOP, -	.base = 0x0, .len = 0x45C, +	.base = 0x0, .len = 0x494,  	.features = 0,  	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */  	.clk_ctrls[DPU_CLK_CTRL_VIG0] = { diff --git a/drivers/gpu/drm/msm/dp/dp_catalog.c b/drivers/gpu/drm/msm/dp/dp_catalog.c index ca96e3514790..c0423e76eed7 100644 --- a/drivers/gpu/drm/msm/dp/dp_catalog.c +++ b/drivers/gpu/drm/msm/dp/dp_catalog.c @@ -771,6 +771,7 @@ int dp_catalog_panel_timing_cfg(struct dp_catalog *dp_catalog)  	dp_write_link(catalog, REG_DP_HSYNC_VSYNC_WIDTH_POLARITY,  				dp_catalog->width_blanking);  	dp_write_link(catalog, REG_DP_ACTIVE_HOR_VER, dp_catalog->dp_active); +	dp_write_p0(catalog, MMSS_DP_INTF_CONFIG, 0);  	return 0;  } diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_ctrl.c index ee221d835fa0..eaddfd739885 100644 --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c @@ -1526,7 +1526,7 @@ static int dp_ctrl_process_phy_test_request(struct dp_ctrl_private *ctrl)  	 * running. Add the global reset just before disabling the  	 * link clocks and core clocks.  	 */ -	ret = dp_ctrl_off(&ctrl->dp_ctrl); +	ret = dp_ctrl_off_link_stream(&ctrl->dp_ctrl);  	if (ret) {  		DRM_ERROR("failed to disable DP controller\n");  		return ret; diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c index 051c1be1de7e..867388a399ad 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -219,6 +219,7 @@ static int dp_display_bind(struct device *dev, struct device *master,  		goto end;  	} +	dp->aux->drm_dev = drm;  	rc = dp_aux_register(dp->aux);  	if (rc) {  		DRM_ERROR("DRM DP AUX register failed\n"); @@ -1311,6 +1312,10 @@ static int dp_pm_resume(struct device *dev)  	else  		dp->dp_display.is_connected = false; +	dp_display_handle_plugged_change(g_dp_display, +				dp->dp_display.is_connected); + +  	mutex_unlock(&dp->event_mutex);  	return 0; diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 141178754231..1e8a971a86f2 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -1169,7 +1169,7 @@ static int msm_gem_new_impl(struct drm_device *dev,  	case MSM_BO_CACHED_COHERENT:  		if (priv->has_cached_coherent)  			break; -		/* fallthrough */ +		fallthrough;  	default:  		DRM_DEV_ERROR(dev->dev, "invalid cache flag: %x\n",  				(flags & MSM_BO_CACHE_MASK)); diff --git a/drivers/gpu/drm/msm/msm_iommu.c b/drivers/gpu/drm/msm/msm_iommu.c index eed2a762e9dd..bcaddbba564d 100644 --- a/drivers/gpu/drm/msm/msm_iommu.c +++ b/drivers/gpu/drm/msm/msm_iommu.c @@ -142,6 +142,9 @@ static const struct iommu_flush_ops null_tlb_ops = {  	.tlb_add_page = msm_iommu_tlb_add_page,  }; +static int msm_fault_handler(struct iommu_domain *domain, struct device *dev, +		unsigned long iova, int flags, void *arg); +  struct msm_mmu *msm_iommu_pagetable_create(struct msm_mmu *parent)  {  	struct adreno_smmu_priv *adreno_smmu = dev_get_drvdata(parent->dev); @@ -157,6 +160,13 @@ struct msm_mmu *msm_iommu_pagetable_create(struct msm_mmu *parent)  	if (!ttbr1_cfg)  		return ERR_PTR(-ENODEV); +	/* +	 * Defer setting the fault handler until we have a valid adreno_smmu +	 * to avoid accidentially installing a GPU specific fault handler for +	 * the display's iommu +	 */ +	iommu_set_fault_handler(iommu->domain, msm_fault_handler, iommu); +  	pagetable = kzalloc(sizeof(*pagetable), GFP_KERNEL);  	if (!pagetable)  		return ERR_PTR(-ENOMEM); @@ -300,7 +310,6 @@ struct msm_mmu *msm_iommu_new(struct device *dev, struct iommu_domain *domain)  	iommu->domain = domain;  	msm_mmu_init(&iommu->base, dev, &funcs, MSM_MMU_IOMMU); -	iommu_set_fault_handler(domain, msm_fault_handler, iommu);  	atomic_set(&iommu->pagetables, 0); diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 4f3a5357dd56..6d07e653f82d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -149,6 +149,8 @@ nouveau_bo_del_ttm(struct ttm_buffer_object *bo)  	 */  	if (bo->base.dev)  		drm_gem_object_release(&bo->base); +	else +		dma_resv_fini(&bo->base._resv);  	kfree(nvbo);  } @@ -330,6 +332,10 @@ nouveau_bo_new(struct nouveau_cli *cli, u64 size, int align,  	if (IS_ERR(nvbo))  		return PTR_ERR(nvbo); +	nvbo->bo.base.size = size; +	dma_resv_init(&nvbo->bo.base._resv); +	drm_vma_node_reset(&nvbo->bo.base.vma_node); +  	ret = nouveau_bo_init(nvbo, size, align, domain, sg, robj);  	if (ret)  		return ret; diff --git a/drivers/gpu/drm/panel/panel-novatek-nt35510.c b/drivers/gpu/drm/panel/panel-novatek-nt35510.c index ef70140c5b09..873cbd38e6d3 100644 --- a/drivers/gpu/drm/panel/panel-novatek-nt35510.c +++ b/drivers/gpu/drm/panel/panel-novatek-nt35510.c @@ -706,9 +706,7 @@ static int nt35510_power_on(struct nt35510 *nt)  	if (ret)  		return ret; -	ret = nt35510_read_id(nt); -	if (ret) -		return ret; +	nt35510_read_id(nt);  	/* Set up stuff in  manufacturer control, page 1 */  	ret = nt35510_send_long(nt, dsi, MCS_CMD_MAUCCTR, diff --git a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c index 2229f1af2ca8..46029c5610c8 100644 --- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c +++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c @@ -447,7 +447,6 @@ static int rpi_touchscreen_remove(struct i2c_client *i2c)  	drm_panel_remove(&ts->base);  	mipi_dsi_device_unregister(ts->dsi); -	kfree(ts->dsi);  	return 0;  } diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 21939d4352cf..1b80290c2b53 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -4166,7 +4166,7 @@ static const struct drm_display_mode yes_optoelectronics_ytc700tlag_05_201c_mode  static const struct panel_desc yes_optoelectronics_ytc700tlag_05_201c = {  	.modes = &yes_optoelectronics_ytc700tlag_05_201c_mode,  	.num_modes = 1, -	.bpc = 6, +	.bpc = 8,  	.size = {  		.width = 154,  		.height = 90, diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c index 19fd39d9a00c..37a1b6a6ad6d 100644 --- a/drivers/gpu/drm/qxl/qxl_ttm.c +++ b/drivers/gpu/drm/qxl/qxl_ttm.c @@ -127,7 +127,7 @@ static void qxl_bo_move_notify(struct ttm_buffer_object *bo,  	struct qxl_bo *qbo;  	struct qxl_device *qdev; -	if (!qxl_ttm_bo_is_qxl_bo(bo)) +	if (!qxl_ttm_bo_is_qxl_bo(bo) || !bo->resource)  		return;  	qbo = to_qxl_bo(bo);  	qdev = to_qxl(qbo->tbo.base.dev); diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 1b950b45cf4b..8d7fd65ccced 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -102,6 +102,9 @@ void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo,  		return;  	} +	if (!mem) +		return; +  	man = ttm_manager_type(bdev, mem->mem_type);  	list_move_tail(&bo->lru, &man->lru[bo->priority]); diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index 2f57f824e6db..763fa6f4e07d 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -63,6 +63,9 @@ int ttm_mem_io_reserve(struct ttm_device *bdev,  void ttm_mem_io_free(struct ttm_device *bdev,  		     struct ttm_resource *mem)  { +	if (!mem) +		return; +  	if (!mem->bus.offset && !mem->bus.addr)  		return; diff --git a/drivers/gpu/drm/ttm/ttm_device.c b/drivers/gpu/drm/ttm/ttm_device.c index 5f31acec3ad7..74e3b460132b 100644 --- a/drivers/gpu/drm/ttm/ttm_device.c +++ b/drivers/gpu/drm/ttm/ttm_device.c @@ -44,6 +44,8 @@ static unsigned ttm_glob_use_count;  struct ttm_global ttm_glob;  EXPORT_SYMBOL(ttm_glob); +struct dentry *ttm_debugfs_root; +  static void ttm_global_release(void)  {  	struct ttm_global *glob = &ttm_glob; @@ -53,6 +55,7 @@ static void ttm_global_release(void)  		goto out;  	ttm_pool_mgr_fini(); +	debugfs_remove(ttm_debugfs_root);  	__free_page(glob->dummy_read_page);  	memset(glob, 0, sizeof(*glob)); @@ -73,6 +76,13 @@ static int ttm_global_init(void)  	si_meminfo(&si); +	ttm_debugfs_root = debugfs_create_dir("ttm", NULL); +	if (IS_ERR(ttm_debugfs_root)) { +		ret = PTR_ERR(ttm_debugfs_root); +		ttm_debugfs_root = NULL; +		goto out; +	} +  	/* Limit the number of pages in the pool to about 50% of the total  	 * system memory.  	 */ @@ -100,6 +110,10 @@ static int ttm_global_init(void)  	debugfs_create_atomic_t("buffer_objects", 0444, ttm_debugfs_root,  				&glob->bo_count);  out: +	if (ret && ttm_debugfs_root) +		debugfs_remove(ttm_debugfs_root); +	if (ret) +		--ttm_glob_use_count;  	mutex_unlock(&ttm_global_mutex);  	return ret;  } diff --git a/drivers/gpu/drm/ttm/ttm_module.c b/drivers/gpu/drm/ttm/ttm_module.c index 997c458f68a9..7fcdef278c74 100644 --- a/drivers/gpu/drm/ttm/ttm_module.c +++ b/drivers/gpu/drm/ttm/ttm_module.c @@ -72,22 +72,6 @@ pgprot_t ttm_prot_from_caching(enum ttm_caching caching, pgprot_t tmp)  	return tmp;  } -struct dentry *ttm_debugfs_root; - -static int __init ttm_init(void) -{ -	ttm_debugfs_root = debugfs_create_dir("ttm", NULL); -	return 0; -} - -static void __exit ttm_exit(void) -{ -	debugfs_remove(ttm_debugfs_root); -} - -module_init(ttm_init); -module_exit(ttm_exit); -  MODULE_AUTHOR("Thomas Hellstrom, Jerome Glisse");  MODULE_DESCRIPTION("TTM memory manager subsystem (for DRM device)");  MODULE_LICENSE("GPL and additional rights"); diff --git a/drivers/gpu/drm/ttm/ttm_range_manager.c b/drivers/gpu/drm/ttm/ttm_range_manager.c index 03395386e8a7..f4b08a8705b3 100644 --- a/drivers/gpu/drm/ttm/ttm_range_manager.c +++ b/drivers/gpu/drm/ttm/ttm_range_manager.c @@ -181,6 +181,9 @@ int ttm_range_man_fini(struct ttm_device *bdev,  	struct drm_mm *mm = &rman->mm;  	int ret; +	if (!man) +		return 0; +  	ttm_resource_manager_set_used(man, false);  	ret = ttm_resource_manager_evict_all(bdev, man); diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index aab1b36ceb3c..c2876731ee2d 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1857,38 +1857,46 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi)  	vc4_hdmi_cec_update_clk_div(vc4_hdmi);  	if (vc4_hdmi->variant->external_irq_controller) { -		ret = devm_request_threaded_irq(&pdev->dev, -						platform_get_irq_byname(pdev, "cec-rx"), -						vc4_cec_irq_handler_rx_bare, -						vc4_cec_irq_handler_rx_thread, 0, -						"vc4 hdmi cec rx", vc4_hdmi); +		ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-rx"), +					   vc4_cec_irq_handler_rx_bare, +					   vc4_cec_irq_handler_rx_thread, 0, +					   "vc4 hdmi cec rx", vc4_hdmi);  		if (ret)  			goto err_delete_cec_adap; -		ret = devm_request_threaded_irq(&pdev->dev, -						platform_get_irq_byname(pdev, "cec-tx"), -						vc4_cec_irq_handler_tx_bare, -						vc4_cec_irq_handler_tx_thread, 0, -						"vc4 hdmi cec tx", vc4_hdmi); +		ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-tx"), +					   vc4_cec_irq_handler_tx_bare, +					   vc4_cec_irq_handler_tx_thread, 0, +					   "vc4 hdmi cec tx", vc4_hdmi);  		if (ret) -			goto err_delete_cec_adap; +			goto err_remove_cec_rx_handler;  	} else {  		HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, 0xffffffff); -		ret = devm_request_threaded_irq(&pdev->dev, platform_get_irq(pdev, 0), -						vc4_cec_irq_handler, -						vc4_cec_irq_handler_thread, 0, -						"vc4 hdmi cec", vc4_hdmi); +		ret = request_threaded_irq(platform_get_irq(pdev, 0), +					   vc4_cec_irq_handler, +					   vc4_cec_irq_handler_thread, 0, +					   "vc4 hdmi cec", vc4_hdmi);  		if (ret)  			goto err_delete_cec_adap;  	}  	ret = cec_register_adapter(vc4_hdmi->cec_adap, &pdev->dev);  	if (ret < 0) -		goto err_delete_cec_adap; +		goto err_remove_handlers;  	return 0; +err_remove_handlers: +	if (vc4_hdmi->variant->external_irq_controller) +		free_irq(platform_get_irq_byname(pdev, "cec-tx"), vc4_hdmi); +	else +		free_irq(platform_get_irq(pdev, 0), vc4_hdmi); + +err_remove_cec_rx_handler: +	if (vc4_hdmi->variant->external_irq_controller) +		free_irq(platform_get_irq_byname(pdev, "cec-rx"), vc4_hdmi); +  err_delete_cec_adap:  	cec_delete_adapter(vc4_hdmi->cec_adap); @@ -1897,6 +1905,15 @@ err_delete_cec_adap:  static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi)  { +	struct platform_device *pdev = vc4_hdmi->pdev; + +	if (vc4_hdmi->variant->external_irq_controller) { +		free_irq(platform_get_irq_byname(pdev, "cec-rx"), vc4_hdmi); +		free_irq(platform_get_irq_byname(pdev, "cec-tx"), vc4_hdmi); +	} else { +		free_irq(platform_get_irq(pdev, 0), vc4_hdmi); +	} +  	cec_unregister_adapter(vc4_hdmi->cec_adap);  }  #else diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index 6f5ea00973e0..45aeeca9b8f6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c @@ -36,6 +36,7 @@  #include <drm/drm_ioctl.h>  #include <drm/drm_sysfs.h>  #include <drm/ttm/ttm_bo_driver.h> +#include <drm/ttm/ttm_range_manager.h>  #include <drm/ttm/ttm_placement.h>  #include <generated/utsrelease.h> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c index 5648664f71bc..f2d625415458 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c @@ -354,7 +354,6 @@ static void vmw_otable_batch_takedown(struct vmw_private *dev_priv,  	ttm_bo_unpin(bo);  	ttm_bo_unreserve(bo); -	ttm_bo_unpin(batch->otable_bo);  	ttm_bo_put(batch->otable_bo);  	batch->otable_bo = NULL;  } | 
