xref: /openbmc/linux/arch/powerpc/kernel/prom_init.c (revision 3e26a691)
1 /*
2  * Procedures for interfacing to Open Firmware.
3  *
4  * Paul Mackerras	August 1996.
5  * Copyright (C) 1996-2005 Paul Mackerras.
6  *
7  *  Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner.
8  *    {engebret|bergner}@us.ibm.com
9  *
10  *      This program is free software; you can redistribute it and/or
11  *      modify it under the terms of the GNU General Public License
12  *      as published by the Free Software Foundation; either version
13  *      2 of the License, or (at your option) any later version.
14  */
15 
16 #undef DEBUG_PROM
17 
18 #include <stdarg.h>
19 #include <linux/kernel.h>
20 #include <linux/string.h>
21 #include <linux/init.h>
22 #include <linux/threads.h>
23 #include <linux/spinlock.h>
24 #include <linux/types.h>
25 #include <linux/pci.h>
26 #include <linux/proc_fs.h>
27 #include <linux/stringify.h>
28 #include <linux/delay.h>
29 #include <linux/initrd.h>
30 #include <linux/bitops.h>
31 #include <asm/prom.h>
32 #include <asm/rtas.h>
33 #include <asm/page.h>
34 #include <asm/processor.h>
35 #include <asm/irq.h>
36 #include <asm/io.h>
37 #include <asm/smp.h>
38 #include <asm/mmu.h>
39 #include <asm/pgtable.h>
40 #include <asm/iommu.h>
41 #include <asm/btext.h>
42 #include <asm/sections.h>
43 #include <asm/machdep.h>
44 #include <asm/opal.h>
45 
46 #include <linux/linux_logo.h>
47 
48 /*
49  * Eventually bump that one up
50  */
51 #define DEVTREE_CHUNK_SIZE	0x100000
52 
53 /*
54  * This is the size of the local memory reserve map that gets copied
55  * into the boot params passed to the kernel. That size is totally
56  * flexible as the kernel just reads the list until it encounters an
57  * entry with size 0, so it can be changed without breaking binary
58  * compatibility
59  */
60 #define MEM_RESERVE_MAP_SIZE	8
61 
62 /*
63  * prom_init() is called very early on, before the kernel text
64  * and data have been mapped to KERNELBASE.  At this point the code
65  * is running at whatever address it has been loaded at.
66  * On ppc32 we compile with -mrelocatable, which means that references
67  * to extern and static variables get relocated automatically.
68  * ppc64 objects are always relocatable, we just need to relocate the
69  * TOC.
70  *
71  * Because OF may have mapped I/O devices into the area starting at
72  * KERNELBASE, particularly on CHRP machines, we can't safely call
73  * OF once the kernel has been mapped to KERNELBASE.  Therefore all
74  * OF calls must be done within prom_init().
75  *
76  * ADDR is used in calls to call_prom.  The 4th and following
77  * arguments to call_prom should be 32-bit values.
78  * On ppc64, 64 bit values are truncated to 32 bits (and
79  * fortunately don't get interpreted as two arguments).
80  */
81 #define ADDR(x)		(u32)(unsigned long)(x)
82 
83 #ifdef CONFIG_PPC64
84 #define OF_WORKAROUNDS	0
85 #else
86 #define OF_WORKAROUNDS	of_workarounds
87 int of_workarounds;
88 #endif
89 
90 #define OF_WA_CLAIM	1	/* do phys/virt claim separately, then map */
91 #define OF_WA_LONGTRAIL	2	/* work around longtrail bugs */
92 
93 #define PROM_BUG() do {						\
94         prom_printf("kernel BUG at %s line 0x%x!\n",		\
95 		    __FILE__, __LINE__);			\
96         __asm__ __volatile__(".long " BUG_ILLEGAL_INSTR);	\
97 } while (0)
98 
99 #ifdef DEBUG_PROM
100 #define prom_debug(x...)	prom_printf(x)
101 #else
102 #define prom_debug(x...)
103 #endif
104 
105 
106 typedef u32 prom_arg_t;
107 
108 struct prom_args {
109         __be32 service;
110         __be32 nargs;
111         __be32 nret;
112         __be32 args[10];
113 };
114 
115 struct prom_t {
116 	ihandle root;
117 	phandle chosen;
118 	int cpu;
119 	ihandle stdout;
120 	ihandle mmumap;
121 	ihandle memory;
122 };
123 
124 struct mem_map_entry {
125 	__be64	base;
126 	__be64	size;
127 };
128 
129 typedef __be32 cell_t;
130 
131 extern void __start(unsigned long r3, unsigned long r4, unsigned long r5,
132 		    unsigned long r6, unsigned long r7, unsigned long r8,
133 		    unsigned long r9);
134 
135 #ifdef CONFIG_PPC64
136 extern int enter_prom(struct prom_args *args, unsigned long entry);
137 #else
138 static inline int enter_prom(struct prom_args *args, unsigned long entry)
139 {
140 	return ((int (*)(struct prom_args *))entry)(args);
141 }
142 #endif
143 
144 extern void copy_and_flush(unsigned long dest, unsigned long src,
145 			   unsigned long size, unsigned long offset);
146 
147 /* prom structure */
148 static struct prom_t __initdata prom;
149 
150 static unsigned long prom_entry __initdata;
151 
152 #define PROM_SCRATCH_SIZE 256
153 
154 static char __initdata of_stdout_device[256];
155 static char __initdata prom_scratch[PROM_SCRATCH_SIZE];
156 
157 static unsigned long __initdata dt_header_start;
158 static unsigned long __initdata dt_struct_start, dt_struct_end;
159 static unsigned long __initdata dt_string_start, dt_string_end;
160 
161 static unsigned long __initdata prom_initrd_start, prom_initrd_end;
162 
163 #ifdef CONFIG_PPC64
164 static int __initdata prom_iommu_force_on;
165 static int __initdata prom_iommu_off;
166 static unsigned long __initdata prom_tce_alloc_start;
167 static unsigned long __initdata prom_tce_alloc_end;
168 #endif
169 
170 /* Platforms codes are now obsolete in the kernel. Now only used within this
171  * file and ultimately gone too. Feel free to change them if you need, they
172  * are not shared with anything outside of this file anymore
173  */
174 #define PLATFORM_PSERIES	0x0100
175 #define PLATFORM_PSERIES_LPAR	0x0101
176 #define PLATFORM_LPAR		0x0001
177 #define PLATFORM_POWERMAC	0x0400
178 #define PLATFORM_GENERIC	0x0500
179 #define PLATFORM_OPAL		0x0600
180 
181 static int __initdata of_platform;
182 
183 static char __initdata prom_cmd_line[COMMAND_LINE_SIZE];
184 
185 static unsigned long __initdata prom_memory_limit;
186 
187 static unsigned long __initdata alloc_top;
188 static unsigned long __initdata alloc_top_high;
189 static unsigned long __initdata alloc_bottom;
190 static unsigned long __initdata rmo_top;
191 static unsigned long __initdata ram_top;
192 
193 static struct mem_map_entry __initdata mem_reserve_map[MEM_RESERVE_MAP_SIZE];
194 static int __initdata mem_reserve_cnt;
195 
196 static cell_t __initdata regbuf[1024];
197 
198 static bool rtas_has_query_cpu_stopped;
199 
200 
201 /*
202  * Error results ... some OF calls will return "-1" on error, some
203  * will return 0, some will return either. To simplify, here are
204  * macros to use with any ihandle or phandle return value to check if
205  * it is valid
206  */
207 
208 #define PROM_ERROR		(-1u)
209 #define PHANDLE_VALID(p)	((p) != 0 && (p) != PROM_ERROR)
210 #define IHANDLE_VALID(i)	((i) != 0 && (i) != PROM_ERROR)
211 
212 
213 /* This is the one and *ONLY* place where we actually call open
214  * firmware.
215  */
216 
217 static int __init call_prom(const char *service, int nargs, int nret, ...)
218 {
219 	int i;
220 	struct prom_args args;
221 	va_list list;
222 
223 	args.service = cpu_to_be32(ADDR(service));
224 	args.nargs = cpu_to_be32(nargs);
225 	args.nret = cpu_to_be32(nret);
226 
227 	va_start(list, nret);
228 	for (i = 0; i < nargs; i++)
229 		args.args[i] = cpu_to_be32(va_arg(list, prom_arg_t));
230 	va_end(list);
231 
232 	for (i = 0; i < nret; i++)
233 		args.args[nargs+i] = 0;
234 
235 	if (enter_prom(&args, prom_entry) < 0)
236 		return PROM_ERROR;
237 
238 	return (nret > 0) ? be32_to_cpu(args.args[nargs]) : 0;
239 }
240 
241 static int __init call_prom_ret(const char *service, int nargs, int nret,
242 				prom_arg_t *rets, ...)
243 {
244 	int i;
245 	struct prom_args args;
246 	va_list list;
247 
248 	args.service = cpu_to_be32(ADDR(service));
249 	args.nargs = cpu_to_be32(nargs);
250 	args.nret = cpu_to_be32(nret);
251 
252 	va_start(list, rets);
253 	for (i = 0; i < nargs; i++)
254 		args.args[i] = cpu_to_be32(va_arg(list, prom_arg_t));
255 	va_end(list);
256 
257 	for (i = 0; i < nret; i++)
258 		args.args[nargs+i] = 0;
259 
260 	if (enter_prom(&args, prom_entry) < 0)
261 		return PROM_ERROR;
262 
263 	if (rets != NULL)
264 		for (i = 1; i < nret; ++i)
265 			rets[i-1] = be32_to_cpu(args.args[nargs+i]);
266 
267 	return (nret > 0) ? be32_to_cpu(args.args[nargs]) : 0;
268 }
269 
270 
271 static void __init prom_print(const char *msg)
272 {
273 	const char *p, *q;
274 
275 	if (prom.stdout == 0)
276 		return;
277 
278 	for (p = msg; *p != 0; p = q) {
279 		for (q = p; *q != 0 && *q != '\n'; ++q)
280 			;
281 		if (q > p)
282 			call_prom("write", 3, 1, prom.stdout, p, q - p);
283 		if (*q == 0)
284 			break;
285 		++q;
286 		call_prom("write", 3, 1, prom.stdout, ADDR("\r\n"), 2);
287 	}
288 }
289 
290 
291 static void __init prom_print_hex(unsigned long val)
292 {
293 	int i, nibbles = sizeof(val)*2;
294 	char buf[sizeof(val)*2+1];
295 
296 	for (i = nibbles-1;  i >= 0;  i--) {
297 		buf[i] = (val & 0xf) + '0';
298 		if (buf[i] > '9')
299 			buf[i] += ('a'-'0'-10);
300 		val >>= 4;
301 	}
302 	buf[nibbles] = '\0';
303 	call_prom("write", 3, 1, prom.stdout, buf, nibbles);
304 }
305 
306 /* max number of decimal digits in an unsigned long */
307 #define UL_DIGITS 21
308 static void __init prom_print_dec(unsigned long val)
309 {
310 	int i, size;
311 	char buf[UL_DIGITS+1];
312 
313 	for (i = UL_DIGITS-1; i >= 0;  i--) {
314 		buf[i] = (val % 10) + '0';
315 		val = val/10;
316 		if (val == 0)
317 			break;
318 	}
319 	/* shift stuff down */
320 	size = UL_DIGITS - i;
321 	call_prom("write", 3, 1, prom.stdout, buf+i, size);
322 }
323 
324 static void __init prom_printf(const char *format, ...)
325 {
326 	const char *p, *q, *s;
327 	va_list args;
328 	unsigned long v;
329 	long vs;
330 
331 	va_start(args, format);
332 	for (p = format; *p != 0; p = q) {
333 		for (q = p; *q != 0 && *q != '\n' && *q != '%'; ++q)
334 			;
335 		if (q > p)
336 			call_prom("write", 3, 1, prom.stdout, p, q - p);
337 		if (*q == 0)
338 			break;
339 		if (*q == '\n') {
340 			++q;
341 			call_prom("write", 3, 1, prom.stdout,
342 				  ADDR("\r\n"), 2);
343 			continue;
344 		}
345 		++q;
346 		if (*q == 0)
347 			break;
348 		switch (*q) {
349 		case 's':
350 			++q;
351 			s = va_arg(args, const char *);
352 			prom_print(s);
353 			break;
354 		case 'x':
355 			++q;
356 			v = va_arg(args, unsigned long);
357 			prom_print_hex(v);
358 			break;
359 		case 'd':
360 			++q;
361 			vs = va_arg(args, int);
362 			if (vs < 0) {
363 				prom_print("-");
364 				vs = -vs;
365 			}
366 			prom_print_dec(vs);
367 			break;
368 		case 'l':
369 			++q;
370 			if (*q == 0)
371 				break;
372 			else if (*q == 'x') {
373 				++q;
374 				v = va_arg(args, unsigned long);
375 				prom_print_hex(v);
376 			} else if (*q == 'u') { /* '%lu' */
377 				++q;
378 				v = va_arg(args, unsigned long);
379 				prom_print_dec(v);
380 			} else if (*q == 'd') { /* %ld */
381 				++q;
382 				vs = va_arg(args, long);
383 				if (vs < 0) {
384 					prom_print("-");
385 					vs = -vs;
386 				}
387 				prom_print_dec(vs);
388 			}
389 			break;
390 		}
391 	}
392 	va_end(args);
393 }
394 
395 
396 static unsigned int __init prom_claim(unsigned long virt, unsigned long size,
397 				unsigned long align)
398 {
399 
400 	if (align == 0 && (OF_WORKAROUNDS & OF_WA_CLAIM)) {
401 		/*
402 		 * Old OF requires we claim physical and virtual separately
403 		 * and then map explicitly (assuming virtual mode)
404 		 */
405 		int ret;
406 		prom_arg_t result;
407 
408 		ret = call_prom_ret("call-method", 5, 2, &result,
409 				    ADDR("claim"), prom.memory,
410 				    align, size, virt);
411 		if (ret != 0 || result == -1)
412 			return -1;
413 		ret = call_prom_ret("call-method", 5, 2, &result,
414 				    ADDR("claim"), prom.mmumap,
415 				    align, size, virt);
416 		if (ret != 0) {
417 			call_prom("call-method", 4, 1, ADDR("release"),
418 				  prom.memory, size, virt);
419 			return -1;
420 		}
421 		/* the 0x12 is M (coherence) + PP == read/write */
422 		call_prom("call-method", 6, 1,
423 			  ADDR("map"), prom.mmumap, 0x12, size, virt, virt);
424 		return virt;
425 	}
426 	return call_prom("claim", 3, 1, (prom_arg_t)virt, (prom_arg_t)size,
427 			 (prom_arg_t)align);
428 }
429 
430 static void __init __attribute__((noreturn)) prom_panic(const char *reason)
431 {
432 	prom_print(reason);
433 	/* Do not call exit because it clears the screen on pmac
434 	 * it also causes some sort of double-fault on early pmacs */
435 	if (of_platform == PLATFORM_POWERMAC)
436 		asm("trap\n");
437 
438 	/* ToDo: should put up an SRC here on pSeries */
439 	call_prom("exit", 0, 0);
440 
441 	for (;;)			/* should never get here */
442 		;
443 }
444 
445 
446 static int __init prom_next_node(phandle *nodep)
447 {
448 	phandle node;
449 
450 	if ((node = *nodep) != 0
451 	    && (*nodep = call_prom("child", 1, 1, node)) != 0)
452 		return 1;
453 	if ((*nodep = call_prom("peer", 1, 1, node)) != 0)
454 		return 1;
455 	for (;;) {
456 		if ((node = call_prom("parent", 1, 1, node)) == 0)
457 			return 0;
458 		if ((*nodep = call_prom("peer", 1, 1, node)) != 0)
459 			return 1;
460 	}
461 }
462 
463 static int inline prom_getprop(phandle node, const char *pname,
464 			       void *value, size_t valuelen)
465 {
466 	return call_prom("getprop", 4, 1, node, ADDR(pname),
467 			 (u32)(unsigned long) value, (u32) valuelen);
468 }
469 
470 static int inline prom_getproplen(phandle node, const char *pname)
471 {
472 	return call_prom("getproplen", 2, 1, node, ADDR(pname));
473 }
474 
475 static void add_string(char **str, const char *q)
476 {
477 	char *p = *str;
478 
479 	while (*q)
480 		*p++ = *q++;
481 	*p++ = ' ';
482 	*str = p;
483 }
484 
485 static char *tohex(unsigned int x)
486 {
487 	static char digits[] = "0123456789abcdef";
488 	static char result[9];
489 	int i;
490 
491 	result[8] = 0;
492 	i = 8;
493 	do {
494 		--i;
495 		result[i] = digits[x & 0xf];
496 		x >>= 4;
497 	} while (x != 0 && i > 0);
498 	return &result[i];
499 }
500 
501 static int __init prom_setprop(phandle node, const char *nodename,
502 			       const char *pname, void *value, size_t valuelen)
503 {
504 	char cmd[256], *p;
505 
506 	if (!(OF_WORKAROUNDS & OF_WA_LONGTRAIL))
507 		return call_prom("setprop", 4, 1, node, ADDR(pname),
508 				 (u32)(unsigned long) value, (u32) valuelen);
509 
510 	/* gah... setprop doesn't work on longtrail, have to use interpret */
511 	p = cmd;
512 	add_string(&p, "dev");
513 	add_string(&p, nodename);
514 	add_string(&p, tohex((u32)(unsigned long) value));
515 	add_string(&p, tohex(valuelen));
516 	add_string(&p, tohex(ADDR(pname)));
517 	add_string(&p, tohex(strlen(pname)));
518 	add_string(&p, "property");
519 	*p = 0;
520 	return call_prom("interpret", 1, 1, (u32)(unsigned long) cmd);
521 }
522 
523 /* We can't use the standard versions because of relocation headaches. */
524 #define isxdigit(c)	(('0' <= (c) && (c) <= '9') \
525 			 || ('a' <= (c) && (c) <= 'f') \
526 			 || ('A' <= (c) && (c) <= 'F'))
527 
528 #define isdigit(c)	('0' <= (c) && (c) <= '9')
529 #define islower(c)	('a' <= (c) && (c) <= 'z')
530 #define toupper(c)	(islower(c) ? ((c) - 'a' + 'A') : (c))
531 
532 static unsigned long prom_strtoul(const char *cp, const char **endp)
533 {
534 	unsigned long result = 0, base = 10, value;
535 
536 	if (*cp == '0') {
537 		base = 8;
538 		cp++;
539 		if (toupper(*cp) == 'X') {
540 			cp++;
541 			base = 16;
542 		}
543 	}
544 
545 	while (isxdigit(*cp) &&
546 	       (value = isdigit(*cp) ? *cp - '0' : toupper(*cp) - 'A' + 10) < base) {
547 		result = result * base + value;
548 		cp++;
549 	}
550 
551 	if (endp)
552 		*endp = cp;
553 
554 	return result;
555 }
556 
557 static unsigned long prom_memparse(const char *ptr, const char **retptr)
558 {
559 	unsigned long ret = prom_strtoul(ptr, retptr);
560 	int shift = 0;
561 
562 	/*
563 	 * We can't use a switch here because GCC *may* generate a
564 	 * jump table which won't work, because we're not running at
565 	 * the address we're linked at.
566 	 */
567 	if ('G' == **retptr || 'g' == **retptr)
568 		shift = 30;
569 
570 	if ('M' == **retptr || 'm' == **retptr)
571 		shift = 20;
572 
573 	if ('K' == **retptr || 'k' == **retptr)
574 		shift = 10;
575 
576 	if (shift) {
577 		ret <<= shift;
578 		(*retptr)++;
579 	}
580 
581 	return ret;
582 }
583 
584 /*
585  * Early parsing of the command line passed to the kernel, used for
586  * "mem=x" and the options that affect the iommu
587  */
588 static void __init early_cmdline_parse(void)
589 {
590 	const char *opt;
591 
592 	char *p;
593 	int l = 0;
594 
595 	prom_cmd_line[0] = 0;
596 	p = prom_cmd_line;
597 	if ((long)prom.chosen > 0)
598 		l = prom_getprop(prom.chosen, "bootargs", p, COMMAND_LINE_SIZE-1);
599 #ifdef CONFIG_CMDLINE
600 	if (l <= 0 || p[0] == '\0') /* dbl check */
601 		strlcpy(prom_cmd_line,
602 			CONFIG_CMDLINE, sizeof(prom_cmd_line));
603 #endif /* CONFIG_CMDLINE */
604 	prom_printf("command line: %s\n", prom_cmd_line);
605 
606 #ifdef CONFIG_PPC64
607 	opt = strstr(prom_cmd_line, "iommu=");
608 	if (opt) {
609 		prom_printf("iommu opt is: %s\n", opt);
610 		opt += 6;
611 		while (*opt && *opt == ' ')
612 			opt++;
613 		if (!strncmp(opt, "off", 3))
614 			prom_iommu_off = 1;
615 		else if (!strncmp(opt, "force", 5))
616 			prom_iommu_force_on = 1;
617 	}
618 #endif
619 	opt = strstr(prom_cmd_line, "mem=");
620 	if (opt) {
621 		opt += 4;
622 		prom_memory_limit = prom_memparse(opt, (const char **)&opt);
623 #ifdef CONFIG_PPC64
624 		/* Align to 16 MB == size of ppc64 large page */
625 		prom_memory_limit = ALIGN(prom_memory_limit, 0x1000000);
626 #endif
627 	}
628 }
629 
630 #if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
631 /*
632  * The architecture vector has an array of PVR mask/value pairs,
633  * followed by # option vectors - 1, followed by the option vectors.
634  *
635  * See prom.h for the definition of the bits specified in the
636  * architecture vector.
637  *
638  * Because the description vector contains a mix of byte and word
639  * values, we declare it as an unsigned char array, and use this
640  * macro to put word values in.
641  */
642 #define W(x)	((x) >> 24) & 0xff, ((x) >> 16) & 0xff, \
643 		((x) >> 8) & 0xff, (x) & 0xff
644 
645 /* Firmware expects the value to be n - 1, where n is the # of vectors */
646 #define NUM_VECTORS(n)		((n) - 1)
647 
648 /*
649  * Firmware expects 1 + n - 2, where n is the length of the option vector in
650  * bytes. The 1 accounts for the length byte itself, the - 2 .. ?
651  */
652 #define VECTOR_LENGTH(n)	(1 + (n) - 2)
653 
654 unsigned char ibm_architecture_vec[] = {
655 	W(0xfffe0000), W(0x003a0000),	/* POWER5/POWER5+ */
656 	W(0xffff0000), W(0x003e0000),	/* POWER6 */
657 	W(0xffff0000), W(0x003f0000),	/* POWER7 */
658 	W(0xffff0000), W(0x004b0000),	/* POWER8E */
659 	W(0xffff0000), W(0x004d0000),	/* POWER8 */
660 	W(0xffffffff), W(0x0f000004),	/* all 2.07-compliant */
661 	W(0xffffffff), W(0x0f000003),	/* all 2.06-compliant */
662 	W(0xffffffff), W(0x0f000002),	/* all 2.05-compliant */
663 	W(0xfffffffe), W(0x0f000001),	/* all 2.04-compliant and earlier */
664 	NUM_VECTORS(6),			/* 6 option vectors */
665 
666 	/* option vector 1: processor architectures supported */
667 	VECTOR_LENGTH(2),		/* length */
668 	0,				/* don't ignore, don't halt */
669 	OV1_PPC_2_00 | OV1_PPC_2_01 | OV1_PPC_2_02 | OV1_PPC_2_03 |
670 	OV1_PPC_2_04 | OV1_PPC_2_05 | OV1_PPC_2_06 | OV1_PPC_2_07,
671 
672 	/* option vector 2: Open Firmware options supported */
673 	VECTOR_LENGTH(33),		/* length */
674 	OV2_REAL_MODE,
675 	0, 0,
676 	W(0xffffffff),			/* real_base */
677 	W(0xffffffff),			/* real_size */
678 	W(0xffffffff),			/* virt_base */
679 	W(0xffffffff),			/* virt_size */
680 	W(0xffffffff),			/* load_base */
681 	W(256),				/* 256MB min RMA */
682 	W(0xffffffff),			/* full client load */
683 	0,				/* min RMA percentage of total RAM */
684 	48,				/* max log_2(hash table size) */
685 
686 	/* option vector 3: processor options supported */
687 	VECTOR_LENGTH(2),		/* length */
688 	0,				/* don't ignore, don't halt */
689 	OV3_FP | OV3_VMX | OV3_DFP,
690 
691 	/* option vector 4: IBM PAPR implementation */
692 	VECTOR_LENGTH(2),		/* length */
693 	0,				/* don't halt */
694 	OV4_MIN_ENT_CAP,		/* minimum VP entitled capacity */
695 
696 	/* option vector 5: PAPR/OF options */
697 	VECTOR_LENGTH(18),		/* length */
698 	0,				/* don't ignore, don't halt */
699 	OV5_FEAT(OV5_LPAR) | OV5_FEAT(OV5_SPLPAR) | OV5_FEAT(OV5_LARGE_PAGES) |
700 	OV5_FEAT(OV5_DRCONF_MEMORY) | OV5_FEAT(OV5_DONATE_DEDICATE_CPU) |
701 #ifdef CONFIG_PCI_MSI
702 	/* PCIe/MSI support.  Without MSI full PCIe is not supported */
703 	OV5_FEAT(OV5_MSI),
704 #else
705 	0,
706 #endif
707 	0,
708 #ifdef CONFIG_PPC_SMLPAR
709 	OV5_FEAT(OV5_CMO) | OV5_FEAT(OV5_XCMO),
710 #else
711 	0,
712 #endif
713 	OV5_FEAT(OV5_TYPE1_AFFINITY) | OV5_FEAT(OV5_PRRN),
714 	0,
715 	0,
716 	0,
717 	/* WARNING: The offset of the "number of cores" field below
718 	 * must match by the macro below. Update the definition if
719 	 * the structure layout changes.
720 	 */
721 #define IBM_ARCH_VEC_NRCORES_OFFSET	125
722 	W(NR_CPUS),			/* number of cores supported */
723 	0,
724 	0,
725 	0,
726 	0,
727 	OV5_FEAT(OV5_PFO_HW_RNG) | OV5_FEAT(OV5_PFO_HW_ENCR) |
728 	OV5_FEAT(OV5_PFO_HW_842),
729 	OV5_FEAT(OV5_SUB_PROCESSORS),
730 
731 	/* option vector 6: IBM PAPR hints */
732 	VECTOR_LENGTH(3),		/* length */
733 	0,
734 	0,
735 	OV6_LINUX,
736 };
737 
738 /* Old method - ELF header with PT_NOTE sections only works on BE */
739 #ifdef __BIG_ENDIAN__
740 static struct fake_elf {
741 	Elf32_Ehdr	elfhdr;
742 	Elf32_Phdr	phdr[2];
743 	struct chrpnote {
744 		u32	namesz;
745 		u32	descsz;
746 		u32	type;
747 		char	name[8];	/* "PowerPC" */
748 		struct chrpdesc {
749 			u32	real_mode;
750 			u32	real_base;
751 			u32	real_size;
752 			u32	virt_base;
753 			u32	virt_size;
754 			u32	load_base;
755 		} chrpdesc;
756 	} chrpnote;
757 	struct rpanote {
758 		u32	namesz;
759 		u32	descsz;
760 		u32	type;
761 		char	name[24];	/* "IBM,RPA-Client-Config" */
762 		struct rpadesc {
763 			u32	lpar_affinity;
764 			u32	min_rmo_size;
765 			u32	min_rmo_percent;
766 			u32	max_pft_size;
767 			u32	splpar;
768 			u32	min_load;
769 			u32	new_mem_def;
770 			u32	ignore_me;
771 		} rpadesc;
772 	} rpanote;
773 } fake_elf = {
774 	.elfhdr = {
775 		.e_ident = { 0x7f, 'E', 'L', 'F',
776 			     ELFCLASS32, ELFDATA2MSB, EV_CURRENT },
777 		.e_type = ET_EXEC,	/* yeah right */
778 		.e_machine = EM_PPC,
779 		.e_version = EV_CURRENT,
780 		.e_phoff = offsetof(struct fake_elf, phdr),
781 		.e_phentsize = sizeof(Elf32_Phdr),
782 		.e_phnum = 2
783 	},
784 	.phdr = {
785 		[0] = {
786 			.p_type = PT_NOTE,
787 			.p_offset = offsetof(struct fake_elf, chrpnote),
788 			.p_filesz = sizeof(struct chrpnote)
789 		}, [1] = {
790 			.p_type = PT_NOTE,
791 			.p_offset = offsetof(struct fake_elf, rpanote),
792 			.p_filesz = sizeof(struct rpanote)
793 		}
794 	},
795 	.chrpnote = {
796 		.namesz = sizeof("PowerPC"),
797 		.descsz = sizeof(struct chrpdesc),
798 		.type = 0x1275,
799 		.name = "PowerPC",
800 		.chrpdesc = {
801 			.real_mode = ~0U,	/* ~0 means "don't care" */
802 			.real_base = ~0U,
803 			.real_size = ~0U,
804 			.virt_base = ~0U,
805 			.virt_size = ~0U,
806 			.load_base = ~0U
807 		},
808 	},
809 	.rpanote = {
810 		.namesz = sizeof("IBM,RPA-Client-Config"),
811 		.descsz = sizeof(struct rpadesc),
812 		.type = 0x12759999,
813 		.name = "IBM,RPA-Client-Config",
814 		.rpadesc = {
815 			.lpar_affinity = 0,
816 			.min_rmo_size = 64,	/* in megabytes */
817 			.min_rmo_percent = 0,
818 			.max_pft_size = 48,	/* 2^48 bytes max PFT size */
819 			.splpar = 1,
820 			.min_load = ~0U,
821 			.new_mem_def = 0
822 		}
823 	}
824 };
825 #endif /* __BIG_ENDIAN__ */
826 
827 static int __init prom_count_smt_threads(void)
828 {
829 	phandle node;
830 	char type[64];
831 	unsigned int plen;
832 
833 	/* Pick up th first CPU node we can find */
834 	for (node = 0; prom_next_node(&node); ) {
835 		type[0] = 0;
836 		prom_getprop(node, "device_type", type, sizeof(type));
837 
838 		if (strcmp(type, "cpu"))
839 			continue;
840 		/*
841 		 * There is an entry for each smt thread, each entry being
842 		 * 4 bytes long.  All cpus should have the same number of
843 		 * smt threads, so return after finding the first.
844 		 */
845 		plen = prom_getproplen(node, "ibm,ppc-interrupt-server#s");
846 		if (plen == PROM_ERROR)
847 			break;
848 		plen >>= 2;
849 		prom_debug("Found %lu smt threads per core\n", (unsigned long)plen);
850 
851 		/* Sanity check */
852 		if (plen < 1 || plen > 64) {
853 			prom_printf("Threads per core %lu out of bounds, assuming 1\n",
854 				    (unsigned long)plen);
855 			return 1;
856 		}
857 		return plen;
858 	}
859 	prom_debug("No threads found, assuming 1 per core\n");
860 
861 	return 1;
862 
863 }
864 
865 
866 static void __init prom_send_capabilities(void)
867 {
868 	ihandle root;
869 	prom_arg_t ret;
870 	u32 cores;
871 	unsigned char *ptcores;
872 
873 	root = call_prom("open", 1, 1, ADDR("/"));
874 	if (root != 0) {
875 		/* We need to tell the FW about the number of cores we support.
876 		 *
877 		 * To do that, we count the number of threads on the first core
878 		 * (we assume this is the same for all cores) and use it to
879 		 * divide NR_CPUS.
880 		 */
881 
882 		/* The core value may start at an odd address. If such a word
883 		 * access is made at a cache line boundary, this leads to an
884 		 * exception which may not be handled at this time.
885 		 * Forcing a per byte access to avoid exception.
886 		 */
887 		ptcores = &ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET];
888 		cores = 0;
889 		cores |= ptcores[0] << 24;
890 		cores |= ptcores[1] << 16;
891 		cores |= ptcores[2] << 8;
892 		cores |= ptcores[3];
893 		if (cores != NR_CPUS) {
894 			prom_printf("WARNING ! "
895 				    "ibm_architecture_vec structure inconsistent: %lu!\n",
896 				    cores);
897 		} else {
898 			cores = DIV_ROUND_UP(NR_CPUS, prom_count_smt_threads());
899 			prom_printf("Max number of cores passed to firmware: %lu (NR_CPUS = %lu)\n",
900 				    cores, NR_CPUS);
901 			ptcores[0] = (cores >> 24) & 0xff;
902 			ptcores[1] = (cores >> 16) & 0xff;
903 			ptcores[2] = (cores >> 8) & 0xff;
904 			ptcores[3] = cores & 0xff;
905 		}
906 
907 		/* try calling the ibm,client-architecture-support method */
908 		prom_printf("Calling ibm,client-architecture-support...");
909 		if (call_prom_ret("call-method", 3, 2, &ret,
910 				  ADDR("ibm,client-architecture-support"),
911 				  root,
912 				  ADDR(ibm_architecture_vec)) == 0) {
913 			/* the call exists... */
914 			if (ret)
915 				prom_printf("\nWARNING: ibm,client-architecture"
916 					    "-support call FAILED!\n");
917 			call_prom("close", 1, 0, root);
918 			prom_printf(" done\n");
919 			return;
920 		}
921 		call_prom("close", 1, 0, root);
922 		prom_printf(" not implemented\n");
923 	}
924 
925 #ifdef __BIG_ENDIAN__
926 	{
927 		ihandle elfloader;
928 
929 		/* no ibm,client-architecture-support call, try the old way */
930 		elfloader = call_prom("open", 1, 1,
931 				      ADDR("/packages/elf-loader"));
932 		if (elfloader == 0) {
933 			prom_printf("couldn't open /packages/elf-loader\n");
934 			return;
935 		}
936 		call_prom("call-method", 3, 1, ADDR("process-elf-header"),
937 			  elfloader, ADDR(&fake_elf));
938 		call_prom("close", 1, 0, elfloader);
939 	}
940 #endif /* __BIG_ENDIAN__ */
941 }
942 #endif /* #if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) */
943 
944 /*
945  * Memory allocation strategy... our layout is normally:
946  *
947  *  at 14Mb or more we have vmlinux, then a gap and initrd.  In some
948  *  rare cases, initrd might end up being before the kernel though.
949  *  We assume this won't override the final kernel at 0, we have no
950  *  provision to handle that in this version, but it should hopefully
951  *  never happen.
952  *
953  *  alloc_top is set to the top of RMO, eventually shrink down if the
954  *  TCEs overlap
955  *
956  *  alloc_bottom is set to the top of kernel/initrd
957  *
958  *  from there, allocations are done this way : rtas is allocated
959  *  topmost, and the device-tree is allocated from the bottom. We try
960  *  to grow the device-tree allocation as we progress. If we can't,
961  *  then we fail, we don't currently have a facility to restart
962  *  elsewhere, but that shouldn't be necessary.
963  *
964  *  Note that calls to reserve_mem have to be done explicitly, memory
965  *  allocated with either alloc_up or alloc_down isn't automatically
966  *  reserved.
967  */
968 
969 
970 /*
971  * Allocates memory in the RMO upward from the kernel/initrd
972  *
973  * When align is 0, this is a special case, it means to allocate in place
974  * at the current location of alloc_bottom or fail (that is basically
975  * extending the previous allocation). Used for the device-tree flattening
976  */
977 static unsigned long __init alloc_up(unsigned long size, unsigned long align)
978 {
979 	unsigned long base = alloc_bottom;
980 	unsigned long addr = 0;
981 
982 	if (align)
983 		base = _ALIGN_UP(base, align);
984 	prom_debug("alloc_up(%x, %x)\n", size, align);
985 	if (ram_top == 0)
986 		prom_panic("alloc_up() called with mem not initialized\n");
987 
988 	if (align)
989 		base = _ALIGN_UP(alloc_bottom, align);
990 	else
991 		base = alloc_bottom;
992 
993 	for(; (base + size) <= alloc_top;
994 	    base = _ALIGN_UP(base + 0x100000, align)) {
995 		prom_debug("    trying: 0x%x\n\r", base);
996 		addr = (unsigned long)prom_claim(base, size, 0);
997 		if (addr != PROM_ERROR && addr != 0)
998 			break;
999 		addr = 0;
1000 		if (align == 0)
1001 			break;
1002 	}
1003 	if (addr == 0)
1004 		return 0;
1005 	alloc_bottom = addr + size;
1006 
1007 	prom_debug(" -> %x\n", addr);
1008 	prom_debug("  alloc_bottom : %x\n", alloc_bottom);
1009 	prom_debug("  alloc_top    : %x\n", alloc_top);
1010 	prom_debug("  alloc_top_hi : %x\n", alloc_top_high);
1011 	prom_debug("  rmo_top      : %x\n", rmo_top);
1012 	prom_debug("  ram_top      : %x\n", ram_top);
1013 
1014 	return addr;
1015 }
1016 
1017 /*
1018  * Allocates memory downward, either from top of RMO, or if highmem
1019  * is set, from the top of RAM.  Note that this one doesn't handle
1020  * failures.  It does claim memory if highmem is not set.
1021  */
1022 static unsigned long __init alloc_down(unsigned long size, unsigned long align,
1023 				       int highmem)
1024 {
1025 	unsigned long base, addr = 0;
1026 
1027 	prom_debug("alloc_down(%x, %x, %s)\n", size, align,
1028 		   highmem ? "(high)" : "(low)");
1029 	if (ram_top == 0)
1030 		prom_panic("alloc_down() called with mem not initialized\n");
1031 
1032 	if (highmem) {
1033 		/* Carve out storage for the TCE table. */
1034 		addr = _ALIGN_DOWN(alloc_top_high - size, align);
1035 		if (addr <= alloc_bottom)
1036 			return 0;
1037 		/* Will we bump into the RMO ? If yes, check out that we
1038 		 * didn't overlap existing allocations there, if we did,
1039 		 * we are dead, we must be the first in town !
1040 		 */
1041 		if (addr < rmo_top) {
1042 			/* Good, we are first */
1043 			if (alloc_top == rmo_top)
1044 				alloc_top = rmo_top = addr;
1045 			else
1046 				return 0;
1047 		}
1048 		alloc_top_high = addr;
1049 		goto bail;
1050 	}
1051 
1052 	base = _ALIGN_DOWN(alloc_top - size, align);
1053 	for (; base > alloc_bottom;
1054 	     base = _ALIGN_DOWN(base - 0x100000, align))  {
1055 		prom_debug("    trying: 0x%x\n\r", base);
1056 		addr = (unsigned long)prom_claim(base, size, 0);
1057 		if (addr != PROM_ERROR && addr != 0)
1058 			break;
1059 		addr = 0;
1060 	}
1061 	if (addr == 0)
1062 		return 0;
1063 	alloc_top = addr;
1064 
1065  bail:
1066 	prom_debug(" -> %x\n", addr);
1067 	prom_debug("  alloc_bottom : %x\n", alloc_bottom);
1068 	prom_debug("  alloc_top    : %x\n", alloc_top);
1069 	prom_debug("  alloc_top_hi : %x\n", alloc_top_high);
1070 	prom_debug("  rmo_top      : %x\n", rmo_top);
1071 	prom_debug("  ram_top      : %x\n", ram_top);
1072 
1073 	return addr;
1074 }
1075 
1076 /*
1077  * Parse a "reg" cell
1078  */
1079 static unsigned long __init prom_next_cell(int s, cell_t **cellp)
1080 {
1081 	cell_t *p = *cellp;
1082 	unsigned long r = 0;
1083 
1084 	/* Ignore more than 2 cells */
1085 	while (s > sizeof(unsigned long) / 4) {
1086 		p++;
1087 		s--;
1088 	}
1089 	r = be32_to_cpu(*p++);
1090 #ifdef CONFIG_PPC64
1091 	if (s > 1) {
1092 		r <<= 32;
1093 		r |= be32_to_cpu(*(p++));
1094 	}
1095 #endif
1096 	*cellp = p;
1097 	return r;
1098 }
1099 
1100 /*
1101  * Very dumb function for adding to the memory reserve list, but
1102  * we don't need anything smarter at this point
1103  *
1104  * XXX Eventually check for collisions.  They should NEVER happen.
1105  * If problems seem to show up, it would be a good start to track
1106  * them down.
1107  */
1108 static void __init reserve_mem(u64 base, u64 size)
1109 {
1110 	u64 top = base + size;
1111 	unsigned long cnt = mem_reserve_cnt;
1112 
1113 	if (size == 0)
1114 		return;
1115 
1116 	/* We need to always keep one empty entry so that we
1117 	 * have our terminator with "size" set to 0 since we are
1118 	 * dumb and just copy this entire array to the boot params
1119 	 */
1120 	base = _ALIGN_DOWN(base, PAGE_SIZE);
1121 	top = _ALIGN_UP(top, PAGE_SIZE);
1122 	size = top - base;
1123 
1124 	if (cnt >= (MEM_RESERVE_MAP_SIZE - 1))
1125 		prom_panic("Memory reserve map exhausted !\n");
1126 	mem_reserve_map[cnt].base = cpu_to_be64(base);
1127 	mem_reserve_map[cnt].size = cpu_to_be64(size);
1128 	mem_reserve_cnt = cnt + 1;
1129 }
1130 
1131 /*
1132  * Initialize memory allocation mechanism, parse "memory" nodes and
1133  * obtain that way the top of memory and RMO to setup out local allocator
1134  */
1135 static void __init prom_init_mem(void)
1136 {
1137 	phandle node;
1138 	char *path, type[64];
1139 	unsigned int plen;
1140 	cell_t *p, *endp;
1141 	__be32 val;
1142 	u32 rac, rsc;
1143 
1144 	/*
1145 	 * We iterate the memory nodes to find
1146 	 * 1) top of RMO (first node)
1147 	 * 2) top of memory
1148 	 */
1149 	val = cpu_to_be32(2);
1150 	prom_getprop(prom.root, "#address-cells", &val, sizeof(val));
1151 	rac = be32_to_cpu(val);
1152 	val = cpu_to_be32(1);
1153 	prom_getprop(prom.root, "#size-cells", &val, sizeof(rsc));
1154 	rsc = be32_to_cpu(val);
1155 	prom_debug("root_addr_cells: %x\n", rac);
1156 	prom_debug("root_size_cells: %x\n", rsc);
1157 
1158 	prom_debug("scanning memory:\n");
1159 	path = prom_scratch;
1160 
1161 	for (node = 0; prom_next_node(&node); ) {
1162 		type[0] = 0;
1163 		prom_getprop(node, "device_type", type, sizeof(type));
1164 
1165 		if (type[0] == 0) {
1166 			/*
1167 			 * CHRP Longtrail machines have no device_type
1168 			 * on the memory node, so check the name instead...
1169 			 */
1170 			prom_getprop(node, "name", type, sizeof(type));
1171 		}
1172 		if (strcmp(type, "memory"))
1173 			continue;
1174 
1175 		plen = prom_getprop(node, "reg", regbuf, sizeof(regbuf));
1176 		if (plen > sizeof(regbuf)) {
1177 			prom_printf("memory node too large for buffer !\n");
1178 			plen = sizeof(regbuf);
1179 		}
1180 		p = regbuf;
1181 		endp = p + (plen / sizeof(cell_t));
1182 
1183 #ifdef DEBUG_PROM
1184 		memset(path, 0, PROM_SCRATCH_SIZE);
1185 		call_prom("package-to-path", 3, 1, node, path, PROM_SCRATCH_SIZE-1);
1186 		prom_debug("  node %s :\n", path);
1187 #endif /* DEBUG_PROM */
1188 
1189 		while ((endp - p) >= (rac + rsc)) {
1190 			unsigned long base, size;
1191 
1192 			base = prom_next_cell(rac, &p);
1193 			size = prom_next_cell(rsc, &p);
1194 
1195 			if (size == 0)
1196 				continue;
1197 			prom_debug("    %x %x\n", base, size);
1198 			if (base == 0 && (of_platform & PLATFORM_LPAR))
1199 				rmo_top = size;
1200 			if ((base + size) > ram_top)
1201 				ram_top = base + size;
1202 		}
1203 	}
1204 
1205 	alloc_bottom = PAGE_ALIGN((unsigned long)&_end + 0x4000);
1206 
1207 	/*
1208 	 * If prom_memory_limit is set we reduce the upper limits *except* for
1209 	 * alloc_top_high. This must be the real top of RAM so we can put
1210 	 * TCE's up there.
1211 	 */
1212 
1213 	alloc_top_high = ram_top;
1214 
1215 	if (prom_memory_limit) {
1216 		if (prom_memory_limit <= alloc_bottom) {
1217 			prom_printf("Ignoring mem=%x <= alloc_bottom.\n",
1218 				prom_memory_limit);
1219 			prom_memory_limit = 0;
1220 		} else if (prom_memory_limit >= ram_top) {
1221 			prom_printf("Ignoring mem=%x >= ram_top.\n",
1222 				prom_memory_limit);
1223 			prom_memory_limit = 0;
1224 		} else {
1225 			ram_top = prom_memory_limit;
1226 			rmo_top = min(rmo_top, prom_memory_limit);
1227 		}
1228 	}
1229 
1230 	/*
1231 	 * Setup our top alloc point, that is top of RMO or top of
1232 	 * segment 0 when running non-LPAR.
1233 	 * Some RS64 machines have buggy firmware where claims up at
1234 	 * 1GB fail.  Cap at 768MB as a workaround.
1235 	 * Since 768MB is plenty of room, and we need to cap to something
1236 	 * reasonable on 32-bit, cap at 768MB on all machines.
1237 	 */
1238 	if (!rmo_top)
1239 		rmo_top = ram_top;
1240 	rmo_top = min(0x30000000ul, rmo_top);
1241 	alloc_top = rmo_top;
1242 	alloc_top_high = ram_top;
1243 
1244 	/*
1245 	 * Check if we have an initrd after the kernel but still inside
1246 	 * the RMO.  If we do move our bottom point to after it.
1247 	 */
1248 	if (prom_initrd_start &&
1249 	    prom_initrd_start < rmo_top &&
1250 	    prom_initrd_end > alloc_bottom)
1251 		alloc_bottom = PAGE_ALIGN(prom_initrd_end);
1252 
1253 	prom_printf("memory layout at init:\n");
1254 	prom_printf("  memory_limit : %x (16 MB aligned)\n", prom_memory_limit);
1255 	prom_printf("  alloc_bottom : %x\n", alloc_bottom);
1256 	prom_printf("  alloc_top    : %x\n", alloc_top);
1257 	prom_printf("  alloc_top_hi : %x\n", alloc_top_high);
1258 	prom_printf("  rmo_top      : %x\n", rmo_top);
1259 	prom_printf("  ram_top      : %x\n", ram_top);
1260 }
1261 
1262 static void __init prom_close_stdin(void)
1263 {
1264 	__be32 val;
1265 	ihandle stdin;
1266 
1267 	if (prom_getprop(prom.chosen, "stdin", &val, sizeof(val)) > 0) {
1268 		stdin = be32_to_cpu(val);
1269 		call_prom("close", 1, 0, stdin);
1270 	}
1271 }
1272 
1273 #ifdef CONFIG_PPC_POWERNV
1274 
1275 #ifdef CONFIG_PPC_EARLY_DEBUG_OPAL
1276 static u64 __initdata prom_opal_base;
1277 static u64 __initdata prom_opal_entry;
1278 #endif
1279 
1280 /*
1281  * Allocate room for and instantiate OPAL
1282  */
1283 static void __init prom_instantiate_opal(void)
1284 {
1285 	phandle opal_node;
1286 	ihandle opal_inst;
1287 	u64 base, entry;
1288 	u64 size = 0, align = 0x10000;
1289 	__be64 val64;
1290 	u32 rets[2];
1291 
1292 	prom_debug("prom_instantiate_opal: start...\n");
1293 
1294 	opal_node = call_prom("finddevice", 1, 1, ADDR("/ibm,opal"));
1295 	prom_debug("opal_node: %x\n", opal_node);
1296 	if (!PHANDLE_VALID(opal_node))
1297 		return;
1298 
1299 	val64 = 0;
1300 	prom_getprop(opal_node, "opal-runtime-size", &val64, sizeof(val64));
1301 	size = be64_to_cpu(val64);
1302 	if (size == 0)
1303 		return;
1304 	val64 = 0;
1305 	prom_getprop(opal_node, "opal-runtime-alignment", &val64,sizeof(val64));
1306 	align = be64_to_cpu(val64);
1307 
1308 	base = alloc_down(size, align, 0);
1309 	if (base == 0) {
1310 		prom_printf("OPAL allocation failed !\n");
1311 		return;
1312 	}
1313 
1314 	opal_inst = call_prom("open", 1, 1, ADDR("/ibm,opal"));
1315 	if (!IHANDLE_VALID(opal_inst)) {
1316 		prom_printf("opening opal package failed (%x)\n", opal_inst);
1317 		return;
1318 	}
1319 
1320 	prom_printf("instantiating opal at 0x%x...", base);
1321 
1322 	if (call_prom_ret("call-method", 4, 3, rets,
1323 			  ADDR("load-opal-runtime"),
1324 			  opal_inst,
1325 			  base >> 32, base & 0xffffffff) != 0
1326 	    || (rets[0] == 0 && rets[1] == 0)) {
1327 		prom_printf(" failed\n");
1328 		return;
1329 	}
1330 	entry = (((u64)rets[0]) << 32) | rets[1];
1331 
1332 	prom_printf(" done\n");
1333 
1334 	reserve_mem(base, size);
1335 
1336 	prom_debug("opal base     = 0x%x\n", base);
1337 	prom_debug("opal align    = 0x%x\n", align);
1338 	prom_debug("opal entry    = 0x%x\n", entry);
1339 	prom_debug("opal size     = 0x%x\n", (long)size);
1340 
1341 	prom_setprop(opal_node, "/ibm,opal", "opal-base-address",
1342 		     &base, sizeof(base));
1343 	prom_setprop(opal_node, "/ibm,opal", "opal-entry-address",
1344 		     &entry, sizeof(entry));
1345 
1346 #ifdef CONFIG_PPC_EARLY_DEBUG_OPAL
1347 	prom_opal_base = base;
1348 	prom_opal_entry = entry;
1349 #endif
1350 	prom_debug("prom_instantiate_opal: end...\n");
1351 }
1352 
1353 #endif /* CONFIG_PPC_POWERNV */
1354 
1355 /*
1356  * Allocate room for and instantiate RTAS
1357  */
1358 static void __init prom_instantiate_rtas(void)
1359 {
1360 	phandle rtas_node;
1361 	ihandle rtas_inst;
1362 	u32 base, entry = 0;
1363 	__be32 val;
1364 	u32 size = 0;
1365 
1366 	prom_debug("prom_instantiate_rtas: start...\n");
1367 
1368 	rtas_node = call_prom("finddevice", 1, 1, ADDR("/rtas"));
1369 	prom_debug("rtas_node: %x\n", rtas_node);
1370 	if (!PHANDLE_VALID(rtas_node))
1371 		return;
1372 
1373 	val = 0;
1374 	prom_getprop(rtas_node, "rtas-size", &val, sizeof(size));
1375 	size = be32_to_cpu(val);
1376 	if (size == 0)
1377 		return;
1378 
1379 	base = alloc_down(size, PAGE_SIZE, 0);
1380 	if (base == 0)
1381 		prom_panic("Could not allocate memory for RTAS\n");
1382 
1383 	rtas_inst = call_prom("open", 1, 1, ADDR("/rtas"));
1384 	if (!IHANDLE_VALID(rtas_inst)) {
1385 		prom_printf("opening rtas package failed (%x)\n", rtas_inst);
1386 		return;
1387 	}
1388 
1389 	prom_printf("instantiating rtas at 0x%x...", base);
1390 
1391 	if (call_prom_ret("call-method", 3, 2, &entry,
1392 			  ADDR("instantiate-rtas"),
1393 			  rtas_inst, base) != 0
1394 	    || entry == 0) {
1395 		prom_printf(" failed\n");
1396 		return;
1397 	}
1398 	prom_printf(" done\n");
1399 
1400 	reserve_mem(base, size);
1401 
1402 	val = cpu_to_be32(base);
1403 	prom_setprop(rtas_node, "/rtas", "linux,rtas-base",
1404 		     &val, sizeof(val));
1405 	val = cpu_to_be32(entry);
1406 	prom_setprop(rtas_node, "/rtas", "linux,rtas-entry",
1407 		     &val, sizeof(val));
1408 
1409 	/* Check if it supports "query-cpu-stopped-state" */
1410 	if (prom_getprop(rtas_node, "query-cpu-stopped-state",
1411 			 &val, sizeof(val)) != PROM_ERROR)
1412 		rtas_has_query_cpu_stopped = true;
1413 
1414 	prom_debug("rtas base     = 0x%x\n", base);
1415 	prom_debug("rtas entry    = 0x%x\n", entry);
1416 	prom_debug("rtas size     = 0x%x\n", (long)size);
1417 
1418 	prom_debug("prom_instantiate_rtas: end...\n");
1419 }
1420 
1421 #ifdef CONFIG_PPC64
1422 /*
1423  * Allocate room for and instantiate Stored Measurement Log (SML)
1424  */
1425 static void __init prom_instantiate_sml(void)
1426 {
1427 	phandle ibmvtpm_node;
1428 	ihandle ibmvtpm_inst;
1429 	u32 entry = 0, size = 0, succ = 0;
1430 	u64 base;
1431 	__be32 val;
1432 
1433 	prom_debug("prom_instantiate_sml: start...\n");
1434 
1435 	ibmvtpm_node = call_prom("finddevice", 1, 1, ADDR("/vdevice/vtpm"));
1436 	prom_debug("ibmvtpm_node: %x\n", ibmvtpm_node);
1437 	if (!PHANDLE_VALID(ibmvtpm_node))
1438 		return;
1439 
1440 	ibmvtpm_inst = call_prom("open", 1, 1, ADDR("/vdevice/vtpm"));
1441 	if (!IHANDLE_VALID(ibmvtpm_inst)) {
1442 		prom_printf("opening vtpm package failed (%x)\n", ibmvtpm_inst);
1443 		return;
1444 	}
1445 
1446 	if (prom_getprop(ibmvtpm_node, "ibm,sml-efi-reformat-supported",
1447 			 &val, sizeof(val)) != PROM_ERROR) {
1448 		if (call_prom_ret("call-method", 2, 2, &succ,
1449 				  ADDR("reformat-sml-to-efi-alignment"),
1450 				  ibmvtpm_inst) != 0 || succ == 0) {
1451 			prom_printf("Reformat SML to EFI alignment failed\n");
1452 			return;
1453 		}
1454 
1455 		if (call_prom_ret("call-method", 2, 2, &size,
1456 				  ADDR("sml-get-allocated-size"),
1457 				  ibmvtpm_inst) != 0 || size == 0) {
1458 			prom_printf("SML get allocated size failed\n");
1459 			return;
1460 		}
1461 	} else {
1462 		if (call_prom_ret("call-method", 2, 2, &size,
1463 				  ADDR("sml-get-handover-size"),
1464 				  ibmvtpm_inst) != 0 || size == 0) {
1465 			prom_printf("SML get handover size failed\n");
1466 			return;
1467 		}
1468 	}
1469 
1470 	base = alloc_down(size, PAGE_SIZE, 0);
1471 	if (base == 0)
1472 		prom_panic("Could not allocate memory for sml\n");
1473 
1474 	prom_printf("instantiating sml at 0x%x...", base);
1475 
1476 	memset((void *)base, 0, size);
1477 
1478 	if (call_prom_ret("call-method", 4, 2, &entry,
1479 			  ADDR("sml-handover"),
1480 			  ibmvtpm_inst, size, base) != 0 || entry == 0) {
1481 		prom_printf("SML handover failed\n");
1482 		return;
1483 	}
1484 	prom_printf(" done\n");
1485 
1486 	reserve_mem(base, size);
1487 
1488 	prom_setprop(ibmvtpm_node, "/vdevice/vtpm", "linux,sml-base",
1489 		     &base, sizeof(base));
1490 	prom_setprop(ibmvtpm_node, "/vdevice/vtpm", "linux,sml-size",
1491 		     &size, sizeof(size));
1492 
1493 	prom_debug("sml base     = 0x%x\n", base);
1494 	prom_debug("sml size     = 0x%x\n", (long)size);
1495 
1496 	prom_debug("prom_instantiate_sml: end...\n");
1497 }
1498 
1499 /*
1500  * Allocate room for and initialize TCE tables
1501  */
1502 #ifdef __BIG_ENDIAN__
1503 static void __init prom_initialize_tce_table(void)
1504 {
1505 	phandle node;
1506 	ihandle phb_node;
1507 	char compatible[64], type[64], model[64];
1508 	char *path = prom_scratch;
1509 	u64 base, align;
1510 	u32 minalign, minsize;
1511 	u64 tce_entry, *tce_entryp;
1512 	u64 local_alloc_top, local_alloc_bottom;
1513 	u64 i;
1514 
1515 	if (prom_iommu_off)
1516 		return;
1517 
1518 	prom_debug("starting prom_initialize_tce_table\n");
1519 
1520 	/* Cache current top of allocs so we reserve a single block */
1521 	local_alloc_top = alloc_top_high;
1522 	local_alloc_bottom = local_alloc_top;
1523 
1524 	/* Search all nodes looking for PHBs. */
1525 	for (node = 0; prom_next_node(&node); ) {
1526 		compatible[0] = 0;
1527 		type[0] = 0;
1528 		model[0] = 0;
1529 		prom_getprop(node, "compatible",
1530 			     compatible, sizeof(compatible));
1531 		prom_getprop(node, "device_type", type, sizeof(type));
1532 		prom_getprop(node, "model", model, sizeof(model));
1533 
1534 		if ((type[0] == 0) || (strstr(type, "pci") == NULL))
1535 			continue;
1536 
1537 		/* Keep the old logic intact to avoid regression. */
1538 		if (compatible[0] != 0) {
1539 			if ((strstr(compatible, "python") == NULL) &&
1540 			    (strstr(compatible, "Speedwagon") == NULL) &&
1541 			    (strstr(compatible, "Winnipeg") == NULL))
1542 				continue;
1543 		} else if (model[0] != 0) {
1544 			if ((strstr(model, "ython") == NULL) &&
1545 			    (strstr(model, "peedwagon") == NULL) &&
1546 			    (strstr(model, "innipeg") == NULL))
1547 				continue;
1548 		}
1549 
1550 		if (prom_getprop(node, "tce-table-minalign", &minalign,
1551 				 sizeof(minalign)) == PROM_ERROR)
1552 			minalign = 0;
1553 		if (prom_getprop(node, "tce-table-minsize", &minsize,
1554 				 sizeof(minsize)) == PROM_ERROR)
1555 			minsize = 4UL << 20;
1556 
1557 		/*
1558 		 * Even though we read what OF wants, we just set the table
1559 		 * size to 4 MB.  This is enough to map 2GB of PCI DMA space.
1560 		 * By doing this, we avoid the pitfalls of trying to DMA to
1561 		 * MMIO space and the DMA alias hole.
1562 		 *
1563 		 * On POWER4, firmware sets the TCE region by assuming
1564 		 * each TCE table is 8MB. Using this memory for anything
1565 		 * else will impact performance, so we always allocate 8MB.
1566 		 * Anton
1567 		 */
1568 		if (pvr_version_is(PVR_POWER4) || pvr_version_is(PVR_POWER4p))
1569 			minsize = 8UL << 20;
1570 		else
1571 			minsize = 4UL << 20;
1572 
1573 		/* Align to the greater of the align or size */
1574 		align = max(minalign, minsize);
1575 		base = alloc_down(minsize, align, 1);
1576 		if (base == 0)
1577 			prom_panic("ERROR, cannot find space for TCE table.\n");
1578 		if (base < local_alloc_bottom)
1579 			local_alloc_bottom = base;
1580 
1581 		/* It seems OF doesn't null-terminate the path :-( */
1582 		memset(path, 0, PROM_SCRATCH_SIZE);
1583 		/* Call OF to setup the TCE hardware */
1584 		if (call_prom("package-to-path", 3, 1, node,
1585 			      path, PROM_SCRATCH_SIZE-1) == PROM_ERROR) {
1586 			prom_printf("package-to-path failed\n");
1587 		}
1588 
1589 		/* Save away the TCE table attributes for later use. */
1590 		prom_setprop(node, path, "linux,tce-base", &base, sizeof(base));
1591 		prom_setprop(node, path, "linux,tce-size", &minsize, sizeof(minsize));
1592 
1593 		prom_debug("TCE table: %s\n", path);
1594 		prom_debug("\tnode = 0x%x\n", node);
1595 		prom_debug("\tbase = 0x%x\n", base);
1596 		prom_debug("\tsize = 0x%x\n", minsize);
1597 
1598 		/* Initialize the table to have a one-to-one mapping
1599 		 * over the allocated size.
1600 		 */
1601 		tce_entryp = (u64 *)base;
1602 		for (i = 0; i < (minsize >> 3) ;tce_entryp++, i++) {
1603 			tce_entry = (i << PAGE_SHIFT);
1604 			tce_entry |= 0x3;
1605 			*tce_entryp = tce_entry;
1606 		}
1607 
1608 		prom_printf("opening PHB %s", path);
1609 		phb_node = call_prom("open", 1, 1, path);
1610 		if (phb_node == 0)
1611 			prom_printf("... failed\n");
1612 		else
1613 			prom_printf("... done\n");
1614 
1615 		call_prom("call-method", 6, 0, ADDR("set-64-bit-addressing"),
1616 			  phb_node, -1, minsize,
1617 			  (u32) base, (u32) (base >> 32));
1618 		call_prom("close", 1, 0, phb_node);
1619 	}
1620 
1621 	reserve_mem(local_alloc_bottom, local_alloc_top - local_alloc_bottom);
1622 
1623 	/* These are only really needed if there is a memory limit in
1624 	 * effect, but we don't know so export them always. */
1625 	prom_tce_alloc_start = local_alloc_bottom;
1626 	prom_tce_alloc_end = local_alloc_top;
1627 
1628 	/* Flag the first invalid entry */
1629 	prom_debug("ending prom_initialize_tce_table\n");
1630 }
1631 #endif /* __BIG_ENDIAN__ */
1632 #endif /* CONFIG_PPC64 */
1633 
1634 /*
1635  * With CHRP SMP we need to use the OF to start the other processors.
1636  * We can't wait until smp_boot_cpus (the OF is trashed by then)
1637  * so we have to put the processors into a holding pattern controlled
1638  * by the kernel (not OF) before we destroy the OF.
1639  *
1640  * This uses a chunk of low memory, puts some holding pattern
1641  * code there and sends the other processors off to there until
1642  * smp_boot_cpus tells them to do something.  The holding pattern
1643  * checks that address until its cpu # is there, when it is that
1644  * cpu jumps to __secondary_start().  smp_boot_cpus() takes care
1645  * of setting those values.
1646  *
1647  * We also use physical address 0x4 here to tell when a cpu
1648  * is in its holding pattern code.
1649  *
1650  * -- Cort
1651  */
1652 /*
1653  * We want to reference the copy of __secondary_hold_* in the
1654  * 0 - 0x100 address range
1655  */
1656 #define LOW_ADDR(x)	(((unsigned long) &(x)) & 0xff)
1657 
1658 static void __init prom_hold_cpus(void)
1659 {
1660 	unsigned long i;
1661 	phandle node;
1662 	char type[64];
1663 	unsigned long *spinloop
1664 		= (void *) LOW_ADDR(__secondary_hold_spinloop);
1665 	unsigned long *acknowledge
1666 		= (void *) LOW_ADDR(__secondary_hold_acknowledge);
1667 	unsigned long secondary_hold = LOW_ADDR(__secondary_hold);
1668 
1669 	/*
1670 	 * On pseries, if RTAS supports "query-cpu-stopped-state",
1671 	 * we skip this stage, the CPUs will be started by the
1672 	 * kernel using RTAS.
1673 	 */
1674 	if ((of_platform == PLATFORM_PSERIES ||
1675 	     of_platform == PLATFORM_PSERIES_LPAR) &&
1676 	    rtas_has_query_cpu_stopped) {
1677 		prom_printf("prom_hold_cpus: skipped\n");
1678 		return;
1679 	}
1680 
1681 	prom_debug("prom_hold_cpus: start...\n");
1682 	prom_debug("    1) spinloop       = 0x%x\n", (unsigned long)spinloop);
1683 	prom_debug("    1) *spinloop      = 0x%x\n", *spinloop);
1684 	prom_debug("    1) acknowledge    = 0x%x\n",
1685 		   (unsigned long)acknowledge);
1686 	prom_debug("    1) *acknowledge   = 0x%x\n", *acknowledge);
1687 	prom_debug("    1) secondary_hold = 0x%x\n", secondary_hold);
1688 
1689 	/* Set the common spinloop variable, so all of the secondary cpus
1690 	 * will block when they are awakened from their OF spinloop.
1691 	 * This must occur for both SMP and non SMP kernels, since OF will
1692 	 * be trashed when we move the kernel.
1693 	 */
1694 	*spinloop = 0;
1695 
1696 	/* look for cpus */
1697 	for (node = 0; prom_next_node(&node); ) {
1698 		unsigned int cpu_no;
1699 		__be32 reg;
1700 
1701 		type[0] = 0;
1702 		prom_getprop(node, "device_type", type, sizeof(type));
1703 		if (strcmp(type, "cpu") != 0)
1704 			continue;
1705 
1706 		/* Skip non-configured cpus. */
1707 		if (prom_getprop(node, "status", type, sizeof(type)) > 0)
1708 			if (strcmp(type, "okay") != 0)
1709 				continue;
1710 
1711 		reg = cpu_to_be32(-1); /* make sparse happy */
1712 		prom_getprop(node, "reg", &reg, sizeof(reg));
1713 		cpu_no = be32_to_cpu(reg);
1714 
1715 		prom_debug("cpu hw idx   = %lu\n", cpu_no);
1716 
1717 		/* Init the acknowledge var which will be reset by
1718 		 * the secondary cpu when it awakens from its OF
1719 		 * spinloop.
1720 		 */
1721 		*acknowledge = (unsigned long)-1;
1722 
1723 		if (cpu_no != prom.cpu) {
1724 			/* Primary Thread of non-boot cpu or any thread */
1725 			prom_printf("starting cpu hw idx %lu... ", cpu_no);
1726 			call_prom("start-cpu", 3, 0, node,
1727 				  secondary_hold, cpu_no);
1728 
1729 			for (i = 0; (i < 100000000) &&
1730 			     (*acknowledge == ((unsigned long)-1)); i++ )
1731 				mb();
1732 
1733 			if (*acknowledge == cpu_no)
1734 				prom_printf("done\n");
1735 			else
1736 				prom_printf("failed: %x\n", *acknowledge);
1737 		}
1738 #ifdef CONFIG_SMP
1739 		else
1740 			prom_printf("boot cpu hw idx %lu\n", cpu_no);
1741 #endif /* CONFIG_SMP */
1742 	}
1743 
1744 	prom_debug("prom_hold_cpus: end...\n");
1745 }
1746 
1747 
1748 static void __init prom_init_client_services(unsigned long pp)
1749 {
1750 	/* Get a handle to the prom entry point before anything else */
1751 	prom_entry = pp;
1752 
1753 	/* get a handle for the stdout device */
1754 	prom.chosen = call_prom("finddevice", 1, 1, ADDR("/chosen"));
1755 	if (!PHANDLE_VALID(prom.chosen))
1756 		prom_panic("cannot find chosen"); /* msg won't be printed :( */
1757 
1758 	/* get device tree root */
1759 	prom.root = call_prom("finddevice", 1, 1, ADDR("/"));
1760 	if (!PHANDLE_VALID(prom.root))
1761 		prom_panic("cannot find device tree root"); /* msg won't be printed :( */
1762 
1763 	prom.mmumap = 0;
1764 }
1765 
1766 #ifdef CONFIG_PPC32
1767 /*
1768  * For really old powermacs, we need to map things we claim.
1769  * For that, we need the ihandle of the mmu.
1770  * Also, on the longtrail, we need to work around other bugs.
1771  */
1772 static void __init prom_find_mmu(void)
1773 {
1774 	phandle oprom;
1775 	char version[64];
1776 
1777 	oprom = call_prom("finddevice", 1, 1, ADDR("/openprom"));
1778 	if (!PHANDLE_VALID(oprom))
1779 		return;
1780 	if (prom_getprop(oprom, "model", version, sizeof(version)) <= 0)
1781 		return;
1782 	version[sizeof(version) - 1] = 0;
1783 	/* XXX might need to add other versions here */
1784 	if (strcmp(version, "Open Firmware, 1.0.5") == 0)
1785 		of_workarounds = OF_WA_CLAIM;
1786 	else if (strncmp(version, "FirmWorks,3.", 12) == 0) {
1787 		of_workarounds = OF_WA_CLAIM | OF_WA_LONGTRAIL;
1788 		call_prom("interpret", 1, 1, "dev /memory 0 to allow-reclaim");
1789 	} else
1790 		return;
1791 	prom.memory = call_prom("open", 1, 1, ADDR("/memory"));
1792 	prom_getprop(prom.chosen, "mmu", &prom.mmumap,
1793 		     sizeof(prom.mmumap));
1794 	prom.mmumap = be32_to_cpu(prom.mmumap);
1795 	if (!IHANDLE_VALID(prom.memory) || !IHANDLE_VALID(prom.mmumap))
1796 		of_workarounds &= ~OF_WA_CLAIM;		/* hmmm */
1797 }
1798 #else
1799 #define prom_find_mmu()
1800 #endif
1801 
1802 static void __init prom_init_stdout(void)
1803 {
1804 	char *path = of_stdout_device;
1805 	char type[16];
1806 	phandle stdout_node;
1807 	__be32 val;
1808 
1809 	if (prom_getprop(prom.chosen, "stdout", &val, sizeof(val)) <= 0)
1810 		prom_panic("cannot find stdout");
1811 
1812 	prom.stdout = be32_to_cpu(val);
1813 
1814 	/* Get the full OF pathname of the stdout device */
1815 	memset(path, 0, 256);
1816 	call_prom("instance-to-path", 3, 1, prom.stdout, path, 255);
1817 	prom_printf("OF stdout device is: %s\n", of_stdout_device);
1818 	prom_setprop(prom.chosen, "/chosen", "linux,stdout-path",
1819 		     path, strlen(path) + 1);
1820 
1821 	/* instance-to-package fails on PA-Semi */
1822 	stdout_node = call_prom("instance-to-package", 1, 1, prom.stdout);
1823 	if (stdout_node != PROM_ERROR) {
1824 		val = cpu_to_be32(stdout_node);
1825 		prom_setprop(prom.chosen, "/chosen", "linux,stdout-package",
1826 			     &val, sizeof(val));
1827 
1828 		/* If it's a display, note it */
1829 		memset(type, 0, sizeof(type));
1830 		prom_getprop(stdout_node, "device_type", type, sizeof(type));
1831 		if (strcmp(type, "display") == 0)
1832 			prom_setprop(stdout_node, path, "linux,boot-display", NULL, 0);
1833 	}
1834 }
1835 
1836 static int __init prom_find_machine_type(void)
1837 {
1838 	char compat[256];
1839 	int len, i = 0;
1840 #ifdef CONFIG_PPC64
1841 	phandle rtas;
1842 	int x;
1843 #endif
1844 
1845 	/* Look for a PowerMac or a Cell */
1846 	len = prom_getprop(prom.root, "compatible",
1847 			   compat, sizeof(compat)-1);
1848 	if (len > 0) {
1849 		compat[len] = 0;
1850 		while (i < len) {
1851 			char *p = &compat[i];
1852 			int sl = strlen(p);
1853 			if (sl == 0)
1854 				break;
1855 			if (strstr(p, "Power Macintosh") ||
1856 			    strstr(p, "MacRISC"))
1857 				return PLATFORM_POWERMAC;
1858 #ifdef CONFIG_PPC64
1859 			/* We must make sure we don't detect the IBM Cell
1860 			 * blades as pSeries due to some firmware issues,
1861 			 * so we do it here.
1862 			 */
1863 			if (strstr(p, "IBM,CBEA") ||
1864 			    strstr(p, "IBM,CPBW-1.0"))
1865 				return PLATFORM_GENERIC;
1866 #endif /* CONFIG_PPC64 */
1867 			i += sl + 1;
1868 		}
1869 	}
1870 #ifdef CONFIG_PPC64
1871 	/* Try to detect OPAL */
1872 	if (PHANDLE_VALID(call_prom("finddevice", 1, 1, ADDR("/ibm,opal"))))
1873 		return PLATFORM_OPAL;
1874 
1875 	/* Try to figure out if it's an IBM pSeries or any other
1876 	 * PAPR compliant platform. We assume it is if :
1877 	 *  - /device_type is "chrp" (please, do NOT use that for future
1878 	 *    non-IBM designs !
1879 	 *  - it has /rtas
1880 	 */
1881 	len = prom_getprop(prom.root, "device_type",
1882 			   compat, sizeof(compat)-1);
1883 	if (len <= 0)
1884 		return PLATFORM_GENERIC;
1885 	if (strcmp(compat, "chrp"))
1886 		return PLATFORM_GENERIC;
1887 
1888 	/* Default to pSeries. We need to know if we are running LPAR */
1889 	rtas = call_prom("finddevice", 1, 1, ADDR("/rtas"));
1890 	if (!PHANDLE_VALID(rtas))
1891 		return PLATFORM_GENERIC;
1892 	x = prom_getproplen(rtas, "ibm,hypertas-functions");
1893 	if (x != PROM_ERROR) {
1894 		prom_debug("Hypertas detected, assuming LPAR !\n");
1895 		return PLATFORM_PSERIES_LPAR;
1896 	}
1897 	return PLATFORM_PSERIES;
1898 #else
1899 	return PLATFORM_GENERIC;
1900 #endif
1901 }
1902 
1903 static int __init prom_set_color(ihandle ih, int i, int r, int g, int b)
1904 {
1905 	return call_prom("call-method", 6, 1, ADDR("color!"), ih, i, b, g, r);
1906 }
1907 
1908 /*
1909  * If we have a display that we don't know how to drive,
1910  * we will want to try to execute OF's open method for it
1911  * later.  However, OF will probably fall over if we do that
1912  * we've taken over the MMU.
1913  * So we check whether we will need to open the display,
1914  * and if so, open it now.
1915  */
1916 static void __init prom_check_displays(void)
1917 {
1918 	char type[16], *path;
1919 	phandle node;
1920 	ihandle ih;
1921 	int i;
1922 
1923 	static unsigned char default_colors[] = {
1924 		0x00, 0x00, 0x00,
1925 		0x00, 0x00, 0xaa,
1926 		0x00, 0xaa, 0x00,
1927 		0x00, 0xaa, 0xaa,
1928 		0xaa, 0x00, 0x00,
1929 		0xaa, 0x00, 0xaa,
1930 		0xaa, 0xaa, 0x00,
1931 		0xaa, 0xaa, 0xaa,
1932 		0x55, 0x55, 0x55,
1933 		0x55, 0x55, 0xff,
1934 		0x55, 0xff, 0x55,
1935 		0x55, 0xff, 0xff,
1936 		0xff, 0x55, 0x55,
1937 		0xff, 0x55, 0xff,
1938 		0xff, 0xff, 0x55,
1939 		0xff, 0xff, 0xff
1940 	};
1941 	const unsigned char *clut;
1942 
1943 	prom_debug("Looking for displays\n");
1944 	for (node = 0; prom_next_node(&node); ) {
1945 		memset(type, 0, sizeof(type));
1946 		prom_getprop(node, "device_type", type, sizeof(type));
1947 		if (strcmp(type, "display") != 0)
1948 			continue;
1949 
1950 		/* It seems OF doesn't null-terminate the path :-( */
1951 		path = prom_scratch;
1952 		memset(path, 0, PROM_SCRATCH_SIZE);
1953 
1954 		/*
1955 		 * leave some room at the end of the path for appending extra
1956 		 * arguments
1957 		 */
1958 		if (call_prom("package-to-path", 3, 1, node, path,
1959 			      PROM_SCRATCH_SIZE-10) == PROM_ERROR)
1960 			continue;
1961 		prom_printf("found display   : %s, opening... ", path);
1962 
1963 		ih = call_prom("open", 1, 1, path);
1964 		if (ih == 0) {
1965 			prom_printf("failed\n");
1966 			continue;
1967 		}
1968 
1969 		/* Success */
1970 		prom_printf("done\n");
1971 		prom_setprop(node, path, "linux,opened", NULL, 0);
1972 
1973 		/* Setup a usable color table when the appropriate
1974 		 * method is available. Should update this to set-colors */
1975 		clut = default_colors;
1976 		for (i = 0; i < 16; i++, clut += 3)
1977 			if (prom_set_color(ih, i, clut[0], clut[1],
1978 					   clut[2]) != 0)
1979 				break;
1980 
1981 #ifdef CONFIG_LOGO_LINUX_CLUT224
1982 		clut = PTRRELOC(logo_linux_clut224.clut);
1983 		for (i = 0; i < logo_linux_clut224.clutsize; i++, clut += 3)
1984 			if (prom_set_color(ih, i + 32, clut[0], clut[1],
1985 					   clut[2]) != 0)
1986 				break;
1987 #endif /* CONFIG_LOGO_LINUX_CLUT224 */
1988 
1989 #ifdef CONFIG_PPC_EARLY_DEBUG_BOOTX
1990 		if (prom_getprop(node, "linux,boot-display", NULL, 0) !=
1991 		    PROM_ERROR) {
1992 			u32 width, height, pitch, addr;
1993 
1994 			prom_printf("Setting btext !\n");
1995 			prom_getprop(node, "width", &width, 4);
1996 			prom_getprop(node, "height", &height, 4);
1997 			prom_getprop(node, "linebytes", &pitch, 4);
1998 			prom_getprop(node, "address", &addr, 4);
1999 			prom_printf("W=%d H=%d LB=%d addr=0x%x\n",
2000 				    width, height, pitch, addr);
2001 			btext_setup_display(width, height, 8, pitch, addr);
2002 		}
2003 #endif /* CONFIG_PPC_EARLY_DEBUG_BOOTX */
2004 	}
2005 }
2006 
2007 
2008 /* Return (relocated) pointer to this much memory: moves initrd if reqd. */
2009 static void __init *make_room(unsigned long *mem_start, unsigned long *mem_end,
2010 			      unsigned long needed, unsigned long align)
2011 {
2012 	void *ret;
2013 
2014 	*mem_start = _ALIGN(*mem_start, align);
2015 	while ((*mem_start + needed) > *mem_end) {
2016 		unsigned long room, chunk;
2017 
2018 		prom_debug("Chunk exhausted, claiming more at %x...\n",
2019 			   alloc_bottom);
2020 		room = alloc_top - alloc_bottom;
2021 		if (room > DEVTREE_CHUNK_SIZE)
2022 			room = DEVTREE_CHUNK_SIZE;
2023 		if (room < PAGE_SIZE)
2024 			prom_panic("No memory for flatten_device_tree "
2025 				   "(no room)\n");
2026 		chunk = alloc_up(room, 0);
2027 		if (chunk == 0)
2028 			prom_panic("No memory for flatten_device_tree "
2029 				   "(claim failed)\n");
2030 		*mem_end = chunk + room;
2031 	}
2032 
2033 	ret = (void *)*mem_start;
2034 	*mem_start += needed;
2035 
2036 	return ret;
2037 }
2038 
2039 #define dt_push_token(token, mem_start, mem_end) do { 			\
2040 		void *room = make_room(mem_start, mem_end, 4, 4);	\
2041 		*(__be32 *)room = cpu_to_be32(token);			\
2042 	} while(0)
2043 
2044 static unsigned long __init dt_find_string(char *str)
2045 {
2046 	char *s, *os;
2047 
2048 	s = os = (char *)dt_string_start;
2049 	s += 4;
2050 	while (s <  (char *)dt_string_end) {
2051 		if (strcmp(s, str) == 0)
2052 			return s - os;
2053 		s += strlen(s) + 1;
2054 	}
2055 	return 0;
2056 }
2057 
2058 /*
2059  * The Open Firmware 1275 specification states properties must be 31 bytes or
2060  * less, however not all firmwares obey this. Make it 64 bytes to be safe.
2061  */
2062 #define MAX_PROPERTY_NAME 64
2063 
2064 static void __init scan_dt_build_strings(phandle node,
2065 					 unsigned long *mem_start,
2066 					 unsigned long *mem_end)
2067 {
2068 	char *prev_name, *namep, *sstart;
2069 	unsigned long soff;
2070 	phandle child;
2071 
2072 	sstart =  (char *)dt_string_start;
2073 
2074 	/* get and store all property names */
2075 	prev_name = "";
2076 	for (;;) {
2077 		/* 64 is max len of name including nul. */
2078 		namep = make_room(mem_start, mem_end, MAX_PROPERTY_NAME, 1);
2079 		if (call_prom("nextprop", 3, 1, node, prev_name, namep) != 1) {
2080 			/* No more nodes: unwind alloc */
2081 			*mem_start = (unsigned long)namep;
2082 			break;
2083 		}
2084 
2085  		/* skip "name" */
2086  		if (strcmp(namep, "name") == 0) {
2087  			*mem_start = (unsigned long)namep;
2088  			prev_name = "name";
2089  			continue;
2090  		}
2091 		/* get/create string entry */
2092 		soff = dt_find_string(namep);
2093 		if (soff != 0) {
2094 			*mem_start = (unsigned long)namep;
2095 			namep = sstart + soff;
2096 		} else {
2097 			/* Trim off some if we can */
2098 			*mem_start = (unsigned long)namep + strlen(namep) + 1;
2099 			dt_string_end = *mem_start;
2100 		}
2101 		prev_name = namep;
2102 	}
2103 
2104 	/* do all our children */
2105 	child = call_prom("child", 1, 1, node);
2106 	while (child != 0) {
2107 		scan_dt_build_strings(child, mem_start, mem_end);
2108 		child = call_prom("peer", 1, 1, child);
2109 	}
2110 }
2111 
2112 static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start,
2113 					unsigned long *mem_end)
2114 {
2115 	phandle child;
2116 	char *namep, *prev_name, *sstart, *p, *ep, *lp, *path;
2117 	unsigned long soff;
2118 	unsigned char *valp;
2119 	static char pname[MAX_PROPERTY_NAME];
2120 	int l, room, has_phandle = 0;
2121 
2122 	dt_push_token(OF_DT_BEGIN_NODE, mem_start, mem_end);
2123 
2124 	/* get the node's full name */
2125 	namep = (char *)*mem_start;
2126 	room = *mem_end - *mem_start;
2127 	if (room > 255)
2128 		room = 255;
2129 	l = call_prom("package-to-path", 3, 1, node, namep, room);
2130 	if (l >= 0) {
2131 		/* Didn't fit?  Get more room. */
2132 		if (l >= room) {
2133 			if (l >= *mem_end - *mem_start)
2134 				namep = make_room(mem_start, mem_end, l+1, 1);
2135 			call_prom("package-to-path", 3, 1, node, namep, l);
2136 		}
2137 		namep[l] = '\0';
2138 
2139 		/* Fixup an Apple bug where they have bogus \0 chars in the
2140 		 * middle of the path in some properties, and extract
2141 		 * the unit name (everything after the last '/').
2142 		 */
2143 		for (lp = p = namep, ep = namep + l; p < ep; p++) {
2144 			if (*p == '/')
2145 				lp = namep;
2146 			else if (*p != 0)
2147 				*lp++ = *p;
2148 		}
2149 		*lp = 0;
2150 		*mem_start = _ALIGN((unsigned long)lp + 1, 4);
2151 	}
2152 
2153 	/* get it again for debugging */
2154 	path = prom_scratch;
2155 	memset(path, 0, PROM_SCRATCH_SIZE);
2156 	call_prom("package-to-path", 3, 1, node, path, PROM_SCRATCH_SIZE-1);
2157 
2158 	/* get and store all properties */
2159 	prev_name = "";
2160 	sstart = (char *)dt_string_start;
2161 	for (;;) {
2162 		if (call_prom("nextprop", 3, 1, node, prev_name,
2163 			      pname) != 1)
2164 			break;
2165 
2166  		/* skip "name" */
2167  		if (strcmp(pname, "name") == 0) {
2168  			prev_name = "name";
2169  			continue;
2170  		}
2171 
2172 		/* find string offset */
2173 		soff = dt_find_string(pname);
2174 		if (soff == 0) {
2175 			prom_printf("WARNING: Can't find string index for"
2176 				    " <%s>, node %s\n", pname, path);
2177 			break;
2178 		}
2179 		prev_name = sstart + soff;
2180 
2181 		/* get length */
2182 		l = call_prom("getproplen", 2, 1, node, pname);
2183 
2184 		/* sanity checks */
2185 		if (l == PROM_ERROR)
2186 			continue;
2187 
2188 		/* push property head */
2189 		dt_push_token(OF_DT_PROP, mem_start, mem_end);
2190 		dt_push_token(l, mem_start, mem_end);
2191 		dt_push_token(soff, mem_start, mem_end);
2192 
2193 		/* push property content */
2194 		valp = make_room(mem_start, mem_end, l, 4);
2195 		call_prom("getprop", 4, 1, node, pname, valp, l);
2196 		*mem_start = _ALIGN(*mem_start, 4);
2197 
2198 		if (!strcmp(pname, "phandle"))
2199 			has_phandle = 1;
2200 	}
2201 
2202 	/* Add a "linux,phandle" property if no "phandle" property already
2203 	 * existed (can happen with OPAL)
2204 	 */
2205 	if (!has_phandle) {
2206 		soff = dt_find_string("linux,phandle");
2207 		if (soff == 0)
2208 			prom_printf("WARNING: Can't find string index for"
2209 				    " <linux-phandle> node %s\n", path);
2210 		else {
2211 			dt_push_token(OF_DT_PROP, mem_start, mem_end);
2212 			dt_push_token(4, mem_start, mem_end);
2213 			dt_push_token(soff, mem_start, mem_end);
2214 			valp = make_room(mem_start, mem_end, 4, 4);
2215 			*(__be32 *)valp = cpu_to_be32(node);
2216 		}
2217 	}
2218 
2219 	/* do all our children */
2220 	child = call_prom("child", 1, 1, node);
2221 	while (child != 0) {
2222 		scan_dt_build_struct(child, mem_start, mem_end);
2223 		child = call_prom("peer", 1, 1, child);
2224 	}
2225 
2226 	dt_push_token(OF_DT_END_NODE, mem_start, mem_end);
2227 }
2228 
2229 static void __init flatten_device_tree(void)
2230 {
2231 	phandle root;
2232 	unsigned long mem_start, mem_end, room;
2233 	struct boot_param_header *hdr;
2234 	char *namep;
2235 	u64 *rsvmap;
2236 
2237 	/*
2238 	 * Check how much room we have between alloc top & bottom (+/- a
2239 	 * few pages), crop to 1MB, as this is our "chunk" size
2240 	 */
2241 	room = alloc_top - alloc_bottom - 0x4000;
2242 	if (room > DEVTREE_CHUNK_SIZE)
2243 		room = DEVTREE_CHUNK_SIZE;
2244 	prom_debug("starting device tree allocs at %x\n", alloc_bottom);
2245 
2246 	/* Now try to claim that */
2247 	mem_start = (unsigned long)alloc_up(room, PAGE_SIZE);
2248 	if (mem_start == 0)
2249 		prom_panic("Can't allocate initial device-tree chunk\n");
2250 	mem_end = mem_start + room;
2251 
2252 	/* Get root of tree */
2253 	root = call_prom("peer", 1, 1, (phandle)0);
2254 	if (root == (phandle)0)
2255 		prom_panic ("couldn't get device tree root\n");
2256 
2257 	/* Build header and make room for mem rsv map */
2258 	mem_start = _ALIGN(mem_start, 4);
2259 	hdr = make_room(&mem_start, &mem_end,
2260 			sizeof(struct boot_param_header), 4);
2261 	dt_header_start = (unsigned long)hdr;
2262 	rsvmap = make_room(&mem_start, &mem_end, sizeof(mem_reserve_map), 8);
2263 
2264 	/* Start of strings */
2265 	mem_start = PAGE_ALIGN(mem_start);
2266 	dt_string_start = mem_start;
2267 	mem_start += 4; /* hole */
2268 
2269 	/* Add "linux,phandle" in there, we'll need it */
2270 	namep = make_room(&mem_start, &mem_end, 16, 1);
2271 	strcpy(namep, "linux,phandle");
2272 	mem_start = (unsigned long)namep + strlen(namep) + 1;
2273 
2274 	/* Build string array */
2275 	prom_printf("Building dt strings...\n");
2276 	scan_dt_build_strings(root, &mem_start, &mem_end);
2277 	dt_string_end = mem_start;
2278 
2279 	/* Build structure */
2280 	mem_start = PAGE_ALIGN(mem_start);
2281 	dt_struct_start = mem_start;
2282 	prom_printf("Building dt structure...\n");
2283 	scan_dt_build_struct(root, &mem_start, &mem_end);
2284 	dt_push_token(OF_DT_END, &mem_start, &mem_end);
2285 	dt_struct_end = PAGE_ALIGN(mem_start);
2286 
2287 	/* Finish header */
2288 	hdr->boot_cpuid_phys = cpu_to_be32(prom.cpu);
2289 	hdr->magic = cpu_to_be32(OF_DT_HEADER);
2290 	hdr->totalsize = cpu_to_be32(dt_struct_end - dt_header_start);
2291 	hdr->off_dt_struct = cpu_to_be32(dt_struct_start - dt_header_start);
2292 	hdr->off_dt_strings = cpu_to_be32(dt_string_start - dt_header_start);
2293 	hdr->dt_strings_size = cpu_to_be32(dt_string_end - dt_string_start);
2294 	hdr->off_mem_rsvmap = cpu_to_be32(((unsigned long)rsvmap) - dt_header_start);
2295 	hdr->version = cpu_to_be32(OF_DT_VERSION);
2296 	/* Version 16 is not backward compatible */
2297 	hdr->last_comp_version = cpu_to_be32(0x10);
2298 
2299 	/* Copy the reserve map in */
2300 	memcpy(rsvmap, mem_reserve_map, sizeof(mem_reserve_map));
2301 
2302 #ifdef DEBUG_PROM
2303 	{
2304 		int i;
2305 		prom_printf("reserved memory map:\n");
2306 		for (i = 0; i < mem_reserve_cnt; i++)
2307 			prom_printf("  %x - %x\n",
2308 				    be64_to_cpu(mem_reserve_map[i].base),
2309 				    be64_to_cpu(mem_reserve_map[i].size));
2310 	}
2311 #endif
2312 	/* Bump mem_reserve_cnt to cause further reservations to fail
2313 	 * since it's too late.
2314 	 */
2315 	mem_reserve_cnt = MEM_RESERVE_MAP_SIZE;
2316 
2317 	prom_printf("Device tree strings 0x%x -> 0x%x\n",
2318 		    dt_string_start, dt_string_end);
2319 	prom_printf("Device tree struct  0x%x -> 0x%x\n",
2320 		    dt_struct_start, dt_struct_end);
2321 }
2322 
2323 #ifdef CONFIG_PPC_MAPLE
2324 /* PIBS Version 1.05.0000 04/26/2005 has an incorrect /ht/isa/ranges property.
2325  * The values are bad, and it doesn't even have the right number of cells. */
2326 static void __init fixup_device_tree_maple(void)
2327 {
2328 	phandle isa;
2329 	u32 rloc = 0x01002000; /* IO space; PCI device = 4 */
2330 	u32 isa_ranges[6];
2331 	char *name;
2332 
2333 	name = "/ht@0/isa@4";
2334 	isa = call_prom("finddevice", 1, 1, ADDR(name));
2335 	if (!PHANDLE_VALID(isa)) {
2336 		name = "/ht@0/isa@6";
2337 		isa = call_prom("finddevice", 1, 1, ADDR(name));
2338 		rloc = 0x01003000; /* IO space; PCI device = 6 */
2339 	}
2340 	if (!PHANDLE_VALID(isa))
2341 		return;
2342 
2343 	if (prom_getproplen(isa, "ranges") != 12)
2344 		return;
2345 	if (prom_getprop(isa, "ranges", isa_ranges, sizeof(isa_ranges))
2346 		== PROM_ERROR)
2347 		return;
2348 
2349 	if (isa_ranges[0] != 0x1 ||
2350 		isa_ranges[1] != 0xf4000000 ||
2351 		isa_ranges[2] != 0x00010000)
2352 		return;
2353 
2354 	prom_printf("Fixing up bogus ISA range on Maple/Apache...\n");
2355 
2356 	isa_ranges[0] = 0x1;
2357 	isa_ranges[1] = 0x0;
2358 	isa_ranges[2] = rloc;
2359 	isa_ranges[3] = 0x0;
2360 	isa_ranges[4] = 0x0;
2361 	isa_ranges[5] = 0x00010000;
2362 	prom_setprop(isa, name, "ranges",
2363 			isa_ranges, sizeof(isa_ranges));
2364 }
2365 
2366 #define CPC925_MC_START		0xf8000000
2367 #define CPC925_MC_LENGTH	0x1000000
2368 /* The values for memory-controller don't have right number of cells */
2369 static void __init fixup_device_tree_maple_memory_controller(void)
2370 {
2371 	phandle mc;
2372 	u32 mc_reg[4];
2373 	char *name = "/hostbridge@f8000000";
2374 	u32 ac, sc;
2375 
2376 	mc = call_prom("finddevice", 1, 1, ADDR(name));
2377 	if (!PHANDLE_VALID(mc))
2378 		return;
2379 
2380 	if (prom_getproplen(mc, "reg") != 8)
2381 		return;
2382 
2383 	prom_getprop(prom.root, "#address-cells", &ac, sizeof(ac));
2384 	prom_getprop(prom.root, "#size-cells", &sc, sizeof(sc));
2385 	if ((ac != 2) || (sc != 2))
2386 		return;
2387 
2388 	if (prom_getprop(mc, "reg", mc_reg, sizeof(mc_reg)) == PROM_ERROR)
2389 		return;
2390 
2391 	if (mc_reg[0] != CPC925_MC_START || mc_reg[1] != CPC925_MC_LENGTH)
2392 		return;
2393 
2394 	prom_printf("Fixing up bogus hostbridge on Maple...\n");
2395 
2396 	mc_reg[0] = 0x0;
2397 	mc_reg[1] = CPC925_MC_START;
2398 	mc_reg[2] = 0x0;
2399 	mc_reg[3] = CPC925_MC_LENGTH;
2400 	prom_setprop(mc, name, "reg", mc_reg, sizeof(mc_reg));
2401 }
2402 #else
2403 #define fixup_device_tree_maple()
2404 #define fixup_device_tree_maple_memory_controller()
2405 #endif
2406 
2407 #ifdef CONFIG_PPC_CHRP
2408 /*
2409  * Pegasos and BriQ lacks the "ranges" property in the isa node
2410  * Pegasos needs decimal IRQ 14/15, not hexadecimal
2411  * Pegasos has the IDE configured in legacy mode, but advertised as native
2412  */
2413 static void __init fixup_device_tree_chrp(void)
2414 {
2415 	phandle ph;
2416 	u32 prop[6];
2417 	u32 rloc = 0x01006000; /* IO space; PCI device = 12 */
2418 	char *name;
2419 	int rc;
2420 
2421 	name = "/pci@80000000/isa@c";
2422 	ph = call_prom("finddevice", 1, 1, ADDR(name));
2423 	if (!PHANDLE_VALID(ph)) {
2424 		name = "/pci@ff500000/isa@6";
2425 		ph = call_prom("finddevice", 1, 1, ADDR(name));
2426 		rloc = 0x01003000; /* IO space; PCI device = 6 */
2427 	}
2428 	if (PHANDLE_VALID(ph)) {
2429 		rc = prom_getproplen(ph, "ranges");
2430 		if (rc == 0 || rc == PROM_ERROR) {
2431 			prom_printf("Fixing up missing ISA range on Pegasos...\n");
2432 
2433 			prop[0] = 0x1;
2434 			prop[1] = 0x0;
2435 			prop[2] = rloc;
2436 			prop[3] = 0x0;
2437 			prop[4] = 0x0;
2438 			prop[5] = 0x00010000;
2439 			prom_setprop(ph, name, "ranges", prop, sizeof(prop));
2440 		}
2441 	}
2442 
2443 	name = "/pci@80000000/ide@C,1";
2444 	ph = call_prom("finddevice", 1, 1, ADDR(name));
2445 	if (PHANDLE_VALID(ph)) {
2446 		prom_printf("Fixing up IDE interrupt on Pegasos...\n");
2447 		prop[0] = 14;
2448 		prop[1] = 0x0;
2449 		prom_setprop(ph, name, "interrupts", prop, 2*sizeof(u32));
2450 		prom_printf("Fixing up IDE class-code on Pegasos...\n");
2451 		rc = prom_getprop(ph, "class-code", prop, sizeof(u32));
2452 		if (rc == sizeof(u32)) {
2453 			prop[0] &= ~0x5;
2454 			prom_setprop(ph, name, "class-code", prop, sizeof(u32));
2455 		}
2456 	}
2457 }
2458 #else
2459 #define fixup_device_tree_chrp()
2460 #endif
2461 
2462 #if defined(CONFIG_PPC64) && defined(CONFIG_PPC_PMAC)
2463 static void __init fixup_device_tree_pmac(void)
2464 {
2465 	phandle u3, i2c, mpic;
2466 	u32 u3_rev;
2467 	u32 interrupts[2];
2468 	u32 parent;
2469 
2470 	/* Some G5s have a missing interrupt definition, fix it up here */
2471 	u3 = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000"));
2472 	if (!PHANDLE_VALID(u3))
2473 		return;
2474 	i2c = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/i2c@f8001000"));
2475 	if (!PHANDLE_VALID(i2c))
2476 		return;
2477 	mpic = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/mpic@f8040000"));
2478 	if (!PHANDLE_VALID(mpic))
2479 		return;
2480 
2481 	/* check if proper rev of u3 */
2482 	if (prom_getprop(u3, "device-rev", &u3_rev, sizeof(u3_rev))
2483 	    == PROM_ERROR)
2484 		return;
2485 	if (u3_rev < 0x35 || u3_rev > 0x39)
2486 		return;
2487 	/* does it need fixup ? */
2488 	if (prom_getproplen(i2c, "interrupts") > 0)
2489 		return;
2490 
2491 	prom_printf("fixing up bogus interrupts for u3 i2c...\n");
2492 
2493 	/* interrupt on this revision of u3 is number 0 and level */
2494 	interrupts[0] = 0;
2495 	interrupts[1] = 1;
2496 	prom_setprop(i2c, "/u3@0,f8000000/i2c@f8001000", "interrupts",
2497 		     &interrupts, sizeof(interrupts));
2498 	parent = (u32)mpic;
2499 	prom_setprop(i2c, "/u3@0,f8000000/i2c@f8001000", "interrupt-parent",
2500 		     &parent, sizeof(parent));
2501 }
2502 #else
2503 #define fixup_device_tree_pmac()
2504 #endif
2505 
2506 #ifdef CONFIG_PPC_EFIKA
2507 /*
2508  * The MPC5200 FEC driver requires an phy-handle property to tell it how
2509  * to talk to the phy.  If the phy-handle property is missing, then this
2510  * function is called to add the appropriate nodes and link it to the
2511  * ethernet node.
2512  */
2513 static void __init fixup_device_tree_efika_add_phy(void)
2514 {
2515 	u32 node;
2516 	char prop[64];
2517 	int rv;
2518 
2519 	/* Check if /builtin/ethernet exists - bail if it doesn't */
2520 	node = call_prom("finddevice", 1, 1, ADDR("/builtin/ethernet"));
2521 	if (!PHANDLE_VALID(node))
2522 		return;
2523 
2524 	/* Check if the phy-handle property exists - bail if it does */
2525 	rv = prom_getprop(node, "phy-handle", prop, sizeof(prop));
2526 	if (!rv)
2527 		return;
2528 
2529 	/*
2530 	 * At this point the ethernet device doesn't have a phy described.
2531 	 * Now we need to add the missing phy node and linkage
2532 	 */
2533 
2534 	/* Check for an MDIO bus node - if missing then create one */
2535 	node = call_prom("finddevice", 1, 1, ADDR("/builtin/mdio"));
2536 	if (!PHANDLE_VALID(node)) {
2537 		prom_printf("Adding Ethernet MDIO node\n");
2538 		call_prom("interpret", 1, 1,
2539 			" s\" /builtin\" find-device"
2540 			" new-device"
2541 				" 1 encode-int s\" #address-cells\" property"
2542 				" 0 encode-int s\" #size-cells\" property"
2543 				" s\" mdio\" device-name"
2544 				" s\" fsl,mpc5200b-mdio\" encode-string"
2545 				" s\" compatible\" property"
2546 				" 0xf0003000 0x400 reg"
2547 				" 0x2 encode-int"
2548 				" 0x5 encode-int encode+"
2549 				" 0x3 encode-int encode+"
2550 				" s\" interrupts\" property"
2551 			" finish-device");
2552 	};
2553 
2554 	/* Check for a PHY device node - if missing then create one and
2555 	 * give it's phandle to the ethernet node */
2556 	node = call_prom("finddevice", 1, 1,
2557 			 ADDR("/builtin/mdio/ethernet-phy"));
2558 	if (!PHANDLE_VALID(node)) {
2559 		prom_printf("Adding Ethernet PHY node\n");
2560 		call_prom("interpret", 1, 1,
2561 			" s\" /builtin/mdio\" find-device"
2562 			" new-device"
2563 				" s\" ethernet-phy\" device-name"
2564 				" 0x10 encode-int s\" reg\" property"
2565 				" my-self"
2566 				" ihandle>phandle"
2567 			" finish-device"
2568 			" s\" /builtin/ethernet\" find-device"
2569 				" encode-int"
2570 				" s\" phy-handle\" property"
2571 			" device-end");
2572 	}
2573 }
2574 
2575 static void __init fixup_device_tree_efika(void)
2576 {
2577 	int sound_irq[3] = { 2, 2, 0 };
2578 	int bcomm_irq[3*16] = { 3,0,0, 3,1,0, 3,2,0, 3,3,0,
2579 				3,4,0, 3,5,0, 3,6,0, 3,7,0,
2580 				3,8,0, 3,9,0, 3,10,0, 3,11,0,
2581 				3,12,0, 3,13,0, 3,14,0, 3,15,0 };
2582 	u32 node;
2583 	char prop[64];
2584 	int rv, len;
2585 
2586 	/* Check if we're really running on a EFIKA */
2587 	node = call_prom("finddevice", 1, 1, ADDR("/"));
2588 	if (!PHANDLE_VALID(node))
2589 		return;
2590 
2591 	rv = prom_getprop(node, "model", prop, sizeof(prop));
2592 	if (rv == PROM_ERROR)
2593 		return;
2594 	if (strcmp(prop, "EFIKA5K2"))
2595 		return;
2596 
2597 	prom_printf("Applying EFIKA device tree fixups\n");
2598 
2599 	/* Claiming to be 'chrp' is death */
2600 	node = call_prom("finddevice", 1, 1, ADDR("/"));
2601 	rv = prom_getprop(node, "device_type", prop, sizeof(prop));
2602 	if (rv != PROM_ERROR && (strcmp(prop, "chrp") == 0))
2603 		prom_setprop(node, "/", "device_type", "efika", sizeof("efika"));
2604 
2605 	/* CODEGEN,description is exposed in /proc/cpuinfo so
2606 	   fix that too */
2607 	rv = prom_getprop(node, "CODEGEN,description", prop, sizeof(prop));
2608 	if (rv != PROM_ERROR && (strstr(prop, "CHRP")))
2609 		prom_setprop(node, "/", "CODEGEN,description",
2610 			     "Efika 5200B PowerPC System",
2611 			     sizeof("Efika 5200B PowerPC System"));
2612 
2613 	/* Fixup bestcomm interrupts property */
2614 	node = call_prom("finddevice", 1, 1, ADDR("/builtin/bestcomm"));
2615 	if (PHANDLE_VALID(node)) {
2616 		len = prom_getproplen(node, "interrupts");
2617 		if (len == 12) {
2618 			prom_printf("Fixing bestcomm interrupts property\n");
2619 			prom_setprop(node, "/builtin/bestcom", "interrupts",
2620 				     bcomm_irq, sizeof(bcomm_irq));
2621 		}
2622 	}
2623 
2624 	/* Fixup sound interrupts property */
2625 	node = call_prom("finddevice", 1, 1, ADDR("/builtin/sound"));
2626 	if (PHANDLE_VALID(node)) {
2627 		rv = prom_getprop(node, "interrupts", prop, sizeof(prop));
2628 		if (rv == PROM_ERROR) {
2629 			prom_printf("Adding sound interrupts property\n");
2630 			prom_setprop(node, "/builtin/sound", "interrupts",
2631 				     sound_irq, sizeof(sound_irq));
2632 		}
2633 	}
2634 
2635 	/* Make sure ethernet phy-handle property exists */
2636 	fixup_device_tree_efika_add_phy();
2637 }
2638 #else
2639 #define fixup_device_tree_efika()
2640 #endif
2641 
2642 static void __init fixup_device_tree(void)
2643 {
2644 	fixup_device_tree_maple();
2645 	fixup_device_tree_maple_memory_controller();
2646 	fixup_device_tree_chrp();
2647 	fixup_device_tree_pmac();
2648 	fixup_device_tree_efika();
2649 }
2650 
2651 static void __init prom_find_boot_cpu(void)
2652 {
2653 	__be32 rval;
2654 	ihandle prom_cpu;
2655 	phandle cpu_pkg;
2656 
2657 	rval = 0;
2658 	if (prom_getprop(prom.chosen, "cpu", &rval, sizeof(rval)) <= 0)
2659 		return;
2660 	prom_cpu = be32_to_cpu(rval);
2661 
2662 	cpu_pkg = call_prom("instance-to-package", 1, 1, prom_cpu);
2663 
2664 	prom_getprop(cpu_pkg, "reg", &rval, sizeof(rval));
2665 	prom.cpu = be32_to_cpu(rval);
2666 
2667 	prom_debug("Booting CPU hw index = %lu\n", prom.cpu);
2668 }
2669 
2670 static void __init prom_check_initrd(unsigned long r3, unsigned long r4)
2671 {
2672 #ifdef CONFIG_BLK_DEV_INITRD
2673 	if (r3 && r4 && r4 != 0xdeadbeef) {
2674 		__be64 val;
2675 
2676 		prom_initrd_start = is_kernel_addr(r3) ? __pa(r3) : r3;
2677 		prom_initrd_end = prom_initrd_start + r4;
2678 
2679 		val = cpu_to_be64(prom_initrd_start);
2680 		prom_setprop(prom.chosen, "/chosen", "linux,initrd-start",
2681 			     &val, sizeof(val));
2682 		val = cpu_to_be64(prom_initrd_end);
2683 		prom_setprop(prom.chosen, "/chosen", "linux,initrd-end",
2684 			     &val, sizeof(val));
2685 
2686 		reserve_mem(prom_initrd_start,
2687 			    prom_initrd_end - prom_initrd_start);
2688 
2689 		prom_debug("initrd_start=0x%x\n", prom_initrd_start);
2690 		prom_debug("initrd_end=0x%x\n", prom_initrd_end);
2691 	}
2692 #endif /* CONFIG_BLK_DEV_INITRD */
2693 }
2694 
2695 #ifdef CONFIG_PPC64
2696 #ifdef CONFIG_RELOCATABLE
2697 static void reloc_toc(void)
2698 {
2699 }
2700 
2701 static void unreloc_toc(void)
2702 {
2703 }
2704 #else
2705 static void __reloc_toc(unsigned long offset, unsigned long nr_entries)
2706 {
2707 	unsigned long i;
2708 	unsigned long *toc_entry;
2709 
2710 	/* Get the start of the TOC by using r2 directly. */
2711 	asm volatile("addi %0,2,-0x8000" : "=b" (toc_entry));
2712 
2713 	for (i = 0; i < nr_entries; i++) {
2714 		*toc_entry = *toc_entry + offset;
2715 		toc_entry++;
2716 	}
2717 }
2718 
2719 static void reloc_toc(void)
2720 {
2721 	unsigned long offset = reloc_offset();
2722 	unsigned long nr_entries =
2723 		(__prom_init_toc_end - __prom_init_toc_start) / sizeof(long);
2724 
2725 	__reloc_toc(offset, nr_entries);
2726 
2727 	mb();
2728 }
2729 
2730 static void unreloc_toc(void)
2731 {
2732 	unsigned long offset = reloc_offset();
2733 	unsigned long nr_entries =
2734 		(__prom_init_toc_end - __prom_init_toc_start) / sizeof(long);
2735 
2736 	mb();
2737 
2738 	__reloc_toc(-offset, nr_entries);
2739 }
2740 #endif
2741 #endif
2742 
2743 /*
2744  * We enter here early on, when the Open Firmware prom is still
2745  * handling exceptions and the MMU hash table for us.
2746  */
2747 
2748 unsigned long __init prom_init(unsigned long r3, unsigned long r4,
2749 			       unsigned long pp,
2750 			       unsigned long r6, unsigned long r7,
2751 			       unsigned long kbase)
2752 {
2753 	unsigned long hdr;
2754 
2755 #ifdef CONFIG_PPC32
2756 	unsigned long offset = reloc_offset();
2757 	reloc_got2(offset);
2758 #else
2759 	reloc_toc();
2760 #endif
2761 
2762 	/*
2763 	 * First zero the BSS
2764 	 */
2765 	memset(&__bss_start, 0, __bss_stop - __bss_start);
2766 
2767 	/*
2768 	 * Init interface to Open Firmware, get some node references,
2769 	 * like /chosen
2770 	 */
2771 	prom_init_client_services(pp);
2772 
2773 	/*
2774 	 * See if this OF is old enough that we need to do explicit maps
2775 	 * and other workarounds
2776 	 */
2777 	prom_find_mmu();
2778 
2779 	/*
2780 	 * Init prom stdout device
2781 	 */
2782 	prom_init_stdout();
2783 
2784 	prom_printf("Preparing to boot %s", linux_banner);
2785 
2786 	/*
2787 	 * Get default machine type. At this point, we do not differentiate
2788 	 * between pSeries SMP and pSeries LPAR
2789 	 */
2790 	of_platform = prom_find_machine_type();
2791 	prom_printf("Detected machine type: %x\n", of_platform);
2792 
2793 #ifndef CONFIG_NONSTATIC_KERNEL
2794 	/* Bail if this is a kdump kernel. */
2795 	if (PHYSICAL_START > 0)
2796 		prom_panic("Error: You can't boot a kdump kernel from OF!\n");
2797 #endif
2798 
2799 	/*
2800 	 * Check for an initrd
2801 	 */
2802 	prom_check_initrd(r3, r4);
2803 
2804 #if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
2805 	/*
2806 	 * On pSeries, inform the firmware about our capabilities
2807 	 */
2808 	if (of_platform == PLATFORM_PSERIES ||
2809 	    of_platform == PLATFORM_PSERIES_LPAR)
2810 		prom_send_capabilities();
2811 #endif
2812 
2813 	/*
2814 	 * Copy the CPU hold code
2815 	 */
2816 	if (of_platform != PLATFORM_POWERMAC)
2817 		copy_and_flush(0, kbase, 0x100, 0);
2818 
2819 	/*
2820 	 * Do early parsing of command line
2821 	 */
2822 	early_cmdline_parse();
2823 
2824 	/*
2825 	 * Initialize memory management within prom_init
2826 	 */
2827 	prom_init_mem();
2828 
2829 	/*
2830 	 * Determine which cpu is actually running right _now_
2831 	 */
2832 	prom_find_boot_cpu();
2833 
2834 	/*
2835 	 * Initialize display devices
2836 	 */
2837 	prom_check_displays();
2838 
2839 #if defined(CONFIG_PPC64) && defined(__BIG_ENDIAN__)
2840 	/*
2841 	 * Initialize IOMMU (TCE tables) on pSeries. Do that before anything else
2842 	 * that uses the allocator, we need to make sure we get the top of memory
2843 	 * available for us here...
2844 	 */
2845 	if (of_platform == PLATFORM_PSERIES)
2846 		prom_initialize_tce_table();
2847 #endif
2848 
2849 	/*
2850 	 * On non-powermacs, try to instantiate RTAS. PowerMacs don't
2851 	 * have a usable RTAS implementation.
2852 	 */
2853 	if (of_platform != PLATFORM_POWERMAC &&
2854 	    of_platform != PLATFORM_OPAL)
2855 		prom_instantiate_rtas();
2856 
2857 #ifdef CONFIG_PPC_POWERNV
2858 	if (of_platform == PLATFORM_OPAL)
2859 		prom_instantiate_opal();
2860 #endif /* CONFIG_PPC_POWERNV */
2861 
2862 #ifdef CONFIG_PPC64
2863 	/* instantiate sml */
2864 	prom_instantiate_sml();
2865 #endif
2866 
2867 	/*
2868 	 * On non-powermacs, put all CPUs in spin-loops.
2869 	 *
2870 	 * PowerMacs use a different mechanism to spin CPUs
2871 	 *
2872 	 * (This must be done after instanciating RTAS)
2873 	 */
2874 	if (of_platform != PLATFORM_POWERMAC &&
2875 	    of_platform != PLATFORM_OPAL)
2876 		prom_hold_cpus();
2877 
2878 	/*
2879 	 * Fill in some infos for use by the kernel later on
2880 	 */
2881 	if (prom_memory_limit) {
2882 		__be64 val = cpu_to_be64(prom_memory_limit);
2883 		prom_setprop(prom.chosen, "/chosen", "linux,memory-limit",
2884 			     &val, sizeof(val));
2885 	}
2886 #ifdef CONFIG_PPC64
2887 	if (prom_iommu_off)
2888 		prom_setprop(prom.chosen, "/chosen", "linux,iommu-off",
2889 			     NULL, 0);
2890 
2891 	if (prom_iommu_force_on)
2892 		prom_setprop(prom.chosen, "/chosen", "linux,iommu-force-on",
2893 			     NULL, 0);
2894 
2895 	if (prom_tce_alloc_start) {
2896 		prom_setprop(prom.chosen, "/chosen", "linux,tce-alloc-start",
2897 			     &prom_tce_alloc_start,
2898 			     sizeof(prom_tce_alloc_start));
2899 		prom_setprop(prom.chosen, "/chosen", "linux,tce-alloc-end",
2900 			     &prom_tce_alloc_end,
2901 			     sizeof(prom_tce_alloc_end));
2902 	}
2903 #endif
2904 
2905 	/*
2906 	 * Fixup any known bugs in the device-tree
2907 	 */
2908 	fixup_device_tree();
2909 
2910 	/*
2911 	 * Now finally create the flattened device-tree
2912 	 */
2913 	prom_printf("copying OF device tree...\n");
2914 	flatten_device_tree();
2915 
2916 	/*
2917 	 * in case stdin is USB and still active on IBM machines...
2918 	 * Unfortunately quiesce crashes on some powermacs if we have
2919 	 * closed stdin already (in particular the powerbook 101). It
2920 	 * appears that the OPAL version of OFW doesn't like it either.
2921 	 */
2922 	if (of_platform != PLATFORM_POWERMAC &&
2923 	    of_platform != PLATFORM_OPAL)
2924 		prom_close_stdin();
2925 
2926 	/*
2927 	 * Call OF "quiesce" method to shut down pending DMA's from
2928 	 * devices etc...
2929 	 */
2930 	prom_printf("Quiescing Open Firmware ...\n");
2931 	call_prom("quiesce", 0, 0);
2932 
2933 	/*
2934 	 * And finally, call the kernel passing it the flattened device
2935 	 * tree and NULL as r5, thus triggering the new entry point which
2936 	 * is common to us and kexec
2937 	 */
2938 	hdr = dt_header_start;
2939 
2940 	/* Don't print anything after quiesce under OPAL, it crashes OFW */
2941 	if (of_platform != PLATFORM_OPAL) {
2942 		prom_printf("Booting Linux via __start() ...\n");
2943 		prom_debug("->dt_header_start=0x%x\n", hdr);
2944 	}
2945 
2946 #ifdef CONFIG_PPC32
2947 	reloc_got2(-offset);
2948 #else
2949 	unreloc_toc();
2950 #endif
2951 
2952 #ifdef CONFIG_PPC_EARLY_DEBUG_OPAL
2953 	/* OPAL early debug gets the OPAL base & entry in r8 and r9 */
2954 	__start(hdr, kbase, 0, 0, 0,
2955 		prom_opal_base, prom_opal_entry);
2956 #else
2957 	__start(hdr, kbase, 0, 0, 0, 0, 0);
2958 #endif
2959 
2960 	return 0;
2961 }
2962