xref: /openbmc/linux/drivers/gpu/drm/amd/amdgpu/vega10_reg_init.c (revision c95baf12f5077419db01313ab61c2aac007d40cd)
14522824cSShaoyun Liu /*
24522824cSShaoyun Liu  * Copyright 2017 Advanced Micro Devices, Inc.
34522824cSShaoyun Liu  *
44522824cSShaoyun Liu  * Permission is hereby granted, free of charge, to any person obtaining a
54522824cSShaoyun Liu  * copy of this software and associated documentation files (the "Software"),
64522824cSShaoyun Liu  * to deal in the Software without restriction, including without limitation
74522824cSShaoyun Liu  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
84522824cSShaoyun Liu  * and/or sell copies of the Software, and to permit persons to whom the
94522824cSShaoyun Liu  * Software is furnished to do so, subject to the following conditions:
104522824cSShaoyun Liu  *
114522824cSShaoyun Liu  * The above copyright notice and this permission notice shall be included in
124522824cSShaoyun Liu  * all copies or substantial portions of the Software.
134522824cSShaoyun Liu  *
144522824cSShaoyun Liu  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
154522824cSShaoyun Liu  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
164522824cSShaoyun Liu  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
174522824cSShaoyun Liu  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
184522824cSShaoyun Liu  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
194522824cSShaoyun Liu  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
204522824cSShaoyun Liu  * OTHER DEALINGS IN THE SOFTWARE.
214522824cSShaoyun Liu  *
224522824cSShaoyun Liu  */
234522824cSShaoyun Liu #include "amdgpu.h"
244522824cSShaoyun Liu #include "soc15.h"
254522824cSShaoyun Liu 
264522824cSShaoyun Liu #include "soc15_common.h"
27f797dd51SHawking Zhang #include "vega10_ip_offset.h"
284522824cSShaoyun Liu 
vega10_reg_base_init(struct amdgpu_device * adev)294522824cSShaoyun Liu int vega10_reg_base_init(struct amdgpu_device *adev)
304522824cSShaoyun Liu {
314522824cSShaoyun Liu 	/* HW has more IP blocks,  only initialized the blocke beend by our driver  */
324522824cSShaoyun Liu 	uint32_t i;
334522824cSShaoyun Liu 	for (i = 0 ; i < MAX_INSTANCE ; ++i) {
344522824cSShaoyun Liu 		adev->reg_offset[GC_HWIP][i] = (uint32_t *)(&(GC_BASE.instance[i]));
354522824cSShaoyun Liu 		adev->reg_offset[HDP_HWIP][i] = (uint32_t *)(&(HDP_BASE.instance[i]));
364522824cSShaoyun Liu 		adev->reg_offset[MMHUB_HWIP][i] = (uint32_t *)(&(MMHUB_BASE.instance[i]));
374522824cSShaoyun Liu 		adev->reg_offset[ATHUB_HWIP][i] = (uint32_t *)(&(ATHUB_BASE.instance[i]));
384522824cSShaoyun Liu 		adev->reg_offset[NBIO_HWIP][i] = (uint32_t *)(&(NBIO_BASE.instance[i]));
394522824cSShaoyun Liu 		adev->reg_offset[MP0_HWIP][i] = (uint32_t *)(&(MP0_BASE.instance[i]));
401b59fb03SEvan Quan 		adev->reg_offset[MP1_HWIP][i] = (uint32_t *)(&(MP1_BASE.instance[i]));
414522824cSShaoyun Liu 		adev->reg_offset[UVD_HWIP][i] = (uint32_t *)(&(UVD_BASE.instance[i]));
424522824cSShaoyun Liu 		adev->reg_offset[VCE_HWIP][i] = (uint32_t *)(&(VCE_BASE.instance[i]));
434522824cSShaoyun Liu 		adev->reg_offset[VCN_HWIP][i] = (uint32_t *)(&(VCN_BASE.instance[i]));
444522824cSShaoyun Liu 		adev->reg_offset[DF_HWIP][i] = (uint32_t *)(&(DF_BASE.instance[i]));
454522824cSShaoyun Liu 		adev->reg_offset[DCE_HWIP][i] = (uint32_t *)(&(DCE_BASE.instance[i]));
464522824cSShaoyun Liu 		adev->reg_offset[OSSSYS_HWIP][i] = (uint32_t *)(&(OSSSYS_BASE.instance[i]));
474522824cSShaoyun Liu 		adev->reg_offset[SDMA0_HWIP][i] = (uint32_t *)(&(SDMA0_BASE.instance[i]));
484522824cSShaoyun Liu 		adev->reg_offset[SDMA1_HWIP][i] = (uint32_t *)(&(SDMA1_BASE.instance[i]));
494522824cSShaoyun Liu 		adev->reg_offset[SMUIO_HWIP][i] = (uint32_t *)(&(SMUIO_BASE.instance[i]));
504522824cSShaoyun Liu 		adev->reg_offset[PWR_HWIP][i] = (uint32_t *)(&(PWR_BASE.instance[i]));
514522824cSShaoyun Liu 		adev->reg_offset[NBIF_HWIP][i] = (uint32_t *)(&(NBIF_BASE.instance[i]));
521b59fb03SEvan Quan 		adev->reg_offset[THM_HWIP][i] = (uint32_t *)(&(THM_BASE.instance[i]));
5373b19174SRex Zhu 		adev->reg_offset[CLK_HWIP][i] = (uint32_t *)(&(CLK_BASE.instance[i]));
544522824cSShaoyun Liu 	}
554522824cSShaoyun Liu 	return 0;
564522824cSShaoyun Liu }
574522824cSShaoyun Liu 
vega10_doorbell_index_init(struct amdgpu_device * adev)58062f3807SOak Zeng void vega10_doorbell_index_init(struct amdgpu_device *adev)
59062f3807SOak Zeng {
60062f3807SOak Zeng 	adev->doorbell_index.kiq = AMDGPU_DOORBELL64_KIQ;
61062f3807SOak Zeng 	adev->doorbell_index.mec_ring0 = AMDGPU_DOORBELL64_MEC_RING0;
62062f3807SOak Zeng 	adev->doorbell_index.mec_ring1 = AMDGPU_DOORBELL64_MEC_RING1;
63062f3807SOak Zeng 	adev->doorbell_index.mec_ring2 = AMDGPU_DOORBELL64_MEC_RING2;
64062f3807SOak Zeng 	adev->doorbell_index.mec_ring3 = AMDGPU_DOORBELL64_MEC_RING3;
65062f3807SOak Zeng 	adev->doorbell_index.mec_ring4 = AMDGPU_DOORBELL64_MEC_RING4;
66062f3807SOak Zeng 	adev->doorbell_index.mec_ring5 = AMDGPU_DOORBELL64_MEC_RING5;
67062f3807SOak Zeng 	adev->doorbell_index.mec_ring6 = AMDGPU_DOORBELL64_MEC_RING6;
68062f3807SOak Zeng 	adev->doorbell_index.mec_ring7 = AMDGPU_DOORBELL64_MEC_RING7;
69e02c80d6SYong Zhao 	adev->doorbell_index.userqueue_start = AMDGPU_DOORBELL64_USERQUEUE_START;
70e02c80d6SYong Zhao 	adev->doorbell_index.userqueue_end = AMDGPU_DOORBELL64_USERQUEUE_END;
71062f3807SOak Zeng 	adev->doorbell_index.gfx_ring0 = AMDGPU_DOORBELL64_GFX_RING0;
72898e0d9dSOak Zeng 	adev->doorbell_index.sdma_engine[0] = AMDGPU_DOORBELL64_sDMA_ENGINE0;
73898e0d9dSOak Zeng 	adev->doorbell_index.sdma_engine[1] = AMDGPU_DOORBELL64_sDMA_ENGINE1;
74062f3807SOak Zeng 	adev->doorbell_index.ih = AMDGPU_DOORBELL64_IH;
75062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.uvd_ring0_1 = AMDGPU_DOORBELL64_UVD_RING0_1;
76062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.uvd_ring2_3 = AMDGPU_DOORBELL64_UVD_RING2_3;
77062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.uvd_ring4_5 = AMDGPU_DOORBELL64_UVD_RING4_5;
78062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.uvd_ring6_7 = AMDGPU_DOORBELL64_UVD_RING6_7;
79062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.vce_ring0_1 = AMDGPU_DOORBELL64_VCE_RING0_1;
80062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.vce_ring2_3 = AMDGPU_DOORBELL64_VCE_RING2_3;
81062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.vce_ring4_5 = AMDGPU_DOORBELL64_VCE_RING4_5;
82062f3807SOak Zeng 	adev->doorbell_index.uvd_vce.vce_ring6_7 = AMDGPU_DOORBELL64_VCE_RING6_7;
83*0c6b391dSLeo Liu 	adev->doorbell_index.vcn.vcn_ring0_1 = AMDGPU_DOORBELL64_VCN0_1;
84*0c6b391dSLeo Liu 	adev->doorbell_index.vcn.vcn_ring2_3 = AMDGPU_DOORBELL64_VCN2_3;
85*0c6b391dSLeo Liu 	adev->doorbell_index.vcn.vcn_ring4_5 = AMDGPU_DOORBELL64_VCN4_5;
86*0c6b391dSLeo Liu 	adev->doorbell_index.vcn.vcn_ring6_7 = AMDGPU_DOORBELL64_VCN6_7;
87828845b7SYong Zhao 
88828845b7SYong Zhao 	adev->doorbell_index.first_non_cp = AMDGPU_DOORBELL64_FIRST_NON_CP;
89828845b7SYong Zhao 	adev->doorbell_index.last_non_cp = AMDGPU_DOORBELL64_LAST_NON_CP;
90828845b7SYong Zhao 
91062f3807SOak Zeng 	/* In unit of dword doorbell */
92062f3807SOak Zeng 	adev->doorbell_index.max_assignment = AMDGPU_DOORBELL64_MAX_ASSIGNMENT << 1;
93fd485540SOak Zeng 	adev->doorbell_index.sdma_doorbell_range = 4;
94062f3807SOak Zeng }
954522824cSShaoyun Liu 
96