On Thu, 06 Dec 2007 19:00:18 +1100 Benjamin Herrenschmidt <[EMAIL PROTECTED]> wrote:
> From: Hugh Blemings <[EMAIL PROTECTED]> > > > Signed-off-by: Hugh Blemings <[EMAIL PROTECTED]> > Signed-off-by: Benjamin Herrenschmidt <[EMAIL PROTECTED]> > --- > Index: linux-work/arch/powerpc/platforms/44x/Kconfig > =================================================================== > --- linux-work.orig/arch/powerpc/platforms/44x/Kconfig 2007-12-03 > 12:05:58.000000000 +1100 > +++ linux-work/arch/powerpc/platforms/44x/Kconfig 2007-12-03 > 13:52:59.000000000 +1100 > @@ -22,6 +22,14 @@ config SEQUOIA > help > This option enables support for the AMCC PPC440EPX evaluation board. > > +config TAISHAN > + bool "Taishan" > + depends on 44x > + default n > + select 440GX > + help > + This option enables support for the IBM PPC440GX "Taishan" evaluation > board. AMCC Taishan board. > + > #config LUAN > # bool "Luan" > # depends on 44x > @@ -58,6 +66,10 @@ config 440GP > > config 440GX > bool > + select IBM_NEW_EMAC_EMAC4 > + select IBM_NEW_EMAC_RGMII > + select IBM_NEW_EMAC_ZMII #test only > + select IBM_NEW_EMAC_TAH #test only > > config 440SP > bool > Index: linux-work/arch/powerpc/platforms/44x/Makefile > =================================================================== > --- linux-work.orig/arch/powerpc/platforms/44x/Makefile 2007-12-03 > 11:48:01.000000000 +1100 > +++ linux-work/arch/powerpc/platforms/44x/Makefile 2007-12-03 > 13:52:59.000000000 +1100 > @@ -1,4 +1,5 @@ > obj-$(CONFIG_44x) := misc_44x.o > obj-$(CONFIG_EBONY) += ebony.o > +obj-$(CONFIG_TAISHAN) += taishan.o > obj-$(CONFIG_BAMBOO) += bamboo.o > obj-$(CONFIG_SEQUOIA) += sequoia.o > Index: linux-work/arch/powerpc/platforms/44x/taishan.c > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ linux-work/arch/powerpc/platforms/44x/taishan.c 2007-12-03 > 13:39:01.000000000 +1100 > @@ -0,0 +1,74 @@ > +/* > + * Taishan board specific routines based off ebony.c code > + * original copyrights below > + * > + * Matt Porter <[EMAIL PROTECTED]> > + * Copyright 2002-2005 MontaVista Software Inc. > + * > + * Eugene Surovegin <[EMAIL PROTECTED]> or <[EMAIL PROTECTED]> > + * Copyright (c) 2003-2005 Zultys Technologies > + * > + * Rewritten and ported to the merged powerpc tree: > + * Copyright 2007 David Gibson <[EMAIL PROTECTED]>, IBM Corporation. > + * > + * Modified from ebony.c for taishan: > + * Copyright 2007 Hugh Blemings <[EMAIL PROTECTED]>, IBM Corporation. > + * > + * 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. > + */ > + > +#include <linux/init.h> > +#include <linux/of_platform.h> > + > +#include <asm/machdep.h> > +#include <asm/prom.h> > +#include <asm/udbg.h> > +#include <asm/time.h> > +#include <asm/uic.h> > +#include <asm/pci-bridge.h> > + > +#include "44x.h" > + > +static struct of_device_id taishan_of_bus[] = { > + { .compatible = "ibm,plb4", }, > + { .compatible = "ibm,opb", }, > + { .compatible = "ibm,ebc", }, > + {}, > +}; > + > +static int __init taishan_device_probe(void) > +{ > + if (!machine_is(taishan)) > + return 0; > + > + of_platform_bus_probe(NULL, taishan_of_bus, NULL); > + > + return 0; > +} > +device_initcall(taishan_device_probe); > + > +/* > + * Called very early, MMU is off, device-tree isn't unflattened > + */ > +static int __init taishan_probe(void) > +{ > + unsigned long root = of_get_flat_dt_root(); > + > + if (!of_flat_dt_is_compatible(root, "ibm,taishan")) > + return 0; amcc,taishan > + > + return 1; > +} > + > +define_machine(taishan) { > + .name = "Taishan", > + .probe = taishan_probe, > + .progress = udbg_progress, > + .init_IRQ = uic_init_tree, > + .get_irq = uic_get_irq, > + .restart = ppc44x_reset_system, > + .calibrate_decr = generic_calibrate_decr, > +}; > Index: linux-work/arch/powerpc/boot/dts/taishan.dts > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ linux-work/arch/powerpc/boot/dts/taishan.dts 2007-12-03 > 13:39:01.000000000 +1100 > @@ -0,0 +1,414 @@ > +/* > + * Device Tree Source for IBM/AMCC Taishan > + * <snip> > + * > + * To build: > + * dtc -I dts -O asm -o taishan.S -b 0 taishan.dts > + * dtc -I dts -O dtb -o taishan.dtb -b 0 taishan.dts Remove this please. It's not really needed anymore. > + */ > + > +/ { > + #address-cells = <2>; > + #size-cells = <1>; > + model = "ibm,taishan"; > + compatible = "ibm,taishan"; amcc,taishan > + dcr-parent = <&/cpus/PowerPC,[EMAIL PROTECTED]>; > + > + cpus { > + #address-cells = <1>; > + #size-cells = <0>; > + > + PowerPC,[EMAIL PROTECTED] { > + device_type = "cpu"; > + reg = <0>; > + clock-frequency = <2FAF0800>; // 800MHz > + timebase-frequency = <0>; // Filled in by zImage > + i-cache-line-size = <32>; > + d-cache-line-size = <32>; > + i-cache-size = <8000>; /* 32 kB */ > + d-cache-size = <8000>; /* 32 kB */ > + dcr-controller; > + dcr-access-method = "native"; > + }; > + }; > + > + memory { > + device_type = "memory"; > + reg = <0 0 0>; // Filled in by zImage > + }; > + > + > + UICB0: interrupt-controller-base { > + compatible = "ibm,uic-440gx", "ibm,uic"; > + interrupt-controller; > + cell-index = <3>; > + dcr-reg = <200 009>; > + #address-cells = <0>; > + #size-cells = <0>; > + #interrupt-cells = <2>; > + }; > + > + > + UIC0: interrupt-controller0 { > + compatible = "ibm,uic-440gx", "ibm,uic"; /* Should be AMCC ? */ This I think is fine as ibm,uic. Unless AMCC actually changed the UIC to have differences, it was found on the IBM boards first :) > + interrupt-controller; > + cell-index = <0>; > + dcr-reg = <0c0 009>; > + #address-cells = <0>; > + #size-cells = <0>; > + #interrupt-cells = <2>; > + interrupts = <01 4 00 4>; /* cascade - first non-critical */ > + interrupt-parent = <&UICB0>; > + > + }; > + > + UIC1: interrupt-controller1 { > + compatible = "ibm,uic-440gx", "ibm,uic"; > + interrupt-controller; > + cell-index = <1>; > + dcr-reg = <0d0 009>; > + #address-cells = <0>; > + #size-cells = <0>; > + #interrupt-cells = <2>; > + interrupts = <03 4 02 4>; /* cascade */ > + interrupt-parent = <&UICB0>; > + }; > + > + UIC2: interrupt-controller2 { > + compatible = "ibm,uic-440gx", "ibm,uic"; > + interrupt-controller; > + cell-index = <2>; /* was 1 */ > + dcr-reg = <210 009>; > + #address-cells = <0>; > + #size-cells = <0>; > + #interrupt-cells = <2>; > + interrupts = <05 4 04 4>; /* cascade */ > + interrupt-parent = <&UICB0>; > + }; > + > + > + CPC0: cpc { > + compatible = "ibm,cpc-440gp"; > + dcr-reg = <0b0 003 0e0 010>; > + // FIXME: anything else? > + }; > + > + plb { > + compatible = "ibm,plb-440gx", "ibm,plb4"; > + #address-cells = <2>; > + #size-cells = <1>; > + ranges; > + clock-frequency = <9896800>; // 160MHz > + > + SDRAM0: memory-controller { > + compatible = "ibm,sdram-440gp"; > + dcr-reg = <010 2>; > + // FIXME: anything else? > + }; > + > + SRAM0: sram { > + compatible = "ibm,sram-440gp"; > + dcr-reg = <020 8 00a 1>; > + }; > + > + DMA0: dma { > + // FIXME: ??? > + compatible = "ibm,dma-440gp"; > + dcr-reg = <100 027>; > + }; > + > + MAL0: mcmal { > + compatible = "ibm,mcmal-440gx", "ibm,mcmal2"; > + dcr-reg = <180 62>; > + num-tx-chans = <4>; > + num-rx-chans = <4>; > + interrupt-parent = <&MAL0>; > + interrupts = <0 1 2 3 4>; > + #interrupt-cells = <1>; > + #address-cells = <0>; > + #size-cells = <0>; > + interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 > + /*RXEOB*/ 1 &UIC0 b 4 > + /*SERR*/ 2 &UIC1 0 4 > + /*TXDE*/ 3 &UIC1 1 4 > + /*RXDE*/ 4 &UIC1 2 4>; > + interrupt-map-mask = <ffffffff>; > + }; > + > + POB0: opb { > + compatible = "ibm,opb-440gx", "ibm,opb"; > + #address-cells = <1>; > + #size-cells = <1>; > + /* Wish there was a nicer way of specifying a full > 32-bit > + range */ > + ranges = <00000000 1 00000000 80000000 > + 80000000 1 80000000 80000000>; > + dcr-reg = <090 00b>; > + interrupt-parent = <&UIC1>; > + interrupts = <7 4>; > + clock-frequency = <4C4B400>; // 80MHz > + > + > + /* Put EBC0 back **FIXME** */ Hrm? > + > + EBC0: ebc { > + compatible = "ibm,ebc-440gx", "ibm,ebc"; > + dcr-reg = <012 2>; > + #address-cells = <2>; > + #size-cells = <1>; > + clock-frequency = <4C4B400>; // 80MHz > + // ranges property is supplied by zImage > + // based on firmware's configuration of the > + // EBC bridge > + interrupts = <5 4>; > + interrupt-parent = <&UIC1>; > + > +// [EMAIL PROTECTED],80000 { > +// device_type = "rom"; > +// compatible = "direct-mapped"; > +// probe-type = "JEDEC"; > +// bank-width = <1>; > +// partitions = <0 80000>; > +// partition-names = "OpenBIOS"; > +// reg = <0 80000 80000>; > +// }; You can probably just omit the child EBC nodes for now. Adding them when they're right is pretty easy. > + > +// [EMAIL PROTECTED],0 { > +// /* NVRAM & RTC */ > +// compatible = "ds1743"; > +// reg = <1 0 2000>; > +// }; > + > +// [EMAIL PROTECTED],0 { > +// device_type = "rom"; > +// compatible = "direct-mapped"; > +// probe-type = "JEDEC"; > +// bank-width = <1>; > +// partitions = <0 380000 > +// 380000 80000>; > +// partition-names = "fs", "firmware"; > +// reg = <2 0 400000>; > +// }; > + > +// [EMAIL PROTECTED],0 { > +// reg = <3 0 10>; > +// }; > + > +// [EMAIL PROTECTED],0 { > +// compatible = "Ebony-FPGA"; > +// reg = <7 0 10>; > +// }; > + }; > + > + > + PCIX0: [EMAIL PROTECTED] { > + device_type = "pci"; > + #interrupt-cells = <1>; > + #size-cells = <2>; > + #address-cells = <3>; > + compatible = "ibm,plb440gp-pcix", "ibm,plb-pcix"; > + primary; > + large-inbound-windows; > + enable-msi-hole; > + reg = <2 0ec00000 8 /* Config space access */ > + 0 0 0 /* no IACK cycles */ > + 2 0ed00000 4 /* Special cycles */ > + 2 0ec80000 100 /* Internal registers */ > + 2 0ec80100 fc>; /* Internal messaging registers > */ > + > + /* Outbound ranges, one memory and one IO, > + * later cannot be changed > + */ > + ranges = <02000000 0 80000000 00000003 80000000 0 > 80000000 > + 01000000 0 00000000 00000002 08000000 0 > 00010000>; > + > + /* Inbound 2GB range starting at 0 */ > + dma-ranges = <42000000 0 0 0 0 0 80000000>; > + > + /* Ebony has all 4 IRQ pins tied together per slot */ This isn't an Ebony board. Does Taishan do the same? > + interrupt-map-mask = <f800 0 0 7>; > + interrupt-map = < > + /* IDSEL 1 */ > + 0800 0 0 1 &UIC0 17 8 > + 0800 0 0 2 &UIC0 18 8 > + 0800 0 0 3 &UIC0 19 8 > + 0800 0 0 4 &UIC0 1a 8 > + > + /* IDSEL 2 */ > + 1000 0 0 1 &UIC0 18 8 > + 1000 0 0 2 &UIC0 19 8 > + 1000 0 0 3 &UIC0 1a 8 > + 1000 0 0 4 &UIC0 17 8 > + >; > + }; > + }; > + > + chosen { > + linux,stdout-path = "/plb/opb/[EMAIL PROTECTED]"; > + }; > +}; josh _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev