diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu.h')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 48 | 
1 files changed, 45 insertions, 3 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 8199d201b43a..bd37df5dd6d0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -86,6 +86,8 @@  #include "amdgpu_smu.h"  #include "amdgpu_discovery.h"  #include "amdgpu_mes.h" +#include "amdgpu_umc.h" +#include "amdgpu_mmhub.h"  #define MAX_GPU_INSTANCE		16 @@ -532,6 +534,14 @@ struct amdgpu_allowed_register_entry {  	bool grbm_indexed;  }; +enum amd_reset_method { +	AMD_RESET_METHOD_LEGACY = 0, +	AMD_RESET_METHOD_MODE0, +	AMD_RESET_METHOD_MODE1, +	AMD_RESET_METHOD_MODE2, +	AMD_RESET_METHOD_BACO +}; +  /*   * ASIC specific functions.   */ @@ -543,6 +553,7 @@ struct amdgpu_asic_funcs {  			     u32 sh_num, u32 reg_offset, u32 *value);  	void (*set_vga_state)(struct amdgpu_device *adev, bool state);  	int (*reset)(struct amdgpu_device *adev); +	enum amd_reset_method (*reset_method)(struct amdgpu_device *adev);  	/* get the reference clock */  	u32 (*get_xclk)(struct amdgpu_device *adev);  	/* MM block clocks */ @@ -627,6 +638,9 @@ void amdgpu_cgs_destroy_device(struct cgs_device *cgs_device);  typedef uint32_t (*amdgpu_rreg_t)(struct amdgpu_device*, uint32_t);  typedef void (*amdgpu_wreg_t)(struct amdgpu_device*, uint32_t, uint32_t); +typedef uint64_t (*amdgpu_rreg64_t)(struct amdgpu_device*, uint32_t); +typedef void (*amdgpu_wreg64_t)(struct amdgpu_device*, uint32_t, uint64_t); +  typedef uint32_t (*amdgpu_block_rreg_t)(struct amdgpu_device*, uint32_t, uint32_t);  typedef void (*amdgpu_block_wreg_t)(struct amdgpu_device*, uint32_t, uint32_t, uint32_t); @@ -648,6 +662,12 @@ struct nbio_hdp_flush_reg {  	u32 ref_and_mask_cp9;  	u32 ref_and_mask_sdma0;  	u32 ref_and_mask_sdma1; +	u32 ref_and_mask_sdma2; +	u32 ref_and_mask_sdma3; +	u32 ref_and_mask_sdma4; +	u32 ref_and_mask_sdma5; +	u32 ref_and_mask_sdma6; +	u32 ref_and_mask_sdma7;  };  struct amdgpu_mmio_remap { @@ -668,7 +688,7 @@ struct amdgpu_nbio_funcs {  	void (*sdma_doorbell_range)(struct amdgpu_device *adev, int instance,  			bool use_doorbell, int doorbell_index, int doorbell_size);  	void (*vcn_doorbell_range)(struct amdgpu_device *adev, bool use_doorbell, -			int doorbell_index); +				   int doorbell_index, int instance);  	void (*enable_doorbell_aperture)(struct amdgpu_device *adev,  					 bool enable);  	void (*enable_doorbell_selfring_aperture)(struct amdgpu_device *adev, @@ -705,6 +725,9 @@ struct amdgpu_df_funcs {  					 int is_disable);  	void (*pmc_get_count)(struct amdgpu_device *adev, uint64_t config,  					 uint64_t *count); +	uint64_t (*get_fica)(struct amdgpu_device *adev, uint32_t ficaa_val); +	void (*set_fica)(struct amdgpu_device *adev, uint32_t ficaa_val, +			 uint32_t ficadl_val, uint32_t ficadh_val);  };  /* Define the HW IP blocks will be used in driver , add more if necessary */  enum amd_hw_ip_block_type { @@ -712,6 +735,12 @@ enum amd_hw_ip_block_type {  	HDP_HWIP,  	SDMA0_HWIP,  	SDMA1_HWIP, +	SDMA2_HWIP, +	SDMA3_HWIP, +	SDMA4_HWIP, +	SDMA5_HWIP, +	SDMA6_HWIP, +	SDMA7_HWIP,  	MMHUB_HWIP,  	ATHUB_HWIP,  	NBIO_HWIP, @@ -728,10 +757,12 @@ enum amd_hw_ip_block_type {  	NBIF_HWIP,  	THM_HWIP,  	CLK_HWIP, +	UMC_HWIP, +	RSMU_HWIP,  	MAX_HWIP  }; -#define HWIP_MAX_INSTANCE	6 +#define HWIP_MAX_INSTANCE	8  struct amd_powerplay {  	void *pp_handle; @@ -758,7 +789,6 @@ struct amdgpu_device {  	int				usec_timeout;  	const struct amdgpu_asic_funcs	*asic_funcs;  	bool				shutdown; -	bool				need_dma32;  	bool				need_swiotlb;  	bool				accel_working;  	struct notifier_block		acpi_nb; @@ -803,6 +833,8 @@ struct amdgpu_device {  	amdgpu_wreg_t			pcie_wreg;  	amdgpu_rreg_t			pciep_rreg;  	amdgpu_wreg_t			pciep_wreg; +	amdgpu_rreg64_t			pcie_rreg64; +	amdgpu_wreg64_t			pcie_wreg64;  	/* protects concurrent UVD register access */  	spinlock_t uvd_ctx_idx_lock;  	amdgpu_rreg_t			uvd_ctx_rreg; @@ -836,6 +868,7 @@ struct amdgpu_device {  	dma_addr_t			dummy_page_addr;  	struct amdgpu_vm_manager	vm_manager;  	struct amdgpu_vmhub             vmhub[AMDGPU_MAX_VMHUBS]; +	unsigned			num_vmhubs;  	/* memory management */  	struct amdgpu_mman		mman; @@ -915,6 +948,9 @@ struct amdgpu_device {  	/* KFD */  	struct amdgpu_kfd_dev		kfd; +	/* UMC */ +	struct amdgpu_umc		umc; +  	/* display related functionality */  	struct amdgpu_display_manager dm; @@ -940,6 +976,7 @@ struct amdgpu_device {  	const struct amdgpu_nbio_funcs	*nbio_funcs;  	const struct amdgpu_df_funcs	*df_funcs; +	const struct amdgpu_mmhub_funcs	*mmhub_funcs;  	/* delayed work_func for deferring clockgating during resume */  	struct delayed_work     delayed_init_work; @@ -965,6 +1002,7 @@ struct amdgpu_device {  	/* record last mm index being written through WREG32*/  	unsigned long last_mm_index;  	bool                            in_gpu_reset; +	enum pp_mp1_state               mp1_state;  	struct mutex  lock_reset;  	struct amdgpu_doorbell_index doorbell_index; @@ -1033,6 +1071,8 @@ int emu_soc_asic_init(struct amdgpu_device *adev);  #define WREG32_PCIE(reg, v) adev->pcie_wreg(adev, (reg), (v))  #define RREG32_PCIE_PORT(reg) adev->pciep_rreg(adev, (reg))  #define WREG32_PCIE_PORT(reg, v) adev->pciep_wreg(adev, (reg), (v)) +#define RREG64_PCIE(reg) adev->pcie_rreg64(adev, (reg)) +#define WREG64_PCIE(reg, v) adev->pcie_wreg64(adev, (reg), (v))  #define RREG32_SMC(reg) adev->smc_rreg(adev, (reg))  #define WREG32_SMC(reg, v) adev->smc_wreg(adev, (reg), (v))  #define RREG32_UVD_CTX(reg) adev->uvd_ctx_rreg(adev, (reg)) @@ -1093,6 +1133,7 @@ int emu_soc_asic_init(struct amdgpu_device *adev);   */  #define amdgpu_asic_set_vga_state(adev, state) (adev)->asic_funcs->set_vga_state((adev), (state))  #define amdgpu_asic_reset(adev) (adev)->asic_funcs->reset((adev)) +#define amdgpu_asic_reset_method(adev) (adev)->asic_funcs->reset_method((adev))  #define amdgpu_asic_get_xclk(adev) (adev)->asic_funcs->get_xclk((adev))  #define amdgpu_asic_set_uvd_clocks(adev, v, d) (adev)->asic_funcs->set_uvd_clocks((adev), (v), (d))  #define amdgpu_asic_set_vce_clocks(adev, ev, ec) (adev)->asic_funcs->set_vce_clocks((adev), (ev), (ec)) @@ -1110,6 +1151,7 @@ int emu_soc_asic_init(struct amdgpu_device *adev);  #define amdgpu_asic_get_pcie_usage(adev, cnt0, cnt1) ((adev)->asic_funcs->get_pcie_usage((adev), (cnt0), (cnt1)))  #define amdgpu_asic_need_reset_on_init(adev) (adev)->asic_funcs->need_reset_on_init((adev))  #define amdgpu_asic_get_pcie_replay_count(adev) ((adev)->asic_funcs->get_pcie_replay_count((adev))) +#define amdgpu_inc_vram_lost(adev) atomic_inc(&((adev)->vram_lost_counter));  /* Common functions */  bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev); | 
