Path: blob/21.2-virgl/src/intel/tools/gfx8_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 GFX8_CONTEXT_H24#define GFX8_CONTEXT_H2526static inline void gfx8_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 */,360x90009 /* Inhibit Synchronous Context Switch | Engine Context Restore Inhibit */,370x2034 /* RING_HEAD */, 0,380x2030 /* RING_TAIL */, 0,390x2038 /* RING_BUFFER_START */, params->ring_addr,400x203C /* RING_BUFFER_CONTROL */, (params->ring_addr - 4096) | 1 /* Buffer Length | Ring Buffer Enable */,410x2168 /* BB_HEAD_U */, 0,420x2140 /* BB_HEAD_L */, 0,430x2110 /* BB_STATE */, 0,440x211C /* SECOND_BB_HEAD_U */, 0,450x2114 /* SECOND_BB_HEAD_L */, 0,460x2118 /* SECOND_BB_STATE */, 0,470x21C0 /* BB_PER_CTX_PTR */, 0,480x21C4 /* RCS_INDIRECT_CTX */, 0,490x21C8 /* RCS_INDIRECT_CTX_OFFSET */, 0);50/* MI_NOOP */51*data++ = 0;52*data++ = 0;5354*data++ = 0; /* MI_NOOP */55MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,560x23A8 /* CTX_TIMESTAMP */, 0,570x228C /* PDP3_UDW */, 0,580x2288 /* PDP3_LDW */, 0,590x2284 /* PDP2_UDW */, 0,600x2280 /* PDP2_LDW */, 0,610x227C /* PDP1_UDW */, 0,620x2278 /* PDP1_LDW */, 0,630x2274 /* PDP0_UDW */, params->pml4_addr >> 32,640x2270 /* PDP0_LDW */, params->pml4_addr & 0xffffffff);65/* MI_NOOP */66for (int i = 0; i < 12; i++)67*data++ = 0 /* MI_NOOP */;6869*data++ = 0 /* MI_NOOP */;70MI_LOAD_REGISTER_IMM_vals(data, 0,710x20C8 /* R_PWR_CLK_STATE */, 0x7FFFFFFF);72*data++ = MI_BATCH_BUFFER_END;73}7475static inline void gfx8_blitter_context_init(const struct intel_context_parameters *params,76uint32_t *data, uint32_t *size)77{78*size = CONTEXT_OTHER_SIZE;79if (!data)80return;8182*data++ = 0 /* MI_NOOP */;83MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,840x22244 /* CONTEXT_CONTROL */, 0x90009 /* Inhibit Synchronous Context Switch | Engine Context Restore Inhibit */,850x22034 /* RING_HEAD */, 0,860x22030 /* RING_TAIL */, 0,870x22038 /* RING_BUFFER_START */, params->ring_addr,880x2203C /* RING_BUFFER_CONTROL */, (params->ring_size - 4096) | 1 /* Buffer Length | Ring Buffer Enable */,890x22168 /* BB_HEAD_U */, 0,900x22140 /* BB_HEAD_L */, 0,910x22110 /* BB_STATE */, 0,920x2211C /* SECOND_BB_HEAD_U */, 0,930x22114 /* SECOND_BB_HEAD_L */, 0,940x22118 /* SECOND_BB_STATE */, 0);9596for (int i = 0; i < 8; i++)97*data++ = 0 /* MI_NOOP */;9899*data = 0 /* MI_NOOP */;100MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,1010x223A8 /* CTX_TIMESTAMP */, 0,1020x2228C /* PDP3_UDW */, 0,1030x22288 /* PDP3_LDW */, 0,1040x22284 /* PDP2_UDW */, 0,1050x22280 /* PDP2_LDW */, 0,1060x2227C /* PDP1_UDW */, 0,1070x22278 /* PDP1_LDW */, 0,1080x22274 /* PDP0_UDW */, params->pml4_addr >> 32,1090x22270 /* PDP0_LDW */, params->pml4_addr & 0xffffffff);110111for (int i = 0; i < 12; i++)112*data++ = 0 /* MI_NOOP */;113114*data++ = MI_BATCH_BUFFER_END;115}116117static inline void gfx8_video_context_init(const struct intel_context_parameters *params,118uint32_t *data, uint32_t *size)119{120*size = CONTEXT_OTHER_SIZE;121if (!data)122return;123124*data++ = 0 /* MI_NOOP */;125MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,1260x1C244 /* CONTEXT_CONTROL */, 0x90009 /* Inhibit Synchronous Context Switch | Engine Context Restore Inhibit */,1270x1C034 /* RING_HEAD */, 0,1280x1C030 /* RING_TAIL */, 0,1290x1C038 /* RING_BUFFER_START */, params->ring_addr,1300x1C03C /* RING_BUFFER_CONTROL */, (params->ring_size - 4096) | 1 /* Buffer Length | Ring Buffer Enable */,1310x1C168 /* BB_HEAD_U */, 0,1320x1C140 /* BB_HEAD_L */, 0,1330x1C110 /* BB_STATE */, 0,1340x1C11C /* SECOND_BB_HEAD_U */, 0,1350x1C114 /* SECOND_BB_HEAD_L */, 0,1360x1C118 /* SECOND_BB_STATE */, 0);137for (int i = 0; i < 8; i++)138*data++ = 0 /* MI_NOOP */;139140*data++ = 0 /* MI_NOOP */;141MI_LOAD_REGISTER_IMM_vals(data, MI_LRI_FORCE_POSTED,1420x1C3A8 /* CTX_TIMESTAMP */, 0,1430x1C28C /* PDP3_UDW */, 0,1440x1C288 /* PDP3_LDW */, 0,1450x1C284 /* PDP2_UDW */, 0,1460x1C280 /* PDP2_LDW */, 0,1470x1C27C /* PDP1_UDW */, 0,1480x1C278 /* PDP1_LDW */, 0,1490x1C274 /* PDP0_UDW */, params->pml4_addr >> 32,1500x1C270 /* PDP0_LDW */, params->pml4_addr & 0xffffffff);151for (int i = 0; i < 12; i++)152*data++ = 0 /* MI_NOOP */;153154*data++ = MI_BATCH_BUFFER_END;155}156157#endif /* GFX8_CONTEXT_H */158159160