aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms
diff options
context:
space:
mode:
authorKumar Gala <galak@kernel.crashing.org>2006-03-20 12:58:02 -0500
committerKumar Gala <galak@kernel.crashing.org>2006-03-20 12:58:02 -0500
commit1a02e59a2970f9ed28ab51d3b08624b79e54d848 (patch)
tree470cce472be3b08c160e0c569648e7228651b12a /arch/powerpc/platforms
parentebcff3c773b42bce6182ec16485abca4e53fba97 (diff)
parent2c276603c3e5ebf38155a9d1fbbda656d52d138e (diff)
Merge branch 'master'
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r--arch/powerpc/platforms/iseries/lpevents.c2
-rw-r--r--arch/powerpc/platforms/iseries/setup.c1
-rw-r--r--arch/powerpc/platforms/maple/pci.c4
-rw-r--r--arch/powerpc/platforms/powermac/feature.c19
-rw-r--r--arch/powerpc/platforms/powermac/pfunc_base.c5
-rw-r--r--arch/powerpc/platforms/powermac/pfunc_core.c6
-rw-r--r--arch/powerpc/platforms/powermac/setup.c4
-rw-r--r--arch/powerpc/platforms/powermac/smp.c2
-rw-r--r--arch/powerpc/platforms/pseries/Kconfig9
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c14
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c2
-rw-r--r--arch/powerpc/platforms/pseries/pci_dlpar.c64
-rw-r--r--arch/powerpc/platforms/pseries/smp.c2
13 files changed, 91 insertions, 43 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 50ed8890dd33..e49eddd5042d 100644
--- a/arch/powerpc/platforms/powermac/feature.c
+++ b/arch/powerpc/platforms/powermac/feature.c
@@ -1644,10 +1644,10 @@ static void intrepid_shutdown(struct macio_chip *macio, int sleep_mode)
1644 KL0_SCC_CELL_ENABLE); 1644 KL0_SCC_CELL_ENABLE);
1645 1645
1646 MACIO_BIC(KEYLARGO_FCR1, 1646 MACIO_BIC(KEYLARGO_FCR1,
1647 /*KL1_USB2_CELL_ENABLE |*/
1648 KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT | 1647 KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT |
1649 KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE | 1648 KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE |
1650 KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE); 1649 KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE |
1650 KL1_EIDE0_ENABLE);
1651 if (pmac_mb.board_flags & PMAC_MB_MOBILE) 1651 if (pmac_mb.board_flags & PMAC_MB_MOBILE)
1652 MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); 1652 MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N);
1653 1653
@@ -2181,7 +2181,7 @@ static struct pmac_mb_def pmac_mb_defs[] = {
2181 }, 2181 },
2182 { "PowerMac10,1", "Mac mini", 2182 { "PowerMac10,1", "Mac mini",
2183 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2183 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
2184 PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER, 2184 PMAC_MB_MAY_SLEEP,
2185 }, 2185 },
2186 { "iMac,1", "iMac (first generation)", 2186 { "iMac,1", "iMac (first generation)",
2187 PMAC_TYPE_ORIG_IMAC, paddington_features, 2187 PMAC_TYPE_ORIG_IMAC, paddington_features,
@@ -2293,11 +2293,11 @@ static struct pmac_mb_def pmac_mb_defs[] = {
2293 }, 2293 },
2294 { "PowerBook5,8", "PowerBook G4 15\"", 2294 { "PowerBook5,8", "PowerBook G4 15\"",
2295 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2295 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
2296 PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, 2296 PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE,
2297 }, 2297 },
2298 { "PowerBook5,9", "PowerBook G4 17\"", 2298 { "PowerBook5,9", "PowerBook G4 17\"",
2299 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2299 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
2300 PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, 2300 PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE,
2301 }, 2301 },
2302 { "PowerBook6,1", "PowerBook G4 12\"", 2302 { "PowerBook6,1", "PowerBook G4 12\"",
2303 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2303 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
@@ -2489,9 +2489,7 @@ found:
2489 pmac_mb.model_id = PMAC_TYPE_COMET; 2489 pmac_mb.model_id = PMAC_TYPE_COMET;
2490 iounmap(mach_id_ptr); 2490 iounmap(mach_id_ptr);
2491 } 2491 }
2492#endif /* CONFIG_POWER4 */
2493 2492
2494#ifdef CONFIG_6xx
2495 /* Set default value of powersave_nap on machines that support it. 2493 /* Set default value of powersave_nap on machines that support it.
2496 * It appears that uninorth rev 3 has a problem with it, we don't 2494 * It appears that uninorth rev 3 has a problem with it, we don't
2497 * enable it on those. In theory, the flush-on-lock property is 2495 * enable it on those. In theory, the flush-on-lock property is
@@ -2520,10 +2518,11 @@ found:
2520 * NAP mode 2518 * NAP mode
2521 */ 2519 */
2522 powersave_lowspeed = 1; 2520 powersave_lowspeed = 1;
2523#endif /* CONFIG_6xx */ 2521
2524#ifdef CONFIG_POWER4 2522#else /* CONFIG_POWER4 */
2525 powersave_nap = 1; 2523 powersave_nap = 1;
2526#endif 2524#endif /* CONFIG_POWER4 */
2525
2527 /* Check for "mobile" machine */ 2526 /* Check for "mobile" machine */
2528 if (model && (strncmp(model, "PowerBook", 9) == 0 2527 if (model && (strncmp(model, "PowerBook", 9) == 0
2529 || strncmp(model, "iBook", 5) == 0)) 2528 || strncmp(model, "iBook", 5) == 0))
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
14static irqreturn_t macio_gpio_irq(int irq, void *data, struct pt_regs *regs) 19static 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/setup.c b/arch/powerpc/platforms/powermac/setup.c
index 97c54e19c1b5..385aab90c4d2 100644
--- a/arch/powerpc/platforms/powermac/setup.c
+++ b/arch/powerpc/platforms/powermac/setup.c
@@ -621,10 +621,6 @@ static void __init pmac_init_early(void)
621 /* Probe motherboard chipset */ 621 /* Probe motherboard chipset */
622 pmac_feature_init(); 622 pmac_feature_init();
623 623
624 /* We can NAP */
625 powersave_nap = 1;
626 printk(KERN_INFO "Using native/NAP idle loop\n");
627
628 /* Initialize debug stuff */ 624 /* Initialize debug stuff */
629 udbg_scc_init(!!strstr(cmd_line, "sccdbg")); 625 udbg_scc_init(!!strstr(cmd_line, "sccdbg"));
630 udbg_adb_init(!!strstr(cmd_line, "btextdbg")); 626 udbg_adb_init(!!strstr(cmd_line, "btextdbg"));
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
437static void (*pmac_tb_freeze)(int freeze); 437static void (*pmac_tb_freeze)(int freeze);
438static unsigned long timebase; 438static u64 timebase;
439static int tb_req; 439static int tb_req;
440 440
441static void smp_core99_give_timebase(void) 441static void smp_core99_give_timebase(void)
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index e3fc3407bb1f..a57032cf6f1b 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
12config 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
19config EEH 12config 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
@@ -26,7 +19,7 @@ config SCANLOG
26 depends on RTAS_PROC && PPC_PSERIES 19 depends on RTAS_PROC && PPC_PSERIES
27 20
28config LPARCFG 21config LPARCFG
29 tristate "LPAR Configuration Data" 22 bool "LPAR Configuration Data"
30 depends on PPC_PSERIES || PPC_ISERIES 23 depends on PPC_PSERIES || PPC_ISERIES
31 help 24 help
32 Provide system capacity information via human readable 25 Provide system capacity information via human readable
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}
894EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); 894EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
895 895
896void 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
38static inline const char * pcid_name (struct pci_dev *pdev) 38static 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..44abdeb9ca03 100644
--- a/arch/powerpc/platforms/pseries/pci_dlpar.c
+++ b/arch/powerpc/platforms/pseries/pci_dlpar.c
@@ -27,6 +27,7 @@
27 27
28#include <linux/pci.h> 28#include <linux/pci.h>
29#include <asm/pci-bridge.h> 29#include <asm/pci-bridge.h>
30#include <asm/ppc-pci.h>
30 31
31static struct pci_bus * 32static struct pci_bus *
32find_bus_among_children(struct pci_bus *bus, 33find_bus_among_children(struct pci_bus *bus,
@@ -106,6 +107,8 @@ pcibios_fixup_new_pci_devices(struct pci_bus *bus, int fix_bus)
106 } 107 }
107 } 108 }
108 } 109 }
110
111 eeh_add_device_tree_late(bus);
109} 112}
110EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices); 113EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices);
111 114
@@ -114,7 +117,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev)
114{ 117{
115 u8 sec_busno; 118 u8 sec_busno;
116 struct pci_bus *child_bus; 119 struct pci_bus *child_bus;
117 struct pci_dev *child_dev;
118 120
119 /* Get busno of downstream bus */ 121 /* Get busno of downstream bus */
120 pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno); 122 pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno);
@@ -129,10 +131,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev)
129 131
130 pci_scan_child_bus(child_bus); 132 pci_scan_child_bus(child_bus);
131 133
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 */ 134 /* Fixup new pci devices without touching bus struct */
137 pcibios_fixup_new_pci_devices(child_bus, 0); 135 pcibios_fixup_new_pci_devices(child_bus, 0);
138 136
@@ -160,18 +158,52 @@ pcibios_add_pci_devices(struct pci_bus * bus)
160 158
161 eeh_add_device_tree_early(dn); 159 eeh_add_device_tree_early(dn);
162 160
163 /* pci_scan_slot should find all children */ 161 if (_machine == PLATFORM_PSERIES_LPAR) {
164 slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); 162 /* use ofdt-based probe */
165 num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); 163 of_scan_bus(dn, bus);
166 if (num) { 164 if (!list_empty(&bus->devices)) {
167 pcibios_fixup_new_pci_devices(bus, 1); 165 pcibios_fixup_new_pci_devices(bus, 0);
168 pci_bus_add_devices(bus); 166 pci_bus_add_devices(bus);
169 } 167 }
168 } else {
169 /* use legacy probe */
170 slotno = PCI_SLOT(PCI_DN(dn->child)->devfn);
171 num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0));
172 if (num) {
173 pcibios_fixup_new_pci_devices(bus, 1);
174 pci_bus_add_devices(bus);
175 }
170 176
171 list_for_each_entry(dev, &bus->devices, bus_list) { 177 list_for_each_entry(dev, &bus->devices, bus_list)
172 eeh_add_device_late (dev); 178 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
173 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) 179 pcibios_pci_config_bridge(dev);
174 pcibios_pci_config_bridge(dev);
175 } 180 }
176} 181}
177EXPORT_SYMBOL_GPL(pcibios_add_pci_devices); 182EXPORT_SYMBOL_GPL(pcibios_add_pci_devices);
183
184struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn)
185{
186 struct pci_controller *phb;
187 int primary;
188
189 primary = list_empty(&hose_list);
190 phb = pcibios_alloc_controller(dn);
191 if (!phb)
192 return NULL;
193 setup_phb(dn, phb);
194 pci_process_bridge_OF_ranges(phb, dn, 0);
195
196 pci_setup_phb_io_dynamic(phb, primary);
197
198 pci_devs_phb_init_dynamic(phb);
199
200 if (dn->child)
201 eeh_add_device_tree_early(dn);
202
203 scan_phb(phb);
204 pcibios_fixup_new_pci_devices(phb->bus, 0);
205 pci_bus_add_devices(phb->bus);
206
207 return phb;
208}
209EXPORT_SYMBOL_GPL(init_phb_dynamic);
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;