mirror of
https://github.com/torvalds/linux.git
synced 2024-12-20 10:01:56 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc-merge
This commit is contained in:
commit
b54633056d
@ -225,9 +225,9 @@ V_FUNCTION_BEGIN(__do_get_xsec)
|
|||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
/* check for update count & load values */
|
/* check for update count & load values */
|
||||||
1: ld r8,CFG_TB_UPDATE_COUNT(r3)
|
1: ld r8,CFG_TB_UPDATE_COUNT(r3)
|
||||||
andi. r0,r4,1 /* pending update ? loop */
|
andi. r0,r8,1 /* pending update ? loop */
|
||||||
bne- 1b
|
bne- 1b
|
||||||
xor r0,r4,r4 /* create dependency */
|
xor r0,r8,r8 /* create dependency */
|
||||||
add r3,r3,r0
|
add r3,r3,r0
|
||||||
|
|
||||||
/* Get TB & offset it */
|
/* Get TB & offset it */
|
||||||
|
@ -169,7 +169,7 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
|
|||||||
#ifdef CONFIG_PPC_ISERIES
|
#ifdef CONFIG_PPC_ISERIES
|
||||||
if (_machine == PLATFORM_ISERIES_LPAR)
|
if (_machine == PLATFORM_ISERIES_LPAR)
|
||||||
ret = iSeries_hpte_insert(hpteg, va,
|
ret = iSeries_hpte_insert(hpteg, va,
|
||||||
virt_to_abs(paddr),
|
__pa(vaddr),
|
||||||
tmp_mode,
|
tmp_mode,
|
||||||
HPTE_V_BOLTED,
|
HPTE_V_BOLTED,
|
||||||
psize);
|
psize);
|
||||||
|
@ -893,6 +893,20 @@ void eeh_add_device_tree_early(struct device_node *dn)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
|
EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
|
||||||
|
|
||||||
|
void eeh_add_device_tree_late(struct pci_bus *bus)
|
||||||
|
{
|
||||||
|
struct pci_dev *dev;
|
||||||
|
|
||||||
|
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||||
|
eeh_add_device_late(dev);
|
||||||
|
if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
|
||||||
|
struct pci_bus *subbus = dev->subordinate;
|
||||||
|
if (subbus)
|
||||||
|
eeh_add_device_tree_late(subbus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* eeh_add_device_late - perform EEH initialization for the indicated pci device
|
* eeh_add_device_late - perform EEH initialization for the indicated pci device
|
||||||
* @dev: pci device for which to set up EEH
|
* @dev: pci device for which to set up EEH
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
static inline const char * pcid_name (struct pci_dev *pdev)
|
static inline const char * pcid_name (struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
if (pdev->dev.driver)
|
if (pdev && pdev->dev.driver)
|
||||||
return pdev->dev.driver->name;
|
return pdev->dev.driver->name;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -106,6 +106,8 @@ pcibios_fixup_new_pci_devices(struct pci_bus *bus, int fix_bus)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eeh_add_device_tree_late(bus);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices);
|
EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices);
|
||||||
|
|
||||||
@ -114,7 +116,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev)
|
|||||||
{
|
{
|
||||||
u8 sec_busno;
|
u8 sec_busno;
|
||||||
struct pci_bus *child_bus;
|
struct pci_bus *child_bus;
|
||||||
struct pci_dev *child_dev;
|
|
||||||
|
|
||||||
/* Get busno of downstream bus */
|
/* Get busno of downstream bus */
|
||||||
pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno);
|
pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno);
|
||||||
@ -129,10 +130,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev)
|
|||||||
|
|
||||||
pci_scan_child_bus(child_bus);
|
pci_scan_child_bus(child_bus);
|
||||||
|
|
||||||
list_for_each_entry(child_dev, &child_bus->devices, bus_list) {
|
|
||||||
eeh_add_device_late(child_dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fixup new pci devices without touching bus struct */
|
/* Fixup new pci devices without touching bus struct */
|
||||||
pcibios_fixup_new_pci_devices(child_bus, 0);
|
pcibios_fixup_new_pci_devices(child_bus, 0);
|
||||||
|
|
||||||
@ -160,18 +157,25 @@ pcibios_add_pci_devices(struct pci_bus * bus)
|
|||||||
|
|
||||||
eeh_add_device_tree_early(dn);
|
eeh_add_device_tree_early(dn);
|
||||||
|
|
||||||
/* pci_scan_slot should find all children */
|
if (_machine == PLATFORM_PSERIES_LPAR) {
|
||||||
slotno = PCI_SLOT(PCI_DN(dn->child)->devfn);
|
/* use ofdt-based probe */
|
||||||
num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0));
|
of_scan_bus(dn, bus);
|
||||||
if (num) {
|
if (!list_empty(&bus->devices)) {
|
||||||
pcibios_fixup_new_pci_devices(bus, 1);
|
pcibios_fixup_new_pci_devices(bus, 0);
|
||||||
pci_bus_add_devices(bus);
|
pci_bus_add_devices(bus);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
/* use legacy probe */
|
||||||
|
slotno = PCI_SLOT(PCI_DN(dn->child)->devfn);
|
||||||
|
num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0));
|
||||||
|
if (num) {
|
||||||
|
pcibios_fixup_new_pci_devices(bus, 1);
|
||||||
|
pci_bus_add_devices(bus);
|
||||||
|
}
|
||||||
|
|
||||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
list_for_each_entry(dev, &bus->devices, bus_list)
|
||||||
eeh_add_device_late (dev);
|
if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
|
||||||
if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
|
pcibios_pci_config_bridge(dev);
|
||||||
pcibios_pci_config_bridge(dev);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pcibios_add_pci_devices);
|
EXPORT_SYMBOL_GPL(pcibios_add_pci_devices);
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
|
||||||
struct pci_dev;
|
struct pci_dev;
|
||||||
|
struct pci_bus;
|
||||||
struct device_node;
|
struct device_node;
|
||||||
|
|
||||||
#ifdef CONFIG_EEH
|
#ifdef CONFIG_EEH
|
||||||
@ -61,7 +62,7 @@ void __init pci_addr_cache_build(void);
|
|||||||
*/
|
*/
|
||||||
void eeh_add_device_early(struct device_node *);
|
void eeh_add_device_early(struct device_node *);
|
||||||
void eeh_add_device_tree_early(struct device_node *);
|
void eeh_add_device_tree_early(struct device_node *);
|
||||||
void eeh_add_device_late(struct pci_dev *);
|
void eeh_add_device_tree_late(struct pci_bus *);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* eeh_remove_device - undo EEH setup for the indicated pci device
|
* eeh_remove_device - undo EEH setup for the indicated pci device
|
||||||
@ -116,12 +117,12 @@ static inline void pci_addr_cache_build(void) { }
|
|||||||
|
|
||||||
static inline void eeh_add_device_early(struct device_node *dn) { }
|
static inline void eeh_add_device_early(struct device_node *dn) { }
|
||||||
|
|
||||||
static inline void eeh_add_device_late(struct pci_dev *dev) { }
|
|
||||||
|
|
||||||
static inline void eeh_remove_device(struct pci_dev *dev) { }
|
static inline void eeh_remove_device(struct pci_dev *dev) { }
|
||||||
|
|
||||||
static inline void eeh_add_device_tree_early(struct device_node *dn) { }
|
static inline void eeh_add_device_tree_early(struct device_node *dn) { }
|
||||||
|
|
||||||
|
static inline void eeh_add_device_tree_late(struct pci_bus *bus) { }
|
||||||
|
|
||||||
static inline void eeh_remove_bus_device(struct pci_dev *dev) { }
|
static inline void eeh_remove_bus_device(struct pci_dev *dev) { }
|
||||||
#define EEH_POSSIBLE_ERROR(val, type) (0)
|
#define EEH_POSSIBLE_ERROR(val, type) (0)
|
||||||
#define EEH_IO_ERROR_VALUE(size) (-1UL)
|
#define EEH_IO_ERROR_VALUE(size) (-1UL)
|
||||||
|
Loading…
Reference in New Issue
Block a user