Skip to content

Commit

Permalink
[POWERPC] 8xx/wrapper: Embedded Planet EP88xC support
Browse files Browse the repository at this point in the history
This board is also resold by Freescale under the names
"QUICCStart MPC885 Evaluation System" and "CWH-PPC-885XN-VE".

Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
  • Loading branch information
Scott Wood authored and Kumar Gala committed Oct 4, 2007
1 parent 20906ec commit 11c146c
Show file tree
Hide file tree
Showing 9 changed files with 1,216 additions and 7 deletions.
4 changes: 3 additions & 1 deletion arch/powerpc/boot/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ src-wlib := string.S crt0.S stdio.c main.c flatdevtree.c flatdevtree_misc.c \
src-plat := of.c cuboot-52xx.c cuboot-83xx.c cuboot-85xx.c holly.c \
cuboot-ebony.c treeboot-ebony.c prpmc2800.c \
ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c
cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c \
fixed-head.S ep88xc.c
src-boot := $(src-wlib) $(src-plat) empty.c

src-boot := $(addprefix $(obj)/, $(src-boot))
Expand Down Expand Up @@ -144,6 +145,7 @@ image-$(CONFIG_DEFAULT_UIMAGE) += uImage

ifneq ($(CONFIG_DEVICE_TREE),"")
image-$(CONFIG_PPC_8xx) += cuImage.8xx
image-$(CONFIG_PPC_EP88XC) += zImage.ep88xc
image-$(CONFIG_8260) += cuImage.pq2
image-$(CONFIG_PPC_MPC52xx) += cuImage.52xx
image-$(CONFIG_PPC_83xx) += cuImage.83xx
Expand Down
203 changes: 203 additions & 0 deletions arch/powerpc/boot/dts/ep88xc.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
/*
* EP88xC Device Tree Source
*
* Copyright 2006 MontaVista Software, Inc.
* Copyright 2007 Freescale Semiconductor, Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*/


/ {
model = "EP88xC";
compatible = "fsl,ep88xc";
#address-cells = <1>;
#size-cells = <1>;

cpus {
#address-cells = <1>;
#size-cells = <0>;

PowerPC,885@0 {
device_type = "cpu";
reg = <0>;
d-cache-line-size = <d#16>;
i-cache-line-size = <d#16>;
d-cache-size = <d#8192>;
i-cache-size = <d#8192>;
timebase-frequency = <0>;
bus-frequency = <0>;
clock-frequency = <0>;
interrupts = <f 2>; // decrementer interrupt
interrupt-parent = <&PIC>;
};
};

memory {
device_type = "memory";
reg = <0 0>;
};

localbus@fa200100 {
compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus";
#address-cells = <2>;
#size-cells = <1>;
reg = <fa200100 40>;

ranges = <
0 0 fc000000 04000000
3 0 fa000000 01000000
>;

flash@0,2000000 {
compatible = "cfi-flash";
reg = <0 2000000 2000000>;
bank-width = <4>;
device-width = <2>;
};

board-control@3,400000 {
reg = <3 400000 10>;
compatible = "fsl,ep88xc-bcsr";
};
};

soc@fa200000 {
compatible = "fsl,mpc885", "fsl,pq1-soc";
#address-cells = <1>;
#size-cells = <1>;
device_type = "soc";
ranges = <0 fa200000 00004000>;
bus-frequency = <0>;

// Temporary -- will go away once kernel uses ranges for get_immrbase().
reg = <fa200000 4000>;

mdio@e00 {
compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio";
reg = <e00 188>;
#address-cells = <1>;
#size-cells = <0>;

PHY0: ethernet-phy@0 {
reg = <0>;
device_type = "ethernet-phy";
};

PHY1: ethernet-phy@1 {
reg = <1>;
device_type = "ethernet-phy";
};
};

ethernet@e00 {
device_type = "network";
compatible = "fsl,mpc885-fec-enet",
"fsl,pq1-fec-enet";
reg = <e00 188>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <3 1>;
interrupt-parent = <&PIC>;
phy-handle = <&PHY0>;
linux,network-index = <0>;
};

ethernet@1e00 {
device_type = "network";
compatible = "fsl,mpc885-fec-enet",
"fsl,pq1-fec-enet";
reg = <1e00 188>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <7 1>;
interrupt-parent = <&PIC>;
phy-handle = <&PHY1>;
linux,network-index = <1>;
};

PIC: interrupt-controller@0 {
interrupt-controller;
#interrupt-cells = <2>;
reg = <0 24>;
compatible = "fsl,mpc885-pic", "fsl,pq1-pic";
};

pcmcia@80 {
#address-cells = <3>;
#interrupt-cells = <1>;
#size-cells = <2>;
compatible = "fsl,pq-pcmcia";
device_type = "pcmcia";
reg = <80 80>;
interrupt-parent = <&PIC>;
interrupts = <d 1>;
};

cpm@9c0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,mpc885-cpm", "fsl,cpm1";
command-proc = <9c0>;
interrupts = <0>; // cpm error interrupt
interrupt-parent = <&CPM_PIC>;
reg = <9c0 40 2000 1c00>;
ranges;

brg@9f0 {
compatible = "fsl,mpc885-brg",
"fsl,cpm1-brg",
"fsl,cpm-brg";
reg = <9f0 10>;
};

CPM_PIC: interrupt-controller@930 {
interrupt-controller;
#interrupt-cells = <1>;
interrupts = <5 2 0 2>;
interrupt-parent = <&PIC>;
reg = <930 20>;
compatible = "fsl,mpc885-cpm-pic",
"fsl,cpm1-pic";
};

// MON-1
serial@a80 {
device_type = "serial";
compatible = "fsl,mpc885-smc-uart",
"fsl,cpm1-smc-uart";
reg = <a80 10 3e80 40>;
interrupts = <4>;
interrupt-parent = <&CPM_PIC>;
fsl,cpm-brg = <1>;
fsl,cpm-command = <0090>;
linux,planetcore-label = "SMC1";
};

// SER-1
serial@a20 {
device_type = "serial";
compatible = "fsl,mpc885-scc-uart",
"fsl,cpm1-scc-uart";
reg = <a20 20 3d00 80>;
interrupts = <1d>;
interrupt-parent = <&CPM_PIC>;
fsl,cpm-brg = <2>;
fsl,cpm-command = <0040>;
linux,planetcore-label = "SCC2";
};

usb@a00 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,mpc885-usb",
"fsl,cpm1-usb";
reg = <a00 18 1c00 80>;
interrupt-parent = <&CPM_PIC>;
interrupts = <1e>;
fsl,cpm-command = <0000>;
};
};
};
};
54 changes: 54 additions & 0 deletions arch/powerpc/boot/ep88xc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* Embedded Planet EP88xC with PlanetCore firmware
*
* Author: Scott Wood <scottwood@freescale.com>
*
* Copyright (c) 2007 Freescale Semiconductor, Inc.
*
* 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 "stdio.h"
#include "planetcore.h"
#include "mpc8xx.h"

