Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11c146cc authored by Scott Wood's avatar Scott Wood Committed by Kumar Gala
Browse files

[POWERPC] 8xx/wrapper: Embedded Planet EP88xC support



This board is also resold by Freescale under the names
"QUICCStart MPC885 Evaluation System" and "CWH-PPC-885XN-VE".

Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
parent 20906ece
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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))
@@ -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
+203 −0
Original line number Diff line number Diff line
/*
 * 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 −0
Original line number Diff line number Diff line
/*
 * 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 −0
Original line number Diff line number Diff line
	.text
	.global _zimage_start
_zimage_start:
	b	_zimage_start_lib
+14 −6
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ initrd=
dtb=
dts=
cacheit=
binary=
gzip=.gz

# cross-compilation prefix
@@ -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"
@@ -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)
@@ -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"
@@ -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`
@@ -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)
Loading