xref: /openbmc/linux/drivers/gpu/drm/amd/amdkfd/cik_regs.h (revision 6e99df57)
16e99df57SBen Goz /*
26e99df57SBen Goz  * Copyright 2014 Advanced Micro Devices, Inc.
36e99df57SBen Goz  *
46e99df57SBen Goz  * Permission is hereby granted, free of charge, to any person obtaining a
56e99df57SBen Goz  * copy of this software and associated documentation files (the "Software"),
66e99df57SBen Goz  * to deal in the Software without restriction, including without limitation
76e99df57SBen Goz  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
86e99df57SBen Goz  * and/or sell copies of the Software, and to permit persons to whom the
96e99df57SBen Goz  * Software is furnished to do so, subject to the following conditions:
106e99df57SBen Goz  *
116e99df57SBen Goz  * The above copyright notice and this permission notice shall be included in
126e99df57SBen Goz  * all copies or substantial portions of the Software.
136e99df57SBen Goz  *
146e99df57SBen Goz  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
156e99df57SBen Goz  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
166e99df57SBen Goz  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
176e99df57SBen Goz  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
186e99df57SBen Goz  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
196e99df57SBen Goz  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
206e99df57SBen Goz  * OTHER DEALINGS IN THE SOFTWARE.
216e99df57SBen Goz  */
226e99df57SBen Goz 
236e99df57SBen Goz #ifndef CIK_REGS_H
246e99df57SBen Goz #define CIK_REGS_H
256e99df57SBen Goz 
266e99df57SBen Goz #define IH_VMID_0_LUT					0x3D40u
276e99df57SBen Goz 
286e99df57SBen Goz #define BIF_DOORBELL_CNTL				0x530Cu
296e99df57SBen Goz 
306e99df57SBen Goz #define	SRBM_GFX_CNTL					0xE44
316e99df57SBen Goz #define	PIPEID(x)					((x) << 0)
326e99df57SBen Goz #define	MEID(x)						((x) << 2)
336e99df57SBen Goz #define	VMID(x)						((x) << 4)
346e99df57SBen Goz #define	QUEUEID(x)					((x) << 8)
356e99df57SBen Goz 
366e99df57SBen Goz #define	SQ_CONFIG					0x8C00
376e99df57SBen Goz 
386e99df57SBen Goz #define	SH_MEM_BASES					0x8C28
396e99df57SBen Goz /* if PTR32, these are the bases for scratch and lds */
406e99df57SBen Goz #define	PRIVATE_BASE(x)					((x) << 0) /* scratch */
416e99df57SBen Goz #define	SHARED_BASE(x)					((x) << 16) /* LDS */
426e99df57SBen Goz #define	SH_MEM_APE1_BASE				0x8C2C
436e99df57SBen Goz /* if PTR32, this is the base location of GPUVM */
446e99df57SBen Goz #define	SH_MEM_APE1_LIMIT				0x8C30
456e99df57SBen Goz /* if PTR32, this is the upper limit of GPUVM */
466e99df57SBen Goz #define	SH_MEM_CONFIG					0x8C34
476e99df57SBen Goz #define	PTR32						(1 << 0)
486e99df57SBen Goz #define PRIVATE_ATC					(1 << 1)
496e99df57SBen Goz #define	ALIGNMENT_MODE(x)				((x) << 2)
506e99df57SBen Goz #define	SH_MEM_ALIGNMENT_MODE_DWORD			0
516e99df57SBen Goz #define	SH_MEM_ALIGNMENT_MODE_DWORD_STRICT		1
526e99df57SBen Goz #define	SH_MEM_ALIGNMENT_MODE_STRICT			2
536e99df57SBen Goz #define	SH_MEM_ALIGNMENT_MODE_UNALIGNED			3
546e99df57SBen Goz #define	DEFAULT_MTYPE(x)				((x) << 4)
556e99df57SBen Goz #define	APE1_MTYPE(x)					((x) << 7)
566e99df57SBen Goz 
576e99df57SBen Goz /* valid for both DEFAULT_MTYPE and APE1_MTYPE */
586e99df57SBen Goz #define	MTYPE_CACHED					0
596e99df57SBen Goz #define	MTYPE_NONCACHED					3
606e99df57SBen Goz 
616e99df57SBen Goz 
626e99df57SBen Goz #define SH_STATIC_MEM_CONFIG				0x9604u
636e99df57SBen Goz 
646e99df57SBen Goz #define	TC_CFG_L1_LOAD_POLICY0				0xAC68
656e99df57SBen Goz #define	TC_CFG_L1_LOAD_POLICY1				0xAC6C
666e99df57SBen Goz #define	TC_CFG_L1_STORE_POLICY				0xAC70
676e99df57SBen Goz #define	TC_CFG_L2_LOAD_POLICY0				0xAC74
686e99df57SBen Goz #define	TC_CFG_L2_LOAD_POLICY1				0xAC78
696e99df57SBen Goz #define	TC_CFG_L2_STORE_POLICY0				0xAC7C
706e99df57SBen Goz #define	TC_CFG_L2_STORE_POLICY1				0xAC80
716e99df57SBen Goz #define	TC_CFG_L2_ATOMIC_POLICY				0xAC84
726e99df57SBen Goz #define	TC_CFG_L1_VOLATILE				0xAC88
736e99df57SBen Goz #define	TC_CFG_L2_VOLATILE				0xAC8C
746e99df57SBen Goz 
756e99df57SBen Goz #define CP_PQ_WPTR_POLL_CNTL				0xC20C
766e99df57SBen Goz #define	WPTR_POLL_EN					(1 << 31)
776e99df57SBen Goz 
786e99df57SBen Goz #define CPC_INT_CNTL					0xC2D0
796e99df57SBen Goz #define CP_ME1_PIPE0_INT_CNTL				0xC214
806e99df57SBen Goz #define CP_ME1_PIPE1_INT_CNTL				0xC218
816e99df57SBen Goz #define CP_ME1_PIPE2_INT_CNTL				0xC21C
826e99df57SBen Goz #define CP_ME1_PIPE3_INT_CNTL				0xC220
836e99df57SBen Goz #define CP_ME2_PIPE0_INT_CNTL				0xC224
846e99df57SBen Goz #define CP_ME2_PIPE1_INT_CNTL				0xC228
856e99df57SBen Goz #define CP_ME2_PIPE2_INT_CNTL				0xC22C
866e99df57SBen Goz #define CP_ME2_PIPE3_INT_CNTL				0xC230
876e99df57SBen Goz #define DEQUEUE_REQUEST_INT_ENABLE			(1 << 13)
886e99df57SBen Goz #define WRM_POLL_TIMEOUT_INT_ENABLE			(1 << 17)
896e99df57SBen Goz #define PRIV_REG_INT_ENABLE				(1 << 23)
906e99df57SBen Goz #define TIME_STAMP_INT_ENABLE				(1 << 26)
916e99df57SBen Goz #define GENERIC2_INT_ENABLE				(1 << 29)
926e99df57SBen Goz #define GENERIC1_INT_ENABLE				(1 << 30)
936e99df57SBen Goz #define GENERIC0_INT_ENABLE				(1 << 31)
946e99df57SBen Goz #define CP_ME1_PIPE0_INT_STATUS				0xC214
956e99df57SBen Goz #define CP_ME1_PIPE1_INT_STATUS				0xC218
966e99df57SBen Goz #define CP_ME1_PIPE2_INT_STATUS				0xC21C
976e99df57SBen Goz #define CP_ME1_PIPE3_INT_STATUS				0xC220
986e99df57SBen Goz #define CP_ME2_PIPE0_INT_STATUS				0xC224
996e99df57SBen Goz #define CP_ME2_PIPE1_INT_STATUS				0xC228
1006e99df57SBen Goz #define CP_ME2_PIPE2_INT_STATUS				0xC22C
1016e99df57SBen Goz #define CP_ME2_PIPE3_INT_STATUS				0xC230
1026e99df57SBen Goz #define DEQUEUE_REQUEST_INT_STATUS			(1 << 13)
1036e99df57SBen Goz #define WRM_POLL_TIMEOUT_INT_STATUS			(1 << 17)
1046e99df57SBen Goz #define PRIV_REG_INT_STATUS				(1 << 23)
1056e99df57SBen Goz #define TIME_STAMP_INT_STATUS				(1 << 26)
1066e99df57SBen Goz #define GENERIC2_INT_STATUS				(1 << 29)
1076e99df57SBen Goz #define GENERIC1_INT_STATUS				(1 << 30)
1086e99df57SBen Goz #define GENERIC0_INT_STATUS				(1 << 31)
1096e99df57SBen Goz 
1106e99df57SBen Goz #define CP_HPD_EOP_BASE_ADDR				0xC904
1116e99df57SBen Goz #define CP_HPD_EOP_BASE_ADDR_HI				0xC908
1126e99df57SBen Goz #define CP_HPD_EOP_VMID					0xC90C
1136e99df57SBen Goz #define CP_HPD_EOP_CONTROL				0xC910
1146e99df57SBen Goz #define	EOP_SIZE(x)					((x) << 0)
1156e99df57SBen Goz #define	EOP_SIZE_MASK					(0x3f << 0)
1166e99df57SBen Goz #define CP_MQD_BASE_ADDR				0xC914
1176e99df57SBen Goz #define CP_MQD_BASE_ADDR_HI				0xC918
1186e99df57SBen Goz #define CP_HQD_ACTIVE					0xC91C
1196e99df57SBen Goz #define CP_HQD_VMID					0xC920
1206e99df57SBen Goz 
1216e99df57SBen Goz #define CP_HQD_PERSISTENT_STATE				0xC924u
1226e99df57SBen Goz #define	DEFAULT_CP_HQD_PERSISTENT_STATE			(0x33U << 8)
1236e99df57SBen Goz #define	PRELOAD_REQ					(1 << 0)
1246e99df57SBen Goz 
1256e99df57SBen Goz #define CP_HQD_PIPE_PRIORITY				0xC928u
1266e99df57SBen Goz #define CP_HQD_QUEUE_PRIORITY				0xC92Cu
1276e99df57SBen Goz #define CP_HQD_QUANTUM					0xC930u
1286e99df57SBen Goz #define	QUANTUM_EN					1U
1296e99df57SBen Goz #define	QUANTUM_SCALE_1MS				(1U << 4)
1306e99df57SBen Goz #define	QUANTUM_DURATION(x)				((x) << 8)
1316e99df57SBen Goz 
1326e99df57SBen Goz #define CP_HQD_PQ_BASE					0xC934
1336e99df57SBen Goz #define CP_HQD_PQ_BASE_HI				0xC938
1346e99df57SBen Goz #define CP_HQD_PQ_RPTR					0xC93C
1356e99df57SBen Goz #define CP_HQD_PQ_RPTR_REPORT_ADDR			0xC940
1366e99df57SBen Goz #define CP_HQD_PQ_RPTR_REPORT_ADDR_HI			0xC944
1376e99df57SBen Goz #define CP_HQD_PQ_WPTR_POLL_ADDR			0xC948
1386e99df57SBen Goz #define CP_HQD_PQ_WPTR_POLL_ADDR_HI			0xC94C
1396e99df57SBen Goz #define CP_HQD_PQ_DOORBELL_CONTROL			0xC950
1406e99df57SBen Goz #define	DOORBELL_OFFSET(x)				((x) << 2)
1416e99df57SBen Goz #define	DOORBELL_OFFSET_MASK				(0x1fffff << 2)
1426e99df57SBen Goz #define	DOORBELL_SOURCE					(1 << 28)
1436e99df57SBen Goz #define	DOORBELL_SCHD_HIT				(1 << 29)
1446e99df57SBen Goz #define	DOORBELL_EN					(1 << 30)
1456e99df57SBen Goz #define	DOORBELL_HIT					(1 << 31)
1466e99df57SBen Goz #define CP_HQD_PQ_WPTR					0xC954
1476e99df57SBen Goz #define CP_HQD_PQ_CONTROL				0xC958
1486e99df57SBen Goz #define	QUEUE_SIZE(x)					((x) << 0)
1496e99df57SBen Goz #define	QUEUE_SIZE_MASK					(0x3f << 0)
1506e99df57SBen Goz #define	RPTR_BLOCK_SIZE(x)				((x) << 8)
1516e99df57SBen Goz #define	RPTR_BLOCK_SIZE_MASK				(0x3f << 8)
1526e99df57SBen Goz #define	MIN_AVAIL_SIZE(x)				((x) << 20)
1536e99df57SBen Goz #define	PQ_ATC_EN					(1 << 23)
1546e99df57SBen Goz #define	PQ_VOLATILE					(1 << 26)
1556e99df57SBen Goz #define	NO_UPDATE_RPTR					(1 << 27)
1566e99df57SBen Goz #define	UNORD_DISPATCH					(1 << 28)
1576e99df57SBen Goz #define	ROQ_PQ_IB_FLIP					(1 << 29)
1586e99df57SBen Goz #define	PRIV_STATE					(1 << 30)
1596e99df57SBen Goz #define	KMD_QUEUE					(1 << 31)
1606e99df57SBen Goz 
1616e99df57SBen Goz #define	DEFAULT_RPTR_BLOCK_SIZE				RPTR_BLOCK_SIZE(5)
1626e99df57SBen Goz #define	DEFAULT_MIN_AVAIL_SIZE				MIN_AVAIL_SIZE(3)
1636e99df57SBen Goz 
1646e99df57SBen Goz #define CP_HQD_IB_BASE_ADDR				0xC95Cu
1656e99df57SBen Goz #define CP_HQD_IB_BASE_ADDR_HI				0xC960u
1666e99df57SBen Goz #define CP_HQD_IB_RPTR					0xC964u
1676e99df57SBen Goz #define CP_HQD_IB_CONTROL				0xC968u
1686e99df57SBen Goz #define	IB_ATC_EN					(1U << 23)
1696e99df57SBen Goz #define	DEFAULT_MIN_IB_AVAIL_SIZE			(3U << 20)
1706e99df57SBen Goz 
1716e99df57SBen Goz #define CP_HQD_DEQUEUE_REQUEST				0xC974
1726e99df57SBen Goz #define	DEQUEUE_REQUEST_DRAIN				1
1736e99df57SBen Goz #define DEQUEUE_REQUEST_RESET				2
1746e99df57SBen Goz #define		DEQUEUE_INT					(1U << 8)
1756e99df57SBen Goz 
1766e99df57SBen Goz #define CP_HQD_SEMA_CMD					0xC97Cu
1776e99df57SBen Goz #define CP_HQD_MSG_TYPE					0xC980u
1786e99df57SBen Goz #define CP_HQD_ATOMIC0_PREOP_LO				0xC984u
1796e99df57SBen Goz #define CP_HQD_ATOMIC0_PREOP_HI				0xC988u
1806e99df57SBen Goz #define CP_HQD_ATOMIC1_PREOP_LO				0xC98Cu
1816e99df57SBen Goz #define CP_HQD_ATOMIC1_PREOP_HI				0xC990u
1826e99df57SBen Goz #define CP_HQD_HQ_SCHEDULER0				0xC994u
1836e99df57SBen Goz #define CP_HQD_HQ_SCHEDULER1				0xC998u
1846e99df57SBen Goz 
1856e99df57SBen Goz 
1866e99df57SBen Goz #define CP_MQD_CONTROL					0xC99C
1876e99df57SBen Goz #define	MQD_VMID(x)					((x) << 0)
1886e99df57SBen Goz #define	MQD_VMID_MASK					(0xf << 0)
1896e99df57SBen Goz #define	MQD_CONTROL_PRIV_STATE_EN			(1U << 8)
1906e99df57SBen Goz 
1916e99df57SBen Goz #define GRBM_GFX_INDEX					0x30800
1926e99df57SBen Goz #define	INSTANCE_INDEX(x)				((x) << 0)
1936e99df57SBen Goz #define	SH_INDEX(x)					((x) << 8)
1946e99df57SBen Goz #define	SE_INDEX(x)					((x) << 16)
1956e99df57SBen Goz #define	SH_BROADCAST_WRITES				(1 << 29)
1966e99df57SBen Goz #define	INSTANCE_BROADCAST_WRITES			(1 << 30)
1976e99df57SBen Goz #define	SE_BROADCAST_WRITES				(1 << 31)
1986e99df57SBen Goz 
1996e99df57SBen Goz #define SQC_CACHES					0x30d20
2006e99df57SBen Goz #define SQC_POLICY					0x8C38u
2016e99df57SBen Goz #define SQC_VOLATILE					0x8C3Cu
2026e99df57SBen Goz 
2036e99df57SBen Goz #define CP_PERFMON_CNTL					0x36020
2046e99df57SBen Goz 
2056e99df57SBen Goz #define ATC_VMID0_PASID_MAPPING				0x339Cu
2066e99df57SBen Goz #define	ATC_VMID_PASID_MAPPING_UPDATE_STATUS		0x3398u
2076e99df57SBen Goz #define	ATC_VMID_PASID_MAPPING_VALID			(1U << 31)
2086e99df57SBen Goz 
2096e99df57SBen Goz #define ATC_VM_APERTURE0_CNTL				0x3310u
2106e99df57SBen Goz #define	ATS_ACCESS_MODE_NEVER				0
2116e99df57SBen Goz #define	ATS_ACCESS_MODE_ALWAYS				1
2126e99df57SBen Goz 
2136e99df57SBen Goz #define ATC_VM_APERTURE0_CNTL2				0x3318u
2146e99df57SBen Goz #define ATC_VM_APERTURE0_HIGH_ADDR			0x3308u
2156e99df57SBen Goz #define ATC_VM_APERTURE0_LOW_ADDR			0x3300u
2166e99df57SBen Goz #define ATC_VM_APERTURE1_CNTL				0x3314u
2176e99df57SBen Goz #define ATC_VM_APERTURE1_CNTL2				0x331Cu
2186e99df57SBen Goz #define ATC_VM_APERTURE1_HIGH_ADDR			0x330Cu
2196e99df57SBen Goz #define ATC_VM_APERTURE1_LOW_ADDR			0x3304u
2206e99df57SBen Goz 
2216e99df57SBen Goz #endif
222