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

Commit 835c031c authored by Tiejun Chen's avatar Tiejun Chen Committed by Scott Wood
Browse files

powerpc/booke64: Fix args to copy_and_flush



Convert r4/r5, not r6, to a virtual address when calling
copy_and_flush.  Otherwise, r3 is already virtual, and copy_to_flush
tries to access r3+r6, PAGE_OFFSET gets added twice.

This isn't normally seen because on book3e we normally enter with
the kernel at zero and thus skip copy_to_flush -- but it will be
needed for kexec support.

Signed-off-by: default avatarTiejun Chen <tiejun.chen@windriver.com>
[scottwood: split patch and rewrote changelog]
Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
parent 68d10140
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -477,12 +477,12 @@ __after_prom_start:
	tovirt(r3,r3)		/* on booke, we already run at PAGE_OFFSET */
#endif
	mr.	r4,r26			/* In some cases the loader may  */
#if defined(CONFIG_PPC_BOOK3E)
	tovirt(r4,r4)
#endif
	beq	9f			/* have already put us at zero */
	li	r6,0x100		/* Start offset, the first 0x100 */
					/* bytes were copied earlier.	 */
#ifdef CONFIG_PPC_BOOK3E
	tovirt(r6,r6)			/* on booke, we already run at PAGE_OFFSET */
#endif

#ifdef CONFIG_RELOCATABLE
/*
@@ -514,6 +514,9 @@ __after_prom_start:
p_end:	.llong	_end - _stext

4:	/* Now copy the rest of the kernel up to _end */
#if defined(CONFIG_PPC_BOOK3E)
	tovirt(r26,r26)
#endif
	addis	r5,r26,(p_end - _stext)@ha
	ld	r5,(p_end - _stext)@l(r5)	/* get _end */
5:	bl	copy_and_flush		/* copy the rest */