diff options
-rw-r--r-- | arch/powerpc/kernel/prom_init.c | 39 | ||||
-rw-r--r-- | arch/powerpc/mm/slb.c | 8 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-cpu.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/lpar.c | 1 | ||||
-rw-r--r-- | include/asm-powerpc/mmu-hash64.h | 1 |
5 files changed, 51 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 1add6efdb315..5d89a21dd0d6 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -2216,6 +2216,45 @@ static void __init fixup_device_tree_efika(void) | |||
2216 | prom_printf("fixup_device_tree_efika: ", | 2216 | prom_printf("fixup_device_tree_efika: ", |
2217 | "skipped entry %x - setprop error\n", i); | 2217 | "skipped entry %x - setprop error\n", i); |
2218 | } | 2218 | } |
2219 | |||
2220 | /* Make sure ethernet mdio bus node exists */ | ||
2221 | node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio")); | ||
2222 | if (!PHANDLE_VALID(node)) { | ||
2223 | prom_printf("Adding Ethernet MDIO node\n"); | ||
2224 | call_prom("interpret", 1, 1, | ||
2225 | " s\" /builtin\" find-device" | ||
2226 | " new-device" | ||
2227 | " 1 encode-int s\" #address-cells\" property" | ||
2228 | " 0 encode-int s\" #size-cells\" property" | ||
2229 | " s\" mdio\" 2dup device-name device-type" | ||
2230 | " s\" mpc5200b-fec-phy\" encode-string" | ||
2231 | " s\" compatible\" property" | ||
2232 | " 0xf0003000 0x400 reg" | ||
2233 | " 0x2 encode-int" | ||
2234 | " 0x5 encode-int encode+" | ||
2235 | " 0x3 encode-int encode+" | ||
2236 | " s\" interrupts\" property" | ||
2237 | " finish-device"); | ||
2238 | }; | ||
2239 | |||
2240 | /* Make sure ethernet phy device node exist */ | ||
2241 | node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio/ethernet-phy")); | ||
2242 | if (!PHANDLE_VALID(node)) { | ||
2243 | prom_printf("Adding Ethernet PHY node\n"); | ||
2244 | call_prom("interpret", 1, 1, | ||
2245 | " s\" /builtin/mdio\" find-device" | ||
2246 | " new-device" | ||
2247 | " s\" ethernet-phy\" device-name" | ||
2248 | " 0x10 encode-int s\" reg\" property" | ||
2249 | " my-self" | ||
2250 | " ihandle>phandle" | ||
2251 | " finish-device" | ||
2252 | " s\" /builtin/ethernet\" find-device" | ||
2253 | " encode-int" | ||
2254 | " s\" phy-handle\" property" | ||
2255 | " device-end"); | ||
2256 | } | ||
2257 | |||
2219 | } | 2258 | } |
2220 | #else | 2259 | #else |
2221 | #define fixup_device_tree_efika() | 2260 | #define fixup_device_tree_efika() |
diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index 27922dff8b94..a282bc212e80 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c | |||
@@ -82,6 +82,14 @@ static inline void slb_shadow_clear(unsigned long entry) | |||
82 | get_slb_shadow()->save_area[entry].esid = 0; | 82 | get_slb_shadow()->save_area[entry].esid = 0; |
83 | } | 83 | } |
84 | 84 | ||
85 | void slb_shadow_clear_all(void) | ||
86 | { | ||
87 | int i; | ||
88 | |||
89 | for (i = 0; i < SLB_NUM_BOLTED; i++) | ||
90 | slb_shadow_clear(i); | ||
91 | } | ||
92 | |||
85 | static inline void create_shadowed_slbe(unsigned long ea, int ssize, | 93 | static inline void create_shadowed_slbe(unsigned long ea, int ssize, |
86 | unsigned long flags, | 94 | unsigned long flags, |
87 | unsigned long entry) | 95 | unsigned long entry) |
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index fc48b96c81bf..412e6b42986f 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <asm/vdso_datapage.h> | 29 | #include <asm/vdso_datapage.h> |
30 | #include <asm/pSeries_reconfig.h> | 30 | #include <asm/pSeries_reconfig.h> |
31 | #include "xics.h" | 31 | #include "xics.h" |
32 | #include "plpar_wrappers.h" | ||
32 | 33 | ||
33 | /* This version can't take the spinlock, because it never returns */ | 34 | /* This version can't take the spinlock, because it never returns */ |
34 | static struct rtas_args rtas_stop_self_args = { | 35 | static struct rtas_args rtas_stop_self_args = { |
@@ -58,6 +59,7 @@ static void pseries_mach_cpu_die(void) | |||
58 | local_irq_disable(); | 59 | local_irq_disable(); |
59 | idle_task_exit(); | 60 | idle_task_exit(); |
60 | xics_teardown_cpu(0); | 61 | xics_teardown_cpu(0); |
62 | unregister_slb_shadow(hard_smp_processor_id(), __pa(get_slb_shadow())); | ||
61 | rtas_stop_self(); | 63 | rtas_stop_self(); |
62 | /* Should never get here... */ | 64 | /* Should never get here... */ |
63 | BUG(); | 65 | BUG(); |
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 9a455d46379d..34317aa148a8 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -272,6 +272,7 @@ void vpa_init(int cpu) | |||
272 | */ | 272 | */ |
273 | addr = __pa(&slb_shadow[cpu]); | 273 | addr = __pa(&slb_shadow[cpu]); |
274 | if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | 274 | if (firmware_has_feature(FW_FEATURE_SPLPAR)) { |
275 | slb_shadow_clear_all(); | ||
275 | ret = register_slb_shadow(hwcpu, addr); | 276 | ret = register_slb_shadow(hwcpu, addr); |
276 | if (ret) | 277 | if (ret) |
277 | printk(KERN_ERR | 278 | printk(KERN_ERR |
diff --git a/include/asm-powerpc/mmu-hash64.h b/include/asm-powerpc/mmu-hash64.h index 82328dec2b52..951e2487aa69 100644 --- a/include/asm-powerpc/mmu-hash64.h +++ b/include/asm-powerpc/mmu-hash64.h | |||
@@ -286,6 +286,7 @@ extern void hpte_init_iSeries(void); | |||
286 | extern void hpte_init_beat(void); | 286 | extern void hpte_init_beat(void); |
287 | extern void hpte_init_beat_v3(void); | 287 | extern void hpte_init_beat_v3(void); |
288 | 288 | ||
289 | extern void slb_shadow_clear_all(void); | ||
289 | extern void stabs_alloc(void); | 290 | extern void stabs_alloc(void); |
290 | extern void slb_initialize(void); | 291 | extern void slb_initialize(void); |
291 | extern void slb_flush_and_rebolt(void); | 292 | extern void slb_flush_and_rebolt(void); |