[POWERPC] 8xx: Analogue & Micro Adder875 board support.
Signed-off-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
1
arch/powerpc/boot/.gitignore
vendored
1
arch/powerpc/boot/.gitignore
vendored
@@ -31,6 +31,7 @@ zImage.*lds
|
||||
zImage.miboot
|
||||
zImage.pmac
|
||||
zImage.pseries
|
||||
zImage.redboot*
|
||||
zImage.sandpoint
|
||||
zImage.vmode
|
||||
zconf.h
|
||||
|
@@ -62,7 +62,7 @@ src-plat := of.c cuboot-52xx.c cuboot-83xx.c cuboot-85xx.c holly.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 \
|
||||
fixed-head.S ep88xc.c cuboot-hpc2.c ep405.c cuboot-taishan.c \
|
||||
cuboot-katmai.c cuboot-rainier.c
|
||||
cuboot-katmai.c cuboot-rainier.c redboot-8xx.c
|
||||
src-boot := $(src-wlib) $(src-plat) empty.c
|
||||
|
||||
src-boot := $(addprefix $(obj)/, $(src-boot))
|
||||
@@ -208,6 +208,10 @@ image-$(CONFIG_TAISHAN) += cuImage.taishan
|
||||
image-$(CONFIG_KATMAI) += cuImage.katmai
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_REDBOOT),"")
|
||||
image-$(CONFIG_PPC_8xx) += zImage.redboot-8xx
|
||||
endif
|
||||
|
||||
# For 32-bit powermacs, build the COFF and miboot images
|
||||
# as well as the ELF images.
|
||||
ifeq ($(CONFIG_PPC32),y)
|
||||
|
184
arch/powerpc/boot/dts/adder875-redboot.dts
Normal file
184
arch/powerpc/boot/dts/adder875-redboot.dts
Normal file
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Device Tree Source for MPC885 ADS running RedBoot
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/ {
|
||||
model = "Analogue & Micro Adder MPC875";
|
||||
compatible = "analogue-and-micro,adder875";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
aliases {
|
||||
console = &console;
|
||||
ethernet0 = ð0;
|
||||
ethernet1 = ð1;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
PowerPC,875@0 {
|
||||
device_type = "cpu";
|
||||
reg = <0>;
|
||||
d-cache-line-size = <16>;
|
||||
i-cache-line-size = <16>;
|
||||
d-cache-size = <8192>;
|
||||
i-cache-size = <8192>;
|
||||
timebase-frequency = <0>;
|
||||
bus-frequency = <0>;
|
||||
clock-frequency = <0>;
|
||||
interrupts = <15 2>; // decrementer interrupt
|
||||
interrupt-parent = <&PIC>;
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0 0x01000000>;
|
||||
};
|
||||
|
||||
localbus@fa200100 {
|
||||
compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus",
|
||||
"simple-bus";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xfa200100 0x40>;
|
||||
|
||||
ranges = <
|
||||
0 0 0xfe000000 0x00800000
|
||||
2 0 0xfa100000 0x00008000
|
||||
>;
|
||||
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 0x800000>;
|
||||
bank-width = <4>;
|
||||
device-width = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
soc@fa200000 {
|
||||
compatible = "fsl,mpc875-immr", "fsl,pq1-soc", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0xfa200000 0x00004000>;
|
||||
|
||||
// Temporary until code stops depending on it.
|
||||
device_type = "soc";
|
||||
|
||||
// Temporary until get_immrbase() is fixed.
|
||||
reg = <0xfa200000 0x4000>;
|
||||
|
||||
mdio@e00 {
|
||||
compatible = "fsl,mpc875-fec-mdio", "fsl,pq1-fec-mdio";
|
||||
reg = <0xe00 0x188>;
|
||||
#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";
|
||||
};
|
||||
};
|
||||
|
||||
eth0: ethernet@e00 {
|
||||
device_type = "network";
|
||||
compatible = "fsl,mpc875-fec-enet",
|
||||
"fsl,pq1-fec-enet";
|
||||
reg = <0xe00 0x188>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <3 1>;
|
||||
interrupt-parent = <&PIC>;
|
||||
phy-handle = <&PHY0>;
|
||||
linux,network-index = <0>;
|
||||
};
|
||||
|
||||
eth1: ethernet@1e00 {
|
||||
device_type = "network";
|
||||
compatible = "fsl,mpc875-fec-enet",
|
||||
"fsl,pq1-fec-enet";
|
||||
reg = <0x1e00 0x188>;
|
||||
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 0x24>;
|
||||
compatible = "fsl,mpc875-pic", "fsl,pq1-pic";
|
||||
};
|
||||
|
||||
cpm@9c0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "fsl,mpc875-cpm", "fsl,cpm1", "simple-bus";
|
||||
interrupts = <0>; // cpm error interrupt
|
||||
interrupt-parent = <&CPM_PIC>;
|
||||
reg = <0x9c0 0x40>;
|
||||
ranges;
|
||||
|
||||
muram {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x2000 0x2000>;
|
||||
|
||||
data@0 {
|
||||
compatible = "fsl,cpm-muram-data";
|
||||
reg = <0 0x1c00>;
|
||||
};
|
||||
};
|
||||
|
||||
brg@9f0 {
|
||||
compatible = "fsl,mpc875-brg",
|
||||
"fsl,cpm1-brg",
|
||||
"fsl,cpm-brg";
|
||||
reg = <0x9f0 0x10>;
|
||||
};
|
||||
|
||||
CPM_PIC: interrupt-controller@930 {
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
interrupts = <5 2 0 2>;
|
||||
interrupt-parent = <&PIC>;
|
||||
reg = <0x930 0x20>;
|
||||
compatible = "fsl,mpc875-cpm-pic",
|
||||
"fsl,cpm1-pic";
|
||||
};
|
||||
|
||||
console: serial@a80 {
|
||||
device_type = "serial";
|
||||
compatible = "fsl,mpc875-smc-uart",
|
||||
"fsl,cpm1-smc-uart";
|
||||
reg = <0xa80 0x10 0x3e80 0x40>;
|
||||
interrupts = <4>;
|
||||
interrupt-parent = <&CPM_PIC>;
|
||||
fsl,cpm-brg = <1>;
|
||||
fsl,cpm-command = <0x0090>;
|
||||
current-speed = <115200>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
chosen {
|
||||
linux,stdout-path = &console;
|
||||
};
|
||||
};
|
183
arch/powerpc/boot/dts/adder875-uboot.dts
Normal file
183
arch/powerpc/boot/dts/adder875-uboot.dts
Normal file
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* Device Tree Source for MPC885 ADS running U-Boot
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/ {
|
||||
model = "Analogue & Micro Adder MPC875";
|
||||
compatible = "analogue-and-micro,adder875";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
aliases {
|
||||
console = &console;
|
||||
ethernet0 = ð0;
|
||||
ethernet1 = ð1;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
PowerPC,875@0 {
|
||||
device_type = "cpu";
|
||||
reg = <0>;
|
||||
d-cache-line-size = <16>;
|
||||
i-cache-line-size = <16>;
|
||||
d-cache-size = <8192>;
|
||||
i-cache-size = <8192>;
|
||||
timebase-frequency = <0>;
|
||||
bus-frequency = <0>;
|
||||
clock-frequency = <0>;
|
||||
interrupts = <15 2>; // decrementer interrupt
|
||||
interrupt-parent = <&PIC>;
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0 0x01000000>;
|
||||
};
|
||||
|
||||
localbus@ff000100 {
|
||||
compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus",
|
||||
"simple-bus";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xff000100 0x40>;
|
||||
|
||||
ranges = <
|
||||
0 0 0xfe000000 0x01000000
|
||||
>;
|
||||
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 0x800000>;
|
||||
bank-width = <4>;
|
||||
device-width = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
soc@ff000000 {
|
||||
compatible = "fsl,mpc875-immr", "fsl,pq1-soc", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0xff000000 0x00004000>;
|
||||
|
||||
// Temporary until code stops depending on it.
|
||||
device_type = "soc";
|
||||
|
||||
// Temporary until get_immrbase() is fixed.
|
||||
reg = <0xff000000 0x4000>;
|
||||
|
||||
mdio@e00 {
|
||||
compatible = "fsl,mpc875-fec-mdio", "fsl,pq1-fec-mdio";
|
||||
reg = <0xe00 0x188>;
|
||||
#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";
|
||||
};
|
||||
};
|
||||
|
||||
eth0: ethernet@e00 {
|
||||
device_type = "network";
|
||||
compatible = "fsl,mpc875-fec-enet",
|
||||
"fsl,pq1-fec-enet";
|
||||
reg = <0xe00 0x188>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <3 1>;
|
||||
interrupt-parent = <&PIC>;
|
||||
phy-handle = <&PHY0>;
|
||||
linux,network-index = <0>;
|
||||
};
|
||||
|
||||
eth1: ethernet@1e00 {
|
||||
device_type = "network";
|
||||
compatible = "fsl,mpc875-fec-enet",
|
||||
"fsl,pq1-fec-enet";
|
||||
reg = <0x1e00 0x188>;
|
||||
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 0x24>;
|
||||
compatible = "fsl,mpc875-pic", "fsl,pq1-pic";
|
||||
};
|
||||
|
||||
cpm@9c0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "fsl,mpc875-cpm", "fsl,cpm1", "simple-bus";
|
||||
interrupts = <0>; // cpm error interrupt
|
||||
interrupt-parent = <&CPM_PIC>;
|
||||
reg = <0x9c0 0x40>;
|
||||
ranges;
|
||||
|
||||
muram {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x2000 0x2000>;
|
||||
|
||||
data@0 {
|
||||
compatible = "fsl,cpm-muram-data";
|
||||
reg = <0 0x1c00>;
|
||||
};
|
||||
};
|
||||
|
||||
brg@9f0 {
|
||||
compatible = "fsl,mpc875-brg",
|
||||
"fsl,cpm1-brg",
|
||||
"fsl,cpm-brg";
|
||||
reg = <0x9f0 0x10>;
|
||||
};
|
||||
|
||||
CPM_PIC: interrupt-controller@930 {
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
interrupts = <5 2 0 2>;
|
||||
interrupt-parent = <&PIC>;
|
||||
reg = <0x930 0x20>;
|
||||
compatible = "fsl,mpc875-cpm-pic",
|
||||
"fsl,cpm1-pic";
|
||||
};
|
||||
|
||||
console: serial@a80 {
|
||||
device_type = "serial";
|
||||
compatible = "fsl,mpc875-smc-uart",
|
||||
"fsl,cpm1-smc-uart";
|
||||
reg = <0xa80 0x10 0x3e80 0x40>;
|
||||
interrupts = <4>;
|
||||
interrupt-parent = <&CPM_PIC>;
|
||||
fsl,cpm-brg = <1>;
|
||||
fsl,cpm-command = <0x0090>;
|
||||
current-speed = <115200>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
chosen {
|
||||
linux,stdout-path = &console;
|
||||
};
|
||||
};
|
58
arch/powerpc/boot/redboot-8xx.c
Normal file
58
arch/powerpc/boot/redboot-8xx.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* RedBoot firmware support
|
||||
*
|
||||
* 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 "redboot.h"
|
||||
#include "fsl-soc.h"
|
||||
#include "io.h"
|
||||
|
||||
static bd_t bd;
|
||||
BSS_STACK(4096);
|
||||
|
||||
#define MHZ(x) ((x + 500000) / 1000000)
|
||||
|
||||
static void platform_fixups(void)
|
||||
{
|
||||
void *node;
|
||||
|
||||
dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
|
||||
dt_fixup_mac_addresses(bd.bi_enetaddr);
|
||||
dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 16, bd.bi_busfreq);
|
||||
|
||||
node = finddevice("/soc/cpm/brg");
|
||||
if (node) {
|
||||
printf("BRG clock-frequency <- 0x%x (%dMHz)\r\n",
|
||||
bd.bi_busfreq, MHZ(bd.bi_busfreq));
|
||||
setprop(node, "clock-frequency", &bd.bi_busfreq, 4);
|
||||
}
|
||||
}
|
||||
|
||||
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7)
|
||||
{
|
||||
memcpy(&bd, (char *)r3, sizeof(bd));
|
||||
|
||||
if (bd.bi_tag != 0x42444944)
|
||||
return;
|
||||
|
||||
simple_alloc_init(_end,
|
||||
bd.bi_memstart + bd.bi_memsize - (unsigned long)_end,
|
||||
32, 64);
|
||||
|
||||
fdt_init(_dtb_start);
|
||||
serial_console_init();
|
||||
platform_ops.fixups = platform_fixups;
|
||||
|
||||
loader_info.cmdline = (char *)bd.bi_cmdline;
|
||||
loader_info.cmdline_len = strlen((char *)bd.bi_cmdline);
|
||||
}
|
56
arch/powerpc/boot/redboot.h
Normal file
56
arch/powerpc/boot/redboot.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#ifndef _PPC_REDBOOT_H
|
||||
#define _PPC_REDBOOT_H
|
||||
|
||||
//=========================================================================
|
||||
// include/asm-ppc/redboot.h
|
||||
// Copyright (c) 2002, 2003 Gary Thomas (<gary@mlbassoc.com>
|
||||
// Copyright (c) 1997 Dan Malek (dmalek@jlc.net)
|
||||
|
||||
//
|
||||
// Board specific details, as provided by RedBoot
|
||||
//
|
||||
|
||||
/* A Board Information structure that is given to a program when
|
||||
* RedBoot starts it up. Note: not all fields make sense for all
|
||||
* architectures and it's up to the platform specific code to fill
|
||||
* in the details.
|
||||
*/
|
||||
typedef struct bd_info {
|
||||
unsigned int bi_tag; /* Should be 0x42444944 "BDID" */
|
||||
unsigned int bi_size; /* Size of this structure */
|
||||
unsigned int bi_revision; /* revision of this structure */
|
||||
unsigned int bi_bdate; /* bootstrap date, i.e. 0x19971106 */
|
||||
unsigned int bi_memstart; /* Memory start address */
|
||||
unsigned int bi_memsize; /* Memory (end) size in bytes */
|
||||
unsigned int bi_intfreq; /* Internal Freq, in Hz */
|
||||
unsigned int bi_busfreq; /* Bus Freq, in Hz */
|
||||
unsigned int bi_cpmfreq; /* CPM Freq, in Hz */
|
||||
unsigned int bi_brgfreq; /* BRG Freq, in Hz */
|
||||
unsigned int bi_vco; /* VCO Out from PLL */
|
||||
unsigned int bi_pci_freq; /* PCI Freq, in Hz */
|
||||
unsigned int bi_baudrate; /* Default console baud rate */
|
||||
unsigned int bi_immr; /* IMMR when called from boot rom */
|
||||
unsigned char bi_enetaddr[6];
|
||||
unsigned int bi_flashbase; /* Physical address of FLASH memory */
|
||||
unsigned int bi_flashsize; /* Length of FLASH memory */
|
||||
int bi_flashwidth; /* Width (8,16,32,64) */
|
||||
unsigned char *bi_cmdline; /* Pointer to command line */
|
||||
unsigned char bi_esa[3][6]; /* Ethernet station addresses */
|
||||
unsigned int bi_ramdisk_begin, bi_ramdisk_end;
|
||||
struct { /* Information about [main] video screen */
|
||||
short x_res; /* Horizontal resolution in pixels */
|
||||
short y_res; /* Vertical resolution in pixels */
|
||||
short bpp; /* Bits/pixel */
|
||||
short mode; /* Type of pixels (packed, indexed) */
|
||||
unsigned long fb; /* Pointer to frame buffer (pixel) memory */
|
||||
} bi_video;
|
||||
void (*bi_cputc)(char); /* Write a character to the RedBoot console */
|
||||
char (*bi_cgetc)(void); /* Read a character from the RedBoot console */
|
||||
int (*bi_ctstc)(void); /* Test for input on the RedBoot console */
|
||||
} bd_t;
|
||||
|
||||
#define BI_REV 0x0102 /* Version 1.02 */
|
||||
|
||||
#define bi_pci_busfreq bi_pci_freq
|
||||
#define bi_immr_base bi_immr
|
||||
#endif
|
@@ -168,7 +168,7 @@ ps3)
|
||||
ksection=.kernel:vmlinux.bin
|
||||
isection=.kernel:initrd
|
||||
;;
|
||||
ep88xc|ep405)
|
||||
ep88xc|ep405|redboot*)
|
||||
platformo="$object/fixed-head.o $object/$platform.o"
|
||||
binary=y
|
||||
;;
|
||||
|
Reference in New Issue
Block a user