1*2bc956efSJack Xiao /*
2*2bc956efSJack Xiao  * Copyright 2019 Advanced Micro Devices, Inc.
3*2bc956efSJack Xiao  *
4*2bc956efSJack Xiao  * Permission is hereby granted, free of charge, to any person obtaining a
5*2bc956efSJack Xiao  * copy of this software and associated documentation files (the "Software"),
6*2bc956efSJack Xiao  * to deal in the Software without restriction, including without limitation
7*2bc956efSJack Xiao  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*2bc956efSJack Xiao  * and/or sell copies of the Software, and to permit persons to whom the
9*2bc956efSJack Xiao  * Software is furnished to do so, subject to the following conditions:
10*2bc956efSJack Xiao  *
11*2bc956efSJack Xiao  * The above copyright notice and this permission notice shall be included in
12*2bc956efSJack Xiao  * all copies or substantial portions of the Software.
13*2bc956efSJack Xiao  *
14*2bc956efSJack Xiao  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*2bc956efSJack Xiao  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*2bc956efSJack Xiao  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17*2bc956efSJack Xiao  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*2bc956efSJack Xiao  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*2bc956efSJack Xiao  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*2bc956efSJack Xiao  * OTHER DEALINGS IN THE SOFTWARE.
21*2bc956efSJack Xiao  *
22*2bc956efSJack Xiao  */
23*2bc956efSJack Xiao 
24*2bc956efSJack Xiao #ifndef __AMDGPU_MES_CTX_H__
25*2bc956efSJack Xiao #define __AMDGPU_MES_CTX_H__
26*2bc956efSJack Xiao 
27*2bc956efSJack Xiao #include "v10_structs.h"
28*2bc956efSJack Xiao 
29*2bc956efSJack Xiao enum {
30*2bc956efSJack Xiao 	AMDGPU_MES_CTX_RPTR_OFFS = 0,
31*2bc956efSJack Xiao 	AMDGPU_MES_CTX_WPTR_OFFS,
32*2bc956efSJack Xiao 	AMDGPU_MES_CTX_FENCE_OFFS,
33*2bc956efSJack Xiao 	AMDGPU_MES_CTX_COND_EXE_OFFS,
34*2bc956efSJack Xiao 	AMDGPU_MES_CTX_TRAIL_FENCE_OFFS,
35*2bc956efSJack Xiao 	AMDGPU_MES_CTX_MAX_OFFS,
36*2bc956efSJack Xiao };
37*2bc956efSJack Xiao 
38*2bc956efSJack Xiao enum {
39*2bc956efSJack Xiao 	AMDGPU_MES_CTX_RING_OFFS = AMDGPU_MES_CTX_MAX_OFFS,
40*2bc956efSJack Xiao 	AMDGPU_MES_CTX_IB_OFFS,
41*2bc956efSJack Xiao 	AMDGPU_MES_CTX_PADDING_OFFS,
42*2bc956efSJack Xiao };
43*2bc956efSJack Xiao 
44*2bc956efSJack Xiao #define AMDGPU_MES_CTX_MAX_GFX_RINGS            1
45*2bc956efSJack Xiao #define AMDGPU_MES_CTX_MAX_COMPUTE_RINGS        4
46*2bc956efSJack Xiao #define AMDGPU_MES_CTX_MAX_SDMA_RINGS           2
47*2bc956efSJack Xiao #define AMDGPU_MES_CTX_MAX_RINGS					\
48*2bc956efSJack Xiao 	(AMDGPU_MES_CTX_MAX_GFX_RINGS +					\
49*2bc956efSJack Xiao 	 AMDGPU_MES_CTX_MAX_COMPUTE_RINGS +				\
50*2bc956efSJack Xiao 	 AMDGPU_MES_CTX_MAX_SDMA_RINGS)
51*2bc956efSJack Xiao 
52*2bc956efSJack Xiao #define AMDGPU_CSA_SDMA_SIZE    64
53*2bc956efSJack Xiao #define GFX10_MEC_HPD_SIZE	2048
54*2bc956efSJack Xiao 
55*2bc956efSJack Xiao struct amdgpu_wb_slot {
56*2bc956efSJack Xiao 	uint32_t data[8];
57*2bc956efSJack Xiao };
58*2bc956efSJack Xiao 
59*2bc956efSJack Xiao struct amdgpu_mes_ctx_meta_data {
60*2bc956efSJack Xiao 	struct {
61*2bc956efSJack Xiao 		uint8_t ring[PAGE_SIZE * 4];
62*2bc956efSJack Xiao 
63*2bc956efSJack Xiao 		/* gfx csa */
64*2bc956efSJack Xiao 		struct v10_gfx_meta_data gfx_meta_data;
65*2bc956efSJack Xiao 
66*2bc956efSJack Xiao 		uint8_t gds_backup[64 * 1024];
67*2bc956efSJack Xiao 
68*2bc956efSJack Xiao 		struct amdgpu_wb_slot slots[AMDGPU_MES_CTX_MAX_OFFS];
69*2bc956efSJack Xiao 
70*2bc956efSJack Xiao 		/* only for ib test */
71*2bc956efSJack Xiao 		uint32_t ib[256] __aligned(256);
72*2bc956efSJack Xiao 
73*2bc956efSJack Xiao 		uint32_t padding[64];
74*2bc956efSJack Xiao 
75*2bc956efSJack Xiao 	} __aligned(PAGE_SIZE) gfx[AMDGPU_MES_CTX_MAX_GFX_RINGS];
76*2bc956efSJack Xiao 
77*2bc956efSJack Xiao 	struct {
78*2bc956efSJack Xiao 		uint8_t ring[PAGE_SIZE * 4];
79*2bc956efSJack Xiao 
80*2bc956efSJack Xiao 		uint8_t mec_hpd[GFX10_MEC_HPD_SIZE];
81*2bc956efSJack Xiao 
82*2bc956efSJack Xiao 		struct amdgpu_wb_slot slots[AMDGPU_MES_CTX_MAX_OFFS];
83*2bc956efSJack Xiao 
84*2bc956efSJack Xiao 		/* only for ib test */
85*2bc956efSJack Xiao 		uint32_t ib[256] __aligned(256);
86*2bc956efSJack Xiao 
87*2bc956efSJack Xiao 		uint32_t padding[64];
88*2bc956efSJack Xiao 
89*2bc956efSJack Xiao 	} __aligned(PAGE_SIZE) compute[AMDGPU_MES_CTX_MAX_COMPUTE_RINGS];
90*2bc956efSJack Xiao 
91*2bc956efSJack Xiao 	struct {
92*2bc956efSJack Xiao 		uint8_t ring[PAGE_SIZE * 4];
93*2bc956efSJack Xiao 
94*2bc956efSJack Xiao 		/* sdma csa for mcbp */
95*2bc956efSJack Xiao 		uint8_t sdma_meta_data[AMDGPU_CSA_SDMA_SIZE];
96*2bc956efSJack Xiao 
97*2bc956efSJack Xiao 		struct amdgpu_wb_slot slots[AMDGPU_MES_CTX_MAX_OFFS];
98*2bc956efSJack Xiao 
99*2bc956efSJack Xiao 		/* only for ib test */
100*2bc956efSJack Xiao 		uint32_t ib[256] __aligned(256);
101*2bc956efSJack Xiao 
102*2bc956efSJack Xiao 		uint32_t padding[64];
103*2bc956efSJack Xiao 
104*2bc956efSJack Xiao 	} __aligned(PAGE_SIZE) sdma[AMDGPU_MES_CTX_MAX_SDMA_RINGS];
105*2bc956efSJack Xiao };
106*2bc956efSJack Xiao 
107*2bc956efSJack Xiao struct amdgpu_mes_ctx_data {
108*2bc956efSJack Xiao 	struct amdgpu_bo	*meta_data_obj;
109*2bc956efSJack Xiao 	uint64_t                meta_data_gpu_addr;
110*2bc956efSJack Xiao 	struct amdgpu_bo_va	*meta_data_va;
111*2bc956efSJack Xiao 	void                    *meta_data_ptr;
112*2bc956efSJack Xiao 	uint32_t                gang_ids[AMDGPU_HW_IP_DMA+1];
113*2bc956efSJack Xiao };
114*2bc956efSJack Xiao 
115*2bc956efSJack Xiao #define AMDGPU_FENCE_MES_QUEUE_FLAG     0x1000000u
116*2bc956efSJack Xiao #define AMDGPU_FENCE_MES_QUEUE_ID_MASK  (AMDGPU_FENCE_MES_QUEUE_FLAG - 1)
117*2bc956efSJack Xiao 
118*2bc956efSJack Xiao #endif
119