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

Commit e4e063d0 authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt
Browse files

sh: rework kexec segment code



Rework the kexec code to avoid using P2SEG. Instead
we walk the page list in machine_kexec() and convert
the addresses from physical to virtual using C.

Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 7be5c55a
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -76,6 +76,21 @@ void machine_kexec(struct kimage *image)
	unsigned long page_list;
	unsigned long reboot_code_buffer;
	relocate_new_kernel_t rnk;
	unsigned long entry;
	unsigned long *ptr;

	/*
	 * Nicked from the mips version of machine_kexec():
	 * The generic kexec code builds a page list with physical
	 * addresses. Use phys_to_virt() to convert them to virtual.
	 */
	for (ptr = &image->head; (entry = *ptr) && !(entry & IND_DONE);
	     ptr = (entry & IND_INDIRECTION) ?
	       phys_to_virt(entry & PAGE_MASK) : ptr + 1) {
		if (*ptr & IND_SOURCE || *ptr & IND_INDIRECTION ||
		    *ptr & IND_DESTINATION)
			*ptr = (unsigned long) phys_to_virt(*ptr);
	}

	/* Interrupts aren't acceptable while we reboot */
	local_irq_disable();
@@ -101,7 +116,7 @@ void machine_kexec(struct kimage *image)
#endif
	/* now call it */
	rnk = (relocate_new_kernel_t) reboot_code_buffer;
	(*rnk)(page_list, reboot_code_buffer, P2SEGADDR(image->start));
	(*rnk)(page_list, reboot_code_buffer, image->start);
}

void arch_crash_save_vmcoreinfo(void)
+1 −5
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ relocate_new_kernel:
	/* r6 = start_address      */

	mov.l	10f,r8	  /* PAGE_SIZE */
	mov.l	11f,r9    /* P2SEG */

	/*  stack setting */
	add	r8,r5
@@ -29,9 +28,8 @@ relocate_new_kernel:
0:
	mov.l	@r4+,r0	  /* cmd = *ind++ */

1:	/* addr = (cmd | P2SEG) & 0xfffffff0 */
1:	/* addr = cmd & 0xfffffff0 */
	mov	r0,r2
	or	r9,r2
	mov	#-16,r1
	and	r1,r2

@@ -85,8 +83,6 @@ relocate_new_kernel:
	.align 2
10:
	.long	PAGE_SIZE
11:
	.long	P2SEG

relocate_new_kernel_end: