xref: /optee_os/core/include/drivers/amd/asu_sharedmem.h (revision 7f2d4e10736f698f6b7739a9cd39e64d96c98a0a)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2024-2026, Advanced Micro Devices, Inc. All rights reserved.
4  *
5  */
6 
7 #ifndef __ASU_SHAREDMEM_H_
8 #define __ASU_SHAREDMEM_H_
9 
10 #include <stdint.h>
11 #include <util.h>
12 
13 #define ASU_MAX_BUFFERS			8U
14 #define ASU_CHANNEL_RESERVED_MEM	1188U
15 #define ASU_COMMAND_IS_PRESENT		0x1U
16 #define ASU_RESPONSE_IS_PRESENT		0x1U
17 #define ASU_RESPONSE_STATUS_INDEX	0U
18 #define ASU_RESPONSE_BUFF_ADDR_INDEX	1U
19 #define ASU_COMMAND_ID_MASK		0x0000003FU
20 #define ASU_UNIQUE_REQ_ID_MASK		0x00000FC0U
21 #define ASU_UNIQUE_REQ_ID_SHIFT		6U
22 #define ASU_UNIQUE_ID_MAX		SHIFT_U32(ASU_MAX_BUFFERS, 1U)
23 #define ASU_MODULE_ID_MASK		0x0003F000U
24 #define ASU_MODULE_ID_SHIFT		12U
25 #define ASU_COMMAND_LENGTH_SHIFT	18U
26 #define ASU_COMMAND_REQ_ARGS		22U
27 #define ASU_COMMAND_RESP_ARGS		17U
28 #define ASU_RTCA_BASEADDR		0xEBE40000U
29 #define ASU_RTCA_COMM_CHANNEL_INFO_ADDR	(ASU_RTCA_BASEADDR + 0x10U)
30 #define ASU_RTCA_CHANNEL_BASE_OFFSET	0x18U
31 #define ASU_RTCA_CHANNEL_INFO_LEN	0x8U
32 #define ASU_MAX_IPI_CHANNELS		8U
33 #define ASU_CHANNEL_MEMORY_OFFSET	0x1000U
34 #define ASU_CHANNEL_MEMORY_BASEADDR	(ASU_RTCA_BASEADDR + \
35 					 ASU_CHANNEL_MEMORY_OFFSET)
36 
37 struct asu_req_buf {
38 	uint32_t header;
39 	uint32_t arg[ASU_COMMAND_REQ_ARGS];
40 	uint32_t reserved;
41 };
42 
43 struct asu_resp_buf {
44 	uint32_t header;
45 	uint32_t arg[ASU_COMMAND_RESP_ARGS];
46 	uint32_t additionalstatus;
47 	uint32_t reserved;
48 };
49 
50 struct asu_channel_queue_buf {
51 	uint8_t reqbufstatus;
52 	uint8_t respbufstatus;
53 	uint16_t reserved;
54 	struct asu_req_buf req;
55 	struct asu_resp_buf resp;
56 };
57 
58 struct asu_channel_queue {
59 	bool cmd_is_present;
60 	uint32_t req_sent;
61 	uint32_t req_served;
62 	struct asu_channel_queue_buf queue_bufs[ASU_MAX_BUFFERS];
63 };
64 
65 struct asu_channel_memory {
66 	uint32_t version;
67 	uint8_t reserved[ASU_CHANNEL_RESERVED_MEM];
68 	struct asu_channel_queue p0_chnl_q;
69 	struct asu_channel_queue p1_chnl_q;
70 };
71 
72 #endif /* __ASU_SHAREDMEM_H_ */
73