summaryrefslogtreecommitdiff
path: root/src/include/acpi/acpi_crat.h
blob: b6ae1d64b6fcd25a0021ba480eecec598c72812b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/* SPDX-License-Identifier: GPL-2.0-only */

#ifndef __ACPI_CRAT_H__
#define __ACPI_CRAT_H__

enum crat_entry_type {
	CRAT_HSA_PROC_UNIT_TYPE,
	CRAT_MEMORY_TYPE,
	CRAT_CACHE_TYPE,
	CRAT_TLB_TYPE,
	CRAT_FPU_TYPE,
	CRAT_IO_TYPE,
	CRAT_MAX_TYPE,
};

#define CRAT_HSA_PR_FLAG_EN_SHFT		0
#define CRAT_HSA_PR_FLAG_EN			(0x1 << CRAT_HSA_PR_FLAG_EN_SHFT)
#define CRAT_HSA_PR_FLAG_HOT_PLUG_SHFT		1
#define CRAT_HSA_PR_FLAG_HOT_PLUG		(0x1 << CRAT_HSA_PR_FLAG_HOT_PLUG_SHFT)
#define CRAT_HSA_PR_FLAG_CPU_PRES_SHFT		2
#define CRAT_HSA_PR_FLAG_CPU_PRES		(0x1 << CRAT_HSA_PR_FLAG_CPU_PRES_SHFT)
#define CRAT_HSA_PR_FLAG_GPU_PRES_SHFT		3
#define CRAT_HSA_PR_FLAG_GPU_PRES		(0x1 << CRAT_HSA_PR_FLAG_GPU_PRES_SHFT)
#define CRAT_HSA_PR_FLAG_CRAT_HSAMMU_SHFT	4
#define CRAT_HSA_PR_FLAG_CRAT_HSAMMU		(0x1 << CRAT_HSA_PR_FLAG_CRAT_HSAMMU_SHFT)
#define CRAT_HSA_PR_FLAG_VAL_LIM_SHFT		5
#define CRAT_HSA_PR_FLAG_VAL_LIM		(0x7 << CRAT_HSA_PR_FLAG_VAL_LIM_SHFT)
#define CRAT_HSA_PR_FLAG_ATOM_OPS_SHFT		8
#define CRAT_HSA_PR_FLAG_ATOM_OPS		(0x3 << CRAT_HSA_PR_FLAG_ATOM_OPS_SHFT)
#define CRAT_HSA_PR_FLAG_SMT_CAPS_SHFT		10
#define CRAT_HSA_PR_FLAG_SMT_CAPS		(0x3 << CRAT_HSA_PR_FLAG_SMT_CAPS_SHFT)

/* CRAT HSA Processing Unit Affinity Structure */
struct crat_hsa_processing_unit {
	uint8_t type;
	uint8_t length;
	uint16_t reserved;
	uint32_t flags;
	uint32_t proximity_node;
	uint32_t processor_id_low;
	uint16_t num_cpu_cores;
	uint16_t num_simd_cores;
	uint16_t max_waves_simd;
	uint16_t io_count;
	uint16_t hsa_capability;
	uint16_t lds_size_in_kb;
	uint8_t wave_front_size;
	uint8_t num_shader_banks;
	uint16_t uengine_identifier;
	uint8_t num_arrays;
	uint8_t num_cu_per_array;
	uint8_t num_simd_per_cu;
	uint8_t max_slots_scratch_cu;
	uint8_t reserved1[4];
} __packed;

#define CRAT_L1_CACHE			1
#define CRAT_L2_CACHE			2
#define CRAT_L3_CACHE			3

#define CRAT_MEM_FLAG_EN_SHFT		0
#define CRAT_MEM_FLAG_EN		(0x1 << CRAT_MEM_FLAG_EN_SHFT)
#define CRAT_MEM_FLAG_HOT_PLUG_SHFT	1
#define CRAT_MEM_FLAG_HOT_PLUG		(0x1 << CRAT_MEM_FLAG_HOT_PLUG_SHFT)
#define CRAT_MEM_FLAG_NV_SHFT		2
#define CRAT_MEM_FLAG_NV		(0x1 << CRAT_MEM_FLAG_NV_SHFT)
#define CRAT_MEM_FLAG_ATOM_OPS_SHFT	3
#define CRAT_MEM_FLAG_ATOM_OPS		(0x3 << CRAT_MEM_FLAG_ATOM_OPS_SHFT)

/* CRAT Memory Affinity Structure */
struct crat_memory {
	uint8_t type;
	uint8_t length;
	uint16_t reserved;
	uint32_t flags;
	uint32_t proximity_domain;
	uint32_t base_address_low;
	uint32_t base_address_high;
	uint32_t length_low;
	uint32_t length_high;
	uint32_t width;
	uint8_t reserved1[8];
} __packed;

#define CRAT_CACHE_FLAG_EN_SHFT			0
#define CRAT_CACHE_FLAG_EN			(0x1 << CRAT_CACHE_FLAG_EN_SHFT)
#define CRAT_CACHE_FLAG_DATA_CACHE_SHFT		1
#define CRAT_CACHE_FLAG_DATA_CACHE		(0x1 << CRAT_CACHE_FLAG_DATA_CACHE_SHFT)
#define CRAT_CACHE_FLAG_INSTR_CACHE_SHFT	2
#define CRAT_CACHE_FLAG_INSTR_CACHE		(0x1 << CRAT_CACHE_FLAG_INSTR_CACHE_SHFT)
#define CRAT_CACHE_FLAG_CPU_CACHE_SHFT		3
#define CRAT_CACHE_FLAG_CPU_CACHE		(0x1 << CRAT_CACHE_FLAG_CPU_CACHE_SHFT)
#define CRAT_CACHE_FLAG_SIMD_CACHE_SHFT		4
#define CRAT_CACHE_FLAG_SIMD_CACHE		(0x1 << CRAT_CACHE_FLAG_SIMD_CACHE_SHFT)
#define CRAT_CACHE_FLAG_GDS_SHFT		5
#define CRAT_CACHE_FLAG_GDS			(0x1 << CRAT_CACHE_FLAG_GDS_SHFT)
#define CRAT_CACHE_FLAG_ATOMIC_OPS_SHFT		6
#define CRAT_CACHE_FLAG_ATOMIC_OPS		(0x1 << CRAT_CACHE_FLAG_ATOMIC_OPS_SHFT)

