[PATCH 1/2] drm/amdgpu: store noretry parameter per driver instance

Christian König ckoenig.leichtzumerken at gmail.com
Thu Sep 24 06:37:41 UTC 2020


Am 23.09.20 um 16:08 schrieb Alex Deucher:
> This will allow us to have different defaults per asic
> in a future patch.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

Looks good to me, Reviewed-by: Christian König 
<christian.koenig at amd.com> for both.

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c         |  7 +++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h         |  1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c         |  2 ++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c            | 14 ++++++++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h            |  2 ++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c            |  2 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c              |  4 ++--
>   drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c           |  2 +-
>   drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c           |  2 +-
>   drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c           |  2 +-
>   drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c            |  2 +-
>   drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c            |  2 +-
>   drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c            |  2 +-
>   drivers/gpu/drm/amd/amdkfd/kfd_device.c            |  2 ++
>   .../drm/amd/amdkfd/kfd_device_queue_manager_v9.c   |  2 +-
>   drivers/gpu/drm/amd/amdkfd/kfd_priv.h              |  2 ++
>   16 files changed, 40 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index 53d5aa2d96bf..3c0e43f548fb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -581,6 +581,13 @@ uint32_t amdgpu_amdkfd_get_asic_rev_id(struct kgd_dev *kgd)
>   	return adev->rev_id;
>   }
>   
> +int amdgpu_amdkfd_get_noretry(struct kgd_dev *kgd)
> +{
> +	struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
> +
> +	return adev->gmc.noretry;
> +}
> +
>   int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
>   				uint32_t vmid, uint64_t gpu_addr,
>   				uint32_t *ib_cmd, uint32_t ib_len)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> index a10507ecb750..bc9f0e42e0a2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -181,6 +181,7 @@ uint64_t amdgpu_amdkfd_get_unique_id(struct kgd_dev *kgd);
>   uint64_t amdgpu_amdkfd_get_mmio_remap_phys_addr(struct kgd_dev *kgd);
>   uint32_t amdgpu_amdkfd_get_num_gws(struct kgd_dev *kgd);
>   uint32_t amdgpu_amdkfd_get_asic_rev_id(struct kgd_dev *kgd);
> +int amdgpu_amdkfd_get_noretry(struct kgd_dev *kgd);
>   uint8_t amdgpu_amdkfd_get_xgmi_hops_count(struct kgd_dev *dst, struct kgd_dev *src);
>   
>   /* Read user wptr from a specified user address space with page fault
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 2ff43a3d52fc..70c6593aa634 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1267,6 +1267,8 @@ static int amdgpu_device_check_arguments(struct amdgpu_device *adev)
>   		dev_warn(adev->dev, "set kernel compute queue number to 8 due to invalid parameter provided by user\n");
>   	}
>   
> +	amdgpu_gmc_noretry_set(adev);
> +
>   	return 0;
>   }
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
> index 213ef090bb0e..3572629fef0a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
> @@ -413,6 +413,20 @@ void amdgpu_gmc_tmz_set(struct amdgpu_device *adev)
>   	}
>   }
>   
> +/**
> + * amdgpu_noretry_set -- set per asic noretry defaults
> + * @adev: amdgpu_device pointer
> + *
> + * Set a per asic default for the no-retry parameter.
> + *
> + */
> +void amdgpu_gmc_noretry_set(struct amdgpu_device *adev)
> +{
> +	struct amdgpu_gmc *gmc = &adev->gmc;
> +
> +	gmc->noretry = amdgpu_noretry;
> +}
> +
>   void amdgpu_gmc_set_vm_fault_masks(struct amdgpu_device *adev, int hub_type,
>   				   bool enable)
>   {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
> index d61bbde4c7d2..aa0c83776ce0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
> @@ -239,6 +239,7 @@ struct amdgpu_gmc {
>   
>   	struct amdgpu_xgmi xgmi;
>   	struct amdgpu_irq_src	ecc_irq;
> +	int noretry;
>   };
>   
>   #define amdgpu_gmc_flush_gpu_tlb(adev, vmid, vmhub, type) ((adev)->gmc.gmc_funcs->flush_gpu_tlb((adev), (vmid), (vmhub), (type)))
> @@ -300,6 +301,7 @@ void amdgpu_gmc_ras_fini(struct amdgpu_device *adev);
>   int amdgpu_gmc_allocate_vm_inv_eng(struct amdgpu_device *adev);
>   
>   extern void amdgpu_gmc_tmz_set(struct amdgpu_device *adev);
> +extern void amdgpu_gmc_noretry_set(struct amdgpu_device *adev);
>   
>   extern void
>   amdgpu_gmc_set_vm_fault_masks(struct amdgpu_device *adev, int hub_type,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index bccaf4f77647..a5aaff15f7ec 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -177,7 +177,7 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>   			break;
>   		case CHIP_VEGA10:
>   			/* turn runpm on if noretry=0 */
> -			if (!amdgpu_noretry)
> +			if (!adev->gmc.noretry)
>   				adev->runpm = true;
>   			break;
>   		default:
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 4d65cbed31d4..f7958f6603d7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -2557,14 +2557,14 @@ static void gfx_v9_0_constants_init(struct amdgpu_device *adev)
>   			tmp = REG_SET_FIELD(0, SH_MEM_CONFIG, ALIGNMENT_MODE,
>   					    SH_MEM_ALIGNMENT_MODE_UNALIGNED);
>   			tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, RETRY_DISABLE,
> -					    !!amdgpu_noretry);
> +					    !!adev->gmc.noretry);
>   			WREG32_SOC15_RLC(GC, 0, mmSH_MEM_CONFIG, tmp);
>   			WREG32_SOC15_RLC(GC, 0, mmSH_MEM_BASES, 0);
>   		} else {
>   			tmp = REG_SET_FIELD(0, SH_MEM_CONFIG, ALIGNMENT_MODE,
>   					    SH_MEM_ALIGNMENT_MODE_UNALIGNED);
>   			tmp = REG_SET_FIELD(tmp, SH_MEM_CONFIG, RETRY_DISABLE,
> -					    !!amdgpu_noretry);
> +					    !!adev->gmc.noretry);
>   			WREG32_SOC15_RLC(GC, 0, mmSH_MEM_CONFIG, tmp);
>   			tmp = REG_SET_FIELD(0, SH_MEM_BASES, PRIVATE_BASE,
>   				(adev->gmc.private_aperture_start >> 48));
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
> index 529e46386a50..40b17da6a357 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
> @@ -245,7 +245,7 @@ static void gfxhub_v1_0_setup_vmid_config(struct amdgpu_device *adev)
>   		/* Send no-retry XNACK on fault to suppress VM fault storm. */
>   		tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
>   				    RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,
> -				    !amdgpu_noretry);
> +				    !adev->gmc.noretry);
>   		WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_CNTL,
>   				    i * hub->ctx_distance, tmp);
>   		WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_PAGE_TABLE_START_ADDR_LO32,
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c
> index b882ac59879a..fa279d559b72 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c
> @@ -318,7 +318,7 @@ static void gfxhub_v2_0_setup_vmid_config(struct amdgpu_device *adev)
>   		/* Send no-retry XNACK on fault to suppress VM fault storm. */
>   		tmp = REG_SET_FIELD(tmp, GCVM_CONTEXT1_CNTL,
>   				    RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,
> -				    !amdgpu_noretry);
> +				    !adev->gmc.noretry);
>   		WREG32_SOC15_OFFSET(GC, 0, mmGCVM_CONTEXT1_CNTL,
>   				    i * hub->ctx_distance, tmp);
>   		WREG32_SOC15_OFFSET(GC, 0, mmGCVM_CONTEXT1_PAGE_TABLE_START_ADDR_LO32,
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c
> index 237a9ff5afa0..6dc7a040ed7f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c
> @@ -319,7 +319,7 @@ static void gfxhub_v2_1_setup_vmid_config(struct amdgpu_device *adev)
>   		/* Send no-retry XNACK on fault to suppress VM fault storm. */
>   		tmp = REG_SET_FIELD(tmp, GCVM_CONTEXT1_CNTL,
>   				    RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,
> -				    !amdgpu_noretry);
> +				    !adev->gmc.noretry);
>   		WREG32_SOC15_OFFSET(GC, 0, mmGCVM_CONTEXT1_CNTL,
>   				    i * hub->ctx_distance, tmp);
>   		WREG32_SOC15_OFFSET(GC, 0, mmGCVM_CONTEXT1_PAGE_TABLE_START_ADDR_LO32,
> diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> index 45a902b1acb7..f84701c562bf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> @@ -268,7 +268,7 @@ static void mmhub_v1_0_setup_vmid_config(struct amdgpu_device *adev)
>   		/* Send no-retry XNACK on fault to suppress VM fault storm. */
>   		tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
>   				    RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,
> -				    !amdgpu_noretry);
> +				    !adev->gmc.noretry);
>   		WREG32_SOC15_OFFSET(MMHUB, 0, mmVM_CONTEXT1_CNTL,
>   				    i * hub->ctx_distance, tmp);
>   		WREG32_SOC15_OFFSET(MMHUB, 0, mmVM_CONTEXT1_PAGE_TABLE_START_ADDR_LO32,
> diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c
> index 2d88278c50bf..4120f9478707 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c
> @@ -374,7 +374,7 @@ static void mmhub_v2_0_setup_vmid_config(struct amdgpu_device *adev)
>   		/* Send no-retry XNACK on fault to suppress VM fault storm. */
>   		tmp = REG_SET_FIELD(tmp, MMVM_CONTEXT1_CNTL,
>   				    RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,
> -				    !amdgpu_noretry);
> +				    !adev->gmc.noretry);
>   		WREG32_SOC15_OFFSET(MMHUB, 0, mmMMVM_CONTEXT1_CNTL,
>   				    i * hub->ctx_distance, tmp);
>   		WREG32_SOC15_OFFSET(MMHUB, 0, mmMMVM_CONTEXT1_PAGE_TABLE_START_ADDR_LO32,
> diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
> index c2ef8142136e..66748bb01b52 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
> @@ -330,7 +330,7 @@ static void mmhub_v9_4_setup_vmid_config(struct amdgpu_device *adev, int hubid)
>   		/* Send no-retry XNACK on fault to suppress VM fault storm. */
>   		tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL,
>   				    RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,
> -				    !amdgpu_noretry);
> +				    !adev->gmc.noretry);
>   		WREG32_SOC15_OFFSET(MMHUB, 0, mmVML2VC0_VM_CONTEXT1_CNTL,
>   				    hubid * MMHUB_INSTANCE_REGISTER_OFFSET +
>   				    i * hub->ctx_distance, tmp);
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> index 135001a404bc..903170e59342 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> @@ -718,6 +718,8 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
>   
>   	kfd->unique_id = amdgpu_amdkfd_get_unique_id(kfd->kgd);
>   
> +	kfd->noretry = amdgpu_amdkfd_get_noretry(kfd->kgd);
> +
>   	if (kfd_interrupt_init(kfd)) {
>   		dev_err(kfd_device, "Error initializing interrupts\n");
>   		goto kfd_interrupt_error;
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_v9.c
> index 309f63a0b34a..eca6331efa94 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_v9.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager_v9.c
> @@ -61,7 +61,7 @@ static int update_qpd_v9(struct device_queue_manager *dqm,
>   		qpd->sh_mem_config =
>   				SH_MEM_ALIGNMENT_MODE_UNALIGNED <<
>   					SH_MEM_CONFIG__ALIGNMENT_MODE__SHIFT;
> -		if (amdgpu_noretry &&
> +		if (dqm->dev->noretry &&
>   		    !dqm->dev->use_iommu_v2)
>   			qpd->sh_mem_config |=
>   				1 << SH_MEM_CONFIG__RETRY_DISABLE__SHIFT;
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> index 739db04080d0..56f92cfff591 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> @@ -317,6 +317,8 @@ struct kfd_dev {
>   
>   	struct ida doorbell_ida;
>   	unsigned int max_doorbell_slices;
> +
> +	int noretry;
>   };
>   
>   enum kfd_mempool {



More information about the amd-gfx mailing list