Merge branch 'master' of git://git.denx.de/u-boot-mpc5xxx
authorWolfgang Denk <wd@denx.de>
Wed, 27 Aug 2008 22:39:27 +0000 (00:39 +0200)
committerWolfgang Denk <wd@denx.de>
Wed, 27 Aug 2008 22:39:27 +0000 (00:39 +0200)
144 files changed:
MAKEALL
Makefile
board/atum8548/Makefile
board/atum8548/atum8548.c
board/atum8548/ddr.c [new file with mode: 0644]
board/bf537-stamp/bf537-stamp.c
board/freescale/mpc8536ds/Makefile [new file with mode: 0644]
board/freescale/mpc8536ds/config.mk [new file with mode: 0644]
board/freescale/mpc8536ds/ddr.c [new file with mode: 0644]
board/freescale/mpc8536ds/law.c [new file with mode: 0644]
board/freescale/mpc8536ds/mpc8536ds.c [new file with mode: 0644]
board/freescale/mpc8536ds/tlb.c [new file with mode: 0644]
board/freescale/mpc8536ds/u-boot.lds [new file with mode: 0644]
board/freescale/mpc8540ads/Makefile
board/freescale/mpc8540ads/ddr.c [new file with mode: 0644]
board/freescale/mpc8540ads/mpc8540ads.c
board/freescale/mpc8541cds/Makefile
board/freescale/mpc8541cds/ddr.c [new file with mode: 0644]
board/freescale/mpc8541cds/mpc8541cds.c
board/freescale/mpc8544ds/Makefile
board/freescale/mpc8544ds/ddr.c [new file with mode: 0644]
board/freescale/mpc8544ds/mpc8544ds.c
board/freescale/mpc8548cds/Makefile
board/freescale/mpc8548cds/ddr.c [new file with mode: 0644]
board/freescale/mpc8548cds/mpc8548cds.c
board/freescale/mpc8555cds/Makefile
board/freescale/mpc8555cds/ddr.c [new file with mode: 0644]
board/freescale/mpc8555cds/mpc8555cds.c
board/freescale/mpc8560ads/Makefile
board/freescale/mpc8560ads/ddr.c [new file with mode: 0644]
board/freescale/mpc8560ads/mpc8560ads.c
board/freescale/mpc8568mds/Makefile
board/freescale/mpc8568mds/ddr.c [new file with mode: 0644]
board/freescale/mpc8568mds/mpc8568mds.c
board/freescale/mpc8572ds/Makefile [new file with mode: 0644]
board/freescale/mpc8572ds/config.mk [new file with mode: 0644]
board/freescale/mpc8572ds/ddr.c [new file with mode: 0644]
board/freescale/mpc8572ds/law.c [new file with mode: 0644]
board/freescale/mpc8572ds/mpc8572ds.c [new file with mode: 0644]
board/freescale/mpc8572ds/tlb.c [new file with mode: 0644]
board/freescale/mpc8572ds/u-boot.lds [new file with mode: 0644]
board/freescale/mpc8610hpcd/mpc8610hpcd.c
board/mpc8540eval/Makefile
board/mpc8540eval/ddr.c [new file with mode: 0644]
board/mpc8540eval/mpc8540eval.c
board/pm854/Makefile
board/pm854/ddr.c [new file with mode: 0644]
board/pm854/pm854.c
board/pm856/Makefile
board/pm856/ddr.c [new file with mode: 0644]
board/pm856/pm856.c
board/sbc8548/Makefile
board/sbc8548/ddr.c [new file with mode: 0644]
board/sbc8548/sbc8548.c
board/sbc8560/Makefile
board/sbc8560/ddr.c [new file with mode: 0644]
board/sbc8560/sbc8560.c
board/sbc8560/u-boot.lds
board/sl8245/sl8245.c
board/socrates/Makefile
board/socrates/ddr.c [new file with mode: 0644]
board/socrates/sdram.c
board/stxgp3/Makefile
board/stxgp3/ddr.c [new file with mode: 0644]
board/stxgp3/stxgp3.c
board/stxgp3/u-boot.lds
board/stxssa/Makefile
board/stxssa/ddr.c [new file with mode: 0644]
board/stxssa/stxssa.c
board/stxssa/u-boot.lds
common/cmd_net.c
cpu/leon2/cpu.c
cpu/leon3/cpu.c
cpu/mcf523x/cpu.c
cpu/mcf52x2/cpu.c
cpu/mcf532x/cpu.c
cpu/mcf5445x/cpu.c
cpu/mcf547x_8x/cpu.c
cpu/mpc85xx/Makefile
cpu/mpc85xx/cpu.c
cpu/mpc85xx/cpu_init.c
cpu/mpc85xx/ddr-gen1.c [new file with mode: 0644]
cpu/mpc85xx/ddr-gen2.c [new file with mode: 0644]
cpu/mpc85xx/ddr-gen3.c [new file with mode: 0644]
cpu/mpc85xx/interrupts.c
cpu/mpc85xx/mpc8536_serdes.c [new file with mode: 0644]
cpu/mpc85xx/pci.c
cpu/mpc85xx/spd_sdram.c [deleted file]
cpu/mpc85xx/speed.c
cpu/mpc85xx/tlb.c
drivers/misc/fsl_law.c
drivers/net/bfin_mac.c
drivers/net/dm9000x.c
drivers/net/dm9000x.h
drivers/net/fsl_mcdmafec.c
drivers/net/greth.c
drivers/net/mcffec.c
drivers/net/sk98lin/Makefile
drivers/net/sk98lin/skaddr.c
drivers/net/sk98lin/skcsum.c
drivers/net/sk98lin/skge.c
drivers/net/sk98lin/skgehwt.c
drivers/net/sk98lin/skgeinit.c
drivers/net/sk98lin/skgemib.c
drivers/net/sk98lin/skgepnmi.c
drivers/net/sk98lin/skgesirq.c
drivers/net/sk98lin/ski2c.c
drivers/net/sk98lin/sklm80.c
drivers/net/sk98lin/skproc.c
drivers/net/sk98lin/skqueue.c
drivers/net/sk98lin/skrlmt.c
drivers/net/sk98lin/sktimer.c
drivers/net/sk98lin/skvpd.c
drivers/net/sk98lin/skxmac2.c
drivers/net/sk98lin/uboot_drv.c
drivers/net/sk98lin/uboot_skb.c
include/asm-ppc/global_data.h
include/asm-ppc/immap_85xx.h
include/asm-ppc/mmu.h
include/asm-ppc/processor.h
include/configs/ATUM8548.h
include/configs/MPC8536DS.h [new file with mode: 0644]
include/configs/MPC8540ADS.h
include/configs/MPC8540EVAL.h
include/configs/MPC8541CDS.h
include/configs/MPC8544DS.h
include/configs/MPC8548CDS.h
include/configs/MPC8555CDS.h
include/configs/MPC8560ADS.h
include/configs/MPC8568MDS.h
include/configs/MPC8572DS.h [new file with mode: 0644]
include/configs/PM854.h
include/configs/PM856.h
include/configs/SBC8540.h
include/configs/TQM85xx.h
include/configs/sbc8548.h
include/configs/sbc8560.h
include/configs/socrates.h
include/configs/stxgp3.h
include/configs/stxssa.h
include/pci_ids.h
net/bootp.c
net/bootp.h
net/eth.c

diff --git a/MAKEALL b/MAKEALL
index e807063333a8a17ace6abc9809d41f3902616616..e382947353e6d9309139aed326b1373f5e3bed15 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -346,6 +346,7 @@ LIST_83xx="         \
 
 LIST_85xx="            \
        ATUM8548        \
+       MPC8536DS       \
        MPC8540ADS      \
        MPC8540EVAL     \
        MPC8541CDS      \
@@ -354,6 +355,7 @@ LIST_85xx="         \
        MPC8555CDS      \
        MPC8560ADS      \
        MPC8568MDS      \
+       MPC8572DS       \
        PM854           \
        PM856           \
        sbc8540         \
index 692f9f606eb21a41cef43027de6e2a1427f62652..0f82e714a248832ff4fec5948e1e4aeb62353db3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2209,6 +2209,9 @@ TQM834x_config:   unconfig
 ATUM8548_config:       unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx atum8548
 
+MPC8536DS_config:       unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8536ds freescale
+
 MPC8540ADS_config:     unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8540ads freescale
 
@@ -2268,6 +2271,9 @@ MPC8555CDS_config:        unconfig
 MPC8568MDS_config:     unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8568mds freescale
 
+MPC8572DS_config:       unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8572ds freescale
+
 PM854_config:  unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx pm854
 
index d2e689f1faf64963d5c5ee0d2d56b99bb271b166..b99130819107b4de59f5801e7fe3400dbbd4115f 100644 (file)
@@ -29,10 +29,13 @@ endif
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-$(CONFIG_FSL_DDR2) += ddr.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
index 34f4599048a3fc825aa0b69dae8cdc7e32b45ca8..337cf31ad51b02cc0260795e5e4dbe7887c295e4 100644 (file)
@@ -29,7 +29,9 @@
 #include <asm/processor.h>
 #include <asm/immap_85xx.h>
 #include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <asm/io.h>
+#include <asm/mmu.h>
 #include <spd_sdram.h>
 #include <miiphy.h>
 #include <libfdt.h>
@@ -106,8 +108,10 @@ initdram(int board_type)
        puts("Initializing\n");
 
 #if defined(CONFIG_SPD_EEPROM)
-       puts("spd_sdram\n");
-       dram_size = spd_sdram ();
+       puts("fsl_ddr_sdram\n");
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 #else
        puts("fixed_sdram\n");
        dram_size = fixed_sdram ();
diff --git a/board/atum8548/ddr.c b/board/atum8548/ddr.c
new file mode 100644 (file)
index 0000000..f07d746
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                       unsigned int ctrl_num)
+{
+       unsigned int i;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 7;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index cd7a04dbfa031b23880ef575a05cf465c4c60422..a9b7a68c549914c5840576ca07ffe8ecb0270932 100644 (file)
@@ -154,6 +154,16 @@ int misc_init_r(void)
 }
 #endif                         /* CONFIG_MISC_INIT_R */
 
+#if defined(CONFIG_BFIN_MAC)
+
+extern int bfin_EMAC_initialize(bd_t *bis);
+
+int board_eth_init(bd_t *bis)
+{
+       return bfin_EMAC_initialize(bis);
+}
+#endif
+
 #ifdef CONFIG_POST
 /* Using sw10-PF5 as the hotkey */
 int post_hotkeys_pressed(void)
diff --git a/board/freescale/mpc8536ds/Makefile b/board/freescale/mpc8536ds/Makefile
new file mode 100644 (file)
index 0000000..7fcbdaa
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Copyright 2008 Freescale Semiconductor.
+# (C) Copyright 2001-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(OBJS) $(SOBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/mpc8536ds/config.mk b/board/freescale/mpc8536ds/config.mk
new file mode 100644 (file)
index 0000000..9775ff4
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# Copyright 2008 Freescale Semiconductor.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+#
+# mpc8536ds board
+#
+ifndef TEXT_BASE
+TEXT_BASE = 0xeff80000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_E500=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC8536=1
diff --git a/board/freescale/mpc8536ds/ddr.c b/board/freescale/mpc8536ds/ddr.c
new file mode 100644 (file)
index 0000000..2e88c79
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 7;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
diff --git a/board/freescale/mpc8536ds/law.c b/board/freescale/mpc8536ds/law.c
new file mode 100644 (file)
index 0000000..cdf5215
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+struct law_entry law_table[] = {
+       SET_LAW(CFG_PCI1_MEM_PHYS, LAW_SIZE_256M, LAW_TRGT_IF_PCI),
+       SET_LAW(CFG_PCI1_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCI),
+       SET_LAW(CFG_FLASH_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW(CFG_PCIE1_MEM_PHYS, LAWAR_SIZE_128M, LAW_TRGT_IF_PCIE_1),
+       SET_LAW(CFG_PCIE1_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_1),
+       SET_LAW(CFG_PCIE2_MEM_PHYS, LAWAR_SIZE_128M, LAW_TRGT_IF_PCIE_2),
+       SET_LAW(CFG_PCIE2_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_2),
+       SET_LAW(CFG_PCIE3_MEM_PHYS, LAWAR_SIZE_512M, LAW_TRGT_IF_PCIE_3),
+       SET_LAW(CFG_PCIE3_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_3),
+       SET_LAW(PIXIS_BASE, LAW_SIZE_4K, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8536ds/mpc8536ds.c b/board/freescale/mpc8536ds/mpc8536ds.c
new file mode 100644 (file)
index 0000000..8216c70
--- /dev/null
@@ -0,0 +1,653 @@
+/*
+ * Copyright 2008 Freescale Semiconductor.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <pci.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#include <asm/immap_85xx.h>
+#include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/io.h>
+#include <spd.h>
+#include <miiphy.h>
+#include <libfdt.h>
+#include <spd_sdram.h>
+#include <fdt_support.h>
+
+#include "../common/pixis.h"
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+
+phys_size_t fixed_sdram(void);
+
+int checkboard (void)
+{
+       printf ("Board: MPC8536DS, System ID: 0x%02x, "
+               "System Version: 0x%02x, FPGA Version: 0x%02x\n",
+               in8(PIXIS_BASE + PIXIS_ID), in8(PIXIS_BASE + PIXIS_VER),
+               in8(PIXIS_BASE + PIXIS_PVER));
+       return 0;
+}
+
+phys_size_t
+initdram(int board_type)
+{
+       phys_size_t dram_size = 0;
+
+       puts("Initializing....");
+
+#ifdef CONFIG_SPD_EEPROM
+       dram_size = fsl_ddr_sdram();
+
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+
+       dram_size *= 0x100000;
+#else
+       dram_size = fixed_sdram();
+#endif
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+       /*
+        * Initialize and enable DDR ECC.
+        */
+       ddr_enable_ecc(dram_size);
+#endif
+       puts("    DDR: ");
+       return dram_size;
+}
+
+#if !defined(CONFIG_SPD_EEPROM)
+/*
+ * Fixed sdram init -- doesn't use serial presence detect.
+ */
+
+phys_size_t fixed_sdram (void)
+{
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_ddr_t *ddr= &immap->im_ddr;
+       uint d_init;
+
+       ddr->cs0_bnds = CFG_DDR_CS0_BNDS;
+       ddr->cs0_config = CFG_DDR_CS0_CONFIG;
+
+       ddr->timing_cfg_3 = CFG_DDR_TIMING_3;
+       ddr->timing_cfg_0 = CFG_DDR_TIMING_0;
+       ddr->timing_cfg_1 = CFG_DDR_TIMING_1;
+       ddr->timing_cfg_2 = CFG_DDR_TIMING_2;
+       ddr->sdram_mode = CFG_DDR_MODE_1;
+       ddr->sdram_mode_2 = CFG_DDR_MODE_2;
+       ddr->sdram_interval = CFG_DDR_INTERVAL;
+       ddr->sdram_data_init = CFG_DDR_DATA_INIT;
+       ddr->sdram_clk_cntl = CFG_DDR_CLK_CTRL;
+       ddr->sdram_cfg_2 = CFG_DDR_CONTROL2;
+
+#if defined (CONFIG_DDR_ECC)
+       ddr->err_int_en = CFG_DDR_ERR_INT_EN;
+       ddr->err_disable = CFG_DDR_ERR_DIS;
+       ddr->err_sbe = CFG_DDR_SBE;
+#endif
+       asm("sync;isync");
+
+       udelay(500);
+
+       ddr->sdram_cfg = CFG_DDR_CONTROL;
+
+#if defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+       d_init = 1;
+       debug("DDR - 1st controller: memory initializing\n");
+       /*
+        * Poll until memory is initialized.
+        * 512 Meg at 400 might hit this 200 times or so.
+        */
+       while ((ddr->sdram_cfg_2 & (d_init << 4)) != 0) {
+               udelay(1000);
+       }
+       debug("DDR: memory initialized\n\n");
+       asm("sync; isync");
+       udelay(500);
+#endif
+
+       return 512 * 1024 * 1024;
+}
+
+#endif
+
+#ifdef CONFIG_PCI1
+static struct pci_controller pci1_hose;
+#endif
+
+#ifdef CONFIG_PCIE1
+static struct pci_controller pcie1_hose;
+#endif
+
+#ifdef CONFIG_PCIE2
+static struct pci_controller pcie2_hose;
+#endif
+
+#ifdef CONFIG_PCIE3
+static struct pci_controller pcie3_hose;
+#endif
+
+int first_free_busno=0;
+
+void
+pci_init_board(void)
+{
+       volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+       uint devdisr = gur->devdisr;
+       uint sdrs2_io_sel =
+               (gur->pordevsr & MPC85xx_PORDEVSR_SRDS2_IO_SEL) >> 27;
+       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
+       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
+
+       debug("   pci_init_board: devdisr=%x, sdrs2_io_sel=%x, io_sel=%x,\
+               host_agent=%x\n", devdisr, sdrs2_io_sel, io_sel, host_agent);
+
+       if (sdrs2_io_sel == 7)
+               printf("    Serdes2 disalbed\n");
+       else if (sdrs2_io_sel == 4) {
+               printf("    eTSEC1 is in sgmii mode.\n");
+               printf("    eTSEC3 is in sgmii mode.\n");
+       } else if (sdrs2_io_sel == 6)
+               printf("    eTSEC1 is in sgmii mode.\n");
+
+#ifdef CONFIG_PCIE3
+{
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE3_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pcie3_hose;
+       int pcie_ep = (host_agent == 1);
+       int pcie_configured  = (io_sel == 7);
+
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+               printf ("\n    PCIE3 connected to Slot3 as %s (base address %x)",
+                       pcie_ep ? "End Point" : "Root Complex",
+                       (uint)pci);
+               if (pci->pme_msg_det) {
+                       pci->pme_msg_det = 0xffffffff;
+                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+               }
+               printf ("\n");
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCIE3_MEM_BASE,
+                              CFG_PCIE3_MEM_PHYS,
+                              CFG_PCIE3_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCIE3_IO_BASE,
+                              CFG_PCIE3_IO_PHYS,
+                              CFG_PCIE3_IO_SIZE,
+                              PCI_REGION_IO);
+
+               hose->region_count = 3;
+
+               hose->first_busno=first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+
+               first_free_busno=hose->last_busno+1;
+               printf ("    PCIE3 on bus %02x - %02x\n",
+                       hose->first_busno,hose->last_busno);
+       } else {
+               printf ("    PCIE3: disabled\n");
+       }
+
+ }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE3; /* disable */
+#endif
+
+#ifdef CONFIG_PCIE1
+ {
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pcie1_hose;
+       int pcie_ep = (host_agent == 5);
+       int pcie_configured  = (io_sel == 2 || io_sel == 3
+                               || io_sel == 5 || io_sel == 7);
+
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+               printf ("\n    PCIE1 connected to Slot1 as %s (base address %x)",
+                       pcie_ep ? "End Point" : "Root Complex",
+                       (uint)pci);
+               if (pci->pme_msg_det) {
+                       pci->pme_msg_det = 0xffffffff;
+                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+               }
+               printf ("\n");
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCIE1_MEM_BASE,
+                              CFG_PCIE1_MEM_PHYS,
+                              CFG_PCIE1_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCIE1_IO_BASE,
+                              CFG_PCIE1_IO_PHYS,
+                              CFG_PCIE1_IO_SIZE,
+                              PCI_REGION_IO);
+
+               hose->region_count = 3;
+#ifdef CFG_PCIE1_MEM_BASE2
+               /* outbound memory */
+               pci_set_region(hose->regions + 3,
+                              CFG_PCIE1_MEM_BASE2,
+                              CFG_PCIE1_MEM_PHYS2,
+                              CFG_PCIE1_MEM_SIZE2,
+                              PCI_REGION_MEM);
+               hose->region_count++;
+#endif
+               hose->first_busno=first_free_busno;
+
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+
+               first_free_busno=hose->last_busno+1;
+               printf("    PCIE1 on bus %02x - %02x\n",
+                      hose->first_busno,hose->last_busno);
+
+       } else {
+               printf ("    PCIE1: disabled\n");
+       }
+
+ }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+#endif
+
+#ifdef CONFIG_PCIE2
+ {
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE2_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pcie2_hose;
+       int pcie_ep = (host_agent == 3);
+       int pcie_configured  = (io_sel == 5 || io_sel == 7);
+
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+               printf ("\n    PCIE2 connected to Slot 2 as %s (base address %x)",
+                       pcie_ep ? "End Point" : "Root Complex",
+                       (uint)pci);
+               if (pci->pme_msg_det) {
+                       pci->pme_msg_det = 0xffffffff;
+                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+               }
+               printf ("\n");
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCIE2_MEM_BASE,
+                              CFG_PCIE2_MEM_PHYS,
+                              CFG_PCIE2_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCIE2_IO_BASE,
+                              CFG_PCIE2_IO_PHYS,
+                              CFG_PCIE2_IO_SIZE,
+                              PCI_REGION_IO);
+
+               hose->region_count = 3;
+#ifdef CFG_PCIE2_MEM_BASE2
+               /* outbound memory */
+               pci_set_region(hose->regions + 3,
+                              CFG_PCIE2_MEM_BASE2,
+                              CFG_PCIE2_MEM_PHYS2,
+                              CFG_PCIE2_MEM_SIZE2,
+                              PCI_REGION_MEM);
+               hose->region_count++;
+#endif
+               hose->first_busno=first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+               first_free_busno=hose->last_busno+1;
+               printf ("    PCIE2 on bus %02x - %02x\n",
+                       hose->first_busno,hose->last_busno);
+
+       } else {
+               printf ("    PCIE2: disabled\n");
+       }
+
+ }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE2; /* disable */
+#endif
+
+
+#ifdef CONFIG_PCI1
+{
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCI1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pci1_hose;
+
+       uint pci_agent = (host_agent == 6);
+       uint pci_speed = 66666000; /*get_clock_freq (); PCI PSPEED in [4:5] */
+       uint pci_32 = 1;
+       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
+       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
+
+
+       if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
+               printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %x)\n",
+                       (pci_32) ? 32 : 64,
+                       (pci_speed == 33333000) ? "33" :
+                       (pci_speed == 66666000) ? "66" : "unknown",
+                       pci_clk_sel ? "sync" : "async",
+                       pci_agent ? "agent" : "host",
+                       pci_arb ? "arbiter" : "external-arbiter",
+                       (uint)pci
+                       );
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCI1_MEM_BASE,
+                              CFG_PCI1_MEM_PHYS,
+                              CFG_PCI1_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCI1_IO_BASE,
+                              CFG_PCI1_IO_PHYS,
+                              CFG_PCI1_IO_SIZE,
+                              PCI_REGION_IO);
+               hose->region_count = 3;
+#ifdef CFG_PCI1_MEM_BASE2
+               /* outbound memory */
+               pci_set_region(hose->regions + 3,
+                              CFG_PCI1_MEM_BASE2,
+                              CFG_PCI1_MEM_PHYS2,
+                              CFG_PCI1_MEM_SIZE2,
+                              PCI_REGION_MEM);
+               hose->region_count++;
+#endif
+               hose->first_busno=first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+               first_free_busno=hose->last_busno+1;
+               printf ("PCI on bus %02x - %02x\n",
+                       hose->first_busno,hose->last_busno);
+       } else {
+               printf ("    PCI: disabled\n");
+       }
+}
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+#endif
+}
+
+
+int board_early_init_r(void)
+{
+       unsigned int i;
+       const unsigned int flashbase = CFG_FLASH_BASE;
+       const u8 flash_esel = 1;
+
+       /*
+        * Remap Boot flash + PROMJET region to caching-inhibited
+        * so that flash can be erased properly.
+        */
+
+       /* Invalidate any remaining lines of the flash from caches. */
+       for (i = 0; i < 256*1024*1024; i+=32) {
+               asm volatile ("dcbi %0,%1": : "b" (flashbase), "r" (i));
+               asm volatile ("icbi %0,%1": : "b" (flashbase), "r" (i));
+       }
+
+       /* invalidate existing TLB entry for flash + promjet */
+       disable_tlb(flash_esel);
+
+       set_tlb(1, flashbase, flashbase,                /* tlb, epn, rpn */
+               MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, /* perms, wimge */
+               0, flash_esel, BOOKE_PAGESZ_256M, 1);   /* ts, esel, tsize, iprot */
+
+       return 0;
+}
+
+#ifdef CONFIG_GET_CLK_FROM_ICS307
+/* decode S[0-2] to Output Divider (OD) */
+static unsigned char
+ics307_S_to_OD[] = {
+       10, 2, 8, 4, 5, 7, 3, 6
+};
+
+/* Calculate frequency being generated by ICS307-02 clock chip based upon
+ * the control bytes being programmed into it. */
+/* XXX: This function should probably go into a common library */
+static unsigned long
+ics307_clk_freq (unsigned char cw0, unsigned char cw1, unsigned char cw2)
+{
+       const unsigned long long InputFrequency = CONFIG_ICS307_REFCLK_HZ;
+       unsigned long VDW = ((cw1 << 1) & 0x1FE) + ((cw2 >> 7) & 1);
+       unsigned long RDW = cw2 & 0x7F;
+       unsigned long OD = ics307_S_to_OD[cw0 & 0x7];
+       unsigned long freq;
+
+       /* CLK1Frequency = InputFrequency * 2 * (VDW + 8) / ((RDW + 2) * OD) */
+
+       /* cw0:  C1 C0 TTL F1 F0 S2 S1 S0
+        * cw1:  V8 V7 V6 V5 V4 V3 V2 V1
+        * cw2:  V0 R6 R5 R4 R3 R2 R1 R0
+        *
+        * R6:R0 = Reference Divider Word (RDW)
+        * V8:V0 = VCO Divider Word (VDW)
+        * S2:S0 = Output Divider Select (OD)
+        * F1:F0 = Function of CLK2 Output
+        * TTL = duty cycle
+        * C1:C0 = internal load capacitance for cyrstal
+        */
+
+       /* Adding 1 to get a "nicely" rounded number, but this needs
+        * more tweaking to get a "properly" rounded number. */
+
+       freq = 1 + (InputFrequency * 2 * (VDW + 8) / ((RDW + 2) * OD));
+
+       debug("ICS307: CW[0-2]: %02X %02X %02X => %u Hz\n", cw0, cw1, cw2,
+               freq);
+       return freq;
+}
+
+unsigned long
+get_board_sys_clk(ulong dummy)
+{
+       return ics307_clk_freq (
+           in8(PIXIS_BASE + PIXIS_VSYSCLK0),
+           in8(PIXIS_BASE + PIXIS_VSYSCLK1),
+           in8(PIXIS_BASE + PIXIS_VSYSCLK2)
+       );
+}
+
+unsigned long
+get_board_ddr_clk(ulong dummy)
+{
+       return ics307_clk_freq (
+           in8(PIXIS_BASE + PIXIS_VDDRCLK0),
+           in8(PIXIS_BASE + PIXIS_VDDRCLK1),
+           in8(PIXIS_BASE + PIXIS_VDDRCLK2)
+       );
+}
+#else
+unsigned long
+get_board_sys_clk(ulong dummy)
+{
+       u8 i;
+       ulong val = 0;
+
+       i = in8(PIXIS_BASE + PIXIS_SPD);
+       i &= 0x07;
+
+       switch (i) {
+       case 0:
+               val = 33333333;
+               break;
+       case 1:
+               val = 40000000;
+               break;
+       case 2:
+               val = 50000000;
+               break;
+       case 3:
+               val = 66666666;
+               break;
+       case 4:
+               val = 83333333;
+               break;
+       case 5:
+               val = 100000000;
+               break;
+       case 6:
+               val = 133333333;
+               break;
+       case 7:
+               val = 166666666;
+               break;
+       }
+
+       return val;
+}
+
+unsigned long
+get_board_ddr_clk(ulong dummy)
+{
+       u8 i;
+       ulong val = 0;
+
+       i = in8(PIXIS_BASE + PIXIS_SPD);
+       i &= 0x38;
+       i >>= 3;
+
+       switch (i) {
+       case 0:
+               val = 33333333;
+               break;
+       case 1:
+               val = 40000000;
+               break;
+       case 2:
+               val = 50000000;
+               break;
+       case 3:
+               val = 66666666;
+               break;
+       case 4:
+               val = 83333333;
+               break;
+       case 5:
+               val = 100000000;
+               break;
+       case 6:
+               val = 133333333;
+               break;
+       case 7:
+               val = 166666666;
+               break;
+       }
+       return val;
+}
+#endif
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       int node, tmp[2];
+       const char *path;
+
+       ft_cpu_setup(blob, bd);
+
+       node = fdt_path_offset(blob, "/aliases");
+       tmp[0] = 0;
+       if (node >= 0) {
+#ifdef CONFIG_PCI1
+               path = fdt_getprop(blob, node, "pci0", NULL);
+               if (path) {
+                       tmp[1] = pci1_hose.last_busno - pci1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCIE2
+               path = fdt_getprop(blob, node, "pci1", NULL);
+               if (path) {
+                       tmp[1] = pcie2_hose.last_busno - pcie2_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCIE1
+               path = fdt_getprop(blob, node, "pci2", NULL);
+               if (path) {
+                       tmp[1] = pcie1_hose.last_busno - pcie1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCIE3
+               path = fdt_getprop(blob, node, "pci3", NULL);
+               if (path) {
+                       tmp[1] = pcie3_hose.last_busno - pcie3_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+       }
+}
+#endif
diff --git a/board/freescale/mpc8536ds/tlb.c b/board/freescale/mpc8536ds/tlb.c
new file mode 100644 (file)
index 0000000..28a9fa8
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       SET_TLB_ENTRY(0, PIXIS_BASE, PIXIS_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /* TLB 1 */
+       /* *I*G* - CCSRBAR */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_1M, 1),
+
+       /* W**G* - Flash/promjet, localbus */
+       /* This will be changed to *I*G* after relocation to RAM. */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_W|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /* *I*G* - PCI */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_1G, 1),
+
+       /* *I*G* - PCI I/O */
+       SET_TLB_ENTRY(1, CFG_PCI1_IO_PHYS, CFG_PCI1_IO_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256K, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
diff --git a/board/freescale/mpc8536ds/u-boot.lds b/board/freescale/mpc8536ds/u-boot.lds
new file mode 100644 (file)
index 0000000..901f633
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(powerpc)
+/* Do we need any of these for elf?
+   __DYNAMIC = 0;    */
+PHDRS
+{
+  text PT_LOAD;
+  bss PT_LOAD;
+}
+
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    *(.text)
+    *(.fixup)
+    *(.got1)
+   } :text
+    _etext = .;
+    PROVIDE (etext = .);
+    .rodata    :
+   {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  } :text
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+  __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  .bootpg ADDR(.text) + 0x7f000 :
+  {
+    cpu/mpc85xx/start.o        (.bootpg)
+  } :text = 0xffff
+
+  .resetvec ADDR(.text) + 0x7fffc :
+  {
+    *(.resetvec)
+  } :text = 0xffff
+
+  . = ADDR(.text) + 0x80000;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  } :bss
+
+  . = ALIGN(4);
+  _end = . ;
+  PROVIDE (end = .);
+}
index 2d71cbc516a6fe78cd98fdeb0da9c84a59d1d37a..4c6da4d80e46c8ccb5b33693aff50b4169e16804 100644 (file)
@@ -25,11 +25,14 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
-SOBJS  := $(addprefix $(obj),$(SOBJS))
+COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS-y))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
        $(AR) $(ARFLAGS) $@ $(OBJS)