/* CRAT Cache Affinity Structure */
struct crat_cache {
	uint8_t type;
	uint8_t length;
	uint16_t reserved;
	uint32_t flags;
	uint32_t proc_id_low;
	uint8_t sibling_map[32];
	uint32_t cache_size;
	uint8_t cache_level;
	uint8_t lines_per_tag;
	uint16_t cache_line_size;
	uint8_t associativity;
	uint8_t cache_properties;
	uint16_t cache_latency;
	uint8_t reserved1[8];
} __packed;

enum tlb_type {
	tlb_2m,
	tlb_4k,
	tlb_1g,
	tlb_type_max,
};

#define CRAT_TLB_FLAG_EN_SHFT			0
#define CRAT_TLB_FLAG_EN			(0x1 << CRAT_TLB_FLAG_EN_SHFT)
#define CRAT_TLB_FLAG_DATA_TLB_SHFT		1
#define CRAT_TLB_FLAG_DATA_TLB			(0x1 << CRAT_TLB_FLAG_DATA_TLB_SHFT)
#define CRAT_TLB_FLAG_INSTR_TLB_SHFT		2
#define CRAT_TLB_FLAG_INSTR_TLB			(0x1 << CRAT_TLB_FLAG_INSTR_TLB_SHFT)
#define CRAT_TLB_FLAG_CPU_TLB_SHFT		3
#define CRAT_TLB_FLAG_CPU_TLB			(0x1 << CRAT_TLB_FLAG_CPU_TLB_SHFT)
#define CRAT_TLB_FLAG_SIMD_TLB_SHFT		4
#define CRAT_TLB_FLAG_SIMD_TLB			(0x1 << CRAT_TLB_FLAG_SIMD_TLB_SHFT)
#define CRAT_TLB_FLAG_4K_BASE_256_SHFT		5
#define CRAT_TLB_FLAG_4K_BASE_256		(0x1 << CRAT_TLB_FLAG_4K_BASE_256_SHFT)
#define CRAT_TLB_FLAG_2MB_BASE_256_SHFT		7
#define CRAT_TLB_FLAG_2MB_BASE_256		(0x1 << CRAT_TLB_FLAG_2MB_BASE_256_SHFT)
#define CRAT_TLB_FLAG_1GB_BASE_256_SHFT		9
#define CRAT_TLB_FLAG_1GB_BASE_256		(0x1 << CRAT_TLB_FLAG_1GB_BASE_256_SHFT)

/* CRAT TLB Affinity Structure */
struct crat_tlb {
	uint8_t type;
	uint8_t length;
	uint16_t reserved;
	uint32_t flags;
	uint32_t proc_id_low;
	uint8_t sibling_map[32];
	uint32_t tlb_level;
	uint8_t data_tlb_2mb_assoc;
	uint8_t data_tlb_2mb_size;
	uint8_t instr_tlb_2mb_assoc;
	uint8_t instr_tlb_2mb_size;
	uint8_t data_tlb_4k_assoc;
	uint8_t data_tlb_4k_size;
	uint8_t instr_tlb_4k_assoc;
	uint8_t instr_tlb_4k_size;
	uint8_t data_tlb_1g_assoc;
	uint8_t data_tlb_1g_size;
	uint8_t instr_tlb_1g_assoc;
	uint8_t instr_tlb_1g_size;
	uint8_t reserved1[4];
} __packed;

#define CRAT_FPU_FLAG_EN_SHFT		0
#define CRAT_FPU_FLAG_EN		(0x1 << CRAT_TLB_FLAG_EN_SHFT)

/* CRAT FPU Affinity Structure */
struct crat_fpu {
	uint8_t type;
	uint8_t length;
	uint16_t reserved;
	uint32_t flags;
	uint32_t proc_id_low;
	uint8_t sibling_map[32];
	uint32_t fpu_size;
	uint8_t reserved1[16];
} __packed;

#define CRAT_IO_FLAG_EN_SHFT		0
#define CRAT_IO_FLAG_EN			(0x1 << CRAT_IO_FLAG_EN_SHFT)
#define CRAT_IO_FLAG_COHER_SHFT		1
#define CRAT_IO_FLAG_COHER		(0x1 << CRAT_IO_FLAG_COHER_SHFT)

/* CRAT IO Affinity Structure */
struct crat_io {
	uint8_t type;
	uint8_t length;
	uint16_t reserved;
	uint32_t flags;
	uint32_t proximity_domain_from;
	uint32_t proximity_domain_to;
	uint8_t io_type;
	uint8_t version_major;
	uint16_t version_minor;
	uint32_t minimum_latency;
	uint32_t maximum_latency;
	uint32_t minimum_bandwidth;
	uint32_t maximum_bandwidth;
	uint32_t recommended_transfer_size;
	uint8_t reserved1[24];
} __packed;

#endif /* __ACPI_CRAT_H__ */