xref: /linux/arch/powerpc/boot/ep88xc.c (revision ca55b2fef3a9373fcfc30f82fd26bc7fccbda732)
1 /*
2  * Embedded Planet EP88xC with PlanetCore firmware
3  *
4  * Author: Scott Wood <scottwood@freescale.com>
5  *
6  * Copyright (c) 2007 Freescale Semiconductor, Inc.
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License version 2 as published
10  * by the Free Software Foundation.
11  */
12 
13 #include "ops.h"
14 #include "stdio.h"
15 #include "planetcore.h"
16 #include "mpc8xx.h"
17 
18 static char *table;
19 static u64 mem_size;
20 
21 static void platform_fixups(void)
22 {
23 	u64 val;
24 
25 	dt_fixup_memory(0, mem_size);
26 	planetcore_set_mac_addrs(table);
27 
28 	if (!planetcore_get_decimal(table, PLANETCORE_KEY_CRYSTAL_HZ, &val)) {
29 		printf("No PlanetCore crystal frequency key.\r\n");
30 		return;
31 	}
32 
33 	mpc885_fixup_clocks(val);
34 }
35 
36 void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
37                    unsigned long r6, unsigned long r7)
38 {
39 	table = (char *)r3;
40 	planetcore_prepare_table(table);
41 
42 	if (!planetcore_get_decimal(table, PLANETCORE_KEY_MB_RAM, &mem_size))
43 		return;
44 
45 	mem_size *= 1024 * 1024;
46 	simple_alloc_init(_end, mem_size - (unsigned long)_end, 32, 64);
47 
48 	fdt_init(_dtb_start);
49 
50 	planetcore_set_stdout_path(table);
51 
52 	serial_console_init();
53 	platform_ops.fixups = platform_fixups;
54 }
55