diff --git a/board/freescale/mpc8540ads/ddr.c b/board/freescale/mpc8540ads/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 4f068cc8849a78d36d96b46a3ce1f74acce2918a..005e4d97e9b34da18f0754af4fa297a6100e2d80 100644 (file)
@@ -1,4 +1,4 @@
- /*
+/*
  * Copyright 2004 Freescale Semiconductor.
  * (C) Copyright 2002,2003, Motorola Inc.
  * Xianghua Xiao, (X.Xiao@motorola.com)
@@ -28,8 +28,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
-#include <spd_sdram.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <libfdt.h>
 #include <fdt_support.h>
 
@@ -82,10 +83,13 @@ initdram(int board_type)
        }
 #endif
 
-#if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+#ifdef CONFIG_SPD_EEPROM
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+
+       dram_size *= 0x100000;
 #else
-       dram_size = fixed_sdram ();
+       dram_size = fixed_sdram();
 #endif
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
index 98f153056d5c3821df09df368579b475cb505611..c19a527d16591170c6eb8d8dfa3bac29a9ed0227 100644 (file)
@@ -27,6 +27,7 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(BOARD).a
 
 COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
 COBJS-y        += law.o
 COBJS-y        += tlb.o
 
diff --git a/board/freescale/mpc8541cds/ddr.c b/board/freescale/mpc8541cds/ddr.c
new file mode 100644 (file)
index 0000000..11ce57d
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 6;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 3669ba95d35b062dfe7c1c514eebc03ffa2cf376..de3a79151276aad456204ee28912b93f20a36b23 100644 (file)
@@ -25,7 +25,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <ioports.h>
 #include <spd_sdram.h>
 #include <libfdt.h>
@@ -263,7 +265,9 @@ initdram(int board_type)
                udelay(200);
        }
 #endif
-       dram_size = spd_sdram();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
        /*
index 3a5ea00e80e528e10be1f9ce69c9420c397765e7..39979944e4dd6304b2498b6df6bf82729605d494 100644 (file)
@@ -26,10 +26,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/freescale/mpc8544ds/ddr.c b/board/freescale/mpc8544ds/ddr.c
new file mode 100644 (file)
index 0000000..bbb5ee2
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 7;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index c39ce117231c2db765d1e95a555a3ae8c2e593c2..4e976b78fc18f9567f7924fc11b780a758f18337 100644 (file)
 #include <command.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
 #include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <asm/io.h>
-#include <spd_sdram.h>
 #include <miiphy.h>
 #include <libfdt.h>
 #include <fdt_support.h>
@@ -38,8 +39,6 @@
 extern void ddr_enable_ecc(unsigned int dram_size);
 #endif
 
-void sdram_init(void);
-
 int checkboard (void)
 {
        volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
@@ -69,7 +68,11 @@ initdram(int board_type)
 
        puts("Initializing\n");
 
-       dram_size = spd_sdram();
+       dram_size = fsl_ddr_sdram();
+
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+
+       dram_size *= 0x100000;
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
        /*
index 98f153056d5c3821df09df368579b475cb505611..c19a527d16591170c6eb8d8dfa3bac29a9ed0227 100644 (file)
@@ -27,6 +27,7 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(BOARD).a
 
 COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
 COBJS-y        += law.o
 COBJS-y        += tlb.o
 
diff --git a/board/freescale/mpc8548cds/ddr.c b/board/freescale/mpc8548cds/ddr.c
new file mode 100644 (file)
index 0000000..f07d746
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                       unsigned int ctrl_num)
+{
+       unsigned int i;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 7;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 0b037cc69792319095706a416958b01dbef75bbf..84d3850cc8408e3b430671032e9ab0df24439165 100644 (file)
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
 #include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <spd_sdram.h>
 #include <miiphy.h>
 #include <libfdt.h>
@@ -111,7 +113,10 @@ initdram(int board_type)
                udelay(200);
        }
 #endif
-       dram_size = spd_sdram();
+
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
        /*
@@ -119,6 +124,7 @@ initdram(int board_type)
         */
        ddr_enable_ecc(dram_size);
 #endif
+
        /*
         * SDRAM Initialization
         */
index 98f153056d5c3821df09df368579b475cb505611..c19a527d16591170c6eb8d8dfa3bac29a9ed0227 100644 (file)
@@ -27,6 +27,7 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(BOARD).a
 
 COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
 COBJS-y        += law.o
 COBJS-y        += tlb.o
 
diff --git a/board/freescale/mpc8555cds/ddr.c b/board/freescale/mpc8555cds/ddr.c
new file mode 100644 (file)
index 0000000..11ce57d
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 6;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 9a65101dd275be552eef6acb0d3118c60da18928..826056a845e310c4e7a0e7d27811ff26714489f8 100644 (file)
@@ -23,7 +23,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <ioports.h>
 #include <spd_sdram.h>
 #include <libfdt.h>
@@ -261,7 +263,10 @@ initdram(int board_type)
                udelay(200);
        }
 #endif
-       dram_size = spd_sdram();
+
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
        /*
@@ -269,6 +274,7 @@ initdram(int board_type)
         */
        ddr_enable_ecc(dram_size);
 #endif
+
        /*
         * SDRAM Initialization
         */
index 2d71cbc516a6fe78cd98fdeb0da9c84a59d1d37a..67dbdeb3a9843562c10cbe5346701f947cf1416e 100644 (file)
@@ -25,11 +25,14 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
-SOBJS  := $(addprefix $(obj),$(SOBJS))
+COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+
+SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS-y))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
        $(AR) $(ARFLAGS) $@ $(OBJS)
diff --git a/board/freescale/mpc8560ads/ddr.c b/board/freescale/mpc8560ads/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 2c14a880e0d9451c40204b4c461975e7b5d441ac..851fc5706a067e81c1386b39275267732de22c22 100644 (file)
@@ -28,7 +28,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <ioports.h>
 #include <spd_sdram.h>
 #include <miiphy.h>
@@ -285,10 +287,13 @@ initdram(int board_type)
        }
 #endif
 
-#if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+#ifdef CONFIG_SPD_EEPROM
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+
+       dram_size *= 0x100000;
 #else
-       dram_size = fixed_sdram ();
+       dram_size = fixed_sdram();
 #endif
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
index ecdc4d3c22b15a07dba94599da69423e89f26bea..d499fb31e2f896e93363d37ba54a04040ae20c40 100644 (file)
@@ -26,11 +26,15 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o bcsr.o law.o tlb.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
-SOBJS  := $(addprefix $(obj),$(SOBJS))
+COBJS-y        += $(BOARD).o
+COBJS-y        += bcsr.o
+COBJS-y        += ddr.o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+
+SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS-y))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
        $(AR) $(ARFLAGS) $@ $(OBJS)
diff --git a/board/freescale/mpc8568mds/ddr.c b/board/freescale/mpc8568mds/ddr.c
new file mode 100644 (file)
index 0000000..1b8ecec
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 6;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 2ccff7d81e9b7effeefbabfb5b5e6111ca0cbbe1..f9e35cc7e8a38edd7003a455ca63506fff8f62cd 100644 (file)
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
 #include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <spd_sdram.h>
 #include <i2c.h>
 #include <ioports.h>
@@ -163,7 +165,10 @@ initdram(int board_type)
                udelay(200);
        }
 #endif
-       dram_size = spd_sdram();
+
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
        /*
@@ -171,6 +176,7 @@ initdram(int board_type)
         */
        ddr_enable_ecc(dram_size);
 #endif
+
        /*
         * SDRAM Initialization
         */
diff --git a/board/freescale/mpc8572ds/Makefile b/board/freescale/mpc8572ds/Makefile
new file mode 100644 (file)
index 0000000..3e82bbf
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Copyright 2007 Freescale Semiconductor, Inc.
+# (C) Copyright 2001-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS-y        += $(BOARD).o
+COBJS-y        += ddr.o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(OBJS) $(SOBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/mpc8572ds/config.mk b/board/freescale/mpc8572ds/config.mk
new file mode 100644 (file)
index 0000000..5b32186
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# Copyright 2007-2008 Freescale Semiconductor, Inc.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+#
+# mpc8572ds board
+#
+ifndef TEXT_BASE
+TEXT_BASE = 0xeff80000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_E500=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC8572=1
diff --git a/board/freescale/mpc8572ds/ddr.c b/board/freescale/mpc8572ds/ddr.c
new file mode 100644 (file)
index 0000000..5f8c555
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS1;
+               }
+               if (ctrl_num == 1 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS2;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 7;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 5;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
diff --git a/board/freescale/mpc8572ds/law.c b/board/freescale/mpc8572ds/law.c
new file mode 100644 (file)
index 0000000..d69b593
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+struct law_entry law_table[] = {
+       SET_LAW(CFG_FLASH_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW(CFG_PCIE1_MEM_PHYS, LAWAR_SIZE_512M, LAW_TRGT_IF_PCIE_1),
+       SET_LAW(CFG_PCIE1_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_1),
+       SET_LAW(CFG_PCIE2_MEM_PHYS, LAWAR_SIZE_512M, LAW_TRGT_IF_PCIE_2),
+       SET_LAW(CFG_PCIE2_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_2),
+       SET_LAW(CFG_PCIE3_MEM_PHYS, LAWAR_SIZE_512M, LAW_TRGT_IF_PCIE_3),
+       SET_LAW(CFG_PCIE3_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_3),
+       SET_LAW(PIXIS_BASE, LAW_SIZE_4K, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8572ds/mpc8572ds.c b/board/freescale/mpc8572ds/mpc8572ds.c
new file mode 100644 (file)
index 0000000..70b548b
--- /dev/null
@@ -0,0 +1,573 @@
+/*
+ * Copyright 2007-2008 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <pci.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#include <asm/immap_85xx.h>
+#include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/io.h>
+#include <miiphy.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+
+#include "../common/pixis.h"
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+
+long int fixed_sdram(void);
+
+int checkboard (void)
+{
+       printf ("Board: MPC8572DS, System ID: 0x%02x, "
+               "System Version: 0x%02x, FPGA Version: 0x%02x\n",
+               in8(PIXIS_BASE + PIXIS_ID), in8(PIXIS_BASE + PIXIS_VER),
+               in8(PIXIS_BASE + PIXIS_PVER));
+       return 0;
+}
+
+phys_size_t initdram(int board_type)
+{
+       phys_size_t dram_size = 0;
+
+       puts("Initializing....");
+
+#ifdef CONFIG_SPD_EEPROM
+       dram_size = fsl_ddr_sdram();
+
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+
+       dram_size *= 0x100000;
+#else
+       dram_size = fixed_sdram();
+#endif
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+       /*
+        * Initialize and enable DDR ECC.
+        */
+       ddr_enable_ecc(dram_size);
+#endif
+       puts("    DDR: ");
+       return dram_size;
+}
+
+#if !defined(CONFIG_SPD_EEPROM)
+/*
+ * Fixed sdram init -- doesn't use serial presence detect.
+ */
+
+phys_size_t fixed_sdram (void)
+{
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_ddr_t *ddr= &immap->im_ddr;
+       uint d_init;
+
+       ddr->cs0_bnds = CFG_DDR_CS0_BNDS;
+       ddr->cs0_config = CFG_DDR_CS0_CONFIG;
+
+       ddr->timing_cfg_3 = CFG_DDR_TIMING_3;
+       ddr->timing_cfg_0 = CFG_DDR_TIMING_0;
+       ddr->timing_cfg_1 = CFG_DDR_TIMING_1;
+       ddr->timing_cfg_2 = CFG_DDR_TIMING_2;
+       ddr->sdram_mode = CFG_DDR_MODE_1;
+       ddr->sdram_mode_2 = CFG_DDR_MODE_2;
+       ddr->sdram_interval = CFG_DDR_INTERVAL;
+       ddr->sdram_data_init = CFG_DDR_DATA_INIT;
+       ddr->sdram_clk_cntl = CFG_DDR_CLK_CTRL;
+       ddr->sdram_cfg_2 = CFG_DDR_CONTROL2;
+
+#if defined (CONFIG_DDR_ECC)
+       ddr->err_int_en = CFG_DDR_ERR_INT_EN;
+       ddr->err_disable = CFG_DDR_ERR_DIS;
+       ddr->err_sbe = CFG_DDR_SBE;
+#endif
+       asm("sync;isync");
+
+       udelay(500);
+
+       ddr->sdram_cfg = CFG_DDR_CONTROL;
+
+#if defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+       d_init = 1;
+       debug("DDR - 1st controller: memory initializing\n");
+       /*
+        * Poll until memory is initialized.
+        * 512 Meg at 400 might hit this 200 times or so.
+        */
+       while ((ddr->sdram_cfg_2 & (d_init << 4)) != 0) {
+               udelay(1000);
+       }
+       debug("DDR: memory initialized\n\n");
+       asm("sync; isync");
+       udelay(500);
+#endif
+
+       return 512 * 1024 * 1024;
+}
+
+#endif
+
+#ifdef CONFIG_PCIE1
+static struct pci_controller pcie1_hose;
+#endif
+
+#ifdef CONFIG_PCIE2
+static struct pci_controller pcie2_hose;
+#endif
+
+#ifdef CONFIG_PCIE3
+static struct pci_controller pcie3_hose;
+#endif
+
+int first_free_busno=0;
+#ifdef CONFIG_PCI
+void pci_init_board(void)
+{
+       volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+       uint devdisr = gur->devdisr;
+       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
+       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
+
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
+                       devdisr, io_sel, host_agent);
+
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII1_DIS))
+               printf ("    eTSEC1 is in sgmii mode.\n");
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII2_DIS))
+               printf ("    eTSEC2 is in sgmii mode.\n");
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII3_DIS))
+               printf ("    eTSEC3 is in sgmii mode.\n");
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII4_DIS))
+               printf ("    eTSEC4 is in sgmii mode.\n");
+
+
+#ifdef CONFIG_PCIE3
+       {
+               volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE3_ADDR;
+               extern void fsl_pci_init(struct pci_controller *hose);
+               struct pci_controller *hose = &pcie3_hose;
+               int pcie_ep = (host_agent == 0) || (host_agent == 3) ||
+                       (host_agent == 5) || (host_agent == 6);
+               int pcie_configured  = io_sel >= 1;
+               u32 temp32;
+
+               if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+                       printf ("\n    PCIE3 connected to ULI as %s (base address %x)",
+                                       pcie_ep ? "End Point" : "Root Complex",
+                                       (uint)pci);
+                       if (pci->pme_msg_det) {
+                               pci->pme_msg_det = 0xffffffff;
+                               debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+                       }
+                       printf ("\n");
+
+                       /* inbound */
+                       pci_set_region(hose->regions + 0,
+                                       CFG_PCI_MEMORY_BUS,
+                                       CFG_PCI_MEMORY_PHYS,
+                                       CFG_PCI_MEMORY_SIZE,
+                                       PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+                       /* outbound memory */
+                       pci_set_region(hose->regions + 1,
+                                       CFG_PCIE3_MEM_BASE,
+                                       CFG_PCIE3_MEM_PHYS,
+                                       CFG_PCIE3_MEM_SIZE,
+                                       PCI_REGION_MEM);
+
+                       /* outbound io */
+                       pci_set_region(hose->regions + 2,
+                                       CFG_PCIE3_IO_BASE,
+                                       CFG_PCIE3_IO_PHYS,
+                                       CFG_PCIE3_IO_SIZE,
+                                       PCI_REGION_IO);
+
+                       hose->region_count = 3;
+                       hose->first_busno=first_free_busno;
+                       pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+                       fsl_pci_init(hose);
+
+                       first_free_busno=hose->last_busno+1;
+                       printf ("    PCIE3 on bus %02x - %02x\n",
+                                       hose->first_busno,hose->last_busno);
+
+                       /*
+                        * Activate ULI1575 legacy chip by performing a fake
+                        * memory access.  Needed to make ULI RTC work.
+                        * Device 1d has the first on-board memory BAR.
+                        */
+
+                       pci_hose_read_config_dword(hose, PCI_BDF(2, 0x1d, 0 ),
+                                       PCI_BASE_ADDRESS_1, &temp32);
+                       if (temp32 >= CFG_PCIE3_MEM_PHYS) {
+                               debug(" uli1572 read to %x\n", temp32);
+                               in_be32((unsigned *)temp32);
+                       }
+               } else {
+                       printf ("    PCIE3: disabled\n");
+               }
+
+       }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE3; /* disable */
+#endif
+
+#ifdef CONFIG_PCIE2
+       {
+               volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE2_ADDR;
+               extern void fsl_pci_init(struct pci_controller *hose);
+               struct pci_controller *hose = &pcie2_hose;
+               int pcie_ep = (host_agent == 2) || (host_agent == 4) ||
+                       (host_agent == 6);
+               int pcie_configured  = io_sel & 4;
+
+               if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+                       printf ("\n    PCIE2 connected to Slot 1 as %s (base address %x)",
+                                       pcie_ep ? "End Point" : "Root Complex",
+                                       (uint)pci);
+                       if (pci->pme_msg_det) {
+                               pci->pme_msg_det = 0xffffffff;
+                               debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+                       }
+                       printf ("\n");
+
+                       /* inbound */
+                       pci_set_region(hose->regions + 0,
+                                       CFG_PCI_MEMORY_BUS,
+                                       CFG_PCI_MEMORY_PHYS,
+                                       CFG_PCI_MEMORY_SIZE,
+                                       PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+                       /* outbound memory */
+                       pci_set_region(hose->regions + 1,
+                                       CFG_PCIE2_MEM_BASE,
+                                       CFG_PCIE2_MEM_PHYS,
+                                       CFG_PCIE2_MEM_SIZE,
+                                       PCI_REGION_MEM);
+
+                       /* outbound io */
+                       pci_set_region(hose->regions + 2,
+                                       CFG_PCIE2_IO_BASE,
+                                       CFG_PCIE2_IO_PHYS,
+                                       CFG_PCIE2_IO_SIZE,
+                                       PCI_REGION_IO);
+
+                       hose->region_count = 3;
+                       hose->first_busno=first_free_busno;
+                       pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+                       fsl_pci_init(hose);
+                       first_free_busno=hose->last_busno+1;
+                       printf ("    PCIE2 on bus %02x - %02x\n",
+                                       hose->first_busno,hose->last_busno);
+
+               } else {
+                       printf ("    PCIE2: disabled\n");
+               }
+
+       }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE2; /* disable */
+#endif
+#ifdef CONFIG_PCIE1
+       {
+               volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE1_ADDR;
+               extern void fsl_pci_init(struct pci_controller *hose);
+               struct pci_controller *hose = &pcie1_hose;
+               int pcie_ep = (host_agent == 1) || (host_agent == 4) ||
+                       (host_agent == 5);
+               int pcie_configured  = io_sel & 6;
+
+               if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+                       printf ("\n    PCIE1 connected to Slot 2 as %s (base address %x)",
+                                       pcie_ep ? "End Point" : "Root Complex",
+                                       (uint)pci);
+                       if (pci->pme_msg_det) {
+                               pci->pme_msg_det = 0xffffffff;
+                               debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+                       }
+                       printf ("\n");
+
+                       /* inbound */
+                       pci_set_region(hose->regions + 0,
+                                       CFG_PCI_MEMORY_BUS,
+                                       CFG_PCI_MEMORY_PHYS,
+                                       CFG_PCI_MEMORY_SIZE,
+                                       PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+                       /* outbound memory */
+                       pci_set_region(hose->regions + 1,
+                                       CFG_PCIE1_MEM_BASE,
+                                       CFG_PCIE1_MEM_PHYS,
+                                       CFG_PCIE1_MEM_SIZE,
+                                       PCI_REGION_MEM);
+
+                       /* outbound io */
+                       pci_set_region(hose->regions + 2,
+                                       CFG_PCIE1_IO_BASE,
+                                       CFG_PCIE1_IO_PHYS,
+                                       CFG_PCIE1_IO_SIZE,
+                                       PCI_REGION_IO);
+
+                       hose->region_count = 3;
+                       hose->first_busno=first_free_busno;
+
+                       pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+                       fsl_pci_init(hose);
+
+                       first_free_busno=hose->last_busno+1;
+                       printf("    PCIE1 on bus %02x - %02x\n",
+                                       hose->first_busno,hose->last_busno);
+
+               } else {
+                       printf ("    PCIE1: disabled\n");
+               }
+
+       }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+#endif
+}
+#endif
+
+int board_early_init_r(void)
+{
+       unsigned int i;
+       const unsigned int flashbase = CFG_FLASH_BASE;
+       const u8 flash_esel = 2;
+
+       /*
+        * Remap Boot flash + PROMJET region to caching-inhibited
+        * so that flash can be erased properly.
+        */
+
+       /* Invalidate any remaining lines of the flash from caches. */
+       for (i = 0; i < 256*1024*1024; i+=32) {
+               asm volatile ("dcbi %0,%1": : "b" (flashbase), "r" (i));
+               asm volatile ("icbi %0,%1": : "b" (flashbase), "r" (i));
+       }
+
+       /* invalidate existing TLB entry for flash + promjet */
+       disable_tlb(flash_esel);
+
+       set_tlb(1, flashbase, flashbase,                /* tlb, epn, rpn */
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, /* perms, wimge */
+                       0, flash_esel, BOOKE_PAGESZ_256M, 1);   /* ts, esel, tsize, iprot */
+
+       return 0;
+}
+
+#ifdef CONFIG_GET_CLK_FROM_ICS307
+/* decode S[0-2] to Output Divider (OD) */
+static unsigned char ics307_S_to_OD[] = {
+       10, 2, 8, 4, 5, 7, 3, 6
+};
+
+/* Calculate frequency being generated by ICS307-02 clock chip based upon
+ * the control bytes being programmed into it. */
+/* XXX: This function should probably go into a common library */
+static unsigned long
+ics307_clk_freq (unsigned char cw0, unsigned char cw1, unsigned char cw2)
+{
+       const unsigned long InputFrequency = CONFIG_ICS307_REFCLK_HZ;
+       unsigned long VDW = ((cw1 << 1) & 0x1FE) + ((cw2 >> 7) & 1);
+       unsigned long RDW = cw2 & 0x7F;
+       unsigned long OD = ics307_S_to_OD[cw0 & 0x7];
+       unsigned long freq;
+
+       /* CLK1Frequency = InputFrequency * 2 * (VDW + 8) / ((RDW + 2) * OD) */
+
+       /* cw0:  C1 C0 TTL F1 F0 S2 S1 S0
+        * cw1:  V8 V7 V6 V5 V4 V3 V2 V1
+        * cw2:  V0 R6 R5 R4 R3 R2 R1 R0
+        *
+        * R6:R0 = Reference Divider Word (RDW)
+        * V8:V0 = VCO Divider Word (VDW)
+        * S2:S0 = Output Divider Select (OD)
+        * F1:F0 = Function of CLK2 Output
+        * TTL = duty cycle
+        * C1:C0 = internal load capacitance for cyrstal
+        */
+
+       /* Adding 1 to get a "nicely" rounded number, but this needs
+        * more tweaking to get a "properly" rounded number. */
+
+       freq = 1 + (InputFrequency * 2 * (VDW + 8) / ((RDW + 2) * OD));
+
+       debug("ICS307: CW[0-2]: %02X %02X %02X => %u Hz\n", cw0, cw1, cw2,
+                       freq);
+       return freq;
+}
+
+unsigned long get_board_sys_clk(ulong dummy)
+{
+       return ics307_clk_freq (
+                       in8(PIXIS_BASE + PIXIS_VSYSCLK0),
+                       in8(PIXIS_BASE + PIXIS_VSYSCLK1),
+                       in8(PIXIS_BASE + PIXIS_VSYSCLK2)
+                       );
+}
+
+unsigned long get_board_ddr_clk(ulong dummy)
+{
+       return ics307_clk_freq (
+                       in8(PIXIS_BASE + PIXIS_VDDRCLK0),
+                       in8(PIXIS_BASE + PIXIS_VDDRCLK1),
+                       in8(PIXIS_BASE + PIXIS_VDDRCLK2)
+                       );
+}
+#else
+unsigned long get_board_sys_clk(ulong dummy)
+{
+       u8 i;
+       ulong val = 0;
+
+       i = in8(PIXIS_BASE + PIXIS_SPD);
+       i &= 0x07;
+
+       switch (i) {
+               case 0:
+                       val = 33333333;
+                       break;
+               case 1:
+                       val = 40000000;
+                       break;
+               case 2:
+                       val = 50000000;
+                       break;
+               case 3:
+                       val = 66666666;
+                       break;
+               case 4:
+                       val = 83333333;
+                       break;
+               case 5:
+                       val = 100000000;
+                       break;
+               case 6:
+                       val = 133333333;
+                       break;
+               case 7:
+                       val = 166666666;
+                       break;
+       }
+
+       return val;
+}
+
+unsigned long get_board_ddr_clk(ulong dummy)
+{
+       u8 i;
+       ulong val = 0;
+
+       i = in8(PIXIS_BASE + PIXIS_SPD);
+       i &= 0x38;
+       i >>= 3;
+
+       switch (i) {
+               case 0:
+                       val = 33333333;
+                       break;
+               case 1:
+                       val = 40000000;
+                       break;
+               case 2:
+                       val = 50000000;
+                       break;
+               case 3:
+                       val = 66666666;
+                       break;
+               case 4:
+                       val = 83333333;
+                       break;
+               case 5:
+                       val = 100000000;
+                       break;
+               case 6:
+                       val = 133333333;
+                       break;
+               case 7:
+                       val = 166666666;
+                       break;
+       }
+       return val;
+}
+#endif
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       int node, tmp[2];
+       const char *path;
+       ulong base, size;
+
+       ft_cpu_setup(blob, bd);
+
+       base = getenv_bootm_low();
+       size = getenv_bootm_size();
+
+       fdt_fixup_memory(blob, (u64)base, (u64)size);
+
+       node = fdt_path_offset(blob, "/aliases");
+       tmp[0] = 0;
+       if (node >= 0) {
+#ifdef CONFIG_PCIE3
+               path = fdt_getprop(blob, node, "pci0", NULL);
+               if (path) {
+                       tmp[1] = pcie3_hose.last_busno - pcie3_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCIE2
+               path = fdt_getprop(blob, node, "pci1", NULL);
+               if (path) {
+                       tmp[1] = pcie2_hose.last_busno - pcie2_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCIE1
+               path = fdt_getprop(blob, node, "pci2", NULL);
+               if (path) {
+                       tmp[1] = pcie1_hose.last_busno - pcie1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+       }
+}
+#endif
+
+#ifdef CONFIG_MP
+extern void cpu_mp_lmb_reserve(struct lmb *lmb);
+
+void board_lmb_reserve(struct lmb *lmb)
+{
+       cpu_mp_lmb_reserve(lmb);
+}
+#endif
diff --git a/board/freescale/mpc8572ds/tlb.c b/board/freescale/mpc8572ds/tlb.c
new file mode 100644 (file)
index 0000000..965356a
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       SET_TLB_ENTRY(0, PIXIS_BASE, PIXIS_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /* TLB 1 */
+       /* *I*** - Covers boot page */
+       SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I,
+                     0, 0, BOOKE_PAGESZ_4K, 1),
+
+       /* *I*G* - CCSRBAR */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_1M, 1),
+
+       /* W**G* - Flash/promjet, localbus */
+       /* This will be changed to *I*G* after relocation to RAM. */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_W|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /* *I*G* - PCI */
+       SET_TLB_ENTRY(1, CFG_PCIE3_MEM_PHYS, CFG_PCIE3_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_1G, 1),
+
+       /* *I*G* - PCI */
+       SET_TLB_ENTRY(1, CFG_PCIE3_MEM_PHYS + 0x40000000, CFG_PCIE3_MEM_PHYS + 0x40000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       SET_TLB_ENTRY(1, CFG_PCIE3_MEM_PHYS + 0x50000000, CFG_PCIE3_MEM_PHYS + 0x50000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_256M, 1),
+
+       /* *I*G* - PCI I/O */
+       SET_TLB_ENTRY(1, CFG_PCIE3_IO_PHYS, CFG_PCIE3_IO_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 6, BOOKE_PAGESZ_256K, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
diff --git a/board/freescale/mpc8572ds/u-boot.lds b/board/freescale/mpc8572ds/u-boot.lds
new file mode 100644 (file)
index 0000000..a05ece5
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2007-2008 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(powerpc)
+/* Do we need any of these for elf?
+   __DYNAMIC = 0;    */
+PHDRS
+{
+  text PT_LOAD;
+  bss PT_LOAD;
+}
+
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    *(.text)
+    *(.fixup)
+    *(.got1)
+   } :text
+    _etext = .;
+    PROVIDE (etext = .);
+    .rodata    :
+   {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  } :text
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+  __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  .bootpg ADDR(.text) + 0x7f000 :
+  {
+    cpu/mpc85xx/start.o        (.bootpg)
+  } :text = 0xffff
+
+  .resetvec ADDR(.text) + 0x7fffc :
+  {
+    *(.resetvec)
+  } :text = 0xffff
+
+  . = ADDR(.text) + 0x80000;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  } :bss
+
+  . = ALIGN(4);
+  _end = . ;
+  PROVIDE (end = .);
+}
index c9dde4d1a39ed4914b268f5faa9e469f62dde637..af79fc2c67a5774d986844214d7336c205ab85b6 100644 (file)
@@ -519,3 +519,13 @@ get_board_sys_clk(ulong dummy)
 
        return val;
 }
+
+extern int uli526x_initialize(bd_t *);
+
+int board_eth_init(bd_t *bis)
+{
+#if defined(CONFIG_ULI526)
+       uli526x_initialize(bis);
+#endif
+       return 0;
+}
index 325d6d572211c4cc287155962031241452e27211..5a68f11e7d0506bdcebbbddfa3a4c9cd95b07820 100644 (file)
@@ -25,10 +25,14 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o flash.o law.o tlb.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-y        += flash.o
+COBJS-$(CONFIG_FSL_DDR1) += ddr.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/mpc8540eval/ddr.c b/board/mpc8540eval/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 1ac333c815772813ca4b076c5dbf8aa997f0b1e8..7c54458a57e676f3531b48221f573254bb99559f 100644 (file)
@@ -25,7 +25,9 @@
 
 #include <common.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <spd_sdram.h>
 
 long int fixed_sdram (void);
@@ -84,7 +86,9 @@ phys_size_t initdram (int board_type)
 #endif
 
 #if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 #else
        dram_size = fixed_sdram ();
 #endif
index 2d71cbc516a6fe78cd98fdeb0da9c84a59d1d37a..52a756c8e3af3e123bd3a510ae6daf1bc6c7591f 100644 (file)
@@ -25,10 +25,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-$(CONFIG_FSL_DDR1) += ddr.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/pm854/ddr.c b/board/pm854/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 555f6c0caab928ff1dceff01a0e590edcd30ac8e..7dbafb9a83b49ce42f7389a4c4b1017561d8b8ce 100644 (file)
@@ -28,7 +28,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <spd_sdram.h>
 
 #if defined(CONFIG_DDR_ECC)
@@ -105,7 +107,9 @@ initdram(int board_type)
 #endif
 
 #if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 #else
        dram_size = fixed_sdram ();
 #endif
index 2d71cbc516a6fe78cd98fdeb0da9c84a59d1d37a..52a756c8e3af3e123bd3a510ae6daf1bc6c7591f 100644 (file)
@@ -25,10 +25,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-$(CONFIG_FSL_DDR1) += ddr.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/pm856/ddr.c b/board/pm856/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index bf325f89efc57fb821bd4ed8007733b362994435..bd4c0651ae917524a713078f2409c592cb9b375b 100644 (file)
@@ -28,7 +28,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <ioports.h>
 #include <spd_sdram.h>
 #include <miiphy.h>
@@ -260,7 +262,9 @@ initdram(int board_type)
 #endif
 
 #if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 #else
        dram_size = fixed_sdram ();
 #endif
index bb96d95a3a061f707bd3f8837cd2cdc6af5a0aec..9919a6efe0887d76b5b5738e2f81bfcf9500f12d 100644 (file)
@@ -28,10 +28,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-$(CONFIG_FSL_DDR2) += ddr.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/sbc8548/ddr.c b/board/sbc8548/ddr.c
new file mode 100644 (file)
index 0000000..f07d746
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                       unsigned int ctrl_num)
+{
+       unsigned int i;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 7;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 91b40e59f0586752dd7558da0bf5bbb2ffd7a125..f31d7d647729aa0f145bae0dd7706274eb5074a2 100644 (file)
@@ -30,6 +30,7 @@
 #include <asm/processor.h>
 #include <asm/immap_85xx.h>
 #include <asm/immap_fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <spd_sdram.h>
 #include <miiphy.h>
 #include <libfdt.h>
@@ -106,7 +107,9 @@ initdram(int board_type)
 #endif
 
 #if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 #else
        dram_size = fixed_sdram ();
 #endif
index bb96d95a3a061f707bd3f8837cd2cdc6af5a0aec..63997349f27fe5523dd9afad38daab62f9c5a331 100644 (file)
@@ -28,10 +28,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-$(CONFIG_FSL_DDR1) += ddr.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/sbc8560/ddr.c b/board/sbc8560/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index d9e598c2995ad05066202bc3887e1944b6b528e9..dc661702ce5c04ed7933c08e322e4c7dd5b660cd 100644 (file)
@@ -29,7 +29,9 @@
 
 #include <common.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <ioports.h>
 #include <spd_sdram.h>
 #include <miiphy.h>
@@ -283,7 +285,9 @@ phys_size_t initdram (int board_type)
 #endif
 
 #if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 #else
        dram_size = fixed_sdram ();
 #endif
index ba5ce0bd60fb7ddb36cbd67b65a367cce27ee6c6..237a3b60b8fac2d34fb6facf5e3a56610ad766cd 100644 (file)
@@ -74,7 +74,6 @@ SECTIONS
     cpu/mpc85xx/cpu_init.o (.text)
     cpu/mpc85xx/cpu.o (.text)
     cpu/mpc85xx/speed.o (.text)
-    cpu/mpc85xx/spd_sdram.o (.text)
     common/dlmalloc.o (.text)
     lib_generic/crc32.o (.text)
     lib_ppc/extable.o (.text)
index 86478871bcbd52e08c89abfa0a960d2d91888205..c853755a1c6c14852952ff57a353991ba94f3da8 100644 (file)
@@ -66,3 +66,16 @@ void pci_init_board(void)
 {
        pci_mpc824x_init(&hose);
 }
+
+extern int skge_initialize(bd_t *bis);
+
+int board_eth_init(bd_t *bis)
+{
+       int rc = 0;
+
+#if defined(CONFIG_SK98)
+       rc = skge_initialize(bis);
+#endif
+       return rc;
+}
+
index a41fead8f4426168bd7c89bc483a450bc26abee9..6fae6014073eae9bffcd3ef92e8029ef24b99eed 100644 (file)
@@ -28,10 +28,15 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(BOARD).a
 #
 
-COBJS  := $(BOARD).o law.o tlb.o sdram.o nand.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-y        += nand.o
+COBJS-y        += sdram.o
+COBJS-$(CONFIG_FSL_DDR2) += ddr.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/socrates/ddr.c b/board/socrates/ddr.c
new file mode 100644 (file)
index 0000000..bbb5ee2
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr2_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr2_spd_eeprom_t));
+}
+
+unsigned int fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+void fsl_ddr_get_spd(ddr2_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               get_spd(&(ctrl_dimms_spd[i]), SPD_EEPROM_ADDRESS);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for clock adjust:
+        *      - number of chips on bus
+        *      - position of slot
+        *      - DDR1 vs. DDR2?
+        *      - ???
+        *
+        * This needs to be determined on a board-by-board basis.
+        *      0110    3/4 cycle late
+        *      0111    7/8 cycle late
+        */
+       popts->clk_adjust = 7;
+
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 10;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 768fe05a241751ebd807fd56e43fc52a52ef2c76..12d1b8a738a23d3ee7fc4c1d82d63c632d88f12f 100644 (file)
@@ -25,6 +25,7 @@
 #include <common.h>
 #include <asm/processor.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <asm/processor.h>
 #include <asm/mmu.h>
 #include <spd_sdram.h>
@@ -80,7 +81,9 @@ phys_size_t initdram (int board_type)
 {
        long dram_size = 0;
 #if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 #else
        dram_size = sdram_setup(CONFIG_DDR_DEFAULT_CL);
 #endif
index 325d6d572211c4cc287155962031241452e27211..5a68f11e7d0506bdcebbbddfa3a4c9cd95b07820 100644 (file)
@@ -25,10 +25,14 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o flash.o law.o tlb.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-y        += flash.o
+COBJS-$(CONFIG_FSL_DDR1) += ddr.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/stxgp3/ddr.c b/board/stxgp3/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 218e8053f1d38e24aa50dd794f1709e1ea15e251..c80f1b3810bba15afbf575c9dbc6ead57666296f 100644 (file)
@@ -32,7 +32,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <ioports.h>
 #include <asm/io.h>
 #include <spd_sdram.h>
@@ -292,7 +294,9 @@ initdram (int board_type)
        }
 #endif
 
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 
 #if defined(CONFIG_DDR_ECC)
        /* Initialize and enable DDR ECC.
index 9cc499747fe718bd3c8c9cb2c1a9d283cda87b2f..d5363be5a5724770352ae01dec03d1b36b19c17d 100644 (file)
@@ -76,7 +76,6 @@ SECTIONS
     cpu/mpc85xx/cpu_init.o (.text)
     cpu/mpc85xx/cpu.o (.text)
     cpu/mpc85xx/speed.o (.text)
-    cpu/mpc85xx/spd_sdram.o (.text)
     common/dlmalloc.o (.text)
     lib_generic/crc32.o (.text)
     lib_ppc/extable.o (.text)
index e29cf95e3cd660a6574b94fb7ada2d83108aa2a4..9ab41ecd3591198eba27d6dcba40255bffdccd9d 100644 (file)
@@ -25,10 +25,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o law.o tlb.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
+COBJS-$(CONFIG_FSL_DDR1) += ddr.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(obj).depend $(OBJS) $(SOBJS)
diff --git a/board/stxssa/ddr.c b/board/stxssa/ddr.c
new file mode 100644 (file)
index 0000000..45372f4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <i2c.h>
+
+#include <asm/fsl_ddr_sdram.h>
+
+static void
+get_spd(ddr1_spd_eeprom_t *spd, unsigned char i2c_address)
+{
+       i2c_read(i2c_address, 0, 1, (uchar *)spd, sizeof(ddr1_spd_eeprom_t));
+}
+
+
+unsigned int
+fsl_ddr_get_mem_data_rate(void)
+{
+       return get_ddr_freq(0);
+}
+
+
+void
+fsl_ddr_get_spd(ddr1_spd_eeprom_t *ctrl_dimms_spd,
+                     unsigned int ctrl_num)
+{
+       unsigned int i;
+       unsigned int i2c_address = 0;
+
+       for (i = 0; i < CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+               if (ctrl_num == 0 && i == 0) {
+                       i2c_address = SPD_EEPROM_ADDRESS;
+               }
+               get_spd(&(ctrl_dimms_spd[i]), i2c_address);
+       }
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts, unsigned int ctrl_num)
+{
+       /*
+        * Factors to consider for CPO:
+        *      - frequency
+        *      - ddr1 vs. ddr2
+        */
+       popts->cpo_override = 0;
+
+       /*
+        * Factors to consider for write data delay:
+        *      - number of DIMMs
+        *
+        * 1 = 1/4 clock delay
+        * 2 = 1/2 clock delay
+        * 3 = 3/4 clock delay
+        * 4 = 1   clock delay
+        * 5 = 5/4 clock delay
+        * 6 = 3/2 clock delay
+        */
+       popts->write_data_delay = 3;
+
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+}
index 2c4b54642aa3ed941052199e121403c5a92f11ba..124e1233b1fca402ff61a03d3185c50ad32c8ed4 100644 (file)
@@ -32,7 +32,9 @@
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
+#include <asm/mmu.h>
 #include <asm/immap_85xx.h>
+#include <asm/fsl_ddr_sdram.h>
 #include <ioports.h>
 #include <asm/io.h>
 #include <spd_sdram.h>
@@ -308,7 +310,9 @@ initdram (int board_type)
        }
 #endif
 
-       dram_size = spd_sdram ();
+       dram_size = fsl_ddr_sdram();
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
 
 #if defined(CONFIG_DDR_ECC)
        /* Initialize and enable DDR ECC.
index b0a9d683da431ca5836e64351dc134319018190f..93bedda66ecda5a8867a5cfbe8d311ad1d9b4f2a 100644 (file)
@@ -76,7 +76,6 @@ SECTIONS
     cpu/mpc85xx/cpu_init.o (.text)
     cpu/mpc85xx/cpu.o (.text)
     cpu/mpc85xx/speed.o (.text)
-    cpu/mpc85xx/spd_sdram.o (.text)
     common/dlmalloc.o (.text)
     lib_generic/crc32.o (.text)
     lib_ppc/extable.o (.text)
index 79e910c764095f9ec441707940506fa3e7f72a25..af691a474f652fa862b28b08802e5f57c2bdf0a8 100644 (file)
@@ -39,8 +39,8 @@ int do_bootp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(
        bootp,  3,      1,      do_bootp,
-       "bootp\t- boot image via network using BootP/TFTP protocol\n",
-       "[loadAddress] [bootfilename]\n"
+       "bootp\t- boot image via network using BOOTP/TFTP protocol\n",
+       "[loadAddress] [[hostIPaddr:]bootfilename]\n"
 );
 
 int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -62,7 +62,7 @@ int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 U_BOOT_CMD(
        rarpboot,       3,      1,      do_rarpb,
        "rarpboot- boot image via network using RARP/TFTP protocol\n",
-       "[loadAddress] [bootfilename]\n"
+       "[loadAddress] [[hostIPaddr:]bootfilename]\n"
 );
 
 #if defined(CONFIG_CMD_DHCP)
@@ -73,8 +73,8 @@ int do_dhcp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(
        dhcp,   3,      1,      do_dhcp,
-       "dhcp\t- invoke DHCP client to obtain IP/boot params\n",
-       "\n"
+       "dhcp\t- boot image via network using DHCP/TFTP protocol\n",
+       "[loadAddress] [[hostIPaddr:]bootfilename]\n"
 );
 #endif
 
index 1c1e24b16cd8c3ec1f92d89d8e00fdfb78d4e82d..5de1c521aae12fe2f59593383e7c3b2e8da2c1f2 100644 (file)
@@ -56,3 +56,12 @@ int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 }
 
 /* ------------------------------------------------------------------------- */
+
+extern int greth_initialize(bd_t *bis);
+
+#ifdef CONFIG_GRETH
+int cpu_eth_init(bd_t *bis)
+{
+       return greth_initialize(bis);
+}
+#endif
index 306a210048872f3e7923f30a1942981848a2987b..1725fdb090bf2399f5a4811e78275d840e092ae8 100644 (file)
@@ -65,3 +65,11 @@ u64 flash_read64(void *addr)
 }
 
 /* ------------------------------------------------------------------------- */
+extern int greth_initialize(bd_t *bis);
+
+#ifdef CONFIG_GRETH
+int cpu_eth_init(bd_t *bis)
+{
+       return greth_initialize(bis);
+}
+#endif
index f0d954b3fbdfdd04ac7983c3bf04e0f623aa614c..8d2152d9c9305c1d485957532551c1a33c6eb49a 100644 (file)
@@ -107,3 +107,17 @@ int watchdog_init(void)
        return (0);
 }
 #endif                         /* CONFIG_WATCHDOG */
+
+#if defined(CONFIG_MCFFEC)
+/* Default initializations for MCFFEC controllers.  To override,
+ * create a board-specific function called:
+ *     int board_eth_init(bd_t *bis)
+ */
+
+extern int mcffec_initialize(bd_t*);
+
+int cpu_eth_init(bd_t *bis)
+{
+       return mcffec_initialize(bis);
+}
+#endif
index d5d3d339c51a125391ef7692449b4f68cfd9671c..2af31cbb98d079e3467a68e0472e9ce8ac4c58a8 100644 (file)
@@ -321,3 +321,18 @@ int do_reset(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char *argv[])
        return 0;
 };
 #endif
+
+#if defined(CONFIG_MCFFEC)
+/* Default initializations for MCFFEC controllers.  To override,
+ * create a board-specific function called:
+ *     int board_eth_init(bd_t *bis)
+ */
+
+extern int mcffec_initialize(bd_t*);
+
+int cpu_eth_init(bd_t *bis)
+{
+       return mcffec_initialize(bis);
+}
+#endif
+
index 61541ab0f15fbbeaf2abdb22ba674c1ba6566341..20d0d5cf279eb1c96fb6c1e97db601c65dbe3e3d 100644 (file)
@@ -129,3 +129,17 @@ int watchdog_init(void)
        return (0);
 }
 #endif                         /* CONFIG_WATCHDOG */
+
+#if defined(CONFIG_MCFFEC)
+/* Default initializations for MCFFEC controllers.  To override,
+ * create a board-specific function called:
+ *     int board_eth_init(bd_t *bis)
+ */
+
+extern int mcffec_initialize(bd_t*);
+
+int cpu_eth_init(bd_t *bis)
+{
+       return mcffec_initialize(bis);
+}
+#endif
index e601b8949b61a8ef012742d51e7b51660a5f2dff..ab342ddeb0459e71cc0ad312823ade3f34295cf4 100644 (file)
@@ -95,3 +95,17 @@ int checkcpu(void)
 
        return 0;
 }
+
+#if defined(CONFIG_MCFFEC)
+/* Default initializations for MCFFEC controllers.  To override,
+ * create a board-specific function called:
+ *     int board_eth_init(bd_t *bis)
+ */
+
+extern int mcffec_initialize(bd_t*);
+
+int cpu_eth_init(bd_t *bis)
+{
+       return mcffec_initialize(bis);
+}
+#endif
index 528bca6bf9deb7071f8b8b661422bb99bf39c556..1ba7aa80a3efee66685f65d4b3b684cdbd02f842 100644 (file)
@@ -141,3 +141,24 @@ int watchdog_init(void)
        return (0);
 }
 #endif                         /* CONFIG_HW_WATCHDOG */
+
+#if defined(CONFIG_FSLDMAFEC) || defined(CONFIG_MCFFEC)
+/* Default initializations for MCFFEC controllers.  To override,
+ * create a board-specific function called:
+ *     int board_eth_init(bd_t *bis)
+ */
+
+extern int mcdmafec_initialize(bd_t *bis);
+extern int mcffec_initialize(bd_t*);
+
+int cpu_eth_init(bd_t *bis)
+{
+#if defined(CONFIG_FSLDMAFEC)
+       mcdmafec_initialize(bis);
+#endif
+#if defined(CONFIG_MCFFEC)
+       mcffec_initialize(bis);
+#endif
+       return 0;
+}
+#endif
index d51a6dd79f6cf99544dc22dd1da3f99b3e5661b8..627e61b059b7285b13cf2fcc3688eab21a0153a9 100644 (file)
@@ -34,14 +34,22 @@ SOBJS       = $(SOBJS-y)
 COBJS-$(CONFIG_MP) += mp.o
 COBJS-$(CONFIG_OF_LIBFDT) += fdt.o
 
-ifneq ($(CONFIG_FSL_DDR3),y)
-ifneq ($(CONFIG_FSL_DDR2),y)
-ifneq ($(CONFIG_FSL_DDR1),y)
-COBJS-y        += spd_sdram.o
-endif
-endif
-endif
+# supports ddr1
+COBJS-$(CONFIG_MPC8540) += ddr-gen1.o
+COBJS-$(CONFIG_MPC8560) += ddr-gen1.o
+COBJS-$(CONFIG_MPC8541) += ddr-gen1.o
+COBJS-$(CONFIG_MPC8555) += ddr-gen1.o
 
+# supports ddr1/2
+COBJS-$(CONFIG_MPC8548) += ddr-gen2.o
+COBJS-$(CONFIG_MPC8568) += ddr-gen2.o
+COBJS-$(CONFIG_MPC8544) += ddr-gen2.o
+
+# supports ddr1/2/3
+COBJS-$(CONFIG_MPC8572) += ddr-gen3.o
+COBJS-$(CONFIG_MPC8536) += ddr-gen3.o
+
+COBJS-$(CONFIG_MPC8536) += mpc8536_serdes.o
 COBJS  = traps.o cpu.o cpu_init.o speed.o interrupts.o tlb.o \
          pci.o serial_scc.o commproc.o ether_fcc.o qe_io.o \
          $(COBJS-y)
index bde8e56703c6286a0ed8528f79651df9296eb0c9..2fe3cea3f1707f3435e70ba500edaf1cc3f07486 100644 (file)
@@ -36,6 +36,8 @@ DECLARE_GLOBAL_DATA_PTR;
 struct cpu_type cpu_type_list [] = {
        CPU_TYPE_ENTRY(8533, 8533),
        CPU_TYPE_ENTRY(8533, 8533_E),
+       CPU_TYPE_ENTRY(8536, 8536),
+       CPU_TYPE_ENTRY(8536, 8536_E),
        CPU_TYPE_ENTRY(8540, 8540),
        CPU_TYPE_ENTRY(8541, 8541),
        CPU_TYPE_ENTRY(8541, 8541_E),
@@ -89,6 +91,9 @@ int checkcpu (void)
        svr = get_svr();
        ver = SVR_SOC_VER(svr);
        major = SVR_MAJ(svr);
+#ifdef CONFIG_MPC8536
+       major &= 0x7; /* the msb of this nibble is a mfg code */
+#endif
        minor = SVR_MIN(svr);
 
        puts("CPU:   ");
@@ -154,7 +159,8 @@ int checkcpu (void)
 #endif
        clkdiv = lcrr & 0x0f;
        if (clkdiv == 2 || clkdiv == 4 || clkdiv == 8) {
-#if defined(CONFIG_MPC8548) || defined(CONFIG_MPC8544)
+#if defined(CONFIG_MPC8548) || defined(CONFIG_MPC8544) || \
+    defined(CONFIG_MPC8572) || defined(CONFIG_MPC8536)
                /*
                 * Yes, the entire PQ38 family use the same
                 * bit-representation for twice the clock divider values.
index 4feb7519aa191a6625a1c14d96dd31381ba22eb7..783c5bae7736315b948993ae7404e733fdb3cf1a 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#ifdef CONFIG_MPC8536
+extern void fsl_serdes_init(void);
+#endif
+
 #ifdef CONFIG_QE
 extern qe_iop_conf_t qe_iop_conf_tab[];
 extern void qe_config_iopin(u8 port, u8 pin, int dir,
@@ -240,6 +244,9 @@ void cpu_init_f (void)
        /* Config QE ioports */
        config_qe_ioports();
 #endif
+#if defined(CONFIG_MPC8536)
+       fsl_serdes_init();
+#endif
 
 }
 
diff --git a/cpu/mpc85xx/ddr-gen1.c b/cpu/mpc85xx/ddr-gen1.c
new file mode 100644 (file)
index 0000000..2c11ee4
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <asm/io.h>
+#include <asm/fsl_ddr_sdram.h>
+
+#if (CONFIG_CHIP_SELECTS_PER_CTRL > 4)
+#error Invalid setting for CONFIG_CHIP_SELECTS_PER_CTRL
+#endif
+
+void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
+                            unsigned int ctrl_num)
+{
+       unsigned int i;
+       volatile ccsr_ddr_t *ddr = (void *)CFG_MPC85xx_DDR_ADDR;
+
+       if (ctrl_num != 0) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
+               if (i == 0) {
+                       out_be32(&ddr->cs0_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs0_config, regs->cs[i].config);
+
+               } else if (i == 1) {
+                       out_be32(&ddr->cs1_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs1_config, regs->cs[i].config);
+
+               } else if (i == 2) {
+                       out_be32(&ddr->cs2_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs2_config, regs->cs[i].config);
+
+               } else if (i == 3) {
+                       out_be32(&ddr->cs3_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs3_config, regs->cs[i].config);
+               }
+       }
+
+       out_be32(&ddr->timing_cfg_1, regs->timing_cfg_1);
+       out_be32(&ddr->timing_cfg_2, regs->timing_cfg_2);
+       out_be32(&ddr->sdram_mode, regs->ddr_sdram_mode);
+       out_be32(&ddr->sdram_interval, regs->ddr_sdram_interval);
+#if defined(CONFIG_MPC8555) || defined(CONFIG_MPC8541)
+       out_be32(&ddr->sdram_clk_cntl, regs->ddr_sdram_clk_cntl);
+#endif
+
+       /*
+        * 200 painful micro-seconds must elapse between
+        * the DDR clock setup and the DDR config enable.
+        */
+       udelay(200);
+       asm volatile("sync;isync");
+
+       out_be32(&ddr->sdram_cfg, regs->ddr_sdram_cfg);
+
+       asm("sync;isync;msync");
+       udelay(500);
+}
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+extern void dma_init(void);
+extern uint dma_check(void);
+extern int dma_xfer(void *dest, uint count, void *src);
+
+/*
+ * Initialize all of memory for ECC, then enable errors.
+ */
+
+void
+ddr_enable_ecc(unsigned int dram_size)
+{
+       uint *p = 0;
+       uint i = 0;
+       volatile ccsr_ddr_t *ddr= (void *)(CFG_MPC85xx_DDR_ADDR);
+
+       dma_init();
+
+       for (*p = 0; p < (uint *)(8 * 1024); p++) {
+               if (((unsigned int)p & 0x1f) == 0) {
+                       ppcDcbz((unsigned long) p);
+               }
+               *p = (unsigned int)CONFIG_MEM_INIT_VALUE;
+               if (((unsigned int)p & 0x1c) == 0x1c) {
+                       ppcDcbf((unsigned long) p);
+               }
+       }
+
+       dma_xfer((uint *)0x002000, 0x002000, (uint *)0); /* 8K */
+       dma_xfer((uint *)0x004000, 0x004000, (uint *)0); /* 16K */
+       dma_xfer((uint *)0x008000, 0x008000, (uint *)0); /* 32K */
+       dma_xfer((uint *)0x010000, 0x010000, (uint *)0); /* 64K */
+       dma_xfer((uint *)0x020000, 0x020000, (uint *)0); /* 128k */
+       dma_xfer((uint *)0x040000, 0x040000, (uint *)0); /* 256k */
+       dma_xfer((uint *)0x080000, 0x080000, (uint *)0); /* 512k */
+       dma_xfer((uint *)0x100000, 0x100000, (uint *)0); /* 1M */
+       dma_xfer((uint *)0x200000, 0x200000, (uint *)0); /* 2M */
+       dma_xfer((uint *)0x400000, 0x400000, (uint *)0); /* 4M */
+
+       for (i = 1; i < dram_size / 0x800000; i++) {
+               dma_xfer((uint *)(0x800000*i), 0x800000, (uint *)0);
+       }
+
+       /*
+        * Enable errors for ECC.
+        */
+       debug("DMA DDR: err_disable = 0x%08x\n", ddr->err_disable);
+       ddr->err_disable = 0x00000000;
+       asm("sync;isync;msync");
+       debug("DMA DDR: err_disable = 0x%08x\n", ddr->err_disable);
+}
+
+#endif /* CONFIG_DDR_ECC  && ! CONFIG_ECC_INIT_VIA_DDRCONTROLLER */
diff --git a/cpu/mpc85xx/ddr-gen2.c b/cpu/mpc85xx/ddr-gen2.c
new file mode 100644 (file)
index 0000000..130090c
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <asm/io.h>
+#include <asm/fsl_ddr_sdram.h>
+
+#if (CONFIG_CHIP_SELECTS_PER_CTRL > 4)
+#error Invalid setting for CONFIG_CHIP_SELECTS_PER_CTRL
+#endif
+
+void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
+                            unsigned int ctrl_num)
+{
+       unsigned int i;
+       volatile ccsr_ddr_t *ddr = (void *)CFG_MPC85xx_DDR_ADDR;
+
+       if (ctrl_num) {
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
+               if (i == 0) {
+                       out_be32(&ddr->cs0_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs0_config, regs->cs[i].config);
+
+               } else if (i == 1) {
+                       out_be32(&ddr->cs1_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs1_config, regs->cs[i].config);
+
+               } else if (i == 2) {
+                       out_be32(&ddr->cs2_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs2_config, regs->cs[i].config);
+
+               } else if (i == 3) {
+                       out_be32(&ddr->cs3_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs3_config, regs->cs[i].config);
+               }
+       }
+
+       out_be32(&ddr->timing_cfg_3, regs->timing_cfg_3);
+       out_be32(&ddr->timing_cfg_0, regs->timing_cfg_0);
+       out_be32(&ddr->timing_cfg_1, regs->timing_cfg_1);
+       out_be32(&ddr->timing_cfg_2, regs->timing_cfg_2);
+       out_be32(&ddr->sdram_cfg_2, regs->ddr_sdram_cfg_2);
+       out_be32(&ddr->sdram_mode, regs->ddr_sdram_mode);
+       out_be32(&ddr->sdram_mode_2, regs->ddr_sdram_mode_2);
+       out_be32(&ddr->sdram_md_cntl, regs->ddr_sdram_md_cntl);
+       out_be32(&ddr->sdram_interval, regs->ddr_sdram_interval);
+       out_be32(&ddr->sdram_data_init, regs->ddr_data_init);
+       out_be32(&ddr->sdram_clk_cntl, regs->ddr_sdram_clk_cntl);
+       out_be32(&ddr->init_addr, regs->ddr_init_addr);
+       out_be32(&ddr->init_ext_addr, regs->ddr_init_ext_addr);
+
+       /*
+        * 200 painful micro-seconds must elapse between
+        * the DDR clock setup and the DDR config enable.
+        */
+       udelay(200);
+       asm volatile("sync;isync");
+
+       out_be32(&ddr->sdram_cfg, regs->ddr_sdram_cfg);
+
+       /* Poll DDR_SDRAM_CFG_2[D_INIT] bit until auto-data init is done.  */
+       while (in_be32(&ddr->sdram_cfg_2) & 0x10) {
+               udelay(10000);          /* throttle polling rate */
+       }
+}
diff --git a/cpu/mpc85xx/ddr-gen3.c b/cpu/mpc85xx/ddr-gen3.c
new file mode 100644 (file)
index 0000000..d7cc9db
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2008 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 <common.h>
+#include <asm/io.h>
+#include <asm/fsl_ddr_sdram.h>
+
+#if (CONFIG_CHIP_SELECTS_PER_CTRL > 4)
+#error Invalid setting for CONFIG_CHIP_SELECTS_PER_CTRL
+#endif
+
+void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
+                            unsigned int ctrl_num)
+{
+       unsigned int i;
+       volatile ccsr_ddr_t *ddr;
+
+       switch (ctrl_num) {
+       case 0:
+               ddr = (void *)CFG_MPC85xx_DDR_ADDR;
+               break;
+       case 1:
+               ddr = (void *)CFG_MPC85xx_DDR2_ADDR;
+               break;
+       default:
+               printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
+               return;
+       }
+
+       for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
+               if (i == 0) {
+                       out_be32(&ddr->cs0_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs0_config, regs->cs[i].config);
+                       out_be32(&ddr->cs0_config_2, regs->cs[i].config_2);
+
+               } else if (i == 1) {
+                       out_be32(&ddr->cs1_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs1_config, regs->cs[i].config);
+                       out_be32(&ddr->cs1_config_2, regs->cs[i].config_2);
+
+               } else if (i == 2) {
+                       out_be32(&ddr->cs2_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs2_config, regs->cs[i].config);
+                       out_be32(&ddr->cs2_config_2, regs->cs[i].config_2);
+
+               } else if (i == 3) {
+                       out_be32(&ddr->cs3_bnds, regs->cs[i].bnds);
+                       out_be32(&ddr->cs3_config, regs->cs[i].config);
+                       out_be32(&ddr->cs3_config_2, regs->cs[i].config_2);
+               }
+       }
+
+       out_be32(&ddr->timing_cfg_3, regs->timing_cfg_3);
+       out_be32(&ddr->timing_cfg_0, regs->timing_cfg_0);
+       out_be32(&ddr->timing_cfg_1, regs->timing_cfg_1);
+       out_be32(&ddr->timing_cfg_2, regs->timing_cfg_2);
+       out_be32(&ddr->sdram_cfg_2, regs->ddr_sdram_cfg_2);
+       out_be32(&ddr->sdram_mode, regs->ddr_sdram_mode);
+       out_be32(&ddr->sdram_mode_2, regs->ddr_sdram_mode_2);
+       out_be32(&ddr->sdram_md_cntl, regs->ddr_sdram_md_cntl);
+       out_be32(&ddr->sdram_interval, regs->ddr_sdram_interval);
+       out_be32(&ddr->sdram_data_init, regs->ddr_data_init);
+       out_be32(&ddr->sdram_clk_cntl, regs->ddr_sdram_clk_cntl);
+       out_be32(&ddr->init_addr, regs->ddr_init_addr);
+       out_be32(&ddr->init_ext_addr, regs->ddr_init_ext_addr);
+
+       out_be32(&ddr->timing_cfg_4, regs->timing_cfg_4);
+       out_be32(&ddr->timing_cfg_5, regs->timing_cfg_5);
+       out_be32(&ddr->ddr_zq_cntl, regs->ddr_zq_cntl);
+       out_be32(&ddr->ddr_wrlvl_cntl, regs->ddr_wrlvl_cntl);
+       out_be32(&ddr->ddr_pd_cntl, regs->ddr_pd_cntl);
+       out_be32(&ddr->ddr_sr_cntr, regs->ddr_sr_cntr);
+       out_be32(&ddr->ddr_sdram_rcw_1, regs->ddr_sdram_rcw_1);
+       out_be32(&ddr->ddr_sdram_rcw_2, regs->ddr_sdram_rcw_2);
+
+       /*
+        * 32-bit workaround for DDR2
+        * 32_BE
+        */
+       if ((((in_be32(&ddr->sdram_cfg) >> 24) & 0x7) == SDRAM_TYPE_DDR2)
+           && in_be32(&ddr->sdram_cfg_2) & 0x80000) {
+               /* set DEBUG_1[31] */
+               u32 temp = in_be32(&ddr->debug_1);
+               out_be32(&ddr->debug_1, temp | 1);
+       }
+
+       /*
+        * 200 painful micro-seconds must elapse between
+        * the DDR clock setup and the DDR config enable.
+        */
+       udelay(200);
+       asm volatile("sync;isync");
+
+       out_be32(&ddr->sdram_cfg, regs->ddr_sdram_cfg);
+
+       /* Poll DDR_SDRAM_CFG_2[D_INIT] bit until auto-data init is done.  */
+       while (in_be32(&ddr->sdram_cfg_2) & 0x10) {
+               udelay(10000);          /* throttle polling rate */
+       }
+}
index 4fe1facf457f4a3d2c0a72ee741c561b4f9e1ab8..06d4d8b7342f477baaca9b1bd8f04c86694de9ce 100644 (file)
 #include <watchdog.h>
 #include <command.h>
 #include <asm/processor.h>
-#include <ppc_asm.tmpl>
 
-unsigned decrementer_count;            /* count value for 1e6/HZ microseconds */
-
-static __inline__ unsigned long get_msr(void)
-{
-       unsigned long msr;
-
-       asm volatile("mfmsr %0" : "=r" (msr) :);
-       return msr;
-}
-
-static __inline__ void set_msr(unsigned long msr)
-{
-       asm volatile("mtmsr %0" : : "r" (msr));
-       asm volatile("isync");
-}
-
-static __inline__ unsigned long get_dec (void)
-{
-       unsigned long val;
-
-       asm volatile ("mfdec %0":"=r" (val):);
-
-       return val;
-}
-
-
-static __inline__ void set_dec (unsigned long val)
-{
-       if (val)
-               asm volatile ("mtdec %0"::"r" (val));
-}
-
-void enable_interrupts (void)
-{
-       set_msr (get_msr() | MSR_EE);
-}
-
-/* returns flag if MSR_EE was set before */
-int disable_interrupts (void)
-{
-       ulong msr = get_msr();
-       set_msr (msr & ~MSR_EE);
-       return ((msr & MSR_EE) != 0);
-}
-
-int interrupt_init (void)
+int interrupt_init_cpu(unsigned long *decrementer_count)
 {
        volatile ccsr_pic_t *pic = (void *)(CFG_MPC85xx_PIC_ADDR);
 
        pic->gcr = MPC85xx_PICGCR_RST;
-       while (pic->gcr & MPC85xx_PICGCR_RST);
+       while (pic->gcr & MPC85xx_PICGCR_RST)
+               ;
        pic->gcr = MPC85xx_PICGCR_M;
-       decrementer_count = get_tbclk() / CFG_HZ;
+
+       *decrementer_count = get_tbclk() / CFG_HZ;
+
+       /* PIE is same as DIE, dec interrupt enable */
        mtspr(SPRN_TCR, TCR_PIE);
-       set_dec (decrementer_count);
-       set_msr (get_msr () | MSR_EE);
 
 #ifdef CONFIG_INTERRUPTS
        pic->iivpr1 = 0x810001; /* 50220 enable ecm interrupts */
@@ -123,9 +79,7 @@ int interrupt_init (void)
        return (0);
 }
 
-/*
- * Install and free a interrupt handler. Not implemented yet.
- */
+/* Install and free a interrupt handler. Not implemented yet. */
 
 void
 irq_install_handler(int vec, interrupt_handler_t *handler, void *arg)
@@ -139,55 +93,16 @@ irq_free_handler(int vec)
        return;
 }
 
-/****************************************************************************/
-
-
-volatile ulong timestamp = 0;
-
-/*
- * timer_interrupt - gets called when the decrementer overflows,
- * with interrupts disabled.
- * Trivial implementation - no need to be really accurate.
- */
-void timer_interrupt(struct pt_regs *regs)
+void timer_interrupt_cpu(struct pt_regs *regs)
 {
-       timestamp++;
-       set_dec (decrementer_count);
+       /* PIS is same as DIS, dec interrupt status */
        mtspr(SPRN_TSR, TSR_PIS);
-#if defined(CONFIG_WATCHDOG)
-       if ((timestamp % 1000) == 0)
-               reset_85xx_watchdog();
-#endif /* CONFIG_WATCHDOG */
-}
-
-void reset_timer (void)
-{
-       timestamp = 0;
-}
-
-ulong get_timer (ulong base)
-{
-       return (timestamp - base);
-}
-
-void set_timer (ulong t)
-{
-       timestamp = t;
 }
 
 #if defined(CONFIG_CMD_IRQ)
-
-/*******************************************************************************
- *
- * irqinfo - print information about PCI devices,not implemented.
- *
- */
-int
-do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+/* irqinfo - print information about PCI devices,not implemented. */
+int do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-       printf ("\nInterrupt-unsupported:\n");
-
        return 0;
 }
-
 #endif
diff --git a/cpu/mpc85xx/mpc8536_serdes.c b/cpu/mpc85xx/mpc8536_serdes.c
new file mode 100644 (file)
index 0000000..ae091e6
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2008 Freescale Semicondutor, Inc. All rights reserved.
+ *     Dave Liu <daveliu@freescale.com>
+ *
+ * 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 <config.h>
+#include <common.h>
+#include <asm/io.h>
+#include <asm/immap_85xx.h>
+
+/* PORDEVSR register */
+#define GUTS_PORDEVSR_OFFS             0xc
+#define GUTS_PORDEVSR_SERDES2_IO_SEL   0x38000000
+#define GUTS_PORDEVSR_SERDES2_IO_SEL_SHIFT     27
+
+/* SerDes CR0 register */
+#define        FSL_SRDSCR0_OFFS        0x0
+#define FSL_SRDSCR0_TXEQA_MASK 0x00007000
+#define FSL_SRDSCR0_TXEQA_SGMII        0x00004000
+#define FSL_SRDSCR0_TXEQA_SATA 0x00001000
+#define FSL_SRDSCR0_TXEQE_MASK 0x00000700
+#define FSL_SRDSCR0_TXEQE_SGMII        0x00000400
+#define FSL_SRDSCR0_TXEQE_SATA 0x00000100
+
+/* SerDes CR1 register */
+#define FSL_SRDSCR1_OFFS       0x4
+#define FSL_SRDSCR1_LANEA_MASK 0x80200000
+#define FSL_SRDSCR1_LANEA_OFF  0x80200000
+#define FSL_SRDSCR1_LANEE_MASK 0x08020000
+#define FSL_SRDSCR1_LANEE_OFF  0x08020000
+
+/* SerDes CR2 register */
+#define FSL_SRDSCR2_OFFS       0x8
+#define FSL_SRDSCR2_EICA_MASK  0x00001f00
+#define FSL_SRDSCR2_EICA_SGMII 0x00000400
+#define FSL_SRDSCR2_EICA_SATA  0x00001400
+#define FSL_SRDSCR2_EICE_MASK  0x0000001f
+#define FSL_SRDSCR2_EICE_SGMII 0x00000004
+#define FSL_SRDSCR2_EICE_SATA  0x00000014
+
+/* SerDes CR3 register */
+#define FSL_SRDSCR3_OFFS       0xc
+#define FSL_SRDSCR3_LANEA_MASK 0x3f000700
+#define FSL_SRDSCR3_LANEA_SGMII        0x00000000
+#define FSL_SRDSCR3_LANEA_SATA 0x15000500
+#define FSL_SRDSCR3_LANEE_MASK 0x003f0007
+#define FSL_SRDSCR3_LANEE_SGMII        0x00000000
+#define FSL_SRDSCR3_LANEE_SATA 0x00150005
+
+void fsl_serdes_init(void)
+{
+       void *guts = (void *)(CFG_MPC85xx_GUTS_ADDR);
+       void *sd = (void *)CFG_MPC85xx_SERDES2_ADDR;
+       u32 pordevsr = in_be32(guts + GUTS_PORDEVSR_OFFS);
+       u32 srds2_io_sel;
+       u32 tmp;
+
+       /* parse the SRDS2_IO_SEL of PORDEVSR */
+       srds2_io_sel = (pordevsr & GUTS_PORDEVSR_SERDES2_IO_SEL)
+                      >> GUTS_PORDEVSR_SERDES2_IO_SEL_SHIFT;
+
+       switch (srds2_io_sel) {
+       case 1: /* Lane A - SATA1, Lane E - SATA2 */
+               /* CR 0 */
+               tmp = in_be32(sd + FSL_SRDSCR0_OFFS);
+               tmp &= ~FSL_SRDSCR0_TXEQA_MASK;
+               tmp |= FSL_SRDSCR0_TXEQA_SATA;
+               tmp &= ~FSL_SRDSCR0_TXEQE_MASK;
+               tmp |= FSL_SRDSCR0_TXEQE_SATA;
+               out_be32(sd + FSL_SRDSCR0_OFFS, tmp);
+               /* CR 1 */
+               tmp = in_be32(sd + FSL_SRDSCR1_OFFS);
+               tmp &= ~FSL_SRDSCR1_LANEA_MASK;
+               tmp &= ~FSL_SRDSCR1_LANEE_MASK;
+               out_be32(sd + FSL_SRDSCR1_OFFS, tmp);
+               /* CR 2 */
+               tmp = in_be32(sd + FSL_SRDSCR2_OFFS);
+               tmp &= ~FSL_SRDSCR2_EICA_MASK;
+               tmp |= FSL_SRDSCR2_EICA_SATA;
+               tmp &= ~FSL_SRDSCR2_EICE_MASK;
+               tmp |= FSL_SRDSCR2_EICE_SATA;
+               out_be32(sd + FSL_SRDSCR2_OFFS, tmp);
+               /* CR 3 */
+               tmp = in_be32(sd + FSL_SRDSCR3_OFFS);
+               tmp &= ~FSL_SRDSCR3_LANEA_MASK;
+               tmp |= FSL_SRDSCR3_LANEA_SATA;
+               tmp &= ~FSL_SRDSCR3_LANEE_MASK;
+               tmp |= FSL_SRDSCR3_LANEE_SATA;
+               out_be32(sd + FSL_SRDSCR3_OFFS, tmp);
+               break;
+       case 3: /* Lane A - SATA1, Lane E - disabled */
+               /* CR 0 */
+               tmp = in_be32(sd + FSL_SRDSCR0_OFFS);
+               tmp &= ~FSL_SRDSCR0_TXEQA_MASK;
+               tmp |= FSL_SRDSCR0_TXEQA_SATA;
+               out_be32(sd + FSL_SRDSCR0_OFFS, tmp);
+               /* CR 1 */
+               tmp = in_be32(sd + FSL_SRDSCR1_OFFS);
+               tmp &= ~FSL_SRDSCR1_LANEE_MASK;
+               tmp |= FSL_SRDSCR1_LANEE_OFF;
+               out_be32(sd + FSL_SRDSCR1_OFFS, tmp);
+               /* CR 2 */
+               tmp = in_be32(sd + FSL_SRDSCR2_OFFS);
+               tmp &= ~FSL_SRDSCR2_EICA_MASK;
+               tmp |= FSL_SRDSCR2_EICA_SATA;
+               out_be32(sd + FSL_SRDSCR2_OFFS, tmp);
+               /* CR 3 */
+               tmp = in_be32(sd + FSL_SRDSCR3_OFFS);
+               tmp &= ~FSL_SRDSCR3_LANEA_MASK;
+               tmp |= FSL_SRDSCR3_LANEA_SATA;
+               out_be32(sd + FSL_SRDSCR3_OFFS, tmp);
+               break;
+       case 4: /* Lane A - eTSEC1 SGMII, Lane E - eTSEC3 SGMII */
+               /* CR 0 */
+               tmp = in_be32(sd + FSL_SRDSCR0_OFFS);
+               tmp &= ~FSL_SRDSCR0_TXEQA_MASK;
+               tmp |= FSL_SRDSCR0_TXEQA_SGMII;
+               tmp &= ~FSL_SRDSCR0_TXEQE_MASK;
+               tmp |= FSL_SRDSCR0_TXEQE_SGMII;
+               out_be32(sd + FSL_SRDSCR0_OFFS, tmp);
+               /* CR 1 */
+               tmp = in_be32(sd + FSL_SRDSCR1_OFFS);
+               tmp &= ~FSL_SRDSCR1_LANEA_MASK;
+               tmp &= ~FSL_SRDSCR1_LANEE_MASK;
+               out_be32(sd + FSL_SRDSCR1_OFFS, tmp);
+               /* CR 2 */
+               tmp = in_be32(sd + FSL_SRDSCR2_OFFS);
+               tmp &= ~FSL_SRDSCR2_EICA_MASK;
+               tmp |= FSL_SRDSCR2_EICA_SGMII;
+               tmp &= ~FSL_SRDSCR2_EICE_MASK;
+               tmp |= FSL_SRDSCR2_EICE_SGMII;
+               out_be32(sd + FSL_SRDSCR2_OFFS, tmp);
+               /* CR 3 */
+               tmp = in_be32(sd + FSL_SRDSCR3_OFFS);
+               tmp &= ~FSL_SRDSCR3_LANEA_MASK;
+               tmp |= FSL_SRDSCR3_LANEA_SGMII;
+               tmp &= ~FSL_SRDSCR3_LANEE_MASK;
+               tmp |= FSL_SRDSCR3_LANEE_SGMII;
+               out_be32(sd + FSL_SRDSCR3_OFFS, tmp);
+               break;
+       case 6: /* Lane A - eTSEC1 SGMII, Lane E - disabled */
+               /* CR 0 */
+               tmp = in_be32(sd + FSL_SRDSCR0_OFFS);
+               tmp &= ~FSL_SRDSCR0_TXEQA_MASK;
+               tmp |= FSL_SRDSCR0_TXEQA_SGMII;
+               out_be32(sd + FSL_SRDSCR0_OFFS, tmp);
+               /* CR 1 */
+               tmp = in_be32(sd + FSL_SRDSCR1_OFFS);
+               tmp &= ~FSL_SRDSCR1_LANEE_MASK;
+               tmp |= FSL_SRDSCR1_LANEE_OFF;
+               out_be32(sd + FSL_SRDSCR1_OFFS, tmp);
+               /* CR 2 */
+               tmp = in_be32(sd + FSL_SRDSCR2_OFFS);
+               tmp &= ~FSL_SRDSCR2_EICA_MASK;
+               tmp |= FSL_SRDSCR2_EICA_SGMII;
+               out_be32(sd + FSL_SRDSCR2_OFFS, tmp);
+               /* CR 3 */
+               tmp = in_be32(sd + FSL_SRDSCR3_OFFS);
+               tmp &= ~FSL_SRDSCR3_LANEA_MASK;
+               tmp |= FSL_SRDSCR3_LANEA_SGMII;
+               out_be32(sd + FSL_SRDSCR3_OFFS, tmp);
+               break;
+       case 7: /* Lane A - disabled, Lane E - disabled */
+               /* CR 1 */
+               tmp = in_be32(sd + FSL_SRDSCR1_OFFS);
+               tmp &= ~FSL_SRDSCR1_LANEA_MASK;
+               tmp |= FSL_SRDSCR1_LANEA_OFF;
+               tmp &= ~FSL_SRDSCR1_LANEE_MASK;
+               tmp |= FSL_SRDSCR1_LANEE_OFF;
+               out_be32(sd + FSL_SRDSCR1_OFFS, tmp);
+               break;
+       default:
+               break;
+       }
+}
index a5060cdec43b6054de55536b4270d73014ab0c28..fdc4c83b7834ed8cd8bbc2e04f15fd7f5be8e77a 100644 (file)
@@ -29,7 +29,7 @@
 #include <asm/cpm_85xx.h>
 #include <pci.h>
 
-#if defined(CONFIG_PCI)
+#if defined(CONFIG_PCI) && !defined(CONFIG_FSL_PCI_INIT)
 
 static struct pci_controller *pci_hose;
 
diff --git a/cpu/mpc85xx/spd_sdram.c b/cpu/mpc85xx/spd_sdram.c
deleted file mode 100644 (file)
index 8e321eb..0000000
+++ /dev/null
@@ -1,1154 +0,0 @@
-/*
- * Copyright 2004, 2007 Freescale Semiconductor.
- * (C) Copyright 2003 Motorola Inc.
- * Xianghua Xiao (X.Xiao@motorola.com)
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <asm/processor.h>
-#include <i2c.h>
-#include <spd.h>
-#include <asm/mmu.h>
-#include <asm/fsl_law.h>
-
-
-#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
-extern void dma_init(void);
-extern uint dma_check(void);
-extern int dma_xfer(void *dest, uint count, void *src);
-#endif
-
-#ifdef CONFIG_SPD_EEPROM
-
-#ifndef        CFG_READ_SPD
-#define CFG_READ_SPD   i2c_read
-#endif
-
-static unsigned int setup_laws_and_tlbs(unsigned int memsize);
-
-
-/*
- * Convert picoseconds into clock cycles (rounding up if needed).
- */
-
-int
-picos_to_clk(int picos)
-{
-       int clks;
-
-       clks = picos / (2000000000 / (get_ddr_freq(0) / 1000));
-       if (picos % (2000000000 / (get_ddr_freq(0) / 1000)) != 0) {
-               clks++;
-       }
-
-       return clks;
-}
-
-
-/*
- * Calculate the Density of each Physical Rank.
- * Returned size is in bytes.
- *
- * Study these table from Byte 31 of JEDEC SPD Spec.
- *
- *             DDR I   DDR II
- *     Bit     Size    Size
- *     ---     -----   ------
- *     7 high  512MB   512MB
- *     6       256MB   256MB
- *     5       128MB   128MB
- *     4        64MB    16GB
- *     3        32MB     8GB
- *     2        16MB     4GB
- *     1         2GB     2GB
- *     0 low     1GB     1GB
- *
- * Reorder Table to be linear by stripping the bottom
- * 2 or 5 bits off and shifting them up to the top.
- */
-
-unsigned int
-compute_banksize(unsigned int mem_type, unsigned char row_dens)
-{
-       unsigned int bsize;
-
-       if (mem_type == SPD_MEMTYPE_DDR) {
-               /* Bottom 2 bits up to the top. */
-               bsize = ((row_dens >> 2) | ((row_dens & 3) << 6)) << 24;
-               debug("DDR: DDR I rank density = 0x%08x\n", bsize);
-       } else {
-               /* Bottom 5 bits up to the top. */
-               bsize = ((row_dens >> 5) | ((row_dens & 31) << 3)) << 27;
-               debug("DDR: DDR II rank density = 0x%08x\n", bsize);
-       }
-       return bsize;
-}
-
-
-/*
- * Convert a two-nibble BCD value into a cycle time.
- * While the spec calls for nano-seconds, picos are returned.
- *
- * This implements the tables for bytes 9, 23 and 25 for both
- * DDR I and II.  No allowance for distinguishing the invalid
- * fields absent for DDR I yet present in DDR II is made.
- * (That is, cycle times of .25, .33, .66 and .75 ns are
- * allowed for both DDR II and I.)
- */
-
-unsigned int
-convert_bcd_tenths_to_cycle_time_ps(unsigned int spd_val)
-{
-       /*
-        * Table look up the lower nibble, allow DDR I & II.
-        */
-       unsigned int tenths_ps[16] = {
-               0,
-               100,
-               200,
-               300,
-               400,
-               500,
-               600,
-               700,
-               800,
-               900,
-               250,
-               330,
-               660,
-               750,
-               0,      /* undefined */
-               0       /* undefined */
-       };
-
-       unsigned int whole_ns = (spd_val & 0xF0) >> 4;
-       unsigned int tenth_ns = spd_val & 0x0F;
-       unsigned int ps = whole_ns * 1000 + tenths_ps[tenth_ns];
-
-       return ps;
-}
-
-
-/*
- * Determine Refresh Rate.  Ignore self refresh bit on DDR I.
- * Table from SPD Spec, Byte 12, converted to picoseconds and
- * filled in with "default" normal values.
- */
-unsigned int determine_refresh_rate(unsigned int spd_refresh)
-{
-       unsigned int refresh_time_ns[8] = {
-               15625000,       /* 0 Normal    1.00x */
-               3900000,        /* 1 Reduced    .25x */
-               7800000,        /* 2 Extended   .50x */
-               31300000,       /* 3 Extended  2.00x */
-               62500000,       /* 4 Extended  4.00x */
-               125000000,      /* 5 Extended  8.00x */
-               15625000,       /* 6 Normal    1.00x  filler */
-               15625000,       /* 7 Normal    1.00x  filler */
-       };
-
-       return picos_to_clk(refresh_time_ns[spd_refresh & 0x7]);
-}
-
-
-long int
-spd_sdram(void)
-{
-       volatile ccsr_ddr_t *ddr = (void *)(CFG_MPC85xx_DDR_ADDR);
-       spd_eeprom_t spd;
-       unsigned int n_ranks;
-       unsigned int rank_density;
-       unsigned int odt_rd_cfg, odt_wr_cfg, ba_bits;
-       unsigned int odt_cfg, mode_odt_enable;
-       unsigned int refresh_clk;
-#ifdef MPC85xx_DDR_SDRAM_CLK_CNTL
-       unsigned char clk_adjust;
-#endif
-       unsigned int dqs_cfg;
-       unsigned char twr_clk, twtr_clk, twr_auto_clk;
-       unsigned int tCKmin_ps, tCKmax_ps;
-       unsigned int max_data_rate, effective_data_rate;
-       unsigned int busfreq;
-       unsigned sdram_cfg;
-       unsigned int memsize = 0;
-       unsigned char caslat, caslat_ctrl;
-       unsigned int trfc, trfc_clk, trfc_low, trfc_high;
-       unsigned int trcd_clk;
-       unsigned int trtp_clk;
-       unsigned char cke_min_clk;
-       unsigned char add_lat;
-       unsigned char wr_lat;
-       unsigned char wr_data_delay;
-       unsigned char four_act;
-       unsigned char cpo;
-       unsigned char burst_len;
-       unsigned int mode_caslat;
-       unsigned char sdram_type;
-       unsigned char d_init;
-       unsigned int bnds;
-
-       /*
-        * Skip configuration if already configured.
-        * memsize is determined from last configured chip select.
-        */
-       if (ddr->cs0_config & 0x80000000) {
-               debug(" cs0 already configured, bnds=%x\n",ddr->cs0_bnds);
-               bnds = 0xfff & ddr->cs0_bnds;
-               if (bnds < 0xff) { /* do not add if at top of 4G */
-                       memsize = (bnds + 1) << 4;
-               }
-       }
-       if (ddr->cs1_config & 0x80000000) {
-               debug(" cs1 already configured, bnds=%x\n",ddr->cs1_bnds);
-               bnds = 0xfff & ddr->cs1_bnds;
-               if (bnds < 0xff) { /* do not add if at top of 4G */
-                       memsize = (bnds + 1) << 4; /* assume ordered bnds */
-               }
-       }
-       if (ddr->cs2_config & 0x80000000) {
-               debug(" cs2 already configured, bnds=%x\n",ddr->cs2_bnds);
-               bnds = 0xfff & ddr->cs2_bnds;
-               if (bnds < 0xff) { /* do not add if at top of 4G */
-                       memsize = (bnds + 1) << 4;
-               }
-       }
-       if (ddr->cs3_config & 0x80000000) {
-               debug(" cs3 already configured, bnds=%x\n",ddr->cs3_bnds);
-               bnds = 0xfff & ddr->cs3_bnds;
-               if (bnds < 0xff) { /* do not add if at top of 4G */
-                       memsize = (bnds + 1) << 4;
-               }
-       }
-
-       if (memsize) {
-               printf("       Reusing current %dMB configuration\n",memsize);
-               memsize = setup_laws_and_tlbs(memsize);
-               return memsize << 20;
-       }
-
-       /*
-        * Read SPD information.
-        */
-       CFG_READ_SPD(SPD_EEPROM_ADDRESS, 0, 1, (uchar *) &spd, sizeof(spd));
-
-       /*
-        * Check for supported memory module types.
-        */
-       if (spd.mem_type != SPD_MEMTYPE_DDR &&
-           spd.mem_type != SPD_MEMTYPE_DDR2) {
-               printf("Unable to locate DDR I or DDR II module.\n"
-                      "    Fundamental memory type is 0x%0x\n",
-                      spd.mem_type);
-               return 0;
-       }
-
-       /*
-        * These test gloss over DDR I and II differences in interpretation
-        * of bytes 3 and 4, but irrelevantly.  Multiple asymmetric banks
-        * are not supported on DDR I; and not encoded on DDR II.
-        *
-        * Also note that the 8548 controller can support:
-        *    12 <= nrow <= 16
-        * and
-        *     8 <= ncol <= 11 (still, for DDR)
-        *     6 <= ncol <=  9 (for FCRAM)
-        */
-       if (spd.nrow_addr < 12 || spd.nrow_addr > 14) {
-               printf("DDR: Unsupported number of Row Addr lines: %d.\n",
-                      spd.nrow_addr);
-               return 0;
-       }
-       if (spd.ncol_addr < 8 || spd.ncol_addr > 11) {
-               printf("DDR: Unsupported number of Column Addr lines: %d.\n",
-                      spd.ncol_addr);
-               return 0;
-       }
-
-       /*
-        * Determine the number of physical banks controlled by
-        * different Chip Select signals.  This is not quite the
-        * same as the number of DIMM modules on the board.  Feh.
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               n_ranks = spd.nrows;
-       } else {
-               n_ranks = (spd.nrows & 0x7) + 1;
-       }
-
-       debug("DDR: number of ranks = %d\n", n_ranks);
-
-       if (n_ranks > 2) {
-               printf("DDR: Only 2 chip selects are supported: %d\n",
-                      n_ranks);
-               return 0;
-       }
-
-#ifdef CONFIG_MPC8548
-       /*
-        * Adjust DDR II IO voltage biasing.
-        * Only 8548 rev 1 needs the fix
-        */
-       if ((SVR_SOC_VER(get_svr()) == SVR_8548_E) &&
-                       (SVR_MJREV(get_svr()) == 1) &&
-                       (spd.mem_type == SPD_MEMTYPE_DDR2)) {
-               volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
-               gur->ddrioovcr = (0x80000000    /* Enable */
-                                 | 0x10000000);/* VSEL to 1.8V */
-       }
-#endif
-
-       /*
-        * Determine the size of each Rank in bytes.
-        */
-       rank_density = compute_banksize(spd.mem_type, spd.row_dens);
-
-
-       /*
-        * Eg: Bounds: 0x0000_0000 to 0x0f000_0000      first 256 Meg
-        */
-       ddr->cs0_bnds = (rank_density >> 24) - 1;
-
-       /*
-        * ODT configuration recommendation from DDR Controller Chapter.
-        */
-       odt_rd_cfg = 0;                 /* Never assert ODT */
-       odt_wr_cfg = 0;                 /* Never assert ODT */
-       if (spd.mem_type == SPD_MEMTYPE_DDR2) {
-               odt_wr_cfg = 1;         /* Assert ODT on writes to CS0 */
-#if 0
-               /* FIXME: How to determine the number of dimm modules? */
-               if (n_dimm_modules == 2) {
-                       odt_rd_cfg = 1; /* Assert ODT on reads to CS0 */
-               }
-#endif
-       }
-
-       ba_bits = 0;
-       if (spd.nbanks == 0x8)
-               ba_bits = 1;
-
-       ddr->cs0_config = ( 1 << 31
-                           | (odt_rd_cfg << 20)
-                           | (odt_wr_cfg << 16)
-                           | (ba_bits << 14)
-                           | (spd.nrow_addr - 12) << 8
-                           | (spd.ncol_addr - 8) );
-       debug("\n");
-       debug("DDR: cs0_bnds   = 0x%08x\n", ddr->cs0_bnds);
-       debug("DDR: cs0_config = 0x%08x\n", ddr->cs0_config);
-
-       if (n_ranks == 2) {
-               /*
-                * Eg: Bounds: 0x0f00_0000 to 0x1e0000_0000, second 256 Meg
-                */
-               ddr->cs1_bnds = ( (rank_density >> 8)
-                                 | ((rank_density >> (24 - 1)) - 1) );
-               ddr->cs1_config = ( 1<<31
-                                   | (odt_rd_cfg << 20)
-                                   | (odt_wr_cfg << 16)
-                                   | (spd.nrow_addr - 12) << 8
-                                   | (spd.ncol_addr - 8) );
-               debug("DDR: cs1_bnds   = 0x%08x\n", ddr->cs1_bnds);
-               debug("DDR: cs1_config = 0x%08x\n", ddr->cs1_config);
-       }
-
-
-       /*
-        * Find the largest CAS by locating the highest 1 bit
-        * in the spd.cas_lat field.  Translate it to a DDR
-        * controller field value:
-        *
-        *      CAS Lat DDR I   DDR II  Ctrl
-        *      Clocks  SPD Bit SPD Bit Value
-        *      ------- ------- ------- -----
-        *      1.0     0               0001
-        *      1.5     1               0010
-        *      2.0     2       2       0011
-        *      2.5     3               0100
-        *      3.0     4       3       0101
-        *      3.5     5               0110
-        *      4.0             4       0111
-        *      4.5                     1000
-        *      5.0             5       1001
-        */
-       caslat = __ilog2(spd.cas_lat);
-       if ((spd.mem_type == SPD_MEMTYPE_DDR)
-           && (caslat > 5)) {
-               printf("DDR I: Invalid SPD CAS Latency: 0x%x.\n", spd.cas_lat);
-               return 0;
-
-       } else if (spd.mem_type == SPD_MEMTYPE_DDR2
-                  && (caslat < 2 || caslat > 5)) {
-               printf("DDR II: Invalid SPD CAS Latency: 0x%x.\n",
-                      spd.cas_lat);
-               return 0;
-       }
-       debug("DDR: caslat SPD bit is %d\n", caslat);
-
-       /*
-        * Calculate the Maximum Data Rate based on the Minimum Cycle time.
-        * The SPD clk_cycle field (tCKmin) is measured in tenths of
-        * nanoseconds and represented as BCD.
-        */
-       tCKmin_ps = convert_bcd_tenths_to_cycle_time_ps(spd.clk_cycle);
-       debug("DDR: tCKmin = %d ps\n", tCKmin_ps);
-
-       /*
-        * Double-data rate, scaled 1000 to picoseconds, and back down to MHz.
-        */
-       max_data_rate = 2 * 1000 * 1000 / tCKmin_ps;
-       debug("DDR: Module max data rate = %d Mhz\n", max_data_rate);
-
-
-       /*
-        * Adjust the CAS Latency to allow for bus speeds that
-        * are slower than the DDR module.
-        */
-       busfreq = get_ddr_freq(0) / 1000000;    /* MHz */
-
-       effective_data_rate = max_data_rate;
-       if (busfreq < 90) {
-               /* DDR rate out-of-range */
-               puts("DDR: platform frequency is not fit for DDR rate\n");
-               return 0;
-
-       } else if (90 <= busfreq && busfreq < 230 && max_data_rate >= 230) {
-               /*
-                * busfreq 90~230 range, treated as DDR 200.
-                */
-               effective_data_rate = 200;
-               if (spd.clk_cycle3 == 0xa0)     /* 10 ns */
-                       caslat -= 2;
-               else if (spd.clk_cycle2 == 0xa0)
-                       caslat--;
-
-       } else if (230 <= busfreq && busfreq < 280 && max_data_rate >= 280) {
-               /*
-                * busfreq 230~280 range, treated as DDR 266.
-                */
-               effective_data_rate = 266;
-               if (spd.clk_cycle3 == 0x75)     /* 7.5 ns */
-                       caslat -= 2;
-               else if (spd.clk_cycle2 == 0x75)
-                       caslat--;
-
-       } else if (280 <= busfreq && busfreq < 350 && max_data_rate >= 350) {
-               /*
-                * busfreq 280~350 range, treated as DDR 333.
-                */
-               effective_data_rate = 333;
-               if (spd.clk_cycle3 == 0x60)     /* 6.0 ns */
-                       caslat -= 2;
-               else if (spd.clk_cycle2 == 0x60)
-                       caslat--;
-
-       } else if (350 <= busfreq && busfreq < 460 && max_data_rate >= 460) {
-               /*
-                * busfreq 350~460 range, treated as DDR 400.
-                */
-               effective_data_rate = 400;
-               if (spd.clk_cycle3 == 0x50)     /* 5.0 ns */
-                       caslat -= 2;
-               else if (spd.clk_cycle2 == 0x50)
-                       caslat--;
-
-       } else if (460 <= busfreq && busfreq < 560 && max_data_rate >= 560) {
-               /*
-                * busfreq 460~560 range, treated as DDR 533.
-                */
-               effective_data_rate = 533;
-               if (spd.clk_cycle3 == 0x3D)     /* 3.75 ns */
-                       caslat -= 2;
-               else if (spd.clk_cycle2 == 0x3D)
-                       caslat--;
-
-       } else if (560 <= busfreq && busfreq < 700 && max_data_rate >= 700) {
-               /*
-                * busfreq 560~700 range, treated as DDR 667.
-                */
-               effective_data_rate = 667;
-               if (spd.clk_cycle3 == 0x30)     /* 3.0 ns */
-                       caslat -= 2;
-               else if (spd.clk_cycle2 == 0x30)
-                       caslat--;
-
-       } else if (700 <= busfreq) {
-               /*
-                * DDR rate out-of-range
-                */
-               printf("DDR: Bus freq %d MHz is not fit for DDR rate %d MHz\n",
-                    busfreq, max_data_rate);
-               return 0;
-       }
-
-
-       /*
-        * Convert caslat clocks to DDR controller value.
-        * Force caslat_ctrl to be DDR Controller field-sized.
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               caslat_ctrl = (caslat + 1) & 0x07;
-       } else {
-               caslat_ctrl =  (2 * caslat - 1) & 0x0f;
-       }
-
-       debug("DDR: effective data rate is %d MHz\n", effective_data_rate);
-       debug("DDR: caslat SPD bit is %d, controller field is 0x%x\n",
-             caslat, caslat_ctrl);
-
-       /*
-        * Timing Config 0.
-        * Avoid writing for DDR I.  The new PQ38 DDR controller
-        * dreams up non-zero default values to be backwards compatible.
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR2) {
-               unsigned char taxpd_clk = 8;            /* By the book. */
-               unsigned char tmrd_clk = 2;             /* By the book. */
-               unsigned char act_pd_exit = 2;          /* Empirical? */
-               unsigned char pre_pd_exit = 6;          /* Empirical? */
-
-               ddr->timing_cfg_0 = (0
-                       | ((act_pd_exit & 0x7) << 20)   /* ACT_PD_EXIT */
-                       | ((pre_pd_exit & 0x7) << 16)   /* PRE_PD_EXIT */
-                       | ((taxpd_clk & 0xf) << 8)      /* ODT_PD_EXIT */
-                       | ((tmrd_clk & 0xf) << 0)       /* MRS_CYC */
-                       );
-#if 0
-               ddr->timing_cfg_0 |= 0xaa000000;        /* extra cycles */
-#endif
-               debug("DDR: timing_cfg_0 = 0x%08x\n", ddr->timing_cfg_0);
-
-       } else {
-#if 0
-               /*
-                * Force extra cycles with 0xaa bits.
-                * Incidentally supply the dreamt-up backwards compat value!
-                */
-               ddr->timing_cfg_0 = 0x00110105; /* backwards compat value */
-               ddr->timing_cfg_0 |= 0xaa000000;        /* extra cycles */
-               debug("DDR: HACK timing_cfg_0 = 0x%08x\n", ddr->timing_cfg_0);
-#endif
-       }
-
-
-       /*
-        * Some Timing Config 1 values now.
-        * Sneak Extended Refresh Recovery in here too.
-        */
-
-       /*
-        * For DDR I, WRREC(Twr) and WRTORD(Twtr) are not in SPD,
-        * use conservative value.
-        * For DDR II, they are bytes 36 and 37, in quarter nanos.
-        */
-
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               twr_clk = 3;    /* Clocks */
-               twtr_clk = 1;   /* Clocks */
-       } else {
-               twr_clk = picos_to_clk(spd.twr * 250);
-               twtr_clk = picos_to_clk(spd.twtr * 250);
-       }
-
-       /*
-        * Calculate Trfc, in picos.
-        * DDR I:  Byte 42 straight up in ns.
-        * DDR II: Byte 40 and 42 swizzled some, in ns.
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               trfc = spd.trfc * 1000;         /* up to ps */
-       } else {
-               unsigned int byte40_table_ps[8] = {
-                       0,
-                       250,
-                       330,
-                       500,
-                       660,
-                       750,
-                       0,
-                       0
-               };
-
-               trfc = (((spd.trctrfc_ext & 0x1) * 256) + spd.trfc) * 1000
-                       + byte40_table_ps[(spd.trctrfc_ext >> 1) & 0x7];
-       }
-       trfc_clk = picos_to_clk(trfc);
-
-       /*
-        * Trcd, Byte 29, from quarter nanos to ps and clocks.
-        */
-       trcd_clk = picos_to_clk(spd.trcd * 250) & 0x7;
-
-       /*
-        * Convert trfc_clk to DDR controller fields.  DDR I should
-        * fit in the REFREC field (16-19) of TIMING_CFG_1, but the
-        * 8548 controller has an extended REFREC field of three bits.
-        * The controller automatically adds 8 clocks to this value,
-        * so preadjust it down 8 first before splitting it up.
-        */
-       trfc_low = (trfc_clk - 8) & 0xf;
-       trfc_high = ((trfc_clk - 8) >> 4) & 0x3;
-
-       /*
-        * Sneak in some Extended Refresh Recovery.
-        */
-       ddr->timing_cfg_3 = (trfc_high << 16);
-       debug("DDR: timing_cfg_3 = 0x%08x\n", ddr->timing_cfg_3);
-
-       ddr->timing_cfg_1 =
-           (0
-            | ((picos_to_clk(spd.trp * 250) & 0x07) << 28)     /* PRETOACT */
-            | ((picos_to_clk(spd.tras * 1000) & 0x0f ) << 24)  /* ACTTOPRE */
-            | (trcd_clk << 20)                                 /* ACTTORW */
-            | (caslat_ctrl << 16)                              /* CASLAT */
-            | (trfc_low << 12)                                 /* REFEC */
-            | ((twr_clk & 0x07) << 8)                          /* WRRREC */
-            | ((picos_to_clk(spd.trrd * 250) & 0x07) << 4)     /* ACTTOACT */
-            | ((twtr_clk & 0x07) << 0)                         /* WRTORD */
-            );
-
-       debug("DDR: timing_cfg_1  = 0x%08x\n", ddr->timing_cfg_1);
-
-
-       /*
-        * Timing_Config_2
-        * Was: 0x00000800;
-        */
-
-       /*
-        * Additive Latency
-        * For DDR I, 0.
-        * For DDR II, with ODT enabled, use "a value" less than ACTTORW,
-        * which comes from Trcd, and also note that:
-        *      add_lat + caslat must be >= 4
-        */
-       add_lat = 0;
-       if (spd.mem_type == SPD_MEMTYPE_DDR2
-           && (odt_wr_cfg || odt_rd_cfg)
-           && (caslat < 4)) {
-               add_lat = 4 - caslat;
-               if (add_lat > trcd_clk) {
-                       add_lat = trcd_clk - 1;
-               }
-       }
-
-       /*
-        * Write Data Delay
-        * Historically 0x2 == 4/8 clock delay.
-        * Empirically, 0x3 == 6/8 clock delay is suggested for DDR I 266.
-        */
-       wr_data_delay = 3;
-
-       /*
-        * Write Latency
-        * Read to Precharge
-        * Minimum CKE Pulse Width.
-        * Four Activate Window
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               /*
-                * This is a lie.  It should really be 1, but if it is
-                * set to 1, bits overlap into the old controller's
-                * otherwise unused ACSM field.  If we leave it 0, then
-                * the HW will magically treat it as 1 for DDR 1.  Oh Yea.
-                */
-               wr_lat = 0;
-
-               trtp_clk = 2;           /* By the book. */
-               cke_min_clk = 1;        /* By the book. */
-               four_act = 1;           /* By the book. */
-
-       } else {
-               wr_lat = caslat - 1;
-
-               /* Convert SPD value from quarter nanos to picos. */
-               trtp_clk = picos_to_clk(spd.trtp * 250);
-
-               cke_min_clk = 3;        /* By the book. */
-               four_act = picos_to_clk(37500); /* By the book. 1k pages? */
-       }
-
-       /*
-        * Empirically set ~MCAS-to-preamble override for DDR 2.
-        * Your milage will vary.
-        */
-       cpo = 0;
-       if (spd.mem_type == SPD_MEMTYPE_DDR2) {
-               if (effective_data_rate <= 333) {
-                       cpo = 0x7;              /* READ_LAT + 5/4 */
-               } else {
-                       cpo = 0x9;              /* READ_LAT + 7/4 */
-               }
-       }
-
-       ddr->timing_cfg_2 = (0
-               | ((add_lat & 0x7) << 28)               /* ADD_LAT */
-               | ((cpo & 0x1f) << 23)                  /* CPO */
-               | ((wr_lat & 0x7) << 19)                /* WR_LAT */
-               | ((trtp_clk & 0x7) << 13)              /* RD_TO_PRE */
-               | ((wr_data_delay & 0x7) << 10)         /* WR_DATA_DELAY */
-               | ((cke_min_clk & 0x7) << 6)            /* CKE_PLS */
-               | ((four_act & 0x1f) << 0)              /* FOUR_ACT */
-               );
-
-       debug("DDR: timing_cfg_2 = 0x%08x\n", ddr->timing_cfg_2);
-
-
-       /*
-        * Determine the Mode Register Set.
-        *
-        * This is nominally part specific, but it appears to be
-        * consistent for all DDR I devices, and for all DDR II devices.
-        *
-        *     caslat must be programmed
-        *     burst length is always 4
-        *     burst type is sequential
-        *
-        * For DDR I:
-        *     operating mode is "normal"
-        *
-        * For DDR II:
-        *     other stuff
-        */
-
-       mode_caslat = 0;
-
-       /*
-        * Table lookup from DDR I or II Device Operation Specs.
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               if (1 <= caslat && caslat <= 4) {
-                       unsigned char mode_caslat_table[4] = {
-                               0x5,    /* 1.5 clocks */
-                               0x2,    /* 2.0 clocks */
-                               0x6,    /* 2.5 clocks */
-                               0x3     /* 3.0 clocks */
-                       };
-                       mode_caslat = mode_caslat_table[caslat - 1];
-               } else {
-                       puts("DDR I: Only CAS Latencies of 1.5, 2.0, "
-                            "2.5 and 3.0 clocks are supported.\n");
-                       return 0;
-               }
-
-       } else {
-               if (2 <= caslat && caslat <= 5) {
-                       mode_caslat = caslat;
-               } else {
-                       puts("DDR II: Only CAS Latencies of 2.0, 3.0, "
-                            "4.0 and 5.0 clocks are supported.\n");
-                       return 0;
-               }
-       }
-
-       /*
-        * Encoded Burst Lenght of 4.
-        */
-       burst_len = 2;                  /* Fiat. */
-
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               twr_auto_clk = 0;       /* Historical */
-       } else {
-               /*
-                * Determine tCK max in picos.  Grab tWR and convert to picos.
-                * Auto-precharge write recovery is:
-                *      WR = roundup(tWR_ns/tCKmax_ns).
-                *
-                * Ponder: Is twr_auto_clk different than twr_clk?
-                */
-               tCKmax_ps = convert_bcd_tenths_to_cycle_time_ps(spd.tckmax);
-               twr_auto_clk = (spd.twr * 250 + tCKmax_ps - 1) / tCKmax_ps;
-       }
-
-
-       /*
-        * Mode Reg in bits 16 ~ 31,
-        * Extended Mode Reg 1 in bits 0 ~ 15.
-        */
-       mode_odt_enable = 0x0;                  /* Default disabled */
-       if (odt_wr_cfg || odt_rd_cfg) {
-               /*
-                * Bits 6 and 2 in Extended MRS(1)
-                * Bit 2 == 0x04 == 75 Ohm, with 2 DIMM modules.
-                * Bit 6 == 0x40 == 150 Ohm, with 1 DIMM module.
-                */
-               mode_odt_enable = 0x40;         /* 150 Ohm */
-       }
-
-       ddr->sdram_mode =
-               (0
-                | (add_lat << (16 + 3))        /* Additive Latency in EMRS1 */
-                | (mode_odt_enable << 16)      /* ODT Enable in EMRS1 */
-                | (twr_auto_clk << 9)          /* Write Recovery Autopre */
-                | (mode_caslat << 4)           /* caslat */
-                | (burst_len << 0)             /* Burst length */
-                );
-
-       debug("DDR: sdram_mode   = 0x%08x\n", ddr->sdram_mode);
-
-
-       /*
-        * Clear EMRS2 and EMRS3.
-        */
-       ddr->sdram_mode_2 = 0;
-       debug("DDR: sdram_mode_2 = 0x%08x\n", ddr->sdram_mode_2);
-
-       /*
-        * Determine Refresh Rate.
-        */
-       refresh_clk = determine_refresh_rate(spd.refresh & 0x7);
-
-       /*
-        * Set BSTOPRE to 0x100 for page mode
-        * If auto-charge is used, set BSTOPRE = 0
-        */
-       ddr->sdram_interval =
-           (0
-            | (refresh_clk & 0x3fff) << 16
-            | 0x100
-            );
-       debug("DDR: sdram_interval = 0x%08x\n", ddr->sdram_interval);
-
-       /*
-        * Is this an ECC DDR chip?
-        * But don't mess with it if the DDR controller will init mem.
-        */
-#ifdef CONFIG_DDR_ECC
-       if (spd.config == 0x02) {
-#ifndef CONFIG_ECC_INIT_VIA_DDRCONTROLLER
-               ddr->err_disable = 0x0000000d;
-#endif
-               ddr->err_sbe = 0x00ff0000;
-       }
-
-       debug("DDR: err_disable = 0x%08x\n", ddr->err_disable);
-       debug("DDR: err_sbe = 0x%08x\n", ddr->err_sbe);
-#endif /* CONFIG_DDR_ECC */
-
-       asm("sync;isync;msync");
-       udelay(500);
-
-       /*
-        * SDRAM Cfg 2
-        */
-
-       /*
-        * When ODT is enabled, Chap 9 suggests asserting ODT to
-        * internal IOs only during reads.
-        */
-       odt_cfg = 0;
-       if (odt_rd_cfg | odt_wr_cfg) {
-               odt_cfg = 0x2;          /* ODT to IOs during reads */
-       }
-
-       /*
-        * Try to use differential DQS with DDR II.
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR) {
-               dqs_cfg = 0;            /* No Differential DQS for DDR I */
-       } else {
-               dqs_cfg = 0x1;          /* Differential DQS for DDR II */
-       }
-
-#if defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
-       /*
-        * Use the DDR controller to auto initialize memory.
-        */
-       d_init = 1;
-       ddr->sdram_data_init = CONFIG_MEM_INIT_VALUE;
-       debug("DDR: ddr_data_init = 0x%08x\n", ddr->sdram_data_init);
-#else
-       /*
-        * Memory will be initialized via DMA, or not at all.
-        */
-       d_init = 0;
-#endif
-
-       ddr->sdram_cfg_2 = (0
-                           | (dqs_cfg << 26)   /* Differential DQS */
-                           | (odt_cfg << 21)   /* ODT */
-                           | (d_init << 4)     /* D_INIT auto init DDR */
-                           );
-
-       debug("DDR: sdram_cfg_2  = 0x%08x\n", ddr->sdram_cfg_2);
-
-
-#ifdef MPC85xx_DDR_SDRAM_CLK_CNTL
-       /*
-        * Setup the clock control.
-        * SDRAM_CLK_CNTL[0] = Source synchronous enable == 1
-        * SDRAM_CLK_CNTL[5-7] = Clock Adjust
-        *      0110    3/4 cycle late
-        *      0111    7/8 cycle late
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR)
-               clk_adjust = 0x6;
-       else
-#ifdef CONFIG_MPC8568
-               /* Empirally setting clk_adjust */
-               clk_adjust = 0x6;
-#else
-               clk_adjust = 0x7;
-#endif
-
-       ddr->sdram_clk_cntl = (0
-                              | 0x80000000
-                              | (clk_adjust << 23)
-                              );
-       debug("DDR: sdram_clk_cntl = 0x%08x\n", ddr->sdram_clk_cntl);
-#endif
-
-       /*
-        * Figure out the settings for the sdram_cfg register.
-        * Build up the entire register in 'sdram_cfg' before writing
-        * since the write into the register will actually enable the
-        * memory controller; all settings must be done before enabling.
-        *
-        * sdram_cfg[0]   = 1 (ddr sdram logic enable)
-        * sdram_cfg[1]   = 1 (self-refresh-enable)
-        * sdram_cfg[5:7] = (SDRAM type = DDR SDRAM)
-        *                      010 DDR 1 SDRAM
-        *                      011 DDR 2 SDRAM
-        */
-       sdram_type = (spd.mem_type == SPD_MEMTYPE_DDR) ? 2 : 3;
-       sdram_cfg = (0
-                    | (1 << 31)                        /* Enable */
-                    | (1 << 30)                        /* Self refresh */
-                    | (sdram_type << 24)               /* SDRAM type */
-                    );
-
-       /*
-        * sdram_cfg[3] = RD_EN - registered DIMM enable
-        *   A value of 0x26 indicates micron registered DIMMS (micron.com)
-        */
-       if (spd.mem_type == SPD_MEMTYPE_DDR && spd.mod_attr == 0x26) {
-               sdram_cfg |= 0x10000000;                /* RD_EN */
-       }
-
-#if defined(CONFIG_DDR_ECC)
-       /*
-        * If the user wanted ECC (enabled via sdram_cfg[2])
-        */
-       if (spd.config == 0x02) {
-               sdram_cfg |= 0x20000000;                /* ECC_EN */
-       }
-#endif
-
-       /*
-        * REV1 uses 1T timing.
-        * REV2 may use 1T or 2T as configured by the user.
-        */
-       {
-               uint pvr = get_pvr();
-
-               if (pvr != PVR_85xx_REV1) {
-#if defined(CONFIG_DDR_2T_TIMING)
-                       /*
-                        * Enable 2T timing by setting sdram_cfg[16].
-                        */
-                       sdram_cfg |= 0x8000;            /* 2T_EN */
-#endif
-               }
-       }
-
-       /*
-        * 200 painful micro-seconds must elapse between
-        * the DDR clock setup and the DDR config enable.
-        */
-       udelay(200);
-
-       /*
-        * Go!
-        */
-       ddr->sdram_cfg = sdram_cfg;
-
-       asm("sync;isync;msync");
-       udelay(500);
-
-       debug("DDR: sdram_cfg   = 0x%08x\n", ddr->sdram_cfg);
-
-
-#if defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
-       /*
-        * Poll until memory is initialized.
-        * 512 Meg at 400 might hit this 200 times or so.
-        */
-       while ((ddr->sdram_cfg_2 & (d_init << 4)) != 0) {
-               udelay(1000);
-       }
-#endif
-
-
-       /*
-        * Figure out memory size in Megabytes.
-        */
-       memsize = n_ranks * rank_density / 0x100000;
-
-       /*
-        * Establish Local Access Window and TLB mappings for DDR memory.
-        */
-       memsize = setup_laws_and_tlbs(memsize);
-       if (memsize == 0) {
-               return 0;
-       }
-
-       return memsize * 1024 * 1024;
-}
-
-
-/*
- * Setup Local Access Window and TLB1 mappings for the requested
- * amount of memory.  Returns the amount of memory actually mapped
- * (usually the original request size), or 0 on error.
- */
-
-static unsigned int
-setup_laws_and_tlbs(unsigned int memsize)
-{
-       unsigned int tlb_size;
-       unsigned int law_size;
-       unsigned int ram_tlb_index;
-       unsigned int ram_tlb_address;
-
-       /*
-        * Determine size of each TLB1 entry.
-        */
-       switch (memsize) {
-       case 16:
-       case 32:
-               tlb_size = BOOKE_PAGESZ_16M;
-               break;
-       case 64:
-       case 128:
-               tlb_size = BOOKE_PAGESZ_64M;
-               break;
-       case 256:
-       case 512:
-               tlb_size = BOOKE_PAGESZ_256M;
-               break;
-       case 1024:
-       case 2048:
-               if (PVR_VER(get_pvr()) > PVR_VER(PVR_85xx))
-                       tlb_size = BOOKE_PAGESZ_1G;
-               else
-                       tlb_size = BOOKE_PAGESZ_256M;
-               break;
-       default:
-               puts("DDR: only 16M,32M,64M,128M,256M,512M,1G and 2G are supported.\n");
-
-               /*
-                * The memory was not able to be mapped.
-                * Default to a small size.
-                */
-               tlb_size = BOOKE_PAGESZ_64M;
-               memsize=64;
-               break;
-       }
-
-       /*
-        * Configure DDR TLB1 entries.
-        * Starting at TLB1 8, use no more than 8 TLB1 entries.
-        */
-       ram_tlb_index = 8;
-       ram_tlb_address = (unsigned int)CFG_DDR_SDRAM_BASE;
-       while (ram_tlb_address < (memsize * 1024 * 1024)
-             && ram_tlb_index < 16) {
-               set_tlb(1, ram_tlb_address, ram_tlb_address,
-                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
-                       0, ram_tlb_index, tlb_size, 1);
-
-               ram_tlb_address += (0x1000 << ((tlb_size - 1) * 2));
-               ram_tlb_index++;
-       }
-
-
-       /*
-        * First supported LAW size is 16M, at LAWAR_SIZE_16M == 23.  Fnord.
-        */
-       law_size = 19 + __ilog2(memsize);
-
-       /*
-        * Set up LAWBAR for all of DDR.
-        */
-
-#ifdef CONFIG_FSL_LAW
-       set_next_law(CFG_DDR_SDRAM_BASE, law_size, LAW_TRGT_IF_DDR);
-#endif
-
-       /*
-        * Confirm that the requested amount of memory was mapped.
-        */
-       return memsize;
-}
-
-#endif /* CONFIG_SPD_EEPROM */
-
-
-#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
-
-/*
- * Initialize all of memory for ECC, then enable errors.
- */
-
-void
-ddr_enable_ecc(unsigned int dram_size)
-{
-       uint *p = 0;
-       uint i = 0;
-       volatile ccsr_ddr_t *ddr= (void *)(CFG_MPC85xx_DDR_ADDR);
-
-       dma_init();
-
-       for (*p = 0; p < (uint *)(8 * 1024); p++) {
-               if (((unsigned int)p & 0x1f) == 0) {
-                       ppcDcbz((unsigned long) p);
-               }
-               *p = (unsigned int)CONFIG_MEM_INIT_VALUE;
-               if (((unsigned int)p & 0x1c) == 0x1c) {
-                       ppcDcbf((unsigned long) p);
-               }
-       }
-
-       dma_xfer((uint *)0x002000, 0x002000, (uint *)0); /* 8K */
-       dma_xfer((uint *)0x004000, 0x004000, (uint *)0); /* 16K */
-       dma_xfer((uint *)0x008000, 0x008000, (uint *)0); /* 32K */
-       dma_xfer((uint *)0x010000, 0x010000, (uint *)0); /* 64K */
-       dma_xfer((uint *)0x020000, 0x020000, (uint *)0); /* 128k */
-       dma_xfer((uint *)0x040000, 0x040000, (uint *)0); /* 256k */
-       dma_xfer((uint *)0x080000, 0x080000, (uint *)0); /* 512k */
-       dma_xfer((uint *)0x100000, 0x100000, (uint *)0); /* 1M */
-       dma_xfer((uint *)0x200000, 0x200000, (uint *)0); /* 2M */
-       dma_xfer((uint *)0x400000, 0x400000, (uint *)0); /* 4M */
-
-       for (i = 1; i < dram_size / 0x800000; i++) {
-               dma_xfer((uint *)(0x800000*i), 0x800000, (uint *)0);
-       }
-
-       /*
-        * Enable errors for ECC.
-        */
-       debug("DMA DDR: err_disable = 0x%08x\n", ddr->err_disable);
-       ddr->err_disable = 0x00000000;
-       asm("sync;isync;msync");
-       debug("DMA DDR: err_disable = 0x%08x\n", ddr->err_disable);
-}
-
-#endif /* CONFIG_DDR_ECC  && ! CONFIG_ECC_INIT_VIA_DDRCONTROLLER */
index 699441b46a48c97b87247b5d28201d1ff6b5e9e8..1cda1e34ebf78c1d9ac2c1663ba1892a7c4aed86 100644 (file)
@@ -110,6 +110,10 @@ int get_clocks (void)
 #endif
        gd->i2c2_clk = gd->i2c1_clk;
 