static char *table;
static u64 mem_size;

static void platform_fixups(void)
{
u64 val;

dt_fixup_memory(0, mem_size);
planetcore_set_mac_addrs(table);

if (!planetcore_get_decimal(table, PLANETCORE_KEY_CRYSTAL_HZ, &val)) {
printf("No PlanetCore crystal frequency key.\r\n");
return;
}

mpc885_fixup_clocks(val);
}

void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
unsigned long r6, unsigned long r7)
{
table = (char *)r3;
planetcore_prepare_table(table);

if (!planetcore_get_decimal(table, PLANETCORE_KEY_MB_RAM, &mem_size))
return;

mem_size *= 1024 * 1024;
simple_alloc_init(_end, mem_size - (unsigned long)_end, 32, 64);

ft_init(_dtb_start, _dtb_end - _dtb_start, 32);

planetcore_set_stdout_path(table);

serial_console_init();
platform_ops.fixups = platform_fixups;
}
4 changes: 4 additions & 0 deletions arch/powerpc/boot/fixed-head.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.text
.global _zimage_start
_zimage_start:
b _zimage_start_lib
20 changes: 14 additions & 6 deletions arch/powerpc/boot/wrapper
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ initrd=
dtb=
dts=
cacheit=
binary=
gzip=.gz

# cross-compilation prefix
Expand Down Expand Up @@ -142,17 +143,23 @@ miboot|uboot)
isection=initrd
;;
cuboot*)
binary=y
gzip=
;;
ps3)
platformo="$object/ps3-head.o $object/ps3-hvcall.o $object/ps3.o"
lds=$object/zImage.ps3.lds
binary=y
gzip=
ext=bin
objflags="-O binary --set-section-flags=.bss=contents,alloc,load,data"
ksection=.kernel:vmlinux.bin
isection=.kernel:initrd
;;
ep88xc)
platformo="$object/fixed-head.o $object/$platform.o"
binary=y
;;
esac

vmz="$tmpdir/`basename \"$kernel\"`.$ext"
Expand Down Expand Up @@ -224,6 +231,11 @@ fi
base=0x`${CROSS}nm "$ofile" | grep ' _start$' | cut -d' ' -f1`
entry=`${CROSS}objdump -f "$ofile" | grep '^start address ' | cut -d' ' -f3`

if [ -n "$binary" ]; then
mv "$ofile" "$ofile".elf
${CROSS}objcopy -O binary "$ofile".elf "$ofile".bin
fi

# post-processing needed for some platforms
case "$platform" in
pseries|chrp)
Expand All @@ -234,8 +246,6 @@ coff)
$object/hack-coff "$ofile"
;;
cuboot*)
mv "$ofile" "$ofile".elf
${CROSS}objcopy -O binary "$ofile".elf "$ofile".bin
gzip -f -9 "$ofile".bin
mkimage -A ppc -O linux -T kernel -C gzip -a "$base" -e "$entry" \
$uboot_version -d "$ofile".bin.gz "$ofile"
Expand All @@ -259,11 +269,11 @@ ps3)
# then copied to offset 0x100. At runtime the bootwrapper program
# copies the 0x100 bytes at __system_reset_kernel to addr 0x100.

system_reset_overlay=0x`${CROSS}nm "$ofile" \
system_reset_overlay=0x`${CROSS}nm "$ofile".elf \
| grep ' __system_reset_overlay$' \
| cut -d' ' -f1`
system_reset_overlay=`printf "%d" $system_reset_overlay`
system_reset_kernel=0x`${CROSS}nm "$ofile" \
system_reset_kernel=0x`${CROSS}nm "$ofile".elf \
| grep ' __system_reset_kernel$' \
| cut -d' ' -f1`
system_reset_kernel=`printf "%d" $system_reset_kernel`
Expand All @@ -272,8 +282,6 @@ ps3)

rm -f "$object/otheros.bld"

${CROSS}objcopy -O binary "$ofile" "$ofile.bin"

msg=$(dd if="$ofile.bin" of="$ofile.bin" conv=notrunc \
skip=$overlay_dest seek=$system_reset_kernel \
count=$overlay_size bs=1 2>&1)
Expand Down
Loading

0 comments on commit 11c146c

Please sign in to comment.