diff options
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/iseries/lpevents.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/iseries/setup.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/maple/pci.c | 4 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/feature.c | 10 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/pfunc_base.c | 5 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/pfunc_core.c | 6 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/smp.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/Kconfig | 7 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh.c | 14 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_driver.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/pci_dlpar.c | 36 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/smp.c | 2 |
12 files changed, 58 insertions, 33 deletions
diff --git a/arch/powerpc/platforms/iseries/lpevents.c b/arch/powerpc/platforms/iseries/lpevents.c index 0b885300d1d1..8ca7b9396355 100644 --- a/arch/powerpc/platforms/iseries/lpevents.c +++ b/arch/powerpc/platforms/iseries/lpevents.c | |||
@@ -184,6 +184,8 @@ void setup_hvlpevent_queue(void) | |||
184 | { | 184 | { |
185 | void *eventStack; | 185 | void *eventStack; |
186 | 186 | ||
187 | spin_lock_init(&hvlpevent_queue.lock); | ||
188 | |||
187 | /* Allocate a page for the Event Stack. */ | 189 | /* Allocate a page for the Event Stack. */ |
188 | eventStack = alloc_bootmem_pages(LpEventStackSize); | 190 | eventStack = alloc_bootmem_pages(LpEventStackSize); |
189 | memset(eventStack, 0, LpEventStackSize); | 191 | memset(eventStack, 0, LpEventStackSize); |
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index 3f8790146b00..3ecc4a652d82 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c | |||
@@ -648,6 +648,7 @@ static void yield_shared_processor(void) | |||
648 | * here and let the timer_interrupt code sort out the actual time. | 648 | * here and let the timer_interrupt code sort out the actual time. |
649 | */ | 649 | */ |
650 | get_lppaca()->int_dword.fields.decr_int = 1; | 650 | get_lppaca()->int_dword.fields.decr_int = 1; |
651 | ppc64_runlatch_on(); | ||
651 | process_iSeries_events(); | 652 | process_iSeries_events(); |
652 | } | 653 | } |
653 | 654 | ||
diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c index 7d4099a34f92..85d6c93659cc 100644 --- a/arch/powerpc/platforms/maple/pci.c +++ b/arch/powerpc/platforms/maple/pci.c | |||
@@ -435,8 +435,8 @@ void __init maple_pci_init(void) | |||
435 | PCI_DN(np)->busno = 0xf0; | 435 | PCI_DN(np)->busno = 0xf0; |
436 | } | 436 | } |
437 | 437 | ||
438 | /* Tell pci.c to use the common resource allocation mecanism */ | 438 | /* Tell pci.c to not change any resource allocations. */ |
439 | pci_probe_only = 0; | 439 | pci_probe_only = 1; |
440 | 440 | ||
441 | /* Allow all IO */ | 441 | /* Allow all IO */ |
442 | io_page_mask = -1; | 442 | io_page_mask = -1; |
diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c index 558dd0692092..34714d3ea69a 100644 --- a/arch/powerpc/platforms/powermac/feature.c +++ b/arch/powerpc/platforms/powermac/feature.c | |||
@@ -1646,10 +1646,10 @@ static void intrepid_shutdown(struct macio_chip *macio, int sleep_mode) | |||
1646 | KL0_SCC_CELL_ENABLE); | 1646 | KL0_SCC_CELL_ENABLE); |
1647 | 1647 | ||
1648 | MACIO_BIC(KEYLARGO_FCR1, | 1648 | MACIO_BIC(KEYLARGO_FCR1, |
1649 | /*KL1_USB2_CELL_ENABLE |*/ | ||
1650 | KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT | | 1649 | KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT | |
1651 | KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE | | 1650 | KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE | |
1652 | KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE); | 1651 | KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE | |
1652 | KL1_EIDE0_ENABLE); | ||
1653 | if (pmac_mb.board_flags & PMAC_MB_MOBILE) | 1653 | if (pmac_mb.board_flags & PMAC_MB_MOBILE) |
1654 | MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); | 1654 | MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); |
1655 | 1655 | ||
@@ -2183,7 +2183,7 @@ static struct pmac_mb_def pmac_mb_defs[] = { | |||
2183 | }, | 2183 | }, |
2184 | { "PowerMac10,1", "Mac mini", | 2184 | { "PowerMac10,1", "Mac mini", |
2185 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2185 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
2186 | PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER, | 2186 | PMAC_MB_MAY_SLEEP, |
2187 | }, | 2187 | }, |
2188 | { "iMac,1", "iMac (first generation)", | 2188 | { "iMac,1", "iMac (first generation)", |
2189 | PMAC_TYPE_ORIG_IMAC, paddington_features, | 2189 | PMAC_TYPE_ORIG_IMAC, paddington_features, |
@@ -2295,11 +2295,11 @@ static struct pmac_mb_def pmac_mb_defs[] = { | |||
2295 | }, | 2295 | }, |
2296 | { "PowerBook5,8", "PowerBook G4 15\"", | 2296 | { "PowerBook5,8", "PowerBook G4 15\"", |
2297 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2297 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
2298 | PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, | 2298 | PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE, |
2299 | }, | 2299 | }, |
2300 | { "PowerBook5,9", "PowerBook G4 17\"", | 2300 | { "PowerBook5,9", "PowerBook G4 17\"", |
2301 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2301 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
2302 | PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, | 2302 | PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE, |
2303 | }, | 2303 | }, |
2304 | { "PowerBook6,1", "PowerBook G4 12\"", | 2304 | { "PowerBook6,1", "PowerBook G4 12\"", |
2305 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2305 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
diff --git a/arch/powerpc/platforms/powermac/pfunc_base.c b/arch/powerpc/platforms/powermac/pfunc_base.c index 4ffd2a9832a0..9b7150f10414 100644 --- a/arch/powerpc/platforms/powermac/pfunc_base.c +++ b/arch/powerpc/platforms/powermac/pfunc_base.c | |||
@@ -9,7 +9,12 @@ | |||
9 | #include <asm/pmac_feature.h> | 9 | #include <asm/pmac_feature.h> |
10 | #include <asm/pmac_pfunc.h> | 10 | #include <asm/pmac_pfunc.h> |
11 | 11 | ||
12 | #undef DEBUG | ||
13 | #ifdef DEBUG | ||
12 | #define DBG(fmt...) printk(fmt) | 14 | #define DBG(fmt...) printk(fmt) |
15 | #else | ||
16 | #define DBG(fmt...) | ||
17 | #endif | ||
13 | 18 | ||
14 | static irqreturn_t macio_gpio_irq(int irq, void *data, struct pt_regs *regs) | 19 | static irqreturn_t macio_gpio_irq(int irq, void *data, struct pt_regs *regs) |
15 | { | 20 | { |
diff --git a/arch/powerpc/platforms/powermac/pfunc_core.c b/arch/powerpc/platforms/powermac/pfunc_core.c index 356a739e52b2..4baa75b1d36f 100644 --- a/arch/powerpc/platforms/powermac/pfunc_core.c +++ b/arch/powerpc/platforms/powermac/pfunc_core.c | |||
@@ -20,7 +20,13 @@ | |||
20 | #define LOG_PARSE(fmt...) | 20 | #define LOG_PARSE(fmt...) |
21 | #define LOG_ERROR(fmt...) printk(fmt) | 21 | #define LOG_ERROR(fmt...) printk(fmt) |
22 | #define LOG_BLOB(t,b,c) | 22 | #define LOG_BLOB(t,b,c) |
23 | |||
24 | #undef DEBUG | ||
25 | #ifdef DEBUG | ||
23 | #define DBG(fmt...) printk(fmt) | 26 | #define DBG(fmt...) printk(fmt) |
27 | #else | ||
28 | #define DBG(fmt...) | ||
29 | #endif | ||
24 | 30 | ||
25 | /* Command numbers */ | 31 | /* Command numbers */ |
26 | #define PMF_CMD_LIST 0 | 32 | #define PMF_CMD_LIST 0 |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 0df2cdcd805c..6d64a9bf3474 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -435,7 +435,7 @@ struct smp_ops_t psurge_smp_ops = { | |||
435 | */ | 435 | */ |
436 | 436 | ||
437 | static void (*pmac_tb_freeze)(int freeze); | 437 | static void (*pmac_tb_freeze)(int freeze); |
438 | static unsigned long timebase; | 438 | static u64 timebase; |
439 | static int tb_req; | 439 | static int tb_req; |
440 | 440 | ||
441 | static void smp_core99_give_timebase(void) | 441 | static void smp_core99_give_timebase(void) |
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig index e3fc3407bb1f..4e5c8f8d869d 100644 --- a/arch/powerpc/platforms/pseries/Kconfig +++ b/arch/powerpc/platforms/pseries/Kconfig | |||
@@ -9,13 +9,6 @@ config PPC_SPLPAR | |||
9 | processors, that is, which share physical processors between | 9 | processors, that is, which share physical processors between |
10 | two or more partitions. | 10 | two or more partitions. |
11 | 11 | ||
12 | config HMT | ||
13 | bool "Hardware multithreading" | ||
14 | depends on SMP && PPC_PSERIES && BROKEN | ||
15 | help | ||
16 | This option enables hardware multithreading on RS64 cpus. | ||
17 | pSeries systems p620 and p660 have such a cpu type. | ||
18 | |||
19 | config EEH | 12 | config EEH |
20 | bool "PCI Extended Error Handling (EEH)" if EMBEDDED | 13 | bool "PCI Extended Error Handling (EEH)" if EMBEDDED |
21 | depends on PPC_PSERIES | 14 | depends on PPC_PSERIES |
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 83578313ee7e..2ab9dcdfb415 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -893,6 +893,20 @@ void eeh_add_device_tree_early(struct device_node *dn) | |||
893 | } | 893 | } |
894 | EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); | 894 | EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); |
895 | 895 | ||
896 | void eeh_add_device_tree_late(struct pci_bus *bus) | ||
897 | { | ||
898 | struct pci_dev *dev; | ||
899 | |||
900 | list_for_each_entry(dev, &bus->devices, bus_list) { | ||
901 | eeh_add_device_late(dev); | ||
902 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { | ||
903 | struct pci_bus *subbus = dev->subordinate; | ||
904 | if (subbus) | ||
905 | eeh_add_device_tree_late(subbus); | ||
906 | } | ||
907 | } | ||
908 | } | ||
909 | |||
896 | /** | 910 | /** |
897 | * eeh_add_device_late - perform EEH initialization for the indicated pci device | 911 | * eeh_add_device_late - perform EEH initialization for the indicated pci device |
898 | * @dev: pci device for which to set up EEH | 912 | * @dev: pci device for which to set up EEH |
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c index e3cbba49fd6e..b811d5ff92fe 100644 --- a/arch/powerpc/platforms/pseries/eeh_driver.c +++ b/arch/powerpc/platforms/pseries/eeh_driver.c | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | static inline const char * pcid_name (struct pci_dev *pdev) | 38 | static inline const char * pcid_name (struct pci_dev *pdev) |
39 | { | 39 | { |
40 | if (pdev->dev.driver) | 40 | if (pdev && pdev->dev.driver) |
41 | return pdev->dev.driver->name; | 41 | return pdev->dev.driver->name; |
42 | return ""; | 42 | return ""; |
43 | } | 43 | } |
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c index bdaa8aabdaa6..f3bad900bbcf 100644 --- a/arch/powerpc/platforms/pseries/pci_dlpar.c +++ b/arch/powerpc/platforms/pseries/pci_dlpar.c | |||
@@ -106,6 +106,8 @@ pcibios_fixup_new_pci_devices(struct pci_bus *bus, int fix_bus) | |||
106 | } | 106 | } |
107 | } | 107 | } |
108 | } | 108 | } |
109 | |||
110 | eeh_add_device_tree_late(bus); | ||
109 | } | 111 | } |
110 | EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices); | 112 | EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices); |
111 | 113 | ||
@@ -114,7 +116,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev) | |||
114 | { | 116 | { |
115 | u8 sec_busno; | 117 | u8 sec_busno; |
116 | struct pci_bus *child_bus; | 118 | struct pci_bus *child_bus; |
117 | struct pci_dev *child_dev; | ||
118 | 119 | ||
119 | /* Get busno of downstream bus */ | 120 | /* Get busno of downstream bus */ |
120 | pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno); | 121 | pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno); |
@@ -129,10 +130,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev) | |||
129 | 130 | ||
130 | pci_scan_child_bus(child_bus); | 131 | pci_scan_child_bus(child_bus); |
131 | 132 | ||
132 | list_for_each_entry(child_dev, &child_bus->devices, bus_list) { | ||
133 | eeh_add_device_late(child_dev); | ||
134 | } | ||
135 | |||
136 | /* Fixup new pci devices without touching bus struct */ | 133 | /* Fixup new pci devices without touching bus struct */ |
137 | pcibios_fixup_new_pci_devices(child_bus, 0); | 134 | pcibios_fixup_new_pci_devices(child_bus, 0); |
138 | 135 | ||
@@ -160,18 +157,25 @@ pcibios_add_pci_devices(struct pci_bus * bus) | |||
160 | 157 | ||
161 | eeh_add_device_tree_early(dn); | 158 | eeh_add_device_tree_early(dn); |
162 | 159 | ||
163 | /* pci_scan_slot should find all children */ | 160 | if (_machine == PLATFORM_PSERIES_LPAR) { |
164 | slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); | 161 | /* use ofdt-based probe */ |
165 | num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); | 162 | of_scan_bus(dn, bus); |
166 | if (num) { | 163 | if (!list_empty(&bus->devices)) { |
167 | pcibios_fixup_new_pci_devices(bus, 1); | 164 | pcibios_fixup_new_pci_devices(bus, 0); |
168 | pci_bus_add_devices(bus); | 165 | pci_bus_add_devices(bus); |
169 | } | 166 | } |
167 | } else { | ||
168 | /* use legacy probe */ | ||
169 | slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); | ||
170 | num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); | ||
171 | if (num) { | ||
172 | pcibios_fixup_new_pci_devices(bus, 1); | ||
173 | pci_bus_add_devices(bus); | ||
174 | } | ||
170 | 175 | ||
171 | list_for_each_entry(dev, &bus->devices, bus_list) { | 176 | list_for_each_entry(dev, &bus->devices, bus_list) |
172 | eeh_add_device_late (dev); | 177 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) |
173 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) | 178 | pcibios_pci_config_bridge(dev); |
174 | pcibios_pci_config_bridge(dev); | ||
175 | } | 179 | } |
176 | } | 180 | } |
177 | EXPORT_SYMBOL_GPL(pcibios_add_pci_devices); | 181 | EXPORT_SYMBOL_GPL(pcibios_add_pci_devices); |
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index 8e6b1ed1396e..8d710af50756 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c | |||
@@ -292,7 +292,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu) | |||
292 | if (start_cpu == RTAS_UNKNOWN_SERVICE) | 292 | if (start_cpu == RTAS_UNKNOWN_SERVICE) |
293 | return 1; | 293 | return 1; |
294 | 294 | ||
295 | status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, lcpu); | 295 | status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, pcpu); |
296 | if (status != 0) { | 296 | if (status != 0) { |
297 | printk(KERN_ERR "start-cpu failed: %i\n", status); | 297 | printk(KERN_ERR "start-cpu failed: %i\n", status); |
298 | return 0; | 298 | return 0; |