mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86-bigbox-pci
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86-bigbox-pci:
x86: add pci=check_enable_amd_mmconf and dmi check
x86: work around io allocation overlap of HT links
acpi: get boot_cpu_id as early for k8_scan_nodes
x86_64: don't need set default res if only have one root bus
x86: double check the multi root bus with fam10h mmconf
x86: multi pci root bus with different io resource range, on 64-bit
x86: use bus conf in NB conf fun1 to get bus range on, on 64-bit
x86: get mp_bus_to_node early
x86 pci: remove checking type for mmconfig probe
x86: remove unneeded check in mmconf reject
driver core: try parent numa_node at first before using default
x86: seperate mmconf for fam10h out from setup_64.c
x86: if acpi=off, force setting the mmconf for fam10h
x86_64: check MSR to get MMCONFIG for AMD Family 10h
x86_64: check and enable MMCONFIG for AMD Family 10h
x86_64: set cfg_size for AMD Family 10h in case MMCONFIG
x86: mmconf enable mcfg early
x86: clear pci_mmcfg_virt when mmcfg get rejected
x86: validate against acpi motherboard resources
Fixed up fairly trivial conflicts in arch/x86/pci/{init.c,pci.h} due to
OLPC support manually.
This commit is contained in:
commit
5f78e4d339
27 changed files with 1285 additions and 132 deletions
|
|
@ -35,6 +35,7 @@
|
|||
#ifdef CONFIG_X86
|
||||
#include <asm/mpspec.h>
|
||||
#endif
|
||||
#include <linux/pci.h>
|
||||
#include <acpi/acpi_bus.h>
|
||||
#include <acpi/acpi_drivers.h>
|
||||
|
||||
|
|
@ -784,6 +785,7 @@ static int __init acpi_init(void)
|
|||
result = acpi_bus_init();
|
||||
|
||||
if (!result) {
|
||||
pci_mmcfg_late_init();
|
||||
if (!(pm_flags & PM_APM))
|
||||
pm_flags |= PM_ACPI;
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -787,6 +787,10 @@ int device_add(struct device *dev)
|
|||
parent = get_device(dev->parent);
|
||||
setup_parent(dev, parent);
|
||||
|
||||
/* use parent numa_node */
|
||||
if (parent)
|
||||
set_dev_node(dev, dev_to_node(parent));
|
||||
|
||||
/* first, register with generic layer. */
|
||||
error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev->bus_id);
|
||||
if (error)
|
||||
|
|
@ -1306,8 +1310,11 @@ int device_move(struct device *dev, struct device *new_parent)
|
|||
dev->parent = new_parent;
|
||||
if (old_parent)
|
||||
klist_remove(&dev->knode_parent);
|
||||
if (new_parent)
|
||||
if (new_parent) {
|
||||
klist_add_tail(&dev->knode_parent, &new_parent->klist_children);
|
||||
set_dev_node(dev, dev_to_node(new_parent));
|
||||
}
|
||||
|
||||
if (!dev->class)
|
||||
goto out_put;
|
||||
error = device_move_class_links(dev, old_parent, new_parent);
|
||||
|
|
@ -1317,9 +1324,12 @@ int device_move(struct device *dev, struct device *new_parent)
|
|||
if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
|
||||
if (new_parent)
|
||||
klist_remove(&dev->knode_parent);
|
||||
if (old_parent)
|
||||
dev->parent = old_parent;
|
||||
if (old_parent) {
|
||||
klist_add_tail(&dev->knode_parent,
|
||||
&old_parent->klist_children);
|
||||
set_dev_node(dev, dev_to_node(old_parent));
|
||||
}
|
||||
}
|
||||
cleanup_glue_dir(dev, new_parent_kobj);
|
||||
put_device(new_parent);
|
||||
|
|
|
|||
|
|
@ -842,11 +842,14 @@ static void set_pcie_port_type(struct pci_dev *pdev)
|
|||
* reading the dword at 0x100 which must either be 0 or a valid extended
|
||||
* capability header.
|
||||
*/
|
||||
int pci_cfg_space_size(struct pci_dev *dev)
|
||||
int pci_cfg_space_size_ext(struct pci_dev *dev, unsigned check_exp_pcix)
|
||||
{
|
||||
int pos;
|
||||
u32 status;
|
||||
|
||||
if (!check_exp_pcix)
|
||||
goto skip;
|
||||
|
||||
pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
|
||||
if (!pos) {
|
||||
pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
|
||||
|
|
@ -858,6 +861,7 @@ int pci_cfg_space_size(struct pci_dev *dev)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
skip:
|
||||
if (pci_read_config_dword(dev, 256, &status) != PCIBIOS_SUCCESSFUL)
|
||||
goto fail;
|
||||
if (status == 0xffffffff)
|
||||
|
|
@ -869,6 +873,11 @@ int pci_cfg_space_size(struct pci_dev *dev)
|
|||
return PCI_CFG_SPACE_SIZE;
|
||||
}
|
||||
|
||||
int pci_cfg_space_size(struct pci_dev *dev)
|
||||
{
|
||||
return pci_cfg_space_size_ext(dev, 1);
|
||||
}
|
||||
|
||||
static void pci_release_bus_bridge_dev(struct device *dev)
|
||||
{
|
||||
kfree(dev);
|
||||
|
|
@ -964,7 +973,6 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
|
|||
dev->dev.release = pci_release_dev;
|
||||
pci_dev_get(dev);
|
||||
|
||||
set_dev_node(&dev->dev, pcibus_to_node(bus));
|
||||
dev->dev.dma_mask = &dev->dma_mask;
|
||||
dev->dev.dma_parms = &dev->dma_parms;
|
||||
dev->dev.coherent_dma_mask = 0xffffffffull;
|
||||
|
|
@ -1080,6 +1088,10 @@ unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
|
|||
return max;
|
||||
}
|
||||
|
||||
void __attribute__((weak)) set_pci_bus_resources_arch_default(struct pci_bus *b)
|
||||
{
|
||||
}
|
||||
|
||||
struct pci_bus * pci_create_bus(struct device *parent,
|
||||
int bus, struct pci_ops *ops, void *sysdata)
|
||||
{
|
||||
|
|
@ -1119,6 +1131,9 @@ struct pci_bus * pci_create_bus(struct device *parent,
|
|||
goto dev_reg_err;
|
||||
b->bridge = get_device(dev);
|
||||
|
||||
if (!parent)
|
||||
set_dev_node(b->bridge, pcibus_to_node(b));
|
||||
|
||||
b->dev.class = &pcibus_class;
|
||||
b->dev.parent = b->bridge;
|
||||
sprintf(b->dev.bus_id, "%04x:%02x", pci_domain_nr(b), bus);
|
||||
|
|
@ -1136,6 +1151,8 @@ struct pci_bus * pci_create_bus(struct device *parent,
|
|||
b->resource[0] = &ioport_resource;
|
||||
b->resource[1] = &iomem_resource;
|
||||
|
||||
set_pci_bus_resources_arch_default(b);
|
||||
|
||||
return b;
|
||||
|
||||
dev_create_file_err:
|
||||
|
|
|
|||
Loading…
Reference in a new issue