Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ipmi: add options to disable openfirmware and PCI scanning

Add try... parameters to disable pci and platform (openfirmware) device
scanning for IPMI. Also add docs for all the try... parameters.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Corey Minyard and committed by
Linus Torvalds
f2afae46 d941aeae

+40 -16
+12 -6
Documentation/IPMI.txt
··· 348 348 349 349 modprobe ipmi_si.o type=<type1>,<type2>.... 350 350 ports=<port1>,<port2>... addrs=<addr1>,<addr2>... 351 - irqs=<irq1>,<irq2>... trydefaults=[0|1] 351 + irqs=<irq1>,<irq2>... 352 352 regspacings=<sp1>,<sp2>,... regsizes=<size1>,<size2>,... 353 353 regshifts=<shift1>,<shift2>,... 354 354 slave_addrs=<addr1>,<addr2>,... 355 355 force_kipmid=<enable1>,<enable2>,... 356 356 kipmid_max_busy_us=<ustime1>,<ustime2>,... 357 357 unload_when_empty=[0|1] 358 + trydefaults=[0|1] trydmi=[0|1] tryacpi=[0|1] 359 + tryplatform=[0|1] trypci=[0|1] 358 360 359 - Each of these except si_trydefaults is a list, the first item for the 361 + Each of these except try... items is a list, the first item for the 360 362 first interface, second item for the second interface, etc. 361 363 362 364 The si_type may be either "kcs", "smic", or "bt". If you leave it blank, it 363 365 defaults to "kcs". 364 366 365 - If you specify si_addrs as non-zero for an interface, the driver will 367 + If you specify addrs as non-zero for an interface, the driver will 366 368 use the memory address given as the address of the device. This 367 369 overrides si_ports. 368 370 369 - If you specify si_ports as non-zero for an interface, the driver will 371 + If you specify ports as non-zero for an interface, the driver will 370 372 use the I/O port given as the device address. 371 373 372 - If you specify si_irqs as non-zero for an interface, the driver will 374 + If you specify irqs as non-zero for an interface, the driver will 373 375 attempt to use the given interrupt for the device. 374 376 375 - si_trydefaults sets whether the standard IPMI interface at 0xca2 and 377 + trydefaults sets whether the standard IPMI interface at 0xca2 and 376 378 any interfaces specified by ACPE are tried. By default, the driver 377 379 tries it, set this value to zero to turn this off. 380 + 381 + The other try... items disable discovery by their corresponding 382 + names. These are all enabled by default, set them to zero to disable 383 + them. The tryplatform disables openfirmware. 378 384 379 385 The next three parameters have to do with register layout. The 380 386 registers used by the interfaces may not appear at successive
+28 -10
drivers/char/ipmi/ipmi_si_intf.c
··· 1214 1214 #ifdef CONFIG_DMI 1215 1215 static bool si_trydmi = 1; 1216 1216 #endif 1217 + static bool si_tryplatform = 1; 1218 + #ifdef CONFIG_PCI 1219 + static bool si_trypci = 1; 1220 + #endif 1217 1221 static bool si_trydefaults = 1; 1218 1222 static char *si_type[SI_MAX_PARMS]; 1219 1223 #define MAX_SI_TYPE_STR 30 ··· 1257 1253 module_param_named(trydmi, si_trydmi, bool, 0); 1258 1254 MODULE_PARM_DESC(trydmi, "Setting this to zero will disable the" 1259 1255 " default scan of the interfaces identified via DMI"); 1256 + #endif 1257 + module_param_named(tryplatform, si_tryplatform, bool, 0); 1258 + MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the" 1259 + " default scan of the interfaces identified via platform" 1260 + " interfaces like openfirmware"); 1261 + #ifdef CONFIG_PCI 1262 + module_param_named(trypci, si_trypci, bool, 0); 1263 + MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the" 1264 + " default scan of the interfaces identified via pci"); 1260 1265 #endif 1261 1266 module_param_named(trydefaults, si_trydefaults, bool, 0); 1262 1267 MODULE_PARM_DESC(trydefaults, "Setting this to 'false' will disable the" ··· 3400 3387 return 0; 3401 3388 initialized = 1; 3402 3389 3403 - rv = platform_driver_register(&ipmi_driver); 3404 - if (rv) { 3405 - printk(KERN_ERR PFX "Unable to register driver: %d\n", rv); 3406 - return rv; 3390 + if (si_tryplatform) { 3391 + rv = platform_driver_register(&ipmi_driver); 3392 + if (rv) { 3393 + printk(KERN_ERR PFX "Unable to register " 3394 + "driver: %d\n", rv); 3395 + return rv; 3396 + } 3407 3397 } 3408 - 3409 3398 3410 3399 /* Parse out the si_type string into its components. */ 3411 3400 str = si_type_str; ··· 3431 3416 return 0; 3432 3417 3433 3418 #ifdef CONFIG_PCI 3434 - rv = pci_register_driver(&ipmi_pci_driver); 3435 - if (rv) 3436 - printk(KERN_ERR PFX "Unable to register PCI driver: %d\n", rv); 3437 - else 3438 - pci_registered = 1; 3419 + if (si_trypci) { 3420 + rv = pci_register_driver(&ipmi_pci_driver); 3421 + if (rv) 3422 + printk(KERN_ERR PFX "Unable to register " 3423 + "PCI driver: %d\n", rv); 3424 + else 3425 + pci_registered = 1; 3426 + } 3439 3427 #endif 3440 3428 3441 3429 #ifdef CONFIG_ACPI