aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/reboot.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-11-11 21:33:38 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-11 21:33:38 -0500
commit986189f9ec81263c982b60433b5b937f1056a631 (patch)
tree209b89a2f920f72541ffe5b5698ece959c584791 /arch/x86/kernel/reboot.c
parent2934578e28be0a0b338ce701d3d87a4a6b0ff03b (diff)
parent6d9153bbce50d41802ad2e20ce52daf699a3e8ad (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.c291
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 */
138static struct dmi_system_id __initdata reboot_dmi_table[] = { 138static 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;