Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd4be699 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* '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
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -2216,6 +2216,45 @@ static void __init fixup_device_tree_efika(void)
			prom_printf("fixup_device_tree_efika: ",
				"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
#define fixup_device_tree_efika()
+8 −0
Original line number Diff line number Diff line
@@ -82,6 +82,14 @@ static inline void slb_shadow_clear(unsigned long entry)
	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,
					unsigned long flags,
					unsigned long entry)
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include <asm/vdso_datapage.h>
#include <asm/pSeries_reconfig.h>
#include "xics.h"
#include "plpar_wrappers.h"

/* This version can't take the spinlock, because it never returns */
static struct rtas_args rtas_stop_self_args = {
@@ -58,6 +59,7 @@ static void pseries_mach_cpu_die(void)
	local_irq_disable();
	idle_task_exit();
	xics_teardown_cpu(0);
	unregister_slb_shadow(hard_smp_processor_id(), __pa(get_slb_shadow()));
	rtas_stop_self();
	/* Should never get here... */
	BUG();
+1 −0
Original line number Diff line number Diff line
@@ -272,6 +272,7 @@ void vpa_init(int cpu)
	 */
	addr = __pa(&slb_shadow[cpu]);
	if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
		slb_shadow_clear_all();
		ret = register_slb_shadow(hwcpu, addr);
		if (ret)
			printk(KERN_ERR
+1 −0
Original line number Diff line number Diff line
@@ -286,6 +286,7 @@ extern void hpte_init_iSeries(void);
extern void hpte_init_beat(void);
extern void hpte_init_beat_v3(void);

extern void slb_shadow_clear_all(void);
extern void stabs_alloc(void);
extern void slb_initialize(void);
extern void slb_flush_and_rebolt(void);