xref: /openbmc/linux/drivers/gpu/drm/msm/adreno/a6xx_hfi.h (revision 4b565ca5)
14b565ca5SJordan Crouse /* SPDX-License-Identifier: GPL-2.0 */
24b565ca5SJordan Crouse /* Copyright (c) 2017 The Linux Foundation. All rights reserved. */
34b565ca5SJordan Crouse 
44b565ca5SJordan Crouse #ifndef _A6XX_HFI_H_
54b565ca5SJordan Crouse #define _A6XX_HFI_H_
64b565ca5SJordan Crouse 
74b565ca5SJordan Crouse struct a6xx_hfi_queue_table_header {
84b565ca5SJordan Crouse 	u32 version;
94b565ca5SJordan Crouse 	u32 size;		/* Size of the queue table in dwords */
104b565ca5SJordan Crouse 	u32 qhdr0_offset;	/* Offset of the first queue header */
114b565ca5SJordan Crouse 	u32 qhdr_size;		/* Size of the queue headers */
124b565ca5SJordan Crouse 	u32 num_queues;		/* Number of total queues */
134b565ca5SJordan Crouse 	u32 active_queues;	/* Number of active queues */
144b565ca5SJordan Crouse };
154b565ca5SJordan Crouse 
164b565ca5SJordan Crouse struct a6xx_hfi_queue_header {
174b565ca5SJordan Crouse 	u32 status;
184b565ca5SJordan Crouse 	u32 iova;
194b565ca5SJordan Crouse 	u32 type;
204b565ca5SJordan Crouse 	u32 size;
214b565ca5SJordan Crouse 	u32 msg_size;
224b565ca5SJordan Crouse 	u32 dropped;
234b565ca5SJordan Crouse 	u32 rx_watermark;
244b565ca5SJordan Crouse 	u32 tx_watermark;
254b565ca5SJordan Crouse 	u32 rx_request;
264b565ca5SJordan Crouse 	u32 tx_request;
274b565ca5SJordan Crouse 	u32 read_index;
284b565ca5SJordan Crouse 	u32 write_index;
294b565ca5SJordan Crouse };
304b565ca5SJordan Crouse 
314b565ca5SJordan Crouse struct a6xx_hfi_queue {
324b565ca5SJordan Crouse 	struct a6xx_hfi_queue_header *header;
334b565ca5SJordan Crouse 	spinlock_t lock;
344b565ca5SJordan Crouse 	u32 *data;
354b565ca5SJordan Crouse 	atomic_t seqnum;
364b565ca5SJordan Crouse };
374b565ca5SJordan Crouse 
384b565ca5SJordan Crouse /* This is the outgoing queue to the GMU */
394b565ca5SJordan Crouse #define HFI_COMMAND_QUEUE 0
404b565ca5SJordan Crouse 
414b565ca5SJordan Crouse /* THis is the incoming response queue from the GMU */
424b565ca5SJordan Crouse #define HFI_RESPONSE_QUEUE 1
434b565ca5SJordan Crouse 
444b565ca5SJordan Crouse #define HFI_HEADER_ID(msg) ((msg) & 0xff)
454b565ca5SJordan Crouse #define HFI_HEADER_SIZE(msg) (((msg) >> 8) & 0xff)
464b565ca5SJordan Crouse #define HFI_HEADER_SEQNUM(msg) (((msg) >> 20) & 0xfff)
474b565ca5SJordan Crouse 
484b565ca5SJordan Crouse /* FIXME: Do we need this or can we use ARRAY_SIZE? */
494b565ca5SJordan Crouse #define HFI_RESPONSE_PAYLOAD_SIZE 16
504b565ca5SJordan Crouse 
514b565ca5SJordan Crouse /* HFI message types */
524b565ca5SJordan Crouse 
534b565ca5SJordan Crouse #define HFI_MSG_CMD 0
544b565ca5SJordan Crouse #define HFI_MSG_ACK 2
554b565ca5SJordan Crouse 
564b565ca5SJordan Crouse #define HFI_F2H_MSG_ACK 126
574b565ca5SJordan Crouse 
584b565ca5SJordan Crouse struct a6xx_hfi_msg_response {
594b565ca5SJordan Crouse 	u32 header;
604b565ca5SJordan Crouse 	u32 ret_header;
614b565ca5SJordan Crouse 	u32 error;
624b565ca5SJordan Crouse 	u32 payload[HFI_RESPONSE_PAYLOAD_SIZE];
634b565ca5SJordan Crouse };
644b565ca5SJordan Crouse 
654b565ca5SJordan Crouse #define HFI_F2H_MSG_ERROR 100
664b565ca5SJordan Crouse 
674b565ca5SJordan Crouse struct a6xx_hfi_msg_error {
684b565ca5SJordan Crouse 	u32 header;
694b565ca5SJordan Crouse 	u32 code;
704b565ca5SJordan Crouse 	u32 payload[2];
714b565ca5SJordan Crouse };
724b565ca5SJordan Crouse 
734b565ca5SJordan Crouse #define HFI_H2F_MSG_INIT 0
744b565ca5SJordan Crouse 
754b565ca5SJordan Crouse struct a6xx_hfi_msg_gmu_init_cmd {
764b565ca5SJordan Crouse 	u32 header;
774b565ca5SJordan Crouse 	u32 seg_id;
784b565ca5SJordan Crouse 	u32 dbg_buffer_addr;
794b565ca5SJordan Crouse 	u32 dbg_buffer_size;
804b565ca5SJordan Crouse 	u32 boot_state;
814b565ca5SJordan Crouse };
824b565ca5SJordan Crouse 
834b565ca5SJordan Crouse #define HFI_H2F_MSG_FW_VERSION 1
844b565ca5SJordan Crouse 
854b565ca5SJordan Crouse struct a6xx_hfi_msg_fw_version {
864b565ca5SJordan Crouse 	u32 header;
874b565ca5SJordan Crouse 	u32 supported_version;
884b565ca5SJordan Crouse };
894b565ca5SJordan Crouse 
904b565ca5SJordan Crouse #define HFI_H2F_MSG_PERF_TABLE 4
914b565ca5SJordan Crouse 
924b565ca5SJordan Crouse struct perf_level {
934b565ca5SJordan Crouse 	u32 vote;
944b565ca5SJordan Crouse 	u32 freq;
954b565ca5SJordan Crouse };
964b565ca5SJordan Crouse 
974b565ca5SJordan Crouse struct a6xx_hfi_msg_perf_table {
984b565ca5SJordan Crouse 	u32 header;
994b565ca5SJordan Crouse 	u32 num_gpu_levels;
1004b565ca5SJordan Crouse 	u32 num_gmu_levels;
1014b565ca5SJordan Crouse 
1024b565ca5SJordan Crouse 	struct perf_level gx_votes[16];
1034b565ca5SJordan Crouse 	struct perf_level cx_votes[4];
1044b565ca5SJordan Crouse };
1054b565ca5SJordan Crouse 
1064b565ca5SJordan Crouse #define HFI_H2F_MSG_BW_TABLE 3
1074b565ca5SJordan Crouse 
1084b565ca5SJordan Crouse struct a6xx_hfi_msg_bw_table {
1094b565ca5SJordan Crouse 	u32 header;
1104b565ca5SJordan Crouse 	u32 bw_level_num;
1114b565ca5SJordan Crouse 	u32 cnoc_cmds_num;
1124b565ca5SJordan Crouse 	u32 ddr_cmds_num;
1134b565ca5SJordan Crouse 	u32 cnoc_wait_bitmask;
1144b565ca5SJordan Crouse 	u32 ddr_wait_bitmask;
1154b565ca5SJordan Crouse 	u32 cnoc_cmds_addrs[6];
1164b565ca5SJordan Crouse 	u32 cnoc_cmds_data[2][6];
1174b565ca5SJordan Crouse 	u32 ddr_cmds_addrs[8];
1184b565ca5SJordan Crouse 	u32 ddr_cmds_data[16][8];
1194b565ca5SJordan Crouse };
1204b565ca5SJordan Crouse 
1214b565ca5SJordan Crouse #define HFI_H2F_MSG_TEST 5
1224b565ca5SJordan Crouse 
1234b565ca5SJordan Crouse struct a6xx_hfi_msg_test {
1244b565ca5SJordan Crouse 	u32 header;
1254b565ca5SJordan Crouse };
1264b565ca5SJordan Crouse 
1274b565ca5SJordan Crouse #endif
128