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