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

Commit a44a553f authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  powerpc/pseries: Correct rtas_data_buf locking in dlpar code
  powerpc/85xx: Add P1021 PCI IDs and quirks
  arch/powerpc/sysdev/qe_lib/qe.c: Add of_node_put to avoid memory leak
  arch/powerpc/platforms/83xx/mpc837x_mds.c: Add missing iounmap
  fsl_rio: fix compile errors
  powerpc/85xx: Fix compile issue with p1022_ds due to lmb rename to memblock
  powerpc/85xx: Fix compilation of mpc85xx_mds.c
  powerpc: Don't use kernel stack with translation off
  powerpc/perf_event: Reduce latency of calling perf_event_do_pending
  powerpc/kexec: Adds correct calling convention for kexec purgatory
parents ce7db282 93f68f1e
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -575,13 +575,19 @@ __secondary_start:
	/* Initialize the kernel stack.  Just a repeat for iSeries.	 */
	LOAD_REG_ADDR(r3, current_set)
	sldi	r28,r24,3		/* get current_set[cpu#]	 */
	ldx	r1,r3,r28
	addi	r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD
	std	r1,PACAKSAVE(r13)
	ldx	r14,r3,r28
	addi	r14,r14,THREAD_SIZE-STACK_FRAME_OVERHEAD
	std	r14,PACAKSAVE(r13)

	/* Do early setup for that CPU (stab, slb, hash table pointer) */
	bl	.early_setup_secondary

	/*
	 * setup the new stack pointer, but *don't* use this until
	 * translation is on.
	 */
	mr	r1, r14

	/* Clear backchain so we get nice backtraces */
	li	r7,0
	mtlr	r7
+3 −0
Original line number Diff line number Diff line
@@ -810,6 +810,9 @@ relocate_new_kernel:
	isync
	sync

	mfspr	r3, SPRN_PIR /* current core we are running on */
	mr	r4, r5 /* load physical address of chunk called */

	/* jump to the entry point, usually the setup routine */
	mtlr	r5
	blrl
+11 −12
Original line number Diff line number Diff line
@@ -577,20 +577,11 @@ void timer_interrupt(struct pt_regs * regs)
	 * some CPUs will continuue to take decrementer exceptions */
	set_dec(DECREMENTER_MAX);

#ifdef CONFIG_PPC32
#if defined(CONFIG_PPC32) && defined(CONFIG_PMAC)
	if (atomic_read(&ppc_n_lost_interrupts) != 0)
		do_IRQ(regs);
#endif

	now = get_tb_or_rtc();
	if (now < decrementer->next_tb) {
		/* not time for this event yet */
		now = decrementer->next_tb - now;
		if (now <= DECREMENTER_MAX)
			set_dec((int)now);
		trace_timer_interrupt_exit(regs);
		return;
	}
	old_regs = set_irq_regs(regs);
	irq_enter();

@@ -606,8 +597,16 @@ void timer_interrupt(struct pt_regs * regs)
		get_lppaca()->int_dword.fields.decr_int = 0;
#endif

	now = get_tb_or_rtc();
	if (now >= decrementer->next_tb) {
		decrementer->next_tb = ~(u64)0;
		if (evt->event_handler)
			evt->event_handler(evt);
	} else {
		now = decrementer->next_tb - now;
		if (now <= DECREMENTER_MAX)
			set_dec((int)now);
	}

#ifdef CONFIG_PPC_ISERIES
	if (firmware_has_feature(FW_FEATURE_ISERIES) && hvlpevent_is_pending())
+6 −3
Original line number Diff line number Diff line
@@ -48,8 +48,10 @@ static int mpc837xmds_usb_cfg(void)
		return -1;

	np = of_find_node_by_name(NULL, "usb");
	if (!np)
		return -ENODEV;
	if (!np) {
		ret = -ENODEV;
		goto out;
	}
	phy_type = of_get_property(np, "phy_type", NULL);
	if (phy_type && !strcmp(phy_type, "ulpi")) {
		clrbits8(bcsr_regs + 12, BCSR12_USB_SER_PIN);
@@ -65,8 +67,9 @@ static int mpc837xmds_usb_cfg(void)
	}

	of_node_put(np);
out:
	iounmap(bcsr_regs);
	return 0;
	return ret;
}

/* ************************************************************************
+1 −0
Original line number Diff line number Diff line
@@ -357,6 +357,7 @@ static void __init mpc85xx_mds_setup_arch(void)
{
#ifdef CONFIG_PCI
	struct pci_controller *hose;
	struct device_node *np;
#endif
	dma_addr_t max = 0xffffffff;

Loading