Path: blob/21.2-virgl/src/intel/tools/gfx10_context.h
4547 views
/*1* Copyright © 2018 Intel Corporation2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice (including the next11* paragraph) shall be included in all copies or substantial portions of the12* Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING19* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS20* IN THE SOFTWARE.21*/2223#ifndef GFX10_CONTEXT_H24#define GFX10_CONTEXT_H2526static inline void gfx10_render_context_init(const struct intel_context_parameters *params,27uint32_t *data, uint32_t *size)28{29*size = CONTEXT_RENDER_SIZE;30if (!data)31return;3233*data++ = 0; /* MI_NOOP */34MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,350x2244 /* CONTEXT_CONTROL */, 0x90009 /* Inhibit Synchronous Context Switch | Engine Context Restore Inhibit */,360x2034 /* RING_HEAD */, 0,370x2030 /* RING_TAIL */, 0,380x2038 /* RING_BUFFER_START */, params->ring_addr,390x203C /* RING_BUFFER_CONTROL */, (params->ring_size - 4096) | 1 /* Buffer Length | Ring Buffer Enable */,400x2168 /* BB_HEAD_U */, 0,410x2140 /* BB_HEAD_L */, 0,420x2110 /* BB_STATE */, 0,430x211C /* SECOND_BB_HEAD_U */, 0,440x2114 /* SECOND_BB_HEAD_L */, 0,450x2118 /* SECOND_BB_STATE */, 0,460x21C0 /* BB_PER_CTX_PTR */, 0,470x21C4 /* RCS_INDIRECT_CTX */, 0,480x21C8 /* RCS_INDIRECT_CTX_OFFSET */, 0,490x2180 /* CCID */, 0);50*data++ = 0; /* MI_NOOP */5152MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,530x23A8 /* CTX_TIMESTAMP */, 0,540x228C /* PDP3_UDW */, 0,550x2288 /* PDP3_LDW */, 0,560x2284 /* PDP2_UDW */, 0,570x2280 /* PDP2_LDW */, 0,580x227C /* PDP1_UDW */, 0,590x2278 /* PDP1_LDW */, 0,600x2274 /* PDP0_UDW */, params->pml4_addr >> 32,610x2270 /* PDP0_LDW */, params->pml4_addr & 0xffffffff);62for (int i = 0; i < 12; i++)63*data++ = 0; /* MI_NOOP */6465*data++ = 0; /* MI_NOOP */66MI_LOAD_REGISTER_IMM_vals(data, 0,670x20C8 /* R_PWR_CLK_STATE */, 0x7FFFFFFF,680, /* GPGPU_CSR_BASE_ADDRESS ? */ 0);69*data++ = 0; /* MI_NOOP */7071for (int i = 0; i < 9; i++)72*data++ = 0;7374*data++ = MI_BATCH_BUFFER_END | 1 /* End Context */;75}7677static inline void gfx10_blitter_context_init(const struct intel_context_parameters *params,78uint32_t *data, uint32_t *size)79{80*size = CONTEXT_OTHER_SIZE;81if (!data)82return;8384*data++ = 0 /* MI_NOOP */;85MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,860x22244 /* CONTEXT_CONTROL */, 0x90009 /* Inhibit Synchronous Context Switch | Engine Context Restore Inhibit */,870x22034 /* RING_HEAD */, 0,880x22030 /* RING_TAIL */, 0,890x22038 /* RING_BUFFER_START */, params->ring_addr,900x2203C /* RING_BUFFER_CONTROL */, (params->ring_size - 4096) | 1 /* Buffer Length | Ring Buffer Enable */,910x22168 /* BB_HEAD_U */, 0,920x22140 /* BB_HEAD_L */, 0,930x22110 /* BB_STATE */, 0,940x2211C /* SECOND_BB_HEAD_U */, 0,950x22114 /* SECOND_BB_HEAD_L */, 0,960x22118 /* SECOND_BB_STATE */, 0,970x221C0 /* BB_PER_CTX_PTR */, 0,980x221C4 /* INDIRECT_CTX */, 0,990x221C8 /* INDIRECT_CTX_OFFSET */, 0);100*data++ = 0 /* MI_NOOP */;101*data++ = 0 /* MI_NOOP */;102103*data++ = 0 /* MI_NOOP */;104MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,1050x223A8 /* CTX_TIMESTAMP */, 0,1060x2228C /* PDP3_UDW */, 0,1070x22288 /* PDP3_LDW */, 0,1080x22284 /* PDP2_UDW */, 0,1090x22280 /* PDP2_LDW */, 0,1100x2227C /* PDP1_UDW */, 0,1110x22278 /* PDP1_LDW */, 0,1120x22274 /* PDP0_UDW */, params->pml4_addr >> 32,1130x22270 /* PDP0_LDW */, params->pml4_addr & 0xffffffff);114for (int i = 0; i < 13; i++)115*data++ = 0 /* MI_NOOP */;116117MI_LOAD_REGISTER_IMM_vals(data, 0,1180x22200 /* BCS_SWCTRL */, 0);119120for (int i = 0; i < 12; i++)121*data++ = 0 /* MI_NOOP */;122123124*data++ = MI_BATCH_BUFFER_END | 1 /* End Context */;125}126127static inline void gfx10_video_context_init(const struct intel_context_parameters *params,128uint32_t *data, uint32_t *size)129{130*size = CONTEXT_OTHER_SIZE;131if (!data)132return;133134*data++ = 0 /* MI_NOOP */;135MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,1360x1C244 /* CONTEXT_CONTROL */, 0x90009 /* Inhibit Synchronous Context Switch | Engine Context Restore Inhibit */,1370x1C034 /* RING_HEAD */, 0,1380x1C030 /* RING_TAIL */, 0,1390x1C038 /* RING_BUFFER_START */, params->ring_addr,1400x1C03C /* RING_BUFFER_CONTROL */, (params->ring_size - 4096) | 1 /* Buffer Length | Ring Buffer Enable */,1410x1C168 /* BB_HEAD_U */, 0,1420x1C140 /* BB_HEAD_L */, 0,1430x1C110 /* BB_STATE */, 0,1440x1C11C /* SECOND_BB_HEAD_U */, 0,1450x1C114 /* SECOND_BB_HEAD_L */, 0,1460x1C118 /* SECOND_BB_STATE */, 0);147for (int i = 0; i < 8; i++)148*data++ = 0 /* MI_NOOP */;149150*data++ = 0 /* MI_NOOP */;151MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,1520x1C3A8 /* CTX_TIMESTAMP */, 0,1530x1C28C /* PDP3_UDW */, 0,1540x1C288 /* PDP3_LDW */, 0,1550x1C284 /* PDP2_UDW */, 0,1560x1C280 /* PDP2_LDW */, 0,1570x1C27C /* PDP1_UDW */, 0,1580x1C278 /* PDP1_LDW */, 0,1590x1C274 /* PDP0_UDW */, params->pml4_addr >> 32,1600x1C270 /* PDP0_LDW */, params->pml4_addr & 0xffffffff);161for (int i = 0; i < 12; i++)162*data++ = 0 /* MI_NOOP */;163164*data++ = MI_BATCH_BUFFER_END | 1 /* End Context */;165}166167#endif /* GFX10_CONTEXT_H */168169170