Commit fd4be699 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
  [POWERPC] Fix CPU hotplug when using the SLB shadow buffer
  [POWERPC] efika: add phy-handle property for fec_mpc52xx
parents 417009f6 473980a9
...@@ -2216,6 +2216,45 @@ static void __init fixup_device_tree_efika(void) ...@@ -2216,6 +2216,45 @@ static void __init fixup_device_tree_efika(void)
prom_printf("fixup_device_tree_efika: ", prom_printf("fixup_device_tree_efika: ",
"skipped entry %x - setprop error\n", i); "skipped entry %x - setprop error\n", i);
} }
/* Make sure ethernet mdio bus node exists */
node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio"));
if (!PHANDLE_VALID(node)) {
prom_printf("Adding Ethernet MDIO node\n");
call_prom("interpret", 1, 1,
" s\" /builtin\" find-device"
" new-device"
" 1 encode-int s\" #address-cells\" property"
" 0 encode-int s\" #size-cells\" property"
" s\" mdio\" 2dup device-name device-type"
" s\" mpc5200b-fec-phy\" encode-string"
" s\" compatible\" property"
" 0xf0003000 0x400 reg"
" 0x2 encode-int"
" 0x5 encode-int encode+"
" 0x3 encode-int encode+"
" s\" interrupts\" property"
" finish-device");
};
/* Make sure ethernet phy device node exist */
node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio/ethernet-phy"));
if (!PHANDLE_VALID(node)) {
prom_printf("Adding Ethernet PHY node\n");
call_prom("interpret", 1, 1,
" s\" /builtin/mdio\" find-device"
" new-device"
" s\" ethernet-phy\" device-name"
" 0x10 encode-int s\" reg\" property"
" my-self"
" ihandle>phandle"
" finish-device"
" s\" /builtin/ethernet\" find-device"
" encode-int"
" s\" phy-handle\" property"
" device-end");
}
} }
#else #else
#define fixup_device_tree_efika() #define fixup_device_tree_efika()
......
...@@ -82,6 +82,14 @@ static inline void slb_shadow_clear(unsigned long entry) ...@@ -82,6 +82,14 @@ static inline void slb_shadow_clear(unsigned long entry)
get_slb_shadow()->save_area[entry].esid = 0; get_slb_shadow()->save_area[entry].esid = 0;
} }
void slb_shadow_clear_all(void)
{
int i;
for (i = 0; i < SLB_NUM_BOLTED; i++)
slb_shadow_clear(i);
}
static inline void create_shadowed_slbe(unsigned long ea, int ssize, static inline void create_shadowed_slbe(unsigned long ea, int ssize,
unsigned long flags, unsigned long flags,
unsigned long entry) unsigned long entry)
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <asm/vdso_datapage.h> #include <asm/vdso_datapage.h>
#include <asm/pSeries_reconfig.h> #include <asm/pSeries_reconfig.h>
#include "xics.h" #include "xics.h"
#include "plpar_wrappers.h"
/* This version can't take the spinlock, because it never returns */ /* This version can't take the spinlock, because it never returns */
static struct rtas_args rtas_stop_self_args = { static struct rtas_args rtas_stop_self_args = {
...@@ -58,6 +59,7 @@ static void pseries_mach_cpu_die(void) ...@@ -58,6 +59,7 @@ static void pseries_mach_cpu_die(void)
local_irq_disable(); local_irq_disable();
idle_task_exit(); idle_task_exit();
xics_teardown_cpu(0); xics_teardown_cpu(0);
unregister_slb_shadow(hard_smp_processor_id(), __pa(get_slb_shadow()));
rtas_stop_self(); rtas_stop_self();
/* Should never get here... */ /* Should never get here... */
BUG(); BUG();
......
...@@ -272,6 +272,7 @@ void vpa_init(int cpu) ...@@ -272,6 +272,7 @@ void vpa_init(int cpu)
*/ */
addr = __pa(&slb_shadow[cpu]); addr = __pa(&slb_shadow[cpu]);
if (firmware_has_feature(FW_FEATURE_SPLPAR)) { if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
slb_shadow_clear_all();
ret = register_slb_shadow(hwcpu, addr); ret = register_slb_shadow(hwcpu, addr);
if (ret) if (ret)
printk(KERN_ERR printk(KERN_ERR
......
...@@ -286,6 +286,7 @@ extern void hpte_init_iSeries(void); ...@@ -286,6 +286,7 @@ extern void hpte_init_iSeries(void);
extern void hpte_init_beat(void); extern void hpte_init_beat(void);
extern void hpte_init_beat_v3(void); extern void hpte_init_beat_v3(void);
extern void slb_shadow_clear_all(void);
extern void stabs_alloc(void); extern void stabs_alloc(void);
extern void slb_initialize(void); extern void slb_initialize(void);
extern void slb_flush_and_rebolt(void); extern void slb_flush_and_rebolt(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment