Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c763eb9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6: (27 commits)
  [PATCH] PCI: nVidia quirk to make AER PCI-E extended capability visible
  [PATCH] PCI: fix issues with extended conf space when MMCONFIG disabled because of e820
  [PATCH] PCI: Bus Parity Status sysfs interface
  [PATCH] PCI: fix memory leak in MMCONFIG error path
  [PATCH] PCI: fix error with pci_get_device() call in the mpc85xx driver
  [PATCH] PCI: MSI-K8T-Neo2-Fir: run only where needed
  [PATCH] PCI: fix race with pci_walk_bus and pci_destroy_dev
  [PATCH] PCI: clean up pci documentation to be more specific
  [PATCH] PCI: remove unneeded msi code
  [PATCH] PCI: don't move ioapics below PCI bridge
  [PATCH] PCI: cleanup unused variable about msi driver
  [PATCH] PCI: disable msi mode in pci_disable_device
  [PATCH] PCI: Allow MSI to work on kexec kernel
  [PATCH] PCI: AMD 8131 MSI quirk called too late, bus_flags not inherited ?
  [PATCH] PCI: Move various PCI IDs to header file
  [PATCH] PCI Bus Parity Status-broken hardware attribute, EDAC foundation
  [PATCH] PCI: i386/x86_84: disable PCI resource decode on device disable
  [PATCH] PCI ACPI: Rename the functions to avoid multiple instances.
  [PATCH] PCI: don't enable device if already enabled
  [PATCH] PCI: Add a "enable" sysfs attribute to the pci devices to allow userspace (Xorg) to enable devices without doing foul direct access
  ...
parents dcc1a66a cf34a8e0
Loading
Loading
Loading
Loading
+11 −3
Original line number Original line Diff line number Diff line
@@ -213,9 +213,17 @@ have been remapped by the kernel.


   See Documentation/IO-mapping.txt for how to access device memory.
   See Documentation/IO-mapping.txt for how to access device memory.


   You still need to call request_region() for I/O regions and
   The device driver needs to call pci_request_region() to make sure
request_mem_region() for memory regions to make sure nobody else is using the
no other device is already using the same resource. The driver is expected
same device.
to determine MMIO and IO Port resource availability _before_ calling
pci_enable_device().  Conversely, drivers should call pci_release_region()
_after_ calling pci_disable_device(). The idea is to prevent two devices
colliding on the same address range.

Generic flavors of pci_request_region() are request_mem_region()
(for MMIO ranges) and request_region() (for IO Port ranges).
Use these for address resources that are not described by "normal" PCI
interfaces (e.g. BAR).


   All interrupt handlers should be registered with SA_SHIRQ and use the devid
   All interrupt handlers should be registered with SA_SHIRQ and use the devid
to map IRQs to devices (remember that all PCI interrupts are shared).
to map IRQs to devices (remember that all PCI interrupts are shared).
+2 −0
Original line number Original line Diff line number Diff line
@@ -202,6 +202,8 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size)
		if (mcfg->config[i].base_reserved) {
		if (mcfg->config[i].base_reserved) {
			printk(KERN_ERR PREFIX
			printk(KERN_ERR PREFIX
			       "MMCONFIG not in low 4GB of memory\n");
			       "MMCONFIG not in low 4GB of memory\n");
			kfree(pci_mmcfg_config);
			pci_mmcfg_config_num = 0;
			return -ENODEV;
			return -ENODEV;
		}
		}
	}
	}
+1 −0
Original line number Original line Diff line number Diff line
@@ -288,6 +288,7 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)


void pcibios_disable_device (struct pci_dev *dev)
void pcibios_disable_device (struct pci_dev *dev)
{
{
	pcibios_disable_resources(dev);
	if (pcibios_disable_irq)
	if (pcibios_disable_irq)
		pcibios_disable_irq(dev);
		pcibios_disable_irq(dev);
}
}
+9 −0
Original line number Original line Diff line number Diff line
@@ -242,6 +242,15 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
	return 0;
	return 0;
}
}


void pcibios_disable_resources(struct pci_dev *dev)
{
	u16 cmd;

	pci_read_config_word(dev, PCI_COMMAND, &cmd);
	cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
	pci_write_config_word(dev, PCI_COMMAND, cmd);
}

/*
/*
 *  If we set up a device for bus mastering, we need to check the latency
 *  If we set up a device for bus mastering, we need to check the latency
 *  timer as certain crappy BIOSes forget to set it properly.
 *  timer as certain crappy BIOSes forget to set it properly.
+6 −3
Original line number Original line Diff line number Diff line
@@ -15,7 +15,9 @@
#include <asm/e820.h>
#include <asm/e820.h>
#include "pci.h"
#include "pci.h"


#define MMCONFIG_APER_SIZE (256*1024*1024)
/* aperture is up to 256MB but BIOS may reserve less */
#define MMCONFIG_APER_MIN	(2 * 1024*1024)
#define MMCONFIG_APER_MAX	(256 * 1024*1024)


/* Assume systems with more busses have correct MCFG */
/* Assume systems with more busses have correct MCFG */
#define MAX_CHECK_BUS 16
#define MAX_CHECK_BUS 16
@@ -197,9 +199,10 @@ void __init pci_mmcfg_init(void)
		return;
		return;


	if (!e820_all_mapped(pci_mmcfg_config[0].base_address,
	if (!e820_all_mapped(pci_mmcfg_config[0].base_address,
			pci_mmcfg_config[0].base_address + MMCONFIG_APER_SIZE,
			pci_mmcfg_config[0].base_address + MMCONFIG_APER_MIN,
			E820_RESERVED)) {
			E820_RESERVED)) {
		printk(KERN_ERR "PCI: BIOS Bug: MCFG area is not E820-reserved\n");
		printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %x is not E820-reserved\n",
				pci_mmcfg_config[0].base_address);
		printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
		printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
		return;
		return;
	}
	}
Loading