+#if defined(CONFIG_MPC8536)
+       gd->sdhc_clk = gd->bus_clk / 2;
+#endif
+
 #if defined(CONFIG_CPM2)
        gd->vco_out = 2*sys_info.freqSystemBus;
        gd->cpm_clk = gd->vco_out / 2;
index 3d15d50b85a1f863034b4470235b854defc2cbb0..7ce7a14b849eb02495632661124e2010186d6da0 100644 (file)
@@ -90,3 +90,67 @@ void init_tlbs(void)
 
        return ;
 }
+
+unsigned int setup_ddr_tlbs(unsigned int memsize_in_meg)
+{
+       unsigned int tlb_size;
+       unsigned int ram_tlb_index;
+       unsigned int ram_tlb_address;
+
+       /*
+        * Determine size of each TLB1 entry.
+        */
+       switch (memsize_in_meg) {
+       case 16:
+       case 32:
+               tlb_size = BOOKE_PAGESZ_16M;
+               break;
+       case 64:
+       case 128:
+               tlb_size = BOOKE_PAGESZ_64M;
+               break;
+       case 256:
+       case 512:
+               tlb_size = BOOKE_PAGESZ_256M;
+               break;
+       case 1024:
+       case 2048:
+               if (PVR_VER(get_pvr()) > PVR_VER(PVR_85xx))
+                       tlb_size = BOOKE_PAGESZ_1G;
+               else
+                       tlb_size = BOOKE_PAGESZ_256M;
+               break;
+       default:
+               puts("DDR: only 16M, 32M, 64M, 128M, 256M, 512M, 1G"
+                       " and 2G are supported.\n");
+
+               /*
+                * The memory was not able to be mapped.
+                * Default to a small size.
+                */
+               tlb_size = BOOKE_PAGESZ_64M;
+               memsize_in_meg = 64;
+               break;
+       }
+
+       /*
+        * Configure DDR TLB1 entries.
+        * Starting at TLB1 8, use no more than 8 TLB1 entries.
+        */
+       ram_tlb_index = 8;
+       ram_tlb_address = (unsigned int)CFG_DDR_SDRAM_BASE;
+       while (ram_tlb_address < (memsize_in_meg * 1024 * 1024)
+             && ram_tlb_index < 16) {
+               set_tlb(1, ram_tlb_address, ram_tlb_address,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, ram_tlb_index, tlb_size, 1);
+
+               ram_tlb_address += (0x1000 << ((tlb_size - 1) * 2));
+               ram_tlb_index++;
+       }
+
+       /*
+        * Confirm that the requested amount of memory was mapped.
+        */
+       return memsize_in_meg;
+}
index e4e5c3198aa9fb87a5e8474c5b869de67d2c1374..2e946143bc03385c57f550997ce02b0e540fa097 100644 (file)
@@ -38,7 +38,7 @@ DECLARE_GLOBAL_DATA_PTR;
       defined(CONFIG_MPC8568) || \
       defined(CONFIG_MPC8641) || defined(CONFIG_MPC8610)
 #define FSL_HW_NUM_LAWS 10
-#elif defined(CONFIG_MPC8572)
+#elif defined(CONFIG_MPC8536) || defined(CONFIG_MPC8572)
 #define FSL_HW_NUM_LAWS 12
 #else
 #error FSL_HW_NUM_LAWS not defined for this platform
index fe56949989f2b1729d37855e26b87a602ba922e0..3ee5d9603a55cdd3256e89b631c3fc974eb9f979 100644 (file)
@@ -88,7 +88,7 @@ int bfin_EMAC_initialize(bd_t *bis)
 
        eth_register(dev);
 
-       return 1;
+       return 0;
 }
 
 static int bfin_EMAC_send(struct eth_device *dev, volatile void *packet,
index e7365fe062b3e14cb1001e3c4efc2f373bc2506b..3a61b802e66c47eab510f9e881068312bc0c9cb1 100644 (file)
@@ -55,8 +55,7 @@ v1.2   03/18/2003       Weilun Huang <weilun_huang@davicom.com.tw>:
                        These changes are tested with DM9000{A,EP,E} together
                        with a 200MHz Atmel AT91SAM92161 core
 
-TODO: Homerun NIC and longrun NIC are not functional, only internal at the
-      moment.
+TODO: external MII is not functional, only internal at the moment.
 */
 
 #include <common.h>
@@ -68,9 +67,6 @@ TODO: Homerun NIC and longrun NIC are not functional, only internal at the
 
 /* Board/System/Debug information/definition ---------------- */
 
-#define DM9801_NOISE_FLOOR     0x08
-#define DM9802_NOISE_FLOOR     0x05
-
 /* #define CONFIG_DM9000_DEBUG */
 
 #ifdef CONFIG_DM9000_DEBUG
@@ -90,13 +86,6 @@ TODO: Homerun NIC and longrun NIC are not functional, only internal at the
 #define DM9000_DMP_PACKET(func,packet,length)
 #endif
 
-enum DM9000_PHY_mode { DM9000_10MHD = 0, DM9000_100MHD =
-           1, DM9000_10MFD = 4, DM9000_100MFD = 5, DM9000_AUTO =
-           8, DM9000_1M_HPNA = 0x10
-};
-enum DM9000_NIC_TYPE { FASTETHER_NIC = 0, HOMERUN_NIC = 1, LONGRUN_NIC = 2
-};
-
 /* Structure/enum declaration ------------------------------- */
 typedef struct board_info {
        u32 runt_length_counter;        /* counter: RX length < 64byte */
@@ -109,7 +98,6 @@ typedef struct board_info {
        u16 dbug_cnt;
        u8 phy_addr;
        u8 device_wait_reset;   /* device state */
-       u8 nic_type;            /* NIC type */
        unsigned char srom[128];
        void (*outblk)(volatile void *data_ptr, int count);
        void (*inblk)(void *data_ptr, int count);
@@ -117,10 +105,6 @@ typedef struct board_info {
 } board_info_t;
 static board_info_t dm9000_info;
 
-/* For module input parameter */
-static int media_mode = DM9000_AUTO;
-static u8 nfloor = 0;
-
 /* function declaration ------------------------------------- */
 int eth_init(bd_t * bd);
 int eth_send(volatile void *, int);
@@ -260,114 +244,6 @@ dm9000_probe(void)
        }
 }
 
-/* Set PHY operationg mode
-*/
-static void
-set_PHY_mode(void)
-{
-       u16 phy_reg4 = 0x01e1, phy_reg0 = 0x1000;
-       if (!(media_mode & DM9000_AUTO)) {
-               switch (media_mode) {
-               case DM9000_10MHD:
-                       phy_reg4 = 0x21;
-                       phy_reg0 = 0x0000;
-                       break;
-               case DM9000_10MFD:
-                       phy_reg4 = 0x41;
-                       phy_reg0 = 0x1100;
-                       break;
-               case DM9000_100MHD:
-                       phy_reg4 = 0x81;
-                       phy_reg0 = 0x2000;
-                       break;
-               case DM9000_100MFD:
-                       phy_reg4 = 0x101;
-                       phy_reg0 = 0x3100;
-                       break;
-               }
-               phy_write(4, phy_reg4); /* Set PHY media mode */
-               phy_write(0, phy_reg0); /*  Tmp */
-       }
-       DM9000_iow(DM9000_GPCR, 0x01);  /* Let GPIO0 output */
-       DM9000_iow(DM9000_GPR, 0x00);   /* Enable PHY */
-}
-
-/*
-       Init HomeRun DM9801
-*/
-static void
-program_dm9801(u16 HPNA_rev)
-{
-       __u16 reg16, reg17, reg24, reg25;
-       if (!nfloor)
-               nfloor = DM9801_NOISE_FLOOR;
-       reg16 = phy_read(16);
-       reg17 = phy_read(17);
-       reg24 = phy_read(24);
-       reg25 = phy_read(25);
-       switch (HPNA_rev) {
-       case 0xb900:            /* DM9801 E3 */
-               reg16 |= 0x1000;
-               reg25 = ((reg24 + nfloor) & 0x00ff) | 0xf000;
-               break;
-       case 0xb901:            /* DM9801 E4 */
-               reg25 = ((reg24 + nfloor) & 0x00ff) | 0xc200;
-               reg17 = (reg17 & 0xfff0) + nfloor + 3;
-               break;
-       case 0xb902:            /* DM9801 E5 */
-       case 0xb903:            /* DM9801 E6 */
-       default:
-               reg16 |= 0x1000;
-               reg25 = ((reg24 + nfloor - 3) & 0x00ff) | 0xc200;
-               reg17 = (reg17 & 0xfff0) + nfloor;
-       }
-       phy_write(16, reg16);
-       phy_write(17, reg17);
-       phy_write(25, reg25);
-}
-
-/*
-       Init LongRun DM9802
-*/
-static void
-program_dm9802(void)
-{
-       __u16 reg25;
-       if (!nfloor)
-               nfloor = DM9802_NOISE_FLOOR;
-       reg25 = phy_read(25);
-       reg25 = (reg25 & 0xff00) + nfloor;
-       phy_write(25, reg25);
-}
-
-/* Identify NIC type
-*/
-static void
-identify_nic(void)
-{
-       struct board_info *db = &dm9000_info;
-       u16 phy_reg3;
-       DM9000_iow(DM9000_NCR, NCR_EXT_PHY);
-       phy_reg3 = phy_read(3);
-       switch (phy_reg3 & 0xfff0) {
-       case 0xb900:
-               if (phy_read(31) == 0x4404) {
-                       db->nic_type = HOMERUN_NIC;
-                       program_dm9801(phy_reg3);
-                       DM9000_DBG("found homerun NIC\n");
-               } else {
-                       db->nic_type = LONGRUN_NIC;
-                       DM9000_DBG("found longrun NIC\n");
-                       program_dm9802();
-               }
-               break;
-       default:
-               db->nic_type = FASTETHER_NIC;
-               break;
-       }
-       DM9000_iow(DM9000_NCR, 0);
-}
-
 /* General Purpose dm9000 reset routine */
 static void
 dm9000_reset(void)
@@ -377,12 +253,12 @@ dm9000_reset(void)
        /* Reset DM9000,
           see DM9000 Application Notes V1.22 Jun 11, 2004 page 29 */
 
-       /* DEBUG: Make all GPIO pins outputs */
-       DM9000_iow(DM9000_GPCR, 0x0F);
+       /* DEBUG: Make all GPIO0 outputs, all others inputs */
+       DM9000_iow(DM9000_GPCR, GPCR_GPIO0_OUT);
        /* Step 1: Power internal PHY by writing 0 to GPIO0 pin */
        DM9000_iow(DM9000_GPR, 0);
        /* Step 2: Software reset */
-       DM9000_iow(DM9000_NCR, 3);
+       DM9000_iow(DM9000_NCR, (NCR_LBK_INT_MAC | NCR_RST));
 
        do {
                DM9000_DBG("resetting the DM9000, 1st reset\n");
@@ -390,7 +266,7 @@ dm9000_reset(void)
        } while (DM9000_ior(DM9000_NCR) & 1);
 
        DM9000_iow(DM9000_NCR, 0);
-       DM9000_iow(DM9000_NCR, 3); /* Issue a second reset */
+       DM9000_iow(DM9000_NCR, (NCR_LBK_INT_MAC | NCR_RST)); /* Issue a second reset */
 
        do {
                DM9000_DBG("resetting the DM9000, 2nd reset\n");
@@ -416,7 +292,9 @@ eth_init(bd_t * bd)
 
        /* RESET device */
        dm9000_reset();
-       dm9000_probe();
+
+       if (dm9000_probe() < 0)
+               return -1;
 
        /* Auto-detect 8/16/32 bit mode, ISR Bit 6+7 indicate bus width */
        io_mode = DM9000_ior(DM9000_ISR) >> 6;
@@ -449,21 +327,12 @@ eth_init(bd_t * bd)
                break;
        }
 
-       /* NIC Type: FASTETHER, HOMERUN, LONGRUN */
-       identify_nic();
-
-       /* GPIO0 on pre-activate PHY */
-       DM9000_iow(DM9000_GPR, 0x00);   /*REG_1F bit0 activate phyxcer */
-
-       /* Set PHY */
-       set_PHY_mode();
-
-       /* Program operating register, only intern phy supported by now */
+       /* Program operating register, only internal phy supported */
        DM9000_iow(DM9000_NCR, 0x0);
        /* TX Polling clear */
        DM9000_iow(DM9000_TCR, 0);
        /* Less 3Kb, 200us */
-       DM9000_iow(DM9000_BPTR, 0x3f);
+       DM9000_iow(DM9000_BPTR, BPTR_BPHW(3) | BPTR_JPT_600US);
        /* Flow Control : High/Low Water */
        DM9000_iow(DM9000_FCTR, FCTR_HWOT(3) | FCTR_LWOT(8));
        /* SH FIXME: This looks strange! Flow Control */
@@ -473,10 +342,10 @@ eth_init(bd_t * bd)
        /* clear TX status */
        DM9000_iow(DM9000_NSR, NSR_WAKEST | NSR_TX2END | NSR_TX1END);
        /* Clear interrupt status */
-       DM9000_iow(DM9000_ISR, 0x0f);
+       DM9000_iow(DM9000_ISR, ISR_ROOS | ISR_ROS | ISR_PTS | ISR_PRS);
 
        /* Set Node address */
-#ifndef CONFIG_AT91SAM9261EK
+#if !defined(CONFIG_AT91SAM9261EK)
        for (i = 0; i < 6; i++)
                ((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);
 #endif
@@ -498,7 +367,9 @@ eth_init(bd_t * bd)
        printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", bd->bi_enetaddr[0],
               bd->bi_enetaddr[1], bd->bi_enetaddr[2], bd->bi_enetaddr[3],
               bd->bi_enetaddr[4], bd->bi_enetaddr[5]);
-       for (i = 0, oft = 0x10; i < 6; i++, oft++)
+
+       /* fill device MAC address registers */
+       for (i = 0, oft = DM9000_PAR; i < 6; i++, oft++)
                DM9000_iow(oft, bd->bi_enetaddr[i]);
        for (i = 0, oft = 0x16; i < 8; i++, oft++)
                DM9000_iow(oft, 0xff);
index f47ff8cb344e46cac3e16490d27962fb8281d296..0d123e2e1f1f41b47beebcd5f833f24118939b13 100644 (file)
@@ -66,6 +66,8 @@
 #define NCR_FCOL               (1<<4)
 #define NCR_FDX                        (1<<3)
 #define NCR_LBK                        (3<<1)
+#define NCR_LBK_INT_MAC                (1<<1)
+#define NCR_LBK_INT_PHY                (2<<1)
 #define NCR_RST                        (1<<0)
 
 #define NSR_SPEED              (1<<7)
 #define RSR_CE                 (1<<1)
 #define RSR_FOE                        (1<<0)
 
+#define EPCR_EPOS_PHY          (1<<3)
+#define EPCR_EPOS_EE           (0<<3)
+#define EPCR_ERPRR             (1<<2)
+#define EPCR_ERPRW             (1<<1)
+#define EPCR_ERRE              (1<<0)
+
 #define FCTR_HWOT(ot)  (( ot & 0xf ) << 4 )
 #define FCTR_LWOT(ot)  ( ot & 0xf )
 
+#define BPTR_BPHW(x)   ((x) << 4)
+#define BPTR_JPT_200US         (0x07)
+#define BPTR_JPT_600US         (0x0f)
+
 #define IMR_PAR                        (1<<7)
 #define IMR_ROOM               (1<<3)
 #define IMR_ROM                        (1<<2)
 #define IMR_PTM                        (1<<1)
 #define IMR_PRM                        (1<<0)
 
+#define ISR_ROOS               (1<<3)
+#define ISR_ROS                        (1<<2)
+#define ISR_PTS                        (1<<1)
+#define ISR_PRS                        (1<<0)
+
+#define GPCR_GPIO0_OUT         (1<<0)
+
+#define GPR_PHY_PWROFF         (1<<0)
+
 #endif
index f2bdba6184c03fd5b59a1e824f87d31dc6fac9f2..59524a5ede91d6548872f29dce2d47901488c02b 100644 (file)
@@ -94,7 +94,7 @@ struct fec_info_dma fec_info[] = {
         0,                     /* phy name */
         0,                     /* phy name init */
 #ifdef CFG_DMA_USE_INTSRAM
-        DBUF_LENGTH,           /* RX BD */
+        (cbd_t *)DBUF_LENGTH,  /* RX BD */
 #else
         0,                     /* RX BD */
 #endif
@@ -540,15 +540,16 @@ int mcdmafec_initialize(bd_t * bis)
 
                /* setup Receive and Transmit buffer descriptor */
 #ifdef CFG_DMA_USE_INTSRAM
-               fec_info[i].rxbd = (int)fec_info[i].rxbd + tmp;
-               tmp = fec_info[i].rxbd;
+               fec_info[i].rxbd = (cbd_t *)((u32)fec_info[i].rxbd + tmp);
+               tmp = (u32)fec_info[i].rxbd;
                fec_info[i].txbd =
-                   (int)fec_info[i].txbd + tmp + (PKTBUFSRX * sizeof(cbd_t));
-               tmp = fec_info[i].txbd;
+                   (cbd_t *)((u32)fec_info[i].txbd + tmp +
+                   (PKTBUFSRX * sizeof(cbd_t)));
+               tmp = (u32)fec_info[i].txbd;
                fec_info[i].txbuf =
-                   (int)fec_info[i].txbuf + tmp +
-                   (CFG_TX_ETH_BUFFER * sizeof(cbd_t));
-               tmp = fec_info[i].txbuf;
+                   (char *)((u32)fec_info[i].txbuf + tmp +
+                   (CFG_TX_ETH_BUFFER * sizeof(cbd_t)));
+               tmp = (u32)fec_info[i].txbuf;
 #else
                fec_info[i].rxbd =
                    (cbd_t *) memalign(CFG_CACHELINE_SIZE,
@@ -582,5 +583,5 @@ int mcdmafec_initialize(bd_t * bis)
        /* default speed */
        bis->bi_ethspeed = 10;
 
-       return 1;
+       return 0;
 }
index 76ece59b36e0f1312895d3d5c36c83d863d13082..90c5338837d0544c67cdcea027f66e1c666b5642 100644 (file)
@@ -657,5 +657,5 @@ int greth_initialize(bd_t * bis)
        /* set and remember MAC address */
        greth_set_hwaddr(greth, addr);
 
-       return 1;
+       return 0;
 }
index 58ed5e32c6b22a49f2252b04074e93475861ac6b..50d6508fb4d0e90e71a289faa27a177e683f2b99 100644 (file)
@@ -66,6 +66,7 @@ struct fec_info_s fec_info[] = {
         0,                     /* tx Index */
         0,                     /* tx buffer */
         0,                     /* initialized flag */
+        (struct fec_info_s *)-1,
         },
 #endif
 #ifdef CFG_FEC1_IOBASE
@@ -78,12 +79,17 @@ struct fec_info_s fec_info[] = {
         0,                     /* duplex and speed */
         0,                     /* phy name */
         0,                     /* phy name init */
+#ifdef CFG_FEC_BUF_USE_SRAM
+        (cbd_t *)DBUF_LENGTH,  /* RX BD */
+#else
         0,                     /* RX BD */
+#endif
         0,                     /* TX BD */
         0,                     /* rx Index */
         0,                     /* tx Index */
         0,                     /* tx buffer */
         0,                     /* initialized flag */
+        (struct fec_info_s *)-1,
         }
 #endif
 };
