diff -urN -X linux-2.6.16/Documentation/dontdiff linux-2.6.16/drivers/edac/e752x_edac.c linux-2.6.16_edac/drivers/edac/e752x_edac.c --- linux-2.6.16/drivers/edac/e752x_edac.c 2006-03-19 21:53:29.000000000 -0800 +++ linux-2.6.16_edac/drivers/edac/e752x_edac.c 2006-04-25 13:59:45.000000000 -0700 @@ -29,6 +29,7 @@ #include "edac_mc.h" +static int force_function_unhide = 0; #ifndef PCI_DEVICE_ID_INTEL_7520_0 #define PCI_DEVICE_ID_INTEL_7520_0 0x3590 @@ -755,10 +756,19 @@ debugf0("MC: " __FILE__ ": %s(): mci\n", __func__); debugf0("Starting Probe1\n"); - /* enable device 0 function 1 */ + /* check to see if device 0 function 1 is enbaled if it isn't we + * assume the BIOS has reserved it for a reason and is expecting + * exclusive access, we take care to not violate that assumption and + * fail the probe. */ pci_read_config_byte(pdev, E752X_DEVPRES1, &stat8); - stat8 |= (1 << 5); - pci_write_config_byte(pdev, E752X_DEVPRES1, stat8); + if (!(stat8 & (1 << 5))) { + printk(KERN_INFO "contact your bios vendor to see if the " + "E752x error registers can be safely un-hidden\n"); + if (!force_function_unhide) + goto fail; + } + stat8 |= (1 << 5); + pci_write_config_byte(pdev, E752X_DEVPRES1, stat8); /* need to find out the number of channels */ pci_read_config_dword(pdev, E752X_DRC, &drc); @@ -1069,3 +1079,8 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Linux Networx (http://lnxi.com) Tom Zimmerman\n"); MODULE_DESCRIPTION("MC support for Intel e752x memory controllers"); + +module_param(force_function_unhide, int, 0644); +MODULE_PARM_DESC(force_function_unhide, "if BIOS sets Dev0:Fun1 up as hidden:" +" 1=force unhide and hope BIOS doesn't fight driver for Dev0:Fun1 access"); +