diff mbox

[2/2] PCI/ACPI: Report MSI support to BIOS if not disabled from command line

Message ID 201103022333.23919.rjw@sisk.pl (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Rafael Wysocki March 2, 2011, 10:33 p.m. UTC
None
diff mbox

Patch

Index: linux-2.6/drivers/pci/msi.c
===================================================================
--- linux-2.6.orig/drivers/pci/msi.c
+++ linux-2.6/drivers/pci/msi.c
@@ -24,6 +24,7 @@ 
 #include "msi.h"
 
 static int pci_msi_enable = 1;
+static bool msi_support_enabled = true;
 
 /* Arch hooks */
 
@@ -855,6 +856,17 @@  void pci_no_msi(void)
 	pci_msi_enable = 0;
 }
 
+void pci_no_msi_support(void)
+{
+	msi_support_enabled = false;
+	pci_no_msi();
+}
+
+bool pci_msi_support_enabled(void)
+{
+	return msi_support_enabled;
+}
+
 /**
  * pci_msi_enabled - is MSI enabled?
  *
Index: linux-2.6/drivers/pci/pci.c
===================================================================
--- linux-2.6.orig/drivers/pci/pci.c
+++ linux-2.6/drivers/pci/pci.c
@@ -3062,7 +3062,7 @@  static int __init pci_setup(char *str)
 			*k++ = 0;
 		if (*str && (str = pcibios_setup(str)) && *str) {
 			if (!strcmp(str, "nomsi")) {
-				pci_no_msi();
+				pci_no_msi_support();
 			} else if (!strcmp(str, "noaer")) {
 				pci_no_aer();
 			} else if (!strcmp(str, "nodomains")) {
Index: linux-2.6/include/linux/pci.h
===================================================================
--- linux-2.6.orig/include/linux/pci.h
+++ linux-2.6/include/linux/pci.h
@@ -446,11 +446,14 @@  static inline bool pci_is_root_bus(struc
 }
 
 #ifdef CONFIG_PCI_MSI
+extern bool pci_msi_support_enabled(void);
+
 static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
 {
 	return pci_dev->msi_enabled || pci_dev->msix_enabled;
 }
 #else
+static inline bool pci_msi_support_enabled(void) { return false; }
 static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
 #endif
 
Index: linux-2.6/drivers/acpi/pci_root.c
===================================================================
--- linux-2.6.orig/drivers/acpi/pci_root.c
+++ linux-2.6/drivers/acpi/pci_root.c
@@ -567,7 +567,7 @@  static int __devinit acpi_pci_root_add(s
 	if (pcie_aspm_support_enabled())
 		flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
 			OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
-	if (pci_msi_enabled())
+	if (pci_msi_support_enabled())
 		flags |= OSC_MSI_SUPPORT;
 	if (flags != base_flags)
 		acpi_pci_osc_support(root, flags);
Index: linux-2.6/drivers/pci/pci.h
===================================================================
--- linux-2.6.orig/drivers/pci/pci.h
+++ linux-2.6/drivers/pci/pci.h
@@ -140,9 +140,11 @@  extern unsigned int pci_pm_d3_delay;
 
 #ifdef CONFIG_PCI_MSI
 void pci_no_msi(void);
+extern void pci_no_msi_support(void);
 extern void pci_msi_init_pci_dev(struct pci_dev *dev);
 #else
 static inline void pci_no_msi(void) { }
+static inline void pci_no_msi_support(void) { }
 static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { }
 #endif