diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-11 21:33:38 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-11 21:33:38 -0500 |
commit | 986189f9ec81263c982b60433b5b937f1056a631 (patch) | |
tree | 209b89a2f920f72541ffe5b5698ece959c584791 /arch/x86/kernel/reboot.c | |
parent | 2934578e28be0a0b338ce701d3d87a4a6b0ff03b (diff) | |
parent | 6d9153bbce50d41802ad2e20ce52daf699a3e8ad (diff) |
Merge branch 'x86-reboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 reboot changes from Ingo Molnar:
"Misc changes - the only one with functional impact should be commit
16c21ae5ca63 ("reboot: Allow specifying warm/cold reset for CF9 boot
type") which extends cold/warm reboot handling to the 0xCF9 reboot
method"
* 'x86-reboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/reboot: Correct pr_info() log message in the set_bios/pci/kbd_reboot()
x86/reboot: Sort reboot DMI quirks by vendor
x86/reboot: Remove the duplicate C6100 entry in the reboot quirks list
reboot: Allow specifying warm/cold reset for CF9 boot type
Diffstat (limited to 'arch/x86/kernel/reboot.c')
-rw-r--r-- | arch/x86/kernel/reboot.c | 291 |
1 files changed, 149 insertions, 142 deletions
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 618ce264b237..da3c599584a3 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
@@ -61,7 +61,7 @@ static int __init set_bios_reboot(const struct dmi_system_id *d) | |||
61 | if (reboot_type != BOOT_BIOS) { | 61 | if (reboot_type != BOOT_BIOS) { |
62 | reboot_type = BOOT_BIOS; | 62 | reboot_type = BOOT_BIOS; |
63 | pr_info("%s series board detected. Selecting %s-method for reboots.\n", | 63 | pr_info("%s series board detected. Selecting %s-method for reboots.\n", |
64 | "BIOS", d->ident); | 64 | d->ident, "BIOS"); |
65 | } | 65 | } |
66 | return 0; | 66 | return 0; |
67 | } | 67 | } |
@@ -117,7 +117,7 @@ static int __init set_pci_reboot(const struct dmi_system_id *d) | |||
117 | if (reboot_type != BOOT_CF9) { | 117 | if (reboot_type != BOOT_CF9) { |
118 | reboot_type = BOOT_CF9; | 118 | reboot_type = BOOT_CF9; |
119 | pr_info("%s series board detected. Selecting %s-method for reboots.\n", | 119 | pr_info("%s series board detected. Selecting %s-method for reboots.\n", |
120 | "PCI", d->ident); | 120 | d->ident, "PCI"); |
121 | } | 121 | } |
122 | return 0; | 122 | return 0; |
123 | } | 123 | } |
@@ -127,7 +127,7 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d) | |||
127 | if (reboot_type != BOOT_KBD) { | 127 | if (reboot_type != BOOT_KBD) { |
128 | reboot_type = BOOT_KBD; | 128 | reboot_type = BOOT_KBD; |
129 | pr_info("%s series board detected. Selecting %s-method for reboot.\n", | 129 | pr_info("%s series board detected. Selecting %s-method for reboot.\n", |
130 | "KBD", d->ident); | 130 | d->ident, "KBD"); |
131 | } | 131 | } |
132 | return 0; | 132 | return 0; |
133 | } | 133 | } |
@@ -136,252 +136,256 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d) | |||
136 | * This is a single dmi_table handling all reboot quirks. | 136 | * This is a single dmi_table handling all reboot quirks. |
137 | */ | 137 | */ |
138 | static struct dmi_system_id __initdata reboot_dmi_table[] = { | 138 | static struct dmi_system_id __initdata reboot_dmi_table[] = { |
139 | { /* Handle problems with rebooting on Dell E520's */ | 139 | |
140 | .callback = set_bios_reboot, | 140 | /* Acer */ |
141 | .ident = "Dell E520", | 141 | { /* Handle reboot issue on Acer Aspire one */ |
142 | .callback = set_kbd_reboot, | ||
143 | .ident = "Acer Aspire One A110", | ||
142 | .matches = { | 144 | .matches = { |
143 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 145 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
144 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM061"), | 146 | DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"), |
145 | }, | 147 | }, |
146 | }, | 148 | }, |
147 | { /* Handle problems with rebooting on Dell 1300's */ | 149 | |
148 | .callback = set_bios_reboot, | 150 | /* Apple */ |
149 | .ident = "Dell PowerEdge 1300", | 151 | { /* Handle problems with rebooting on Apple MacBook5 */ |
152 | .callback = set_pci_reboot, | ||
153 | .ident = "Apple MacBook5", | ||
150 | .matches = { | 154 | .matches = { |
151 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), | 155 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
152 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1300/"), | 156 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"), |
153 | }, | 157 | }, |
154 | }, | 158 | }, |
155 | { /* Handle problems with rebooting on Dell 300's */ | 159 | { /* Handle problems with rebooting on Apple MacBookPro5 */ |
156 | .callback = set_bios_reboot, | 160 | .callback = set_pci_reboot, |
157 | .ident = "Dell PowerEdge 300", | 161 | .ident = "Apple MacBookPro5", |
158 | .matches = { | 162 | .matches = { |
159 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), | 163 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
160 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"), | 164 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5"), |
161 | }, | 165 | }, |
162 | }, | 166 | }, |
163 | { /* Handle problems with rebooting on Dell Optiplex 745's SFF */ | 167 | { /* Handle problems with rebooting on Apple Macmini3,1 */ |
164 | .callback = set_bios_reboot, | 168 | .callback = set_pci_reboot, |
165 | .ident = "Dell OptiPlex 745", | 169 | .ident = "Apple Macmini3,1", |
166 | .matches = { | 170 | .matches = { |
167 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 171 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
168 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), | 172 | DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"), |
169 | }, | 173 | }, |
170 | }, | 174 | }, |
171 | { /* Handle problems with rebooting on Dell Optiplex 745's DFF */ | 175 | { /* Handle problems with rebooting on the iMac9,1. */ |
172 | .callback = set_bios_reboot, | 176 | .callback = set_pci_reboot, |
173 | .ident = "Dell OptiPlex 745", | 177 | .ident = "Apple iMac9,1", |
174 | .matches = { | 178 | .matches = { |
175 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 179 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
176 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), | 180 | DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"), |
177 | DMI_MATCH(DMI_BOARD_NAME, "0MM599"), | ||
178 | }, | 181 | }, |
179 | }, | 182 | }, |
180 | { /* Handle problems with rebooting on Dell Optiplex 745 with 0KW626 */ | 183 | |
184 | /* ASUS */ | ||
185 | { /* Handle problems with rebooting on ASUS P4S800 */ | ||
181 | .callback = set_bios_reboot, | 186 | .callback = set_bios_reboot, |
182 | .ident = "Dell OptiPlex 745", | 187 | .ident = "ASUS P4S800", |
183 | .matches = { | 188 | .matches = { |
184 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 189 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
185 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), | 190 | DMI_MATCH(DMI_BOARD_NAME, "P4S800"), |
186 | DMI_MATCH(DMI_BOARD_NAME, "0KW626"), | ||
187 | }, | 191 | }, |
188 | }, | 192 | }, |
189 | { /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */ | 193 | |
194 | /* Dell */ | ||
195 | { /* Handle problems with rebooting on Dell DXP061 */ | ||
190 | .callback = set_bios_reboot, | 196 | .callback = set_bios_reboot, |
191 | .ident = "Dell OptiPlex 330", | 197 | .ident = "Dell DXP061", |
192 | .matches = { | 198 | .matches = { |
193 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 199 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
194 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"), | 200 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), |
195 | DMI_MATCH(DMI_BOARD_NAME, "0KP561"), | ||
196 | }, | 201 | }, |
197 | }, | 202 | }, |
198 | { /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */ | 203 | { /* Handle problems with rebooting on Dell E520's */ |
199 | .callback = set_bios_reboot, | 204 | .callback = set_bios_reboot, |
200 | .ident = "Dell OptiPlex 360", | 205 | .ident = "Dell E520", |
201 | .matches = { | 206 | .matches = { |
202 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 207 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
203 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"), | 208 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM061"), |
204 | DMI_MATCH(DMI_BOARD_NAME, "0T656F"), | ||
205 | }, | 209 | }, |
206 | }, | 210 | }, |
207 | { /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G */ | 211 | { /* Handle problems with rebooting on the Latitude E5410. */ |
208 | .callback = set_bios_reboot, | 212 | .callback = set_pci_reboot, |
209 | .ident = "Dell OptiPlex 760", | 213 | .ident = "Dell Latitude E5410", |
210 | .matches = { | 214 | .matches = { |
211 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 215 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
212 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"), | 216 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5410"), |
213 | DMI_MATCH(DMI_BOARD_NAME, "0G919G"), | ||
214 | }, | 217 | }, |
215 | }, | 218 | }, |
216 | { /* Handle problems with rebooting on Dell 2400's */ | 219 | { /* Handle problems with rebooting on the Latitude E5420. */ |
217 | .callback = set_bios_reboot, | 220 | .callback = set_pci_reboot, |
218 | .ident = "Dell PowerEdge 2400", | 221 | .ident = "Dell Latitude E5420", |
219 | .matches = { | 222 | .matches = { |
220 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), | 223 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
221 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"), | 224 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5420"), |
222 | }, | 225 | }, |
223 | }, | 226 | }, |
224 | { /* Handle problems with rebooting on Dell T5400's */ | 227 | { /* Handle problems with rebooting on the Latitude E6320. */ |
225 | .callback = set_bios_reboot, | 228 | .callback = set_pci_reboot, |
226 | .ident = "Dell Precision T5400", | 229 | .ident = "Dell Latitude E6320", |
227 | .matches = { | 230 | .matches = { |
228 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 231 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
229 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"), | 232 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"), |
230 | }, | 233 | }, |
231 | }, | 234 | }, |
232 | { /* Handle problems with rebooting on Dell T7400's */ | 235 | { /* Handle problems with rebooting on the Latitude E6420. */ |
233 | .callback = set_bios_reboot, | 236 | .callback = set_pci_reboot, |
234 | .ident = "Dell Precision T7400", | 237 | .ident = "Dell Latitude E6420", |
235 | .matches = { | 238 | .matches = { |
236 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 239 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
237 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"), | 240 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6420"), |
238 | }, | 241 | }, |
239 | }, | 242 | }, |
240 | { /* Handle problems with rebooting on HP laptops */ | 243 | { /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */ |
241 | .callback = set_bios_reboot, | 244 | .callback = set_bios_reboot, |
242 | .ident = "HP Compaq Laptop", | 245 | .ident = "Dell OptiPlex 330", |
243 | .matches = { | 246 | .matches = { |
244 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | 247 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
245 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"), | 248 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"), |
249 | DMI_MATCH(DMI_BOARD_NAME, "0KP561"), | ||
246 | }, | 250 | }, |
247 | }, | 251 | }, |
248 | { /* Handle problems with rebooting on Dell XPS710 */ | 252 | { /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */ |
249 | .callback = set_bios_reboot, | 253 | .callback = set_bios_reboot, |
250 | .ident = "Dell XPS710", | 254 | .ident = "Dell OptiPlex 360", |
251 | .matches = { | 255 | .matches = { |
252 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 256 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
253 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), | 257 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"), |
258 | DMI_MATCH(DMI_BOARD_NAME, "0T656F"), | ||
254 | }, | 259 | }, |
255 | }, | 260 | }, |
256 | { /* Handle problems with rebooting on Dell DXP061 */ | 261 | { /* Handle problems with rebooting on Dell Optiplex 745's SFF */ |
257 | .callback = set_bios_reboot, | 262 | .callback = set_bios_reboot, |
258 | .ident = "Dell DXP061", | 263 | .ident = "Dell OptiPlex 745", |
259 | .matches = { | 264 | .matches = { |
260 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 265 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
261 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), | 266 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), |
262 | }, | 267 | }, |
263 | }, | 268 | }, |
264 | { /* Handle problems with rebooting on Sony VGN-Z540N */ | 269 | { /* Handle problems with rebooting on Dell Optiplex 745's DFF */ |
265 | .callback = set_bios_reboot, | 270 | .callback = set_bios_reboot, |
266 | .ident = "Sony VGN-Z540N", | 271 | .ident = "Dell OptiPlex 745", |
267 | .matches = { | 272 | .matches = { |
268 | DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | 273 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
269 | DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), | 274 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), |
275 | DMI_MATCH(DMI_BOARD_NAME, "0MM599"), | ||
270 | }, | 276 | }, |
271 | }, | 277 | }, |
272 | { /* Handle problems with rebooting on ASUS P4S800 */ | 278 | { /* Handle problems with rebooting on Dell Optiplex 745 with 0KW626 */ |
273 | .callback = set_bios_reboot, | 279 | .callback = set_bios_reboot, |
274 | .ident = "ASUS P4S800", | 280 | .ident = "Dell OptiPlex 745", |
275 | .matches = { | ||
276 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), | ||
277 | DMI_MATCH(DMI_BOARD_NAME, "P4S800"), | ||
278 | }, | ||
279 | }, | ||
280 | |||
281 | { /* Handle reboot issue on Acer Aspire one */ | ||
282 | .callback = set_kbd_reboot, | ||
283 | .ident = "Acer Aspire One A110", | ||
284 | .matches = { | 281 | .matches = { |
285 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | 282 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
286 | DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"), | 283 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), |
284 | DMI_MATCH(DMI_BOARD_NAME, "0KW626"), | ||
287 | }, | 285 | }, |
288 | }, | 286 | }, |
289 | { /* Handle problems with rebooting on Apple MacBook5 */ | 287 | { /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G */ |
290 | .callback = set_pci_reboot, | 288 | .callback = set_bios_reboot, |
291 | .ident = "Apple MacBook5", | 289 | .ident = "Dell OptiPlex 760", |
292 | .matches = { | 290 | .matches = { |
293 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 291 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
294 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"), | 292 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"), |
293 | DMI_MATCH(DMI_BOARD_NAME, "0G919G"), | ||
295 | }, | 294 | }, |
296 | }, | 295 | }, |
297 | { /* Handle problems with rebooting on Apple MacBookPro5 */ | 296 | { /* Handle problems with rebooting on the OptiPlex 990. */ |
298 | .callback = set_pci_reboot, | 297 | .callback = set_pci_reboot, |
299 | .ident = "Apple MacBookPro5", | 298 | .ident = "Dell OptiPlex 990", |
300 | .matches = { | 299 | .matches = { |
301 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 300 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
302 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5"), | 301 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"), |
303 | }, | 302 | }, |
304 | }, | 303 | }, |
305 | { /* Handle problems with rebooting on Apple Macmini3,1 */ | 304 | { /* Handle problems with rebooting on Dell 300's */ |
306 | .callback = set_pci_reboot, | 305 | .callback = set_bios_reboot, |
307 | .ident = "Apple Macmini3,1", | 306 | .ident = "Dell PowerEdge 300", |
308 | .matches = { | 307 | .matches = { |
309 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 308 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), |
310 | DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"), | 309 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"), |
311 | }, | 310 | }, |
312 | }, | 311 | }, |
313 | { /* Handle problems with rebooting on the iMac9,1. */ | 312 | { /* Handle problems with rebooting on Dell 1300's */ |
314 | .callback = set_pci_reboot, | 313 | .callback = set_bios_reboot, |
315 | .ident = "Apple iMac9,1", | 314 | .ident = "Dell PowerEdge 1300", |
316 | .matches = { | 315 | .matches = { |
317 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 316 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), |
318 | DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"), | 317 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1300/"), |
319 | }, | 318 | }, |
320 | }, | 319 | }, |
321 | { /* Handle problems with rebooting on the Latitude E6320. */ | 320 | { /* Handle problems with rebooting on Dell 2400's */ |
322 | .callback = set_pci_reboot, | 321 | .callback = set_bios_reboot, |
323 | .ident = "Dell Latitude E6320", | 322 | .ident = "Dell PowerEdge 2400", |
324 | .matches = { | 323 | .matches = { |
325 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 324 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), |
326 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"), | 325 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"), |
327 | }, | 326 | }, |
328 | }, | 327 | }, |
329 | { /* Handle problems with rebooting on the Latitude E5410. */ | 328 | { /* Handle problems with rebooting on the Dell PowerEdge C6100. */ |
330 | .callback = set_pci_reboot, | 329 | .callback = set_pci_reboot, |
331 | .ident = "Dell Latitude E5410", | 330 | .ident = "Dell PowerEdge C6100", |
332 | .matches = { | 331 | .matches = { |
333 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 332 | DMI_MATCH(DMI_SYS_VENDOR, "Dell"), |
334 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5410"), | 333 | DMI_MATCH(DMI_PRODUCT_NAME, "C6100"), |
335 | }, | 334 | }, |
336 | }, | 335 | }, |
337 | { /* Handle problems with rebooting on the Latitude E5420. */ | 336 | { /* Handle problems with rebooting on the Precision M6600. */ |
338 | .callback = set_pci_reboot, | 337 | .callback = set_pci_reboot, |
339 | .ident = "Dell Latitude E5420", | 338 | .ident = "Dell Precision M6600", |
340 | .matches = { | 339 | .matches = { |
341 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 340 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
342 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5420"), | 341 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"), |
343 | }, | 342 | }, |
344 | }, | 343 | }, |
345 | { /* Handle problems with rebooting on the Latitude E6420. */ | 344 | { /* Handle problems with rebooting on Dell T5400's */ |
346 | .callback = set_pci_reboot, | 345 | .callback = set_bios_reboot, |
347 | .ident = "Dell Latitude E6420", | 346 | .ident = "Dell Precision T5400", |
348 | .matches = { | 347 | .matches = { |
349 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 348 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
350 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6420"), | 349 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"), |
351 | }, | 350 | }, |
352 | }, | 351 | }, |
353 | { /* Handle problems with rebooting on the OptiPlex 990. */ | 352 | { /* Handle problems with rebooting on Dell T7400's */ |
354 | .callback = set_pci_reboot, | 353 | .callback = set_bios_reboot, |
355 | .ident = "Dell OptiPlex 990", | 354 | .ident = "Dell Precision T7400", |
356 | .matches = { | 355 | .matches = { |
357 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 356 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
358 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"), | 357 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"), |
359 | }, | 358 | }, |
360 | }, | 359 | }, |
361 | { /* Handle problems with rebooting on the Precision M6600. */ | 360 | { /* Handle problems with rebooting on Dell XPS710 */ |
362 | .callback = set_pci_reboot, | 361 | .callback = set_bios_reboot, |
363 | .ident = "Dell Precision M6600", | 362 | .ident = "Dell XPS710", |
364 | .matches = { | 363 | .matches = { |
365 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 364 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
366 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"), | 365 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), |
367 | }, | 366 | }, |
368 | }, | 367 | }, |
369 | { /* Handle problems with rebooting on the Dell PowerEdge C6100. */ | 368 | |
370 | .callback = set_pci_reboot, | 369 | /* Hewlett-Packard */ |
371 | .ident = "Dell PowerEdge C6100", | 370 | { /* Handle problems with rebooting on HP laptops */ |
371 | .callback = set_bios_reboot, | ||
372 | .ident = "HP Compaq Laptop", | ||
372 | .matches = { | 373 | .matches = { |
373 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | 374 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), |
374 | DMI_MATCH(DMI_PRODUCT_NAME, "C6100"), | 375 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"), |
375 | }, | 376 | }, |
376 | }, | 377 | }, |
377 | { /* Some C6100 machines were shipped with vendor being 'Dell'. */ | 378 | |
378 | .callback = set_pci_reboot, | 379 | /* Sony */ |
379 | .ident = "Dell PowerEdge C6100", | 380 | { /* Handle problems with rebooting on Sony VGN-Z540N */ |
381 | .callback = set_bios_reboot, | ||
382 | .ident = "Sony VGN-Z540N", | ||
380 | .matches = { | 383 | .matches = { |
381 | DMI_MATCH(DMI_SYS_VENDOR, "Dell"), | 384 | DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), |
382 | DMI_MATCH(DMI_PRODUCT_NAME, "C6100"), | 385 | DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), |
383 | }, | 386 | }, |
384 | }, | 387 | }, |
388 | |||
385 | { } | 389 | { } |
386 | }; | 390 | }; |
387 | 391 | ||
@@ -535,10 +539,13 @@ static void native_machine_emergency_restart(void) | |||
535 | 539 | ||
536 | case BOOT_CF9_COND: | 540 | case BOOT_CF9_COND: |
537 | if (port_cf9_safe) { | 541 | if (port_cf9_safe) { |
538 | u8 cf9 = inb(0xcf9) & ~6; | 542 | u8 reboot_code = reboot_mode == REBOOT_WARM ? |
543 | 0x06 : 0x0E; | ||
544 | u8 cf9 = inb(0xcf9) & ~reboot_code; | ||
539 | outb(cf9|2, 0xcf9); /* Request hard reset */ | 545 | outb(cf9|2, 0xcf9); /* Request hard reset */ |
540 | udelay(50); | 546 | udelay(50); |
541 | outb(cf9|6, 0xcf9); /* Actually do the reset */ | 547 | /* Actually do the reset */ |
548 | outb(cf9|reboot_code, 0xcf9); | ||
542 | udelay(50); | 549 | udelay(50); |
543 | } | 550 | } |
544 | reboot_type = BOOT_KBD; | 551 | reboot_type = BOOT_KBD; |