1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2020 - 2025 Intel Corporation
4  */
5 
6 #ifndef IPU7_FW_BOOT_ABI_H
7 #define IPU7_FW_BOOT_ABI_H
8 
9 #include "ipu7_fw_common_abi.h"
10 #include "ipu7_fw_syscom_abi.h"
11 
12 #define IA_GOFO_FWLOG_SEVERITY_CRIT			(0U)
13 #define IA_GOFO_FWLOG_SEVERITY_ERROR			(1U)
14 #define IA_GOFO_FWLOG_SEVERITY_WARNING			(2U)
15 #define IA_GOFO_FWLOG_SEVERITY_INFO			(3U)
16 #define IA_GOFO_FWLOG_SEVERITY_DEBUG			(4U)
17 #define IA_GOFO_FWLOG_SEVERITY_VERBOSE			(5U)
18 #define IA_GOFO_FWLOG_MAX_LOGGER_SOURCES		(64U)
19 
20 #define LOGGER_CONFIG_CHANNEL_ENABLE_HWPRINTF_BITMASK	BIT(0)
21 #define LOGGER_CONFIG_CHANNEL_ENABLE_SYSCOM_BITMASK	BIT(1)
22 #define LOGGER_CONFIG_CHANNEL_ENABLE_ALL_BITMASK \
23 	(LOGGER_CONFIG_CHANNEL_ENABLE_HWPRINTF_BITMASK | \
24 	 LOGGER_CONFIG_CHANNEL_ENABLE_SYSCOM_BITMASK)
25 
26 struct ia_gofo_logger_config {
27 	u8 use_source_severity;
28 	u8 source_severity[IA_GOFO_FWLOG_MAX_LOGGER_SOURCES];
29 	u8 use_channels_enable_bitmask;
30 	u8 channels_enable_bitmask;
31 	u8 padding[1];
32 	ia_gofo_addr_t hw_printf_buffer_base_addr;
33 	u32 hw_printf_buffer_size_bytes;
34 };
35 
36 #pragma pack(push, 1)
37 
38 #define IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX_PER_APP \
39 	((u32)IA_GOFO_FW_BOOT_ID_MAX)
40 #define IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_IS_OFFSET (0U)
41 #define IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_PS_OFFSET \
42 	((IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_IS_OFFSET) + \
43 	(u32)(IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX_PER_APP))
44 #define IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_PRIMARY_OFFSET (0U)
45 #define IA_GOFO_CCG_IPU_BUTTRESS_FW_BOOT_PARAMS_SECONDARY_OFFSET (0x3000U / 4U)
46 #define IA_GOFO_HKR_IPU_BUTTRESS_FW_BOOT_PARAMS_SECONDARY_OFFSET \
47 	(IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX_PER_APP * 2U)
48 #define IA_GOFO_HKR_HIF_BUTTRESS_FW_BOOT_PARAMS_SECONDARY_OFFSET \
49 	(IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX_PER_APP)
50 #define IA_GOFO_CCG_IPU_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX \
51 	(IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX_PER_APP * 4U)
52 #define IA_GOFO_HKR_IPU_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX \
53 	(IA_GOFO_BUTTRESS_FW_BOOT_PARAMS_MAX_REG_IDX_PER_APP * 4U)
54 
55 #define IA_GOFO_BOOT_RESERVED_SIZE (58U)
56 #define IA_GOFO_BOOT_SECONDARY_RESERVED_SIZE (IA_GOFO_BOOT_RESERVED_SIZE)
57 #define IA_GOFO_BOOT_SECONDARY_RESERVED_FIELDS \
58 	(sizeof(ia_gofo_addr_t) + sizeof(ia_gofo_addr_t) + sizeof(u32))
59 
60 enum ia_gofo_buttress_reg_id {
61 	IA_GOFO_FW_BOOT_CONFIG_ID = 0,
62 	IA_GOFO_FW_BOOT_STATE_ID = 1,
63 	IA_GOFO_FW_BOOT_RESERVED1_ID = IA_GOFO_FW_BOOT_STATE_ID,
64 	IA_GOFO_FW_BOOT_SYSCOM_QUEUE_INDICES_BASE_ID = 2,
65 	IA_GOFO_FW_BOOT_UNTRUSTED_ADDR_MIN_ID = 3,
66 	IA_GOFO_FW_BOOT_RESERVED0_ID = IA_GOFO_FW_BOOT_UNTRUSTED_ADDR_MIN_ID,
67 	IA_GOFO_FW_BOOT_MESSAGING_VERSION_ID = 4,
68 	IA_GOFO_FW_BOOT_ID_MAX
69 };
70 
71 enum ia_gofo_boot_uc_tile_frequency_units {
72 	IA_GOFO_FW_BOOT_UC_FREQUENCY_UNITS_MHZ = 0,
73 	IA_GOFO_FW_BOOT_UC_FREQUENCY_UNITS_HZ = 1,
74 	IA_GOFO_FW_BOOT_UC_FREQUENCY_UNITS_N
75 };
76 
77 #define IA_GOFO_FW_BOOT_STATE_IS_CRITICAL(boot_state) \
78 	(0xdead0000U == ((boot_state) & 0xffff0000U))
79 
80 struct ia_gofo_boot_config {
81 	u32 length;
82 	struct ia_gofo_version_s config_version;
83 	struct ia_gofo_msg_version_list client_version_support;
84 	ia_gofo_addr_t pkg_dir;
85 	ia_gofo_addr_t subsys_config;
86 	u32 uc_tile_frequency;
87 	u16 checksum;
88 	u8 uc_tile_frequency_units;
89 	u8 padding[1];
90 	u32 reserved[IA_GOFO_BOOT_RESERVED_SIZE];
91 	struct syscom_config_s syscom_context_config;
92 };
93 
94 struct ia_gofo_secondary_boot_config {
95 	u32 length;
96 	struct ia_gofo_version_s config_version;
97 	struct ia_gofo_msg_version_list client_version_support;
98 	u8 reserved1[IA_GOFO_BOOT_SECONDARY_RESERVED_FIELDS];
99 	u16 checksum;
100 	u8 padding[2];
101 	u32 reserved2[IA_GOFO_BOOT_SECONDARY_RESERVED_SIZE];
102 	struct syscom_config_s syscom_context_config;
103 };
104 
105 #pragma pack(pop)
106 
107 #define IA_GOFO_WDT_TIMEOUT_ERR			0xdead0401U
108 #define IA_GOFO_MEM_FATAL_DME_ERR		0xdead0801U
109 #define IA_GOFO_MEM_UNCORRECTABLE_LOCAL_ERR	0xdead0802U
110 #define IA_GOFO_MEM_UNCORRECTABLE_DIRTY_ERR	0xdead0803U
111 #define IA_GOFO_MEM_UNCORRECTABLE_DTAG_ERR	0xdead0804U
112 #define IA_GOFO_MEM_UNCORRECTABLE_CACHE_ERR	0xdead0805U
113 #define IA_GOFO_DOUBLE_EXCEPTION_ERR		0xdead0806U
114 #define IA_GOFO_BIST_DMEM_FAULT_DETECTION_ERR	0xdead1000U
115 #define IA_GOFO_BIST_DATA_INTEGRITY_FAILURE	0xdead1010U
116 
117 enum ia_gofo_boot_state {
118 	IA_GOFO_FW_BOOT_STATE_SECONDARY_BOOT_CONFIG_READY = 0x57a7b000U,
119 	IA_GOFO_FW_BOOT_STATE_UNINIT = 0x57a7e000U,
120 	IA_GOFO_FW_BOOT_STATE_STARTING_0 = 0x57a7d000U,
121 	IA_GOFO_FW_BOOT_STATE_CACHE_INIT_DONE = 0x57a7d010U,
122 	IA_GOFO_FW_BOOT_STATE_MEM_INIT_DONE = 0x57a7d020U,
123 	IA_GOFO_FW_BOOT_STATE_STACK_INIT_DONE = 0x57a7d030U,
124 	IA_GOFO_FW_BOOT_STATE_EARLY_BOOT_DONE = 0x57a7d100U,
125 	IA_GOFO_FW_BOOT_STATE_BOOT_CONFIG_START = 0x57a7d200U,
126 	IA_GOFO_FW_BOOT_STATE_QUEUE_INIT_DONE = 0x57a7d300U,
127 	IA_GOFO_FW_BOOT_STATE_READY = 0x57a7e100U,
128 	IA_GOFO_FW_BOOT_STATE_CRIT_UNSPECIFIED = 0xdead0001U,
129 	IA_GOFO_FW_BOOT_STATE_CRIT_CFG_PTR = 0xdead0101U,
130 	IA_GOFO_FW_BOOT_STATE_CRIT_CFG_VERSION = 0xdead0201U,
131 	IA_GOFO_FW_BOOT_STATE_CRIT_MSG_VERSION = 0xdead0301U,
132 	IA_GOFO_FW_BOOT_STATE_CRIT_WDT_TIMEOUT = IA_GOFO_WDT_TIMEOUT_ERR,
133 	IA_GOFO_FW_BOOT_STATE_WRONG_DATA_SECTION_UNPACKING = 0xdead0501U,
134 	IA_GOFO_FW_BOOT_STATE_WRONG_RO_DATA_SECTION_UNPACKING = 0xdead0601U,
135 	IA_GOFO_FW_BOOT_STATE_INVALID_UNTRUSTED_ADDR_MIN = 0xdead0701U,
136 	IA_GOFO_FW_BOOT_STATE_CRIT_MEM_FATAL_DME = IA_GOFO_MEM_FATAL_DME_ERR,
137 	IA_GOFO_FW_BOOT_STATE_CRIT_MEM_UNCORRECTABLE_LOCAL =
138 	IA_GOFO_MEM_UNCORRECTABLE_LOCAL_ERR,
139 	IA_GOFO_FW_BOOT_STATE_CRIT_MEM_UNCORRECTABLE_DIRTY =
140 	IA_GOFO_MEM_UNCORRECTABLE_DIRTY_ERR,
141 	IA_GOFO_FW_BOOT_STATE_CRIT_MEM_UNCORRECTABLE_DTAG =
142 	IA_GOFO_MEM_UNCORRECTABLE_DTAG_ERR,
143 	IA_GOFO_FW_BOOT_STATE_CRIT_MEM_UNCORRECTABLE_CACHE =
144 	IA_GOFO_MEM_UNCORRECTABLE_CACHE_ERR,
145 	IA_GOFO_FW_BOOT_STATE_CRIT_DOUBLE_EXCEPTION =
146 	IA_GOFO_DOUBLE_EXCEPTION_ERR,
147 	IA_GOFO_FW_BOOT_STATE_CRIT_BIST_DMEM_FAULT_DETECTION_ERR =
148 	IA_GOFO_BIST_DMEM_FAULT_DETECTION_ERR,
149 	IA_GOFO_FW_BOOT_STATE_CRIT_DATA_INTEGRITY_FAILURE = 0xdead1010U,
150 	IA_GOFO_FW_BOOT_STATE_CRIT_STACK_CHK_FAILURE = 0xdead1011U,
151 	IA_GOFO_FW_BOOT_STATE_CRIT_SYSCOM_CONTEXT_INTEGRITY_FAILURE =
152 	0xdead1012U,
153 	IA_GOFO_FW_BOOT_STATE_CRIT_MPU_CONFIG_FAILURE = 0xdead1013U,
154 	IA_GOFO_FW_BOOT_STATE_CRIT_SHARED_BUFFER_FAILURE = 0xdead1014U,
155 	IA_GOFO_FW_BOOT_STATE_CRIT_CMEM_FAILURE = 0xdead1015U,
156 	IA_GOFO_FW_BOOT_STATE_SHUTDOWN_CMD = 0x57a7f001U,
157 	IA_GOFO_FW_BOOT_STATE_SHUTDOWN_START = 0x57a7e200U,
158 	IA_GOFO_FW_BOOT_STATE_INACTIVE = 0x57a7e300U,
159 	IA_GOFO_FW_BOOT_HW_CMD_ACK_TIMEOUT = 0x57a7e400U,
160 	IA_GOFO_FW_BOOT_SYSTEM_CYCLES_ERROR = 0x57a7e500U
161 };
162 
163 #endif
164