summaryrefslogtreecommitdiff
path: root/config/coreboot/haswell/patches/0021-nb-intel-haswell-make-IOMMU-a-runtime-option.patch
blob: 81b8e839fd9e114d2c35bc0990598222b9c7c307 (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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
From d97b865a2210e70583e8bf5ee3a73d3c131b29c1 Mon Sep 17 00:00:00 2001
From: Leah Rowe <info@minifree.org>
Date: Sat, 2 Mar 2024 22:51:09 +0000
Subject: [PATCH 1/4] nb/intel/haswell: make IOMMU a runtime option

When I tested graphics cards on a coreboot port for Dell
OptiPlex 9020 SFF, I could not use a graphics card unless
I set iommu=off on the Linux cmdline.

Coreboot's current behaviour is to check whether the CPU
has vt-d support and, if it does, initialise the IOMMU.

This patch maintains the current behaviour by default, but
allows the user to turn *off* the IOMMU, even if vt-d is
supported by the host CPU.

If iommu=Disable is specified, the check will not be
performed, and the IOMMU will be left disabled. This option
has been added to all current Haswell boards, though it is
recommended to leave the IOMMU turned on in most setups.

Signed-off-by: Leah Rowe <info@minifree.org>
---
 src/mainboard/asrock/b85m_pro4/cmos.default    | 1 +
 src/mainboard/asrock/b85m_pro4/cmos.layout     | 3 +++
 src/mainboard/asrock/h81m-hds/cmos.default     | 1 +
 src/mainboard/asrock/h81m-hds/cmos.layout      | 6 ++++++
 src/mainboard/dell/optiplex_9020/cmos.default  | 1 +
 src/mainboard/dell/optiplex_9020/cmos.layout   | 6 ++++++
 src/mainboard/google/beltino/cmos.layout       | 5 +++++
 src/mainboard/google/slippy/cmos.layout        | 5 +++++
 src/mainboard/intel/baskingridge/cmos.layout   | 4 ++++
 src/mainboard/lenovo/haswell/cmos.default      | 1 +
 src/mainboard/lenovo/haswell/cmos.layout       | 3 +++
 src/mainboard/supermicro/x10slm-f/cmos.default | 1 +
 src/mainboard/supermicro/x10slm-f/cmos.layout  | 6 ++++++
 src/northbridge/intel/haswell/early_init.c     | 5 +++++
 14 files changed, 48 insertions(+)

diff --git a/src/mainboard/asrock/b85m_pro4/cmos.default b/src/mainboard/asrock/b85m_pro4/cmos.default
index 01bf20ad16..dfc8b80fb0 100644
--- a/src/mainboard/asrock/b85m_pro4/cmos.default
+++ b/src/mainboard/asrock/b85m_pro4/cmos.default
@@ -4,3 +4,4 @@ boot_option=Fallback
 debug_level=Debug
 nmi=Enable
 power_on_after_fail=Disable
+iommu=Enable
diff --git a/src/mainboard/asrock/b85m_pro4/cmos.layout b/src/mainboard/asrock/b85m_pro4/cmos.layout
index efdc333fc2..c9883ea71d 100644
--- a/src/mainboard/asrock/b85m_pro4/cmos.layout
+++ b/src/mainboard/asrock/b85m_pro4/cmos.layout
@@ -11,6 +11,7 @@
 	395	4	e	4	debug_level
 	408	1	e	1	nmi
 	409	2	e	5	power_on_after_fail
+	412	1	e	6	iommu
 	984	16	h	0	check_sum
 # -----------------------------------------------------------------
 
@@ -38,6 +39,8 @@
 	5	0	Disable
 	5	1	Enable
 	5	2	Keep
+	6	0	Disable
+	6	1	Enable
 # -----------------------------------------------------------------
 
 # -----------------------------------------------------------------
diff --git a/src/mainboard/asrock/h81m-hds/cmos.default b/src/mainboard/asrock/h81m-hds/cmos.default
index 01bf20ad16..dfc8b80fb0 100644
--- a/src/mainboard/asrock/h81m-hds/cmos.default
+++ b/src/mainboard/asrock/h81m-hds/cmos.default
@@ -4,3 +4,4 @@ boot_option=Fallback
 debug_level=Debug
 nmi=Enable
 power_on_after_fail=Disable
+iommu=Enable
diff --git a/src/mainboard/asrock/h81m-hds/cmos.layout b/src/mainboard/asrock/h81m-hds/cmos.layout
index c9ba76c78f..95ee3d36fb 100644
--- a/src/mainboard/asrock/h81m-hds/cmos.layout
+++ b/src/mainboard/asrock/h81m-hds/cmos.layout
@@ -21,6 +21,9 @@ entries
 408	1	e	1	nmi
 409	2	e	5	power_on_after_fail
 
+# enable or disable iommu
+412	1	e	6	iommu
+
 # coreboot config options: check sums
 984	16	h	0	check_sum
 
@@ -52,6 +55,9 @@ enumerations
 5	1	Enable
 5	2	Keep
 
+6	0	Disable
+6	1	Enable
+
 # -----------------------------------------------------------------
 checksums
 
diff --git a/src/mainboard/dell/optiplex_9020/cmos.default b/src/mainboard/dell/optiplex_9020/cmos.default
index cd4046f1ab..c974022472 100644
--- a/src/mainboard/dell/optiplex_9020/cmos.default
+++ b/src/mainboard/dell/optiplex_9020/cmos.default
@@ -3,3 +3,4 @@ boot_option=Fallback
 debug_level=Debug
 nmi=Disable
 power_on_after_fail=Disable
+iommu=Enable
diff --git a/src/mainboard/dell/optiplex_9020/cmos.layout b/src/mainboard/dell/optiplex_9020/cmos.layout
index c9ba76c78f..72ff9c4bee 100644
--- a/src/mainboard/dell/optiplex_9020/cmos.layout
+++ b/src/mainboard/dell/optiplex_9020/cmos.layout
@@ -21,6 +21,9 @@ entries
 408	1	e	1	nmi
 409	2	e	5	power_on_after_fail
 
+# turn iommu on or off
+412	1	e	6	iommu
+
 # coreboot config options: check sums
 984	16	h	0	check_sum
 
@@ -52,6 +55,9 @@ enumerations
 5	1	Enable
 5	2	Keep
 
+6	0	Disable
+6	1	Enable
+
 # -----------------------------------------------------------------
 checksums
 
diff --git a/src/mainboard/google/beltino/cmos.layout b/src/mainboard/google/beltino/cmos.layout
index 78d44c1415..c143979ae1 100644
--- a/src/mainboard/google/beltino/cmos.layout
+++ b/src/mainboard/google/beltino/cmos.layout
@@ -19,6 +19,9 @@ entries
 408	1	e	1	nmi
 409	2	e	7	power_on_after_fail
 
+# enable or disable iommu
+412	1	e	8	iommu
+
 # coreboot config options: bootloader
 #Used by ChromeOS:
 416	128	r	0	vbnv
@@ -47,6 +50,8 @@ enumerations
 7	0	Disable
 7	1	Enable
 7	2	Keep
+8	0	Disable
+8	1	Enable
 # -----------------------------------------------------------------
 checksums
 
diff --git a/src/mainboard/google/slippy/cmos.layout b/src/mainboard/google/slippy/cmos.layout
index 78d44c1415..c143979ae1 100644
--- a/src/mainboard/google/slippy/cmos.layout
+++ b/src/mainboard/google/slippy/cmos.layout
@@ -19,6 +19,9 @@ entries
 408	1	e	1	nmi
 409	2	e	7	power_on_after_fail
 
+# enable or disable iommu
+412	1	e	8	iommu
+
 # coreboot config options: bootloader
 #Used by ChromeOS:
 416	128	r	0	vbnv
@@ -47,6 +50,8 @@ enumerations
 7	0	Disable
 7	1	Enable
 7	2	Keep
+8	0	Disable
+8	1	Enable
 # -----------------------------------------------------------------
 checksums
 
diff --git a/src/mainboard/intel/baskingridge/cmos.layout b/src/mainboard/intel/baskingridge/cmos.layout
index 78d44c1415..f2c602f541 100644
--- a/src/mainboard/intel/baskingridge/cmos.layout
+++ b/src/mainboard/intel/baskingridge/cmos.layout
@@ -19,6 +19,8 @@ entries
 408	1	e	1	nmi
 409	2	e	7	power_on_after_fail
 
+412	1	e	8	iommu
+
 # coreboot config options: bootloader
 #Used by ChromeOS:
 416	128	r	0	vbnv
@@ -47,6 +49,8 @@ enumerations
 7	0	Disable
 7	1	Enable
 7	2	Keep
+8	0	Disable
+8	1	Enable
 # -----------------------------------------------------------------
 checksums
 
diff --git a/src/mainboard/lenovo/haswell/cmos.default b/src/mainboard/lenovo/haswell/cmos.default
index 08db97c5a9..cc6b363cd9 100644
--- a/src/mainboard/lenovo/haswell/cmos.default
+++ b/src/mainboard/lenovo/haswell/cmos.default
@@ -14,3 +14,4 @@ trackpoint=Enable
 backlight=Keyboard
 enable_dual_graphics=Disable
 usb_always_on=Disable
+iommu=Enable
diff --git a/src/mainboard/lenovo/haswell/cmos.layout b/src/mainboard/lenovo/haswell/cmos.layout
index 27915d3ab7..59df76b64c 100644
--- a/src/mainboard/lenovo/haswell/cmos.layout
+++ b/src/mainboard/lenovo/haswell/cmos.layout
@@ -23,6 +23,7 @@ entries
 
 # coreboot config options: EC
 411	1	e	8	first_battery
+413	1	e	14	iommu
 415	1	e	1	wlan
 416	1	e	1	trackpoint
 417	1	e	1	fn_ctrl_swap
@@ -72,6 +73,8 @@ enumerations
 13	0	Disable
 13	1	AC and battery
 13	2	AC only
+14	0	Disable
+14	1	Enable
 
 # -----------------------------------------------------------------
 checksums
diff --git a/src/mainboard/supermicro/x10slm-f/cmos.default b/src/mainboard/supermicro/x10slm-f/cmos.default
index 7ce38fb5d7..6049e7938a 100644
--- a/src/mainboard/supermicro/x10slm-f/cmos.default
+++ b/src/mainboard/supermicro/x10slm-f/cmos.default
@@ -5,3 +5,4 @@ debug_level=Debug
 nmi=Enable
 power_on_after_fail=Keep
 hide_ast2400=Disable
+iommu=Enable
diff --git a/src/mainboard/supermicro/x10slm-f/cmos.layout b/src/mainboard/supermicro/x10slm-f/cmos.layout
index 38ba87aa45..24d39e97ee 100644
--- a/src/mainboard/supermicro/x10slm-f/cmos.layout
+++ b/src/mainboard/supermicro/x10slm-f/cmos.layout
@@ -21,6 +21,9 @@ entries
 408	1	e	1	nmi
 409	2	e	5	power_on_after_fail
 
+# enable or disable iommu
+412	1	e	6	iommu
+
 # coreboot config options: mainboard
 416	1	e	1	hide_ast2400
 
@@ -55,6 +58,9 @@ enumerations
 5	1	Enable
 5	2	Keep
 
+6	0	Disable
+6	1	Enable
+
 # -----------------------------------------------------------------
 checksums
 
diff --git a/src/northbridge/intel/haswell/early_init.c b/src/northbridge/intel/haswell/early_init.c
index e47deb5da6..1a7e0b1076 100644
--- a/src/northbridge/intel/haswell/early_init.c
+++ b/src/northbridge/intel/haswell/early_init.c
@@ -5,6 +5,7 @@
 #include <device/mmio.h>
 #include <device/pci_def.h>
 #include <device/pci_ops.h>
+#include <option.h>
 
 #include "haswell.h"
 
@@ -157,6 +158,10 @@ static void haswell_setup_misc(void)
 static void haswell_setup_iommu(void)
 {
 	const u32 capid0_a = pci_read_config32(HOST_BRIDGE, CAPID0_A);
+	u8 enable_iommu = get_uint_option("iommu", 1);
+
+	if (!enable_iommu)
+		return;
 
 	if (capid0_a & VTD_DISABLE)
 		return;
-- 
2.39.2