@@ -168,16 +174,22 @@ int fec_send(struct eth_device *dev, volatile void *packet, int length)
        /* Activate transmit Buffer Descriptor polling */
        fecp->tdar = 0x01000000;        /* Descriptor polling active    */
 
-       /* FEC fix for MCF5275, FEC unable to initial transmit data packet.
+#ifndef CFG_FEC_BUF_USE_SRAM
+       /*
+        * FEC unable to initial transmit data packet.
         * A nop will ensure the descriptor polling active completed.
+        * CF Internal RAM has shorter cycle access than DRAM. If use
+        * DRAM as Buffer descriptor and data, a nop is a must.
+        * Affect only V2 and V3.
         */
-#ifdef CONFIG_M5275
        __asm__ ("nop");
+
 #endif
 
 #ifdef CFG_UNIFY_CACHE
        icache_invalid();
 #endif
+
        j = 0;
        while ((info->txbd[info->txIdx].cbd_sc & BD_ENET_TX_READY) &&
               (j < MCFFEC_TOUT_LOOP)) {
@@ -209,6 +221,8 @@ int fec_recv(struct eth_device *dev)
        int length;
 
        for (;;) {
+#ifndef CFG_FEC_BUF_USE_SRAM
+#endif
 #ifdef CFG_UNIFY_CACHE
                icache_invalid();
 #endif
@@ -553,6 +567,9 @@ int mcffec_initialize(bd_t * bis)
 {
        struct eth_device *dev;
        int i;
+#ifdef CFG_FEC_BUF_USE_SRAM
+       u32 tmp = CFG_INIT_RAM_ADDR + 0x1000;
+#endif
 
        for (i = 0; i < sizeof(fec_info) / sizeof(fec_info[0]); i++) {
 
@@ -573,6 +590,18 @@ int mcffec_initialize(bd_t * bis)
                dev->recv = fec_recv;
 
                /* setup Receive and Transmit buffer descriptor */
+#ifdef CFG_FEC_BUF_USE_SRAM
+               fec_info[i].rxbd = (cbd_t *)((u32)fec_info[i].rxbd + tmp);
+               tmp = (u32)fec_info[i].rxbd;
+               fec_info[i].txbd =
+                   (cbd_t *)((u32)fec_info[i].txbd + tmp +
+                   (PKTBUFSRX * sizeof(cbd_t)));
+               tmp = (u32)fec_info[i].txbd;
+               fec_info[i].txbuf =
+                   (char *)((u32)fec_info[i].txbuf + tmp +
+                   (CFG_TX_ETH_BUFFER * sizeof(cbd_t)));
+               tmp = (u32)fec_info[i].txbuf;
+#else
                fec_info[i].rxbd =
                    (cbd_t *) memalign(CFG_CACHELINE_SIZE,
                                       (PKTBUFSRX * sizeof(cbd_t)));
@@ -581,6 +610,8 @@ int mcffec_initialize(bd_t * bis)
                                       (TX_BUF_CNT * sizeof(cbd_t)));
                fec_info[i].txbuf =
                    (char *)memalign(CFG_CACHELINE_SIZE, DBUF_LENGTH);
+#endif
+
 #ifdef ET_DEBUG
                printf("rxbd %x txbd %x\n",
                       (int)fec_info[i].rxbd, (int)fec_info[i].txbd);
@@ -594,10 +625,13 @@ int mcffec_initialize(bd_t * bis)
                miiphy_register(dev->name,
                                mcffec_miiphy_read, mcffec_miiphy_write);
 #endif
+               if (i > 0)
+                       fec_info[i - 1].next = &fec_info[i];
        }
+       fec_info[i - 1].next = &fec_info[0];
 
        /* default speed */
        bis->bi_ethspeed = 10;
 
-       return 1;
+       return 0;
 }
index 8b83faeb15e3bb547e9a57e62a2565b296b42741..f1bc4a7d5c68cb773b75d36beac84e5333d75956 100644 (file)
@@ -29,24 +29,12 @@ include $(TOPDIR)/config.mk
 
 LIB    := $(obj)libsk98lin.a
 
-COBJS-y += skge.o
-COBJS-y += skaddr.o
-COBJS-y += skgehwt.o
-COBJS-y += skgeinit.o
-COBJS-y += skgepnmi.o
-COBJS-y += skgesirq.o
-COBJS-y += ski2c.o
-COBJS-y += sklm80.o
-COBJS-y += skqueue.o
-COBJS-y += skrlmt.o
-COBJS-y += sktimer.o
-COBJS-y += skvpd.o
-COBJS-y += skxmac2.o
-COBJS-y += skcsum.o
+COBJS-$(CONFIG_SK98) += skge.o skaddr.o skgehwt.o skgeinit.o skgepnmi.o \
+       skgesirq.o ski2c.o sklm80.o skqueue.o skrlmt.o sktimer.o \
+       skvpd.o skxmac2.o skcsum.o
 #COBJS-y += skproc.o
 
-COBJS-y += uboot_skb.o
-COBJS-y += uboot_drv.o
+COBJS-$(CONFIG_SK98) += uboot_skb.o uboot_drv.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
index ed79c049bb4abb60c8e26c125e0b4ec3201dddbd..8d34f7283440d35e85d36eea2c1757b7e1e8e196 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 #ifndef        lint
 static const char SysKonnectFileId[] =
        "@(#) $Id: skaddr.c,v 1.48 2003/02/12 17:09:37 tschilli Exp $ (C) SysKonnect.";
@@ -1875,5 +1873,3 @@ SK_U32    ToPortNumber)           /* Port2 Index */
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
-
-#endif /* CONFIG_SK98 */
index a5dc572587eb74b56f1ac631e4f89059899aa706..162b67df0e80ed22acfc43e70680e885f6f98b4e 100644 (file)
@@ -72,8 +72,6 @@
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 #ifdef SK_USE_CSUM     /* Check if CSUM is to be used. */
 
 #ifndef lint
@@ -925,5 +923,3 @@ SK_EVPARA   Param)  /* Event dependent parameter. */
 }      /* SkCsEvent */
 
 #endif /* SK_USE_CSUM */
-
-#endif /* CONFIG_SK98 */
index e1d7e8720cef553506e3314cadcdcbeb66c08501..c815480f8b99a3dbcbf386fe1da6ef8b7be0f036 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 #include       "h/skversion.h"
 #if 0
 #include       <linux/module.h>
@@ -4860,5 +4858,3 @@ int       l;
 } /* DumpLong */
 
 #endif
-
-#endif /* CONFIG_SK98 */
index f8681a8b0f10408245165363d623ad0c95dffcca..ca08eb1de117e183aac0028f29ec52f83309e473 100644 (file)
@@ -75,8 +75,6 @@
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
        Event queue and dispatcher
 */
@@ -214,7 +212,4 @@ SK_IOC      Ioc)    /* IoContext */
        pAC->Hwt.TStop = pAC->Hwt.TStart;
        SkTimerDone(pAC,Ioc) ;
 }
-
-#endif /* CONFIG_SK98 */
-
 /* End of file */
index e49685bb9c9d09305362b1801c9f172f18675608..ab740c7fcd6ed610dd6f53bb9d8de5a24177051f 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 #include "h/skdrv1st.h"
 #include "h/skdrv2nd.h"
 
@@ -2367,5 +2365,3 @@ int               Port)           /* Port to configure */
 
        return(0);
 }      /* SkGeInitPort */
-
-#endif /* CONFIG_SK98 */
index 4a9e9e6af1af53e322de7dbf9a03fcf4f3740113..7f62e9cf39245fa2325bc7c3a5a1c42e47ac0bfc 100644 (file)
@@ -52,8 +52,6 @@
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
  * PRIVATE OID handler function prototypes
  */
@@ -1056,5 +1054,3 @@ PNMI_STATIC const SK_PNMI_TAB_ENTRY IdTable[] = {
                0,
                SK_PNMI_RO, Vct, 0},
 };
-
-#endif /* CONFIG_SK98 */
index 16fa3523abf8e2964650c9ad42fc7c71bbfb3900..d0e33cbd6ad48055ce40dd7472eefb52a3963a27 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 static const char SysKonnectFileId[] =
        "@(#) $Id: skgepnmi.c,v 1.102 2002/12/16 14:03:24 tschilli Exp $"
        " (C) SysKonnect.";
@@ -8306,5 +8304,3 @@ SK_U32            PhysPortIndex)
        }
 
 } /* CheckVctStatus */
-
-#endif /* CONFIG_SK98 */
index c9763e740182f09a54b19580e4e308a639f6d5b8..106fe48c0d2a61b386a11341a8a1f774d8359c0b 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
  *     Special Interrupt handler
  *
@@ -2412,6 +2410,4 @@ SK_U16    IStatus)        /* Interrupt Status */
 }      /* SkPhyIsrLone */
 #endif /* OTHER_PHY */
 
-#endif /* CONFIG_SK98 */
-
 /* End of File */
index 0c5d9b407ed7354792768d16e3a5ba0aeecce97a..894cc67cbdbf38c46bef3c1e090b0c80be583b50 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
  *     I2C Protocol
  */
@@ -1501,5 +1499,3 @@ SK_EVPARA Para)   /* Event specific Parameter */
 }      /* SkI2cEvent*/
 
 #endif /* !SK_DIAG */
-
-#endif /* CONFIG_SK98 */
index 0229877b5912079de40554e042453246ce656b4c..9f455f79bc47405ebd0fc396e39d8fc928d60a93 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
        LM80 functions
 */
@@ -288,5 +286,3 @@ SK_SENSOR   *pSen)  /* Sensor to be read */
        /* Not completed */
        return(0);
 }
-
-#endif /* CONFIG_SK98 */
index 94a6a564ac79c66785c1167a4cce28eeb3819f3a..9325ee7e5524fa304f242ba468fc5317391cfff6 100644 (file)
@@ -72,8 +72,6 @@
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 #include <linux/proc_fs.h>
 
 #include "h/skdrv1st.h"
@@ -510,5 +508,3 @@ char * SkNumber(char * str, long long num, int base, int size, int precision
 
        return strorg;
 }
-
-#endif /* CONFIG_SK98 */
index c49baed4f04a1f8088ec9307766e4f8b5c54958a..de7441e3b82e97920bd5c7b609ebcb7edd5cc915 100644 (file)
@@ -89,8 +89,6 @@
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
        Event queue and dispatcher
 */
@@ -237,6 +235,4 @@ SK_IOC      Ioc)    /* Io context */
        return(0) ;
 }
 
-#endif /* CONFIG_SK98 */
-
 /* End of file */
index 14a6f40d8b83cfe5850a9458b6775debd0c77ce3..2e7924d011a32e1c5269b34f3cd64f33fd2e37ef 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 #ifndef        lint
 static const char SysKonnectFileId[] =
        "@(#) $Id: skrlmt.c,v 1.68 2003/01/31 15:26:56 rschmidt Exp $ (C) SysKonnect.";
@@ -3504,5 +3502,3 @@ SK_EVPARA Para)   /* Event-specific parameter */
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
-
-#endif /* CONFIG_SK98 */
index 37cd4c9fe118158e1337dd8096e2a08410f331e3..8363ce46584bebd5759aa3fd8c5f31fa1c0346f9 100644 (file)
@@ -74,8 +74,6 @@
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
        Event queue and dispatcher
 */
@@ -292,6 +290,4 @@ int Restart)        /* Do we need to restart the Hardware timer ? */
        }
 }
 
-#endif /* CONFIG_SK98 */
-
 /* End of file */
index 429da8256ef08f7c37f98b27facf937d084e0bcb..7935195fa98bda0d5aee74815af088af60693b0b 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 /*
        Please refer skvpd.txt for infomation how to include this module
  */
@@ -1325,5 +1323,3 @@ char      *msg)   /* error log message */
 
        (void)VpdUpdate(pAC, IoC);
 }
-
-#endif /* CONFIG_SK98 */
index 794600054a13d5873a3451fc492b8c31da24cb2e..e0ded42bae5d4c84cba809603d5d1adbd23cf733 100644 (file)
 
 #include <config.h>
 
-#ifdef CONFIG_SK98
-
 #include "h/skdrv1st.h"
 #include "h/skdrv2nd.h"
 
@@ -4391,6 +4389,4 @@ SK_BOOL   StartTest)      /* flag for start / get result */
        return(0);
 }      /* SkGmCableDiagStatus */
 
-#endif /* CONFIG_SK98 */
-
 /* End of file */
index d02cd1be2427adab1e229e166fbfef5697ff0bc3..205e7d2e9903de76c2e3906929fea89835fd091d 100644 (file)
@@ -25,9 +25,6 @@
 
 #include <common.h>
 
-#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI) && \
-       defined(CONFIG_SK98)
-
 #include "h/skdrv1st.h"
 #include "h/skdrv2nd.h"
 #include "u-boot_compat.h"
@@ -73,7 +70,7 @@ int skge_initialize(bd_t * bis)
                eth_register(dev[i]);
        }
 
-       return numdev;
+       return ((numdev > 0) && (numdev <= SKGE_MAX_CARDS) ? 0 : -1);
 }
 
 
@@ -138,6 +135,3 @@ static int skge_recv(struct eth_device *dev)
 
        return 0;
 }
-
-
-#endif /* CONFIG_SK98 */
index 3a487a8e3d6c0ef639458cb4fd4341245b8e50df..487f01ed37d109f1834a55bb81065c0186e81b83 100644 (file)
@@ -24,9 +24,6 @@
  */
 
 #include <config.h>
-
-#ifdef CONFIG_SK98
-
 #include <common.h>
 #include "u-boot_compat.h"
 
@@ -118,5 +115,3 @@ void skb_put(struct sk_buff *skb, unsigned int len)
 {
        skb->len+=len;
 }
