diff options
author | Paul Mackerras <paulus@samba.org> | 2008-06-29 19:57:05 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-06-29 19:57:05 -0400 |
commit | 441dbb500b4344a8e3125e5aabab4f9dbf72514f (patch) | |
tree | 3bb8fb1a88db3f5d03062a4887312f25c2e8041d /arch/powerpc/sysdev | |
parent | dee805532a30183c4462305b4614e58bd83a7bc1 (diff) | |
parent | 5ce4b59653b2c2053cd9a011918ac1e4747f24cc (diff) |
Merge branch 'next' of master.kernel.org:/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx
Diffstat (limited to 'arch/powerpc/sysdev')
-rw-r--r-- | arch/powerpc/sysdev/indirect_pci.c | 6 | ||||
-rw-r--r-- | arch/powerpc/sysdev/ppc4xx_pci.c | 14 |
2 files changed, 20 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/indirect_pci.c b/arch/powerpc/sysdev/indirect_pci.c index cfbd2aae93e8..7fd49c97501a 100644 --- a/arch/powerpc/sysdev/indirect_pci.c +++ b/arch/powerpc/sysdev/indirect_pci.c | |||
@@ -123,6 +123,12 @@ indirect_write_config(struct pci_bus *bus, unsigned int devfn, int offset, | |||
123 | (bus->number == hose->first_busno)) | 123 | (bus->number == hose->first_busno)) |
124 | val &= 0xffffff00; | 124 | val &= 0xffffff00; |
125 | 125 | ||
126 | /* Workaround for PCI_28 Errata in 440EPx/GRx */ | ||
127 | if ((hose->indirect_type & PPC_INDIRECT_TYPE_BROKEN_MRM) && | ||
128 | offset == PCI_CACHE_LINE_SIZE) { | ||
129 | val = 0; | ||
130 | } | ||
131 | |||
126 | /* | 132 | /* |
127 | * Note: the caller has already checked that offset is | 133 | * Note: the caller has already checked that offset is |
128 | * suitably aligned and that len is 1, 2 or 4. | 134 | * suitably aligned and that len is 1, 2 or 4. |
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c index b4a54c52e880..fb368dfde5d4 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.c +++ b/arch/powerpc/sysdev/ppc4xx_pci.c | |||
@@ -75,6 +75,11 @@ static void fixup_ppc4xx_pci_bridge(struct pci_dev *dev) | |||
75 | !of_device_is_compatible(hose->dn, "ibm,plb-pci")) | 75 | !of_device_is_compatible(hose->dn, "ibm,plb-pci")) |
76 | return; | 76 | return; |
77 | 77 | ||
78 | if (of_device_is_compatible(hose->dn, "ibm,plb440epx-pci") || | ||
79 | of_device_is_compatible(hose->dn, "ibm,plb440grx-pci")) { | ||
80 | hose->indirect_type |= PPC_INDIRECT_TYPE_BROKEN_MRM; | ||
81 | } | ||
82 | |||
78 | /* Hide the PCI host BARs from the kernel as their content doesn't | 83 | /* Hide the PCI host BARs from the kernel as their content doesn't |
79 | * fit well in the resource management | 84 | * fit well in the resource management |
80 | */ | 85 | */ |
@@ -1634,6 +1639,15 @@ static void __init ppc4xx_probe_pciex_bridge(struct device_node *np) | |||
1634 | } | 1639 | } |
1635 | port = &ppc4xx_pciex_ports[portno]; | 1640 | port = &ppc4xx_pciex_ports[portno]; |
1636 | port->index = portno; | 1641 | port->index = portno; |
1642 | |||
1643 | /* | ||
1644 | * Check if device is enabled | ||
1645 | */ | ||
1646 | if (!of_device_is_available(np)) { | ||
1647 | printk(KERN_INFO "PCIE%d: Port disabled via device-tree\n", port->index); | ||
1648 | return; | ||
1649 | } | ||
1650 | |||
1637 | port->node = of_node_get(np); | 1651 | port->node = of_node_get(np); |
1638 | pval = of_get_property(np, "sdr-base", NULL); | 1652 | pval = of_get_property(np, "sdr-base", NULL); |
1639 | if (pval == NULL) { | 1653 | if (pval == NULL) { |