18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* Copyright (c) 2017 The Linux Foundation. All rights reserved. */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#ifndef _A6XX_HFI_H_ 58c2ecf20Sopenharmony_ci#define _A6XX_HFI_H_ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cistruct a6xx_hfi_queue_table_header { 88c2ecf20Sopenharmony_ci u32 version; 98c2ecf20Sopenharmony_ci u32 size; /* Size of the queue table in dwords */ 108c2ecf20Sopenharmony_ci u32 qhdr0_offset; /* Offset of the first queue header */ 118c2ecf20Sopenharmony_ci u32 qhdr_size; /* Size of the queue headers */ 128c2ecf20Sopenharmony_ci u32 num_queues; /* Number of total queues */ 138c2ecf20Sopenharmony_ci u32 active_queues; /* Number of active queues */ 148c2ecf20Sopenharmony_ci}; 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_cistruct a6xx_hfi_queue_header { 178c2ecf20Sopenharmony_ci u32 status; 188c2ecf20Sopenharmony_ci u32 iova; 198c2ecf20Sopenharmony_ci u32 type; 208c2ecf20Sopenharmony_ci u32 size; 218c2ecf20Sopenharmony_ci u32 msg_size; 228c2ecf20Sopenharmony_ci u32 dropped; 238c2ecf20Sopenharmony_ci u32 rx_watermark; 248c2ecf20Sopenharmony_ci u32 tx_watermark; 258c2ecf20Sopenharmony_ci u32 rx_request; 268c2ecf20Sopenharmony_ci u32 tx_request; 278c2ecf20Sopenharmony_ci u32 read_index; 288c2ecf20Sopenharmony_ci u32 write_index; 298c2ecf20Sopenharmony_ci}; 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistruct a6xx_hfi_queue { 328c2ecf20Sopenharmony_ci struct a6xx_hfi_queue_header *header; 338c2ecf20Sopenharmony_ci spinlock_t lock; 348c2ecf20Sopenharmony_ci u32 *data; 358c2ecf20Sopenharmony_ci atomic_t seqnum; 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci/* This is the outgoing queue to the GMU */ 398c2ecf20Sopenharmony_ci#define HFI_COMMAND_QUEUE 0 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci/* THis is the incoming response queue from the GMU */ 428c2ecf20Sopenharmony_ci#define HFI_RESPONSE_QUEUE 1 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci#define HFI_HEADER_ID(msg) ((msg) & 0xff) 458c2ecf20Sopenharmony_ci#define HFI_HEADER_SIZE(msg) (((msg) >> 8) & 0xff) 468c2ecf20Sopenharmony_ci#define HFI_HEADER_SEQNUM(msg) (((msg) >> 20) & 0xfff) 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci/* FIXME: Do we need this or can we use ARRAY_SIZE? */ 498c2ecf20Sopenharmony_ci#define HFI_RESPONSE_PAYLOAD_SIZE 16 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci/* HFI message types */ 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci#define HFI_MSG_CMD 0 548c2ecf20Sopenharmony_ci#define HFI_MSG_ACK 1 558c2ecf20Sopenharmony_ci#define HFI_MSG_ACK_V1 2 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci#define HFI_F2H_MSG_ACK 126 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_response { 608c2ecf20Sopenharmony_ci u32 header; 618c2ecf20Sopenharmony_ci u32 ret_header; 628c2ecf20Sopenharmony_ci u32 error; 638c2ecf20Sopenharmony_ci u32 payload[HFI_RESPONSE_PAYLOAD_SIZE]; 648c2ecf20Sopenharmony_ci}; 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci#define HFI_F2H_MSG_ERROR 100 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_error { 698c2ecf20Sopenharmony_ci u32 header; 708c2ecf20Sopenharmony_ci u32 code; 718c2ecf20Sopenharmony_ci u32 payload[2]; 728c2ecf20Sopenharmony_ci}; 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_INIT 0 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_gmu_init_cmd { 778c2ecf20Sopenharmony_ci u32 header; 788c2ecf20Sopenharmony_ci u32 seg_id; 798c2ecf20Sopenharmony_ci u32 dbg_buffer_addr; 808c2ecf20Sopenharmony_ci u32 dbg_buffer_size; 818c2ecf20Sopenharmony_ci u32 boot_state; 828c2ecf20Sopenharmony_ci}; 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_FW_VERSION 1 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_fw_version { 878c2ecf20Sopenharmony_ci u32 header; 888c2ecf20Sopenharmony_ci u32 supported_version; 898c2ecf20Sopenharmony_ci}; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_PERF_TABLE 4 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_cistruct perf_level { 948c2ecf20Sopenharmony_ci u32 vote; 958c2ecf20Sopenharmony_ci u32 freq; 968c2ecf20Sopenharmony_ci}; 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_cistruct perf_gx_level { 998c2ecf20Sopenharmony_ci u32 vote; 1008c2ecf20Sopenharmony_ci u32 acd; 1018c2ecf20Sopenharmony_ci u32 freq; 1028c2ecf20Sopenharmony_ci}; 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_perf_table_v1 { 1058c2ecf20Sopenharmony_ci u32 header; 1068c2ecf20Sopenharmony_ci u32 num_gpu_levels; 1078c2ecf20Sopenharmony_ci u32 num_gmu_levels; 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci struct perf_level gx_votes[16]; 1108c2ecf20Sopenharmony_ci struct perf_level cx_votes[4]; 1118c2ecf20Sopenharmony_ci}; 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_perf_table { 1148c2ecf20Sopenharmony_ci u32 header; 1158c2ecf20Sopenharmony_ci u32 num_gpu_levels; 1168c2ecf20Sopenharmony_ci u32 num_gmu_levels; 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci struct perf_gx_level gx_votes[16]; 1198c2ecf20Sopenharmony_ci struct perf_level cx_votes[4]; 1208c2ecf20Sopenharmony_ci}; 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_BW_TABLE 3 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_bw_table { 1258c2ecf20Sopenharmony_ci u32 header; 1268c2ecf20Sopenharmony_ci u32 bw_level_num; 1278c2ecf20Sopenharmony_ci u32 cnoc_cmds_num; 1288c2ecf20Sopenharmony_ci u32 ddr_cmds_num; 1298c2ecf20Sopenharmony_ci u32 cnoc_wait_bitmask; 1308c2ecf20Sopenharmony_ci u32 ddr_wait_bitmask; 1318c2ecf20Sopenharmony_ci u32 cnoc_cmds_addrs[6]; 1328c2ecf20Sopenharmony_ci u32 cnoc_cmds_data[2][6]; 1338c2ecf20Sopenharmony_ci u32 ddr_cmds_addrs[8]; 1348c2ecf20Sopenharmony_ci u32 ddr_cmds_data[16][8]; 1358c2ecf20Sopenharmony_ci}; 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_TEST 5 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_test { 1408c2ecf20Sopenharmony_ci u32 header; 1418c2ecf20Sopenharmony_ci}; 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_START 10 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_start { 1468c2ecf20Sopenharmony_ci u32 header; 1478c2ecf20Sopenharmony_ci}; 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_CORE_FW_START 14 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_cistruct a6xx_hfi_msg_core_fw_start { 1528c2ecf20Sopenharmony_ci u32 header; 1538c2ecf20Sopenharmony_ci u32 handle; 1548c2ecf20Sopenharmony_ci}; 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_GX_BW_PERF_VOTE 30 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_cistruct a6xx_hfi_gx_bw_perf_vote_cmd { 1598c2ecf20Sopenharmony_ci u32 header; 1608c2ecf20Sopenharmony_ci u32 ack_type; 1618c2ecf20Sopenharmony_ci u32 freq; 1628c2ecf20Sopenharmony_ci u32 bw; 1638c2ecf20Sopenharmony_ci}; 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci#define HFI_H2F_MSG_PREPARE_SLUMBER 33 1668c2ecf20Sopenharmony_ci 1678c2ecf20Sopenharmony_cistruct a6xx_hfi_prep_slumber_cmd { 1688c2ecf20Sopenharmony_ci u32 header; 1698c2ecf20Sopenharmony_ci u32 bw; 1708c2ecf20Sopenharmony_ci u32 freq; 1718c2ecf20Sopenharmony_ci}; 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci#endif 174