-
-#endif /* CONFIG_SK98 */
index be2ce2477827965ccbbfe8eeb6b30e42232be425..c09b07d36a066282b0fe995a6a920210737321e0 100644 (file)
@@ -69,9 +69,6 @@ typedef       struct  global_data {
 #endif /* CONFIG_MPC834X */
 #if defined(CONFIG_MPC8315)
        u32 tdm_clk;
-#endif
-#if defined(CONFIG_MPC837X)
-       u32 sdhc_clk;
 #endif
        u32 core_clk;
        u32 enc_clk;
@@ -89,6 +86,9 @@ typedef       struct  global_data {
        u32  mem_sec_clk;
 #endif /* CONFIG_MPC8360 */
 #endif
+#if defined(CONFIG_MPC837X) || defined(CONFIG_MPC8536)
+       u32 sdhc_clk;
+#endif
 #if defined(CONFIG_MPC83XX) || defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
        u32 i2c1_clk;
        u32 i2c2_clk;
index 113ba482daafa88b3bc85bb0c71c3a8a064450ac..559d6ea6caab83b03f145084c0e225a53603d420 100644 (file)
@@ -1560,6 +1560,7 @@ typedef struct ccsr_gur {
 #define MPC85xx_PORDEVSR_SGMII2_DIS    0x10000000
 #define MPC85xx_PORDEVSR_SGMII3_DIS    0x08000000
 #define MPC85xx_PORDEVSR_SGMII4_DIS    0x04000000
+#define MPC85xx_PORDEVSR_SRDS2_IO_SEL   0x38000000
 #define MPC85xx_PORDEVSR_IO_SEL                0x00380000
 #define MPC85xx_PORDEVSR_PCI2_ARB      0x00040000
 #define MPC85xx_PORDEVSR_PCI1_ARB      0x00020000
@@ -1653,13 +1654,23 @@ typedef struct ccsr_gur {
 #define CFG_MPC85xx_PCIX_ADDR  (CFG_IMMR + CFG_MPC85xx_PCIX_OFFSET)
 #define CFG_MPC85xx_PCIX2_OFFSET       (0x9000)
 #define CFG_MPC85xx_PCIX2_ADDR (CFG_IMMR + CFG_MPC85xx_PCIX2_OFFSET)
+#define CFG_MPC85xx_SATA1_OFFSET       (0x18000)
+#define CFG_MPC85xx_SATA1_ADDR (CFG_IMMR + CFG_MPC85xx_SATA1_OFFSET)
+#define CFG_MPC85xx_SATA2_OFFSET       (0x19000)
+#define CFG_MPC85xx_SATA2_ADDR (CFG_IMMR + CFG_MPC85xx_SATA2_OFFSET)
 #define CFG_MPC85xx_L2_OFFSET  (0x20000)
 #define CFG_MPC85xx_L2_ADDR    (CFG_IMMR + CFG_MPC85xx_L2_OFFSET)
 #define CFG_MPC85xx_DMA_OFFSET (0x21000)
 #define CFG_MPC85xx_DMA_ADDR   (CFG_IMMR + CFG_MPC85xx_DMA_OFFSET)
+#define CFG_MPC85xx_ESDHC_OFFSET       (0x2e000)
+#define CFG_MPC85xx_ESDHC_ADDR (CFG_IMMR + CFG_MPC85xx_ESDHC_OFFSET)
 #define CFG_MPC85xx_PIC_OFFSET (0x40000)
 #define CFG_MPC85xx_PIC_ADDR   (CFG_IMMR + CFG_MPC85xx_PIC_OFFSET)
 #define CFG_MPC85xx_CPM_OFFSET (0x80000)
 #define CFG_MPC85xx_CPM_ADDR   (CFG_IMMR + CFG_MPC85xx_CPM_OFFSET)
+#define CFG_MPC85xx_SERDES1_OFFSET     (0xE3000)
+#define CFG_MPC85xx_SERDES1_ADDR       (CFG_IMMR + CFG_MPC85xx_SERDES2_OFFSET)
+#define CFG_MPC85xx_SERDES2_OFFSET     (0xE3100)
+#define CFG_MPC85xx_SERDES2_ADDR       (CFG_IMMR + CFG_MPC85xx_SERDES2_OFFSET)
 
 #endif /*__IMMAP_85xx__*/
index 050a7b6472789c9ddae318d610bd6bde169b808a..8975e6c90a8586e708f2770be77fa48bcf15a525 100644 (file)
@@ -431,6 +431,7 @@ extern void set_tlb(u8 tlb, u32 epn, u64 rpn,
 extern void disable_tlb(u8 esel);
 extern void invalidate_tlb(u8 tlb);
 extern void init_tlbs(void);
+extern unsigned int setup_ddr_tlbs(unsigned int memsize_in_meg);
 
 #define SET_TLB_ENTRY(_tlb, _epn, _rpn, _perms, _wimge, _ts, _esel, _sz, _iprot) \
        { .tlb = _tlb, .epn = _epn, .rpn = _rpn, .perms = _perms, \
index dce4717f427df7cb36044c669888c5d2d66a0cef..e07e5d3be8f191c69548c5705a30d0e75e11ec96 100644 (file)
 
 #define SVR_8533       0x803400
 #define SVR_8533_E     0x803C00
+#define SVR_8536       0x803700
+#define SVR_8536_E     0x803F00
 #define SVR_8540       0x803000
 #define SVR_8541       0x807200
 #define SVR_8541_E     0x807A00
index 6aa881caca4bc92efca0d19a5bf4795cd2e7d11a..5bc28f18f90a0b1a1e8aed703999bd11262cc761 100644 (file)
 
 #define CONFIG_TSEC_ENET       1       /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM      1       /* Use SPD EEPROM for DDR setup*/
-#undef CONFIG_DDR_2T_TIMING            /* Sets the 2T timing bit */
 
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 #define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
 #define CONFIG_SYS_CLK_FREQ    33000000
 
 /*
 #define CFG_PCI2_ADDR  (CFG_CCSRBAR+0x9000)
 #define CFG_PCIE1_ADDR (CFG_CCSRBAR+0xa000)
 
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+#define CONFIG_DDR_SPD
 
-#if defined(CONFIG_SPD_EEPROM)
-    /*
-     * Determine DDR configuration from I2C interface.
-     */
-    #define SPD_EEPROM_ADDRESS 0x51            /* DDR DIMM */
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
 
-#else
-    /*
-     * Manually set up DDR parameters
-     */
-    #define CFG_SDRAM_SIZE     1024            /* DDR is 1024MB */
-    #define CFG_DDR_CS0_BNDS   0x0000000f      /* 0-1024 */
-    #define CFG_DDR_CS0_CONFIG 0x80000102
-    #define CFG_DDR_TIMING_0   0x00260802
-    #define CFG_DDR_TIMING_1   0x38355322
-    #define CFG_DDR_TIMING_2   0x039048c7
-    #define CFG_DDR_CONTROL    0xc2000000      /* unbuffered,no DYN_PWR */
-    #define CFG_DDR_MODE       0x00000432
-    #define CFG_DDR_INTERVAL   0x05150100
-    #define DDR_SDRAM_CFG      0x43000000
-#endif
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
+
+/* Manually set up DDR parameters */
+#define CFG_SDRAM_SIZE 1024            /* DDR is 1024MB */
+#define CFG_DDR_CS0_BNDS       0x0000000f      /* 0-1024 */
+#define CFG_DDR_CS0_CONFIG     0x80000102
+#define CFG_DDR_TIMING_0       0x00260802
+#define CFG_DDR_TIMING_1       0x38355322
+#define CFG_DDR_TIMING_2       0x039048c7
+#define CFG_DDR_CONTROL        0xc2000000      /* unbuffered,no DYN_PWR */
+#define CFG_DDR_MODE   0x00000432
+#define CFG_DDR_INTERVAL       0x05150100
+#define DDR_SDRAM_CFG  0x43000000
 
 #undef CONFIG_CLOCKS_IN_MHZ
 
diff --git a/include/configs/MPC8536DS.h b/include/configs/MPC8536DS.h
new file mode 100644 (file)
index 0000000..17cc934
--- /dev/null
@@ -0,0 +1,594 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * mpc8536ds board configuration file
+ *
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE           1       /* BOOKE */
+#define CONFIG_E500            1       /* BOOKE e500 family */
+#define CONFIG_MPC85xx         1       /* MPC8540/60/55/41/48 */
+#define CONFIG_MPC8536         1
+#define CONFIG_MPC8536DS       1
+
+#define CONFIG_PCI             1       /* Enable PCI/PCIE */
+#define CONFIG_PCI1            1       /* Enable PCI controller 1 */
+#define CONFIG_PCIE1           1       /* PCIE controler 1 (slot 1) */
+#define CONFIG_PCIE2           1       /* PCIE controler 2 (slot 2) */
+#define CONFIG_PCIE3           1       /* PCIE controler 3 (ULI bridge) */
+#define CONFIG_FSL_PCI_INIT    1       /* Use common FSL init code */
+#define CONFIG_FSL_PCIE_RESET  1       /* need PCIe reset errata */
+
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
+
+#define CONFIG_TSEC_ENET               /* tsec ethernet support */
+#define CONFIG_ENV_OVERWRITE
+
+/*
+ * When initializing flash, if we cannot find the manufacturer ID,
+ * assume this is the AMD flash associated with the CDS board.
+ * This allows booting from a promjet.
+ */
+#define CONFIG_ASSUME_AMD_FLASH
+
+#ifndef __ASSEMBLY__
+extern unsigned long get_board_sys_clk(unsigned long dummy);
+extern unsigned long get_board_ddr_clk(unsigned long dummy);
+#endif
+#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk(0) /* sysclk for MPC85xx */
+/* #define CONFIG_DDR_CLK_FREQ get_board_ddr_clk(0) /\* ddrclk for MPC85xx *\/ FIXME-8536*/
+#define CONFIG_ICS307_REFCLK_HZ        33333000  /* ICS307 clock chip ref freq */
+#define CONFIG_GET_CLK_FROM_ICS307       /* decode sysclk and ddrclk freq
+                                            from ICS307 instead of switches */
+
+/*
+ * These can be toggled for performance analysis, otherwise use default.
+ */
+#define CONFIG_L2_CACHE                        /* toggle L2 cache */
+#define CONFIG_BTB                     /* toggle branch predition */
+#define CONFIG_ADDR_STREAMING          /* toggle addr streaming */
+
+#define CONFIG_ENABLE_36BIT_PHYS       1
+
+#define CFG_MEMTEST_START      0x00000000      /* memtest works on */
+#define CFG_MEMTEST_END                0x7fffffff
+#define CONFIG_PANIC_HANG      /* do not reset board on panic */
+
+/*
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ */
+#define CFG_CCSRBAR_DEFAULT    0xff700000      /* CCSRBAR Default */
+#define CFG_CCSRBAR            0xffe00000      /* relocated CCSRBAR */
+#define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
+#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
+
+#define CFG_PCI1_ADDR          (CFG_CCSRBAR+0x8000)
+#define CFG_PCIE1_ADDR         (CFG_CCSRBAR+0xa000)
+#define CFG_PCIE2_ADDR         (CFG_CCSRBAR+0x9000)
+#define CFG_PCIE3_ADDR         (CFG_CCSRBAR+0xb000)
+
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+#define CONFIG_DDR_SPD
+#undef CONFIG_DDR_DLL
+
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
+#define CFG_SPD_BUS_NUM                1
+
+/* These are used when DDR doesn't use SPD. */
+#define CFG_SDRAM_SIZE         256             /* DDR is 256MB */
+#define CFG_DDR_CS0_BNDS       0x0000001F
+#define CFG_DDR_CS0_CONFIG     0x80010102      /* Enable, no interleaving */
+#define CFG_DDR_TIMING_3       0x00000000
+#define CFG_DDR_TIMING_0       0x00260802
+#define CFG_DDR_TIMING_1       0x3935d322
+#define CFG_DDR_TIMING_2       0x14904cc8
+#define CFG_DDR_MODE_1         0x00480432
+#define CFG_DDR_MODE_2         0x00000000
+#define CFG_DDR_INTERVAL       0x06180100
+#define CFG_DDR_DATA_INIT      0xdeadbeef
+#define CFG_DDR_CLK_CTRL       0x03800000
+#define CFG_DDR_OCD_CTRL       0x00000000
+#define CFG_DDR_OCD_STATUS     0x00000000
+#define CFG_DDR_CONTROL                0xC3008000      /* Type = DDR2 */
+#define CFG_DDR_CONTROL2       0x04400010
+
+#define CFG_DDR_ERR_INT_EN     0x0000000d
+#define CFG_DDR_ERR_DIS                0x00000000
+#define CFG_DDR_SBE            0x00010000
+
+/* FIXME: Not used in fixed_sdram function */
+#define CFG_DDR_MODE           0x00000022
+#define CFG_DDR_CS1_BNDS       0x00000000
+#define CFG_DDR_CS2_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS3_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS4_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS5_BNDS       0x00000FFF      /* Not done */
+
+/* Make sure required options are set */
+#ifndef CONFIG_SPD_EEPROM
+#error ("CONFIG_SPD_EEPROM is required")
+#endif
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+
+/*
+ * Memory map -- xxx -this is wrong, needs updating
+ *
+ * 0x0000_0000 0x7fff_ffff     DDR                     2G Cacheable
+ * 0x8000_0000 0xbfff_ffff     PCI Express Mem         1G non-cacheable
+ * 0xc000_0000 0xdfff_ffff     PCI                     512M non-cacheable
+ * 0xe100_0000 0xe3ff_ffff     PCI IO range            4M non-cacheable
+ *
+ * Localbus cacheable (TBD)
+ * 0xXXXX_XXXX 0xXXXX_XXXX     SRAM                    YZ M Cacheable
+ *
+ * Localbus non-cacheable
+ * 0xe000_0000 0xe80f_ffff     Promjet/free            128M non-cacheable
+ * 0xe800_0000 0xefff_ffff     FLASH                   128M non-cacheable
+ * 0xffdf_0000 0xffdf_7fff     PIXIS                   32K non-cacheable TLB0
+ * 0xffd0_0000 0xffd0_3fff     L1 for stack            16K Cacheable TLB0
+ * 0xffe0_0000 0xffef_ffff     CCSR                    1M non-cacheable
+ */
+
+/*
+ * Local Bus Definitions
+ */
+#define CFG_FLASH_BASE         0xe0000000      /* start of FLASH 128M */
+
+#define CFG_BR0_PRELIM         0xe8001001
+#define CFG_OR0_PRELIM         0xf8000ff7
+
+#define CFG_BR1_PRELIM         0xe0001001
+#define CFG_OR1_PRELIM         0xf8000ff7
+
+#define CFG_FLASH_BANKS_LIST   {CFG_FLASH_BASE + 0x8000000, CFG_FLASH_BASE}
+#define CFG_FLASH_QUIET_TEST
+#define CONFIG_FLASH_SHOW_PROGRESS 45 /* count down from 45/5: 9..1 */
+
+#define CFG_MAX_FLASH_BANKS    2               /* number of banks */
+#define CFG_MAX_FLASH_SECT     1024            /* sectors per device */
+#undef CFG_FLASH_CHECKSUM
+#define CFG_FLASH_ERASE_TOUT   60000           /* Flash Erase Timeout (ms) */
+#define CFG_FLASH_WRITE_TOUT   500             /* Flash Write Timeout (ms) */
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor */
+
+#define CONFIG_FLASH_CFI_DRIVER
+#define CFG_FLASH_CFI
+#define CFG_FLASH_EMPTY_INFO
+#define CFG_FLASH_AMD_CHECK_DQ7
+
+#define CONFIG_BOARD_EARLY_INIT_R      /* call board_early_init_r function */
+
+#define CONFIG_FSL_PIXIS       1       /* use common PIXIS code */
+#define PIXIS_BASE     0xffdf0000      /* PIXIS registers */
+
+#define CFG_BR3_PRELIM (PIXIS_BASE | 0x0801)   /* port size 8bit */
+#define CFG_OR3_PRELIM         0xffffeff7      /* 32KB but only 4k mapped */
+
+#define PIXIS_ID               0x0     /* Board ID at offset 0 */
+#define PIXIS_VER              0x1     /* Board version at offset 1 */
+#define PIXIS_PVER             0x2     /* PIXIS FPGA version at offset 2 */
+#define PIXIS_CSR              0x3     /* PIXIS General control/status register */
+#define PIXIS_RST              0x4     /* PIXIS Reset Control register */
+#define PIXIS_PWR              0x5     /* PIXIS Power status register */
+#define PIXIS_AUX              0x6     /* Auxiliary 1 register */
+#define PIXIS_SPD              0x7     /* Register for SYSCLK speed */
+#define PIXIS_AUX2             0x8     /* Auxiliary 2 register */
+#define PIXIS_VCTL             0x10    /* VELA Control Register */
+#define PIXIS_VSTAT            0x11    /* VELA Status Register */
+#define PIXIS_VCFGEN0          0x12    /* VELA Config Enable 0 */
+#define PIXIS_VCFGEN1          0x13    /* VELA Config Enable 1 */
+#define PIXIS_VCORE0           0x14    /* VELA VCORE0 Register */
+#define PIXIS_VBOOT            0x16    /* VELA VBOOT Register */
+#define PIXIS_VSPEED0          0x17    /* VELA VSpeed 0 */
+#define PIXIS_VSPEED1          0x18    /* VELA VSpeed 1 */
+#define PIXIS_VSPEED2          0x19    /* VELA VSpeed 2 */
+#define PIXIS_VSYSCLK0         0x1A    /* VELA SYSCLK0 Register */
+#define PIXIS_VSYSCLK1         0x1B    /* VELA SYSCLK1 Register */
+#define PIXIS_VSYSCLK2         0x1C    /* VELA SYSCLK2 Register */
+#define PIXIS_VDDRCLK0         0x1D    /* VELA DDRCLK0 Register */
+#define PIXIS_VDDRCLK1         0x1E    /* VELA DDRCLK1 Register */
+#define PIXIS_VDDRCLK2         0x1F    /* VELA DDRCLK2 Register */
+#define PIXIS_VWATCH           0x24    /* Watchdog Register */
+#define PIXIS_LED              0x25    /* LED Register */
+
+/* old pixis referenced names */
+#define PIXIS_VCLKH            0x19    /* VELA VCLKH register */
+#define PIXIS_VCLKL            0x1A    /* VELA VCLKL register */
+#define CFG_PIXIS_VBOOT_MASK   0xc0
+
+/* define to use L1 as initial stack */
+#define CONFIG_L1_INIT_RAM
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR      0xffd00000      /* Initial L1 address */
+#define CFG_INIT_RAM_END       0x00004000      /* End of used area in RAM */
+
+#define CFG_GBL_DATA_SIZE      128     /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+#define CFG_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (1024 * 1024)   /* Reserved for malloc */
+
+/* Serial Port - controlled on board with jumper J8
+ * open - index 2
+ * shorted - index 1
+ */
+#define CONFIG_CONS_INDEX      1
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE   1
+#define CFG_NS16550_CLK                get_bus_freq(0)
+
+#define CFG_BAUDRATE_TABLE     \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
+
+#define CFG_NS16550_COM1       (CFG_CCSRBAR+0x4500)
+#define CFG_NS16550_COM2       (CFG_CCSRBAR+0x4600)
+
+/* Use the HUSH parser */
+#define CFG_HUSH_PARSER
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+#endif
+
+/*
+ * Pass open firmware flat tree
+ */
+#define CONFIG_OF_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
+
+#define CFG_64BIT_STRTOUL              1
+#define CFG_64BIT_VSPRINTF             1
+
+
+/*
+ * I2C
+ */
+#define CONFIG_FSL_I2C         /* Use FSL common I2C driver */
+#define CONFIG_HARD_I2C                /* I2C with hardware support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_I2C_CMD_TREE
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_NOPROBES       {{0, 0x29}}     /* Don't probe these addrs */
+#define CFG_I2C_OFFSET         0x3000
+#define CFG_I2C2_OFFSET                0x3100
+
+/*
+ * I2C2 EEPROM
+ */
+#define CFG_ID_EEPROM
+#ifdef CFG_ID_EEPROM
+#define CONFIG_ID_EEPROM
+#define CFG_I2C_EEPROM_NXID
+#endif
+#define CFG_I2C_EEPROM_ADDR    0x57
+#define CFG_I2C_EEPROM_ADDR_LEN        1
+#define CFG_EEPROM_BUS_NUM     1
+
+/*
+ * General PCI
+ * Memory space is mapped 1-1, but I/O space must start from 0.
+ */
+
+/* PCI view of System Memory */
+#define CFG_PCI_MEMORY_BUS     0x00000000
+#define CFG_PCI_MEMORY_PHYS    0x00000000
+#define CFG_PCI_MEMORY_SIZE    0x80000000
+
+#define CFG_PCI1_MEM_BASE      0x80000000
+#define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
+#define CFG_PCI1_MEM_SIZE      0x10000000      /* 256M */
+#define CFG_PCI1_IO_BASE       0x00000000
+#define CFG_PCI1_IO_PHYS       0xffc00000
+#define CFG_PCI1_IO_SIZE       0x00010000      /* 64k */
+
+/* controller 1, Slot 1, tgtid 1, Base address a000 */
+#define CFG_PCIE1_MEM_BASE     0x90000000
+#define CFG_PCIE1_MEM_PHYS     CFG_PCIE1_MEM_BASE
+#define CFG_PCIE1_MEM_SIZE     0x08000000      /* 128M */
+#define CFG_PCIE1_IO_BASE      0x00000000
+#define CFG_PCIE1_IO_PHYS      0xffc10000
+#define CFG_PCIE1_IO_SIZE      0x00010000      /* 64k */
+
+/* controller 2, Slot 2, tgtid 2, Base address 9000 */
+#define CFG_PCIE2_MEM_BASE     0x98000000
+#define CFG_PCIE2_MEM_PHYS     CFG_PCIE2_MEM_BASE
+#define CFG_PCIE2_MEM_SIZE     0x08000000      /* 128M */
+#define CFG_PCIE2_IO_BASE      0x00000000
+#define CFG_PCIE2_IO_PHYS      0xffc20000
+#define CFG_PCIE2_IO_SIZE      0x00010000      /* 64k */
+
+/* controller 3, direct to uli, tgtid 3, Base address 8000 */
+#define CFG_PCIE3_MEM_BASE     0xa0000000
+#define CFG_PCIE3_MEM_PHYS     CFG_PCIE3_MEM_BASE
+#define CFG_PCIE3_MEM_SIZE     0x20000000      /* 512M */
+#define CFG_PCIE3_IO_BASE      0x00000000
+#define CFG_PCIE3_IO_PHYS      0xffc30000
+#define CFG_PCIE3_IO_SIZE      0x00010000      /* 64k */
+
+#if defined(CONFIG_PCI)
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
+
+/*PCIE video card used*/
+#define VIDEO_IO_OFFSET                CFG_PCIE3_IO_PHYS
+
+/*PCI video card used*/
+/*#define VIDEO_IO_OFFSET      CFG_PCI1_IO_PHYS*/
+
+/* video */
+#define CONFIG_VIDEO
+
+#if defined(CONFIG_VIDEO)
+#define CONFIG_BIOSEMU
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_SW_CURSOR
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_ATI_RADEON_FB
+#define CONFIG_VIDEO_LOGO
+/*#define CONFIG_CONSOLE_CURSOR*/
+#define CFG_ISA_IO_BASE_ADDRESS CFG_PCIE3_IO_PHYS
+#endif
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_TULIP
+#undef CONFIG_RTL8139
+
+#ifdef CONFIG_RTL8139
+/* This macro is used by RTL8139 but not defined in PPC architecture */
+#define KSEG1ADDR(x)           ({u32 _x=le32_to_cpu(*(u32 *)(x)); (&_x);})
+#define _IO_BASE       0x00000000
+#endif
+
+#ifndef CONFIG_PCI_PNP
+       #define PCI_ENET0_IOADDR        CFG_PCI1_IO_BASE
+       #define PCI_ENET0_MEMADDR       CFG_PCI1_IO_BASE
+       #define PCI_IDSEL_NUMBER        0x11    /* IDSEL = AD11 */
+#endif
+
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
+
+#endif /* CONFIG_PCI */
+
+/* SATA */
+#define CONFIG_LIBATA
+#define CONFIG_FSL_SATA
+
+#define CFG_SATA_MAX_DEVICE    2
+#define CONFIG_SATA1
+#define CFG_SATA1              CFG_MPC85xx_SATA1_ADDR
+#define CFG_SATA1_FLAGS                FLAGS_DMA
+#define CONFIG_SATA2
+#define CFG_SATA2              CFG_MPC85xx_SATA2_ADDR
+#define CFG_SATA2_FLAGS                FLAGS_DMA
+
+#ifdef CONFIG_FSL_SATA
+#define CONFIG_LBA48
+#define CONFIG_CMD_SATA
+#define CONFIG_DOS_PARTITION
+#define CONFIG_CMD_EXT2
+#endif
+
+#if defined(CONFIG_TSEC_ENET)
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI       1
+#endif
+
+#define CONFIG_MII             1       /* MII PHY management */
+#define CONFIG_MII_DEFAULT_TSEC        1       /* Allow unregistered phys */
+#define CONFIG_TSEC1   1
+#define CONFIG_TSEC1_NAME      "eTSEC1"
+#define CONFIG_TSEC3   1
+#define CONFIG_TSEC3_NAME      "eTSEC3"
+
+#define TSEC1_PHY_ADDR         1       /* TSEC1 -> PHY1 */
+#define TSEC3_PHY_ADDR         0       /* TSEC3 -> PHY0 */
+
+#define TSEC1_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC3_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+
+#define TSEC1_PHYIDX           0
+#define TSEC3_PHYIDX           0
+
+#define CONFIG_ETHPRIME                "eTSEC1"
+
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#endif /* CONFIG_TSEC_ENET */
+
+/*
+ * Environment
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#if CFG_MONITOR_BASE > 0xfff80000
+#define CFG_ENV_ADDR           0xfff80000
+#else
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE + 0x60000)
+#endif
+#define CFG_ENV_SIZE           0x2000
+#define CFG_ENV_SECT_SIZE      0x20000 /* 128K (one sector) */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change */
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_ELF
+
+#if defined(CONFIG_PCI)
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_BEDBUG
+#define CONFIG_CMD_NET
+#endif
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory */
+#define CONFIG_CMDLINE_EDITING         /* Command-line editing */
+#define CFG_LOAD_ADDR  0x2000000       /* default load address */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE     1024            /* Console I/O Buffer Size */
+#else
+#define CFG_CBSIZE     256             /* Console I/O Buffer Size */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_HZ         1000            /* decrementer freq: 1ms ticks */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+
+/* The mac addresses for all ethernet interface */
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_HAS_ETH0
+#define CONFIG_ETHADDR 00:E0:0C:02:00:FD
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR        00:E0:0C:02:01:FD
+#define CONFIG_HAS_ETH2
+#define CONFIG_ETH2ADDR        00:E0:0C:02:02:FD
+#define CONFIG_HAS_ETH3
+#define CONFIG_ETH3ADDR        00:E0:0C:02:03:FD
+#endif
+
+#define CONFIG_IPADDR          192.168.1.254
+
+#define CONFIG_HOSTNAME                unknown
+#define CONFIG_ROOTPATH                /opt/nfsroot
+#define CONFIG_BOOTFILE                uImage
+#define CONFIG_UBOOTPATH       u-boot.bin      /* U-Boot image on TFTP server */
+
+#define CONFIG_SERVERIP                192.168.1.1
+#define CONFIG_GATEWAYIP       192.168.1.1
+#define CONFIG_NETMASK         255.255.255.0
+
+/* default location for tftp and bootm */
+#define CONFIG_LOADADDR                1000000
+
+#define CONFIG_BOOTDELAY 10    /* -1 disables auto-boot */
+#undef  CONFIG_BOOTARGS                /* the boot command will set bootargs */
+
+#define CONFIG_BAUDRATE        115200
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                               \
+ "netdev=eth0\0"                                               \
+ "uboot=" MK_STR(CONFIG_UBOOTPATH) "\0"                                \
+ "tftpflash=tftpboot $loadaddr $uboot; "                       \
+       "protect off " MK_STR(TEXT_BASE) " +$filesize; "        \
+       "erase " MK_STR(TEXT_BASE) " +$filesize; "              \
+       "cp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize; "      \
+       "protect on " MK_STR(TEXT_BASE) " +$filesize; "         \
+       "cmp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize\0"     \
+ "consoledev=ttyS0\0"                          \
+ "ramdiskaddr=2000000\0"                       \
+ "ramdiskfile=8536ds/ramdisk.uboot\0"          \
+ "fdtaddr=c00000\0"                            \
+ "fdtfile=8536ds/mpc8536ds.dtb\0"              \
+ "bdev=sda3\0"
+
+#define CONFIG_HDBOOT                          \
+ "setenv bootargs root=/dev/$bdev rw "         \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $loadaddr $bootfile;"                   \
+ "tftp $fdtaddr $fdtfile;"                     \
+ "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_NFSBOOTCOMMAND          \
+ "setenv bootargs root=/dev/nfs rw "   \
+ "nfsroot=$serverip:$rootpath "                \
+ "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND          \
+ "setenv bootargs root=/dev/ram rw "   \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $ramdiskaddr $ramdiskfile;"     \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_BOOTCOMMAND             CONFIG_HDBOOT
+
+#endif /* __CONFIG_H */
index 6351925d7bb5a5390304cd958b5373b7b735c354..74f860536eec17d99577d2cda93cdf76386ed0c2 100644 (file)
 #define CONFIG_PCI
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
-
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
-
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
 
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#undef CONFIG_FSL_DDR_INTERACTIVE
+
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
-/*
- * DDR Setup
- */
 #define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#if defined(CONFIG_SPD_EEPROM)
-    /*
-     * Determine DDR configuration from I2C interface.
-     */
-    #define SPD_EEPROM_ADDRESS 0x51            /* DDR DIMM */
-
-#else
-    /*
-     * Manually set up DDR parameters
-     */
-    #define CFG_SDRAM_SIZE     128             /* DDR is 128MB */
-    #define CFG_DDR_CS0_BNDS   0x00000007      /* 0-128MB */
-    #define CFG_DDR_CS0_CONFIG 0x80000002
-    #define CFG_DDR_TIMING_1   0x37344321
-    #define CFG_DDR_TIMING_2   0x00000800      /* P9-45,may need tuning */
-    #define CFG_DDR_CONTROL    0xc2000000      /* unbuffered,no DYN_PWR */
-    #define CFG_DDR_MODE       0x00000062      /* DLL,normal,seq,4/2.5 */
-    #define CFG_DDR_INTERVAL   0x05200100      /* autocharge,no open page */
-#endif
-
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
+
+/* These are used when DDR doesn't use SPD. */
+#define CFG_SDRAM_SIZE 128             /* DDR is 128MB */
+#define CFG_DDR_CS0_BNDS       0x00000007      /* 0-128MB */
+#define CFG_DDR_CS0_CONFIG     0x80000002
+#define CFG_DDR_TIMING_1       0x37344321
+#define CFG_DDR_TIMING_2       0x00000800      /* P9-45,may need tuning */
+#define CFG_DDR_CONTROL                0xc2000000      /* unbuffered,no DYN_PWR */
+#define CFG_DDR_MODE           0x00000062      /* DLL,normal,seq,4/2.5 */
+#define CFG_DDR_INTERVAL       0x05200100      /* autocharge,no open page */
 
 /*
  * SDRAM on the Local Bus
index b13c81c2e2d22f655f1df13c58b28b945c2ca214..1073e23bfa5c163a3e73efc39831e0a900d6b33f 100644 (file)
@@ -39,9 +39,6 @@
 #undef  CONFIG_PCI                         /* pci ethernet support     */
 #define CONFIG_TSEC_ENET                   /* tsec ethernet support  */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM                   /* Use SPD EEPROM for DDR setup */
-#undef  CONFIG_DDR_ECC                     /* only for ECC DDR module */
-#define CONFIG_DDR_DLL                      /* possible DLL fix needed */
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
@@ -86,8 +83,6 @@
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
 
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory  */
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 #define CFG_SDRAM_SIZE         256             /* DDR is now 256MB     */
 
 #if defined(CONFIG_RAM_AS_FLASH)
 #undef  CFG_RAMBOOT
 #endif
 
-#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+#define CONFIG_DDR_SPD
+#define CONFIG_DDR_DLL                      /* possible DLL fix needed */
+
+#undef  CONFIG_DDR_ECC                     /* only for ECC DDR module */
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
 
-/* Here some DDR setting should be added */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
 
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
 
 #undef CONFIG_CLOCKS_IN_MHZ
 
index d948d76a79798bb023bc046945dacba29e4ad6c7..29dff32ea75d493db45ace8038cbae4e7b60aa47 100644 (file)
 #define CONFIG_PCI
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#undef CONFIG_DDR_2T_TIMING            /* Sets the 2T timing bit */
-
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
@@ -59,8 +53,6 @@
  */
 #define CONFIG_ASSUME_AMD_FLASH
 
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
 #ifndef __ASSEMBLY__
 extern unsigned long get_clock_freq(void);
 #endif
@@ -85,13 +77,23 @@ extern unsigned long get_clock_freq(void);
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
 
-/*
- * DDR Setup
- */
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#undef CONFIG_FSL_DDR_INTERACTIVE
+
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+
 #define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
 
 /*
  * Make sure required options are set
@@ -102,7 +104,6 @@ extern unsigned long get_clock_freq(void);
 
 #undef CONFIG_CLOCKS_IN_MHZ
 
-
 /*
  * Local Bus Definitions
  */
@@ -317,6 +318,9 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_OF_BOARD_SETUP          1
 #define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
+#define CFG_64BIT_VSPRINTF     1
+#define CFG_64BIT_STRTOUL      1
+
 /*
  * I2C
  */
index 9a77b7bcbc73436f4eb1498d14ebc7a462f0765b..5738192032192d430dd02ac92b6d75155fdab8a2 100644 (file)
 
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
-#undef CONFIG_DDR_DLL
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
-
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
-
-#define CONFIG_DDR_ECC_CMD
 #define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
 
 /*
@@ -64,8 +55,6 @@
  */
 #define CONFIG_ASSUME_AMD_FLASH
 
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
 #ifndef __ASSEMBLY__
 extern unsigned long get_board_sys_clk(unsigned long dummy);
 #endif
@@ -101,17 +90,27 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CFG_PCIE2_ADDR         (CFG_CCSRBAR+0x9000)
 #define CFG_PCIE3_ADDR         (CFG_CCSRBAR+0xb000)
 
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+#define CONFIG_DDR_SPD
+
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
 
+/* I2C addresses of SPD EEPROMs */
 #define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
 
-/*
- * Make sure required options are set
- */
+/* Make sure required options are set */
 #ifndef CONFIG_SPD_EEPROM
 #error ("CONFIG_SPD_EEPROM is required")
 #endif
@@ -242,6 +241,9 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CONFIG_OF_BOARD_SETUP          1
 #define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
+#define CFG_64BIT_STRTOUL              1
+#define CFG_64BIT_VSPRINTF             1
+
 /* I2C */
 #define CONFIG_FSL_I2C         /* Use FSL common I2C driver */
 #define CONFIG_HARD_I2C                /* I2C with hardware support */
index 33c5c933e0f6adf6f30413e36106d7a4ee7b2b9c..ec0b4ffc660c77c9c7d6f30ce67193121b3595d8 100644 (file)
 
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#undef CONFIG_DDR_2T_TIMING            /* Sets the 2T timing bit */
-
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 #define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
-
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CONFIG_FSL_VIA
@@ -67,8 +59,6 @@
  */
 #define CONFIG_ASSUME_AMD_FLASH
 
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
 #ifndef __ASSEMBLY__
 extern unsigned long get_clock_freq(void);
 #endif
@@ -103,17 +93,27 @@ extern unsigned long get_clock_freq(void);
 #define CFG_PCI2_ADDR  (CFG_CCSRBAR+0x9000)
 #define CFG_PCIE1_ADDR (CFG_CCSRBAR+0xa000)
 
-/*
- * DDR Setup
- */
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
+
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
 #define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
 
-/*
- * Make sure required options are set
- */
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
+
+/* Make sure required options are set */
 #ifndef CONFIG_SPD_EEPROM
 #error ("CONFIG_SPD_EEPROM is required")
 #endif
@@ -342,6 +342,9 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_OF_BOARD_SETUP          1
 #define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
+#define CFG_64BIT_VSPRINTF     1
+#define CFG_64BIT_STRTOUL      1
+
 /*
  * I2C
  */
index 85c235c4eb06429fd4b99b1b80eb75fc4148ccab..c07a725f9b0a42c192010bc788f058e70239cab7 100644 (file)
 #define CONFIG_PCI
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#undef CONFIG_DDR_2T_TIMING            /* Sets the 2T timing bit */
-
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
-
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CONFIG_FSL_VIA
@@ -59,8 +52,6 @@
  */
 #define CONFIG_ASSUME_AMD_FLASH
 
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
 #ifndef __ASSEMBLY__
 extern unsigned long get_clock_freq(void);
 #endif
@@ -85,24 +76,31 @@ extern unsigned long get_clock_freq(void);
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
 
-/*
- * DDR Setup
- */
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#undef CONFIG_FSL_DDR_INTERACTIVE
+
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+
 #define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
 
-/*
- * Make sure required options are set
- */
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
+
+/* Make sure required options are set */
 #ifndef CONFIG_SPD_EEPROM
 #error ("CONFIG_SPD_EEPROM is required by MPC85555CDS")
 #endif
 
 #undef CONFIG_CLOCKS_IN_MHZ
 
-
 /*
  * Local Bus Definitions
  */
@@ -317,6 +315,9 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_OF_BOARD_SETUP          1
 #define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
+#define CFG_64BIT_VSPRINTF     1
+#define CFG_64BIT_STRTOUL      1
+
 /*
  * I2C
  */
index 3567d1ce357c9d8c989808e07ba4ae08effdc6e0..a8e7c0a416c7a6ab0c6ac99ad13835ef5e5df9da 100644 (file)
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #undef CONFIG_ETHER_ON_FCC             /* cpm FCC ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
-
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
-
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
 
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#undef CONFIG_FSL_DDR_INTERACTIVE
+
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
-/*
- * DDR Setup
- */
 #define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#if defined(CONFIG_SPD_EEPROM)
-    /*
-     * Determine DDR configuration from I2C interface.
-     */
-    #define SPD_EEPROM_ADDRESS 0x51            /* DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
 
-#else
-    /*
-     * Manually set up DDR parameters
-     */
-    #define CFG_SDRAM_SIZE     128             /* DDR is 128MB */
-    #define CFG_DDR_CS0_BNDS   0x00000007      /* 0-128MB */
-    #define CFG_DDR_CS0_CONFIG 0x80000002
-    #define CFG_DDR_TIMING_1   0x37344321
-    #define CFG_DDR_TIMING_2   0x00000800      /* P9-45,may need tuning */
-    #define CFG_DDR_CONTROL    0xc2000000      /* unbuffered,no DYN_PWR */
-    #define CFG_DDR_MODE       0x00000062      /* DLL,normal,seq,4/2.5 */
-    #define CFG_DDR_INTERVAL   0x05200100      /* autocharge,no open page */
-#endif
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
 
+/* These are used when DDR doesn't use SPD.  */
+#define CFG_SDRAM_SIZE 128             /* DDR is 128MB */
+#define CFG_DDR_CS0_BNDS       0x00000007      /* 0-128MB */
+#define CFG_DDR_CS0_CONFIG     0x80000002
+#define CFG_DDR_TIMING_1       0x37344321
+#define CFG_DDR_TIMING_2       0x00000800      /* P9-45,may need tuning */
+#define CFG_DDR_CONTROL                0xc2000000      /* unbuffered,no DYN_PWR */
+#define CFG_DDR_MODE           0x00000062      /* DLL,normal,seq,4/2.5 */
+#define CFG_DDR_INTERVAL       0x05200100      /* autocharge,no open page */
 
 /*
  * SDRAM on the Local Bus
 #define CONFIG_OF_BOARD_SETUP          1
 #define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
+#define CFG_64BIT_VSPRINTF     1
+#define CFG_64BIT_STRTOUL      1
+
 /*
  * I2C
  */
index a82d528dc06f9ae8d760e06062cbf88bd86bcc33..8aeaa293bb9d29b2e1ca3088e211d6ea5f8119ec 100644 (file)
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_QE                      /* Enable QE */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-/*#define CONFIG_DDR_2T_TIMING          Sets the 2T timing bit */
-
-/*#define CONFIG_DDR_ECC*/                     /* only for ECC DDR module */
-/*#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER*/  /* DDR controller or DMA? */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
-
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
@@ -58,8 +50,6 @@
  */
 #define CONFIG_ASSUME_AMD_FLASH
 
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
 #ifndef __ASSEMBLY__
 extern unsigned long get_clock_freq(void);
 #endif                                           /*Replace a call to get_clock_freq (after it is implemented)*/
@@ -95,24 +85,33 @@ extern unsigned long get_clock_freq(void);
 #define CFG_PCI1_ADDR           (CFG_CCSRBAR+0x8000)
 #define CFG_PCIE1_ADDR          (CFG_CCSRBAR+0xa000)
 
-/*
- * DDR Setup
- */
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
 #define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
 
-/*
- * Make sure required options are set
- */
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
+
+/* Make sure required options are set */
 #ifndef CONFIG_SPD_EEPROM
 #error ("CONFIG_SPD_EEPROM is required")
 #endif
 
 #undef CONFIG_CLOCKS_IN_MHZ
 
-
 /*
  * Local Bus Definitions
  */
@@ -302,6 +301,9 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_OF_BOARD_SETUP          1
 #define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
+#define CFG_64BIT_VSPRINTF     1
+#define CFG_64BIT_STRTOUL      1
+
 /*
  * I2C
  */
diff --git a/include/configs/MPC8572DS.h b/include/configs/MPC8572DS.h
new file mode 100644 (file)
index 0000000..b0094f3
--- /dev/null
@@ -0,0 +1,576 @@
+/*
+ * Copyright 2007-2008 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * mpc8572ds board configuration file
+ *
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE           1       /* BOOKE */
+#define CONFIG_E500            1       /* BOOKE e500 family */
+#define CONFIG_MPC85xx         1       /* MPC8540/60/55/41/48 */
+#define CONFIG_MPC8572         1
+#define CONFIG_MPC8572DS       1
+#define CONFIG_MP              1       /* support multiple processors */
+#define CONFIG_NUM_CPUS                2       /* Number of CPUs in the system */
+
+#define CONFIG_PCI             1       /* Enable PCI/PCIE */
+#define CONFIG_PCIE1           1       /* PCIE controler 1 (slot 1) */
+#define CONFIG_PCIE2           1       /* PCIE controler 2 (slot 2) */
+#define CONFIG_PCIE3           1       /* PCIE controler 3 (ULI bridge) */
+#define CONFIG_FSL_PCI_INIT    1       /* Use common FSL init code */
+#define CONFIG_FSL_PCIE_RESET  1       /* need PCIe reset errata */
+
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
+
+#define CONFIG_TSEC_ENET               /* tsec ethernet support */
+#define CONFIG_ENV_OVERWRITE
+
+/*
+ * When initializing flash, if we cannot find the manufacturer ID,
+ * assume this is the AMD flash associated with the CDS board.
+ * This allows booting from a promjet.
+ */
+#define CONFIG_ASSUME_AMD_FLASH
+
+#ifndef __ASSEMBLY__
+extern unsigned long get_board_sys_clk(unsigned long dummy);
+extern unsigned long get_board_ddr_clk(unsigned long dummy);
+#endif
+#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk(0) /* sysclk for MPC85xx */
+#define CONFIG_DDR_CLK_FREQ    get_board_ddr_clk(0) /* ddrclk for MPC85xx */
+#define CONFIG_ICS307_REFCLK_HZ        33333333  /* ICS307 clock chip ref freq */
+#define CONFIG_GET_CLK_FROM_ICS307       /* decode sysclk and ddrclk freq
+                                            from ICS307 instead of switches */
+
+/*
+ * These can be toggled for performance analysis, otherwise use default.
+ */
+#define CONFIG_L2_CACHE                        /* toggle L2 cache */
+#define CONFIG_BTB                     /* toggle branch predition */
+#define CONFIG_ADDR_STREAMING          /* toggle addr streaming */
+
+#define CONFIG_ENABLE_36BIT_PHYS       1
+
+#define CFG_MEMTEST_START      0x00000000      /* memtest works on */
+#define CFG_MEMTEST_END                0x7fffffff
+#define CONFIG_PANIC_HANG      /* do not reset board on panic */
+
+/*
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ */
+#define CFG_CCSRBAR_DEFAULT    0xff700000      /* CCSRBAR Default */
+#define CFG_CCSRBAR            0xffe00000      /* relocated CCSRBAR */
+#define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
+#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
+
+#define CFG_PCIE3_ADDR         (CFG_CCSRBAR+0x8000)
+#define CFG_PCIE2_ADDR         (CFG_CCSRBAR+0x9000)
+#define CFG_PCIE1_ADDR         (CFG_CCSRBAR+0xa000)
+
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+#define CONFIG_DDR_SPD
+#undef CONFIG_DDR_DLL
+
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+
+#define CONFIG_NUM_DDR_CONTROLLERS     2
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS1    0x51    /* CTLR 0 DIMM 0 */
+#define SPD_EEPROM_ADDRESS2    0x52    /* CTLR 1 DIMM 0 */
+
+/* These are used when DDR doesn't use SPD.  */
+#define CFG_SDRAM_SIZE         256             /* DDR is 256MB */
+#define CFG_DDR_CS0_BNDS       0x0000001F
+#define CFG_DDR_CS0_CONFIG     0x80010102      /* Enable, no interleaving */
+#define CFG_DDR_TIMING_3       0x00000000
+#define CFG_DDR_TIMING_0       0x00260802
+#define CFG_DDR_TIMING_1       0x3935d322
+#define CFG_DDR_TIMING_2       0x14904cc8
+#define CFG_DDR_MODE_1         0x00480432
+#define CFG_DDR_MODE_2         0x00000000
+#define CFG_DDR_INTERVAL       0x06180100
+#define CFG_DDR_DATA_INIT      0xdeadbeef
+#define CFG_DDR_CLK_CTRL       0x03800000
+#define CFG_DDR_OCD_CTRL       0x00000000
+#define CFG_DDR_OCD_STATUS     0x00000000
+#define CFG_DDR_CONTROL                0xC3008000      /* Type = DDR2 */
+#define CFG_DDR_CONTROL2       0x04400010
+
+#define CFG_DDR_ERR_INT_EN     0x0000000d
+#define CFG_DDR_ERR_DIS                0x00000000
+#define CFG_DDR_SBE            0x00010000
+
+/*
+ * FIXME: Not used in fixed_sdram function
+ */
+#define CFG_DDR_MODE           0x00000022
+#define CFG_DDR_CS1_BNDS       0x00000000
+#define CFG_DDR_CS2_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS3_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS4_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS5_BNDS       0x00000FFF      /* Not done */
+
+/*
+ * Make sure required options are set
+ */
+#ifndef CONFIG_SPD_EEPROM
+#error ("CONFIG_SPD_EEPROM is required")
+#endif
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+/*
+ * Memory map
+ *
+ * 0x0000_0000 0x7fff_ffff     DDR                     2G Cacheable
+ * 0x8000_0000 0xbfff_ffff     PCI Express Mem         1G non-cacheable
+ * 0xc000_0000 0xdfff_ffff     PCI                     512M non-cacheable
+ * 0xe100_0000 0xe3ff_ffff     PCI IO range            4M non-cacheable
+ *
+ * Localbus cacheable (TBD)
+ * 0xXXXX_XXXX 0xXXXX_XXXX     SRAM                    YZ M Cacheable
+ *
+ * Localbus non-cacheable
+ * 0xe000_0000 0xe80f_ffff     Promjet/free            128M non-cacheable
+ * 0xe800_0000 0xefff_ffff     FLASH                   128M non-cacheable
+ * 0xffdf_0000 0xffdf_7fff     PIXIS                   32K non-cacheable TLB0
+ * 0xffd0_0000 0xffd0_3fff     L1 for stack            16K Cacheable TLB0
+ * 0xffe0_0000 0xffef_ffff     CCSR                    1M non-cacheable
+ */
+
+/*
+ * Local Bus Definitions
+ */
+#define CFG_FLASH_BASE         0xe0000000      /* start of FLASH 128M */
+
+#define CFG_BR0_PRELIM         0xe8001001
+#define CFG_OR0_PRELIM         0xf8000ff7
+
+#define CFG_BR1_PRELIM         0xe0001001
+#define CFG_OR1_PRELIM         0xf8000ff7
+
+#define CFG_FLASH_BANKS_LIST   {CFG_FLASH_BASE + 0x8000000, CFG_FLASH_BASE}
+#define CFG_FLASH_QUIET_TEST
+#define CONFIG_FLASH_SHOW_PROGRESS 45 /* count down from 45/5: 9..1 */
+
+#define CFG_MAX_FLASH_BANKS    2               /* number of banks */
+#define CFG_MAX_FLASH_SECT     1024            /* sectors per device */
+#undef CFG_FLASH_CHECKSUM
+#define CFG_FLASH_ERASE_TOUT   60000           /* Flash Erase Timeout (ms) */
+#define CFG_FLASH_WRITE_TOUT   500             /* Flash Write Timeout (ms) */
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor */
+
+#define CONFIG_FLASH_CFI_DRIVER
+#define CFG_FLASH_CFI
+#define CFG_FLASH_EMPTY_INFO
+#define CFG_FLASH_AMD_CHECK_DQ7
+
+#define CONFIG_BOARD_EARLY_INIT_R      /* call board_early_init_r function */
+
+#define CONFIG_FSL_PIXIS       1       /* use common PIXIS code */
+#define PIXIS_BASE     0xffdf0000      /* PIXIS registers */
+
+#define CFG_BR3_PRELIM (PIXIS_BASE | 0x0801)   /* port size 8bit */
+#define CFG_OR3_PRELIM         0xffffeff7      /* 32KB but only 4k mapped */
+
+#define PIXIS_ID               0x0     /* Board ID at offset 0 */
+#define PIXIS_VER              0x1     /* Board version at offset 1 */
+#define PIXIS_PVER             0x2     /* PIXIS FPGA version at offset 2 */
+#define PIXIS_CSR              0x3     /* PIXIS General control/status register */
+#define PIXIS_RST              0x4     /* PIXIS Reset Control register */
+#define PIXIS_PWR              0x5     /* PIXIS Power status register */
+#define PIXIS_AUX              0x6     /* Auxiliary 1 register */
+#define PIXIS_SPD              0x7     /* Register for SYSCLK speed */
+#define PIXIS_AUX2             0x8     /* Auxiliary 2 register */
+#define PIXIS_VCTL             0x10    /* VELA Control Register */
+#define PIXIS_VSTAT            0x11    /* VELA Status Register */
+#define PIXIS_VCFGEN0          0x12    /* VELA Config Enable 0 */
+#define PIXIS_VCFGEN1          0x13    /* VELA Config Enable 1 */
+#define PIXIS_VCORE0           0x14    /* VELA VCORE0 Register */
+#define PIXIS_VBOOT            0x16    /* VELA VBOOT Register */
+#define PIXIS_VSPEED0          0x17    /* VELA VSpeed 0 */
+#define PIXIS_VSPEED1          0x18    /* VELA VSpeed 1 */
+#define PIXIS_VSPEED2          0x19    /* VELA VSpeed 2 */
+#define PIXIS_VSYSCLK0         0x1C    /* VELA SYSCLK0 Register */
+#define PIXIS_VSYSCLK1         0x1D    /* VELA SYSCLK1 Register */
+#define PIXIS_VSYSCLK2         0x1E    /* VELA SYSCLK2 Register */
+#define PIXIS_VDDRCLK0         0x1F    /* VELA DDRCLK0 Register */
+#define PIXIS_VDDRCLK1         0x20    /* VELA DDRCLK1 Register */
+#define PIXIS_VDDRCLK2         0x21    /* VELA DDRCLK2 Register */
+#define PIXIS_VWATCH           0x24    /* Watchdog Register */
+#define PIXIS_LED              0x25    /* LED Register */
+
+/* old pixis referenced names */
+#define PIXIS_VCLKH            0x19    /* VELA VCLKH register */
+#define PIXIS_VCLKL            0x1A    /* VELA VCLKL register */
+#define CFG_PIXIS_VBOOT_MASK   0xc0
+
+/* define to use L1 as initial stack */
+#define CONFIG_L1_INIT_RAM
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR      0xffd00000      /* Initial L1 address */
+#define CFG_INIT_RAM_END       0x00004000      /* End of used area in RAM */
+
+#define CFG_GBL_DATA_SIZE      128     /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+#define CFG_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (1024 * 1024)   /* Reserved for malloc */
+
+/* Serial Port - controlled on board with jumper J8
+ * open - index 2
+ * shorted - index 1
+ */
+#define CONFIG_CONS_INDEX      1
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE   1
+#define CFG_NS16550_CLK                get_bus_freq(0)
+
+#define CFG_BAUDRATE_TABLE     \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
+
+#define CFG_NS16550_COM1       (CFG_CCSRBAR+0x4500)
+#define CFG_NS16550_COM2       (CFG_CCSRBAR+0x4600)
+
+/* Use the HUSH parser */
+#define CFG_HUSH_PARSER
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+#endif
+
+/*
+ * Pass open firmware flat tree
+ */
+#define CONFIG_OF_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
+
+#define CFG_64BIT_VSPRINTF     1
+#define CFG_64BIT_STRTOUL      1
+
+/* new uImage format support */
+#define CONFIG_FIT             1
+#define CONFIG_FIT_VERBOSE     1 /* enable fit_format_{error,warning}() */
+
+/* I2C */
+#define CONFIG_FSL_I2C         /* Use FSL common I2C driver */
+#define CONFIG_HARD_I2C                /* I2C with hardware support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
+#define CFG_I2C_EEPROM_ADDR    0x57
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs */
+#define CFG_I2C_OFFSET         0x3100
+
+/*
+ * General PCI
+ * Memory space is mapped 1-1, but I/O space must start from 0.
+ */
+
+/* PCI view of System Memory */
+#define CFG_PCI_MEMORY_BUS     0x00000000
+#define CFG_PCI_MEMORY_PHYS    0x00000000
+#define CFG_PCI_MEMORY_SIZE    0x80000000
+
+/* controller 3, direct to uli, tgtid 3, Base address 8000 */
+#define CFG_PCIE3_MEM_BASE     0x80000000
+#define CFG_PCIE3_MEM_PHYS     CFG_PCIE3_MEM_BASE
+#define CFG_PCIE3_MEM_SIZE     0x20000000      /* 512M */
+#define CFG_PCIE3_IO_BASE      0x00000000
+#define CFG_PCIE3_IO_PHYS      0xffc00000
+#define CFG_PCIE3_IO_SIZE      0x00010000      /* 64k */
+
+/* controller 2, Slot 2, tgtid 2, Base address 9000 */
+#define CFG_PCIE2_MEM_BASE     0xa0000000
+#define CFG_PCIE2_MEM_PHYS     CFG_PCIE2_MEM_BASE
+#define CFG_PCIE2_MEM_SIZE     0x20000000      /* 512M */
+#define CFG_PCIE2_IO_BASE      0x00000000
+#define CFG_PCIE2_IO_PHYS      0xffc10000
+#define CFG_PCIE2_IO_SIZE      0x00010000      /* 64k */
+
+/* controller 1, Slot 1, tgtid 1, Base address a000 */
+#define CFG_PCIE1_MEM_BASE     0xc0000000
+#define CFG_PCIE1_MEM_PHYS     CFG_PCIE1_MEM_BASE
+#define CFG_PCIE1_MEM_SIZE     0x20000000      /* 512M */
+#define CFG_PCIE1_IO_BASE      0x00000000
+#define CFG_PCIE1_IO_PHYS      0xffc20000
+#define CFG_PCIE1_IO_SIZE      0x00010000      /* 64k */
+
+#if defined(CONFIG_PCI)
+
+/*PCIE video card used*/
+#define VIDEO_IO_OFFSET                CFG_PCIE1_IO_PHYS
+
+/* video */
+#define CONFIG_VIDEO
+
+#if defined(CONFIG_VIDEO)
+#define CONFIG_BIOSEMU
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_SW_CURSOR
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_ATI_RADEON_FB
+#define CONFIG_VIDEO_LOGO
+/*#define CONFIG_CONSOLE_CURSOR*/
+#define CFG_ISA_IO_BASE_ADDRESS VIDEO_IO_OFFSET
+#endif
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_TULIP
+#undef CONFIG_RTL8139
+
+#ifdef CONFIG_RTL8139
+/* This macro is used by RTL8139 but not defined in PPC architecture */
+#define KSEG1ADDR(x)           (x)
+#define _IO_BASE       0x00000000
+#endif
+
+#ifndef CONFIG_PCI_PNP
+       #define PCI_ENET0_IOADDR        CFG_PCIE3_IO_BASE
+       #define PCI_ENET0_MEMADDR       CFG_PCIE3_IO_BASE
+       #define PCI_IDSEL_NUMBER        0x11    /* IDSEL = AD11 */
+#endif
+
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
+#define CONFIG_DOS_PARTITION
+#define CONFIG_SCSI_AHCI
+
+#ifdef CONFIG_SCSI_AHCI
+#define CONFIG_SATA_ULI5288
+#define CFG_SCSI_MAX_SCSI_ID   4
+#define CFG_SCSI_MAX_LUN       1
+#define CFG_SCSI_MAX_DEVICE    (CFG_SCSI_MAX_SCSI_ID * CFG_SCSI_MAX_LUN)
+#define CFG_SCSI_MAXDEVICE     CFG_SCSI_MAX_DEVICE
+#endif /* SCSI */
+
+#endif /* CONFIG_PCI */
+
+
+#if defined(CONFIG_TSEC_ENET)
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI       1
+#endif
+
+#define CONFIG_MII             1       /* MII PHY management */
+#define CONFIG_MII_DEFAULT_TSEC        1       /* Allow unregistered phys */
+#define CONFIG_TSEC1   1
+#define CONFIG_TSEC1_NAME      "eTSEC1"
+#define CONFIG_TSEC2   1
+#define CONFIG_TSEC2_NAME      "eTSEC2"
+#define CONFIG_TSEC3   1
+#define CONFIG_TSEC3_NAME      "eTSEC3"
+#define CONFIG_TSEC4   1
+#define CONFIG_TSEC4_NAME      "eTSEC4"
+
+#define TSEC1_PHY_ADDR         0
+#define TSEC2_PHY_ADDR         1
+#define TSEC3_PHY_ADDR         2
+#define TSEC4_PHY_ADDR         3
+
+#define TSEC1_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC2_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC3_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC4_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+#define TSEC3_PHYIDX           0
+#define TSEC4_PHYIDX           0
+
+#define CONFIG_ETHPRIME                "eTSEC1"
+
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+#endif /* CONFIG_TSEC_ENET */
+
+/*
+ * Environment
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#if CFG_MONITOR_BASE > 0xfff80000
+#define CFG_ENV_ADDR           0xfff80000
+#else
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE + 0x70000)
+#endif
+#define CFG_ENV_SIZE           0x2000
+#define CFG_ENV_SECT_SIZE      0x20000 /* 128K (one sector) */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change */
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_ELF
+
+#if defined(CONFIG_PCI)
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_BEDBUG
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_SCSI
+#define CONFIG_CMD_EXT2
+#endif
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory */
+#define CONFIG_CMDLINE_EDITING         /* Command-line editing */
+#define CFG_LOAD_ADDR  0x2000000       /* default load address */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE     1024            /* Console I/O Buffer Size */
+#else
+#define CFG_CBSIZE     256             /* Console I/O Buffer Size */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_HZ         1000            /* decrementer freq: 1ms ticks */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+
+/* The mac addresses for all ethernet interface */
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_HAS_ETH0
+#define CONFIG_ETHADDR 00:E0:0C:02:00:FD
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR        00:E0:0C:02:01:FD
+#define CONFIG_HAS_ETH2
+#define CONFIG_ETH2ADDR        00:E0:0C:02:02:FD
+#define CONFIG_HAS_ETH3
+#define CONFIG_ETH3ADDR        00:E0:0C:02:03:FD
+#endif
+
+#define CONFIG_IPADDR          192.168.1.254
+
+#define CONFIG_HOSTNAME                unknown
+#define CONFIG_ROOTPATH                /opt/nfsroot
+#define CONFIG_BOOTFILE                uImage
+#define CONFIG_UBOOTPATH       u-boot.bin      /* U-Boot image on TFTP server */
+
+#define CONFIG_SERVERIP                192.168.1.1
+#define CONFIG_GATEWAYIP       192.168.1.1
+#define CONFIG_NETMASK         255.255.255.0
+
+/* default location for tftp and bootm */
+#define CONFIG_LOADADDR                1000000
+
+#define CONFIG_BOOTDELAY 10    /* -1 disables auto-boot */
+#undef  CONFIG_BOOTARGS                /* the boot command will set bootargs */
+
+#define CONFIG_BAUDRATE        115200
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                               \
+ "netdev=eth0\0"                                               \
+ "uboot=" MK_STR(CONFIG_UBOOTPATH) "\0"                                \
+ "tftpflash=tftpboot $loadaddr $uboot; "                       \
+       "protect off " MK_STR(TEXT_BASE) " +$filesize; "        \
+       "erase " MK_STR(TEXT_BASE) " +$filesize; "              \
+       "cp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize; "      \
+       "protect on " MK_STR(TEXT_BASE) " +$filesize; "         \
+       "cmp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize\0"     \
+ "consoledev=ttyS0\0"                          \
+ "ramdiskaddr=2000000\0"                       \
+ "ramdiskfile=8572ds/ramdisk.uboot\0"          \
+ "fdtaddr=c00000\0"                            \
+ "fdtfile=8572ds/mpc8572ds.dtb\0"              \
+ "bdev=sda3\0"
+
+#define CONFIG_HDBOOT                          \
+ "setenv bootargs root=/dev/$bdev rw "         \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $loadaddr $bootfile;"                   \
+ "tftp $fdtaddr $fdtfile;"                     \
+ "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_NFSBOOTCOMMAND          \
+ "setenv bootargs root=/dev/nfs rw "   \
+ "nfsroot=$serverip:$rootpath "                \
+ "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND          \
+ "setenv bootargs root=/dev/ram rw "   \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $ramdiskaddr $ramdiskfile;"     \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_BOOTCOMMAND             CONFIG_HDBOOT
+
+#endif /* __CONFIG_H */
index f2c11b0bb086eea9574dde2ebdb040746fac0511..aa6095fa0f91b4e37dd7be4c7b6b2ed37845fb3c 100644 (file)
 #define CONFIG_PCI
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#undef CONFIG_SPD_EEPROM               /* do not use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
-
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_MEM_INIT_VALUE          0xDEADBEEF
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
 
 
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
-
-#if defined(CONFIG_SPD_EEPROM)
-    /*
-     * Determine DDR configuration from I2C interface.
-     */
-    #define SPD_EEPROM_ADDRESS 0x58            /* DDR DIMM */
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#undef CONFIG_SPD_EEPROM               /* Use SPD EEPROM for DDR setup */
+#undef CONFIG_DDR_SPD
+#define CONFIG_DDR_DLL                      /* possible DLL fix needed */
+#define CONFIG_DDR_ECC                     /* only for ECC DDR module */
 
-#else
-    /*
-     * Manually set up DDR parameters
-     */
-    #define CFG_SDRAM_SIZE     256             /* DDR is 256 MB */
-    #define CFG_DDR_CS0_BNDS   0x0000000f      /* 0-256MB */
-    #define CFG_DDR_CS0_CONFIG 0x80000102
-    #define CFG_DDR_TIMING_1   0x47444321
-    #define CFG_DDR_TIMING_2   0x00000800      /* P9-45,may need tuning */
-    #define CFG_DDR_CONTROL    0xc2008000      /* unbuffered,no DYN_PWR */
-    #define CFG_DDR_MODE       0x00000062      /* DLL,normal,seq,4/2.5 */
-    #define CFG_DDR_INTERVAL   0x045b0100      /* autocharge,no open page */
-#endif
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
 
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x58    /* CTLR 0 DIMM 0 */
+
+/* Manually set up DDR parameters */
+#define CFG_SDRAM_SIZE 256             /* DDR is 256 MB */
+#define CFG_DDR_CS0_BNDS       0x0000000f      /* 0-256MB */
+#define CFG_DDR_CS0_CONFIG     0x80000102
+#define CFG_DDR_TIMING_1       0x47444321
+#define CFG_DDR_TIMING_2       0x00000800      /* P9-45,may need tuning */
+#define CFG_DDR_CONTROL        0xc2008000      /* unbuffered,no DYN_PWR */
+#define CFG_DDR_MODE   0x00000062      /* DLL,normal,seq,4/2.5 */
+#define CFG_DDR_INTERVAL       0x045b0100      /* autocharge,no open page */
 
 /*
  * SDRAM on the Local Bus
index b2cf06000fda0a3ae53d2680934bdacbe8dfb096..244f09aa95f86e7e194b637f08ec6acda94ba305 100644 (file)
 #define CONFIG_PCI
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#undef  CONFIG_SPD_EEPROM              /* do not use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
-#define CONFIG_MEM_INIT_VALUE          0xDEADBEEF
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
 
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#undef CONFIG_SPD_EEPROM               /* Use SPD EEPROM for DDR setup */
+#undef CONFIG_DDR_SPD
+#define CONFIG_DDR_DLL                      /* possible DLL fix needed */
+#define CONFIG_DDR_ECC                     /* only for ECC DDR module */
 
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
-
-#if defined(CONFIG_SPD_EEPROM)
-    /*
-     * Determine DDR configuration from I2C interface.
-     */
-    #define SPD_EEPROM_ADDRESS 0x58            /* DDR DIMM */
-
-#else
-    /*
-     * Manually set up DDR parameters
-     */
-    #define CFG_SDRAM_SIZE     256             /* DDR is 256 MB */
-    #define CFG_DDR_CS0_BNDS   0x0000000f      /* 0-256MB */
-    #define CFG_DDR_CS0_CONFIG 0x80000102
-    #define CFG_DDR_TIMING_1   0x47444321
-    #define CFG_DDR_TIMING_2   0x00000800      /* P9-45,may need tuning */
-    #define CFG_DDR_CONTROL    0xc2008000      /* unbuffered,no DYN_PWR */
-    #define CFG_DDR_MODE       0x00000062      /* DLL,normal,seq,4/2.5 */
-    #define CFG_DDR_INTERVAL   0x045b0100      /* autocharge,no open page */
-#endif
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
 
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x58    /* CTLR 0 DIMM 0 */
+
+/* Manually set up DDR parameters */
+#define CFG_SDRAM_SIZE 256             /* DDR is 256 MB */
+#define CFG_DDR_CS0_BNDS       0x0000000f      /* 0-256MB */
+#define CFG_DDR_CS0_CONFIG     0x80000102
+#define CFG_DDR_TIMING_1       0x47444321
+#define CFG_DDR_TIMING_2       0x00000800      /* P9-45,may need tuning */
+#define CFG_DDR_CONTROL        0xc2008000      /* unbuffered,no DYN_PWR */
+#define CFG_DDR_MODE   0x00000062      /* DLL,normal,seq,4/2.5 */
+#define CFG_DDR_INTERVAL       0x045b0100      /* autocharge,no open page */
 
 /*
  * SDRAM on the Local Bus
index 6033d93dd5493d1c9a5834afd9edab9c08c56d29..93509ee087384bd7d7578b751da9efe93a9715c3 100644 (file)
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
 
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory  */
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 #define CFG_SDRAM_SIZE         512             /* DDR is 512MB */
-#define SPD_EEPROM_ADDRESS     0x55            /*  DDR DIMM */
 
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#undef CONFIG_FSL_DDR_INTERACTIVE
 #undef  CONFIG_DDR_ECC                         /* only for ECC DDR module      */
 #undef  CONFIG_SPD_EEPROM                      /* Use SPD EEPROM for DDR setup */
+#undef  CONFIG_DDR_SPD
 
 #if defined(CONFIG_MPC85xx_REV1)
   #define CONFIG_DDR_DLL                       /* possible DLL fix needed      */
 #endif
 
+#undef  CONFIG_DDR_ECC                     /* only for ECC DDR module */
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x55    /* CTLR 0 DIMM 0 */
+
 #undef CONFIG_CLOCKS_IN_MHZ
 
 #if defined(CONFIG_RAM_AS_FLASH)
index d84554e37dc73aa6e3d5cb8bc74775e1459b4648..5e1cf956f1bb20c99d181098eb3bfd563d66e473 100644 (file)
 #define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory */
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
 #if defined(CONFIG_TQM8540) || defined(CONFIG_TQM8560)
 /* TQM8540 & 8560 need DLL-override */
 #define CONFIG_DDR_DLL                         /* DLL fix needed       */
index b4238e566f30d460aa64d109941cb7ba6faa9412..9ef0bfdd86f016bd0ce0f15e15ecdc2acbf7292a 100644 (file)
 
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#undef CONFIG_SPD_EEPROM               /* Use SPD EEPROM for DDR setup*/
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 
-#undef CONFIG_DDR_ECC                  /* only for ECC DDR module */
-#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
-#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 #define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
 #define CONFIG_SYS_CLK_FREQ    66000000 /* SBC8548 default SYSCLK */
 
 /*
 #define CFG_PCI2_ADDR  (CFG_CCSRBAR+0x9000)
 #define CFG_PCIE1_ADDR (CFG_CCSRBAR+0xa000)
 
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#undef CONFIG_SPD_EEPROM               /* Use SPD EEPROM for DDR setup */
+#undef CONFIG_DDR_SPD
+#undef CONFIG_DDR_ECC                  /* only for ECC DDR module */
+
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
 
-#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
 
 /*
  * Make sure required options are set
index b244eef950c1c9ff080d487b2f7e866b5ffe37a5..99d328c7557efce126fc433ac649537772065969 100644 (file)
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
 
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory  */
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 #define CFG_SDRAM_SIZE         512             /* DDR is 512MB */
-#define SPD_EEPROM_ADDRESS     0x55            /*  DDR DIMM */
 
-#undef  CONFIG_DDR_ECC                 /* only for ECC DDR module      */
-#undef  CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#undef  CONFIG_DDR_ECC                         /* only for ECC DDR module      */
+#undef  CONFIG_SPD_EEPROM                      /* Use SPD EEPROM for DDR setup */
+#undef  CONFIG_DDR_SPD
 
 #if defined(CONFIG_MPC85xx_REV1)
-  #define CONFIG_DDR_DLL               /* possible DLL fix needed      */
+  #define CONFIG_DDR_DLL                       /* possible DLL fix needed      */
 #endif
 
+#undef  CONFIG_DDR_ECC                     /* only for ECC DDR module */
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x55    /* CTLR 0 DIMM 0 */
+
 #undef CONFIG_CLOCKS_IN_MHZ
 
 #if defined(CONFIG_RAM_AS_FLASH)
index 8a649425b4a237c750ede5bddfbdd3fcfe7f39cb..15abec199dfec32711042ab8a5facf063469b88e 100644 (file)
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
 
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory */
+/* DDR Setup */
+#define CONFIG_FSL_DDR2
+#undef CONFIG_FSL_DDR_INTERACTIVE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+#define CONFIG_DDR_SPD
+
+#undef CONFIG_ECC_INIT_VIA_DDRCONTROLLER       /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE  0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x51    /* CTLR 0 DIMM 0 */
 
 #define CONFIG_DDR_DEFAULT_CL  30              /* CAS latency 3        */
 
 #define CFG_DDR_CLK_CONTROL            0x03800000
 #define CFG_SDRAM_SIZE                 256 /* in Megs */
 
-#define CONFIG_SPD_EEPROM      1       /* Use SPD EEPROM for DDR setup*/
-#define SPD_EEPROM_ADDRESS     0x50            /* DDR DIMM */
-#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
-
-/*
- * Flash on the Local Bus
- */
 /*
  * Flash on the LocalBus
  */
index 6e8213d72a5ed7cdfbeec57996569f7a9fd6dad8..ea79de71f36bc9fbffc0f29a728ab5e9269dfcba 100644 (file)
 #define CONFIG_TSEC_ENET               /* tsec ethernet support*/
 #undef  CONFIG_ETHER_ON_FCC             /* cpm FCC ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM               /* Use SPD EEPROM for DDR setup */
-#undef  CONFIG_DDR_ECC                 /* only for ECC DDR module */
-#define CONFIG_DDR_DLL                  /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
 
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#undef CONFIG_FSL_DDR_INTERACTIVE
 
-/*
- * DDR Setup
- */
+#undef  CONFIG_DDR_ECC                 /* only for ECC DDR module */
+#define CONFIG_DDR_DLL                  /* possible DLL fix needed */
+#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 
-/*
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory  */
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#define SPD_EEPROM_ADDRESS     0x54            /*  DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x54    /* CTLR 0 DIMM 0 */
 
 #undef CONFIG_CLOCKS_IN_MHZ
 
index 4f1c1563553d462b013ce73494f9ef851c65a2b5..ac349df297f4e6d34a3cd055229c03bbbc1a23d5 100644 (file)
 #define CONFIG_TSEC_ENET               /* tsec ethernet support*/
 #undef CONFIG_ETHER_ON_FCC             /* cpm FCC ethernet support */
 #define CONFIG_ENV_OVERWRITE
-#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
-#undef CONFIG_DDR_ECC                  /* only for ECC DDR module */
-#undef CONFIG_DDR_DLL                  /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 
 #define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CFG_CCSRBAR_PHYS       CFG_CCSRBAR     /* physical addr of CCSRBAR */
 #define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
 
+/* DDR Setup */
+#define CONFIG_FSL_DDR1
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_SPD
+#undef CONFIG_FSL_DDR_INTERACTIVE
 
-/*
- * DDR Setup
- */
+#undef CONFIG_DDR_ECC                  /* only for ECC DDR module */
+#undef CONFIG_DDR_DLL                  /* possible DLL fix needed */
+#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 
-/*
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory  */
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
 #define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
 
-#define SPD_EEPROM_ADDRESS     0x54            /*  DDR DIMM */
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   (2 * CONFIG_DIMM_SLOTS_PER_CTLR)
+
+/* I2C addresses of SPD EEPROMs */
+#define SPD_EEPROM_ADDRESS     0x54    /* CTLR 0 DIMM 0 */
 
 #undef CONFIG_CLOCKS_IN_MHZ
 
index 165456bc8ccb6976cd42d34a9f7aff31e5d6d1f2..ae642b1c4ae360d77c20c6a1006d15a130ec61d9 100644 (file)
 #define PCI_DEVICE_ID_MICROGATE_SCA    0x0030
 
 #define PCI_VENDOR_ID_FREESCALE                0x1957
+#define PCI_DEVICE_ID_MPC8536E         0x0050
+#define PCI_DEVICE_ID_MPC8536          0x0051
 #define PCI_DEVICE_ID_MPC8548E         0x0012
 #define PCI_DEVICE_ID_MPC8548          0x0013
 #define PCI_DEVICE_ID_MPC8543E         0x0014
index 5121caa51baf13253905e90ed99e56102d7b01a0..64552ac2a64ce125a62e8d98a33c545a9ce85c76 100644 (file)
@@ -969,6 +969,9 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
                        return;
                }
                break;
+       case BOUND:
+               /* DHCP client bound to address */
+               break;
        default:
                puts ("DHCP: INVALID STATE\n");
                break;
index 320cc3bd3025f12897b91b3016d57321d2378998..c2f011c8c69b33900cc39fda0ca08688b4806566 100644 (file)
@@ -60,7 +60,7 @@ extern ulong  BootpID;                /* ID of cur BOOTP request              */
 extern char    BootFile[128];          /* Boot file name                       */
 extern int     BootpTry;
 #ifdef CONFIG_BOOTP_RANDOM_DELAY
-ulong          seed1, seed2;           /* seed for random BOOTP delay          */
+extern ulong   seed1, seed2;           /* seed for random BOOTP delay          */
 #endif
 
 
index 8e83b66c0a619bf316d6607a1f3ac833ef4e0fb2..4e508a0f91b72ffee374c4326f843a1ce993f468 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -63,15 +63,9 @@ extern int ppc_4xx_eth_initialize(bd_t *);
 extern int rtl8139_initialize(bd_t*);
 extern int rtl8169_initialize(bd_t*);
 extern int scc_initialize(bd_t*);
-extern int skge_initialize(bd_t*);
 extern int tsi108_eth_initialize(bd_t*);
-extern int uli526x_initialize(bd_t *);
 extern int npe_initialize(bd_t *);
 extern int uec_initialize(int);
-extern int bfin_EMAC_initialize(bd_t *);
-extern int greth_initialize(bd_t *);
-extern int mcffec_initialize(bd_t*);
-extern int mcdmafec_initialize(bd_t*);
 extern int at91sam9_eth_initialize(bd_t *);
 
 #ifdef CONFIG_API
@@ -205,9 +199,6 @@ int eth_initialize(bd_t *bis)
 #if defined(CONFIG_MPC8220_FEC)
        mpc8220_fec_initialize(bis);
 #endif
-#if defined(CONFIG_SK98)
-       skge_initialize(bis);
-#endif
 #if defined(CONFIG_UEC_ETH1)
        uec_initialize(0);
 #endif
@@ -257,27 +248,12 @@ int eth_initialize(bd_t *bis)
 #if defined(CONFIG_TSI108_ETH)
        tsi108_eth_initialize(bis);
 #endif
-#if defined(CONFIG_ULI526X)
-       uli526x_initialize(bis);
-#endif
 #if defined(CONFIG_RTL8139)
        rtl8139_initialize(bis);
 #endif
 #if defined(CONFIG_RTL8169)
        rtl8169_initialize(bis);
 #endif
-#if defined(CONFIG_BF537)
-       bfin_EMAC_initialize(bis);
-#endif
-#if defined(CONFIG_GRETH)
-       greth_initialize(bis);
-#endif
-#if defined(CONFIG_MCFFEC)
-       mcffec_initialize(bis);
-#endif
-#if defined(CONFIG_FSLDMAFEC)
-       mcdmafec_initialize(bis);
-#endif
 #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
     defined(CONFIG_AT91SAM9263)
        at91sam9_eth_initialize(bis);