Commit 034e55e6 authored by Cédric Le Goater's avatar Cédric Le Goater Committed by Benjamin Herrenschmidt
Browse files

powerpc/boot: Rework of_claim() to make it 64bit friendly



This patch fixes 64bit compile warnings and updates the wrapper code
to converge the kernel code in prom_init.

Signed-off-by: default avatarCédric Le Goater <clg@fr.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 9cc36bb0
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -41,7 +41,7 @@ static void *of_try_claim(unsigned long size)
		printf("    trying: 0x%08lx\n\r", claim_base);
		printf("    trying: 0x%08lx\n\r", claim_base);
#endif
#endif
		addr = (unsigned long) of_claim(claim_base, size, 0);
		addr = (unsigned long) of_claim(claim_base, size, 0);
		if ((void *)addr != (void *)-1)
		if (addr != PROM_ERROR)
			break;
			break;
	}
	}
	if (addr == 0)
	if (addr == 0)
+2 −1
Original line number Original line Diff line number Diff line
@@ -6,7 +6,8 @@ typedef void *ihandle;


void of_init(void *promptr);
void of_init(void *promptr);
int of_call_prom(const char *service, int nargs, int nret, ...);
int of_call_prom(const char *service, int nargs, int nret, ...);
void *of_claim(unsigned long virt, unsigned long size, unsigned long align);
unsigned int of_claim(unsigned long virt, unsigned long size,
	unsigned long align);
void *of_vmlinux_alloc(unsigned long size);
void *of_vmlinux_alloc(unsigned long size);
void of_exit(void);
void of_exit(void);
void *of_finddevice(const char *name);
void *of_finddevice(const char *name);
+8 −7
Original line number Original line Diff line number Diff line
@@ -147,7 +147,8 @@ static int check_of_version(void)
	return 1;
	return 1;
}
}


void *of_claim(unsigned long virt, unsigned long size, unsigned long align)
unsigned int of_claim(unsigned long virt, unsigned long size,
		      unsigned long align)
{
{
	int ret;
	int ret;
	prom_arg_t result;
	prom_arg_t result;
@@ -155,32 +156,32 @@ void *of_claim(unsigned long virt, unsigned long size, unsigned long align)
	if (need_map < 0)
	if (need_map < 0)
		need_map = check_of_version();
		need_map = check_of_version();
	if (align || !need_map)
	if (align || !need_map)
		return (void *) of_call_prom("claim", 3, 1, virt, size, align);
		return of_call_prom("claim", 3, 1, virt, size, align);


	ret = of_call_prom_ret("call-method", 5, 2, &result, "claim", memory,
	ret = of_call_prom_ret("call-method", 5, 2, &result, "claim", memory,
			       align, size, virt);
			       align, size, virt);
	if (ret != 0 || result == -1)
	if (ret != 0 || result == -1)
		return (void *) -1;
		return  -1;
	ret = of_call_prom_ret("call-method", 5, 2, &result, "claim", chosen_mmu,
	ret = of_call_prom_ret("call-method", 5, 2, &result, "claim", chosen_mmu,
			       align, size, virt);
			       align, size, virt);
	/* 0x12 == coherent + read/write */
	/* 0x12 == coherent + read/write */
	ret = of_call_prom("call-method", 6, 1, "map", chosen_mmu,
	ret = of_call_prom("call-method", 6, 1, "map", chosen_mmu,
			   0x12, size, virt, virt);
			   0x12, size, virt, virt);
	return (void *) virt;
	return virt;
}
}


void *of_vmlinux_alloc(unsigned long size)
void *of_vmlinux_alloc(unsigned long size)
{
{
	unsigned long start = (unsigned long)_start, end = (unsigned long)_end;
	unsigned long start = (unsigned long)_start, end = (unsigned long)_end;
	void *addr;
	unsigned long addr;
	void *p;
	void *p;


	/* With some older POWER4 firmware we need to claim the area the kernel
	/* With some older POWER4 firmware we need to claim the area the kernel
	 * will reside in.  Newer firmwares don't need this so we just ignore
	 * will reside in.  Newer firmwares don't need this so we just ignore
	 * the return value.
	 * the return value.
	 */
	 */
	addr = of_claim(start, end - start, 0);
	addr = (unsigned long) of_claim(start, end - start, 0);
	printf("Trying to claim from 0x%lx to 0x%lx (0x%lx) got %p\r\n",
	printf("Trying to claim from 0x%lx to 0x%lx (0x%lx) got %lx\r\n",
	       start, end, end - start, addr);
	       start, end, end - start, addr);


	p = malloc(size);
	p = malloc(size);