xref: /netbsd-src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_mes.h (revision 41ec02673d281bbb3d38e6c78504ce6e30c228c1)
1*41ec0267Sriastradh /*	$NetBSD: amdgpu_mes.h,v 1.2 2021/12/18 23:44:58 riastradh Exp $	*/
24e390cabSriastradh 
34e390cabSriastradh /*
44e390cabSriastradh  * Copyright 2019 Advanced Micro Devices, Inc.
54e390cabSriastradh  *
64e390cabSriastradh  * Permission is hereby granted, free of charge, to any person obtaining a
74e390cabSriastradh  * copy of this software and associated documentation files (the "Software"),
84e390cabSriastradh  * to deal in the Software without restriction, including without limitation
94e390cabSriastradh  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
104e390cabSriastradh  * and/or sell copies of the Software, and to permit persons to whom the
114e390cabSriastradh  * Software is furnished to do so, subject to the following conditions:
124e390cabSriastradh  *
134e390cabSriastradh  * The above copyright notice and this permission notice shall be included in
144e390cabSriastradh  * all copies or substantial portions of the Software.
154e390cabSriastradh  *
164e390cabSriastradh  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
174e390cabSriastradh  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
184e390cabSriastradh  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
194e390cabSriastradh  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
204e390cabSriastradh  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
214e390cabSriastradh  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
224e390cabSriastradh  * OTHER DEALINGS IN THE SOFTWARE.
234e390cabSriastradh  *
244e390cabSriastradh  */
254e390cabSriastradh 
264e390cabSriastradh #ifndef __AMDGPU_MES_H__
274e390cabSriastradh #define __AMDGPU_MES_H__
284e390cabSriastradh 
294e390cabSriastradh struct amdgpu_mes_funcs;
304e390cabSriastradh 
314e390cabSriastradh struct amdgpu_mes {
324e390cabSriastradh 	struct amdgpu_adev *adev;
334e390cabSriastradh 
344e390cabSriastradh 	const struct firmware           *fw;
354e390cabSriastradh 
364e390cabSriastradh 	/* mes ucode */
374e390cabSriastradh 	struct amdgpu_bo		*ucode_fw_obj;
384e390cabSriastradh 	uint64_t			ucode_fw_gpu_addr;
394e390cabSriastradh 	uint32_t			*ucode_fw_ptr;
404e390cabSriastradh 	uint32_t                        ucode_fw_version;
414e390cabSriastradh 	uint64_t                        uc_start_addr;
424e390cabSriastradh 
434e390cabSriastradh 	/* mes ucode data */
444e390cabSriastradh 	struct amdgpu_bo		*data_fw_obj;
454e390cabSriastradh 	uint64_t			data_fw_gpu_addr;
464e390cabSriastradh 	uint32_t			*data_fw_ptr;
474e390cabSriastradh 	uint32_t                        data_fw_version;
484e390cabSriastradh 	uint64_t                        data_start_addr;
494e390cabSriastradh 
504e390cabSriastradh 	/* ip specific functions */
514e390cabSriastradh 	struct amdgpu_mes_funcs *funcs;
524e390cabSriastradh };
534e390cabSriastradh 
544e390cabSriastradh struct mes_add_queue_input {
554e390cabSriastradh 	uint32_t	process_id;
564e390cabSriastradh 	uint64_t	page_table_base_addr;
574e390cabSriastradh 	uint64_t	process_va_start;
584e390cabSriastradh 	uint64_t	process_va_end;
594e390cabSriastradh 	uint64_t	process_quantum;
604e390cabSriastradh 	uint64_t	process_context_addr;
614e390cabSriastradh 	uint64_t	gang_quantum;
624e390cabSriastradh 	uint64_t	gang_context_addr;
634e390cabSriastradh 	uint32_t	inprocess_gang_priority;
644e390cabSriastradh 	uint32_t	gang_global_priority_level;
654e390cabSriastradh 	uint32_t	doorbell_offset;
664e390cabSriastradh 	uint64_t	mqd_addr;
674e390cabSriastradh 	uint64_t	wptr_addr;
684e390cabSriastradh 	uint32_t	queue_type;
694e390cabSriastradh 	uint32_t	paging;
704e390cabSriastradh };
714e390cabSriastradh 
724e390cabSriastradh struct mes_remove_queue_input {
734e390cabSriastradh 	uint32_t	doorbell_offset;
744e390cabSriastradh 	uint64_t	gang_context_addr;
754e390cabSriastradh };
764e390cabSriastradh 
774e390cabSriastradh struct mes_suspend_gang_input {
784e390cabSriastradh 	bool		suspend_all_gangs;
794e390cabSriastradh 	uint64_t	gang_context_addr;
804e390cabSriastradh 	uint64_t	suspend_fence_addr;
814e390cabSriastradh 	uint32_t	suspend_fence_value;
824e390cabSriastradh };
834e390cabSriastradh 
844e390cabSriastradh struct mes_resume_gang_input {
854e390cabSriastradh 	bool		resume_all_gangs;
864e390cabSriastradh 	uint64_t	gang_context_addr;
874e390cabSriastradh };
884e390cabSriastradh 
894e390cabSriastradh struct amdgpu_mes_funcs {
904e390cabSriastradh 	int (*add_hw_queue)(struct amdgpu_mes *mes,
914e390cabSriastradh 			    struct mes_add_queue_input *input);
924e390cabSriastradh 
934e390cabSriastradh 	int (*remove_hw_queue)(struct amdgpu_mes *mes,
944e390cabSriastradh 			       struct mes_remove_queue_input *input);
954e390cabSriastradh 
964e390cabSriastradh 	int (*suspend_gang)(struct amdgpu_mes *mes,
974e390cabSriastradh 			    struct mes_suspend_gang_input *input);
984e390cabSriastradh 
994e390cabSriastradh 	int (*resume_gang)(struct amdgpu_mes *mes,
1004e390cabSriastradh 			   struct mes_resume_gang_input *input);
1014e390cabSriastradh };
1024e390cabSriastradh 
1034e390cabSriastradh #endif /* __AMDGPU_MES_H__ */
104