Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/powerpc/boot/ep405.c
10818 views
1
/*
2
* Embedded Planet EP405 with PlanetCore firmware
3
*
4
* (c) Benjamin Herrenschmidt <[email protected]>, IBM Corp,\
5
*
6
* Based on ep88xc.c by
7
*
8
* Scott Wood <[email protected]>
9
*
10
* Copyright (c) 2007 Freescale Semiconductor, Inc.
11
*
12
* This program is free software; you can redistribute it and/or modify it
13
* under the terms of the GNU General Public License version 2 as published
14
* by the Free Software Foundation.
15
*/
16
17
#include "ops.h"
18
#include "stdio.h"
19
#include "planetcore.h"
20
#include "dcr.h"
21
#include "4xx.h"
22
#include "io.h"
23
24
static char *table;
25
static u64 mem_size;
26
27
static void platform_fixups(void)
28
{
29
u64 val;
30
void *nvrtc;
31
32
dt_fixup_memory(0, mem_size);
33
planetcore_set_mac_addrs(table);
34
35
if (!planetcore_get_decimal(table, PLANETCORE_KEY_CRYSTAL_HZ, &val)) {
36
printf("No PlanetCore crystal frequency key.\r\n");
37
return;
38
}
39
ibm405gp_fixup_clocks(val, 0xa8c000);
40
ibm4xx_quiesce_eth((u32 *)0xef600800, NULL);
41
ibm4xx_fixup_ebc_ranges("/plb/ebc");
42
43
if (!planetcore_get_decimal(table, PLANETCORE_KEY_KB_NVRAM, &val)) {
44
printf("No PlanetCore NVRAM size key.\r\n");
45
return;
46
}
47
nvrtc = finddevice("/plb/ebc/nvrtc@4,200000");
48
if (nvrtc != NULL) {
49
u32 reg[3] = { 4, 0x200000, 0};
50
getprop(nvrtc, "reg", reg, 3);
51
reg[2] = (val << 10) & 0xffffffff;
52
setprop(nvrtc, "reg", reg, 3);
53
}
54
}
55
56
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
57
unsigned long r6, unsigned long r7)
58
{
59
table = (char *)r3;
60
planetcore_prepare_table(table);
61
62
if (!planetcore_get_decimal(table, PLANETCORE_KEY_MB_RAM, &mem_size))
63
return;
64
65
mem_size *= 1024 * 1024;
66
simple_alloc_init(_end, mem_size - (unsigned long)_end, 32, 64);
67
68
fdt_init(_dtb_start);
69
70
planetcore_set_stdout_path(table);
71
72
serial_console_init();
73
platform_ops.fixups = platform_fixups;
74
}
75
76