-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Grant Likely
authored and
Josh Boyer
committed
Apr 3, 2008
1 parent
4529d5b
commit 111d59b
Showing
5 changed files
with
128 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 19a74263f49dce2b96e2213f7f4c029cedbbf0ce | ||
refs/heads/master: d2477b5cc8ca95b8c15133ffbbebf0bd9783f560 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
/* | ||
* The simple platform -- for booting when firmware doesn't supply a device | ||
* tree or any platform configuration information. | ||
* All data is extracted from an embedded device tree | ||
* blob. | ||
* | ||
* Authors: Scott Wood <scottwood@freescale.com> | ||
* Grant Likely <grant.likely@secretlab.ca> | ||
* | ||
* Copyright (c) 2007 Freescale Semiconductor, Inc. | ||
* Copyright (c) 2008 Secret Lab Technologies Ltd. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 as published | ||
* by the Free Software Foundation. | ||
*/ | ||
|
||
#include "ops.h" | ||
#include "types.h" | ||
#include "io.h" | ||
#include "stdio.h" | ||
#include "libfdt/libfdt.h" | ||
|
||
BSS_STACK(4*1024); | ||
|
||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5, | ||
unsigned long r6, unsigned long r7) | ||
{ | ||
const u32 *na, *ns, *reg, *timebase; | ||
u64 memsize64; | ||
int node, size, i; | ||
|
||
/* Make sure FDT blob is sane */ | ||
if (fdt_check_header(_dtb_start) != 0) | ||
fatal("Invalid device tree blob\n"); | ||
|
||
/* Find the #address-cells and #size-cells properties */ | ||
node = fdt_path_offset(_dtb_start, "/"); | ||
if (node < 0) | ||
fatal("Cannot find root node\n"); | ||
na = fdt_getprop(_dtb_start, node, "#address-cells", &size); | ||
if (!na || (size != 4)) | ||
fatal("Cannot find #address-cells property"); | ||
ns = fdt_getprop(_dtb_start, node, "#size-cells", &size); | ||
if (!ns || (size != 4)) | ||
fatal("Cannot find #size-cells property"); | ||
|
||
/* Find the memory range */ | ||
node = fdt_node_offset_by_prop_value(_dtb_start, -1, "device_type", | ||
"memory", sizeof("memory")); | ||
if (node < 0) | ||
fatal("Cannot find memory node\n"); | ||
reg = fdt_getprop(_dtb_start, node, "reg", &size); | ||
if (size < (*na+*ns) * sizeof(u32)) | ||
fatal("cannot get memory range\n"); | ||
|
||
/* Only interested in memory based at 0 */ | ||
for (i = 0; i < *na; i++) | ||
if (*reg++ != 0) | ||
fatal("Memory range is not based at address 0\n"); | ||
|
||
/* get the memsize and trucate it to under 4G on 32 bit machines */ | ||
memsize64 = 0; | ||
for (i = 0; i < *ns; i++) | ||
memsize64 = (memsize64 << 32) | *reg++; | ||
if (sizeof(void *) == 4 && memsize64 >= 0x100000000ULL) | ||
memsize64 = 0xffffffff; | ||
|
||
/* finally, setup the timebase */ | ||
node = fdt_node_offset_by_prop_value(_dtb_start, -1, "device_type", | ||
"cpu", sizeof("cpu")); | ||
if (!node) | ||
fatal("Cannot find cpu node\n"); | ||
timebase = fdt_getprop(_dtb_start, node, "timebase-frequency", &size); | ||
if (timebase && (size == 4)) | ||
timebase_period_ns = 1000000000 / *timebase; | ||
|
||
/* Now we have the memory size; initialize the heap */ | ||
simple_alloc_init(_end, memsize64 - (unsigned long)_end, 32, 64); | ||
|
||
/* prepare the device tree and find the console */ | ||
fdt_init(_dtb_start); | ||
serial_console_init(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#include "ppc_asm.h" | ||
|
||
.text | ||
.global _zimage_start | ||
_zimage_start: | ||
|
||
/* PPC errata 213: needed by Virtex-4 FX */ | ||
mfccr0 0 | ||
oris 0,0,0x50000000@h | ||
mtccr0 0 | ||
|
||
/* | ||
* Invalidate the data cache if the data cache is turned off. | ||
* - The 405 core does not invalidate the data cache on power-up | ||
* or reset but does turn off the data cache. We cannot assume | ||
* that the cache contents are valid. | ||
* - If the data cache is turned on this must have been done by | ||
* a bootloader and we assume that the cache contents are | ||
* valid. | ||
*/ | ||
mfdccr r9 | ||
cmplwi r9,0 | ||
bne 2f | ||
lis r9,0 | ||
li r8,256 | ||
mtctr r8 | ||
1: dccci r0,r9 | ||
addi r9,r9,0x20 | ||
bdnz 1b | ||
2: b _zimage_start_lib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters