xref: /optee_os/core/pta/qcom/pas/pas.h (revision fedadb6460b1ea7db709c6f5a0572f5a8cb8e5c9)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2025, Linaro Limited
4  * Copyright (c) 2026, Qualcomm Technologies, Inc. and/or its subsidiaries.
5  */
6 
7 #ifndef _PAS_H_
8 #define _PAS_H_
9 
10 #include <kernel/thread_arch.h>
11 #include <mm/core_memprot.h>
12 #include <drivers/clk_qcom.h>
13 #include <stdint.h>
14 
15 #define DEFINE_RESOURCE_TABLE(prefix, num_res)			\
16 	enum {							\
17 		prefix##_NUM_MEM_RESOURCES = (num_res),		\
18 		prefix##_SIZE_MEM_RES =				\
19 			(sizeof(struct fw_rsc_hdr) +		\
20 			 sizeof(struct fw_rsc_devmem)),		\
21 		prefix##_RESOURCE_TABLE_HEADER_SIZE =		\
22 			(sizeof(struct resource_table) +	\
23 			 (prefix##_NUM_MEM_RESOURCES *		\
24 			  sizeof(uint32_t))),			\
25 		prefix##_RESOURCE_TABLE_SIZE =			\
26 			(prefix##_RESOURCE_TABLE_HEADER_SIZE +	\
27 			 (prefix##_NUM_MEM_RESOURCES *		\
28 			  prefix##_SIZE_MEM_RES)),		\
29 	}
30 
31 struct resource_table {
32 	uint32_t ver;
33 	uint32_t num;
34 	uint32_t reserved[2];
35 	uint32_t offset[];
36 } __packed;
37 
38 struct fw_rsc_hdr {
39 	uint32_t type;
40 	uint8_t data[];
41 } __packed;
42 
43 enum fw_resource_type {
44 	RSC_CARVEOUT		= 0,
45 	RSC_DEVMEM		= 1,
46 	RSC_TRACE		= 2,
47 	RSC_VDEV		= 3,
48 	RSC_LAST		= 4,
49 	RSC_VENDOR_START	= 128,
50 	RSC_VENDOR_END		= 512,
51 };
52 
53 #define IOMMU_READ	BIT(0)
54 #define IOMMU_WRITE	BIT(1)
55 
56 struct fw_rsc_devmem {
57 	uint32_t da;
58 	uint32_t pa;
59 	uint32_t len;
60 	uint32_t flags;
61 	uint32_t reserved;
62 	uint8_t name[32];
63 } __packed;
64 
65 struct qcom_pas_data {
66 	uint32_t pas_id;
67 	struct io_pa_va base;
68 	size_t size;
69 	paddr_t fw_base;
70 	size_t fw_size;
71 	enum qcom_clk_group clk_group;
72 };
73 
74 TEE_Result pas_get_resource_table(uint32_t pas_id, struct resource_table *rt,
75 				  size_t *rt_size);
76 
77 TEE_Result wpss_fw_start(struct qcom_pas_data *data);
78 TEE_Result wpss_fw_shutdown(struct qcom_pas_data *data);
79 
80 TEE_Result compute_fw_start(struct qcom_pas_data *data);
81 TEE_Result compute_fw_shutdown(struct qcom_pas_data *data);
82 
83 TEE_Result lpass_fw_start(struct qcom_pas_data *data);
84 TEE_Result lpass_fw_shutdown(struct qcom_pas_data *data);
85 
86 TEE_Result venus_fw_start(struct qcom_pas_data *data);
87 TEE_Result venus_fw_shutdown(struct qcom_pas_data *data);
88 TEE_Result venus_fw_set_state(struct qcom_pas_data *data, bool power_on);
89 
90 #endif /* _PAS_H_ */
91