diff options
58 files changed, 3564 insertions, 2956 deletions
| @@ -399,6 +399,11 @@ N: Stelian Pop  E: stelian.pop@leadtechdesign.com  D: Atmel AT91CAP9ADK support +N: Ricardo Ribalda Delgado +E: ricardo.ribalda@uam.es +D: PPC440x5 (Virtex5), ML507 Board, eeprom_simul, adt7460 +W: http://www.ii.uam.es/~rribalda +  N: Stefan Roese  E: sr@denx.de  D: AMCC PPC4xx Support diff --git a/MAINTAINERS b/MAINTAINERS index 777d14186..7efef6a31 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -315,6 +315,10 @@ Daniel Poirot <dan.poirot@windriver.com>  	sbc8240		MPC8240  	sbc405		PPC405GP +Ricardo Ribalda <ricardo.ribalda@uam.es> + +	ml507 		PPC440x5 +  Stefan Roese <sr@denx.de>  	P3M7448		MPC7448 @@ -424,6 +428,9 @@ John Zhan <zhanz@sinovee.com>  	svm_sc8xx	MPC8xx +Feng Kan <fkan@amcc.com> + +	redwood			PPC4xx  -------------------------------------------------------------------------  Unknown / orphaned boards: @@ -209,6 +209,8 @@ LIST_4xx="		\  	MIP405T		\  	ML2		\  	ml300		\ +	ml507		\ +	ml507_flash	\  	ocotea		\  	OCRTC		\  	ORSG		\ @@ -222,6 +224,7 @@ LIST_4xx="		\  	PPChameleonEVB	\  	quad100hd	\  	rainier		\ +	redwood		\  	sbc405		\  	sc3		\  	sequoia		\ @@ -1348,6 +1348,17 @@ ML2_config:	unconfig  ml300_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ml300 xilinx +ml507_flash_config:	unconfig +	@mkdir -p $(obj)include $(obj)board/xilinx/ml507 +	@cp $(obj)board/xilinx/ml507/u-boot-rom.lds  $(obj)board/xilinx/ml507/u-boot.lds +	@echo "TEXT_BASE = 0xFE360000" > $(obj)board/xilinx/ml507/config.tmp +	@$(MKCONFIG) $(@:_flash_config=) ppc ppc4xx ml507 xilinx + +ml507_config:	unconfig +	@mkdir -p $(obj)include $(obj)board/xilinx/ml507 +	@cp $(obj)board/xilinx/ml507/u-boot-ram.lds  $(obj)board/xilinx/ml507/u-boot.lds +	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ml507 xilinx +  ocotea_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ocotea amcc @@ -1409,6 +1420,9 @@ PPChameleonEVB_HI_33_config:	unconfig  quad100hd_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx quad100hd +redwood_config: unconfig +	@$(MKCONFIG) $(@:_config=) ppc ppc4xx redwood amcc +  sbc405_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx sbc405 diff --git a/board/amcc/katmai/katmai.c b/board/amcc/katmai/katmai.c index f2bed5cd8..08d89d779 100644 --- a/board/amcc/katmai/katmai.c +++ b/board/amcc/katmai/katmai.c @@ -349,7 +349,7 @@ int is_pci_host(struct pci_controller *hose)  	return 1;  } -int katmai_pcie_card_present(int port) +static int katmai_pcie_card_present(int port)  {  	u32 val; @@ -437,76 +437,6 @@ void pcie_setup_hoses(int busno)  }  #endif	/* defined(CONFIG_PCI) */ -int misc_init_f (void) -{ -	uint reg; -#if defined(CONFIG_STRESS) -	uint i ; -	uint disp; -#endif - -	/* minimal init for PCIe */ -#if 0 /* test-only: test endpoint at some time, for now rootpoint only */ -	/* pci express 0 Endpoint Mode */ -	mfsdr(SDR0_PE0DLPSET, reg); -	reg &= (~0x00400000); -	mtsdr(SDR0_PE0DLPSET, reg); -#else -	/* pci express 0 Rootpoint  Mode */ -	mfsdr(SDR0_PE0DLPSET, reg); -	reg |= 0x00400000; -	mtsdr(SDR0_PE0DLPSET, reg); -#endif -	/* pci express 1 Rootpoint  Mode */ -	mfsdr(SDR0_PE1DLPSET, reg); -	reg |= 0x00400000; -	mtsdr(SDR0_PE1DLPSET, reg); -	/* pci express 2 Rootpoint  Mode */ -	mfsdr(SDR0_PE2DLPSET, reg); -	reg |= 0x00400000; -	mtsdr(SDR0_PE2DLPSET, reg); - -#if defined(CONFIG_STRESS) -	/* -	 * All this setting done by linux only needed by stress an charac. test -	 * procedure -	 * PCIe 1 Rootpoint PCIe2 Endpoint -	 * PCIe 0 FIR Pre-emphasis Filter Coefficients & Transmit Driver Power Level -	 */ -	for (i=0,disp=0; i<8; i++,disp+=3) { -		mfsdr(SDR0_PE0HSSSET1L0+disp, reg); -		reg |= 0x33000000; -		mtsdr(SDR0_PE0HSSSET1L0+disp, reg); -	} - -	/*PCIe 1 FIR Pre-emphasis Filter Coefficients & Transmit Driver Power Level */ -	for (i=0,disp=0; i<4; i++,disp+=3) { -		mfsdr(SDR0_PE1HSSSET1L0+disp, reg); -		reg |= 0x33000000; -		mtsdr(SDR0_PE1HSSSET1L0+disp, reg); -	} - -	/*PCIE 2 FIR Pre-emphasis Filter Coefficients & Transmit Driver Power Level */ -	for (i=0,disp=0; i<4; i++,disp+=3) { -		mfsdr(SDR0_PE2HSSSET1L0+disp, reg); -		reg |= 0x33000000; -		mtsdr(SDR0_PE2HSSSET1L0+disp, reg); -	} - -	reg = 0x21242222; -	mtsdr(SDR0_PE2UTLSET1, reg); -	reg = 0x11000000; -	mtsdr(SDR0_PE2UTLSET2, reg); -	/* pci express 1 Endpoint  Mode */ -	reg = 0x00004000; -	mtsdr(SDR0_PE2DLPSET, reg); - -	mtsdr(SDR0_UART1, 0x2080005a);	/* patch for TG */ -#endif - -	return 0; -} -  #ifdef CONFIG_POST  /*   * Returns 1 if keys pressed to start the power-on long-running tests diff --git a/board/amcc/ocotea/ocotea.c b/board/amcc/ocotea/ocotea.c index eea1e1e17..4d1d09321 100644 --- a/board/amcc/ocotea/ocotea.c +++ b/board/amcc/ocotea/ocotea.c @@ -147,36 +147,48 @@ int board_early_init_f (void)  	/*--------------------------------------------------------------------  	 * Setup the interrupt controller polarities, triggers, etc.  	 *-------------------------------------------------------------------*/ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ -	mtdcr (uic0er, 0x00000000);	/* disable all */ -	mtdcr (uic0cr, 0x00000009);	/* SMI & UIC1 crit are critical */ -	mtdcr (uic0pr, 0xfffffe13);	/* per ref-board manual */ -	mtdcr (uic0tr, 0x01c00008);	/* per ref-board manual */ -	mtdcr (uic0vr, 0x00000001);	/* int31 highest, base=0x000 */ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ - +	/* +	 * Because of the interrupt handling rework to handle 440GX interrupts +	 * with the common code, we needed to change names of the UIC registers. +	 * Here the new relationship: +	 * +	 * U-Boot name	440GX name +	 * ----------------------- +	 * UIC0		UICB0 +	 * UIC1		UIC0 +	 * UIC2		UIC1 +	 * UIC3		UIC2 +	 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic1er, 0x00000000);	/* disable all */ -	mtdcr (uic1cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic1pr, 0xffffe0ff);	/* per ref-board manual */ -	mtdcr (uic1tr, 0x00ffc000);	/* per ref-board manual */ +	mtdcr (uic1cr, 0x00000009);	/* SMI & UIC1 crit are critical */ +	mtdcr (uic1pr, 0xfffffe13);	/* per ref-board manual */ +	mtdcr (uic1tr, 0x01c00008);	/* per ref-board manual */  	mtdcr (uic1vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */  	mtdcr (uic2er, 0x00000000);	/* disable all */  	mtdcr (uic2cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic2pr, 0xffffffff);	/* per ref-board manual */ -	mtdcr (uic2tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic2pr, 0xffffe0ff);	/* per ref-board manual */ +	mtdcr (uic2tr, 0x00ffc000);	/* per ref-board manual */  	mtdcr (uic2vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */ -	mtdcr (uicb0sr, 0xfc000000); /* clear all */ -	mtdcr (uicb0er, 0x00000000); /* disable all */ -	mtdcr (uicb0cr, 0x00000000); /* all non-critical */ -	mtdcr (uicb0pr, 0xfc000000); /* */ -	mtdcr (uicb0tr, 0x00000000); /* */ -	mtdcr (uicb0vr, 0x00000001); /* */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ +	mtdcr (uic3er, 0x00000000);	/* disable all */ +	mtdcr (uic3cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic3pr, 0xffffffff);	/* per ref-board manual */ +	mtdcr (uic3tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic3vr, 0x00000001);	/* int31 highest, base=0x000 */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ + +	mtdcr (uic0sr, 0xfc000000); /* clear all */ +	mtdcr (uic0er, 0x00000000); /* disable all */ +	mtdcr (uic0cr, 0x00000000); /* all non-critical */ +	mtdcr (uic0pr, 0xfc000000); /* */ +	mtdcr (uic0tr, 0x00000000); /* */ +	mtdcr (uic0vr, 0x00000001); /* */  	mfsdr (sdr_mfr, mfr);  	mfr &= ~SDR0_MFR_ECS_MASK;  /*	mtsdr(sdr_mfr, mfr); */ diff --git a/board/amcc/redwood/Makefile b/board/amcc/redwood/Makefile new file mode 100644 index 000000000..5793307d6 --- /dev/null +++ b/board/amcc/redwood/Makefile @@ -0,0 +1,50 @@ +# +# (C) Copyright 2008 +# Feng Kan, Applied Micro Circuits Corp., fkan@amcc.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 $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).a + +COBJS	= $(BOARD).o +SOBJS	= init.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend *~ + +######################################################################### + +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/amcc/redwood/config.mk b/board/amcc/redwood/config.mk new file mode 100644 index 000000000..f33336d93 --- /dev/null +++ b/board/amcc/redwood/config.mk @@ -0,0 +1,42 @@ +# +# (C) Copyright 2008 +# Feng Kan, Applied Micro Circuits Corp., fkan@amcc.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 +# + +# +# AMCC 460SX Reference Platform (redwood) board +# + +ifeq ($(ramsym),1) +TEXT_BASE = 0x07FD0000 +else +TEXT_BASE = 0xfffb0000 +endif + +PLATFORM_CPPFLAGS += -DCONFIG_440=1 + +ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif + +ifeq ($(dbcr),1) +PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000 +endif diff --git a/board/amcc/redwood/init.S b/board/amcc/redwood/init.S new file mode 100644 index 000000000..fcffada30 --- /dev/null +++ b/board/amcc/redwood/init.S @@ -0,0 +1,77 @@ +/* + * (C) Copyright 2008 + * Feng Kan, Applied Micro Circuits Corp., fkan@amcc.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 <ppc_asm.tmpl> +#include <config.h> +#include <asm-ppc/mmu.h> + +/************************************************************************** + * TLB TABLE + * + * This table is used by the cpu boot code to setup the initial tlb + * entries. Rather than make broad assumptions in the cpu source tree, + * this table lets each board set things up however they like. + * + *  Pointer to the table is returned in r1 + * + *************************************************************************/ + +	.section .bootpg,"ax" +	.globl tlbtab +tlbtab: +	tlbtab_start + +	/* +	 * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the +	 * speed up boot process. It is patched after relocation to enable SA_I +	 */ +	tlbentry(0xff000000, SZ_16M, 0xff000000, 4, AC_R|AC_W|AC_X|SA_G) + +	/* +	 * TLB entries for SDRAM are not needed on this platform. +	 * They are dynamically generated in the SPD DDR(2) detection +	 * routine. +	 */ + +	/* Although 512 KB, map 256k at a time */ +	tlbentry(CFG_ISRAM_BASE, SZ_256K, 0x00000000, 4, AC_R|AC_W|AC_X|SA_I) +	tlbentry(CFG_ISRAM_BASE + 0x40000, SZ_256K, 0x00040000, 4, AC_R|AC_W|AC_X|SA_I) + +	tlbentry(CFG_OPER_FLASH, SZ_16M, 0xE7000000, 4,AC_R|AC_W|AC_X|SA_G|SA_I) + +	/* +	 * Peripheral base +	 */ +	tlbentry(CFG_PERIPHERAL_BASE, SZ_16K, 0xEF600000, 4, AC_R|AC_W|SA_G|SA_I) + +	tlbentry(CFG_PCIE0_XCFGBASE,SZ_16M, 0x00000000, 0xC, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCIE1_XCFGBASE,SZ_16M, 0x10000000, 0xC, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCIE2_XCFGBASE,SZ_16M, 0x20000000, 0xC, AC_R|AC_W|SA_G|SA_I) + +	tlbentry(CFG_PCIE0_MEMBASE, SZ_256M, 0x00000000, 0xD, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCIE1_MEMBASE, SZ_256M, 0x00000000, 0xE, AC_R|AC_W|SA_G|SA_I) + +	tlbentry(CFG_PCIE0_REGBASE, SZ_64K, 0x30000000, 0xC, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCIE1_REGBASE, SZ_64K, 0x30010000, 0xC, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCIE2_REGBASE, SZ_64K, 0x30020000, 0xC, AC_R|AC_W|SA_G|SA_I) +	tlbtab_end diff --git a/board/amcc/redwood/redwood.c b/board/amcc/redwood/redwood.c new file mode 100644 index 000000000..37a0c310f --- /dev/null +++ b/board/amcc/redwood/redwood.c @@ -0,0 +1,456 @@ +/* + * This is the main board level file for the Redwood AMCC board. + * + * (C) Copyright 2008 + * Feng Kan, Applied Micro Circuits Corp., fkan@amcc.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 "redwood.h" +#include <ppc4xx.h> +#include <asm/processor.h> +#include <i2c.h> +#include <asm-ppc/io.h> + +int compare_to_true(char *str); +char *remove_l_w_space(char *in_str); +char *remove_t_w_space(char *in_str); +int get_console_port(void); + +static void early_init_EBC(void); +static int bootdevice_selected(void); +static void early_reinit_EBC(int); +static void early_init_UIC(void); + +/* + * Define Boot devices + */ +#define BOOT_FROM_8BIT_SRAM			0x00 +#define BOOT_FROM_16BIT_SRAM			0x01 +#define BOOT_FROM_32BIT_SRAM			0x02 +#define BOOT_FROM_8BIT_NAND			0x03 +#define BOOT_FROM_16BIT_NOR			0x04 +#define BOOT_DEVICE_UNKNOWN			0xff + +/* + * EBC Devices Characteristics + *   Peripheral Bank Access Parameters       -   EBC_BxAP + *   Peripheral Bank Configuration Register  -   EBC_BxCR + */ + +/* + * 8 bit width SRAM + * BU Value + * BxAP : 0x03800000  - 0 00000111 0 00 00 00 00 00 000 0 0 0 0 00000 + * B0CR : 0xff098000  - BAS = ff0 - 100 11 00 0000000000000 + * B2CR : 0xe7098000  - BAS = e70 - 100 11 00 0000000000000 + */ +#define EBC_BXAP_8BIT_SRAM					\ +	EBC_BXAP_BME_DISABLED   | EBC_BXAP_TWT_ENCODE(7)  |	\ +	EBC_BXAP_BCE_DISABLE    | EBC_BXAP_BCT_2TRANS     |	\ +	EBC_BXAP_CSN_ENCODE(0)  | EBC_BXAP_OEN_ENCODE(0)  |	\ +	EBC_BXAP_WBN_ENCODE(0)  | EBC_BXAP_WBF_ENCODE(0)  |	\ +	EBC_BXAP_TH_ENCODE(0)   | EBC_BXAP_RE_DISABLED    |	\ +	EBC_BXAP_SOR_DELAYED    | EBC_BXAP_BEM_WRITEONLY  |	\ +	EBC_BXAP_PEN_DISABLED + +#define EBC_BXAP_16BIT_SRAM	EBC_BXAP_8BIT_SRAM +#define EBC_BXAP_32BIT_SRAM	EBC_BXAP_8BIT_SRAM + +/* + * NAND flash + * BU Value + * BxAP : 0x048ff240  - 0 00000111 0 00 00 00 00 00 000 0 0 0 0 00000 + * B0CR : 0xff09a000  - BAS = ff0 - 100 11 01 0000000000000 + * B2CR : 0xe709a000  - BAS = e70 - 100 11 01 0000000000000 +*/ +#define EBC_BXAP_NAND						\ +	EBC_BXAP_BME_DISABLED   | EBC_BXAP_TWT_ENCODE(7)  |	\ +	EBC_BXAP_BCE_DISABLE    | EBC_BXAP_BCT_2TRANS     |	\ +	EBC_BXAP_CSN_ENCODE(0)  | EBC_BXAP_OEN_ENCODE(0)  |	\ +	EBC_BXAP_WBN_ENCODE(0)  | EBC_BXAP_WBF_ENCODE(0)  |	\ +	EBC_BXAP_TH_ENCODE(0)   | EBC_BXAP_RE_DISABLED    |	\ +	EBC_BXAP_SOR_DELAYED    | EBC_BXAP_BEM_WRITEONLY  |	\ +	EBC_BXAP_PEN_DISABLED + +/* + * NOR flash + * BU Value + * BxAP : 0x048ff240  - 0 00000111 0 00 00 00 00 00 000 0 0 0 0 00000 + * B0CR : 0xff09a000  - BAS = ff0 - 100 11 01 0000000000000 + * B2CR : 0xe709a000  - BAS = e70 - 100 11 01 0000000000000 +*/ +#define EBC_BXAP_NOR						\ +	EBC_BXAP_BME_DISABLED   | EBC_BXAP_TWT_ENCODE(7)  |	\ +	EBC_BXAP_BCE_DISABLE    | EBC_BXAP_BCT_2TRANS     |	\ +	EBC_BXAP_CSN_ENCODE(0)  | EBC_BXAP_OEN_ENCODE(0)  |	\ +	EBC_BXAP_WBN_ENCODE(0)  | EBC_BXAP_WBF_ENCODE(0)  |	\ +	EBC_BXAP_TH_ENCODE(0)   | EBC_BXAP_RE_DISABLED    |	\ +	EBC_BXAP_SOR_DELAYED    | EBC_BXAP_BEM_WRITEONLY  |	\ +	EBC_BXAP_PEN_DISABLED + +/* + * FPGA + * BU value : + * B1AP = 0x05895240  - 0 00001011 0 00 10 01 01 01 001 0 0 1 0 00000 + * B1CR = 0xe201a000  - BAS = e20 - 000 11 01 00000000000000 + */ +#define EBC_BXAP_FPGA						\ +	EBC_BXAP_BME_DISABLED   | EBC_BXAP_TWT_ENCODE(11) |	\ +	EBC_BXAP_BCE_DISABLE    | EBC_BXAP_BCT_2TRANS     |	\ +	EBC_BXAP_CSN_ENCODE(10) | EBC_BXAP_OEN_ENCODE(1)  |	\ +	EBC_BXAP_WBN_ENCODE(1)  | EBC_BXAP_WBF_ENCODE(1)  |	\ +	EBC_BXAP_TH_ENCODE(1)   | EBC_BXAP_RE_DISABLED    |	\ +	EBC_BXAP_SOR_DELAYED    | EBC_BXAP_BEM_RW         |	\ +	EBC_BXAP_PEN_DISABLED + +#define EBC_BXCR_8BIT_SRAM_CS0						\ +	EBC_BXCR_BAS_ENCODE(0xFFE00000) | EBC_BXCR_BS_1MB           |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_8BIT + +#define EBC_BXCR_32BIT_SRAM_CS0						\ +	EBC_BXCR_BAS_ENCODE(0xFFC00000) | EBC_BXCR_BS_1MB           |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_32BIT + +#define EBC_BXCR_NAND_CS0						\ +	EBC_BXCR_BAS_ENCODE(0xFF000000) | EBC_BXCR_BS_16MB          |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_8BIT + +#define EBC_BXCR_16BIT_SRAM_CS0						\ +	EBC_BXCR_BAS_ENCODE(0xFFE00000) | EBC_BXCR_BS_2MB           |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_16BIT + +#define EBC_BXCR_NOR_CS0						\ +	EBC_BXCR_BAS_ENCODE(0xFF000000) | EBC_BXCR_BS_16MB          |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_16BIT + +#define EBC_BXCR_NOR_CS1						\ +	EBC_BXCR_BAS_ENCODE(0xE0000000) | EBC_BXCR_BS_128MB         |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_16BIT + +#define EBC_BXCR_NAND_CS1						\ +	EBC_BXCR_BAS_ENCODE(0xE0000000) | EBC_BXCR_BS_128MB         |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_8BIT + +#define EBC_BXCR_NAND_CS2						\ +	EBC_BXCR_BAS_ENCODE(0xC0000000) | EBC_BXCR_BS_128MB         |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_8BIT + +#define EBC_BXCR_SRAM_CS2						\ +	EBC_BXCR_BAS_ENCODE(0xC0000000) | EBC_BXCR_BS_4MB           |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_32BIT + +#define EBC_BXCR_LARGE_FLASH_CS2					\ +	EBC_BXCR_BAS_ENCODE(0xE7000000) | EBC_BXCR_BS_16MB          |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_16BIT + +#define EBC_BXCR_FPGA_CS3						\ +	EBC_BXCR_BAS_ENCODE(0xE2000000) | EBC_BXCR_BS_1MB           |	\ +	EBC_BXCR_BU_RW                  | EBC_BXCR_BW_16BIT + +/***************************************************************************** + * UBOOT initiated board specific function calls + ****************************************************************************/ + +int board_early_init_f(void) +{ +	int computed_boot_device = BOOT_DEVICE_UNKNOWN; + +	/* +	 * Initialise EBC +	 */ +	early_init_EBC(); + +	/* +	 * Determine which boot device was selected +	 */ +	computed_boot_device = bootdevice_selected(); + +	/* +	 * Reinit EBC based on selected boot device +	 */ +	early_reinit_EBC(computed_boot_device); + +	/* +	 * Setup for UIC on 460SX redwood board +	 */ +	early_init_UIC(); + +	return 0; +} + +int checkboard(void) +{ +	char *s = getenv("serial#"); + +	printf("Board: Redwood - AMCC 460SX Reference Board"); +	if (s != NULL) { +		puts(", serial# "); +		puts(s); +	} +	putc('\n'); + +	return 0; +} + +static void early_init_EBC(void) +{ +	/* +	 * Initialize EBC CONFIG - +	 * Keep the Default value, but the bit PDT which has to be set to 1 ?TBC +	 * default value : +	 *      0x07C00000 - 0 0 000 1 1 1 1 1 0000 0 00000 000000000000 +	 */ +	mtebc(xbcfg, EBC_CFG_LE_UNLOCK | +	      EBC_CFG_PTD_ENABLE | +	      EBC_CFG_RTC_16PERCLK | +	      EBC_CFG_ATC_PREVIOUS | +	      EBC_CFG_DTC_PREVIOUS | +	      EBC_CFG_CTC_PREVIOUS | +	      EBC_CFG_OEO_PREVIOUS | +	      EBC_CFG_EMC_DEFAULT | EBC_CFG_PME_DISABLE | EBC_CFG_PR_16); + +	/* +	 * PART 1 : Initialize EBC Bank 3 +	 * ============================== +	 * Bank1 is always associated to the EPLD. +	 * It has to be initialized prior to other banks settings computation +	 * since some board registers values may be needed to determine the +	 * boot type +	 */ +	mtebc(pb1ap, EBC_BXAP_FPGA); +	mtebc(pb1cr, EBC_BXCR_FPGA_CS3); + +} + +static int bootdevice_selected(void) +{ +	unsigned long sdr0_pinstp; +	unsigned long bootstrap_settings; +	int computed_boot_device = BOOT_DEVICE_UNKNOWN; + +	/* +	 *  Determine which boot device was selected +	 *  ================================================= +	 * +	 *  Read Pin Strap Register in PPC460SX +	 *  Result can either be : +	 *   - Boot strap = boot from EBC 8bits     => Small Flash +	 *   - Boot strap = boot from PCI +	 *   - Boot strap = IIC +	 *  In case of boot from IIC, read Serial Device Strap Register1 +	 * +	 *  Result can either be : +	 *   - Boot from EBC  - EBC Bus Width = 8bits    => Small Flash +	 *   - Boot from EBC  - EBC Bus Width = 16bits   => Large Flash or SRAM +	 *   - Boot from PCI +	 */ + +	/* Read Pin Strap Register in PPC460SX */ +	mfsdr(SDR0_PINSTP, sdr0_pinstp); +	bootstrap_settings = sdr0_pinstp & SDR0_PSTRP0_BOOTSTRAP_MASK; + +	switch (bootstrap_settings) { +	case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0: +		/* +		 * Boot from SRAM, 8bit width +		 */ +		computed_boot_device = BOOT_FROM_8BIT_SRAM; +		break; +	case SDR0_PSTRP0_BOOTSTRAP_SETTINGS1: +		/* +		 * Boot from SRAM, 32bit width +		 */ +		computed_boot_device = BOOT_FROM_32BIT_SRAM; +		break; +	case SDR0_PSTRP0_BOOTSTRAP_SETTINGS2: +		/* +		 * Boot from NAND, 8bit width +		 */ +		computed_boot_device = BOOT_FROM_8BIT_NAND; +		break; +	case SDR0_PSTRP0_BOOTSTRAP_SETTINGS4: +		/* +		 * Boot from SRAM, 16bit width +		 * Boot setting in IIC EEPROM 0x50 +		 */ +		computed_boot_device = BOOT_FROM_16BIT_SRAM; +		break; +	case SDR0_PSTRP0_BOOTSTRAP_SETTINGS5: +		/* +		 * Boot from NOR, 16bit width +		 * Boot setting in IIC EEPROM 0x54 +		 */ +		computed_boot_device = BOOT_FROM_16BIT_NOR; +		break; +	default: +		/* should not be */ +		computed_boot_device = BOOT_DEVICE_UNKNOWN; +		break; +	} + +	return computed_boot_device; +} + +static void early_reinit_EBC(int computed_boot_device) +{ +	/* +	 *  Compute EBC settings depending on selected boot device +	 *  ====================================================== +	 * +	 * Resulting EBC init will be among following configurations : +	 * +	 *  - Boot from EBC 8bits => boot from Small Flash selected +	 *            EBC-CS0     = Small Flash +	 *            EBC-CS2     = Large Flash and SRAM +	 * +	 *  - Boot from EBC 16bits => boot from Large Flash or SRAM +	 *            EBC-CS0     = Large Flash or SRAM +	 *            EBC-CS2     = Small Flash +	 * +	 *  - Boot from PCI +	 *            EBC-CS0     = not initialized to avoid address contention +	 *            EBC-CS2     = same as boot from Small Flash selected +	 */ + +	unsigned long ebc0_cs0_bxap_value = 0, ebc0_cs0_bxcr_value = 0; +	unsigned long ebc0_cs1_bxap_value = 0, ebc0_cs1_bxcr_value = 0; +	unsigned long ebc0_cs2_bxap_value = 0, ebc0_cs2_bxcr_value = 0; + +	switch (computed_boot_device) { +		/*-------------------------------------------------------------------*/ +	case BOOT_FROM_8BIT_SRAM: +		/*-------------------------------------------------------------------*/ +		ebc0_cs0_bxap_value = EBC_BXAP_8BIT_SRAM; +		ebc0_cs0_bxcr_value = EBC_BXCR_8BIT_SRAM_CS0; +		ebc0_cs1_bxap_value = EBC_BXAP_NOR; +		ebc0_cs1_bxcr_value = EBC_BXCR_NOR_CS1; +		ebc0_cs2_bxap_value = EBC_BXAP_NAND; +		ebc0_cs2_bxcr_value = EBC_BXCR_NAND_CS2; +		break; + +		/*-------------------------------------------------------------------*/ +	case BOOT_FROM_16BIT_SRAM: +		/*-------------------------------------------------------------------*/ +		ebc0_cs0_bxap_value = EBC_BXAP_16BIT_SRAM; +		ebc0_cs0_bxcr_value = EBC_BXCR_16BIT_SRAM_CS0; +		ebc0_cs1_bxap_value = EBC_BXAP_NOR; +		ebc0_cs1_bxcr_value = EBC_BXCR_NOR_CS1; +		ebc0_cs2_bxap_value = EBC_BXAP_NAND; +		ebc0_cs2_bxcr_value = EBC_BXCR_NAND_CS2; +		break; + +		/*-------------------------------------------------------------------*/ +	case BOOT_FROM_32BIT_SRAM: +		/*-------------------------------------------------------------------*/ +		ebc0_cs0_bxap_value = EBC_BXAP_32BIT_SRAM; +		ebc0_cs0_bxcr_value = EBC_BXCR_32BIT_SRAM_CS0; +		ebc0_cs1_bxap_value = EBC_BXAP_NOR; +		ebc0_cs1_bxcr_value = EBC_BXCR_NOR_CS1; +		ebc0_cs2_bxap_value = EBC_BXAP_NAND; +		ebc0_cs2_bxcr_value = EBC_BXCR_NAND_CS2; +		break; + +		/*-------------------------------------------------------------------*/ +	case BOOT_FROM_16BIT_NOR: +		/*-------------------------------------------------------------------*/ +		ebc0_cs0_bxap_value = EBC_BXAP_NOR; +		ebc0_cs0_bxcr_value = EBC_BXCR_NOR_CS0; +		ebc0_cs1_bxap_value = EBC_BXAP_NAND; +		ebc0_cs1_bxcr_value = EBC_BXCR_NAND_CS1; +		ebc0_cs2_bxap_value = EBC_BXAP_32BIT_SRAM; +		ebc0_cs2_bxcr_value = EBC_BXCR_SRAM_CS2; +		break; + +		/*-------------------------------------------------------------------*/ +	case BOOT_FROM_8BIT_NAND: +		/*-------------------------------------------------------------------*/ +		ebc0_cs0_bxap_value = EBC_BXAP_NAND; +		ebc0_cs0_bxcr_value = EBC_BXCR_NAND_CS0; +		ebc0_cs1_bxap_value = EBC_BXAP_NOR; +		ebc0_cs1_bxcr_value = EBC_BXCR_NOR_CS1; +		ebc0_cs2_bxap_value = EBC_BXAP_32BIT_SRAM; +		ebc0_cs2_bxcr_value = EBC_BXCR_SRAM_CS2; +		break; + +		/*-------------------------------------------------------------------*/ +	default: +		/*-------------------------------------------------------------------*/ +		/* BOOT_DEVICE_UNKNOWN */ +		break; +	} + +	mtebc(pb0ap, ebc0_cs0_bxap_value); +	mtebc(pb0cr, ebc0_cs0_bxcr_value); +	mtebc(pb1ap, ebc0_cs1_bxap_value); +	mtebc(pb1cr, ebc0_cs1_bxcr_value); +	mtebc(pb2ap, ebc0_cs2_bxap_value); +	mtebc(pb2cr, ebc0_cs2_bxcr_value); +} + +static void early_init_UIC(void) +{ +	/* +	 * Initialise UIC registers.  Clear all interrupts.  Disable all +	 * interrupts. +	 * Set critical interrupt values.  Set interrupt polarities.  Set +	 * interrupt trigger levels.  Make bit 0 High  priority.  Clear all +	 * interrupts again. +	 */ +	mtdcr(uic3sr, 0xffffffff);	/* Clear all interrupts */ +	mtdcr(uic3er, 0x00000000);	/* disable all interrupts */ +	mtdcr(uic3cr, 0x00000000);	/* Set Critical / Non Critical +					 * interrupts */ +	mtdcr(uic3pr, 0xffffffff);	/* Set Interrupt Polarities */ +	mtdcr(uic3tr, 0x001fffff);	/* Set Interrupt Trigger Levels */ +	mtdcr(uic3vr, 0x00000000);	/* int31 highest, base=0x000 */ +	mtdcr(uic3sr, 0xffffffff);	/* clear all  interrupts */ + +	mtdcr(uic2sr, 0xffffffff);	/* Clear all interrupts */ +	mtdcr(uic2er, 0x00000000);	/* disable all interrupts */ +	mtdcr(uic2cr, 0x00000000);	/* Set Critical / Non Critical +					 * interrupts */ +	mtdcr(uic2pr, 0xebebebff);	/* Set Interrupt Polarities */ +	mtdcr(uic2tr, 0x74747400);	/* Set Interrupt Trigger Levels */ +	mtdcr(uic2vr, 0x00000000);	/* int31 highest, base=0x000 */ +	mtdcr(uic2sr, 0xffffffff);	/* clear all interrupts */ + +	mtdcr(uic1sr, 0xffffffff);	/* Clear all interrupts */ +	mtdcr(uic1er, 0x00000000);	/* disable all interrupts */ +	mtdcr(uic1cr, 0x00000000);	/* Set Critical / Non Critical +					 * interrupts */ +	mtdcr(uic1pr, 0xffffffff);	/* Set Interrupt Polarities */ +	mtdcr(uic1tr, 0x001fc0ff);	/* Set Interrupt Trigger Levels */ +	mtdcr(uic1vr, 0x00000000);	/* int31 highest, base=0x000 */ +	mtdcr(uic1sr, 0xffffffff);	/* clear all interrupts */ + +	mtdcr(uic0sr, 0xffffffff);	/* Clear all interrupts */ +	mtdcr(uic0er, 0x00000000);	/* disable all interrupts excepted +					 * cascade to be checked */ +	mtdcr(uic0cr, 0x00104001);	/* Set Critical / Non Critical +					 * interrupts */ +	mtdcr(uic0pr, 0xffffffff);	/* Set Interrupt Polarities */ +	mtdcr(uic0tr, 0x000f003c);	/* Set Interrupt Trigger Levels */ +	mtdcr(uic0vr, 0x00000000);	/* int31 highest, base=0x000 */ +	mtdcr(uic0sr, 0xffffffff);	/* clear all interrupts */ + +} diff --git a/board/amcc/redwood/redwood.h b/board/amcc/redwood/redwood.h new file mode 100644 index 000000000..89b87e6da --- /dev/null +++ b/board/amcc/redwood/redwood.h @@ -0,0 +1,50 @@ +/* + * (C) Copyright 2008 + * Feng Kan, Applied Micro Circuit Corp., fkan@amcc.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 + */ + +#ifndef __REDWOOD_H_ +#define __REDWOOD_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/*----------------------------------------------------------------------------+ +| Defines ++----------------------------------------------------------------------------*/ +/* Pin Straps Reg */ +#define SDR0_PSTRP0			0x0040 +#define SDR0_PSTRP0_BOOTSTRAP_MASK	0xE0000000	/* Strap Bits */ + +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS0	0x00000000	/* Default strap settings 0 */ +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS1	0x20000000	/* Default strap settings 1 */ +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS2	0x40000000	/* Default strap settings 2 */ +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS3	0x60000000	/* Default strap settings 3 */ +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS4	0x80000000	/* Default strap settings 4 */ +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS5	0xA0000000	/* Default strap settings 5 */ +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS6	0xC0000000	/* Default strap settings 6 */ +#define SDR0_PSTRP0_BOOTSTRAP_SETTINGS7	0xE0000000	/* Default strap settings 7 */ + +#ifdef __cplusplus +} +#endif +#endif				/* __REDWOOD_H_ */ diff --git a/board/amcc/redwood/u-boot.lds b/board/amcc/redwood/u-boot.lds new file mode 100644 index 000000000..2104cc2a3 --- /dev/null +++ b/board/amcc/redwood/u-boot.lds @@ -0,0 +1,147 @@ +/* + * (C) Copyright 2004 + * 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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ +SECTIONS +{ +  .resetvec 0xFFFFFFFC : +  { +    *(.resetvec) +  } = 0xffff + +  .bootpg 0xFFFFF000 : +  { +    cpu/ppc4xx/start.o	(.bootpg) +  } = 0xffff + +  /* 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      : +  { +    /* WARNING - the following is hand-optimized to fit within	*/ +    /* the sector layout of our flash chips!	XXX FIXME XXX	*/ + +    cpu/ppc4xx/start.o		(.text) +    board/amcc/redwood/init.o	(.text) + +/*    . = env_offset;*/ +/*    common/environment.o(.text)*/ + +    *(.text) +    *(.fixup) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .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 = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/amcc/sequoia/sequoia.c b/board/amcc/sequoia/sequoia.c index 198db1a1d..176d5cf0d 100644 --- a/board/amcc/sequoia/sequoia.c +++ b/board/amcc/sequoia/sequoia.c @@ -25,12 +25,11 @@  #include <common.h>  #include <libfdt.h>  #include <fdt_support.h> -#include <ppc440.h> +#include <ppc4xx.h>  #include <asm/gpio.h>  #include <asm/processor.h>  #include <asm/io.h>  #include <asm/bitops.h> -#include <asm/ppc4xx-intvec.h>  DECLARE_GLOBAL_DATA_PTR; @@ -340,7 +339,7 @@ int checkboard(void)   */  void sequoia_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev)  { -	pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, VECNUM_EIR2); +	pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, VECNUM_EIRQ2);  }  #endif diff --git a/board/amcc/taishan/taishan.c b/board/amcc/taishan/taishan.c index b6c306539..fdd82e7cc 100644 --- a/board/amcc/taishan/taishan.c +++ b/board/amcc/taishan/taishan.c @@ -119,36 +119,48 @@ int board_early_init_f (void)  	/*--------------------------------------------------------------------  	 * Setup the interrupt controller polarities, triggers, etc.  	 *-------------------------------------------------------------------*/ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ -	mtdcr (uic0er, 0x00000000);	/* disable all */ -	mtdcr (uic0cr, 0x00000009);	/* SMI & UIC1 crit are critical */ -	mtdcr (uic0pr, 0xfffffe13);	/* per ref-board manual */ -	mtdcr (uic0tr, 0x01c00008);	/* per ref-board manual */ -	mtdcr (uic0vr, 0x00000001);	/* int31 highest, base=0x000 */ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ - +	/* +	 * Because of the interrupt handling rework to handle 440GX interrupts +	 * with the common code, we needed to change names of the UIC registers. +	 * Here the new relationship: +	 * +	 * U-Boot name	440GX name +	 * ----------------------- +	 * UIC0		UICB0 +	 * UIC1		UIC0 +	 * UIC2		UIC1 +	 * UIC3		UIC2 +	 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic1er, 0x00000000);	/* disable all */ -	mtdcr (uic1cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic1pr, 0xffffe0ff);	/* per ref-board manual */ -	mtdcr (uic1tr, 0x00ffc000);	/* per ref-board manual */ +	mtdcr (uic1cr, 0x00000009);	/* SMI & UIC1 crit are critical */ +	mtdcr (uic1pr, 0xfffffe13);	/* per ref-board manual */ +	mtdcr (uic1tr, 0x01c00008);	/* per ref-board manual */  	mtdcr (uic1vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */  	mtdcr (uic2er, 0x00000000);	/* disable all */  	mtdcr (uic2cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic2pr, 0xffffffff);	/* per ref-board manual */ -	mtdcr (uic2tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic2pr, 0xffffe0ff);	/* per ref-board manual */ +	mtdcr (uic2tr, 0x00ffc000);	/* per ref-board manual */  	mtdcr (uic2vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */ -	mtdcr (uicb0sr, 0xfc000000);	/* clear all */ -	mtdcr (uicb0er, 0x00000000);	/* disable all */ -	mtdcr (uicb0cr, 0x00000000);	/* all non-critical */ -	mtdcr (uicb0pr, 0xfc000000);	/* */ -	mtdcr (uicb0tr, 0x00000000);	/* */ -	mtdcr (uicb0vr, 0x00000001);	/* */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ +	mtdcr (uic3er, 0x00000000);	/* disable all */ +	mtdcr (uic3cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic3pr, 0xffffffff);	/* per ref-board manual */ +	mtdcr (uic3tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic3vr, 0x00000001);	/* int31 highest, base=0x000 */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ + +	mtdcr (uic0sr, 0xfc000000);	/* clear all */ +	mtdcr (uic0er, 0x00000000);	/* disable all */ +	mtdcr (uic0cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic0pr, 0xfc000000);	/* */ +	mtdcr (uic0tr, 0x00000000);	/* */ +	mtdcr (uic0vr, 0x00000001);	/* */  	/* Enable two GPIO 10~11 and TraceA signal */  	mfsdr(sdr_pfc0,reg); diff --git a/board/amcc/yucca/yucca.c b/board/amcc/yucca/yucca.c index 660889365..84c3938d7 100644 --- a/board/amcc/yucca/yucca.c +++ b/board/amcc/yucca/yucca.c @@ -677,7 +677,7 @@ int is_pci_host(struct pci_controller *hose)  	return 1;  } -int yucca_pcie_card_present(int port) +static int yucca_pcie_card_present(int port)  {  	u16 reg; @@ -879,10 +879,6 @@ void pcie_setup_hoses(int busno)  int misc_init_f (void)  {  	uint reg; -#if defined(CONFIG_STRESS) -	uint i ; -	uint disp; -#endif  	out16(FPGA_REG10, (in16(FPGA_REG10) &  			~(FPGA_REG10_AUTO_NEG_DIS|FPGA_REG10_RESET_ETH)) | @@ -897,67 +893,23 @@ int misc_init_f (void)  	/* minimal init for PCIe */  	/* pci express 0 Endpoint Mode */ -	mfsdr(SDR0_PE0DLPSET, reg); +	mfsdr(SDRN_PESDR_DLPSET(0), reg);  	reg &= (~0x00400000); -	mtsdr(SDR0_PE0DLPSET, reg); +	mtsdr(SDRN_PESDR_DLPSET(0), reg);  	/* pci express 1 Rootpoint  Mode */ -	mfsdr(SDR0_PE1DLPSET, reg); +	mfsdr(SDRN_PESDR_DLPSET(1), reg);  	reg |= 0x00400000; -	mtsdr(SDR0_PE1DLPSET, reg); +	mtsdr(SDRN_PESDR_DLPSET(1), reg);  	/* pci express 2 Rootpoint  Mode */ -	mfsdr(SDR0_PE2DLPSET, reg); +	mfsdr(SDRN_PESDR_DLPSET(2), reg);  	reg |= 0x00400000; -	mtsdr(SDR0_PE2DLPSET, reg); +	mtsdr(SDRN_PESDR_DLPSET(2), reg);  	out16(FPGA_REG1C,(in16 (FPGA_REG1C) &  				~FPGA_REG1C_PE0_ROOTPOINT &  				~FPGA_REG1C_PE1_ENDPOINT  &  				~FPGA_REG1C_PE2_ENDPOINT)); -#if defined(CONFIG_STRESS) -	/* -	 * all this setting done by linux only needed by stress an charac. test -	 * procedure -	 * PCIe 1 Rootpoint PCIe2 Endpoint -	 * PCIe 0 FIR Pre-emphasis Filter Coefficients & Transmit Driver -	 * Power Level -	 */ -	for (i = 0, disp = 0; i < 8; i++, disp += 3) { -		mfsdr(SDR0_PE0HSSSET1L0 + disp, reg); -		reg |= 0x33000000; -		mtsdr(SDR0_PE0HSSSET1L0 + disp, reg); -	} - -	/* -	 * PCIe 1 FIR Pre-emphasis Filter Coefficients & Transmit Driver -	 * Power Level -	 */ -	for (i = 0, disp = 0; i < 4; i++, disp += 3) { -		mfsdr(SDR0_PE1HSSSET1L0 + disp, reg); -		reg |= 0x33000000; -		mtsdr(SDR0_PE1HSSSET1L0 + disp, reg); -	} - -	/* -	 * PCIE 2 FIR Pre-emphasis Filter Coefficients & Transmit Driver -	 * Power Level -	 */ -	for (i = 0, disp = 0; i < 4; i++, disp += 3) { -		mfsdr(SDR0_PE2HSSSET1L0 + disp, reg); -		reg |= 0x33000000; -		mtsdr(SDR0_PE2HSSSET1L0 + disp, reg); -	} - -	reg = 0x21242222; -	mtsdr(SDR0_PE2UTLSET1, reg); -	reg = 0x11000000; -	mtsdr(SDR0_PE2UTLSET2, reg); -	/* pci express 1 Endpoint  Mode */ -	reg = 0x00004000; -	mtsdr(SDR0_PE2DLPSET, reg); - -	mtsdr(SDR0_UART1, 0x2080005a);	/* patch for TG */ -#endif  	return 0;  } diff --git a/board/korat/korat.c b/board/korat/korat.c index 51874ea8d..0d90fb31d 100644 --- a/board/korat/korat.c +++ b/board/korat/korat.c @@ -33,7 +33,7 @@  #include <asm/bitops.h>  #include <asm/gpio.h>  #include <asm/io.h> -#include <asm/ppc4xx-intvec.h> +#include <asm/ppc4xx-uic.h>  #include <asm/processor.h>  DECLARE_GLOBAL_DATA_PTR; @@ -575,7 +575,7 @@ int checkboard(void)   */  void korat_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev)  { -	pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, VECNUM_EIR2); +	pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, VECNUM_EIRQ2);  }  #endif diff --git a/board/prodrive/alpr/alpr.c b/board/prodrive/alpr/alpr.c index 131a62dd6..cc491d05b 100644 --- a/board/prodrive/alpr/alpr.c +++ b/board/prodrive/alpr/alpr.c @@ -48,36 +48,48 @@ int board_early_init_f (void)  	/*--------------------------------------------------------------------  	 * Setup the interrupt controller polarities, triggers, etc.  	 *-------------------------------------------------------------------*/ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ -	mtdcr (uic0er, 0x00000000);	/* disable all */ -	mtdcr (uic0cr, 0x00000009);	/* SMI & UIC1 crit are critical */ -	mtdcr (uic0pr, 0xfffffe03);	/* per manual */ -	mtdcr (uic0tr, 0x01c00000);	/* per manual */ -	mtdcr (uic0vr, 0x00000001);	/* int31 highest, base=0x000 */ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ - +	/* +	 * Because of the interrupt handling rework to handle 440GX interrupts +	 * with the common code, we needed to change names of the UIC registers. +	 * Here the new relationship: +	 * +	 * U-Boot name	440GX name +	 * ----------------------- +	 * UIC0		UICB0 +	 * UIC1		UIC0 +	 * UIC2		UIC1 +	 * UIC3		UIC2 +	 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic1er, 0x00000000);	/* disable all */ -	mtdcr (uic1cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic1pr, 0xffffe0ff);	/* per ref-board manual */ -	mtdcr (uic1tr, 0x00ffc000);	/* per ref-board manual */ +	mtdcr (uic1cr, 0x00000009);	/* SMI & UIC1 crit are critical */ +	mtdcr (uic1pr, 0xfffffe03);	/* per manual */ +	mtdcr (uic1tr, 0x01c00000);	/* per manual */  	mtdcr (uic1vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */  	mtdcr (uic2er, 0x00000000);	/* disable all */  	mtdcr (uic2cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic2pr, 0xffffffff);	/* per ref-board manual */ -	mtdcr (uic2tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic2pr, 0xffffe0ff);	/* per ref-board manual */ +	mtdcr (uic2tr, 0x00ffc000);	/* per ref-board manual */  	mtdcr (uic2vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */ -	mtdcr (uicb0sr, 0xfc000000); /* clear all */ -	mtdcr (uicb0er, 0x00000000); /* disable all */ -	mtdcr (uicb0cr, 0x00000000); /* all non-critical */ -	mtdcr (uicb0pr, 0xfc000000); /* */ -	mtdcr (uicb0tr, 0x00000000); /* */ -	mtdcr (uicb0vr, 0x00000001); /* */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ +	mtdcr (uic3er, 0x00000000);	/* disable all */ +	mtdcr (uic3cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic3pr, 0xffffffff);	/* per ref-board manual */ +	mtdcr (uic3tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic3vr, 0x00000001);	/* int31 highest, base=0x000 */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ + +	mtdcr (uic0sr, 0xfc000000); /* clear all */ +	mtdcr (uic0er, 0x00000000); /* disable all */ +	mtdcr (uic0cr, 0x00000000); /* all non-critical */ +	mtdcr (uic0pr, 0xfc000000); /* */ +	mtdcr (uic0tr, 0x00000000); /* */ +	mtdcr (uic0vr, 0x00000001); /* */  	/* Setup shutdown/SSD empty interrupt as inputs */  	out32(GPIO0_TCR, in32(GPIO0_TCR) & ~(CFG_GPIO_SHUTDOWN | CFG_GPIO_SSD_EMPTY)); diff --git a/board/sandburst/karef/karef.c b/board/sandburst/karef/karef.c index 2d71d3b2c..72ce97635 100644 --- a/board/sandburst/karef/karef.c +++ b/board/sandburst/karef/karef.c @@ -195,36 +195,48 @@ int board_early_init_f (void)  	/*--------------------------------------------------------------------+  	 * Setup the interrupt controller polarities, triggers, etc.  	 +-------------------------------------------------------------------*/ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ -	mtdcr (uic0er, 0x00000000);	/* disable all */ -	mtdcr (uic0cr, 0x00000000);	/* all non- critical */ -	mtdcr (uic0pr, 0xfffffe03);	/* polarity */ -	mtdcr (uic0tr, 0x01c00000);	/* trigger edge vs level */ -	mtdcr (uic0vr, 0x00000001);	/* int31 highest, base=0x000 */ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ - +	/* +	 * Because of the interrupt handling rework to handle 440GX interrupts +	 * with the common code, we needed to change names of the UIC registers. +	 * Here the new relationship: +	 * +	 * U-Boot name	440GX name +	 * ----------------------- +	 * UIC0		UICB0 +	 * UIC1		UIC0 +	 * UIC2		UIC1 +	 * UIC3		UIC2 +	 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic1er, 0x00000000);	/* disable all */ -	mtdcr (uic1cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic1pr, 0xffffc8ff);	/* polarity */ -	mtdcr (uic1tr, 0x00ff0000);	/* trigger edge vs level */ +	mtdcr (uic1cr, 0x00000000);	/* all non- critical */ +	mtdcr (uic1pr, 0xfffffe03);	/* polarity */ +	mtdcr (uic1tr, 0x01c00000);	/* trigger edge vs level */  	mtdcr (uic1vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */  	mtdcr (uic2er, 0x00000000);	/* disable all */  	mtdcr (uic2cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic2pr, 0xffff83ff);	/* polarity */ -	mtdcr (uic2tr, 0x00ff8c0f);	/* trigger edge vs level */ +	mtdcr (uic2pr, 0xffffc8ff);	/* polarity */ +	mtdcr (uic2tr, 0x00ff0000);	/* trigger edge vs level */  	mtdcr (uic2vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */ -	mtdcr (uicb0sr, 0xfc000000);	/* clear all */ -	mtdcr (uicb0er, 0x00000000);	/* disable all */ -	mtdcr (uicb0cr, 0x00000000);	/* all non-critical */ -	mtdcr (uicb0pr, 0xfc000000); -	mtdcr (uicb0tr, 0x00000000); -	mtdcr (uicb0vr, 0x00000001); +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ +	mtdcr (uic3er, 0x00000000);	/* disable all */ +	mtdcr (uic3cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic3pr, 0xffff83ff);	/* polarity */ +	mtdcr (uic3tr, 0x00ff8c0f);	/* trigger edge vs level */ +	mtdcr (uic3vr, 0x00000001);	/* int31 highest, base=0x000 */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ + +	mtdcr (uic0sr, 0xfc000000);	/* clear all */ +	mtdcr (uic0er, 0x00000000);	/* disable all */ +	mtdcr (uic0cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic0pr, 0xfc000000); +	mtdcr (uic0tr, 0x00000000); +	mtdcr (uic0vr, 0x00000001);  	fpga_init(); diff --git a/board/sandburst/metrobox/metrobox.c b/board/sandburst/metrobox/metrobox.c index 66cdfb156..c38850d6c 100644 --- a/board/sandburst/metrobox/metrobox.c +++ b/board/sandburst/metrobox/metrobox.c @@ -185,36 +185,48 @@ int board_early_init_f (void)  	/*--------------------------------------------------------------------+  	 * Setup the interrupt controller polarities, triggers, etc.  	 +-------------------------------------------------------------------*/ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ -	mtdcr (uic0er, 0x00000000);	/* disable all */ -	mtdcr (uic0cr, 0x00000000);	/* all non- critical */ -	mtdcr (uic0pr, 0xfffffe03);	/* polarity */ -	mtdcr (uic0tr, 0x01c00000);	/* trigger edge vs level */ -	mtdcr (uic0vr, 0x00000001);	/* int31 highest, base=0x000 */ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ - +	/* +	 * Because of the interrupt handling rework to handle 440GX interrupts +	 * with the common code, we needed to change names of the UIC registers. +	 * Here the new relationship: +	 * +	 * U-Boot name	440GX name +	 * ----------------------- +	 * UIC0		UICB0 +	 * UIC1		UIC0 +	 * UIC2		UIC1 +	 * UIC3		UIC2 +	 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic1er, 0x00000000);	/* disable all */ -	mtdcr (uic1cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic1pr, 0xffffc8ff);	/* polarity */ -	mtdcr (uic1tr, 0x00ff0000);	/* trigger edge vs level */ +	mtdcr (uic1cr, 0x00000000);	/* all non- critical */ +	mtdcr (uic1pr, 0xfffffe03);	/* polarity */ +	mtdcr (uic1tr, 0x01c00000);	/* trigger edge vs level */  	mtdcr (uic1vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */  	mtdcr (uic2er, 0x00000000);	/* disable all */  	mtdcr (uic2cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic2pr, 0xffff83ff);	/* polarity */ -	mtdcr (uic2tr, 0x00ff8c0f);	/* trigger edge vs level */ +	mtdcr (uic2pr, 0xffffc8ff);	/* polarity */ +	mtdcr (uic2tr, 0x00ff0000);	/* trigger edge vs level */  	mtdcr (uic2vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */ -	mtdcr (uicb0sr, 0xfc000000);	/* clear all */ -	mtdcr (uicb0er, 0x00000000);	/* disable all */ -	mtdcr (uicb0cr, 0x00000000);	/* all non-critical */ -	mtdcr (uicb0pr, 0xfc000000); -	mtdcr (uicb0tr, 0x00000000); -	mtdcr (uicb0vr, 0x00000001); +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ +	mtdcr (uic3er, 0x00000000);	/* disable all */ +	mtdcr (uic3cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic3pr, 0xffff83ff);	/* polarity */ +	mtdcr (uic3tr, 0x00ff8c0f);	/* trigger edge vs level */ +	mtdcr (uic3vr, 0x00000001);	/* int31 highest, base=0x000 */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ + +	mtdcr (uic0sr, 0xfc000000);	/* clear all */ +	mtdcr (uic0er, 0x00000000);	/* disable all */ +	mtdcr (uic0cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic0pr, 0xfc000000); +	mtdcr (uic0tr, 0x00000000); +	mtdcr (uic0vr, 0x00000001);  	fpga_init(); diff --git a/board/xilinx/ml507/Makefile b/board/xilinx/ml507/Makefile new file mode 100644 index 000000000..72837048a --- /dev/null +++ b/board/xilinx/ml507/Makefile @@ -0,0 +1,58 @@ +# +# (C) Copyright 2000-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 +ifneq ($(OBJTREE),$(SRCTREE)) +endif + +INCS		:= +CFLAGS		+= $(INCS) +HOST_CFLAGS	+= $(INCS) + +LIB	= $(obj)lib$(BOARD).a + +COBJS	= $(BOARD).o + +SOBJS	= init.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $^ + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/xilinx/ml507/config.mk b/board/xilinx/ml507/config.mk new file mode 100644 index 000000000..e827e8a93 --- /dev/null +++ b/board/xilinx/ml507/config.mk @@ -0,0 +1,27 @@ +# +# (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 +# +sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp + +ifndef TEXT_BASE +TEXT_BASE = 0x04000000 +endif diff --git a/board/xilinx/ml507/init.S b/board/xilinx/ml507/init.S new file mode 100644 index 000000000..3228a65e5 --- /dev/null +++ b/board/xilinx/ml507/init.S @@ -0,0 +1,53 @@ +/* + *  (C) Copyright 2008 + *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + *  This work has been supported by: QTechnology  http://qtec.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. + * + *  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, see <http://www.gnu.org/licenses/>. +*/ + +#include <ppc_asm.tmpl> +#include <config.h> +#include <asm-ppc/mmu.h> + +.section .bootpg,"ax" +.globl tlbtab + +tlbtab: +tlbtab_start +	/* SDRAM */ +tlbentry(XPAR_DDR2_SDRAM_MEM_BASEADDR, SZ_256M, CFG_SDRAM_BASE, 0, +	 AC_R | AC_W | AC_X | SA_G | SA_I) +	/* UART */ +tlbentry(XPAR_UARTLITE_0_BASEADDR, SZ_64K, XPAR_UARTLITE_0_BASEADDR, 0, +	 AC_R | AC_W | SA_G | SA_I) +	/* PIC */ +tlbentry(XPAR_INTC_0_BASEADDR, SZ_64K, XPAR_INTC_0_BASEADDR, 0, +	 AC_R | AC_W | SA_G | SA_I) +#ifdef XPAR_IIC_EEPROM_BASEADDR +	/* I2C */ +tlbentry(XPAR_IIC_EEPROM_BASEADDR, SZ_64K, XPAR_IIC_EEPROM_BASEADDR, 0, +	 AC_R | AC_W | SA_G | SA_I) +#endif +#ifdef XPAR_LLTEMAC_0_BASEADDR +	/* Net */ +tlbentry(XPAR_LLTEMAC_0_BASEADDR, SZ_64K, XPAR_LLTEMAC_0_BASEADDR, 0, +	 AC_R | AC_W | SA_G | SA_I) +#endif +#ifdef XPAR_FLASH_MEM0_BASEADDR +	/*Flash*/ +tlbentry(XPAR_FLASH_MEM0_BASEADDR, SZ_256M, XPAR_FLASH_MEM0_BASEADDR, 0, +	 AC_R | AC_W | AC_X | SA_G | SA_I) +#endif +tlbtab_end diff --git a/board/xilinx/ml507/ml507.c b/board/xilinx/ml507/ml507.c new file mode 100644 index 000000000..d4993039e --- /dev/null +++ b/board/xilinx/ml507/ml507.c @@ -0,0 +1,47 @@ +/* + * (C) Copyright 2008 + * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * This work has been supported by: QTechnology  http://qtec.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. + * + * 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, see <http://www.gnu.org/licenses/>. +*/ + +#include <config.h> +#include <common.h> +#include <asm/processor.h> + +int board_pre_init(void) +{ +	return 0; +} + +int checkboard(void) +{ +	puts("ML507 Board\n"); +	return 0; +} + +phys_size_t initdram(int board_type) +{ +	return get_ram_size(XPAR_DDR2_SDRAM_MEM_BASEADDR, +			    CFG_SDRAM_SIZE_MB * 1024 * 1024); +} + +void get_sys_info(sys_info_t * sysInfo) +{ +	sysInfo->freqProcessor = XPAR_CORE_CLOCK_FREQ_HZ; +	sysInfo->freqPLB = XPAR_PLB_CLOCK_FREQ_HZ; +	sysInfo->freqPCI = 0; + +	return; +} diff --git a/board/xilinx/ml507/u-boot-ram.lds b/board/xilinx/ml507/u-boot-ram.lds new file mode 100644 index 000000000..2c98d2785 --- /dev/null +++ b/board/xilinx/ml507/u-boot-ram.lds @@ -0,0 +1,134 @@ +/* + * (C) Copyright 2000-2004 + * 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 + */ + +OUTPUT_ARCH(powerpc) +ENTRY(_start_440) + +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      : +  { +    /* WARNING - the following is hand-optimized to fit within	*/ +    /* the sector layout of our flash chips!	XXX FIXME XXX	*/ + + +    *(.text) +    *(.fixup) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .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 = .; + +  __bss_start = .; +  .bss (NOLOAD)       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } + +  ppcenv_assert = ASSERT(. < 0xFFFFB000, ".bss section too big, overlaps .ppcenv section. Please update your confguration: CFG_MONITOR_BASE, CFG_MONITOR_LEN and TEXT_BASE may need to be modified."); + +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/xilinx/ml507/u-boot-rom.lds b/board/xilinx/ml507/u-boot-rom.lds new file mode 100644 index 000000000..d5da018ba --- /dev/null +++ b/board/xilinx/ml507/u-boot-rom.lds @@ -0,0 +1,144 @@ +/* + * (C) Copyright 2000-2004 + * 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 + */ + +OUTPUT_ARCH(powerpc) +ENTRY(_start_440) + +SECTIONS +{ +  .resetvec 0xFFFFFFFC : +  { +    *(.resetvec) +  } = 0xffff + +  .bootpg 0xFFFFF000 : +  { +    cpu/ppc4xx/start.o	(.bootpg) +  } = 0xffff + +  /* 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      : +  { +    /* WARNING - the following is hand-optimized to fit within	*/ +    /* the sector layout of our flash chips!	XXX FIXME XXX	*/ + + +    *(.text) +    *(.fixup) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .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 = .; + +  __bss_start = .; +  .bss (NOLOAD)       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } + +  ppcenv_assert = ASSERT(. < 0xFFFFB000, ".bss section too big, overlaps .ppcenv section. Please update your confguration: CFG_MONITOR_BASE, CFG_MONITOR_LEN and TEXT_BASE may need to be modified."); + +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/xilinx/ml507/xparameters.h b/board/xilinx/ml507/xparameters.h new file mode 100644 index 000000000..77d2ddf9b --- /dev/null +++ b/board/xilinx/ml507/xparameters.h @@ -0,0 +1,35 @@ +/* + * (C) Copyright 2008 + * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * This work has been supported by: QTechnology  http://qtec.com/ + * based on xparameters-ml507.h by Xilinx + * + * 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, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef XPARAMETER_H +#define XPARAMETER_H + +#define XPAR_DDR2_SDRAM_MEM_BASEADDR 	0x00000000 +#define XPAR_IIC_EEPROM_BASEADDR 	0x81600000 +#define XPAR_INTC_0_BASEADDR 		0x81800000 +#define XPAR_LLTEMAC_0_BASEADDR 	0x81C00000 +#define XPAR_UARTLITE_0_BASEADDR 	0x84000000 +#define XPAR_FLASH_MEM0_BASEADDR 	0xFE000000 +#define XPAR_PLB_CLOCK_FREQ_HZ 		100000000 +#define XPAR_CORE_CLOCK_FREQ_HZ 	400000000 +#define XPAR_INTC_MAX_NUM_INTR_INPUTS 	13 +#define XPAR_UARTLITE_0_BAUDRATE	9600 + +#endif diff --git a/board/xpedite1k/xpedite1k.c b/board/xpedite1k/xpedite1k.c index bc7e3bd17..c94a345d9 100644 --- a/board/xpedite1k/xpedite1k.c +++ b/board/xpedite1k/xpedite1k.c @@ -59,36 +59,48 @@ int board_early_init_f(void)  	/*--------------------------------------------------------------------  	 * Setup the interrupt controller polarities, triggers, etc.  	 *-------------------------------------------------------------------*/ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ -	mtdcr (uic0er, 0x00000000);	/* disable all */ -	mtdcr (uic0cr, 0x00000003);	/* SMI & UIC1 crit are critical */ -	mtdcr (uic0pr, 0xfffffe00);	/* per ref-board manual */ -	mtdcr (uic0tr, 0x01c00000);	/* per ref-board manual */ -	mtdcr (uic0vr, 0x00000001);	/* int31 highest, base=0x000 */ -	mtdcr (uic0sr, 0xffffffff);	/* clear all */ - +	/* +	 * Because of the interrupt handling rework to handle 440GX interrupts +	 * with the common code, we needed to change names of the UIC registers. +	 * Here the new relationship: +	 * +	 * U-Boot name	440GX name +	 * ----------------------- +	 * UIC0		UICB0 +	 * UIC1		UIC0 +	 * UIC2		UIC1 +	 * UIC3		UIC2 +	 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic1er, 0x00000000);	/* disable all */ -	mtdcr (uic1cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic1pr, 0xffffc0ff);	/* per ref-board manual */ -	mtdcr (uic1tr, 0x00ff8000);	/* per ref-board manual */ +	mtdcr (uic1cr, 0x00000003);	/* SMI & UIC1 crit are critical */ +	mtdcr (uic1pr, 0xfffffe00);	/* per ref-board manual */ +	mtdcr (uic1tr, 0x01c00000);	/* per ref-board manual */  	mtdcr (uic1vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic1sr, 0xffffffff);	/* clear all */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */  	mtdcr (uic2er, 0x00000000);	/* disable all */  	mtdcr (uic2cr, 0x00000000);	/* all non-critical */ -	mtdcr (uic2pr, 0xffffffff);	/* per ref-board manual */ -	mtdcr (uic2tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic2pr, 0xffffc0ff);	/* per ref-board manual */ +	mtdcr (uic2tr, 0x00ff8000);	/* per ref-board manual */  	mtdcr (uic2vr, 0x00000001);	/* int31 highest, base=0x000 */  	mtdcr (uic2sr, 0xffffffff);	/* clear all */ -	mtdcr (uicb0sr, 0xfc000000); /* clear all */ -	mtdcr (uicb0er, 0x00000000); /* disable all */ -	mtdcr (uicb0cr, 0x00000000); /* all non-critical */ -	mtdcr (uicb0pr, 0xfc000000); /* */ -	mtdcr (uicb0tr, 0x00000000); /* */ -	mtdcr (uicb0vr, 0x00000001); /* */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ +	mtdcr (uic3er, 0x00000000);	/* disable all */ +	mtdcr (uic3cr, 0x00000000);	/* all non-critical */ +	mtdcr (uic3pr, 0xffffffff);	/* per ref-board manual */ +	mtdcr (uic3tr, 0x00ff8c0f);	/* per ref-board manual */ +	mtdcr (uic3vr, 0x00000001);	/* int31 highest, base=0x000 */ +	mtdcr (uic3sr, 0xffffffff);	/* clear all */ + +	mtdcr (uic0sr, 0xfc000000); /* clear all */ +	mtdcr (uic0er, 0x00000000); /* disable all */ +	mtdcr (uic0cr, 0x00000000); /* all non-critical */ +	mtdcr (uic0pr, 0xfc000000); /* */ +	mtdcr (uic0tr, 0x00000000); /* */ +	mtdcr (uic0vr, 0x00000001); /* */  	LED0_ON(); diff --git a/common/cmd_reginfo.c b/common/cmd_reginfo.c index 0657e4b1f..c0a145991 100644 --- a/common/cmd_reginfo.c +++ b/common/cmd_reginfo.c @@ -93,11 +93,10 @@ int do_reginfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  #elif defined (CONFIG_405GP)  	printf ("\n405GP registers; MSR=%08x\n",mfmsr());  	printf ("\nUniversal Interrupt Controller Regs\n" -	    "uicsr    uicsrs   uicer    uiccr    uicpr    uictr    uicmsr   uicvr    uicvcr" +	    "uicsr    uicer    uiccr    uicpr    uictr    uicmsr   uicvr    uicvcr"  	    "\n" -	    "%08x %08x %08x %08x %08x %08x %08x %08x %08x\n", +	    "%08x %08x %08x %08x %08x %08x %08x %08x\n",  	mfdcr(uicsr), -	mfdcr(uicsrs),  	mfdcr(uicer),  	mfdcr(uiccr),  	mfdcr(uicpr), diff --git a/cpu/ppc4xx/44x_spd_ddr2.c b/cpu/ppc4xx/44x_spd_ddr2.c index e9940e8e5..1c3632428 100644 --- a/cpu/ppc4xx/44x_spd_ddr2.c +++ b/cpu/ppc4xx/44x_spd_ddr2.c @@ -50,9 +50,19 @@  #include "ecc.h" -#if defined(CONFIG_SPD_EEPROM) &&				\ -	(defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ -	 defined(CONFIG_460EX) || defined(CONFIG_460GT)) +#if defined(CONFIG_SDRAM_PPC4xx_IBM_DDR2) + +#define PPC4xx_IBM_DDR2_DUMP_REGISTER(mnemonic)				\ +	do {								\ +		u32 data;						\ +		mfsdram(SDRAM_##mnemonic, data);			\ +		printf("%20s[%02x] = 0x%08X\n",				\ +		       "SDRAM_" #mnemonic, SDRAM_##mnemonic, data);	\ +	} while (0) + +static inline void ppc4xx_ibm_ddr2_register_dump(void); + +#if defined(CONFIG_SPD_EEPROM)  /*-----------------------------------------------------------------------------+   * Defines @@ -257,7 +267,6 @@ static void	test(void);  #else  static void	DQS_calibration_process(void);  #endif -static void ppc440sp_sdram_register_dump(void);  int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);  void dcbz_area(u32 start_address, u32 num_bytes); @@ -607,7 +616,7 @@ phys_size_t initdram(int board_type)  	remove_tlb(0, dram_size);  	program_tlb(0, 0, dram_size, MY_TLB_WORD2_I_ENABLE); -	ppc440sp_sdram_register_dump(); +	ppc4xx_ibm_ddr2_register_dump();  	/*  	 * Clear potential errors resulting from auto-calibration. @@ -2760,7 +2769,7 @@ calibration_loop:  		printf("\nERROR: Cannot determine a common read delay for the "  		       "DIMM(s) installed.\n");  		debug("%s[%d] ERROR : \n", __FUNCTION__,__LINE__); -		ppc440sp_sdram_register_dump(); +		ppc4xx_ibm_ddr2_register_dump();  		spd_ddr_init_hang ();  	} @@ -2946,169 +2955,8 @@ static void test(void)  }  #endif -#if defined(DEBUG) -static void ppc440sp_sdram_register_dump(void) -{ -	unsigned int sdram_reg; -	unsigned int sdram_data; -	unsigned int dcr_data; +#else /* CONFIG_SPD_EEPROM */ -	printf("\n  Register Dump:\n"); -	sdram_reg = SDRAM_MCSTAT; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MCSTAT    = 0x%08X", sdram_data); -	sdram_reg = SDRAM_MCOPT1; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MCOPT1    = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_MCOPT2; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MCOPT2    = 0x%08X", sdram_data); -	sdram_reg = SDRAM_MODT0; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MODT0     = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_MODT1; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MODT1     = 0x%08X", sdram_data); -	sdram_reg = SDRAM_MODT2; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MODT2     = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_MODT3; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MODT3     = 0x%08X", sdram_data); -	sdram_reg = SDRAM_CODT; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_CODT      = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_VVPR; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_VVPR      = 0x%08X", sdram_data); -	sdram_reg = SDRAM_OPARS; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_OPARS     = 0x%08X\n", sdram_data); -	/* -	 * OPAR2 is only used as a trigger register. -	 * No data is contained in this register, and reading or writing -	 * to is can cause bad things to happen (hangs).  Just skip it -	 * and report NA -	 * sdram_reg = SDRAM_OPAR2; -	 * mfsdram(sdram_reg, sdram_data); -	 * printf("        SDRAM_OPAR2     = 0x%08X\n", sdram_data); -	 */ -	printf("        SDRAM_OPART     = N/A       "); -	sdram_reg = SDRAM_RTR; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_RTR       = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_MB0CF; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MB0CF     = 0x%08X", sdram_data); -	sdram_reg = SDRAM_MB1CF; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MB1CF     = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_MB2CF; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MB2CF     = 0x%08X", sdram_data); -	sdram_reg = SDRAM_MB3CF; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MB3CF     = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR0; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR0  = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR1; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR1  = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR2; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR2  = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR3; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR3  = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR4; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR4  = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR5; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR5  = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR6; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR6  = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR7; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR7  = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR8; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR8  = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR9; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR9  = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR10; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR10 = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR11; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR11 = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR12; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR12 = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR13; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR13 = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_INITPLR14; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR14 = 0x%08X", sdram_data); -	sdram_reg = SDRAM_INITPLR15; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_INITPLR15 = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_RQDC; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_RQDC      = 0x%08X", sdram_data); -	sdram_reg = SDRAM_RFDC; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_RFDC      = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_RDCC; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_RDCC      = 0x%08X", sdram_data); -	sdram_reg = SDRAM_DLCR; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_DLCR      = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_CLKTR; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_CLKTR     = 0x%08X", sdram_data); -	sdram_reg = SDRAM_WRDTR; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_WRDTR     = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_SDTR1; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_SDTR1     = 0x%08X", sdram_data); -	sdram_reg = SDRAM_SDTR2; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_SDTR2     = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_SDTR3; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_SDTR3     = 0x%08X", sdram_data); -	sdram_reg = SDRAM_MMODE; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MMODE     = 0x%08X\n", sdram_data); -	sdram_reg = SDRAM_MEMODE; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_MEMODE    = 0x%08X", sdram_data); -	sdram_reg = SDRAM_ECCCR; -	mfsdram(sdram_reg, sdram_data); -	printf("        SDRAM_ECCCR     = 0x%08X\n\n", sdram_data); - -	dcr_data = mfdcr(SDRAM_R0BAS); -	printf("        MQ0_B0BAS       = 0x%08X", dcr_data); -	dcr_data = mfdcr(SDRAM_R1BAS); -	printf("        MQ1_B0BAS       = 0x%08X\n", dcr_data); -	dcr_data = mfdcr(SDRAM_R2BAS); -	printf("        MQ2_B0BAS       = 0x%08X", dcr_data); -	dcr_data = mfdcr(SDRAM_R3BAS); -	printf("        MQ3_B0BAS       = 0x%08X\n", dcr_data); -} -#else /* !defined(DEBUG) */ -static void ppc440sp_sdram_register_dump(void) -{ -} -#endif /* defined(DEBUG) */ -#elif defined(CONFIG_405EX)  /*-----------------------------------------------------------------------------   * Function:	initdram   * Description: Configures the PPC405EX(r) DDR1/DDR2 SDRAM memory @@ -3222,8 +3070,96 @@ phys_size_t initdram(int board_type)  #if defined(CONFIG_DDR_ECC)  	ecc_init(CFG_SDRAM_BASE, CFG_MBYTES_SDRAM << 20);  #endif /* defined(CONFIG_DDR_ECC) */ + +	ppc4xx_ibm_ddr2_register_dump();  #endif /* !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL) */  	return (CFG_MBYTES_SDRAM << 20);  } -#endif /* defined(CONFIG_SPD_EEPROM) && defined(CONFIG_440SP) || ... */ +#endif /* CONFIG_SPD_EEPROM */ + +static inline void ppc4xx_ibm_ddr2_register_dump(void) +{ +#if defined(DEBUG) +	printf("\nPPC4xx IBM DDR2 Register Dump:\n"); + +#if (defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ +     defined(CONFIG_460EX) || defined(CONFIG_460GT)) +	PPC4xx_IBM_DDR2_DUMP_REGISTER(R0BAS); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(R1BAS); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(R2BAS); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(R3BAS); +#endif /* (defined(CONFIG_440SP) || ... */ +#if defined(CONFIG_405EX) +	PPC4xx_IBM_DDR2_DUMP_REGISTER(BESR); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(BEARL); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(BEARH); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(WMIRQ); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(PLBOPT); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(PUABA); +#endif /* defined(CONFIG_405EX) */ +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MB0CF); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MB1CF); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MB2CF); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MB3CF); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MCSTAT); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MCOPT1); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MCOPT2); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MODT0); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MODT1); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MODT2); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MODT3); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(CODT); +#if (defined(CONFIG_440SP) || defined(CONFIG_440SPE) ||	\ +     defined(CONFIG_460EX) || defined(CONFIG_460GT)) +	PPC4xx_IBM_DDR2_DUMP_REGISTER(VVPR); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(OPARS); +	/* +	 * OPART is only used as a trigger register. +	 * +	 * No data is contained in this register, and reading or writing +	 * to is can cause bad things to happen (hangs). Just skip it and +	 * report "N/A". +	 */ +	printf("%20s = N/A\n", "SDRAM_OPART"); +#endif /* defined(CONFIG_440SP) || ... */ +	PPC4xx_IBM_DDR2_DUMP_REGISTER(RTR); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR0); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR1); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR2); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR3); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR4); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR5); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR6); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR7); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR8); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR9); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR10); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR11); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR12); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR13); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR14); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(INITPLR15); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(RQDC); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(RFDC); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(RDCC); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(DLCR); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(CLKTR); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(WRDTR); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(SDTR1); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(SDTR2); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(SDTR3); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MMODE); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(MEMODE); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(ECCCR); +#if (defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ +     defined(CONFIG_460EX) || defined(CONFIG_460GT)) +	PPC4xx_IBM_DDR2_DUMP_REGISTER(CID); +#endif /* defined(CONFIG_440SP) || ... */ +	PPC4xx_IBM_DDR2_DUMP_REGISTER(RID); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(FCSR); +	PPC4xx_IBM_DDR2_DUMP_REGISTER(RTSR); +#endif /* defined(DEBUG) */ +} + +#endif /* CONFIG_SDRAM_PPC4xx_IBM_DDR2 */ diff --git a/cpu/ppc4xx/4xx_enet.c b/cpu/ppc4xx/4xx_enet.c index 4e863dc91..8a3833513 100644 --- a/cpu/ppc4xx/4xx_enet.c +++ b/cpu/ppc4xx/4xx_enet.c @@ -90,7 +90,6 @@  #include <405_mal.h>  #include <miiphy.h>  #include <malloc.h> -#include <asm/ppc4xx-intvec.h>  /*   * Only compile for platform with AMCC EMAC ethernet controller and @@ -122,11 +121,65 @@   * Defines for MAL/EMAC interrupt conditions as reported in the UIC (Universal   * Interrupt Controller).   *-----------------------------------------------------------------------------*/ -#define MAL_UIC_ERR ( UIC_MAL_SERR | UIC_MAL_TXDE  | UIC_MAL_RXDE) -#define MAL_UIC_DEF  (UIC_MAL_RXEOB | MAL_UIC_ERR) -#define EMAC_UIC_DEF UIC_ENET -#define EMAC_UIC_DEF1 UIC_ENET1 -#define SEL_UIC_DEF(p) (p ? UIC_ENET1 : UIC_ENET ) +#define ETH_IRQ_NUM(dev)	(VECNUM_ETH0 + ((dev) * VECNUM_ETH1_OFFS)) + +#if defined(CONFIG_HAS_ETH3) +#if !defined(CONFIG_440GX) +#define UIC_ETHx	(UIC_MASK(ETH_IRQ_NUM(0)) || UIC_MASK(ETH_IRQ_NUM(1)) || \ +			 UIC_MASK(ETH_IRQ_NUM(2)) || UIC_MASK(ETH_IRQ_NUM(3))) +#else +/* Unfortunately 440GX spreads EMAC interrupts on multiple UIC's */ +#define UIC_ETHx	(UIC_MASK(ETH_IRQ_NUM(0)) || UIC_MASK(ETH_IRQ_NUM(1))) +#define UIC_ETHxB	(UIC_MASK(ETH_IRQ_NUM(2)) || UIC_MASK(ETH_IRQ_NUM(3))) +#endif /* !defined(CONFIG_440GX) */ +#elif defined(CONFIG_HAS_ETH2) +#define UIC_ETHx	(UIC_MASK(ETH_IRQ_NUM(0)) || UIC_MASK(ETH_IRQ_NUM(1)) || \ +			 UIC_MASK(ETH_IRQ_NUM(2))) +#elif defined(CONFIG_HAS_ETH1) +#define UIC_ETHx	(UIC_MASK(ETH_IRQ_NUM(0)) || UIC_MASK(ETH_IRQ_NUM(1))) +#else +#define UIC_ETHx	UIC_MASK(ETH_IRQ_NUM(0)) +#endif + +/* + * Define a default version for UIC_ETHxB for non 440GX so that we can + * use common code for all 4xx variants + */ +#if !defined(UIC_ETHxB) +#define UIC_ETHxB	0 +#endif + +#define UIC_MAL_SERR	UIC_MASK(VECNUM_MAL_SERR) +#define UIC_MAL_TXDE	UIC_MASK(VECNUM_MAL_TXDE) +#define UIC_MAL_RXDE	UIC_MASK(VECNUM_MAL_RXDE) +#define UIC_MAL_TXEOB	UIC_MASK(VECNUM_MAL_TXEOB) +#define UIC_MAL_RXEOB	UIC_MASK(VECNUM_MAL_RXEOB) + +#define MAL_UIC_ERR	(UIC_MAL_SERR | UIC_MAL_TXDE | UIC_MAL_RXDE) +#define MAL_UIC_DEF	(UIC_MAL_RXEOB | MAL_UIC_ERR) + +/* + * We have 3 different interrupt types: + * - MAL interrupts indicating successful transfer + * - MAL error interrupts indicating MAL related errors + * - EMAC interrupts indicating EMAC related errors + * + * All those interrupts can be on different UIC's, but since + * now at least all interrupts from one type are on the same + * UIC. Only exception is 440GX where the EMAC interrupts are + * spread over two UIC's! + */ +#if defined(CONFIG_440GX) +#define UIC_BASE_MAL	UIC1_DCR_BASE +#define UIC_BASE_MAL_ERR UIC2_DCR_BASE +#define UIC_BASE_EMAC	UIC2_DCR_BASE +#define UIC_BASE_EMAC_B	UIC3_DCR_BASE +#else +#define UIC_BASE_MAL	(UIC0_DCR_BASE + (UIC_NR(VECNUM_MAL_TXEOB) * 0x10)) +#define UIC_BASE_MAL_ERR (UIC0_DCR_BASE + (UIC_NR(VECNUM_MAL_SERR) * 0x10)) +#define UIC_BASE_EMAC	(UIC0_DCR_BASE + (UIC_NR(ETH_IRQ_NUM(0)) * 0x10)) +#define UIC_BASE_EMAC_B	(UIC0_DCR_BASE + (UIC_NR(ETH_IRQ_NUM(0)) * 0x10)) +#endif  #undef INFO_4XX_ENET @@ -166,9 +219,6 @@  /*-----------------------------------------------------------------------------+   * Global variables. TX and RX descriptors and buffers.   *-----------------------------------------------------------------------------*/ -/* IER globals */ -static uint32_t mal_ier; -  #if !defined(CONFIG_NET_MULTI)  struct eth_device *emac0_dev = NULL;  #endif @@ -200,12 +250,6 @@ struct eth_device *emac0_dev = NULL;  #define CONFIG_EMAC_NR_START	0  #endif -#if defined(CONFIG_405EX) || defined(CONFIG_440EPX) -#define ETH_IRQ_NUM(dev)	(VECNUM_ETH0 + ((dev))) -#else -#define ETH_IRQ_NUM(dev)	(VECNUM_ETH0 + ((dev) * 2)) -#endif -  #define MAL_RX_DESC_SIZE	2048  #define MAL_TX_DESC_SIZE	2048  #define MAL_ALLOC_SIZE		(MAL_TX_DESC_SIZE + MAL_RX_DESC_SIZE) @@ -465,30 +509,88 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)  #if defined(CONFIG_405EX)  int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)  { -	u32 gmiifer = 0; +	u32 rgmiifer = 0;  	/* -	 * Right now only 2*RGMII is supported. Please extend when needed. -	 * sr - 2007-09-19 +	 * The 405EX(r)'s RGMII bridge can operate in one of several +	 * modes, only one of which (2 x RGMII) allows the +	 * simultaneous use of both EMACs on the 405EX.  	 */ -	switch (1) { -	case 1: + +	switch (CONFIG_EMAC_PHY_MODE) { + +	case EMAC_PHY_MODE_NONE: +		/* No ports */ +		rgmiifer |= RGMII_FER_DIS	<< 0; +		rgmiifer |= RGMII_FER_DIS	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer); +		bis->bi_phymode[0] = BI_PHYMODE_NONE; +		bis->bi_phymode[1] = BI_PHYMODE_NONE; +		break; +	case EMAC_PHY_MODE_NONE_RGMII: +		/* 1 x RGMII port on channel 0 */ +		rgmiifer |= RGMII_FER_RGMII	<< 0; +		rgmiifer |= RGMII_FER_DIS	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer); +		bis->bi_phymode[0] = BI_PHYMODE_RGMII; +		bis->bi_phymode[1] = BI_PHYMODE_NONE; +		break; +	case EMAC_PHY_MODE_RGMII_NONE: +		/* 1 x RGMII port on channel 1 */ +		rgmiifer |= RGMII_FER_DIS	<< 0; +		rgmiifer |= RGMII_FER_RGMII	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer); +		bis->bi_phymode[0] = BI_PHYMODE_NONE; +		bis->bi_phymode[1] = BI_PHYMODE_RGMII; +		break; +	case EMAC_PHY_MODE_RGMII_RGMII:  		/* 2 x RGMII ports */ -		out_be32((void *)RGMII_FER, 0x00000055); +		rgmiifer |= RGMII_FER_RGMII	<< 0; +		rgmiifer |= RGMII_FER_RGMII	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer);  		bis->bi_phymode[0] = BI_PHYMODE_RGMII;  		bis->bi_phymode[1] = BI_PHYMODE_RGMII;  		break; -	case 2: -		/* 2 x SMII ports */ +	case EMAC_PHY_MODE_NONE_GMII: +		/* 1 x GMII port on channel 0 */ +		rgmiifer |= RGMII_FER_GMII	<< 0; +		rgmiifer |= RGMII_FER_DIS	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer); +		bis->bi_phymode[0] = BI_PHYMODE_GMII; +		bis->bi_phymode[1] = BI_PHYMODE_NONE; +		break; +	case EMAC_PHY_MODE_NONE_MII: +		/* 1 x MII port on channel 0 */ +		rgmiifer |= RGMII_FER_MII	<< 0; +		rgmiifer |= RGMII_FER_DIS	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer); +		bis->bi_phymode[0] = BI_PHYMODE_MII; +		bis->bi_phymode[1] = BI_PHYMODE_NONE; +		break; +	case EMAC_PHY_MODE_GMII_NONE: +		/* 1 x GMII port on channel 1 */ +		rgmiifer |= RGMII_FER_DIS	<< 0; +		rgmiifer |= RGMII_FER_GMII	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer); +		bis->bi_phymode[0] = BI_PHYMODE_NONE; +		bis->bi_phymode[1] = BI_PHYMODE_GMII; +		break; +	case EMAC_PHY_MODE_MII_NONE: +		/* 1 x MII port on channel 1 */ +		rgmiifer |= RGMII_FER_DIS	<< 0; +		rgmiifer |= RGMII_FER_MII	<< 4; +		out_be32((void *)RGMII_FER, rgmiifer); +		bis->bi_phymode[0] = BI_PHYMODE_NONE; +		bis->bi_phymode[1] = BI_PHYMODE_MII;  		break;  	default:  		break;  	}  	/* Ensure we setup mdio for this devnum and ONLY this devnum */ -	gmiifer = in_be32((void *)RGMII_FER); -	gmiifer |= (1 << (19-devnum)); -	out_be32((void *)RGMII_FER, gmiifer); +	rgmiifer = in_be32((void *)RGMII_FER); +	rgmiifer |= (1 << (19-devnum)); +	out_be32((void *)RGMII_FER, rgmiifer);  	return ((int)0x0);  } @@ -1377,59 +1479,17 @@ static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,  	}  } - -#if defined (CONFIG_440) || defined(CONFIG_405EX) - -#if defined(CONFIG_440SP) || defined(CONFIG_440SPE) -/* - * Hack: On 440SP all enet irq sources are located on UIC1 - * Needs some cleanup. --sr - */ -#define UIC0MSR		uic1msr -#define UIC0SR		uic1sr -#define UIC1MSR		uic1msr -#define UIC1SR		uic1sr -#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) -/* - * Hack: On 460EX/GT all enet irq sources are located on UIC2 - * Needs some cleanup. --ag - */ -#define UIC0MSR		uic2msr -#define UIC0SR		uic2sr -#define UIC1MSR		uic2msr -#define UIC1SR		uic2sr -#else -#define UIC0MSR		uic0msr -#define UIC0SR		uic0sr -#define UIC1MSR		uic1msr -#define UIC1SR		uic1sr -#endif - -#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ -    defined(CONFIG_405EX) -#define UICMSR_ETHX	uic0msr -#define UICSR_ETHX	uic0sr -#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) -#define UICMSR_ETHX	uic2msr -#define UICSR_ETHX	uic2sr -#else -#define UICMSR_ETHX	uic1msr -#define UICSR_ETHX	uic1sr -#endif -  int enetInt (struct eth_device *dev)  {  	int serviced;  	int rc = -1;		/* default to not us */ -	unsigned long mal_isr; -	unsigned long emac_isr = 0; -	unsigned long mal_rx_eob; -	unsigned long my_uic0msr, my_uic1msr; -	unsigned long my_uicmsr_ethx; - -#if defined(CONFIG_440GX) -	unsigned long my_uic2msr; -#endif +	u32 mal_isr; +	u32 emac_isr = 0; +	u32 mal_eob; +	u32 uic_mal; +	u32 uic_mal_err; +	u32 uic_emac; +	u32 uic_emac_b;  	EMAC_4XX_HW_PST hw_p;  	/* @@ -1448,256 +1508,79 @@ int enetInt (struct eth_device *dev)  	do {  		serviced = 0; -		my_uic0msr = mfdcr (UIC0MSR); -		my_uic1msr = mfdcr (UIC1MSR); -#if defined(CONFIG_440GX) -		my_uic2msr = mfdcr (uic2msr); -#endif -		my_uicmsr_ethx = mfdcr (UICMSR_ETHX); +		uic_mal = mfdcr(UIC_BASE_MAL + UIC_MSR); +		uic_mal_err = mfdcr(UIC_BASE_MAL_ERR + UIC_MSR); +		uic_emac = mfdcr(UIC_BASE_EMAC + UIC_MSR); +		uic_emac_b = mfdcr(UIC_BASE_EMAC_B + UIC_MSR); -		if (!(my_uic0msr & (UIC_MRE | UIC_MTE)) -		    && !(my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE)) -		    && !(my_uicmsr_ethx & (UIC_ETH0 | UIC_ETH1))) { +		if (!(uic_mal & (UIC_MAL_RXEOB | UIC_MAL_TXEOB)) +		    && !(uic_mal_err & (UIC_MAL_SERR | UIC_MAL_TXDE | UIC_MAL_RXDE)) +		    && !(uic_emac & UIC_ETHx) && !(uic_emac_b & UIC_ETHxB)) {  			/* not for us */  			return (rc);  		} -#if defined (CONFIG_440GX) -		if (!(my_uic0msr & (UIC_MRE | UIC_MTE)) -		    && !(my_uic2msr & (UIC_ETH2 | UIC_ETH3))) { -			/* not for us */ -			return (rc); -		} -#endif +  		/* get and clear controller status interrupts */ -		/* look at Mal and EMAC interrupts */ -		if ((my_uic0msr & (UIC_MRE | UIC_MTE)) -		    || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) { -			/* we have a MAL interrupt */ -			mal_isr = mfdcr (malesr); -			/* look for mal error */ -			if (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE)) { -				mal_err (dev, mal_isr, my_uic1msr, MAL_UIC_DEF, MAL_UIC_ERR); -				serviced = 1; -				rc = 0; -			} -		} +		/* look at MAL and EMAC error interrupts */ +		if (uic_mal_err & (UIC_MAL_SERR | UIC_MAL_TXDE | UIC_MAL_RXDE)) { +			/* we have a MAL error interrupt */ +			mal_isr = mfdcr(malesr); +			mal_err(dev, mal_isr, uic_mal_err, +				 MAL_UIC_DEF, MAL_UIC_ERR); -		/* port by port dispatch of emac interrupts */ -		if (hw_p->devnum == 0) { -			if (UIC_ETH0 & my_uicmsr_ethx) {	/* look for EMAC errors */ -				emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr); -				if ((hw_p->emac_ier & emac_isr) != 0) { -					emac_err (dev, emac_isr); -					serviced = 1; -					rc = 0; -				} -			} -			if ((hw_p->emac_ier & emac_isr) -			    || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) { -				mtdcr (UIC0SR, UIC_MRE | UIC_MTE);	/* Clear */ -				mtdcr (UIC1SR, UIC_MS | UIC_MTDE | UIC_MRDE);	/* Clear */ -				mtdcr (UICSR_ETHX, UIC_ETH0); /* Clear */ -				return (rc);	/* we had errors so get out */ -			} -		} +			/* clear MAL error interrupt status bits */ +			mtdcr(UIC_BASE_MAL_ERR + UIC_SR, +			      UIC_MAL_SERR | UIC_MAL_TXDE | UIC_MAL_RXDE); -#if !defined(CONFIG_440SP) -		if (hw_p->devnum == 1) { -			if (UIC_ETH1 & my_uicmsr_ethx) {	/* look for EMAC errors */ -				emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr); -				if ((hw_p->emac_ier & emac_isr) != 0) { -					emac_err (dev, emac_isr); -					serviced = 1; -					rc = 0; -				} -			} -			if ((hw_p->emac_ier & emac_isr) -			    || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) { -				mtdcr (UIC0SR, UIC_MRE | UIC_MTE);	/* Clear */ -				mtdcr (UIC1SR, UIC_MS | UIC_MTDE | UIC_MRDE); /* Clear */ -				mtdcr (UICSR_ETHX, UIC_ETH1); /* Clear */ -				return (rc);	/* we had errors so get out */ -			} -		} -#if defined (CONFIG_440GX) -		if (hw_p->devnum == 2) { -			if (UIC_ETH2 & my_uic2msr) {	/* look for EMAC errors */ -				emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr); -				if ((hw_p->emac_ier & emac_isr) != 0) { -					emac_err (dev, emac_isr); -					serviced = 1; -					rc = 0; -				} -			} -			if ((hw_p->emac_ier & emac_isr) -			    || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) { -				mtdcr (UIC0SR, UIC_MRE | UIC_MTE);	/* Clear */ -				mtdcr (UIC1SR, UIC_MS | UIC_MTDE | UIC_MRDE);	/* Clear */ -				mtdcr (uic2sr, UIC_ETH2); -				return (rc);	/* we had errors so get out */ -			} +			return -1;  		} -		if (hw_p->devnum == 3) { -			if (UIC_ETH3 & my_uic2msr) {	/* look for EMAC errors */ -				emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr); -				if ((hw_p->emac_ier & emac_isr) != 0) { -					emac_err (dev, emac_isr); -					serviced = 1; -					rc = 0; -				} -			} -			if ((hw_p->emac_ier & emac_isr) -			    || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) { -				mtdcr (UIC0SR, UIC_MRE | UIC_MTE);	/* Clear */ -				mtdcr (UIC1SR, UIC_MS | UIC_MTDE | UIC_MRDE);	/* Clear */ -				mtdcr (uic2sr, UIC_ETH3); -				return (rc);	/* we had errors so get out */ -			} -		} -#endif /* CONFIG_440GX */ -#endif /* !CONFIG_440SP */ +		/* look for EMAC errors */ +		if ((uic_emac & UIC_ETHx) || (uic_emac_b & UIC_ETHxB)) { +			emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr); +			emac_err(dev, emac_isr); -		/* handle MAX TX EOB interrupt from a tx */ -		if (my_uic0msr & UIC_MTE) { -			mal_rx_eob = mfdcr (maltxeobisr); -			mtdcr (maltxeobisr, mal_rx_eob); -			mtdcr (UIC0SR, UIC_MTE); -		} -		/* handle MAL RX EOB  interupt from a receive */ -		/* check for EOB on valid channels	      */ -		if (my_uic0msr & UIC_MRE) { -			mal_rx_eob = mfdcr (malrxeobisr); -			if ((mal_rx_eob & -			     (0x80000000 >> (hw_p->devnum * MAL_RX_CHAN_MUL))) -			    != 0) { /* call emac routine for channel x */ -				/* clear EOB -				   mtdcr(malrxeobisr, mal_rx_eob); */ -				enet_rcv (dev, emac_isr); -				/* indicate that we serviced an interrupt */ -				serviced = 1; -				rc = 0; -			} -		} +			/* clear EMAC error interrupt status bits */ +			mtdcr(UIC_BASE_EMAC + UIC_SR, UIC_ETHx); +			mtdcr(UIC_BASE_EMAC_B + UIC_SR, UIC_ETHxB); -		mtdcr (UIC0SR, UIC_MRE);	/* Clear */ -		mtdcr (UIC1SR, UIC_MS | UIC_MTDE | UIC_MRDE);	/* Clear */ -		switch (hw_p->devnum) { -		case 0: -			mtdcr (UICSR_ETHX, UIC_ETH0); -			break; -		case 1: -			mtdcr (UICSR_ETHX, UIC_ETH1); -			break; -#if defined (CONFIG_440GX) -		case 2: -			mtdcr (uic2sr, UIC_ETH2); -			break; -		case 3: -			mtdcr (uic2sr, UIC_ETH3); -			break; -#endif /* CONFIG_440GX */ -		default: -			break; +			return -1;  		} -	} while (serviced); - -	return (rc); -} - -#else /* CONFIG_440 */ - -int enetInt (struct eth_device *dev) -{ -	int serviced; -	int rc = -1;		/* default to not us */ -	unsigned long mal_isr; -	unsigned long emac_isr = 0; -	unsigned long mal_rx_eob; -	unsigned long my_uicmsr; - -	EMAC_4XX_HW_PST hw_p; - -	/* -	 * Because the mal is generic, we need to get the current -	 * eth device -	 */ -#if defined(CONFIG_NET_MULTI) -	dev = eth_get_dev(); -#else -	dev = emac0_dev; -#endif -	hw_p = dev->priv; - -	/* enter loop that stays in interrupt code until nothing to service */ -	do { -		serviced = 0; - -		my_uicmsr = mfdcr (uicmsr); +		/* handle MAX TX EOB interrupt from a tx */ +		if (uic_mal & UIC_MAL_TXEOB) { +			/* clear MAL interrupt status bits */ +			mal_eob = mfdcr(maltxeobisr); +			mtdcr(maltxeobisr, mal_eob); +			mtdcr(UIC_BASE_MAL + UIC_SR, UIC_MAL_TXEOB); -		if ((my_uicmsr & (MAL_UIC_DEF | EMAC_UIC_DEF)) == 0) {	/* not for us */ -			return (rc); -		} -		/* get and clear controller status interrupts */ -		/* look at Mal and EMAC interrupts */ -		if ((MAL_UIC_DEF & my_uicmsr) != 0) {	/* we have a MAL interrupt */ -			mal_isr = mfdcr (malesr); -			/* look for mal error */ -			if ((my_uicmsr & MAL_UIC_ERR) != 0) { -				mal_err (dev, mal_isr, my_uicmsr, MAL_UIC_DEF, MAL_UIC_ERR); -				serviced = 1; -				rc = 0; -			} +			/* indicate that we serviced an interrupt */ +			serviced = 1; +			rc = 0;  		} -		/* port by port dispatch of emac interrupts */ +		/* handle MAL RX EOB interupt from a receive */ +		/* check for EOB on valid channels	     */ +		if (uic_mal & UIC_MAL_RXEOB) { +			mal_eob = mfdcr(malrxeobisr); +			if (mal_eob & +			    (0x80000000 >> (hw_p->devnum * MAL_RX_CHAN_MUL))) { +				/* push packet to upper layer */ +				enet_rcv(dev, emac_isr); -		if ((SEL_UIC_DEF(hw_p->devnum) & my_uicmsr) != 0) {	/* look for EMAC errors */ -			emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr); -			if ((hw_p->emac_ier & emac_isr) != 0) { -				emac_err (dev, emac_isr); -				serviced = 1; -				rc = 0; -			} -		} -		if (((hw_p->emac_ier & emac_isr) != 0) || ((MAL_UIC_ERR & my_uicmsr) != 0)) { -			mtdcr (uicsr, MAL_UIC_DEF | SEL_UIC_DEF(hw_p->devnum)); /* Clear */ -			return (rc);		/* we had errors so get out */ -		} +				/* clear MAL interrupt status bits */ +				mtdcr(UIC_BASE_MAL + UIC_SR, UIC_MAL_RXEOB); -		/* handle MAX TX EOB interrupt from a tx */ -		if (my_uicmsr & UIC_MAL_TXEOB) { -			mal_rx_eob = mfdcr (maltxeobisr); -			mtdcr (maltxeobisr, mal_rx_eob); -			mtdcr (uicsr, UIC_MAL_TXEOB); -		} -		/* handle MAL RX EOB  interupt from a receive */ -		/* check for EOB on valid channels	      */ -		if (my_uicmsr & UIC_MAL_RXEOB) -		{ -			mal_rx_eob = mfdcr (malrxeobisr); -			if ((mal_rx_eob & (0x80000000 >> hw_p->devnum)) != 0) { /* call emac routine for channel x */ -				/* clear EOB -				 mtdcr(malrxeobisr, mal_rx_eob); */ -				enet_rcv (dev, emac_isr);  				/* indicate that we serviced an interrupt */  				serviced = 1;  				rc = 0;  			}  		} -		mtdcr (uicsr, MAL_UIC_DEF|EMAC_UIC_DEF|EMAC_UIC_DEF1);	/* Clear */ -#if defined(CONFIG_405EZ) -		mtsdr (sdricintstat, SDR_ICRX_STAT | SDR_ICTX0_STAT | SDR_ICTX1_STAT); -#endif	/* defined(CONFIG_405EZ) */ -	} -	while (serviced); +	} while (serviced);  	return (rc);  } -#endif /* CONFIG_440 */ -  /*-----------------------------------------------------------------------------+   *  MAL Error Routine   *-----------------------------------------------------------------------------*/ @@ -1883,6 +1766,7 @@ int ppc_4xx_eth_initialize (bd_t * bis)  	EMAC_4XX_HW_PST hw = NULL;  	u8 ethaddr[4 + CONFIG_EMAC_NR_START][6];  	u32 hw_addr[4]; +	u32 mal_ier;  #if defined(CONFIG_440GX)  	unsigned long pfc1; @@ -2020,19 +1904,19 @@ int ppc_4xx_eth_initialize (bd_t * bis)  			mtdcr (malier, mal_ier);  			/* install MAL interrupt handler */ -			irq_install_handler (VECNUM_MS, +			irq_install_handler (VECNUM_MAL_SERR,  					     (interrupt_handler_t *) enetInt,  					     dev); -			irq_install_handler (VECNUM_MTE, +			irq_install_handler (VECNUM_MAL_TXEOB,  					     (interrupt_handler_t *) enetInt,  					     dev); -			irq_install_handler (VECNUM_MRE, +			irq_install_handler (VECNUM_MAL_RXEOB,  					     (interrupt_handler_t *) enetInt,  					     dev); -			irq_install_handler (VECNUM_TXDE, +			irq_install_handler (VECNUM_MAL_TXDE,  					     (interrupt_handler_t *) enetInt,  					     dev); -			irq_install_handler (VECNUM_RXDE, +			irq_install_handler (VECNUM_MAL_RXDE,  					     (interrupt_handler_t *) enetInt,  					     dev);  			virgin = 1; diff --git a/cpu/ppc4xx/4xx_uart.c b/cpu/ppc4xx/4xx_uart.c index a7587d435..766e58680 100644 --- a/cpu/ppc4xx/4xx_uart.c +++ b/cpu/ppc4xx/4xx_uart.c @@ -46,7 +46,7 @@  #include <asm/processor.h>  #include <asm/io.h>  #include <watchdog.h> -#include <asm/ppc4xx-intvec.h> +#include <ppc4xx.h>  #ifdef CONFIG_SERIAL_MULTI  #include <serial.h> diff --git a/cpu/ppc4xx/Makefile b/cpu/ppc4xx/Makefile index 800bb41d0..c773400a5 100644 --- a/cpu/ppc4xx/Makefile +++ b/cpu/ppc4xx/Makefile @@ -35,10 +35,8 @@ SOBJS	+= kgdb.o  COBJS	:= 40x_spd_sdram.o  COBJS	+= 44x_spd_ddr.o  COBJS	+= 44x_spd_ddr2.o -COBJS	+= 4xx_enet.o  COBJS	+= 4xx_pci.o  COBJS	+= 4xx_pcie.o -COBJS	+= 4xx_uart.o  COBJS	+= bedbug_405.o  COBJS	+= commproc.o  COBJS	+= cpu.o @@ -47,11 +45,9 @@ COBJS	+= denali_data_eye.o  COBJS	+= denali_spd_ddr2.o  COBJS	+= ecc.o  COBJS	+= fdt.o -COBJS	+= gpio.o  COBJS	+= i2c.o  COBJS	+= interrupts.o  COBJS	+= iop480_uart.o -COBJS	+= miiphy.o  COBJS	+= ndfc.o  COBJS	+= sdram.o  COBJS	+= speed.o @@ -60,6 +56,15 @@ COBJS	+= traps.o  COBJS	+= usb.o  COBJS	+= usb_ohci.o  COBJS	+= usbdev.o +ifndef CONFIG_XILINX_440 +COBJS	+= 4xx_enet.o +COBJS	+= 4xx_uart.o +COBJS	+= gpio.o +COBJS	+= miiphy.o +COBJS	+= uic.o +else +COBJS	+= xilinx_irq.o +endif  SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) diff --git a/cpu/ppc4xx/cpu.c b/cpu/ppc4xx/cpu.c index 39f439df9..bc9335a05 100644 --- a/cpu/ppc4xx/cpu.c +++ b/cpu/ppc4xx/cpu.c @@ -184,6 +184,19 @@ static char *bootstrap_str[] = {  static char bootstrap_char[] = { 'A', 'B', 'C', 'D', 'E', 'G', 'F', 'H' };  #endif +#if defined(CONFIG_460SX) +#define SDR0_PINSTP_SHIFT	29 +static char *bootstrap_str[] = { +	"EBC (8 bits)", +	"EBC (16 bits)", +	"EBC (32 bits)", +	"NAND (8 bits)", +	"I2C (Addr 0x54)",      /* A8 */ +	"I2C (Addr 0x52)",      /* A4 */ +}; +static char bootstrap_char[] = { 'A', 'B', 'C', 'D', 'E', 'G' }; +#endif +  #if defined(CONFIG_405EZ)  #define SDR0_PINSTP_SHIFT	28  static char *bootstrap_str[] = { @@ -266,7 +279,11 @@ int checkcpu (void)  	get_sys_info(&sys_info); +#if defined(CONFIG_XILINX_440) +	puts("IBM PowerPC 4"); +#else  	puts("AMCC PowerPC 4"); +#endif  #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \      defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \ @@ -509,6 +526,30 @@ int checkcpu (void)  		strcpy(addstr, "Security/Kasumi support");  		break; +	case PVR_460SX_RA: +		puts("SX Rev. A"); +		strcpy(addstr, "Security support"); +		break; + +	case PVR_460SX_RA_V1: +		puts("SX Rev. A"); +		strcpy(addstr, "No Security support"); +		break; + +	case PVR_460GX_RA: +		puts("GX Rev. A"); +		strcpy(addstr, "Security support"); +		break; + +	case PVR_460GX_RA_V1: +		puts("GX Rev. A"); +		strcpy(addstr, "No Security support"); +		break; + +	case PVR_VIRTEX5: +		puts("x5 VIRTEX5"); +		break; +  	default:  		printf (" UNKNOWN (PVR=%08x)", pvr);  		break; diff --git a/cpu/ppc4xx/cpu_init.c b/cpu/ppc4xx/cpu_init.c index ac6427905..e2d040278 100644 --- a/cpu/ppc4xx/cpu_init.c +++ b/cpu/ppc4xx/cpu_init.c @@ -138,9 +138,10 @@ void reconfigure_pll(u32 new_cpu_freq)  void  cpu_init_f (void)  { -#if defined(CONFIG_WATCHDOG) || defined(CONFIG_460EX) +#if defined(CONFIG_WATCHDOG) || defined(CONFIG_440GX) || defined(CONFIG_460EX)  	u32 val;  #endif +  	reconfigure_pll(CFG_PLL_RECONFIG);  #if (defined(CONFIG_405EP) || defined (CONFIG_405EX)) && !defined(CFG_4xx_GPIO_TABLE) @@ -273,6 +274,18 @@ cpu_init_f (void)  	reset_4xx_watchdog();  #endif /* CONFIG_WATCHDOG */ +#if defined(CONFIG_440GX) +	/* Take the GX out of compatibility mode +	 * Travis Sawyer, 9 Mar 2004 +	 * NOTE: 440gx user manual inconsistency here +	 *       Compatibility mode and Ethernet Clock select are not +	 *       correct in the manual +	 */ +	mfsdr(sdr_mfr, val); +	val &= ~0x10000000; +	mtsdr(sdr_mfr,val); +#endif /* CONFIG_440GX */ +  #if defined(CONFIG_460EX)  	/*  	 * Set SDR0_AHB_CFG[A2P_INCR4] (bit 24) and diff --git a/cpu/ppc4xx/interrupts.c b/cpu/ppc4xx/interrupts.c index 8620e2b48..494bd8c9e 100644 --- a/cpu/ppc4xx/interrupts.c +++ b/cpu/ppc4xx/interrupts.c @@ -8,6 +8,10 @@   * (C) Copyright 2003 (440GX port)   * Travis B. Sawyer, Sandburst Corporation, tsawyer@sandburst.com   * + * (C) Copyright 2008 (PPC440X05 port for Virtex 5 FX) + * Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * Work supported by Qtechnology (htpp://qtec.com) + *   * See file CREDITS for list of people who contributed to this   * project.   * @@ -31,31 +35,14 @@  #include <watchdog.h>  #include <command.h>  #include <asm/processor.h> +#include <asm/interrupt.h>  #include <ppc4xx.h>  #include <ppc_asm.tmpl>  #include <commproc.h> -#include <asm/ppc4xx-intvec.h>  DECLARE_GLOBAL_DATA_PTR;  /* - * Define the number of UIC's - */ -#if defined(CONFIG_440SPE) || \ -    defined(CONFIG_460EX) || defined(CONFIG_460GT) -#define UIC_MAX		4 -#elif defined(CONFIG_440GX) || \ -    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ -    defined(CONFIG_405EX) -#define UIC_MAX		3 -#elif defined(CONFIG_440GP) || defined(CONFIG_440SP) || \ -    defined(CONFIG_440EP) || defined(CONFIG_440GR) -#define UIC_MAX		2 -#else -#define UIC_MAX		1 -#endif - -/*   * CPM interrupt vector functions.   */  struct	irq_action { @@ -63,15 +50,7 @@ struct	irq_action {  	void *arg;  	int count;  }; - -static struct irq_action irq_vecs[UIC_MAX * 32]; - -u32 get_dcr(u16); -void set_dcr(u16, u32); - -#if (UIC_MAX > 1) && !defined(CONFIG_440GX) -static void uic_cascade_interrupt(void *para); -#endif +static struct irq_action irq_vecs[IRQ_MAX];  #if defined(CONFIG_440) @@ -112,7 +91,7 @@ int interrupt_init_cpu (unsigned *decrementer_count)  	/*  	 * Mark all irqs as free  	 */ -	for (vec = 0; vec < (UIC_MAX * 32); vec++) { +	for (vec = 0; vec < IRQ_MAX; vec++) {  		irq_vecs[vec].handler = NULL;  		irq_vecs[vec].arg = NULL;  		irq_vecs[vec].count = 0; @@ -156,160 +135,38 @@ int interrupt_init_cpu (unsigned *decrementer_count)  	 */  	set_evpr(0x00000000); -#if !defined(CONFIG_440GX) -#if (UIC_MAX > 1) -	/* Install the UIC1 handlers */ -	irq_install_handler(VECNUM_UIC1NC, uic_cascade_interrupt, 0); -	irq_install_handler(VECNUM_UIC1C, uic_cascade_interrupt, 0); -#endif -#if (UIC_MAX > 2) -	irq_install_handler(VECNUM_UIC2NC, uic_cascade_interrupt, 0); -	irq_install_handler(VECNUM_UIC2C, uic_cascade_interrupt, 0); -#endif -#if (UIC_MAX > 3) -	irq_install_handler(VECNUM_UIC3NC, uic_cascade_interrupt, 0); -	irq_install_handler(VECNUM_UIC3C, uic_cascade_interrupt, 0); -#endif -#else /* !defined(CONFIG_440GX) */ -	/* Take the GX out of compatibility mode -	 * Travis Sawyer, 9 Mar 2004 -	 * NOTE: 440gx user manual inconsistency here -	 *       Compatibility mode and Ethernet Clock select are not -	 *       correct in the manual +	/* +	 * Call uic or xilinx_irq pic_enable  	 */ -	mfsdr(sdr_mfr, val); -	val &= ~0x10000000; -	mtsdr(sdr_mfr,val); - -	/* Enable UIC interrupts via UIC Base Enable Register */ -	mtdcr(uicb0sr, UICB0_ALL); -	mtdcr(uicb0er, 0x54000000); -	/* None are critical */ -	mtdcr(uicb0cr, 0); -#endif /* !defined(CONFIG_440GX) */ +	pic_enable();  	return (0);  } -/* Handler for UIC interrupt */ -static void uic_interrupt(u32 uic_base, int vec_base) +void timer_interrupt_cpu(struct pt_regs *regs)  { -	u32 uic_msr; -	u32 msr_shift; -	int vec; - -	/* -	 * Read masked interrupt status register to determine interrupt source -	 */ -	uic_msr = get_dcr(uic_base + UIC_MSR); -	msr_shift = uic_msr; -	vec = vec_base; - -	while (msr_shift != 0) { -		if (msr_shift & 0x80000000) { -			/* -			 * Increment irq counter (for debug purpose only) -			 */ -			irq_vecs[vec].count++; - -			if (irq_vecs[vec].handler != NULL) { -				/* call isr */ -				(*irq_vecs[vec].handler)(irq_vecs[vec].arg); -			} else { -				set_dcr(uic_base + UIC_ER, -					get_dcr(uic_base + UIC_ER) & -					~(0x80000000 >> (vec & 0x1f))); -				printf("Masking bogus interrupt vector %d" -				       " (UIC_BASE=0x%x)\n", vec, uic_base); -			} - -			/* -			 * After servicing the interrupt, we have to remove the -			 * status indicator -			 */ -			set_dcr(uic_base + UIC_SR, (0x80000000 >> (vec & 0x1f))); -		} - -		/* -		 * Shift msr to next position and increment vector -		 */ -		msr_shift <<= 1; -		vec++; -	} +	/* nothing to do here */ +	return;  } -#if (UIC_MAX > 1) && !defined(CONFIG_440GX) -static void uic_cascade_interrupt(void *para) +void interrupt_run_handler(int vec)  { -	external_interrupt(para); -} -#endif - -#if defined(CONFIG_440) -#if defined(CONFIG_440GX) -/* 440GX uses base uic register */ -#define UIC_BMSR	uicb0msr -#define UIC_BSR		uicb0sr -#else -#define UIC_BMSR	uic0msr -#define UIC_BSR		uic0sr -#endif -#else /* CONFIG_440 */ -#define UIC_BMSR	uicmsr -#define UIC_BSR		uicsr -#endif /* CONFIG_440 */ +	irq_vecs[vec].count++; -/* - * Handle external interrupts - */ -void external_interrupt(struct pt_regs *regs) -{ -	u32 uic_msr; - -	/* -	 * Read masked interrupt status register to determine interrupt source -	 */ -	uic_msr = mfdcr(UIC_BMSR); - -#if (UIC_MAX > 1) -	if ((UICB0_UIC1CI & uic_msr) || (UICB0_UIC1NCI & uic_msr)) -		uic_interrupt(UIC1_DCR_BASE, 32); -#endif - -#if (UIC_MAX > 2) -	if ((UICB0_UIC2CI & uic_msr) || (UICB0_UIC2NCI & uic_msr)) -		uic_interrupt(UIC2_DCR_BASE, 64); -#endif - -#if (UIC_MAX > 3) -	if ((UICB0_UIC3CI & uic_msr) || (UICB0_UIC3NCI & uic_msr)) -		uic_interrupt(UIC3_DCR_BASE, 96); -#endif - -#if defined(CONFIG_440) -#if !defined(CONFIG_440GX) -	if (uic_msr & ~(UICB0_ALL)) -		uic_interrupt(UIC0_DCR_BASE, 0); -#else -	if ((UICB0_UIC0CI & uic_msr) || (UICB0_UIC0NCI & uic_msr)) -		uic_interrupt(UIC0_DCR_BASE, 0); -#endif -#else /* CONFIG_440 */ -	uic_interrupt(UIC0_DCR_BASE, 0); -#endif /* CONFIG_440 */ - -	mtdcr(UIC_BSR, uic_msr); +	if (irq_vecs[vec].handler != NULL) { +		/* call isr */ +		(*irq_vecs[vec].handler) (irq_vecs[vec].arg); +	} else { +		pic_irq_disable(vec); +		printf("Masking bogus interrupt vector %d\n", vec); +	} +	pic_irq_ack(vec);  	return;  } -/* - * Install and free a interrupt handler. - */  void irq_install_handler(int vec, interrupt_handler_t * handler, void *arg)  { -	int i; -  	/*  	 * Print warning when replacing with a different irq vector  	 */ @@ -320,55 +177,19 @@ void irq_install_handler(int vec, interrupt_handler_t * handler, void *arg)  	irq_vecs[vec].handler = handler;  	irq_vecs[vec].arg = arg; -	i = vec & 0x1f; -	if ((vec >= 0) && (vec < 32)) -		mtdcr(uicer, mfdcr(uicer) | (0x80000000 >> i)); -#if (UIC_MAX > 1) -	else if ((vec >= 32) && (vec < 64)) -		mtdcr(uic1er, mfdcr(uic1er) | (0x80000000 >> i)); -#endif -#if (UIC_MAX > 2) -	else if ((vec >= 64) && (vec < 96)) -		mtdcr(uic2er, mfdcr(uic2er) | (0x80000000 >> i)); -#endif -#if (UIC_MAX > 3) -	else if (vec >= 96) -		mtdcr(uic3er, mfdcr(uic3er) | (0x80000000 >> i)); -#endif - -	debug("Install interrupt for vector %d ==> %p\n", vec, handler); +	pic_irq_enable(vec); +	return;  } -void irq_free_handler (int vec) +void irq_free_handler(int vec)  { -	int i; -  	debug("Free interrupt for vector %d ==> %p\n",  	      vec, irq_vecs[vec].handler); -	i = vec & 0x1f; -	if ((vec >= 0) && (vec < 32)) -		mtdcr(uicer, mfdcr(uicer) & ~(0x80000000 >> i)); -#if (UIC_MAX > 1) -	else if ((vec >= 32) && (vec < 64)) -		mtdcr(uic1er, mfdcr(uic1er) & ~(0x80000000 >> i)); -#endif -#if (UIC_MAX > 2) -	else if ((vec >= 64) && (vec < 96)) -		mtdcr(uic2er, mfdcr(uic2er) & ~(0x80000000 >> i)); -#endif -#if (UIC_MAX > 3) -	else if (vec >= 96) -		mtdcr(uic3er, mfdcr(uic3er) & ~(0x80000000 >> i)); -#endif +	pic_irq_disable(vec);  	irq_vecs[vec].handler = NULL;  	irq_vecs[vec].arg = NULL; -} - -void timer_interrupt_cpu (struct pt_regs *regs) -{ -	/* nothing to do here */  	return;  } @@ -380,7 +201,7 @@ int do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	printf ("Interrupt-Information:\n");  	printf ("Nr  Routine   Arg       Count\n"); -	for (vec = 0; vec < (UIC_MAX * 32); vec++) { +	for (vec = 0; vec < IRQ_MAX; vec++) {  		if (irq_vecs[vec].handler != NULL) {  			printf ("%02d  %08lx  %08lx  %d\n",  				vec, diff --git a/cpu/ppc4xx/iop480_uart.c b/cpu/ppc4xx/iop480_uart.c index 3af0767c5..0e3423f7a 100644 --- a/cpu/ppc4xx/iop480_uart.c +++ b/cpu/ppc4xx/iop480_uart.c @@ -26,7 +26,6 @@  #include <asm/processor.h>  #include <asm/io.h>  #include <watchdog.h> -#include <asm/ppc4xx-intvec.h>  #ifdef CONFIG_SERIAL_MULTI  #include <serial.h> diff --git a/cpu/ppc4xx/speed.c b/cpu/ppc4xx/speed.c index 34bd7214e..d21bd82dc 100644 --- a/cpu/ppc4xx/speed.c +++ b/cpu/ppc4xx/speed.c @@ -205,7 +205,8 @@ ulong get_PCI_freq (void)  #elif defined(CONFIG_440) -#if defined(CONFIG_460EX) || defined(CONFIG_460GT) +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  static u8 pll_fwdv_multi_bits[] = {  	/* values for:  1 - 16 */  	0x00, 0x01, 0x0f, 0x04, 0x09, 0x0a, 0x0d, 0x0e, 0x03, 0x0c, @@ -415,7 +416,8 @@ ulong get_PCI_freq (void)  	return sys_info.freqPCI;  } -#elif !defined(CONFIG_440GX) && !defined(CONFIG_440SP) && !defined(CONFIG_440SPE) +#elif !defined(CONFIG_440GX) && !defined(CONFIG_440SP) && !defined(CONFIG_440SPE) \ +	&& !defined(CONFIG_XILINX_440)  void get_sys_info (sys_info_t * sysInfo)  {  	unsigned long strp0; @@ -448,6 +450,8 @@ void get_sys_info (sys_info_t * sysInfo)  	sysInfo->freqUART = sysInfo->freqPLB;  }  #else + +#if !defined(CONFIG_XILINX_440)  void get_sys_info (sys_info_t * sysInfo)  {  	unsigned long strp0; @@ -534,6 +538,7 @@ void get_sys_info (sys_info_t * sysInfo)  }  #endif +#endif /* CONFIG_XILINX_440 */  #if defined(CONFIG_YUCCA)  unsigned long determine_sysper(void) diff --git a/cpu/ppc4xx/start.S b/cpu/ppc4xx/start.S index 426bf3c6f..97411bdb9 100644 --- a/cpu/ppc4xx/start.S +++ b/cpu/ppc4xx/start.S @@ -677,7 +677,8 @@ _start:  	/* not all PPC's have internal SRAM usable as L2-cache */  #if defined(CONFIG_440GX) || \      defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ -    defined(CONFIG_460EX) || defined(CONFIG_460GT) +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  	mtdcr	l2_cache_cfg,r0		/* Ensure L2 Cache is off */  #endif @@ -720,6 +721,19 @@ _start:  	lis	r1,0x4000		/* BAS = 8000_0000 */  	ori	r1,r1,0x4580		/* 16k */  	mtdcr	isram0_sb0cr,r1 +#elif defined(CONFIG_460SX) +	lis     r1,0x0000               /* BAS = 0000_0000 */ +	ori     r1,r1,0x0B84            /* first 128k */ +	mtdcr   isram0_sb0cr,r1 +	lis     r1,0x0001 +	ori     r1,r1,0x0B84            /* second 128k */ +	mtdcr   isram0_sb1cr,r1 +	lis     r1, 0x0002 +	ori     r1,r1, 0x0B84           /* third 128k */ +	mtdcr   isram0_sb2cr,r1 +	lis     r1, 0x0003 +	ori     r1,r1, 0x0B84           /* fourth 128k */ +	mtdcr   isram0_sb3cr,r1  #elif defined(CONFIG_440GP)  	ori	r1,r1,0x0380		/* 8k rw */  	mtdcr	isram0_sb0cr,r1 @@ -1415,7 +1429,8 @@ relocate_code:  #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \      defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \      defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ -    defined(CONFIG_460EX) || defined(CONFIG_460GT) +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  	/*  	 * On some 440er platforms the cache is enabled in the first TLB (Boot-CS)  	 * to speed up the boot process. Now this cache needs to be disabled. diff --git a/cpu/ppc4xx/uic.c b/cpu/ppc4xx/uic.c new file mode 100644 index 000000000..7944c6c3c --- /dev/null +++ b/cpu/ppc4xx/uic.c @@ -0,0 +1,180 @@ +/* + * (C) Copyright 2000-2002 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * (C) Copyright 2002 (440 port) + * Scott McNutt, Artesyn Communication Producs, smcnutt@artsyncp.com + * + * (C) Copyright 2003 (440GX port) + * Travis B. Sawyer, Sandburst Corporation, tsawyer@sandburst.com + * + * (C) Copyright 2008 (PPC440X05 port for Virtex 5 FX) + * Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * Work supported by Qtechnology (htpp://qtec.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 <watchdog.h> +#include <command.h> +#include <asm/processor.h> +#include <asm/interrupt.h> +#include <ppc4xx.h> +#include <ppc_asm.tmpl> +#include <commproc.h> + +#if (UIC_MAX > 3) +#define UICB0_ALL	(UIC_MASK(VECNUM_UIC1CI) | UIC_MASK(VECNUM_UIC1NCI) | \ +			 UIC_MASK(VECNUM_UIC2CI) | UIC_MASK(VECNUM_UIC2NCI) | \ +			 UIC_MASK(VECNUM_UIC3CI) | UIC_MASK(VECNUM_UIC3NCI)) +#elif (UIC_MAX > 2) +#define UICB0_ALL	(UIC_MASK(VECNUM_UIC1CI) | UIC_MASK(VECNUM_UIC1NCI) | \ +			 UIC_MASK(VECNUM_UIC2CI) | UIC_MASK(VECNUM_UIC2NCI)) +#elif (UIC_MAX > 1) +#define UICB0_ALL	(UIC_MASK(VECNUM_UIC1CI) | UIC_MASK(VECNUM_UIC1NCI)) +#else +#define UICB0_ALL	0 +#endif + +u32 get_dcr(u16); + +DECLARE_GLOBAL_DATA_PTR; + +void pic_enable(void) +{ +#if (UIC_MAX > 1) +	/* Install the UIC1 handlers */ +	irq_install_handler(VECNUM_UIC1NCI, (void *)(void *)external_interrupt, 0); +	irq_install_handler(VECNUM_UIC1CI, (void *)(void *)external_interrupt, 0); +#endif +#if (UIC_MAX > 2) +	irq_install_handler(VECNUM_UIC2NCI, (void *)(void *)external_interrupt, 0); +	irq_install_handler(VECNUM_UIC2CI, (void *)(void *)external_interrupt, 0); +#endif +#if (UIC_MAX > 3) +	irq_install_handler(VECNUM_UIC3NCI, (void *)(void *)external_interrupt, 0); +	irq_install_handler(VECNUM_UIC3CI, (void *)(void *)external_interrupt, 0); +#endif +} + +/* Handler for UIC interrupt */ +static void uic_interrupt(u32 uic_base, int vec_base) +{ +	u32 uic_msr; +	u32 msr_shift; +	int vec; + +	/* +	 * Read masked interrupt status register to determine interrupt source +	 */ +	uic_msr = get_dcr(uic_base + UIC_MSR); +	msr_shift = uic_msr; +	vec = vec_base; + +	while (msr_shift != 0) { +		if (msr_shift & 0x80000000) +			interrupt_run_handler(vec); +		/* +		 * Shift msr to next position and increment vector +		 */ +		msr_shift <<= 1; +		vec++; +	} +} + +/* + * Handle external interrupts + */ +void external_interrupt(struct pt_regs *regs) +{ +	u32 uic_msr; + +	/* +	 * Read masked interrupt status register to determine interrupt source +	 */ +	uic_msr = mfdcr(uic0msr); + +#if (UIC_MAX > 1) +	if ((UIC_MASK(VECNUM_UIC1CI) & uic_msr) || +	    (UIC_MASK(VECNUM_UIC1NCI) & uic_msr)) +		uic_interrupt(UIC1_DCR_BASE, 32); +#endif + +#if (UIC_MAX > 2) +	if ((UIC_MASK(VECNUM_UIC2CI) & uic_msr) || +	    (UIC_MASK(VECNUM_UIC2NCI) & uic_msr)) +		uic_interrupt(UIC2_DCR_BASE, 64); +#endif + +#if (UIC_MAX > 3) +	if ((UIC_MASK(VECNUM_UIC3CI) & uic_msr) || +	    (UIC_MASK(VECNUM_UIC3NCI) & uic_msr)) +		uic_interrupt(UIC3_DCR_BASE, 96); +#endif + +	if (uic_msr & ~(UICB0_ALL)) +		uic_interrupt(UIC0_DCR_BASE, 0); + +	mtdcr(uic0sr, uic_msr); + +	return; +} + +void pic_irq_ack(unsigned int vec) +{ +	if ((vec >= 0) && (vec < 32)) +		mtdcr(uicsr, UIC_MASK(vec)); +	else if ((vec >= 32) && (vec < 64)) +		mtdcr(uic1sr, UIC_MASK(vec)); +	else if ((vec >= 64) && (vec < 96)) +		mtdcr(uic2sr, UIC_MASK(vec)); +	else if (vec >= 96) +		mtdcr(uic3sr, UIC_MASK(vec)); +} + +/* + * Install and free a interrupt handler. + */ +void pic_irq_enable(unsigned int vec) +{ + +	if ((vec >= 0) && (vec < 32)) +		mtdcr(uicer, mfdcr(uicer) | UIC_MASK(vec)); +	else if ((vec >= 32) && (vec < 64)) +		mtdcr(uic1er, mfdcr(uic1er) | UIC_MASK(vec)); +	else if ((vec >= 64) && (vec < 96)) +		mtdcr(uic2er, mfdcr(uic2er) | UIC_MASK(vec)); +	else if (vec >= 96) +		mtdcr(uic3er, mfdcr(uic3er) | UIC_MASK(vec)); + +	debug("Install interrupt for vector %d ==> %p\n", vec, handler); +} + +void pic_irq_disable(unsigned int vec) +{ +	if ((vec >= 0) && (vec < 32)) +		mtdcr(uicer, mfdcr(uicer) & ~UIC_MASK(vec)); +	else if ((vec >= 32) && (vec < 64)) +		mtdcr(uic1er, mfdcr(uic1er) & ~UIC_MASK(vec)); +	else if ((vec >= 64) && (vec < 96)) +		mtdcr(uic2er, mfdcr(uic2er) & ~UIC_MASK(vec)); +	else if (vec >= 96) +		mtdcr(uic3er, mfdcr(uic3er) & ~UIC_MASK(vec)); +} diff --git a/cpu/ppc4xx/usbdev.c b/cpu/ppc4xx/usbdev.c index d71ba7710..faf7f0878 100644 --- a/cpu/ppc4xx/usbdev.c +++ b/cpu/ppc4xx/usbdev.c @@ -6,8 +6,8 @@  #if (defined(CONFIG_440EP) || defined(CONFIG_440EPX)) && defined(CONFIG_CMD_USB)  #include <usb.h> +#include <asm/ppc4xx-uic.h>  #include "usbdev.h" -#include <asm/ppc4xx-intvec.h>  #define USB_DT_DEVICE        0x01  #define USB_DT_CONFIG        0x02 @@ -197,7 +197,7 @@ void usb_dev_init()  	/*enable interrupts */  	*(unsigned char *)USB2D0_INTRUSBE_8 = 0x0f; -	irq_install_handler(VECNUM_HSB2D, (interrupt_handler_t *) usbInt, +	irq_install_handler(VECNUM_USBDEV, (interrupt_handler_t *) usbInt,  			    NULL);  }  #else diff --git a/cpu/ppc4xx/xilinx_irq.c b/cpu/ppc4xx/xilinx_irq.c new file mode 100644 index 000000000..71087771c --- /dev/null +++ b/cpu/ppc4xx/xilinx_irq.c @@ -0,0 +1,100 @@ +/* + * (C) Copyright 2008 + * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * This work has been supported by: QTechnology  http://qtec.com/ + * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de + * 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, see <http://www.gnu.org/licenses/>. +*/ +#include <common.h> +#include <watchdog.h> +#include <command.h> +#include <asm/processor.h> +#include <asm/interrupt.h> +#include <ppc4xx.h> +#include <ppc_asm.tmpl> +#include <commproc.h> +#include <asm/io.h> +#include <asm/xilinx_irq.h> + +DECLARE_GLOBAL_DATA_PTR; + +void pic_enable(void) +{ +	debug("Xilinx PIC at 0x%8x\n", intc); + +	/* +	 * Disable all external interrupts until they are +	 * explicitly requested. +	 */ +	out_be32((u32 *) IER, 0); + +	/* Acknowledge any pending interrupts just in case. */ +	out_be32((u32 *) IAR, 0xffffffff); + +	/* Turn on the Master Enable. */ +	out_be32((u32 *) MER, 0x3UL); + +	return; +} + +int xilinx_pic_irq_get(void) +{ +	u32 irq; +	irq = in_be32((u32 *) IVR); + +	/* If no interrupt is pending then all bits of the IVR are set to 1. As +	 * the IVR is as many bits wide as numbers of inputs are available. +	 * Therefore, if all bits of the IVR are set to one, its content will +	 * be bigger than XPAR_INTC_MAX_NUM_INTR_INPUTS. +	 */ +	if (irq >= XPAR_INTC_MAX_NUM_INTR_INPUTS) +		irq = -1;	/* report no pending interrupt. */ + +	debug("get_irq: %d\n", irq); +	return (irq); +} + +void pic_irq_enable(unsigned int irq) +{ +	u32 mask = IRQ_MASK(irq); +	debug("enable: %d\n", irq); +	out_be32((u32 *) SIE, mask); +} + +void pic_irq_disable(unsigned int irq) +{ +	u32 mask = IRQ_MASK(irq); +	debug("disable: %d\n", irq); +	out_be32((u32 *) CIE, mask); +} + +void pic_irq_ack(unsigned int irq) +{ +	u32 mask = IRQ_MASK(irq); +	debug("ack: %d\n", irq); +	out_be32((u32 *) IAR, mask); +} + +void external_interrupt(struct pt_regs *regs) +{ +	int irq; + +	irq = xilinx_pic_irq_get(); +	if (irq < 0) +		return; + +	interrupt_run_handler(irq); + +	return; +} diff --git a/include/asm-ppc/interrupt.h b/include/asm-ppc/interrupt.h new file mode 100644 index 000000000..792836b22 --- /dev/null +++ b/include/asm-ppc/interrupt.h @@ -0,0 +1,36 @@ +/* + * (C) Copyright 2008 + * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * This work has been supported by: QTechnology  http://qtec.com/ + * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de + * + * 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, see <http://www.gnu.org/licenses/>. +*/ +#ifndef INTERRUPT_H +#define INTERRUPT_H + +#if defined(CONFIG_XILINX_440) +#include <asm/xilinx_irq.h> +#else +#include <asm/ppc4xx-uic.h> +#endif + +void pic_enable(void); +void pic_irq_enable(unsigned int irq); +void pic_irq_disable(unsigned int irq); +void pic_irq_ack(unsigned int irq); +void external_interrupt(struct pt_regs *regs); +void interrupt_run_handler(int vec); + +#endif diff --git a/include/asm-ppc/ppc4xx-ebc.h b/include/asm-ppc/ppc4xx-ebc.h new file mode 100644 index 000000000..d180e045f --- /dev/null +++ b/include/asm-ppc/ppc4xx-ebc.h @@ -0,0 +1,156 @@ +/* + * (C) Copyright 2008 + * Stefan Roese, DENX Software Engineering, sr@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 + */ + +#ifndef _PPC4xx_EBC_H_ +#define _PPC4xx_EBC_H_ + +/* + * Currently there are two register layout versions for the + * IBM EBC core used on 4xx PPC's: + */ +#if defined(CONFIG_405CR) || defined(CONFIG_405GP) || \ +    defined(CONFIG_405EP) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) +#define CONFIG_EBC_PPC4xx_IBM_VER1 +#endif + +/* Bank Configuration Register */ +#define	EBC_BXCR_BAS_MASK	PPC_REG_VAL(11, 0xFFF) +#define EBC_BXCR_BAS_ENCODE(n)	(((static_cast(u32, n)) & EBC_BXCR_BAS_MASK)) +#define EBC_BXCR_BS_MASK	PPC_REG_VAL(14, 0x7) +#define EBC_BXCR_BS_1MB		PPC_REG_VAL(14, 0x0) +#define EBC_BXCR_BS_2MB		PPC_REG_VAL(14, 0x1) +#define EBC_BXCR_BS_4MB		PPC_REG_VAL(14, 0x2) +#define EBC_BXCR_BS_8MB		PPC_REG_VAL(14, 0x3) +#define EBC_BXCR_BS_16MB	PPC_REG_VAL(14, 0x4) +#define EBC_BXCR_BS_32MB	PPC_REG_VAL(14, 0x5) +#define EBC_BXCR_BS_64MB	PPC_REG_VAL(14, 0x6) +#define EBC_BXCR_BS_128MB	PPC_REG_VAL(14, 0x7) +#define EBC_BXCR_BU_MASK	PPC_REG_VAL(16, 0x3) +#define	EBC_BXCR_BU_NONE	PPC_REG_VAL(16, 0x0) +#define EBC_BXCR_BU_R		PPC_REG_VAL(16, 0x1) +#define EBC_BXCR_BU_W		PPC_REG_VAL(16, 0x2) +#define EBC_BXCR_BU_RW		PPC_REG_VAL(16, 0x3) +#define EBC_BXCR_BW_MASK	PPC_REG_VAL(18, 0x3) +#define EBC_BXCR_BW_8BIT	PPC_REG_VAL(18, 0x0) +#define EBC_BXCR_BW_16BIT	PPC_REG_VAL(18, 0x1) +#if defined(CONFIG_EBC_PPC4xx_IBM_VER1) +#define EBC_BXCR_BW_32BIT	PPC_REG_VAL(18, 0x2) +#else +#define EBC_BXCR_BW_32BIT	PPC_REG_VAL(18, 0x3) +#endif + +/* Bank Access Parameter Register */ +#define EBC_BXAP_BME_ENABLED	PPC_REG_VAL(0, 0x1) +#define EBC_BXAP_BME_DISABLED	PPC_REG_VAL(0, 0x0) +#define EBC_BXAP_TWT_ENCODE(n)	PPC_REG_VAL(8, (static_cast(u32, n)) & 0xFF) +#define	EBC_BXAP_FWT_ENCODE(n)	PPC_REG_VAL(5, (static_cast(u32, n)) & 0x1F) +#define	EBC_BXAP_BWT_ENCODE(n)	PPC_REG_VAL(8, (static_cast(u32, n)) & 0x7) +#define EBC_BXAP_BCE_DISABLE	PPC_REG_VAL(9, 0x0) +#define EBC_BXAP_BCE_ENABLE	PPC_REG_VAL(9, 0x1) +#define EBC_BXAP_BCT_MASK	PPC_REG_VAL(11, 0x3) +#define EBC_BXAP_BCT_2TRANS	PPC_REG_VAL(11, 0x0) +#define EBC_BXAP_BCT_4TRANS	PPC_REG_VAL(11, 0x1) +#define EBC_BXAP_BCT_8TRANS	PPC_REG_VAL(11, 0x2) +#define EBC_BXAP_BCT_16TRANS	PPC_REG_VAL(11, 0x3) +#define EBC_BXAP_CSN_ENCODE(n)	PPC_REG_VAL(13, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_OEN_ENCODE(n)	PPC_REG_VAL(15, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_WBN_ENCODE(n)	PPC_REG_VAL(17, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_WBF_ENCODE(n)	PPC_REG_VAL(19, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_TH_ENCODE(n)	PPC_REG_VAL(22, (static_cast(u32, n)) & 0x7) +#define EBC_BXAP_RE_ENABLED	PPC_REG_VAL(23, 0x1) +#define EBC_BXAP_RE_DISABLED	PPC_REG_VAL(23, 0x0) +#define EBC_BXAP_SOR_DELAYED	PPC_REG_VAL(24, 0x0) +#define EBC_BXAP_SOR_NONDELAYED	PPC_REG_VAL(24, 0x1) +#define EBC_BXAP_BEM_WRITEONLY	PPC_REG_VAL(25, 0x0) +#define EBC_BXAP_BEM_RW		PPC_REG_VAL(25, 0x1) +#define EBC_BXAP_PEN_DISABLED	PPC_REG_VAL(26, 0x0) +#define EBC_BXAP_PEN_ENABLED	PPC_REG_VAL(26, 0x1) + +/* Common fields in EBC0_CFG register */ +#define EBC_CFG_PTD_MASK	PPC_REG_VAL(1, 0x1) +#define EBC_CFG_PTD_ENABLE	PPC_REG_VAL(1, 0x0) +#define EBC_CFG_PTD_DISABLE	PPC_REG_VAL(1, 0x1) +#define EBC_CFG_RTC_MASK	PPC_REG_VAL(4, 0x7) +#define EBC_CFG_RTC_16PERCLK	PPC_REG_VAL(4, 0x0) +#define EBC_CFG_RTC_32PERCLK	PPC_REG_VAL(4, 0x1) +#define EBC_CFG_RTC_64PERCLK	PPC_REG_VAL(4, 0x2) +#define EBC_CFG_RTC_128PERCLK	PPC_REG_VAL(4, 0x3) +#define EBC_CFG_RTC_256PERCLK	PPC_REG_VAL(4, 0x4) +#define EBC_CFG_RTC_512PERCLK	PPC_REG_VAL(4, 0x5) +#define EBC_CFG_RTC_1024PERCLK	PPC_REG_VAL(4, 0x6) +#define EBC_CFG_RTC_2048PERCLK	PPC_REG_VAL(4, 0x7) +#define EBC_CFG_PME_MASK	PPC_REG_VAL(14, 0x1) +#define EBC_CFG_PME_DISABLE	PPC_REG_VAL(14, 0x0) +#define EBC_CFG_PME_ENABLE	PPC_REG_VAL(14, 0x1) +#define EBC_CFG_PMT_MASK	PPC_REG_VAL(19, 0x1F) +#define EBC_CFG_PMT_ENCODE(n)	PPC_REG_VAL(19, (static_cast(u32, n)) & 0x1F) + +/* Now the two versions of the other bits */ +#if defined(CONFIG_EBC_PPC4xx_IBM_VER1) +#define EBC_CFG_EBTC_MASK	PPC_REG_VAL(0, 0x1) +#define EBC_CFG_EBTC_HI		PPC_REG_VAL(0, 0x0) +#define EBC_CFG_EBTC_DRIVEN	PPC_REG_VAL(0, 0x1) +#define EBC_CFG_EMPH_MASK	PPC_REG_VAL(6, 0x3) +#define EBC_CFG_EMPH_ENCODE(n)	PPC_REG_VAL(6, (static_cast(u32, n)) & 0x3) +#define EBC_CFG_EMPL_MASK	PPC_REG_VAL(8, 0x3) +#define EBC_CFG_EMPL_ENCODE(n)	PPC_REG_VAL(8, (static_cast(u32, n)) & 0x3) +#define EBC_CFG_CSTC_MASK	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_CSTC_HI		PPC_REG_VAL(9, 0x0) +#define EBC_CFG_CSTC_DRIVEN	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_BPR_MASK	PPC_REG_VAL(11, 0x3) +#define EBC_CFG_BPR_1DW		PPC_REG_VAL(11, 0x0) +#define EBC_CFG_BPR_2DW		PPC_REG_VAL(11, 0x1) +#define EBC_CFG_BPR_4DW		PPC_REG_VAL(11, 0x2) +#define EBC_CFG_EMS_MASK	PPC_REG_VAL(13, 0x3) +#define EBC_CFG_EMS_8BIT	PPC_REG_VAL(13, 0x0) +#define EBC_CFG_EMS_16BIT	PPC_REG_VAL(13, 0x1) +#define EBC_CFG_EMS_32BIT	PPC_REG_VAL(13, 0x2) +#else +#define EBC_CFG_LE_MASK		PPC_REG_VAL(0, 0x1) +#define EBC_CFG_LE_UNLOCK	PPC_REG_VAL(0, 0x0) +#define EBC_CFG_LE_LOCK		PPC_REG_VAL(0, 0x1) +#define EBC_CFG_ATC_MASK	PPC_REG_VAL(5, 0x1) +#define EBC_CFG_ATC_HI		PPC_REG_VAL(5, 0x0) +#define EBC_CFG_ATC_PREVIOUS	PPC_REG_VAL(5, 0x1) +#define EBC_CFG_DTC_MASK	PPC_REG_VAL(6, 0x1) +#define EBC_CFG_DTC_HI		PPC_REG_VAL(6, 0x0) +#define EBC_CFG_DTC_PREVIOUS	PPC_REG_VAL(6, 0x1) +#define EBC_CFG_CTC_MASK	PPC_REG_VAL(7, 0x1) +#define EBC_CFG_CTC_HI		PPC_REG_VAL(7, 0x0) +#define EBC_CFG_CTC_PREVIOUS	PPC_REG_VAL(7, 0x1) +#define EBC_CFG_OEO_MASK	PPC_REG_VAL(8, 0x1) +#define EBC_CFG_OEO_HI		PPC_REG_VAL(8, 0x0) +#define EBC_CFG_OEO_PREVIOUS	PPC_REG_VAL(8, 0x1) +#define EBC_CFG_EMC_MASK	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_EMC_NONDEFAULT	PPC_REG_VAL(9, 0x0) +#define EBC_CFG_EMC_DEFAULT	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_PR_MASK		PPC_REG_VAL(21, 0x3) +#define EBC_CFG_PR_16		PPC_REG_VAL(21, 0x0) +#define EBC_CFG_PR_32		PPC_REG_VAL(21, 0x1) +#define EBC_CFG_PR_64		PPC_REG_VAL(21, 0x2) +#define EBC_CFG_PR_128		PPC_REG_VAL(21, 0x3) +#endif + +#endif /* _PPC4xx_EBC_H_ */ diff --git a/include/asm-ppc/ppc4xx-intvec.h b/include/asm-ppc/ppc4xx-intvec.h deleted file mode 100644 index 5b45de433..000000000 --- a/include/asm-ppc/ppc4xx-intvec.h +++ /dev/null @@ -1,474 +0,0 @@ -/* -*  Copyright (C) 2002 Scott McNutt <smcnutt@artesyncp.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 -*/ - -/* - * Interrupt vector number definitions to ease the - * 405 -- 440 porting pain ;-) - * - * NOTE: They're not all here yet ... update as needed. - * - */ - -#ifndef _VECNUMS_H_ -#define _VECNUMS_H_ - -#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) - -/* UIC 0 */ -#define VECNUM_U0                   0  /* UART 0                        */ -#define VECNUM_U1                   1  /* UART 1                        */ -#define VECNUM_IIC0                 2  /* IIC                           */ -#define VECNUM_KRD                  3  /* Kasumi Ready for data         */ -#define VECNUM_KDA                  4  /* Kasumi Data Available         */ -#define VECNUM_PCRW                 5  /* PCI command register write    */ -#define VECNUM_PPM                  6  /* PCI power management          */ -#define VECNUM_IIC1                 7  /* IIC                           */ -#define VECNUM_SPI                  8  /* SPI                           */ -#define VECNUM_EPCISER              9  /* External PCI SERR             */ -#define VECNUM_MTE                 10  /* MAL TXEOB                     */ -#define VECNUM_MRE                 11  /* MAL RXEOB                     */ -#define VECNUM_D0                  12  /* DMA channel 0                 */ -#define VECNUM_D1                  13  /* DMA channel 1                 */ -#define VECNUM_D2                  14  /* DMA channel 2                 */ -#define VECNUM_D3                  15  /* DMA channel 3                 */ -#define VECNUM_UD0                 16  /* UDMA irq 0                    */ -#define VECNUM_UD1                 17  /* UDMA irq 1                    */ -#define VECNUM_UD2                 18  /* UDMA irq 2                    */ -#define VECNUM_UD3                 19  /* UDMA irq 3                    */ -#define VECNUM_HSB2D               20  /* USB2.0 Device                 */ -#define VECNUM_USBDEV		   20  /* USB 1.1/USB 2.0 Device        */ -#define VECNUM_OHCI1               21  /* USB2.0 Host OHCI irq 1        */ -#define VECNUM_OHCI2               22  /* USB2.0 Host OHCI irq 2        */ -#define VECNUM_EIP94               23  /* Security EIP94                */ -#define VECNUM_ETH0                24  /* Emac 0                        */ -#define VECNUM_ETH1                25  /* Emac 1                        */ -#define VECNUM_EHCI                26  /* USB2.0 Host EHCI              */ -#define VECNUM_EIR4                27  /* External interrupt 4          */ -#define VECNUM_UIC2NC              28  /* UIC2 non-critical interrupt   */ -#define VECNUM_UIC2C               29  /* UIC2 critical interrupt       */ -#define VECNUM_UIC1NC              30  /* UIC1 non-critical interrupt   */ -#define VECNUM_UIC1C               31  /* UIC1 critical interrupt       */ - -/* UIC 1 */ -#define VECNUM_MS           (32 +  0)  /* MAL SERR                      */ -#define VECNUM_MTDE         (32 +  1)  /* MAL TXDE                      */ -#define VECNUM_MRDE         (32 +  2)  /* MAL RXDE                      */ -#define VECNUM_U2           (32 +  3)  /* UART 2                        */ -#define VECNUM_U3           (32 +  4)  /* UART 3                        */ -#define VECNUM_EBCO         (32 +  5)  /* EBCO interrupt status         */ -#define VECNUM_NDFC         (32 +  6)  /* NDFC                          */ -#define VECNUM_KSLE         (32 +  7)  /* KASUMI slave error            */ -#define VECNUM_CT5          (32 +  8)  /* GPT compare timer 5           */ -#define VECNUM_CT6          (32 +  9)  /* GPT compare timer 6           */ -#define VECNUM_PLB34I0      (32 + 10)  /* PLB3X4X MIRQ0                 */ -#define VECNUM_PLB34I1      (32 + 11)  /* PLB3X4X MIRQ1                 */ -#define VECNUM_PLB34I2      (32 + 12)  /* PLB3X4X MIRQ2                 */ -#define VECNUM_PLB34I3      (32 + 13)  /* PLB3X4X MIRQ3                 */ -#define VECNUM_PLB34I4      (32 + 14)  /* PLB3X4X MIRQ4                 */ -#define VECNUM_PLB34I5      (32 + 15)  /* PLB3X4X MIRQ5                 */ -#define VECNUM_CT0          (32 + 16)  /* GPT compare timer 0           */ -#define VECNUM_CT1          (32 + 17)  /* GPT compare timer 1           */ -#define VECNUM_EIR7         (32 + 18)  /* External interrupt 7          */ -#define VECNUM_EIR8         (32 + 19)  /* External interrupt 8          */ -#define VECNUM_EIR9         (32 + 20)  /* External interrupt 9          */ -#define VECNUM_CT2          (32 + 21)  /* GPT compare timer 2           */ -#define VECNUM_CT3          (32 + 22)  /* GPT compare timer 3           */ -#define VECNUM_CT4          (32 + 23)  /* GPT compare timer 4           */ -#define VECNUM_SRE          (32 + 24)  /* Serial ROM error              */ -#define VECNUM_GPTDC        (32 + 25)  /* GPT decrementer pulse         */ -#define VECNUM_RSVD0        (32 + 26)  /* Reserved                      */ -#define VECNUM_EPCIPER      (32 + 27)  /* External PCI PERR             */ -#define VECNUM_EIR0         (32 + 28)  /* External interrupt 0          */ -#define VECNUM_EWU0         (32 + 29)  /* Ethernet 0 wakeup             */ -#define VECNUM_EIR1         (32 + 30)  /* External interrupt 1          */ -#define VECNUM_EWU1         (32 + 31)  /* Ethernet 1 wakeup             */ - -#define VECNUM_TXDE         VECNUM_MTDE -#define VECNUM_RXDE         VECNUM_MRDE - -/* UIC 2 */ -#define VECNUM_EIR5         (64 +  0)  /* External interrupt 5          */ -#define VECNUM_EIR6         (64 +  1)  /* External interrupt 6          */ -#define VECNUM_OPB          (64 +  2)  /* OPB to PLB bridge int stat    */ -#define VECNUM_EIR2         (64 +  3)  /* External interrupt 2          */ -#define VECNUM_EIR3         (64 +  4)  /* External interrupt 3          */ -#define VECNUM_DDR2         (64 +  5)  /* DDR2 sdram                    */ -#define VECNUM_MCTX0        (64 +  6)  /* MAl intp coalescence TX0      */ -#define VECNUM_MCTX1        (64 +  7)  /* MAl intp coalescence TX1      */ -#define VECNUM_MCTR0        (64 +  8)  /* MAl intp coalescence TR0      */ -#define VECNUM_MCTR1        (64 +  9)  /* MAl intp coalescence TR1      */ - -#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) - -/* UIC 0 */ -#define VECNUM_U1	1		/* UART1			*/ -#define VECNUM_IIC0	2		/* IIC0				*/ -#define VECNUM_IIC1	3		/* IIC1				*/ -#define VECNUM_PIM	4		/* PCI inbound message		*/ -#define VECNUM_PCRW	5		/* PCI command reg write	*/ -#define VECNUM_PPM	6		/* PCI power management		*/ -#define VECNUM_MSI0	8		/* PCI MSI level 0		*/ -#define VECNUM_EIR0	9		/* External interrupt 0		*/ -#define VECNUM_UIC2NC	10		/* UIC2 non-critical interrupt	*/ -#define VECNUM_UIC2C	11		/* UIC2 critical interrupt	*/ -#define VECNUM_D0	12		/* DMA channel 0		*/ -#define VECNUM_D1	13		/* DMA channel 1		*/ -#define VECNUM_D2	14		/* DMA channel 2		*/ -#define VECNUM_D3	15		/* DMA channel 3		*/ -#define VECNUM_UIC3NC	16		/* UIC3 non-critical interrupt	*/ -#define VECNUM_UIC3C	17		/* UIC3 critical interrupt	*/ -#define VECNUM_EIR1	9		/* External interrupt 1		*/ -#define VECNUM_UIC1NC	30		/* UIC1 non-critical interrupt	*/ -#define VECNUM_UIC1C	31		/* UIC1 critical interrupt	*/ - -/* UIC 1 */ -#define VECNUM_EIR2	(32 + 0)	/* External interrupt 0		*/ -#define VECNUM_U0	(32 + 1)	/* UART0			*/ -#define VECNUM_EIR3	(32 + 20)	/* External interrupt 3		*/ -#define VECNUM_EIR4	(32 + 21)	/* External interrupt 4		*/ -#define VECNUM_EIR5	(32 + 26)	/* External interrupt 5		*/ -#define VECNUM_EIR6	(32 + 27)	/* External interrupt 6		*/ -#define VECNUM_U2	(32 + 28)	/* UART2			*/ -#define VECNUM_U3	(32 + 29)	/* UART3			*/ -#define VECNUM_EIR7	(32 + 30)	/* External interrupt 7		*/ -#define VECNUM_EIR8	(32 + 31)	/* External interrupt 8		*/ - -/* UIC 2 */ -#define VECNUM_EIR9	(64 + 2)	/* External interrupt 9		*/ -#define VECNUM_MS	(64 + 3)	/* MAL SERR			*/ -#define	VECNUM_TXDE	(64 + 4)	/* MAL TXDE			*/ -#define	VECNUM_RXDE	(64 + 5)	/* MAL RXDE			*/ -#define VECNUM_MTE	(64 + 6)	/* MAL TXEOB			*/ -#define	VECNUM_MRE	(64 + 7)	/* MAL RXEOB			*/ -#define	VECNUM_ETH0	(64 + 16)	/* Ethernet 0			*/ -#define	VECNUM_ETH1	(64 + 17)	/* Ethernet 1			*/ -#define	VECNUM_ETH2	(64 + 18)	/* Ethernet 2			*/ -#define	VECNUM_ETH3	(64 + 19)	/* Ethernet 3			*/ -#define VECNUM_EWU0	(64 + 20)	/* Emac 0 wakeup		*/ -#define VECNUM_EWU1	(64 + 21)	/* Emac 1 wakeup		*/ -#define VECNUM_EWU2	(64 + 22)	/* Emac 2 wakeup		*/ -#define VECNUM_EWU3	(64 + 23)	/* Emac 3 wakeup		*/ -#define VECNUM_EIR10	(64 + 24)	/* External interrupt 10	*/ -#define VECNUM_EIR11	(64 + 25)	/* External interrupt 11	*/ - -/* UIC 3 */ -#define VECNUM_EIR12	(96 + 20)	/* External interrupt 20	*/ -#define VECNUM_EIR13	(96 + 21)	/* External interrupt 21	*/ -#define VECNUM_EIR14	(96 + 22)	/* External interrupt 22	*/ -#define VECNUM_EIR15	(96 + 23)	/* External interrupt 23	*/ -#define VECNUM_PCIEMSI0	(96 + 24)	/* PCI Express MSI level 0	*/ -#define VECNUM_PCIEMSI1	(96 + 25)	/* PCI Express MSI level 1	*/ -#define VECNUM_PCIEMSI2	(96 + 26)	/* PCI Express MSI level 2	*/ -#define VECNUM_PCIEMSI3	(96 + 27)	/* PCI Express MSI level 3	*/ -#define VECNUM_PCIEMSI4	(96 + 28)	/* PCI Express MSI level 4	*/ -#define VECNUM_PCIEMSI5	(96 + 29)	/* PCI Express MSI level 5	*/ -#define VECNUM_PCIEMSI6	(96 + 30)	/* PCI Express MSI level 6	*/ -#define VECNUM_PCIEMSI7	(96 + 31)	/* PCI Express MSI level 7	*/ - -#elif defined(CONFIG_440SPE) - -/* UIC 0 */ -#define VECNUM_U0           0           /* UART0                        */ -#define VECNUM_U1           1           /* UART1                        */ -#define VECNUM_IIC0         2           /* IIC0                         */ -#define VECNUM_IIC1         3           /* IIC1                         */ -#define VECNUM_PIM          4           /* PCI inbound message          */ -#define VECNUM_PCRW         5           /* PCI command reg write        */ -#define VECNUM_PPM          6           /* PCI power management         */ -#define VECNUM_MSI0         7           /* PCI MSI level 0              */ -#define VECNUM_MSI1         8           /* PCI MSI level 0              */ -#define VECNUM_MSI2         9           /* PCI MSI level 0              */ -#define VECNUM_UIC2NC       10          /* UIC2 non-critical interrupt  */ -#define VECNUM_UIC2C        11          /* UIC2 critical interrupt      */ -#define VECNUM_D0           12          /* DMA channel 0                */ -#define VECNUM_D1           13          /* DMA channel 1                */ -#define VECNUM_D2           14          /* DMA channel 2                */ -#define VECNUM_D3           15          /* DMA channel 3                */ -#define VECNUM_UIC3NC       16          /* UIC3 non-critical interrupt  */ -#define VECNUM_UIC3C        17          /* UIC3 critical interrupt      */ -#define VECNUM_UIC1NC       30          /* UIC1 non-critical interrupt  */ -#define VECNUM_UIC1C        31          /* UIC1 critical interrupt      */ - -/* UIC 1 */ -#define VECNUM_MS           (32 + 1 )   /* MAL SERR                     */ -#define VECNUM_TXDE         (32 + 2 )   /* MAL TXDE                     */ -#define VECNUM_RXDE         (32 + 3 )   /* MAL RXDE                     */ -#define VECNUM_MTE          (32 + 6 )   /* MAL Tx EOB                   */ -#define VECNUM_MRE          (32 + 7 )   /* MAL Rx EOB                   */ -#define VECNUM_CT0          (32 + 12 )  /* GPT compare timer 0          */ -#define VECNUM_CT1          (32 + 13 )  /* GPT compare timer 1          */ -#define VECNUM_CT2          (32 + 14 )  /* GPT compare timer 2          */ -#define VECNUM_CT3          (32 + 15 )  /* GPT compare timer 3          */ -#define VECNUM_CT4          (32 + 16 )  /* GPT compare timer 4          */ -#define VECNUM_ETH0         (32 + 28)   /* Ethernet interrupt status    */ -#define VECNUM_EWU0         (32 + 29)   /* Emac  wakeup                 */ - -/* UIC 2 */ -#define VECNUM_EIR5         (64 + 24)   /* External interrupt 5         */ -#define VECNUM_EIR4         (64 + 25)   /* External interrupt 4         */ -#define VECNUM_EIR3         (64 + 26)   /* External interrupt 3         */ -#define VECNUM_EIR2         (64 + 27)   /* External interrupt 2         */ -#define VECNUM_EIR1         (64 + 28)   /* External interrupt 1         */ -#define VECNUM_EIR0         (64 + 29)   /* External interrupt 0         */ - -#elif defined(CONFIG_440SP) - -/* UIC 0 */ -#define VECNUM_U0           0           /* UART0                        */ -#define VECNUM_U1           1           /* UART1                        */ -#define VECNUM_IIC0         2           /* IIC0                         */ -#define VECNUM_IIC1         3           /* IIC1                         */ -#define VECNUM_PIM          4           /* PCI inbound message          */ -#define VECNUM_PCRW         5           /* PCI command reg write        */ -#define VECNUM_PPM          6           /* PCI power management         */ -#define VECNUM_UIC1NC       30          /* UIC1 non-critical interrupt  */ -#define VECNUM_UIC1C        31          /* UIC1 critical interrupt      */ - -/* UIC 1 */ -#define VECNUM_EIR0         (32 + 0)	/* External interrupt 0         */ -#define VECNUM_MS           (32 + 1)	/* MAL SERR                     */ -#define VECNUM_TXDE         (32 + 2)	/* MAL TXDE                     */ -#define VECNUM_RXDE         (32 + 3)	/* MAL RXDE                     */ -#define VECNUM_MTE          (32 + 6)	/* MAL Tx EOB                   */ -#define VECNUM_MRE          (32 + 7)	/* MAL Rx EOB                   */ -#define VECNUM_CT0          (32 + 12)	/* GPT compare timer 0          */ -#define VECNUM_CT1          (32 + 13)	/* GPT compare timer 1          */ -#define VECNUM_CT2          (32 + 14)	/* GPT compare timer 2          */ -#define VECNUM_CT3          (32 + 15)	/* GPT compare timer 3          */ -#define VECNUM_CT4          (32 + 16)	/* GPT compare timer 4          */ -#define VECNUM_ETH0         (32 + 28)	/* Ethernet interrupt status    */ -#define VECNUM_EWU0         (32 + 29)	/* Emac  wakeup                 */ - -#elif defined(CONFIG_440) - -/* UIC 0 */ -#define VECNUM_U0           0           /* UART0                        */ -#define VECNUM_U1           1           /* UART1                        */ -#define VECNUM_IIC0         2           /* IIC0                         */ -#define VECNUM_IIC1         3           /* IIC1                         */ -#define VECNUM_PIM          4           /* PCI inbound message          */ -#define VECNUM_PCRW         5           /* PCI command reg write        */ -#define VECNUM_PPM          6           /* PCI power management         */ -#define VECNUM_MSI0         7           /* PCI MSI level 0              */ -#define VECNUM_MSI1         8           /* PCI MSI level 0              */ -#define VECNUM_MSI2         9           /* PCI MSI level 0              */ -#define VECNUM_MTE          10          /* MAL TXEOB                    */ -#define VECNUM_MRE          11          /* MAL RXEOB                    */ -#define VECNUM_D0           12          /* DMA channel 0                */ -#define VECNUM_D1           13          /* DMA channel 1                */ -#define VECNUM_D2           14          /* DMA channel 2                */ -#define VECNUM_D3           15          /* DMA channel 3                */ -#define VECNUM_CT0          18          /* GPT compare timer 0          */ -#define VECNUM_CT1          19          /* GPT compare timer 1          */ -#define VECNUM_CT2          20          /* GPT compare timer 2          */ -#define VECNUM_CT3          21          /* GPT compare timer 3          */ -#define VECNUM_CT4          22          /* GPT compare timer 4          */ -#define VECNUM_EIR0         23          /* External interrupt 0         */ -#define VECNUM_EIR1         24          /* External interrupt 1         */ -#define VECNUM_EIR2         25          /* External interrupt 2         */ -#define VECNUM_EIR3         26          /* External interrupt 3         */ -#define VECNUM_EIR4         27          /* External interrupt 4         */ -#define VECNUM_EIR5         28          /* External interrupt 5         */ -#define VECNUM_EIR6         29          /* External interrupt 6         */ -#define VECNUM_UIC1NC       30          /* UIC1 non-critical interrupt  */ -#define VECNUM_UIC1C        31          /* UIC1 critical interrupt      */ - -/* UIC 1 */ -#define VECNUM_MS           (32 + 0 )   /* MAL SERR                     */ -#define VECNUM_TXDE         (32 + 1 )   /* MAL TXDE                     */ -#define VECNUM_RXDE         (32 + 2 )   /* MAL RXDE                     */ -#define VECNUM_USBDEV	    (32 + 23)   /* USB 1.1/USB 2.0 Device       */ -#define VECNUM_ETH0         (32 + 28)   /* Ethernet 0 interrupt status  */ -#define VECNUM_EWU0         (32 + 29)   /* Ethernet 0 wakeup            */ - -#else /* !defined(CONFIG_440) */ - -#if defined(CONFIG_405EZ) -#define VECNUM_D0		0	/* DMA channel 0		*/ -#define VECNUM_D1		1	/* DMA channel 1		*/ -#define VECNUM_D2		2	/* DMA channel 2		*/ -#define VECNUM_D3		3	/* DMA channel 3		*/ -#define VECNUM_1588		4	/* IEEE 1588 network synchronization */ -#define VECNUM_U0		5	/* UART0			*/ -#define VECNUM_U1		6	/* UART1			*/ -#define VECNUM_CAN0		7	/* CAN 0			*/ -#define VECNUM_CAN1		8	/* CAN 1			*/ -#define VECNUM_SPI		9	/* SPI				*/ -#define VECNUM_IIC0		10	/* I2C				*/ -#define VECNUM_CHT0		11	/* Chameleon timer high pri interrupt */ -#define VECNUM_CHT1		12	/* Chameleon timer high pri interrupt */ -#define VECNUM_USBH1		13	/* USB Host 1			*/ -#define VECNUM_USBH2		14	/* USB Host 2			*/ -#define VECNUM_USBDEV		15	/* USB Device			*/ -#define VECNUM_ETH0		16	/* 10/100 Ethernet interrupt status */ -#define VECNUM_EWU0		17	/* Ethernet wakeup sequence detected */ - -#define VECNUM_MADMAL		18	/* Logical OR of following MadMAL int */ -#define VECNUM_MS		18	/*	MAL_SERR_INT		*/ -#define VECNUM_TXDE		18	/*	MAL_TXDE_INT		*/ -#define VECNUM_RXDE		18	/*	MAL_RXDE_INT		*/ - -#define VECNUM_MTE		19	/* MAL TXEOB			*/ -#define VECNUM_MTE1		20	/* MAL TXEOB1			*/ -#define VECNUM_MRE		21	/* MAL RXEOB			*/ -#define VECNUM_NAND		22	/* NAND Flash controller	*/ -#define VECNUM_ADC		23	/* ADC				*/ -#define VECNUM_DAC		24	/* DAC				*/ -#define VECNUM_OPB2PLB		25	/* OPB to PLB bridge interrupt	*/ -#define VECNUM_RESERVED0	26	/* Reserved			*/ -#define VECNUM_EIR0		27	/* External interrupt 0		*/ -#define VECNUM_EIR1		28	/* External interrupt 1		*/ -#define VECNUM_EIR2		29	/* External interrupt 2		*/ -#define VECNUM_EIR3		30	/* External interrupt 3		*/ -#define VECNUM_EIR4		31	/* External interrupt 4		*/ - -#elif defined(CONFIG_405EX) - -/* UIC 0 */ -#define VECNUM_U0		00 -#define VECNUM_U1		01 -#define VECNUM_IIC0		02 -#define VECNUM_PKA		03 -#define VECNUM_TRNG		04 -#define VECNUM_EBM		05 -#define VECNUM_BGI		06 -#define VECNUM_IIC1		07 -#define VECNUM_SPI		08 -#define VECNUM_EIR0		09 -#define VECNUM_MTE		10	/* MAL Tx EOB */ -#define VECNUM_MRE		11	/* MAL Rx EOB */ -#define VECNUM_DMA0		12 -#define VECNUM_DMA1		13 -#define VECNUM_DMA2		14 -#define VECNUM_DMA3		15 -#define VECNUM_PCIE0AL		16 -#define VECNUM_PCIE0VPD		17 -#define VECNUM_RPCIE0HRST	18 -#define VECNUM_FPCIE0HRST	19 -#define VECNUM_PCIE0TCR		20 -#define VECNUM_PCIEMSI0		21 -#define VECNUM_PCIEMSI1		22 -#define VECNUM_SECURITY		23 -#define VECNUM_ETH0		24 -#define VECNUM_ETH1		25 -#define VECNUM_PCIEMSI2		26 -#define VECNUM_EIR4		27 -#define VECNUM_UIC2NC		28 -#define VECNUM_UIC2C		29 -#define VECNUM_UIC1NC		30 -#define VECNUM_UIC1C		31 - -/* UIC 1 */ -#define VECNUM_MS		(32 + 00)	/* MAL SERR */ -#define VECNUM_TXDE		(32 + 01)	/* MAL TXDE */ -#define VECNUM_RXDE		(32 + 02)	/* MAL RXDE */ -#define VECNUM_PCIE0BMVC0	(32 + 03) -#define VECNUM_PCIE0DCRERR	(32 + 04) -#define VECNUM_EBC		(32 + 05) -#define VECNUM_NDFC		(32 + 06) -#define VECNUM_PCEI1DCRERR	(32 + 07) -#define VECNUM_CT8		(32 + 08) -#define VECNUM_CT9		(32 + 09) -#define VECNUM_PCIE1AL		(32 + 10) -#define VECNUM_PCIE1VPD		(32 + 11) -#define VECNUM_RPCE1HRST	(32 + 12) -#define VECNUM_FPCE1HRST	(32 + 13) -#define VECNUM_PCIE1TCR		(32 + 14) -#define VECNUM_PCIE1VC0		(32 + 15) -#define VECNUM_CT3		(32 + 16) -#define VECNUM_CT4		(32 + 17) -#define VECNUM_EIR7		(32 + 18) -#define VECNUM_EIR8		(32 + 19) -#define VECNUM_EIR9		(32 + 20) -#define VECNUM_CT5		(32 + 21) -#define VECNUM_CT6		(32 + 22) -#define VECNUM_CT7		(32 + 23) -#define VECNUM_SROM		(32 + 24)	/* SERIAL ROM */ -#define VECNUM_GPTDECPULS	(32 + 25)	/* GPT Decrement pulse */ -#define VECNUM_EIR2		(32 + 26) -#define VECNUM_EIR5		(32 + 27) -#define VECNUM_EIR6		(32 + 28) -#define VECNUM_EMAC0WAKE	(32 + 29) -#define VECNUM_EIR1		(32 + 30) -#define VECNUM_EMAC1WAKE	(32 + 31) - -/* UIC 2 */ -#define VECNUM_PCIE0INTA	(64 + 00)	/* PCIE0 INTA */ -#define VECNUM_PCIE0INTB	(64 + 01)	/* PCIE0 INTB */ -#define VECNUM_PCIE0INTC	(64 + 02)	/* PCIE0 INTC */ -#define VECNUM_PCIE0INTD	(64 + 03)	/* PCIE0 INTD */ -#define VECNUM_EIR3		(64 + 04)	/* External IRQ 3 */ -#define VECNUM_DDRMCUE		(64 + 05) -#define VECNUM_DDRMCCE		(64 + 06) -#define VECNUM_MALINTCOATX0	(64 + 07)	/* Interrupt coalecence TX0 */ -#define VECNUM_MALINTCOATX1	(64 + 08)	/* Interrupt coalecence TX1 */ -#define VECNUM_MALINTCOARX0	(64 + 09)	/* Interrupt coalecence RX0 */ -#define VECNUM_MALINTCOARX1	(64 + 10)	/* Interrupt coalecence RX1 */ -#define VECNUM_PCIE1INTA	(64 + 11)	/* PCIE0 INTA */ -#define VECNUM_PCIE1INTB	(64 + 12)	/* PCIE0 INTB */ -#define VECNUM_PCIE1INTC	(64 + 13)	/* PCIE0 INTC */ -#define VECNUM_PCIE1INTD	(64 + 14)	/* PCIE0 INTD */ -#define VECNUM_RPCIEMSI2	(64 + 15)	/* MSI level 2 */ -#define VECNUM_PCIEMSI3		(64 + 16)	/* MSI level 2 */ -#define VECNUM_PCIEMSI4		(64 + 17)	/* MSI level 2 */ -#define VECNUM_PCIEMSI5		(64 + 18)	/* MSI level 2 */ -#define VECNUM_PCIEMSI6		(64 + 19)	/* MSI level 2 */ -#define VECNUM_PCIEMSI7		(64 + 20)	/* MSI level 2 */ -#define VECNUM_PCIEMSI8		(64 + 21)	/* MSI level 2 */ -#define VECNUM_PCIEMSI9		(64 + 22)	/* MSI level 2 */ -#define VECNUM_PCIEMSI10	(64 + 23)	/* MSI level 2 */ -#define VECNUM_PCIEMSI11	(64 + 24)	/* MSI level 2 */ -#define VECNUM_PCIEMSI12	(64 + 25)	/* MSI level 2 */ -#define VECNUM_PCIEMSI13	(64 + 26)	/* MSI level 2 */ -#define VECNUM_PCIEMSI14	(64 + 27)	/* MSI level 2 */ -#define VECNUM_PCIEMSI15	(64 + 28)	/* MSI level 2 */ -#define VECNUM_PLB4XAHB		(64 + 29)	/* PLBxAHB bridge */ -#define VECNUM_USBWAKE		(64 + 30)	/* USB wakup */ -#define VECNUM_USBOTG		(64 + 31)	/* USB OTG */ - -#else	/* !CONFIG_405EZ */ - -#define VECNUM_U0           0           /* UART0                        */ -#define VECNUM_U1           1           /* UART1                        */ -#define VECNUM_D0           5           /* DMA channel 0                */ -#define VECNUM_D1           6           /* DMA channel 1                */ -#define VECNUM_D2           7           /* DMA channel 2                */ -#define VECNUM_D3           8           /* DMA channel 3                */ -#define VECNUM_EWU0         9           /* Ethernet wakeup              */ -#define VECNUM_MS           10          /* MAL SERR                     */ -#define VECNUM_MTE          11          /* MAL TXEOB                    */ -#define VECNUM_MRE          12          /* MAL RXEOB                    */ -#define VECNUM_TXDE         13          /* MAL TXDE                     */ -#define VECNUM_RXDE         14          /* MAL RXDE                     */ -#define VECNUM_ETH0         15          /* Ethernet interrupt status    */ -#define VECNUM_EIR0         25          /* External interrupt 0         */ -#define VECNUM_EIR1         26          /* External interrupt 1         */ -#define VECNUM_EIR2         27          /* External interrupt 2         */ -#define VECNUM_EIR3         28          /* External interrupt 3         */ -#define VECNUM_EIR4         29          /* External interrupt 4         */ -#define VECNUM_EIR5         30          /* External interrupt 5         */ -#define VECNUM_EIR6         31          /* External interrupt 6         */ -#endif	/* defined(CONFIG_405EZ) */ - -#endif /* defined(CONFIG_440) */ - -#endif /* _VECNUMS_H_ */ diff --git a/include/asm-ppc/ppc4xx-sdram.h b/include/asm-ppc/ppc4xx-sdram.h index e151f0c11..df787b3d4 100644 --- a/include/asm-ppc/ppc4xx-sdram.h +++ b/include/asm-ppc/ppc4xx-sdram.h @@ -282,7 +282,8 @@   * Memory Bank 0-7 configuration   */  #if defined(CONFIG_440SPE) || \ -    defined(CONFIG_460EX) || defined(CONFIG_460GT) +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  #define SDRAM_RXBAS_SDBA_MASK		0xFFE00000	/* Base address	*/  #define SDRAM_RXBAS_SDBA_ENCODE(n)	((u32)(((phys_size_t)(n) >> 2) & 0xFFE00000))  #define SDRAM_RXBAS_SDBA_DECODE(n)	((((phys_size_t)(n)) & 0xFFE00000) << 2) @@ -353,7 +354,19 @@  /*   * Memory controller registers   */ +#define SDRAM_BESR	0x00	/* PLB bus error status (read/clear)         */ +#define SDRAM_BESRT	0x01	/* PLB bus error status (test/set)           */ +#define SDRAM_BEARL	0x02	/* PLB bus error address low                 */ +#define SDRAM_BEARH	0x03	/* PLB bus error address high                */ +#define SDRAM_WMIRQ	0x06	/* PLB write master interrupt (read/clear)   */ +#define SDRAM_WMIRQT	0x07	/* PLB write master interrupt (test/set)     */ +#define SDRAM_PLBOPT	0x08	/* PLB slave options                         */ +#define SDRAM_PUABA	0x09	/* PLB upper address base                    */ +#ifndef CONFIG_405EX  #define SDRAM_MCSTAT	0x14	/* memory controller status                  */ +#else +#define SDRAM_MCSTAT	0x1F	/* memory controller status                  */ +#endif  #define SDRAM_MCOPT1	0x20	/* memory controller options 1               */  #define SDRAM_MCOPT2	0x21	/* memory controller options 2               */  #define SDRAM_MODT0	0x22	/* on die termination for bank 0             */ @@ -398,9 +411,35 @@  #define SDRAM_MMODE	0x88	/* memory mode                               */  #define SDRAM_MEMODE	0x89	/* memory extended mode                      */  #define SDRAM_ECCCR	0x98	/* ECC error status                          */ +#define SDRAM_ECCES	SDRAM_ECCCR  #define SDRAM_CID	0xA4	/* core ID                                   */ +#ifndef CONFIG_405EX  #define SDRAM_RID	0xA8	/* revision ID                               */ +#endif +#define SDRAM_FCSR	0xB0	/* feedback calibration status               */  #define SDRAM_RTSR	0xB1	/* run time status tracking                  */ +#ifdef CONFIG_405EX +#define SDRAM_RID	0xF8	/* revision ID                               */ +#endif + +/* + * Memory Controller Bus Error Status + */ +#define SDRAM_BESR_MASK			PPC_REG_VAL(7, 0xFF) +#define SDRAM_BESR_M0ID_MASK		PPC_REG_VAL(3, 0xF) +#define SDRAM_BESR_M0ID_ICU		PPC_REG_VAL(3, 0x0) +#define SDRAM_BESR_M0ID_PCIE0		PPC_REG_VAL(3, 0x1) +#define SDRAM_BESR_M0ID_PCIE1		PPC_REG_VAL(3, 0x2) +#define SDRAM_BESR_M0ID_DMA		PPC_REG_VAL(3, 0x3) +#define SDRAM_BESR_M0ID_DCU		PPC_REG_VAL(3, 0x4) +#define SDRAM_BESR_M0ID_OPB		PPC_REG_VAL(3, 0x5) +#define SDRAM_BESR_M0ID_MAL		PPC_REG_VAL(3, 0x6) +#define SDRAM_BESR_M0ID_SEC		PPC_REG_VAL(3, 0x7) +#define SDRAM_BESR_M0ET_MASK		PPC_REG_VAL(6, 0x7) +#define SDRAM_BESR_M0ET_NONE		PPC_REG_VAL(6, 0x0) +#define SDRAM_BESR_M0ET_ECC		PPC_REG_VAL(6, 0x1) +#define SDRAM_BESR_M0RW_WRITE		PPC_REG_VAL(7, 0) +#define SDRAM_BESR_M0RW_READ		PPC_REG_VAL(8, 1)  /*   * Memory Controller Status @@ -523,7 +562,7 @@   * SDRAM Delay Line Calibration Register   */  #define SDRAM_DLCR_DCLM_MASK		0x80000000 -#define SDRAM_DLCR_DCLM_MANUEL		0x80000000 +#define SDRAM_DLCR_DCLM_MANUAL		0x80000000  #define SDRAM_DLCR_DCLM_AUTO		0x00000000  #define SDRAM_DLCR_DLCR_MASK		0x08000000  #define SDRAM_DLCR_DLCR_CALIBRATE	0x08000000 @@ -539,59 +578,234 @@  #define SDRAM_DLCR_DLCV_DECODE(n)	((((u32)(n))>>0)&0x1FF)  /* + * SDRAM Memory On Die Terimination Control Register + */ +#define SDRAM_MODT_ODTON_DISABLE		PPC_REG_VAL(0, 0) +#define SDRAM_MODT_ODTON_ENABLE			PPC_REG_VAL(0, 1) +#define SDRAM_MODT_EB1W_DISABLE			PPC_REG_VAL(1, 0) +#define SDRAM_MODT_EB1W_ENABLE			PPC_REG_VAL(1, 1) +#define SDRAM_MODT_EB1R_DISABLE			PPC_REG_VAL(2, 0) +#define SDRAM_MODT_EB1R_ENABLE			PPC_REG_VAL(2, 1) +#define SDRAM_MODT_EB0W_DISABLE			PPC_REG_VAL(7, 0) +#define SDRAM_MODT_EB0W_ENABLE			PPC_REG_VAL(7, 1) +#define SDRAM_MODT_EB0R_DISABLE			PPC_REG_VAL(8, 0) +#define SDRAM_MODT_EB0R_ENABLE			PPC_REG_VAL(8, 1) + +/*   * SDRAM Controller On Die Termination Register   */ -#define SDRAM_CODT_ODT_ON			0x80000000 -#define SDRAM_CODT_ODT_OFF			0x00000000 -#define SDRAM_CODT_DQS_VOLTAGE_DDR_MASK		0x00000020 -#define SDRAM_CODT_DQS_2_5_V_DDR1		0x00000000 -#define SDRAM_CODT_DQS_1_8_V_DDR2		0x00000020 -#define SDRAM_CODT_DQS_MASK			0x00000010 -#define SDRAM_CODT_DQS_DIFFERENTIAL		0x00000000 -#define SDRAM_CODT_DQS_SINGLE_END		0x00000010 -#define SDRAM_CODT_CKSE_DIFFERENTIAL		0x00000000 -#define SDRAM_CODT_CKSE_SINGLE_END		0x00000008 -#define SDRAM_CODT_FEEBBACK_RCV_SINGLE_END	0x00000004 -#define SDRAM_CODT_FEEBBACK_DRV_SINGLE_END	0x00000002 -#define SDRAM_CODT_IO_HIZ			0x00000000 -#define SDRAM_CODT_IO_NMODE			0x00000001 +#define SDRAM_CODT_ODT_ON			PPC_REG_VAL(0, 1) +#define SDRAM_CODT_ODT_OFF			PPC_REG_VAL(0, 0) +#define SDRAM_CODT_RK1W_ON			PPC_REG_VAL(1, 1) +#define SDRAM_CODT_RK1W_OFF			PPC_REG_VAL(1, 0) +#define SDRAM_CODT_RK1R_ON			PPC_REG_VAL(2, 1) +#define SDRAM_CODT_RK1R_OFF			PPC_REG_VAL(2, 0) +#define SDRAM_CODT_RK0W_ON			PPC_REG_VAL(7, 1) +#define SDRAM_CODT_RK0W_OFF			PPC_REG_VAL(7, 0) +#define SDRAM_CODT_RK0R_ON			PPC_REG_VAL(8, 1) +#define SDRAM_CODT_RK0R_OFF			PPC_REG_VAL(8, 0) +#define SDRAM_CODT_ODTSH_NORMAL			PPC_REG_VAL(10, 0) +#define SDRAM_CODT_ODTSH_REMOVE_ONE_AT_END	PPC_REG_VAL(10, 1) +#define SDRAM_CODT_ODTSH_ADD_ONE_AT_START	PPC_REG_VAL(10, 2) +#define SDRAM_CODT_ODTSH_SHIFT_ONE_EARLIER	PPC_REG_VAL(10, 3) +#define SDRAM_CODT_CODTZ_75OHM			PPC_REG_VAL(11, 0) +#define SDRAM_CODT_CKEG_ON			PPC_REG_VAL(12, 1) +#define SDRAM_CODT_CKEG_OFF			PPC_REG_VAL(12, 0) +#define SDRAM_CODT_CTLG_ON			PPC_REG_VAL(13, 1) +#define SDRAM_CODT_CTLG_OFF			PPC_REG_VAL(13, 0) +#define SDRAM_CODT_FBDG_ON			PPC_REG_VAL(14, 1) +#define SDRAM_CODT_FBDG_OFF			PPC_REG_VAL(14, 0) +#define SDRAM_CODT_FBRG_ON			PPC_REG_VAL(15, 1) +#define SDRAM_CODT_FBRG_OFF			PPC_REG_VAL(15, 0) +#define SDRAM_CODT_CKLZ_36OHM			PPC_REG_VAL(18, 1) +#define SDRAM_CODT_CKLZ_18OHM			PPC_REG_VAL(18, 0) +#define SDRAM_CODT_DQS_VOLTAGE_DDR_MASK		PPC_REG_VAL(26, 1) +#define SDRAM_CODT_DQS_2_5_V_DDR1		PPC_REG_VAL(26, 0) +#define SDRAM_CODT_DQS_1_8_V_DDR2		PPC_REG_VAL(26, 1) +#define SDRAM_CODT_DQS_MASK			PPC_REG_VAL(27, 1) +#define SDRAM_CODT_DQS_DIFFERENTIAL		PPC_REG_VAL(27, 0) +#define SDRAM_CODT_DQS_SINGLE_END		PPC_REG_VAL(27, 1) +#define SDRAM_CODT_CKSE_DIFFERENTIAL		PPC_REG_VAL(28, 0) +#define SDRAM_CODT_CKSE_SINGLE_END		PPC_REG_VAL(28, 1) +#define SDRAM_CODT_FEEBBACK_RCV_SINGLE_END	PPC_REG_VAL(29, 1) +#define SDRAM_CODT_FEEBBACK_DRV_SINGLE_END	PPC_REG_VAL(30, 1) +#define SDRAM_CODT_IO_HIZ			PPC_REG_VAL(31, 0) +#define SDRAM_CODT_IO_NMODE			PPC_REG_VAL(31, 1)  /* - * SDRAM Mode Register + * SDRAM Initialization Preload Register   */ -#define SDRAM_MMODE_WR_MASK		0x00000E00 -#define SDRAM_MMODE_WR_DDR1		0x00000000 -#define SDRAM_MMODE_WR_DDR2_3_CYC	0x00000400 -#define SDRAM_MMODE_WR_DDR2_4_CYC	0x00000600 -#define SDRAM_MMODE_WR_DDR2_5_CYC	0x00000800 -#define SDRAM_MMODE_WR_DDR2_6_CYC	0x00000A00 -#define SDRAM_MMODE_DCL_MASK		0x00000070 -#define SDRAM_MMODE_DCL_DDR1_2_0_CLK	0x00000020 -#define SDRAM_MMODE_DCL_DDR1_2_5_CLK	0x00000060 -#define SDRAM_MMODE_DCL_DDR1_3_0_CLK	0x00000030 -#define SDRAM_MMODE_DCL_DDR2_2_0_CLK	0x00000020 -#define SDRAM_MMODE_DCL_DDR2_3_0_CLK	0x00000030 -#define SDRAM_MMODE_DCL_DDR2_4_0_CLK	0x00000040 -#define SDRAM_MMODE_DCL_DDR2_5_0_CLK	0x00000050 -#define SDRAM_MMODE_DCL_DDR2_6_0_CLK	0x00000060 -#define SDRAM_MMODE_DCL_DDR2_7_0_CLK	0x00000070 +#define SDRAM_INITPLR_ENABLE			PPC_REG_VAL(0, 1) +#define SDRAM_INITPLR_DISABLE			PPC_REG_VAL(0, 0) +#define SDRAM_INITPLR_IMWT_MASK			PPC_REG_VAL(8, 0xFF) +#define SDRAM_INITPLR_IMWT_ENCODE(n)		PPC_REG_VAL(8, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0xFF) +#define SDRAM_INITPLR_ICMD_MASK			PPC_REG_VAL(12, 0x7) +#define SDRAM_INITPLR_ICMD_ENCODE(n)		PPC_REG_VAL(12, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0x7) +#define SDRAM_INITPLR_IBA_MASK			PPC_REG_VAL(15, 0x7) +#define SDRAM_INITPLR_IBA_ENCODE(n)		PPC_REG_VAL(15, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0x7) +#define SDRAM_INITPLR_IMA_MASK			PPC_REG_VAL(31, 0x7FFF) +#define SDRAM_INITPLR_IMA_ENCODE(n)		PPC_REG_VAL(31, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0x7FFF)  /* - * SDRAM Extended Mode Register + * JEDEC DDR Initialization Commands   */ -#define SDRAM_MEMODE_DIC_MASK		0x00000002 -#define SDRAM_MEMODE_DIC_NORMAL		0x00000000 -#define SDRAM_MEMODE_DIC_WEAK		0x00000002 -#define SDRAM_MEMODE_DLL_MASK		0x00000001 -#define SDRAM_MEMODE_DLL_DISABLE	0x00000001 -#define SDRAM_MEMODE_DLL_ENABLE		0x00000000 -#define SDRAM_MEMODE_RTT_MASK		0x00000044 -#define SDRAM_MEMODE_RTT_DISABLED	0x00000000 -#define SDRAM_MEMODE_RTT_75OHM		0x00000004 -#define SDRAM_MEMODE_RTT_150OHM		0x00000040 -#define SDRAM_MEMODE_DQS_MASK		0x00000400 -#define SDRAM_MEMODE_DQS_DISABLE	0x00000400 -#define SDRAM_MEMODE_DQS_ENABLE		0x00000000 +#define JEDEC_CMD_NOP				7 +#define JEDEC_CMD_PRECHARGE			2 +#define JEDEC_CMD_REFRESH			1 +#define JEDEC_CMD_EMR				0 +#define JEDEC_CMD_READ				5 +#define JEDEC_CMD_WRITE				4 + +/* + * JEDEC Precharge Command Memory Address Arguments + */ +#define JEDEC_MA_PRECHARGE_ONE			(0 << 10) +#define JEDEC_MA_PRECHARGE_ALL			(1 << 10) + +/* + * JEDEC DDR EMR Command Bank Address Arguments + */ +#define JEDEC_BA_MR				0 +#define JEDEC_BA_EMR				1 +#define JEDEC_BA_EMR2				2 +#define JEDEC_BA_EMR3				3 + +/* + * JEDEC DDR Mode Register + */ +#define JEDEC_MA_MR_PDMODE_FAST_EXIT		(0 << 12) +#define JEDEC_MA_MR_PDMODE_SLOW_EXIT		(1 << 12) +#define JEDEC_MA_MR_WR_MASK			(0x7 << 9) +#define JEDEC_MA_MR_WR_DDR1			(0x0 << 9) +#define JEDEC_MA_MR_WR_DDR2_2_CYC		(0x1 << 9) +#define JEDEC_MA_MR_WR_DDR2_3_CYC		(0x2 << 9) +#define JEDEC_MA_MR_WR_DDR2_4_CYC		(0x3 << 9) +#define JEDEC_MA_MR_WR_DDR2_5_CYC		(0x4 << 9) +#define JEDEC_MA_MR_WR_DDR2_6_CYC		(0x5 << 9) +#define JEDEC_MA_MR_DLL_RESET			(1 << 8) +#define JEDEC_MA_MR_MODE_NORMAL			(0 << 8) +#define JEDEC_MA_MR_MODE_TEST			(1 << 8) +#define JEDEC_MA_MR_CL_MASK			(0x7 << 4) +#define JEDEC_MA_MR_CL_DDR1_2_0_CLK		(0x2 << 4) +#define JEDEC_MA_MR_CL_DDR1_2_5_CLK		(0x6 << 4) +#define JEDEC_MA_MR_CL_DDR1_3_0_CLK		(0x3 << 4) +#define JEDEC_MA_MR_CL_DDR2_2_0_CLK		(0x2 << 4) +#define JEDEC_MA_MR_CL_DDR2_3_0_CLK		(0x3 << 4) +#define JEDEC_MA_MR_CL_DDR2_4_0_CLK		(0x4 << 4) +#define JEDEC_MA_MR_CL_DDR2_5_0_CLK		(0x5 << 4) +#define JEDEC_MA_MR_CL_DDR2_6_0_CLK		(0x6 << 4) +#define JEDEC_MA_MR_CL_DDR2_7_0_CLK		(0x7 << 4) +#define JEDEC_MA_MR_BTYP_SEQUENTIAL		(0 << 3) +#define JEDEC_MA_MR_BTYP_INTERLEAVED		(1 << 3) +#define JEDEC_MA_MR_BLEN_MASK			(0x7 << 0) +#define JEDEC_MA_MR_BLEN_4			(2 << 0) +#define JEDEC_MA_MR_BLEN_8			(3 << 0) + +/* + * JEDEC DDR Extended Mode Register + */ +#define JEDEC_MA_EMR_OUTPUT_MASK		(1 << 12) +#define JEDEC_MA_EMR_OUTPUT_ENABLE		(0 << 12) +#define JEDEC_MA_EMR_OUTPUT_DISABLE		(1 << 12) +#define JEDEC_MA_EMR_RQDS_MASK			(1 << 11) +#define JEDEC_MA_EMR_RDQS_DISABLE		(0 << 11) +#define JEDEC_MA_EMR_RDQS_ENABLE		(1 << 11) +#define JEDEC_MA_EMR_DQS_MASK			(1 << 10) +#define JEDEC_MA_EMR_DQS_DISABLE		(1 << 10) +#define JEDEC_MA_EMR_DQS_ENABLE			(0 << 10) +#define JEDEC_MA_EMR_OCD_MASK			(0x7 << 7) +#define JEDEC_MA_EMR_OCD_EXIT			(0 << 7) +#define JEDEC_MA_EMR_OCD_ENTER			(7 << 7) +#define JEDEC_MA_EMR_AL_DDR1_0_CYC		(0 << 3) +#define JEDEC_MA_EMR_AL_DDR2_1_CYC		(1 << 3) +#define JEDEC_MA_EMR_AL_DDR2_2_CYC		(2 << 3) +#define JEDEC_MA_EMR_AL_DDR2_3_CYC		(3 << 3) +#define JEDEC_MA_EMR_AL_DDR2_4_CYC		(4 << 3) +#define JEDEC_MA_EMR_RTT_MASK			(0x11 << 2) +#define JEDEC_MA_EMR_RTT_DISABLED		(0x00 << 2) +#define JEDEC_MA_EMR_RTT_75OHM			(0x01 << 2) +#define JEDEC_MA_EMR_RTT_150OHM			(0x10 << 2) +#define JEDEC_MA_EMR_RTT_50OHM			(0x11 << 2) +#define JEDEC_MA_EMR_ODS_MASK			(1 << 1) +#define JEDEC_MA_EMR_ODS_NORMAL			(0 << 1) +#define JEDEC_MA_EMR_ODS_WEAK			(1 << 1) +#define JEDEC_MA_EMR_DLL_MASK			(1 << 0) +#define JEDEC_MA_EMR_DLL_ENABLE			(0 << 0) +#define JEDEC_MA_EMR_DLL_DISABLE		(1 << 0) + +/* + * JEDEC DDR Extended Mode Register 2 + */ +#define JEDEC_MA_EMR2_TEMP_COMMERCIAL		(0 << 7) +#define JEDEC_MA_EMR2_TEMP_INDUSTRIAL		(1 << 7) + +/* + * SDRAM Mode Register (Corresponds 1:1 w/ JEDEC Mode Register) + */ +#define SDRAM_MMODE_WR_MASK			JEDEC_MA_MR_WR_MASK +#define SDRAM_MMODE_WR_DDR1			JEDEC_MA_MR_WR_DDR1 +#define SDRAM_MMODE_WR_DDR2_2_CYC		JEDEC_MA_MR_WR_DDR2_2_CYC +#define SDRAM_MMODE_WR_DDR2_3_CYC		JEDEC_MA_MR_WR_DDR2_3_CYC +#define SDRAM_MMODE_WR_DDR2_4_CYC		JEDEC_MA_MR_WR_DDR2_4_CYC +#define SDRAM_MMODE_WR_DDR2_5_CYC		JEDEC_MA_MR_WR_DDR2_5_CYC +#define SDRAM_MMODE_WR_DDR2_6_CYC		JEDEC_MA_MR_WR_DDR2_6_CYC +#define SDRAM_MMODE_DCL_MASK			JEDEC_MA_MR_CL_MASK +#define SDRAM_MMODE_DCL_DDR1_2_0_CLK		JEDEC_MA_MR_CL_DDR1_2_0_CLK +#define SDRAM_MMODE_DCL_DDR1_2_5_CLK		JEDEC_MA_MR_CL_DDR1_2_5_CLK +#define SDRAM_MMODE_DCL_DDR1_3_0_CLK		JEDEC_MA_MR_CL_DDR1_3_0_CLK +#define SDRAM_MMODE_DCL_DDR2_2_0_CLK		JEDEC_MA_MR_CL_DDR2_2_0_CLK +#define SDRAM_MMODE_DCL_DDR2_3_0_CLK		JEDEC_MA_MR_CL_DDR2_3_0_CLK +#define SDRAM_MMODE_DCL_DDR2_4_0_CLK		JEDEC_MA_MR_CL_DDR2_4_0_CLK +#define SDRAM_MMODE_DCL_DDR2_5_0_CLK		JEDEC_MA_MR_CL_DDR2_5_0_CLK +#define SDRAM_MMODE_DCL_DDR2_6_0_CLK		JEDEC_MA_MR_CL_DDR2_6_0_CLK +#define SDRAM_MMODE_DCL_DDR2_7_0_CLK		JEDEC_MA_MR_CL_DDR2_7_0_CLK +#define SDRAM_MMODE_BTYP_SEQUENTIAL		JEDEC_MA_MR_BTYP_SEQUENTIAL +#define SDRAM_MMODE_BTYP_INTERLEAVED		JEDEC_MA_MR_BTYP_INTERLEAVED +#define SDRAM_MMODE_BLEN_MASK			JEDEC_MA_MR_BLEN_MASK +#define SDRAM_MMODE_BLEN_4			JEDEC_MA_MR_BLEN_4 +#define SDRAM_MMODE_BLEN_8			JEDEC_MA_MR_BLEN_8 + +/* + * SDRAM Extended Mode Register (Corresponds 1:1 w/ JEDEC Extended + * Mode Register) + */ +#define SDRAM_MEMODE_QOFF_MASK			JEDEC_MA_EMR_OUTPUT_MASK +#define SDRAM_MEMODE_QOFF_DISABLE		JEDEC_MA_EMR_OUTPUT_DISABLE +#define SDRAM_MEMODE_QOFF_ENABLE		JEDEC_MA_EMR_OUTPUT_ENABLE +#define SDRAM_MEMODE_RDQS_MASK			JEDEC_MA_EMR_RQDS_MASK +#define SDRAM_MEMODE_RDQS_DISABLE		JEDEC_MA_EMR_RDQS_DISABLE +#define SDRAM_MEMODE_RDQS_ENABLE		JEDEC_MA_EMR_RDQS_ENABLE +#define SDRAM_MEMODE_DQS_MASK			JEDEC_MA_EMR_DQS_MASK +#define SDRAM_MEMODE_DQS_DISABLE		JEDEC_MA_EMR_DQS_DISABLE +#define SDRAM_MEMODE_DQS_ENABLE			JEDEC_MA_EMR_DQS_ENABLE +#define SDRAM_MEMODE_AL_DDR1_0_CYC		JEDEC_MA_EMR_AL_DDR1_0_CYC +#define SDRAM_MEMODE_AL_DDR2_1_CYC		JEDEC_MA_EMR_AL_DDR2_1_CYC +#define SDRAM_MEMODE_AL_DDR2_2_CYC		JEDEC_MA_EMR_AL_DDR2_2_CYC +#define SDRAM_MEMODE_AL_DDR2_3_CYC		JEDEC_MA_EMR_AL_DDR2_3_CYC +#define SDRAM_MEMODE_AL_DDR2_4_CYC		JEDEC_MA_EMR_AL_DDR2_4_CYC +#define SDRAM_MEMODE_RTT_MASK			JEDEC_MA_EMR_RTT_MASK +#define SDRAM_MEMODE_RTT_DISABLED		JEDEC_MA_EMR_RTT_DISABLED +#define SDRAM_MEMODE_RTT_75OHM			JEDEC_MA_EMR_RTT_75OHM +#define SDRAM_MEMODE_RTT_150OHM			JEDEC_MA_EMR_RTT_150OHM +#define SDRAM_MEMODE_RTT_50OHM			JEDEC_MA_EMR_RTT_50OHM +#define SDRAM_MEMODE_DIC_MASK			JEDEC_MA_EMR_ODS_MASK +#define SDRAM_MEMODE_DIC_NORMAL			JEDEC_MA_EMR_ODS_NORMAL +#define SDRAM_MEMODE_DIC_WEAK			JEDEC_MA_EMR_ODS_WEAK +#define SDRAM_MEMODE_DLL_MASK			JEDEC_MA_EMR_DLL_MASK +#define SDRAM_MEMODE_DLL_DISABLE		JEDEC_MA_EMR_DLL_DISABLE +#define SDRAM_MEMODE_DLL_ENABLE			JEDEC_MA_EMR_DLL_ENABLE  /*   * SDRAM Clock Timing Register @@ -684,6 +898,24 @@  #define SDRAM_SDTR3_RFC_ENCODE(n)	((((u32)(n))&0x3F)<<0)  /* + * ECC Error Status + */ +#define SDRAM_ECCES_MASK		 PPC_REG_VAL(21, 0x3FFFFF) +#define SDRAM_ECCES_BNCE_MASK		 PPC_REG_VAL(15, 0xFFFF) +#define SDRAM_ECCES_BNCE_ENCODE(lane)	 PPC_REG_VAL(((lane) & 0xF), 1) +#define SDRAM_ECCES_CKBER_MASK		 PPC_REG_VAL(17, 0x3) +#define SDRAM_ECCES_CKBER_NONE		 PPC_REG_VAL(17, 0) +#define SDRAM_ECCES_CKBER_16_ECC_0_3	 PPC_REG_VAL(17, 2) +#define SDRAM_ECCES_CKBER_32_ECC_0_3	 PPC_REG_VAL(17, 1) +#define SDRAM_ECCES_CKBER_32_ECC_4_8	 PPC_REG_VAL(17, 2) +#define SDRAM_ECCES_CKBER_32_ECC_0_8	 PPC_REG_VAL(17, 3) +#define SDRAM_ECCES_CE			 PPC_REG_VAL(18, 1) +#define SDRAM_ECCES_UE			 PPC_REG_VAL(19, 1) +#define SDRAM_ECCES_BKNER_MASK		 PPC_REG_VAL(21, 0x3) +#define SDRAM_ECCES_BK0ER		 PPC_REG_VAL(20, 1) +#define SDRAM_ECCES_BK1ER		 PPC_REG_VAL(21, 1) + +/*   * Memory Bank 0-1 configuration   */  #define SDRAM_BXCF_M_AM_MASK		0x00000F00	/* Addressing mode	*/ diff --git a/include/asm-ppc/ppc4xx-uic.h b/include/asm-ppc/ppc4xx-uic.h new file mode 100644 index 000000000..c908d4245 --- /dev/null +++ b/include/asm-ppc/ppc4xx-uic.h @@ -0,0 +1,316 @@ +/* + *  Copyright (C) 2002 Scott McNutt <smcnutt@artesyncp.com> + * + * (C) Copyright 2008 + * Stefan Roese, DENX Software Engineering, sr@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 + */ + +#ifndef _PPC4xx_UIC_H_ +#define _PPC4xx_UIC_H_ + +/* + * Define the number of UIC's + */ +#if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX) +#define UIC_MAX		4 +#elif defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_405EX) +#define UIC_MAX		3 +#elif defined(CONFIG_440GP) || defined(CONFIG_440SP) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) +#define UIC_MAX		2 +#else +#define UIC_MAX		1 +#endif + +#define IRQ_MAX UIC_MAX * 32 + +/* + * UIC register + */ +#define UIC_SR	0x0			/* UIC status			*/ +#define UIC_ER	0x2			/* UIC enable			*/ +#define UIC_CR	0x3			/* UIC critical			*/ +#define UIC_PR	0x4			/* UIC polarity			*/ +#define UIC_TR	0x5			/* UIC triggering		*/ +#define UIC_MSR 0x6			/* UIC masked status		*/ +#define UIC_VR	0x7			/* UIC vector			*/ +#define UIC_VCR 0x8			/* UIC vector configuration	*/ + +/* + * On 440GX we use the UICB0 as UIC0. Its the root UIC where all other UIC's + * are cascaded on. With this trick we can use the common UIC code for 440GX + * too. + */ +#if defined(CONFIG_440GX) +#define UIC0_DCR_BASE 0x200 +#define UIC1_DCR_BASE 0xc0 +#define UIC2_DCR_BASE 0xd0 +#define UIC3_DCR_BASE 0x210 +#else +#define UIC0_DCR_BASE 0xc0 +#define UIC1_DCR_BASE 0xd0 +#define UIC2_DCR_BASE 0xe0 +#define UIC3_DCR_BASE 0xf0 +#endif + +#define uic0sr	(UIC0_DCR_BASE+0x0)	/* UIC0 status			*/ +#define uic0er	(UIC0_DCR_BASE+0x2)	/* UIC0 enable			*/ +#define uic0cr	(UIC0_DCR_BASE+0x3)	/* UIC0 critical		*/ +#define uic0pr	(UIC0_DCR_BASE+0x4)	/* UIC0 polarity		*/ +#define uic0tr	(UIC0_DCR_BASE+0x5)	/* UIC0 triggering		*/ +#define uic0msr (UIC0_DCR_BASE+0x6)	/* UIC0 masked status		*/ +#define uic0vr	(UIC0_DCR_BASE+0x7)	/* UIC0 vector			*/ +#define uic0vcr (UIC0_DCR_BASE+0x8)	/* UIC0 vector configuration	*/ + +#define uic1sr	(UIC1_DCR_BASE+0x0)	/* UIC1 status			*/ +#define uic1er	(UIC1_DCR_BASE+0x2)	/* UIC1 enable			*/ +#define uic1cr	(UIC1_DCR_BASE+0x3)	/* UIC1 critical		*/ +#define uic1pr	(UIC1_DCR_BASE+0x4)	/* UIC1 polarity		*/ +#define uic1tr	(UIC1_DCR_BASE+0x5)	/* UIC1 triggering		*/ +#define uic1msr (UIC1_DCR_BASE+0x6)	/* UIC1 masked status		*/ +#define uic1vr	(UIC1_DCR_BASE+0x7)	/* UIC1 vector			*/ +#define uic1vcr (UIC1_DCR_BASE+0x8)	/* UIC1 vector configuration	*/ + +#define uic2sr	(UIC2_DCR_BASE+0x0)	/* UIC2 status-Read Clear	*/ +#define uic2srs	(UIC2_DCR_BASE+0x1)	/* UIC2 status-Read Set		*/ +#define uic2er	(UIC2_DCR_BASE+0x2)	/* UIC2 enable			*/ +#define uic2cr	(UIC2_DCR_BASE+0x3)	/* UIC2 critical		*/ +#define uic2pr	(UIC2_DCR_BASE+0x4)	/* UIC2 polarity		*/ +#define uic2tr	(UIC2_DCR_BASE+0x5)	/* UIC2 triggering		*/ +#define uic2msr (UIC2_DCR_BASE+0x6)	/* UIC2 masked status		*/ +#define uic2vr	(UIC2_DCR_BASE+0x7)	/* UIC2 vector			*/ +#define uic2vcr (UIC2_DCR_BASE+0x8)	/* UIC2 vector configuration	*/ + +#define uic3sr	(UIC3_DCR_BASE+0x0)	/* UIC3 status-Read Clear	*/ +#define uic3srs	(UIC3_DCR_BASE+0x1)	/* UIC3 status-Read Set		*/ +#define uic3er	(UIC3_DCR_BASE+0x2)	/* UIC3 enable			*/ +#define uic3cr	(UIC3_DCR_BASE+0x3)	/* UIC3 critical		*/ +#define uic3pr	(UIC3_DCR_BASE+0x4)	/* UIC3 polarity		*/ +#define uic3tr	(UIC3_DCR_BASE+0x5)	/* UIC3 triggering		*/ +#define uic3msr (UIC3_DCR_BASE+0x6)	/* UIC3 masked status		*/ +#define uic3vr	(UIC3_DCR_BASE+0x7)	/* UIC3 vector			*/ +#define uic3vcr (UIC3_DCR_BASE+0x8)	/* UIC3 vector configuration	*/ + +/* The following is for compatibility with 405 code */ +#define uicsr	uic0sr +#define uicer	uic0er +#define uiccr	uic0cr +#define uicpr	uic0pr +#define uictr	uic0tr +#define uicmsr	uic0msr +#define uicvr	uic0vr +#define uicvcr	uic0vcr + +/* + * Now the interrupt vector definitions. They are different for most of + * the 4xx variants, so we need some more #ifdef's here. No mask + * definitions anymore here. For this please use the UIC_MASK macro below. + * + * Note: Please only define the interrupts really used in U-Boot here. + * Those are the cascading and EMAC/MAL related interrupt. + */ + +#if defined(CONFIG_405EP) || defined(CONFIG_405GP) +#define VECNUM_MAL_SERR		10 +#define VECNUM_MAL_TXEOB	11 +#define VECNUM_MAL_RXEOB	12 +#define VECNUM_MAL_TXDE		13 +#define VECNUM_MAL_RXDE		14 +#define VECNUM_ETH0		15 +#define VECNUM_ETH1_OFFS	2 +#define VECNUM_EIRQ6		29 +#endif /* defined(CONFIG_405EP) */ + +#if defined(CONFIG_405EZ) +#define VECNUM_USBDEV		15 +#define VECNUM_ETH0		16 +#define VECNUM_MAL_SERR		18 +#define VECNUM_MAL_TXDE		18 +#define VECNUM_MAL_RXDE		18 +#define VECNUM_MAL_TXEOB	19 +#define VECNUM_MAL_RXEOB	21 +#endif /* CONFIG_405EX */ + +#if defined(CONFIG_405EX) +/* UIC 0 */ +#define VECNUM_MAL_TXEOB	10 +#define VECNUM_MAL_RXEOB	11 +#define VECNUM_ETH0		24 +#define VECNUM_ETH1_OFFS	1 +#define VECNUM_UIC2NCI		28 +#define VECNUM_UIC2CI		29 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 0) +#define VECNUM_MAL_TXDE		(32 + 1) +#define VECNUM_MAL_RXDE		(32 + 2) +#endif /* CONFIG_405EX */ + +#if defined(CONFIG_440GP) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) +/* UIC 0 */ +#define VECNUM_MAL_TXEOB	10 +#define VECNUM_MAL_RXEOB	11 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 0) +#define VECNUM_MAL_TXDE		(32 + 1) +#define VECNUM_MAL_RXDE		(32 + 2) +#define VECNUM_USBDEV		(32 + 23) +#define VECNUM_ETH0		(32 + 28) +#define VECNUM_ETH1_OFFS	2 +#endif /* CONFIG_440GP */ + +#if defined(CONFIG_440GX) +/* UICB 0 (440GX only) */ +/* + * All those defines below are off-by-one, so that the common UIC code + * can be used. So VECNUM_UIC1CI refers to VECNUM_UIC0CI etc. + */ +#define VECNUM_UIC1CI		0 +#define VECNUM_UIC1NCI		1 +#define VECNUM_UIC2CI		2 +#define VECNUM_UIC2NCI		3 +#define VECNUM_UIC3CI		4 +#define VECNUM_UIC3NCI		5 + +/* UIC 0, used as UIC1 on 440GX because of UICB0 */ +#define VECNUM_MAL_TXEOB	(32 + 10) +#define VECNUM_MAL_RXEOB	(32 + 11) + +/* UIC 1, used as UIC2 on 440GX because of UICB0 */ +#define VECNUM_MAL_SERR		(64 + 0) +#define VECNUM_MAL_TXDE		(64 + 1) +#define VECNUM_MAL_RXDE		(64 + 2) +#define VECNUM_ETH0		(64 + 28) +#define VECNUM_ETH1_OFFS	2 +#endif /* CONFIG_440GX */ + +#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) +/* UIC 0 */ +#define VECNUM_MAL_TXEOB	10 +#define VECNUM_MAL_RXEOB	11 +#define VECNUM_USBDEV		20 +#define VECNUM_ETH0		24 +#define VECNUM_ETH1_OFFS	1 +#define VECNUM_UIC2NCI		28 +#define VECNUM_UIC2CI		29 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 0) +#define VECNUM_MAL_TXDE		(32 + 1) +#define VECNUM_MAL_RXDE		(32 + 2) + +/* UIC 2 */ +#define VECNUM_EIRQ2		(64 + 3) +#endif /* CONFIG_440EPX */ + +#if defined(CONFIG_440SP) +/* UIC 0 */ +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 1) +#define VECNUM_MAL_TXDE		(32 + 2) +#define VECNUM_MAL_RXDE		(32 + 3) +#define VECNUM_MAL_TXEOB	(32 + 6) +#define VECNUM_MAL_RXEOB	(32 + 7) +#define VECNUM_ETH0		(32 + 28) +#endif /* CONFIG_440SP */ + +#if defined(CONFIG_440SPE) +/* UIC 0 */ +#define VECNUM_UIC2NCI		10 +#define VECNUM_UIC2CI		11 +#define VECNUM_UIC3NCI		16 +#define VECNUM_UIC3CI		17 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 1) +#define VECNUM_MAL_TXDE		(32 + 2) +#define VECNUM_MAL_RXDE		(32 + 3) +#define VECNUM_MAL_TXEOB	(32 + 6) +#define VECNUM_MAL_RXEOB	(32 + 7) +#define VECNUM_ETH0		(32 + 28) +#endif /* CONFIG_440SPE */ + +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) +/* UIC 0 */ +#define VECNUM_UIC2NCI		10 +#define VECNUM_UIC2CI		11 +#define VECNUM_UIC3NCI		16 +#define VECNUM_UIC3CI		17 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 2 */ +#define VECNUM_MAL_SERR		(64 + 3) +#define	VECNUM_MAL_TXDE		(64 + 4) +#define	VECNUM_MAL_RXDE		(64 + 5) +#define VECNUM_MAL_TXEOB	(64 + 6) +#define	VECNUM_MAL_RXEOB	(64 + 7) +#define	VECNUM_ETH0		(64 + 16) +#define VECNUM_ETH1_OFFS	1 +#endif /* CONFIG_460EX */ + +#if defined(CONFIG_460SX) +/* UIC 0 */ +#define VECNUM_UIC2NCI		10 +#define VECNUM_UIC2CI		11 +#define VECNUM_UIC3NCI		16 +#define VECNUM_UIC3CI		17 +#define	VECNUM_ETH0		19 +#define VECNUM_ETH1_OFFS	1 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 1) +#define	VECNUM_MAL_TXDE		(32 + 2) +#define	VECNUM_MAL_RXDE		(32 + 3) +#define VECNUM_MAL_TXEOB	(32 + 6) +#define	VECNUM_MAL_RXEOB	(32 + 7) +#endif /* CONFIG_460EX */ + +#if !defined(VECNUM_ETH1_OFFS) +#define VECNUM_ETH1_OFFS	1 +#endif + +/* + * Mask definitions (used for example in 4xx_enet.c) + */ +#define UIC_MASK(vec)		(0x80000000 >> ((vec) & 0x1f)) +/* UIC_NR won't work for 440GX because of its specific UIC DCR addresses */ +#define UIC_NR(vec)		((vec) >> 5) + +#endif /* _PPC4xx_UIC_H_ */ diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h index e61786809..dce4717f4 100644 --- a/include/asm-ppc/processor.h +++ b/include/asm-ppc/processor.h @@ -830,6 +830,10 @@  #define PVR_460EX_RA	0x130218A3 /* 460EX rev A without Security Engine */  #define PVR_460GT_SE_RA	0x130218A0 /* 460GT rev A with Security Engine	  */  #define PVR_460GT_RA	0x130218A1 /* 460GT rev A without Security Engine */ +#define PVR_460SX_RA    0x13541800 /* 460SX rev A                   */ +#define PVR_460SX_RA_V1 0x13541801 /* 460SX rev A Variant 1 Security disabled */ +#define PVR_460GX_RA    0x13541802 /* 460GX rev A                   */ +#define PVR_460GX_RA_V1 0x13541803 /* 460GX rev A Variant 1 Security disabled */  #define PVR_601		0x00010000  #define PVR_602		0x00050000  #define PVR_603		0x00030000 @@ -855,6 +859,8 @@  #define PVR_86xx	0x80040000  #define PVR_86xx_REV1	(PVR_86xx | 0x0010) +#define PVR_VIRTEX5     0x7ff21912 +  /*   * For the 8xx processors, all of them report the same PVR family for   * the PowerPC core. The various versions of these processors must be diff --git a/include/asm-ppc/xilinx_irq.h b/include/asm-ppc/xilinx_irq.h new file mode 100644 index 000000000..61171c21f --- /dev/null +++ b/include/asm-ppc/xilinx_irq.h @@ -0,0 +1,36 @@ +/* + * (C) Copyright 2008 + * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * This work has been supported by: QTechnology  http://qtec.com/ + * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de + * 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, see <http://www.gnu.org/licenses/>. +*/ +#ifndef XILINX_IRQ_H +#define XILINX_IRQ_H + +#define intc	XPAR_INTC_0_BASEADDR +#define ISR	(intc + (0 * 4))	/* Interrupt Status Register */ +#define IPR	(intc + (1 * 4))	/* Interrupt Pending Register */ +#define IER	(intc + (2 * 4))	/* Interrupt Enable Register */ +#define IAR	(intc + (3 * 4))	/* Interrupt Acknowledge Register */ +#define SIE	(intc + (4 * 4))	/* Set Interrupt Enable bits */ +#define CIE	(intc + (5 * 4))	/* Clear Interrupt Enable bits */ +#define IVR	(intc + (6 * 4))	/* Interrupt Vector Register */ +#define MER	(intc + (7 * 4))	/* Master Enable Register */ + +#define IRQ_MASK(irq)	(1 << (irq & 0x1f)) + +#define IRQ_MAX		XPAR_INTC_MAX_NUM_INTR_INPUTS + +#endif diff --git a/include/configs/HH405.h b/include/configs/HH405.h index 8ea1ac37d..9bcbfe3b7 100644 --- a/include/configs/HH405.h +++ b/include/configs/HH405.h @@ -407,7 +407,7 @@  /*   * define UIC_EXT0 ... UIC_EXT6 if external interrupt is active high   */ -#define CFG_UIC0_POLARITY       (0xFFFFFF80 | UIC_EXT6) +#define CFG_UIC0_POLARITY       (0xFFFFFF80 | UIC_MASK(VECNUM_EIRQ6))  /*-----------------------------------------------------------------------   * FPGA stuff diff --git a/include/configs/katmai.h b/include/configs/katmai.h index f07e47068..047ec9ede 100644 --- a/include/configs/katmai.h +++ b/include/configs/katmai.h @@ -54,7 +54,6 @@  #include "amcc-common.h"  #define CONFIG_BOARD_EARLY_INIT_F 1	/* Call board_pre_init		*/ -#define	CONFIG_MISC_INIT_F	1	/* Use misc_init_f()		*/  #undef  CONFIG_SHOW_BOOT_PROGRESS  /*----------------------------------------------------------------------- diff --git a/include/configs/kilauea.h b/include/configs/kilauea.h index 9c1a3a4c1..dc246fd23 100644 --- a/include/configs/kilauea.h +++ b/include/configs/kilauea.h @@ -233,39 +233,124 @@  #define CFG_SDRAM0_MB1CF	SDRAM_RXBAS_SDBE_DISABLE  #define CFG_SDRAM0_MB2CF	SDRAM_RXBAS_SDBE_DISABLE  #define CFG_SDRAM0_MB3CF	SDRAM_RXBAS_SDBE_DISABLE -#define CFG_SDRAM0_MCOPT1	0x04322000 +#define CFG_SDRAM0_MCOPT1	(SDRAM_MCOPT1_PMU_OPEN		| \ +				 SDRAM_MCOPT1_8_BANKS		| \ +				 SDRAM_MCOPT1_DDR2_TYPE		| \ +				 SDRAM_MCOPT1_QDEP		| \ +				 SDRAM_MCOPT1_DCOO_DISABLED)  #define CFG_SDRAM0_MCOPT2	0x00000000 -#define CFG_SDRAM0_MODT0	0x01800000 +#define CFG_SDRAM0_MODT0	(SDRAM_MODT_EB0W_ENABLE | \ +				 SDRAM_MODT_EB0R_ENABLE)  #define CFG_SDRAM0_MODT1	0x00000000 -#define CFG_SDRAM0_CODT		0x0080f837 -#define CFG_SDRAM0_RTR		0x06180000 -#define CFG_SDRAM0_INITPLR0	0xa8380000 -#define CFG_SDRAM0_INITPLR1	0x81900400 -#define CFG_SDRAM0_INITPLR2	0x81020000 -#define CFG_SDRAM0_INITPLR3	0x81030000 -#define CFG_SDRAM0_INITPLR4	0x81010404 -#define CFG_SDRAM0_INITPLR5	0x81000542 -#define CFG_SDRAM0_INITPLR6	0x81900400 -#define CFG_SDRAM0_INITPLR7	0x8D080000 -#define CFG_SDRAM0_INITPLR8	0x8D080000 -#define CFG_SDRAM0_INITPLR9	0x8D080000 -#define CFG_SDRAM0_INITPLR10	0x8D080000 -#define CFG_SDRAM0_INITPLR11	0x81000442 -#define CFG_SDRAM0_INITPLR12	0x81010780 -#define CFG_SDRAM0_INITPLR13	0x81010400 -#define CFG_SDRAM0_INITPLR14	0x00000000 -#define CFG_SDRAM0_INITPLR15	0x00000000 -#define CFG_SDRAM0_RQDC		0x80000038 -#define CFG_SDRAM0_RFDC		0x00000209 -#define CFG_SDRAM0_RDCC		0x40000000 -#define CFG_SDRAM0_DLCR		0x030000a5 -#define CFG_SDRAM0_CLKTR	0x80000000 +#define CFG_SDRAM0_CODT		(SDRAM_CODT_RK0R_ON		| \ +				 SDRAM_CODT_CKLZ_36OHM		| \ +				 SDRAM_CODT_DQS_1_8_V_DDR2	| \ +				 SDRAM_CODT_IO_NMODE) +#define CFG_SDRAM0_RTR		SDRAM_RTR_RINT_ENCODE(1560) +#define CFG_SDRAM0_INITPLR0	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(80)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_NOP)) +#define CFG_SDRAM0_INITPLR1	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(3)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_PRECHARGE)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR)			| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_PRECHARGE_ALL)) +#define CFG_SDRAM0_INITPLR2	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(2)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR2)			| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR2_TEMP_COMMERCIAL)) +#define CFG_SDRAM0_INITPLR3	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(2)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR3)			| \ +		SDRAM_INITPLR_IMA_ENCODE(0)) +#define CFG_SDRAM0_INITPLR4	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(2)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR)			| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_DQS_DISABLE | \ +					 JEDEC_MA_EMR_RTT_75OHM)) +#define CFG_SDRAM0_INITPLR5	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(2)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR)			| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_MR_WR_DDR2_3_CYC | \ +					 JEDEC_MA_MR_CL_DDR2_4_0_CLK | \ +					 JEDEC_MA_MR_BLEN_4 | \ +					 JEDEC_MA_MR_DLL_RESET)) +#define CFG_SDRAM0_INITPLR6	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(3)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_PRECHARGE)		| \ +		SDRAM_INITPLR_IBA_ENCODE(0x0)				| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_PRECHARGE_ALL)) +#define CFG_SDRAM0_INITPLR7	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(26)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CFG_SDRAM0_INITPLR8	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(26)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CFG_SDRAM0_INITPLR9	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(26)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CFG_SDRAM0_INITPLR10	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(26)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CFG_SDRAM0_INITPLR11	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(2)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR)			| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_MR_WR_DDR2_3_CYC | \ +					 JEDEC_MA_MR_CL_DDR2_4_0_CLK | \ +					 JEDEC_MA_MR_BLEN_4)) +#define CFG_SDRAM0_INITPLR12	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(2)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR)			| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_OCD_ENTER	| \ +					 JEDEC_MA_EMR_RDQS_DISABLE | \ +					 JEDEC_MA_EMR_DQS_DISABLE | \ +					 JEDEC_MA_EMR_RTT_DISABLED | \ +					 JEDEC_MA_EMR_ODS_NORMAL)) +#define CFG_SDRAM0_INITPLR13	(SDRAM_INITPLR_ENABLE			| \ +		SDRAM_INITPLR_IMWT_ENCODE(2)				| \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR)		| \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR)			| \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_OCD_EXIT | \ +					 JEDEC_MA_EMR_RDQS_DISABLE | \ +					 JEDEC_MA_EMR_DQS_DISABLE | \ +					 JEDEC_MA_EMR_RTT_DISABLED | \ +					 JEDEC_MA_EMR_ODS_NORMAL)) +#define CFG_SDRAM0_INITPLR14	(SDRAM_INITPLR_DISABLE) +#define CFG_SDRAM0_INITPLR15	(SDRAM_INITPLR_DISABLE) +#define CFG_SDRAM0_RQDC		(SDRAM_RQDC_RQDE_ENABLE | \ +				 SDRAM_RQDC_RQFD_ENCODE(56)) +#define CFG_SDRAM0_RFDC		SDRAM_RFDC_RFFD_ENCODE(521) +#define CFG_SDRAM0_RDCC		(SDRAM_RDCC_RDSS_T2) +#define CFG_SDRAM0_DLCR		(SDRAM_DLCR_DCLM_AUTO		| \ +				 SDRAM_DLCR_DLCS_CONT_DONE	| \ +				 SDRAM_DLCR_DLCV_ENCODE(165)) +#define CFG_SDRAM0_CLKTR	(SDRAM_CLKTR_CLKP_180_DEG_ADV)  #define CFG_SDRAM0_WRDTR	0x00000000 -#define CFG_SDRAM0_SDTR1	0x80201000 -#define CFG_SDRAM0_SDTR2	0x32204232 -#define CFG_SDRAM0_SDTR3	0x080b0d1a -#define CFG_SDRAM0_MMODE	0x00000442 -#define CFG_SDRAM0_MEMODE	0x00000404 +#define CFG_SDRAM0_SDTR1	(SDRAM_SDTR1_LDOF_2_CLK	| \ +				 SDRAM_SDTR1_RTW_2_CLK	| \ +				 SDRAM_SDTR1_RTRO_1_CLK) +#define CFG_SDRAM0_SDTR2	(SDRAM_SDTR2_RCD_3_CLK		| \ +				 SDRAM_SDTR2_WTR_2_CLK		| \ +				 SDRAM_SDTR2_XSNR_32_CLK	| \ +				 SDRAM_SDTR2_WPC_4_CLK		| \ +				 SDRAM_SDTR2_RPC_2_CLK		| \ +				 SDRAM_SDTR2_RP_3_CLK		| \ +				 SDRAM_SDTR2_RRD_2_CLK) +#define CFG_SDRAM0_SDTR3	(SDRAM_SDTR3_RAS_ENCODE(8)	| \ +				 SDRAM_SDTR3_RC_ENCODE(11)	| \ +				 SDRAM_SDTR3_XCS		| \ +				 SDRAM_SDTR3_RFC_ENCODE(26)) +#define CFG_SDRAM0_MMODE	(SDRAM_MMODE_WR_DDR2_3_CYC | \ +				 SDRAM_MMODE_DCL_DDR2_4_0_CLK | \ +				 SDRAM_MMODE_BLEN_4) +#define CFG_SDRAM0_MEMODE	(SDRAM_MEMODE_DQS_DISABLE | \ +				 SDRAM_MEMODE_RTT_75OHM)  /*-----------------------------------------------------------------------   * I2C @@ -290,6 +375,7 @@   *----------------------------------------------------------------------*/  #define CONFIG_M88E1111_PHY	1  #define CONFIG_IBM_EMAC4_V4	1 +#define CONFIG_EMAC_PHY_MODE	EMAC_PHY_MODE_RGMII_RGMII  #define CONFIG_PHY_ADDR		1	/* PHY address, See schematics	*/  #define CONFIG_PHY_RESET	1	/* reset phy upon startup	*/ diff --git a/include/configs/makalu.h b/include/configs/makalu.h index 65b240e0f..ab92ae488 100644 --- a/include/configs/makalu.h +++ b/include/configs/makalu.h @@ -223,6 +223,7 @@   *----------------------------------------------------------------------*/  #define CONFIG_M88E1111_PHY	1  #define CONFIG_IBM_EMAC4_V4	1 +#define CONFIG_EMAC_PHY_MODE	EMAC_PHY_MODE_RGMII_RGMII  #define CONFIG_PHY_ADDR		6	/* PHY address, See schematics	*/  #define CONFIG_PHY_RESET	1	/* reset phy upon startup	*/ diff --git a/include/configs/ml507.h b/include/configs/ml507.h new file mode 100644 index 000000000..c653a5105 --- /dev/null +++ b/include/configs/ml507.h @@ -0,0 +1,122 @@ +/* + * (C) Copyright 2008 + *  Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + *  This work has been supported by: QTechnology  http://qtec.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. + * + *  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, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __CONFIG_H +#define __CONFIG_H +/* +#define DEBUG +#define ET_DEBUG +*/ + /*CPU*/ +#define CONFIG_XILINX_ML507	1 +#define CONFIG_XILINX_440	1 +#define CONFIG_440		1 +#define CONFIG_4xx		1 +#include "../board/xilinx/ml507/xparameters.h" + +/*Mem Map*/ +#define CFG_SDRAM_BASE		0x0 +#define CFG_SDRAM_SIZE_MB	256 +#define CFG_MONITOR_BASE	TEXT_BASE +#define CFG_MONITOR_LEN		( 192 * 1024 ) +#define CFG_MALLOC_LEN		( CFG_ENV_SIZE + 128 * 1024 ) + +/*Uart*/ +#define CONFIG_XILINX_UARTLITE +#define CONFIG_BAUDRATE		XPAR_UARTLITE_0_BAUDRATE +#define CFG_BAUDRATE_TABLE	{ XPAR_UARTLITE_0_BAUDRATE } +#define CONFIG_SERIAL_BASE	XPAR_UARTLITE_0_BASEADDR + +/*Cmd*/ +#include <config_cmd_default.h> +#define CONFIG_CMD_ASKENV +#define CONFIG_CMD_CACHE +#define CONFIG_CMD_DIAG +#define CONFIG_CMD_ELF +#define CONFIG_CMD_IRQ +#define CONFIG_CMD_REGINFO +#define CONFIG_CMD_JFFS2 +#define CONFIG_JFFS2_CMDLINE +#undef CONFIG_CMD_I2C +#undef CONFIG_CMD_DTT +#undef CONFIG_CMD_NET +#undef CONFIG_CMD_PING +#undef CONFIG_CMD_DHCP +#undef CONFIG_CMD_EEPROM +#undef CONFIG_CMD_IMLS + +/*Env*/ +#define	CFG_ENV_IS_IN_FLASH +#define	CFG_ENV_SIZE		0x20000 +#define	CFG_ENV_SECT_SIZE	0x20000 +#define CFG_ENV_OFFSET 		0x340000 +#define CFG_ENV_ADDR 		(XPAR_FLASH_MEM0_BASEADDR+CFG_ENV_OFFSET) + +/*Misc*/ +#define CONFIG_BOOTDELAY	5		/* autoboot after 5 seconds     */ +#define CFG_LONGHELP				/* undef to save memory         */ +#define CFG_PROMPT		"board:/# "	/* 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 ) +#define CFG_MAXARGS		16		/* max number of command args   */ +#define CFG_BARGSIZE		CFG_CBSIZE	/* Boot Argument Buffer Size */ +#define CFG_MEMTEST_START	0x00400000	/* memtest works on           */ +#define CFG_MEMTEST_END		0x00C00000	/* 4 ... 12 MB in DRAM        */ +#define CFG_LOAD_ADDR		0x00400000	/* default load address       */ +#define CFG_EXTBDINFO		1		/* Extended board_into (bd_t) */ +#define CFG_HZ			1000		/* decrementer freq: 1 ms ticks */ +#define CONFIG_CMDLINE_EDITING			/* add command line history     */ +#define CONFIG_AUTO_COMPLETE			/* add autocompletion support   */ +#define CONFIG_LOOPW				/* enable loopw command         */ +#define CONFIG_MX_CYCLIC			/* enable mdc/mwc commands      */ +#define CONFIG_ZERO_BOOTDELAY_CHECK		/* check for keypress on bootdelay==0 */ +#define CONFIG_VERSION_VARIABLE			/* include version env variable */ +#define CFG_CONSOLE_INFO_QUIET			/* don't print console @ startup */ +#define CFG_HUSH_PARSER				/* Use the HUSH parser          */ +#define	CFG_PROMPT_HUSH_PS2	"> " +#define CONFIG_LOADS_ECHO			/* echo on for serial download  */ +#define CFG_LOADS_BAUD_CHANGE			/* allow baudrate change        */ +#define CFG_BOOTMAPSZ		( 8 << 20 )	/* Initial Memory map for Linux */ +#define CONFIG_PREBOOT		"echo U-Boot is up and runnining;" + +/*Stack*/ +#define CFG_INIT_RAM_ADDR	0x800000	/* Initial RAM address    */ +#define CFG_INIT_RAM_END	0x2000		/* 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 +/*Speed*/ +#define CONFIG_SYS_CLK_FREQ	XPAR_CORE_CLOCK_FREQ_HZ + +/*Flash*/ +#define	CFG_FLASH_BASE		XPAR_FLASH_MEM0_BASEADDR +#define	CFG_FLASH_SIZE		(32*1024*1024) +#define	CFG_FLASH_CFI		1 +#define	CFG_FLASH_CFI_DRIVER	1 +#define	CFG_FLASH_EMPTY_INFO	1 +#define	CFG_MAX_FLASH_BANKS	1 +#define	CFG_MAX_FLASH_SECT	259 +#define	CFG_FLASH_PROTECTION +#define MTDIDS_DEFAULT		"nor0=ml507-flash" +#define MTDPARTS_DEFAULT	"mtdparts=ml507-flash:-(user)" + + +#endif						/* __CONFIG_H */ diff --git a/include/configs/redwood.h b/include/configs/redwood.h new file mode 100644 index 000000000..32ed5746c --- /dev/null +++ b/include/configs/redwood.h @@ -0,0 +1,186 @@ +/* + * Configuration for AMCC 460SX Ref (redwood) + * + * (C) Copyright 2008 + * Feng Kan, Applied Micro Circuits Corp., fkan@amcc.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 + */ +#ifndef __CONFIG_H +#define __CONFIG_H + +/*----------------------------------------------------------------------- + * High Level Configuration Options + *----------------------------------------------------------------------*/ +#define CONFIG_4xx			1	/* ... PPC4xx family	*/ +#define CONFIG_440			1	/* ... PPC460 family	*/ +#define CONFIG_460SX			1	/* ... PPC460 family	*/ +#define CONFIG_BOARD_EARLY_INIT_F	1	/* Call board_pre_init	*/ + +/*----------------------------------------------------------------------- + * Include common defines/options for all AMCC boards + *----------------------------------------------------------------------*/ +#define CONFIG_HOSTNAME		redwood + +#include "amcc-common.h" + +#define CONFIG_SYS_CLK_FREQ	33333333	/* external freq to pll	*/ + +/*----------------------------------------------------------------------- + * Base addresses -- Note these are effective addresses where the + * actual resources get mapped (not physical addresses) + *----------------------------------------------------------------------*/ +#define CFG_FLASH_BASE		0xfff00000	/* start of FLASH	*/ +#define CFG_PERIPHERAL_BASE	0xa0000000	/* internal peripherals	*/ +#define CFG_ISRAM_BASE		0x90000000	/* internal SRAM	*/ + +#define CFG_PCI_BASE		0xd0000000	/* internal PCI regs	*/ + +#define CFG_PCIE_MEMBASE        0x90000000      /* mapped PCIe memory   */ +#define CFG_PCIE0_MEMBASE       0x90000000      /* mapped PCIe memory   */ +#define CFG_PCIE1_MEMBASE       0xa0000000      /* mapped PCIe memory   */ +#define CFG_PCIE_MEMSIZE        0x01000000 + +#define CFG_PCIE0_XCFGBASE      0xb0000000 +#define CFG_PCIE1_XCFGBASE      0xb2000000 +#define CFG_PCIE2_XCFGBASE      0xb4000000 +#define CFG_PCIE0_CFGBASE       0xb6000000 +#define CFG_PCIE1_CFGBASE       0xb8000000 +#define CFG_PCIE2_CFGBASE       0xba000000 + +/* PCIe mapped UTL registers */ +#define CFG_PCIE0_REGBASE   0xd0000000 +#define CFG_PCIE1_REGBASE   0xd0010000 +#define CFG_PCIE2_REGBASE   0xd0020000 + +/* System RAM mapped to PCI space */ +#define CONFIG_PCI_SYS_MEM_BUS	CFG_SDRAM_BASE +#define CONFIG_PCI_SYS_MEM_PHYS	CFG_SDRAM_BASE +#define CONFIG_PCI_SYS_MEM_SIZE	(1024 * 1024 * 1024) + +#define CFG_FPGA_BASE		0xe2000000	/* epld			*/ +#define CFG_OPER_FLASH		0xe7000000	/* SRAM - OPER Flash	*/ + +/*----------------------------------------------------------------------- + * Initial RAM & stack pointer (placed in internal SRAM) + *----------------------------------------------------------------------*/ +#define CFG_TEMP_STACK_OCM	1 +#define CFG_OCM_DATA_ADDR	CFG_ISRAM_BASE +#define CFG_INIT_RAM_ADDR	CFG_ISRAM_BASE	/* Initial RAM address	*/ +#define CFG_INIT_RAM_END	0x2000		/* 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_POST_WORD_ADDR	(CFG_GBL_DATA_OFFSET - 0x4) +#define CFG_INIT_SP_OFFSET	CFG_POST_WORD_ADDR + +/*----------------------------------------------------------------------- + * DDR SDRAM + *----------------------------------------------------------------------*/ +#define CONFIG_SPD_EEPROM	1	/* Use SPD EEPROM for setup	*/ +#define CONFIG_DDR_ECC		1	/* with ECC support		*/ + +#define CFG_SPD_MAX_DIMMS       2 + +/* SPD i2c spd addresses */ +#define SPD_EEPROM_ADDRESS     {IIC0_DIMM0_ADDR, IIC0_DIMM1_ADDR} +#define IIC0_DIMM0_ADDR                0x53 +#define IIC0_DIMM1_ADDR                0x52 + +/*----------------------------------------------------------------------- + * I2C + *----------------------------------------------------------------------*/ +#define CFG_I2C_SPEED           400000  /* I2C speed                    */ + +#define IIC0_BOOTPROM_ADDR	0x50 +#define IIC0_ALT_BOOTPROM_ADDR	0x54 + +/* Don't probe these addrs */ +#define CFG_I2C_NOPROBES	{0x50, 0x52, 0x53, 0x54} + +#define CFG_I2C_EEPROM_ADDR_LEN	2	/* Bytes of address		*/ + +/*----------------------------------------------------------------------- + * Environment + *----------------------------------------------------------------------*/ +#undef  CFG_ENV_IS_IN_NVRAM		/* ... not in NVRAM		*/ +#define	CFG_ENV_IS_IN_FLASH	1	/* Environment uses flash	*/ +#undef	CFG_ENV_IS_IN_EEPROM		/* ... not in EEPROM		*/ + +#define CONFIG_PREBOOT	"echo;"	\ +	"echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \ +	"echo" + +#undef	CONFIG_BOOTARGS + +#define	CONFIG_EXTRA_ENV_SETTINGS					\ +	CONFIG_AMCC_DEF_ENV                                             \ +	CONFIG_AMCC_DEF_ENV_POWERPC                                     \ +	CONFIG_AMCC_DEF_ENV_NOR_UPD                                     \ +	CONFIG_AMCC_DEF_ENV_NAND_UPD                                    \ +	"kernel_addr=fc000000\0"                                        \ +	"fdt_addr=fc1e0000\0"                                           \ +	"ramdisk_addr=fc200000\0"                                       \ +	"" + +/*----------------------------------------------------------------------------+ +| Commands in addition to amcc-common.h ++----------------------------------------------------------------------------*/ +#define CONFIG_CMD_SDRAM + +#define CONFIG_BOOTCOMMAND	"run flash_self" + +#define CONFIG_BOOTDELAY	5	/* autoboot after 5 seconds	*/ + +#define	CONFIG_IBM_EMAC4_V4	1 +#define CONFIG_PHY_RESET        1	/* reset phy upon startup	*/ +#define CONFIG_PHY_RESET_DELAY	1000 +#define CONFIG_M88E1141_PHY	1	/* Enable phy */ +#define CONFIG_PHY_GIGE		1	/* Include GbE speed/duplex detection */ + +#define CONFIG_HAS_ETH0 +#define CONFIG_HAS_ETH1 +#define CONFIG_PHY_ADDR		0	/* PHY address, See schematics	*/ +#define CONFIG_PHY1_ADDR	1	/* PHY address, See schematics	*/ + +#undef CONFIG_WATCHDOG			/* watchdog disabled		*/ + +/*----------------------------------------------------------------------- + * FLASH related + *----------------------------------------------------------------------*/ +#define CFG_FLASH_CFI                   /* The flash is CFI compatible  */ +#define CFG_FLASH_CFI_DRIVER            /* Use common CFI driver        */ +#define CFG_FLASH_CFI_AMD_RESET 1       /* Use AMD (Spansion) reset cmd */ + +#define CFG_MAX_FLASH_BANKS	3	/* number of banks		*/ +#define CFG_MAX_FLASH_SECT	256	/* sectors per device		*/ + +#undef	CFG_FLASH_CHECKSUM +#define CFG_FLASH_ERASE_TOUT	120000	/* Timeout for Flash Erase (in ms) */ +#define CFG_FLASH_WRITE_TOUT	500	/* Timeout for Flash Write (in ms) */ + +#ifdef CFG_ENV_IS_IN_FLASH +#define CFG_ENV_SECT_SIZE	0x10000	/* size of one complete sector	*/ +#define CFG_ENV_ADDR		0xfffa0000 +#define CFG_ENV_SIZE		0x10000	/* Size of Environment vars	*/ +#endif /* CFG_ENV_IS_IN_FLASH */ + +/*---------------------------------------------------------------------------*/ + +#endif	/* __CONFIG_H */ diff --git a/include/ppc405.h b/include/ppc405.h index 2231a5fbb..f19b67f1b 100644 --- a/include/ppc405.h +++ b/include/ppc405.h @@ -119,367 +119,6 @@  #define dmasgc	(DMA_DCR_BASE+0x23)  /* DMA scatter/gather command register  */  #define dmaadr	(DMA_DCR_BASE+0x24)  /* DMA address decode register	     */ -/****************************************************************************** - * Universal interrupt controller - ******************************************************************************/ -#define UIC_SR	0x0			/* UIC status			   */ -#define UIC_ER	0x2			/* UIC enable			   */ -#define UIC_CR	0x3			/* UIC critical			   */ -#define UIC_PR	0x4			/* UIC polarity			   */ -#define UIC_TR	0x5			/* UIC triggering		   */ -#define UIC_MSR 0x6			/* UIC masked status		   */ -#define UIC_VR	0x7			/* UIC vector			   */ -#define UIC_VCR 0x8			/* UIC vector configuration	   */ - -#define UIC_DCR_BASE 0xc0 -#define UIC0_DCR_BASE UIC_DCR_BASE -#define uicsr	     (UIC_DCR_BASE+0x0)  /* UIC status			     */ -#define uicsrs	     (UIC_DCR_BASE+0x1)  /* UIC status set		     */ -#define uicer	     (UIC_DCR_BASE+0x2)  /* UIC enable			     */ -#define uiccr	     (UIC_DCR_BASE+0x3)  /* UIC critical		     */ -#define uicpr	     (UIC_DCR_BASE+0x4)  /* UIC polarity		     */ -#define uictr	     (UIC_DCR_BASE+0x5)  /* UIC triggering		     */ -#define uicmsr	     (UIC_DCR_BASE+0x6)  /* UIC masked status		     */ -#define uicvr	     (UIC_DCR_BASE+0x7)  /* UIC vector			     */ -#define uicvcr	     (UIC_DCR_BASE+0x8)  /* UIC vector configuration	     */ - -#if defined(CONFIG_405EX) -#define uic0sr	      uicsr		/* UIC status		 */ -#define uic0srs       uicsrs		/* UIC status set	 */ -#define uic0er	      uicer		/* UIC enable		 */ -#define uic0cr	      uiccr		/* UIC critical		 */ -#define uic0pr	      uicpr		/* UIC polarity		 */ -#define uic0tr	      uictr		/* UIC triggering	 */ -#define uic0msr       uicmsr		/* UIC masked status	 */ -#define uic0vr	      uicvr		/* UIC vector		 */ -#define uic0vcr       uicvcr		/* UIC vector configuration*/ - -#define UIC_DCR_BASE1 0xd0 -#define UIC1_DCR_BASE 0xd0 -#define uic1sr	      (UIC_DCR_BASE1+0x0)  /* UIC status	    */ -#define uic1srs       (UIC_DCR_BASE1+0x1)  /* UIC status set	    */ -#define uic1er	      (UIC_DCR_BASE1+0x2)  /* UIC enable	    */ -#define uic1cr	      (UIC_DCR_BASE1+0x3)  /* UIC critical	    */ -#define uic1pr	      (UIC_DCR_BASE1+0x4)  /* UIC polarity	    */ -#define uic1tr	      (UIC_DCR_BASE1+0x5)  /* UIC triggering	    */ -#define uic1msr       (UIC_DCR_BASE1+0x6)  /* UIC masked status     */ -#define uic1vr	      (UIC_DCR_BASE1+0x7)  /* UIC vector	    */ -#define uic1vcr       (UIC_DCR_BASE1+0x8)  /* UIC vector configuration*/ - -#define UIC_DCR_BASE2 0xe0 -#define UIC2_DCR_BASE 0xe0 -#define uic2sr	      (UIC_DCR_BASE2+0x0)  /* UIC status	    */ -#define uic2srs       (UIC_DCR_BASE2+0x1)  /* UIC status set	    */ -#define uic2er	      (UIC_DCR_BASE2+0x2)  /* UIC enable	    */ -#define uic2cr	      (UIC_DCR_BASE2+0x3)  /* UIC critical	    */ -#define uic2pr	      (UIC_DCR_BASE2+0x4)  /* UIC polarity	    */ -#define uic2tr	      (UIC_DCR_BASE2+0x5)  /* UIC triggering	    */ -#define uic2msr       (UIC_DCR_BASE2+0x6)  /* UIC masked status     */ -#define uic2vr	      (UIC_DCR_BASE2+0x7)  /* UIC vector	    */ -#define uic2vcr       (UIC_DCR_BASE2+0x8)  /* UIC vector configuration*/ -#endif - -/*-----------------------------------------------------------------------------+ -|  Universal interrupt controller interrupts -+-----------------------------------------------------------------------------*/ -#if defined(CONFIG_405EZ) -#define UIC_DMA0	0x80000000	/* DMA chan. 0			*/ -#define UIC_DMA1	0x40000000	/* DMA chan. 1			*/ -#define UIC_DMA2	0x20000000	/* DMA chan. 2			*/ -#define UIC_DMA3	0x10000000	/* DMA chan. 3			*/ -#define UIC_1588	0x08000000	/* IEEE 1588 network synchronization */ -#define UIC_UART0	0x04000000	/* UART 0			*/ -#define UIC_UART1	0x02000000	/* UART 1			*/ -#define UIC_CAN0	0x01000000	/* CAN 0			*/ -#define UIC_CAN1	0x00800000	/* CAN 1			*/ -#define UIC_SPI		0x00400000	/* SPI				*/ -#define UIC_IIC		0x00200000	/* IIC				*/ -#define UIC_CHT0	0x00100000	/* Chameleon timer high pri interrupt */ -#define UIC_CHT1	0x00080000	/* Chameleon timer high pri interrupt */ -#define UIC_USBH1	0x00040000	/* USB Host 1			*/ -#define UIC_USBH2	0x00020000	/* USB Host 2			*/ -#define UIC_USBDEV	0x00010000	/* USB Device			*/ -#define UIC_ENET	0x00008000	/* Ethernet interrupt status	*/ -#define UIC_ENET1	0x00008000	/* dummy define			*/ -#define UIC_EMAC_WAKE	0x00004000	/* EMAC wake up			*/ - -#define UIC_MADMAL	0x00002000	/* Logical OR of following MadMAL int */ -#define UIC_MAL_SERR	0x00002000	/*   MAL SERR			*/ -#define UIC_MAL_TXDE	0x00002000	/*   MAL TXDE			*/ -#define UIC_MAL_RXDE	0x00002000	/*   MAL RXDE			*/ - -#define UIC_MAL_TXEOB	0x00001000	/* MAL TXEOB			*/ -#define UIC_MAL_TXEOB1	0x00000800	/* MAL TXEOB1			*/ -#define UIC_MAL_RXEOB	0x00000400	/* MAL RXEOB			*/ -#define UIC_NAND	0x00000200	/* NAND Flash controller	*/ -#define UIC_ADC		0x00000100	/* ADC				*/ -#define UIC_DAC		0x00000080	/* DAC				*/ -#define UIC_OPB2PLB	0x00000040	/* OPB to PLB bridge interrupt	*/ -#define UIC_RESERVED0	0x00000020	/* Reserved			*/ -#define UIC_EXT0	0x00000010	/* External  interrupt 0	*/ -#define UIC_EXT1	0x00000008	/* External  interrupt 1	*/ -#define UIC_EXT2	0x00000004	/* External  interrupt 2	*/ -#define UIC_EXT3	0x00000002	/* External  interrupt 3	*/ -#define UIC_EXT4	0x00000001	/* External  interrupt 4	*/ - -#elif defined(CONFIG_405EX) - -/* UIC 0 */ -#define UIC_U0			0x80000000	/* */ -#define UIC_U1			0x40000000	/* */ -#define UIC_IIC0		0x20000000	/* */ -#define UIC_PKA			0x10000000	/* */ -#define UIC_TRNG		0x08000000	/* */ -#define UIC_EBM			0x04000000	/* */ -#define UIC_BGI			0x02000000	/* */ -#define UIC_IIC1		0x01000000	/* */ -#define UIC_SPI			0x00800000	/* */ -#define UIC_EIRQ0		0x00400000	/**/ -#define UIC_MTE			0x00200000	/*MAL Tx EOB */ -#define UIC_MRE			0x00100000	/*MAL Rx EOB */ -#define UIC_DMA0		0x00080000	/* */ -#define UIC_DMA1		0x00040000	/* */ -#define UIC_DMA2		0x00020000	/* */ -#define UIC_DMA3		0x00010000	/* */ -#define UIC_PCIE0AL		0x00008000	/* */ -#define UIC_PCIE0VPD		0x00004000	/* */ -#define UIC_RPCIE0HRST		0x00002000	/* */ -#define UIC_FPCIE0HRST		0x00001000	/* */ -#define UIC_PCIE0TCR		0x00000800	/* */ -#define UIC_PCIEMSI0		0x00000400	/* */ -#define UIC_PCIEMSI1		0x00000200	/* */ -#define UIC_SECURITY		0x00000100	/* */ -#define UIC_ENET		0x00000080	/* */ -#define UIC_ENET1		0x00000040	/* */ -#define UIC_PCIEMSI2		0x00000020	/* */ -#define UIC_EIRQ4		0x00000010	/**/ -#define UICB0_UIC2NCI		0x00000008	/* */ -#define UICB0_UIC2CI		0x00000004	/* */ -#define UICB0_UIC1NCI		0x00000002	/* */ -#define UICB0_UIC1CI		0x00000001	/* */ - -#define UICB0_ALL		(UICB0_UIC1CI | UICB0_UIC1NCI | \ -				 UICB0_UIC1CI | UICB0_UIC2NCI) - -#define UIC_MAL_TXEOB		UIC_MTE/* MAL TXEOB			     */ -#define UIC_MAL_RXEOB		UIC_MRE/* MAL RXEOB			     */ -/* UIC 1 */ -#define UIC_MS			0x80000000	/* MAL SERR */ -#define UIC_MTDE		0x40000000	/* MAL TXDE */ -#define UIC_MRDE		0x20000000	/* MAL RXDE */ -#define UIC_PCIE0BMVC0		0x10000000	/* */ -#define UIC_PCIE0DCRERR		0x08000000	/* */ -#define UIC_EBC			0x04000000	/* */ -#define UIC_NDFC		0x02000000	/* */ -#define UIC_PCEI1DCRERR		0x01000000	/* */ -#define UIC_GPTCMPT8		0x00800000	/* */ -#define UIC_GPTCMPT9		0x00400000	/* */ -#define UIC_PCIE1AL		0x00200000	/* */ -#define UIC_PCIE1VPD		0x00100000	/* */ -#define UIC_RPCE1HRST		0x00080000	/* */ -#define UIC_FPCE1HRST		0x00040000	/* */ -#define UIC_PCIE1TCR		0x00020000	/* */ -#define UIC_PCIE1VC0		0x00010000	/* */ -#define UIC_GPTCMPT3		0x00008000	/* */ -#define UIC_GPTCMPT4		0x00004000	/* */ -#define UIC_EIRQ7		0x00002000	/* */ -#define UIC_EIRQ8		0x00001000	/* */ -#define UIC_EIRQ9		0x00000800	/* */ -#define UIC_GPTCMP5		0x00000400	/* */ -#define UIC_GPTCMP6		0x00000200	/* */ -#define UIC_GPTCMP7		0x00000100	/* */ -#define UIC_SROM		0x00000080	/* SERIAL ROM*/ -#define UIC_GPTDECPULS		0x00000040	/* GPT Decrement pulse*/ -#define UIC_EIRQ2		0x00000020	/* */ -#define UIC_EIRQ5		0x00000010	/* */ -#define UIC_EIRQ6		0x00000008	/* */ -#define UIC_EMAC0WAKE		0x00000004	/* */ -#define UIC_EIRQ1		0x00000002	/* */ -#define UIC_EMAC1WAKE		0x00000001	/* */ -#define UIC_MAL_SERR		UIC_MS		/* MAL SERR	*/ -#define UIC_MAL_TXDE		UIC_MTDE		/* MAL TXDE	*/ -#define UIC_MAL_RXDE		UIC_MRDE		/* MAL RXDE	*/ -/* UIC 2 */ -#define UIC_PCIE0INTA		0x80000000	/* PCIE0 INTA*/ -#define UIC_PCIE0INTB		0x40000000	/* PCIE0 INTB*/ -#define UIC_PCIE0INTC		0x20000000	/* PCIE0 INTC*/ -#define UIC_PCIE0INTD		0x10000000	/* PCIE0 INTD*/ -#define UIC_EIRQ3		0x08000000	/* External IRQ 3*/ -#define UIC_DDRMCUE		0x04000000	/* */ -#define UIC_DDRMCCE		0x02000000	/* */ -#define UIC_MALINTCOATX0	0x01000000	/* Interrupt coalecence TX0*/ -#define UIC_MALINTCOATX1	0x00800000	/* Interrupt coalecence TX1*/ -#define UIC_MALINTCOARX0	0x00400000	/* Interrupt coalecence RX0*/ -#define UIC_MALINTCOARX1	0x00200000	/* Interrupt coalecence RX1*/ -#define UIC_PCIE1INTA		0x00100000	/* PCIE0 INTA*/ -#define UIC_PCIE1INTB		0x00080000	/* PCIE0 INTB*/ -#define UIC_PCIE1INTC		0x00040000	/* PCIE0 INTC*/ -#define UIC_PCIE1INTD		0x00020000	/* PCIE0 INTD*/ -#define UIC_RPCIEMSI2		0x00010000	/* MSI level 2 Note this looks same as uic0-26*/ -#define UIC_PCIEMSI3		0x00008000	/* MSI level 2*/ -#define UIC_PCIEMSI4		0x00004000	/* MSI level 2*/ -#define UIC_PCIEMSI5		0x00002000	/* MSI level 2*/ -#define UIC_PCIEMSI6		0x00001000	/* MSI level 2*/ -#define UIC_PCIEMSI7		0x00000800	/* MSI level 2*/ -#define UIC_PCIEMSI8		0x00000400	/* MSI level 2*/ -#define UIC_PCIEMSI9		0x00000200	/* MSI level 2*/ -#define UIC_PCIEMSI10		0x00000100	/* MSI level 2*/ -#define UIC_PCIEMSI11		0x00000080	/* MSI level 2*/ -#define UIC_PCIEMSI12		0x00000040	/* MSI level 2*/ -#define UIC_PCIEMSI13		0x00000020	/* MSI level 2*/ -#define UIC_PCIEMSI14		0x00000010	/* MSI level 2*/ -#define UIC_PCIEMSI15		0x00000008	/* MSI level 2*/ -#define UIC_PLB4XAHB		0x00000004	/* PLBxAHB bridge*/ -#define UIC_USBWAKE		0x00000002	/* USB wakup*/ -#define UIC_USBOTG		0x00000001	/*  USB OTG*/ -#define UIC_ETH0	UIC_ENET -#define UIC_ETH1	UIC_ENET1 - -#else	/* !defined(CONFIG_405EZ) */ - -#define UIC_UART0     0x80000000      /* UART 0				    */ -#define UIC_UART1     0x40000000      /* UART 1				    */ -#define UIC_IIC       0x20000000      /* IIC				    */ -#define UIC_EXT_MAST  0x10000000      /* External Master		    */ -#define UIC_PCI       0x08000000      /* PCI write to command reg	    */ -#define UIC_DMA0      0x04000000      /* DMA chan. 0			    */ -#define UIC_DMA1      0x02000000      /* DMA chan. 1			    */ -#define UIC_DMA2      0x01000000      /* DMA chan. 2			    */ -#define UIC_DMA3      0x00800000      /* DMA chan. 3			    */ -#define UIC_EMAC_WAKE 0x00400000      /* EMAC wake up			    */ -#define UIC_MAL_SERR  0x00200000      /* MAL SERR			    */ -#define UIC_MAL_TXEOB 0x00100000      /* MAL TXEOB			    */ -#define UIC_MAL_RXEOB 0x00080000      /* MAL RXEOB			    */ -#define UIC_MAL_TXDE  0x00040000      /* MAL TXDE			    */ -#define UIC_MAL_RXDE  0x00020000      /* MAL RXDE			    */ -#define UIC_ENET      0x00010000      /* Ethernet0			    */ -#define UIC_ENET1     0x00004000      /* Ethernet1 on 405EP		    */ -#define UIC_ECC_CE    0x00004000      /* ECC Correctable Error on 405GP     */ -#define UIC_EXT_PCI_SERR 0x00008000   /* External PCI SERR#		    */ -#define UIC_PCI_PM    0x00002000      /* PCI Power Management		    */ -#define UIC_EXT0      0x00000040      /* External  interrupt 0		    */ -#define UIC_EXT1      0x00000020      /* External  interrupt 1		    */ -#define UIC_EXT2      0x00000010      /* External  interrupt 2		    */ -#define UIC_EXT3      0x00000008      /* External  interrupt 3		    */ -#define UIC_EXT4      0x00000004      /* External  interrupt 4		    */ -#define UIC_EXT5      0x00000002      /* External  interrupt 5		    */ -#define UIC_EXT6      0x00000001      /* External  interrupt 6		    */ -#endif	/* defined(CONFIG_405EZ) */ - -/****************************************************************************** - * External Bus Controller (EBC) - *****************************************************************************/ - -/* Bank Configuration Register */ -#define	EBC_BXCR_BAS_MASK	PPC_REG_VAL(11, 0xFFF) -#define EBC_BXCR_BAS_ENCODE(n)	(((static_cast(unsigned long, n)) & \ -				  EBC_BXCR_BAS_MASK) << 0) -#define EBC_BXCR_BS_MASK	PPC_REG_VAL(14, 0x7) -#define EBC_BXCR_BS_1MB		PPC_REG_VAL(14, 0x0) -#define EBC_BXCR_BS_2MB		PPC_REG_VAL(14, 0x1) -#define EBC_BXCR_BS_4MB		PPC_REG_VAL(14, 0x2) -#define EBC_BXCR_BS_8MB		PPC_REG_VAL(14, 0x3) -#define EBC_BXCR_BS_16MB	PPC_REG_VAL(14, 0x4) -#define EBC_BXCR_BS_32MB	PPC_REG_VAL(14, 0x5) -#define EBC_BXCR_BS_64MB	PPC_REG_VAL(14, 0x6) -#define EBC_BXCR_BS_128MB	PPC_REG_VAL(14, 0x7) -#define EBC_BXCR_BU_MASK	PPC_REG_VAL(16, 0x3) -#define	EBC_BXCR_BU_NONE	PPC_REG_VAL(16, 0x0) -#define EBC_BXCR_BU_R		PPC_REG_VAL(16, 0x1) -#define EBC_BXCR_BU_W		PPC_REG_VAL(16, 0x2) -#define EBC_BXCR_BU_RW		PPC_REG_VAL(16, 0x3) -#define EBC_BXCR_BW_MASK	PPC_REG_VAL(18, 0x3) -#define EBC_BXCR_BW_8BIT	PPC_REG_VAL(18, 0x0) -#define EBC_BXCR_BW_16BIT	PPC_REG_VAL(18, 0x1) -#define EBC_BXCR_BW_32BIT	PPC_REG_VAL(18, 0x3) - -/* Bank Access Parameter Register */ -#define EBC_BXAP_BME_ENABLED	PPC_REG_VAL(0, 0x1) -#define EBC_BXAP_BME_DISABLED	PPC_REG_VAL(0, 0x0) -#define EBC_BXAP_TWT_ENCODE(n)	PPC_REG_VAL(8, \ -					    (static_cast(unsigned long, n)) \ -					    & 0xFF) -#define	EBC_BXAP_FWT_ENCODE(n)	PPC_REG_VAL(5, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x1F) -#define	EBC_BXAP_BWT_ENCODE(n)	PPC_REG_VAL(8, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x7) -#define EBC_BXAP_BCE_DISABLE	PPC_REG_VAL(9, 0x0) -#define EBC_BXAP_BCE_ENABLE	PPC_REG_VAL(9, 0x1) -#define EBC_BXAP_BCT_MASK	PPC_REG_VAL(11, 0x3) -#define EBC_BXAP_BCT_2TRANS	PPC_REG_VAL(11, 0x0) -#define EBC_BXAP_BCT_4TRANS	PPC_REG_VAL(11, 0x1) -#define EBC_BXAP_BCT_8TRANS	PPC_REG_VAL(11, 0x2) -#define EBC_BXAP_BCT_16TRANS	PPC_REG_VAL(11, 0x3) -#define EBC_BXAP_CSN_ENCODE(n)	PPC_REG_VAL(13, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x3) -#define EBC_BXAP_OEN_ENCODE(n)	PPC_REG_VAL(15, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x3) -#define EBC_BXAP_WBN_ENCODE(n)	PPC_REG_VAL(17, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x3) -#define EBC_BXAP_WBF_ENCODE(n)	PPC_REG_VAL(19, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x3) -#define EBC_BXAP_TH_ENCODE(n)	PPC_REG_VAL(22, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x7) -#define EBC_BXAP_RE_ENABLED	PPC_REG_VAL(23, 0x1) -#define EBC_BXAP_RE_DISABLED	PPC_REG_VAL(23, 0x0) -#define EBC_BXAP_SOR_DELAYED	PPC_REG_VAL(24, 0x0) -#define EBC_BXAP_SOR_NONDELAYED	PPC_REG_VAL(24, 0x1) -#define EBC_BXAP_BEM_WRITEONLY	PPC_REG_VAL(25, 0x0) -#define EBC_BXAP_BEM_RW		PPC_REG_VAL(25, 0x1) -#define EBC_BXAP_PEN_DISABLED	PPC_REG_VAL(26, 0x0) -#define EBC_BXAP_PEN_ENABLED	PPC_REG_VAL(26, 0x1) - -/* Configuration Register */ -#define EBC_CFG_LE_MASK		PPC_REG_VAL(0, 0x1) -#define EBC_CFG_LE_UNLOCK	PPC_REG_VAL(0, 0x0) -#define EBC_CFG_LE_LOCK		PPC_REG_VAL(0, 0x1) -#define EBC_CFG_PTD_MASK	PPC_REG_VAL(1, 0x1) -#define EBC_CFG_PTD_ENABLE	PPC_REG_VAL(1, 0x0) -#define EBC_CFG_PTD_DISABLE	PPC_REG_VAL(1, 0x1) -#define EBC_CFG_RTC_MASK	PPC_REG_VAL(4, 0x7) -#define EBC_CFG_RTC_16PERCLK	PPC_REG_VAL(4, 0x0) -#define EBC_CFG_RTC_32PERCLK	PPC_REG_VAL(4, 0x1) -#define EBC_CFG_RTC_64PERCLK	PPC_REG_VAL(4, 0x2) -#define EBC_CFG_RTC_128PERCLK	PPC_REG_VAL(4, 0x3) -#define EBC_CFG_RTC_256PERCLK	PPC_REG_VAL(4, 0x4) -#define EBC_CFG_RTC_512PERCLK	PPC_REG_VAL(4, 0x5) -#define EBC_CFG_RTC_1024PERCLK	PPC_REG_VAL(4, 0x6) -#define EBC_CFG_RTC_2048PERCLK	PPC_REG_VAL(4, 0x7) -#define EBC_CFG_ATC_MASK	PPC_REG_VAL(5, 0x1) -#define EBC_CFG_ATC_HI		PPC_REG_VAL(5, 0x0) -#define EBC_CFG_ATC_PREVIOUS	PPC_REG_VAL(5, 0x1) -#define EBC_CFG_DTC_MASK	PPC_REG_VAL(6, 0x1) -#define EBC_CFG_DTC_HI		PPC_REG_VAL(6, 0x0) -#define EBC_CFG_DTC_PREVIOUS	PPC_REG_VAL(6, 0x1) -#define EBC_CFG_CTC_MASK	PPC_REG_VAL(7, 0x1) -#define EBC_CFG_CTC_HI		PPC_REG_VAL(7, 0x0) -#define EBC_CFG_CTC_PREVIOUS	PPC_REG_VAL(7, 0x1) -#define EBC_CFG_OEO_MASK	PPC_REG_VAL(8, 0x1) -#define EBC_CFG_OEO_DISABLE	PPC_REG_VAL(8, 0x0) -#define EBC_CFG_OEO_ENABLE	PPC_REG_VAL(8, 0x1) -#define EBC_CFG_EMC_MASK	PPC_REG_VAL(9, 0x1) -#define EBC_CFG_EMC_NONDEFAULT	PPC_REG_VAL(9, 0x0) -#define EBC_CFG_EMC_DEFAULT	PPC_REG_VAL(9, 0x1) -#define EBC_CFG_PME_MASK	PPC_REG_VAL(14, 0x1) -#define EBC_CFG_PME_DISABLE	PPC_REG_VAL(14, 0x0) -#define EBC_CFG_PME_ENABLE	PPC_REG_VAL(14, 0x1) -#define EBC_CFG_PMT_MASK	PPC_REG_VAL(19, 0x1F) -#define EBC_CFG_PMT_ENCODE(n)	PPC_REG_VAL(19, \ -					    (static_cast(unsigned long, n)) \ -					    & 0x1F) -#define EBC_CFG_PR_MASK		PPC_REG_VAL(21, 0x3) -#define EBC_CFG_PR_16		PPC_REG_VAL(21, 0x0) -#define EBC_CFG_PR_32		PPC_REG_VAL(21, 0x1) -#define EBC_CFG_PR_64		PPC_REG_VAL(21, 0x2) -#define EBC_CFG_PR_128		PPC_REG_VAL(21, 0x3) -  #ifndef CONFIG_405EP  /******************************************************************************   * Decompression Controller @@ -1254,6 +893,42 @@  #if defined(CONFIG_405EX)  #define SDR0_SRST		0x0200 +/* + * Software Reset Register + */ +#define SDR0_SRST_BGO		PPC_REG_VAL(0, 1) +#define SDR0_SRST_PLB4		PPC_REG_VAL(1, 1) +#define SDR0_SRST_EBC		PPC_REG_VAL(2, 1) +#define SDR0_SRST_OPB		PPC_REG_VAL(3, 1) +#define SDR0_SRST_UART0		PPC_REG_VAL(4, 1) +#define SDR0_SRST_UART1		PPC_REG_VAL(5, 1) +#define SDR0_SRST_IIC0		PPC_REG_VAL(6, 1) +#define SDR0_SRST_BGI		PPC_REG_VAL(7, 1) +#define SDR0_SRST_GPIO		PPC_REG_VAL(8, 1) +#define SDR0_SRST_GPT		PPC_REG_VAL(9, 1) +#define SDR0_SRST_DMC		PPC_REG_VAL(10, 1) +#define SDR0_SRST_RGMII		PPC_REG_VAL(11, 1) +#define SDR0_SRST_EMAC0		PPC_REG_VAL(12, 1) +#define SDR0_SRST_EMAC1		PPC_REG_VAL(13, 1) +#define SDR0_SRST_CPM		PPC_REG_VAL(14, 1) +#define SDR0_SRST_EPLL		PPC_REG_VAL(15, 1) +#define SDR0_SRST_UIC		PPC_REG_VAL(16, 1) +#define SDR0_SRST_UPRST		PPC_REG_VAL(17, 1) +#define SDR0_SRST_IIC1		PPC_REG_VAL(18, 1) +#define SDR0_SRST_SCP		PPC_REG_VAL(19, 1) +#define SDR0_SRST_UHRST		PPC_REG_VAL(20, 1) +#define SDR0_SRST_DMA		PPC_REG_VAL(21, 1) +#define SDR0_SRST_DMAC		PPC_REG_VAL(22, 1) +#define SDR0_SRST_MAL		PPC_REG_VAL(23, 1) +#define SDR0_SRST_EBM		PPC_REG_VAL(24, 1) +#define SDR0_SRST_GPTR		PPC_REG_VAL(25, 1) +#define SDR0_SRST_PE0		PPC_REG_VAL(26, 1) +#define SDR0_SRST_PE1		PPC_REG_VAL(27, 1) +#define SDR0_SRST_CRYP		PPC_REG_VAL(28, 1) +#define SDR0_SRST_PKP		PPC_REG_VAL(29, 1) +#define SDR0_SRST_AHB		PPC_REG_VAL(30, 1) +#define SDR0_SRST_NDFC		PPC_REG_VAL(31, 1) +  #define sdr_uart0	0x0120	/* UART0 Config */  #define sdr_uart1	0x0121	/* UART1 Config */  #define sdr_mfr		0x4300	/* SDR0_MFR reg */ diff --git a/include/ppc440.h b/include/ppc440.h index c581f1b46..92db15f31 100644 --- a/include/ppc440.h +++ b/include/ppc440.h @@ -77,7 +77,6 @@  #define	 tbl	0x11c	/* time base lower (supervisor)*/  #define	 tbu	0x11d	/* time base upper (supervisor)*/  #define	 pir	0x11e	/* processor id register */ -/*#define  pvr	0x11f	 processor version register */  #define	 dbsr	0x130	/* debug status register */  #define	 dbcr0	0x134	/* debug control register 0 */  #define	 dbcr1	0x135	/* debug control register 1 */ @@ -268,86 +267,6 @@  #define sdr_sdstp6	0x4005  #define sdr_sdstp7	0x4007 -/****************************************************************************** - * PCI express defines - ******************************************************************************/ -#define SDR0_PE0UTLSET1		0x00000300	/* PE0 Upper transaction layer conf setting */ -#define SDR0_PE0UTLSET2		0x00000301	/* PE0 Upper transaction layer conf setting 2 */ -#define SDR0_PE0DLPSET		0x00000302	/* PE0 Data link & logical physical configuration */ -#define SDR0_PE0LOOP		0x00000303	/* PE0 Loopback interface status */ -#define SDR0_PE0RCSSET		0x00000304	/* PE0 Reset, clock & shutdown setting */ -#define SDR0_PE0RCSSTS		0x00000305	/* PE0 Reset, clock & shutdown status */ -#define SDR0_PE0HSSSET1L0	0x00000306	/* PE0 HSS Control Setting 1: Lane 0 */ -#define SDR0_PE0HSSSET2L0	0x00000307	/* PE0 HSS Control Setting 2: Lane 0 */ -#define SDR0_PE0HSSSTSL0	0x00000308	/* PE0 HSS Control Status : Lane 0 */ -#define SDR0_PE0HSSSET1L1	0x00000309	/* PE0 HSS Control Setting 1: Lane 1 */ -#define SDR0_PE0HSSSET2L1	0x0000030A	/* PE0 HSS Control Setting 2: Lane 1 */ -#define SDR0_PE0HSSSTSL1	0x0000030B	/* PE0 HSS Control Status : Lane 1 */ -#define SDR0_PE0HSSSET1L2	0x0000030C	/* PE0 HSS Control Setting 1: Lane 2 */ -#define SDR0_PE0HSSSET2L2	0x0000030D	/* PE0 HSS Control Setting 2: Lane 2 */ -#define SDR0_PE0HSSSTSL2	0x0000030E	/* PE0 HSS Control Status : Lane 2 */ -#define SDR0_PE0HSSSET1L3	0x0000030F	/* PE0 HSS Control Setting 1: Lane 3 */ -#define SDR0_PE0HSSSET2L3	0x00000310	/* PE0 HSS Control Setting 2: Lane 3 */ -#define SDR0_PE0HSSSTSL3	0x00000311	/* PE0 HSS Control Status : Lane 3 */ -#define SDR0_PE0HSSSET1L4	0x00000312	/* PE0 HSS Control Setting 1: Lane 4 */ -#define SDR0_PE0HSSSET2L4	0x00000313	/* PE0 HSS Control Setting 2: Lane 4 */ -#define SDR0_PE0HSSSTSL4	0x00000314	/* PE0 HSS Control Status : Lane 4 */ -#define SDR0_PE0HSSSET1L5	0x00000315	/* PE0 HSS Control Setting 1: Lane 5 */ -#define SDR0_PE0HSSSET2L5	0x00000316	/* PE0 HSS Control Setting 2: Lane 5 */ -#define SDR0_PE0HSSSTSL5	0x00000317	/* PE0 HSS Control Status : Lane 5 */ -#define SDR0_PE0HSSSET1L6	0x00000318	/* PE0 HSS Control Setting 1: Lane 6 */ -#define SDR0_PE0HSSSET2L6	0x00000319	/* PE0 HSS Control Setting 2: Lane 6 */ -#define SDR0_PE0HSSSTSL6	0x0000031A	/* PE0 HSS Control Status : Lane 6 */ -#define SDR0_PE0HSSSET1L7	0x0000031B	/* PE0 HSS Control Setting 1: Lane 7 */ -#define SDR0_PE0HSSSET2L7	0x0000031C	/* PE0 HSS Control Setting 2: Lane 7 */ -#define SDR0_PE0HSSSTSL7	0x0000031D	/* PE0 HSS Control Status : Lane 7 */ -#define SDR0_PE0HSSSEREN	0x0000031E	/* PE0 Serdes Transmitter Enable */ -#define SDR0_PE0LANEABCD	0x0000031F	/* PE0 Lanes ABCD affectation */ -#define SDR0_PE0LANEEFGH	0x00000320	/* PE0 Lanes EFGH affectation */ - -#define SDR0_PE1UTLSET1		0x00000340	/* PE1 Upper transaction layer conf setting */ -#define SDR0_PE1UTLSET2		0x00000341	/* PE1 Upper transaction layer conf setting 2 */ -#define SDR0_PE1DLPSET		0x00000342	/* PE1 Data link & logical physical configuration */ -#define SDR0_PE1LOOP		0x00000343	/* PE1 Loopback interface status */ -#define SDR0_PE1RCSSET		0x00000344	/* PE1 Reset, clock & shutdown setting */ -#define SDR0_PE1RCSSTS		0x00000345	/* PE1 Reset, clock & shutdown status */ -#define SDR0_PE1HSSSET1L0	0x00000346	/* PE1 HSS Control Setting 1: Lane 0 */ -#define SDR0_PE1HSSSET2L0	0x00000347	/* PE1 HSS Control Setting 2: Lane 0 */ -#define SDR0_PE1HSSSTSL0	0x00000348	/* PE1 HSS Control Status : Lane 0 */ -#define SDR0_PE1HSSSET1L1	0x00000349	/* PE1 HSS Control Setting 1: Lane 1 */ -#define SDR0_PE1HSSSET2L1	0x0000034A	/* PE1 HSS Control Setting 2: Lane 1 */ -#define SDR0_PE1HSSSTSL1	0x0000034B	/* PE1 HSS Control Status : Lane 1 */ -#define SDR0_PE1HSSSET1L2	0x0000034C	/* PE1 HSS Control Setting 1: Lane 2 */ -#define SDR0_PE1HSSSET2L2	0x0000034D	/* PE1 HSS Control Setting 2: Lane 2 */ -#define SDR0_PE1HSSSTSL2	0x0000034E	/* PE1 HSS Control Status : Lane 2 */ -#define SDR0_PE1HSSSET1L3	0x0000034F	/* PE1 HSS Control Setting 1: Lane 3 */ -#define SDR0_PE1HSSSET2L3	0x00000350	/* PE1 HSS Control Setting 2: Lane 3 */ -#define SDR0_PE1HSSSTSL3	0x00000351	/* PE1 HSS Control Status : Lane 3 */ -#define SDR0_PE1HSSSEREN	0x00000352	/* PE1 Serdes Transmitter Enable */ -#define SDR0_PE1LANEABCD	0x00000353	/* PE1 Lanes ABCD affectation */ -#define SDR0_PE2UTLSET1		0x00000370	/* PE2 Upper transaction layer conf setting */ -#define SDR0_PE2UTLSET2		0x00000371	/* PE2 Upper transaction layer conf setting 2 */ -#define SDR0_PE2DLPSET		0x00000372	/* PE2 Data link & logical physical configuration */ -#define SDR0_PE2LOOP		0x00000373	/* PE2 Loopback interface status */ -#define SDR0_PE2RCSSET		0x00000374	/* PE2 Reset, clock & shutdown setting */ -#define SDR0_PE2RCSSTS		0x00000375	/* PE2 Reset, clock & shutdown status */ -#define SDR0_PE2HSSSET1L0	0x00000376	/* PE2 HSS Control Setting 1: Lane 0 */ -#define SDR0_PE2HSSSET2L0	0x00000377	/* PE2 HSS Control Setting 2: Lane 0 */ -#define SDR0_PE2HSSSTSL0	0x00000378	/* PE2 HSS Control Status : Lane 0 */ -#define SDR0_PE2HSSSET1L1	0x00000379	/* PE2 HSS Control Setting 1: Lane 1 */ -#define SDR0_PE2HSSSET2L1	0x0000037A	/* PE2 HSS Control Setting 2: Lane 1 */ -#define SDR0_PE2HSSSTSL1	0x0000037B	/* PE2 HSS Control Status : Lane 1 */ -#define SDR0_PE2HSSSET1L2	0x0000037C	/* PE2 HSS Control Setting 1: Lane 2 */ -#define SDR0_PE2HSSSET2L2	0x0000037D	/* PE2 HSS Control Setting 2: Lane 2 */ -#define SDR0_PE2HSSSTSL2	0x0000037E	/* PE2 HSS Control Status : Lane 2 */ -#define SDR0_PE2HSSSET1L3	0x0000037F	/* PE2 HSS Control Setting 1: Lane 3 */ -#define SDR0_PE2HSSSET2L3	0x00000380	/* PE2 HSS Control Setting 2: Lane 3 */ -#define SDR0_PE2HSSSTSL3	0x00000381	/* PE2 HSS Control Status : Lane 3 */ -#define SDR0_PE2HSSSEREN	0x00000382	/* PE2 Serdes Transmitter Enable */ -#define SDR0_PE2LANEABCD	0x00000383	/* PE2 Lanes ABCD affectation */ -#define SDR0_PEGPLLSET1		0x000003A0	/* PE Pll LC Tank Setting1 */ -#define SDR0_PEGPLLSET2		0x000003A1	/* PE Pll LC Tank Setting2 */ -#define SDR0_PEGPLLSTS		0x000003A2	/* PE Pll LC Tank Status */  #endif /* CONFIG_440SPE */  /*----------------------------------------------------------------------------- @@ -749,7 +668,8 @@   +----------------------------------------------------------------------------*/  #if defined (CONFIG_440GX) || \      defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ -    defined(CONFIG_460EX) || defined(CONFIG_460GT) +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  #define L2_CACHE_BASE	0x030  #define l2_cache_cfg	(L2_CACHE_BASE+0x00)	/* L2 Cache Config	*/  #define l2_cache_cmd	(L2_CACHE_BASE+0x01)	/* L2 Cache Command	*/ @@ -837,7 +757,8 @@  /*-----------------------------------------------------------------------------   | Clocking, Power Management and Chip Control   +----------------------------------------------------------------------------*/ -#if defined(CONFIG_460EX) || defined(CONFIG_460GT) +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  #define CNTRL_DCR_BASE 0x160  #else  #define CNTRL_DCR_BASE 0x0b0 @@ -863,193 +784,6 @@  #define cntrl1		(CNTRL_DCR_BASE+0x3a)	/* Control 1 register		*/  /*----------------------------------------------------------------------------- - | Universal interrupt controller - +----------------------------------------------------------------------------*/ -#define UIC_SR	0x0			/* UIC status			   */ -#define UIC_ER	0x2			/* UIC enable			   */ -#define UIC_CR	0x3			/* UIC critical			   */ -#define UIC_PR	0x4			/* UIC polarity			   */ -#define UIC_TR	0x5			/* UIC triggering		   */ -#define UIC_MSR 0x6			/* UIC masked status		   */ -#define UIC_VR	0x7			/* UIC vector			   */ -#define UIC_VCR 0x8			/* UIC vector configuration	   */ - -#define UIC0_DCR_BASE 0xc0 -#define uic0sr	(UIC0_DCR_BASE+0x0)   /* UIC0 status			   */ -#define uic0er	(UIC0_DCR_BASE+0x2)   /* UIC0 enable			   */ -#define uic0cr	(UIC0_DCR_BASE+0x3)   /* UIC0 critical			   */ -#define uic0pr	(UIC0_DCR_BASE+0x4)   /* UIC0 polarity			   */ -#define uic0tr	(UIC0_DCR_BASE+0x5)   /* UIC0 triggering		   */ -#define uic0msr (UIC0_DCR_BASE+0x6)   /* UIC0 masked status		   */ -#define uic0vr	(UIC0_DCR_BASE+0x7)   /* UIC0 vector			   */ -#define uic0vcr (UIC0_DCR_BASE+0x8)   /* UIC0 vector configuration	   */ - -#define UIC1_DCR_BASE 0xd0 -#define uic1sr	(UIC1_DCR_BASE+0x0)   /* UIC1 status			   */ -#define uic1er	(UIC1_DCR_BASE+0x2)   /* UIC1 enable			   */ -#define uic1cr	(UIC1_DCR_BASE+0x3)   /* UIC1 critical			   */ -#define uic1pr	(UIC1_DCR_BASE+0x4)   /* UIC1 polarity			   */ -#define uic1tr	(UIC1_DCR_BASE+0x5)   /* UIC1 triggering		   */ -#define uic1msr (UIC1_DCR_BASE+0x6)   /* UIC1 masked status		   */ -#define uic1vr	(UIC1_DCR_BASE+0x7)   /* UIC1 vector			   */ -#define uic1vcr (UIC1_DCR_BASE+0x8)   /* UIC1 vector configuration	   */ - -#if defined(CONFIG_440SPE) || \ -    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ -    defined(CONFIG_460EX) || defined(CONFIG_460GT) -#define UIC2_DCR_BASE 0xe0 -#define uic2sr	(UIC2_DCR_BASE+0x0)   /* UIC2 status-Read Clear		*/ -#define uic2srs	(UIC2_DCR_BASE+0x1)   /* UIC2 status-Read Set */ -#define uic2er	(UIC2_DCR_BASE+0x2)   /* UIC2 enable			*/ -#define uic2cr	(UIC2_DCR_BASE+0x3)   /* UIC2 critical			*/ -#define uic2pr	(UIC2_DCR_BASE+0x4)   /* UIC2 polarity			*/ -#define uic2tr	(UIC2_DCR_BASE+0x5)   /* UIC2 triggering		*/ -#define uic2msr (UIC2_DCR_BASE+0x6)   /* UIC2 masked status		*/ -#define uic2vr	(UIC2_DCR_BASE+0x7)   /* UIC2 vector			*/ -#define uic2vcr (UIC2_DCR_BASE+0x8)   /* UIC2 vector configuration	*/ - -#define UIC3_DCR_BASE 0xf0 -#define uic3sr	(UIC3_DCR_BASE+0x0)   /* UIC3 status-Read Clear		*/ -#define uic3srs	(UIC3_DCR_BASE+0x1)   /* UIC3 status-Read Set */ -#define uic3er	(UIC3_DCR_BASE+0x2)   /* UIC3 enable			*/ -#define uic3cr	(UIC3_DCR_BASE+0x3)   /* UIC3 critical			*/ -#define uic3pr	(UIC3_DCR_BASE+0x4)   /* UIC3 polarity			*/ -#define uic3tr	(UIC3_DCR_BASE+0x5)   /* UIC3 triggering		*/ -#define uic3msr (UIC3_DCR_BASE+0x6)   /* UIC3 masked status		*/ -#define uic3vr	(UIC3_DCR_BASE+0x7)   /* UIC3 vector			*/ -#define uic3vcr (UIC3_DCR_BASE+0x8)   /* UIC3 vector configuration	*/ -#endif /* CONFIG_440SPE */ - -#if defined(CONFIG_440GX) -#define UIC2_DCR_BASE 0x210 -#define uic2sr	(UIC2_DCR_BASE+0x0)   /* UIC2 status			   */ -#define uic2er	(UIC2_DCR_BASE+0x2)   /* UIC2 enable			   */ -#define uic2cr	(UIC2_DCR_BASE+0x3)   /* UIC2 critical			   */ -#define uic2pr	(UIC2_DCR_BASE+0x4)   /* UIC2 polarity			   */ -#define uic2tr	(UIC2_DCR_BASE+0x5)   /* UIC2 triggering		   */ -#define uic2msr (UIC2_DCR_BASE+0x6)   /* UIC2 masked status		   */ -#define uic2vr	(UIC2_DCR_BASE+0x7)   /* UIC2 vector			   */ -#define uic2vcr (UIC2_DCR_BASE+0x8)   /* UIC2 vector configuration	   */ - - -#define UIC_DCR_BASE 0x200 -#define uicb0sr	 (UIC_DCR_BASE+0x0)   /* UIC Base Status Register	   */ -#define uicb0er	 (UIC_DCR_BASE+0x2)   /* UIC Base enable		   */ -#define uicb0cr	 (UIC_DCR_BASE+0x3)   /* UIC Base critical		   */ -#define uicb0pr	 (UIC_DCR_BASE+0x4)   /* UIC Base polarity		   */ -#define uicb0tr	 (UIC_DCR_BASE+0x5)   /* UIC Base triggering		   */ -#define uicb0msr (UIC_DCR_BASE+0x6)   /* UIC Base masked status		   */ -#define uicb0vr	 (UIC_DCR_BASE+0x7)   /* UIC Base vector		   */ -#define uicb0vcr (UIC_DCR_BASE+0x8)   /* UIC Base vector configuration	   */ -#endif /* CONFIG_440GX */ - -/* The following is for compatibility with 405 code */ -#define uicsr  uic0sr -#define uicer  uic0er -#define uiccr  uic0cr -#define uicpr  uic0pr -#define uictr  uic0tr -#define uicmsr uic0msr -#define uicvr  uic0vr -#define uicvcr uic0vcr - -#if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) -/*----------------------------------------------------------------------------+ -| Clock / Power-on-reset DCR's. -+----------------------------------------------------------------------------*/ -#define CPR0_CLKUPD			0x20 -#define CPR0_CLKUPD_BSY_MASK		0x80000000 -#define CPR0_CLKUPD_BSY_COMPLETED	0x00000000 -#define CPR0_CLKUPD_BSY_BUSY		0x80000000 -#define CPR0_CLKUPD_CUI_MASK		0x80000000 -#define CPR0_CLKUPD_CUI_DISABLE		0x00000000 -#define CPR0_CLKUPD_CUI_ENABLE		0x80000000 -#define CPR0_CLKUPD_CUD_MASK		0x40000000 -#define CPR0_CLKUPD_CUD_DISABLE		0x00000000 -#define CPR0_CLKUPD_CUD_ENABLE		0x40000000 - -#define CPR0_PLLC			0x40 -#define CPR0_PLLC_RST_MASK		0x80000000 -#define CPR0_PLLC_RST_PLLLOCKED		0x00000000 -#define CPR0_PLLC_RST_PLLRESET		0x80000000 -#define CPR0_PLLC_ENG_MASK		0x40000000 -#define CPR0_PLLC_ENG_DISABLE		0x00000000 -#define CPR0_PLLC_ENG_ENABLE		0x40000000 -#define CPR0_PLLC_ENG_ENCODE(n)		((((unsigned long)(n))&0x01)<<30) -#define CPR0_PLLC_ENG_DECODE(n)		((((unsigned long)(n))>>30)&0x01) -#define CPR0_PLLC_SRC_MASK		0x20000000 -#define CPR0_PLLC_SRC_PLLOUTA		0x00000000 -#define CPR0_PLLC_SRC_PLLOUTB		0x20000000 -#define CPR0_PLLC_SRC_ENCODE(n)		((((unsigned long)(n))&0x01)<<29) -#define CPR0_PLLC_SRC_DECODE(n)		((((unsigned long)(n))>>29)&0x01) -#define CPR0_PLLC_SEL_MASK		0x07000000 -#define CPR0_PLLC_SEL_PLLOUT		0x00000000 -#define CPR0_PLLC_SEL_CPU		0x01000000 -#define CPR0_PLLC_SEL_EBC		0x05000000 -#define CPR0_PLLC_SEL_ENCODE(n)		((((unsigned long)(n))&0x07)<<24) -#define CPR0_PLLC_SEL_DECODE(n)		((((unsigned long)(n))>>24)&0x07) -#define CPR0_PLLC_TUNE_MASK		0x000003FF -#define CPR0_PLLC_TUNE_ENCODE(n)	((((unsigned long)(n))&0x3FF)<<0) -#define CPR0_PLLC_TUNE_DECODE(n)	((((unsigned long)(n))>>0)&0x3FF) - -#define CPR0_PLLD			0x60 -#define CPR0_PLLD_FBDV_MASK		0x1F000000 -#define CPR0_PLLD_FBDV_ENCODE(n)	((((unsigned long)(n))&0x1F)<<24) -#define CPR0_PLLD_FBDV_DECODE(n)	((((((unsigned long)(n))>>24)-1)&0x1F)+1) -#define CPR0_PLLD_FWDVA_MASK		0x000F0000 -#define CPR0_PLLD_FWDVA_ENCODE(n)	((((unsigned long)(n))&0x0F)<<16) -#define CPR0_PLLD_FWDVA_DECODE(n)	((((((unsigned long)(n))>>16)-1)&0x0F)+1) -#define CPR0_PLLD_FWDVB_MASK		0x00000700 -#define CPR0_PLLD_FWDVB_ENCODE(n)	((((unsigned long)(n))&0x07)<<8) -#define CPR0_PLLD_FWDVB_DECODE(n)	((((((unsigned long)(n))>>8)-1)&0x07)+1) -#define CPR0_PLLD_LFBDV_MASK		0x0000003F -#define CPR0_PLLD_LFBDV_ENCODE(n)	((((unsigned long)(n))&0x3F)<<0) -#define CPR0_PLLD_LFBDV_DECODE(n)	((((((unsigned long)(n))>>0)-1)&0x3F)+1) - -#define CPR0_PRIMAD			0x80 -#define CPR0_PRIMAD_PRADV0_MASK		0x07000000 -#define CPR0_PRIMAD_PRADV0_ENCODE(n)	((((unsigned long)(n))&0x07)<<24) -#define CPR0_PRIMAD_PRADV0_DECODE(n)	((((((unsigned long)(n))>>24)-1)&0x07)+1) - -#define CPR0_PRIMBD			0xA0 -#define CPR0_PRIMBD_PRBDV0_MASK		0x07000000 -#define CPR0_PRIMBD_PRBDV0_ENCODE(n)	((((unsigned long)(n))&0x07)<<24) -#define CPR0_PRIMBD_PRBDV0_DECODE(n)	((((((unsigned long)(n))>>24)-1)&0x07)+1) - -#define CPR0_OPBD			0xC0 -#define CPR0_OPBD_OPBDV0_MASK		0x03000000 -#define CPR0_OPBD_OPBDV0_ENCODE(n)	((((unsigned long)(n))&0x03)<<24) -#define CPR0_OPBD_OPBDV0_DECODE(n)	((((((unsigned long)(n))>>24)-1)&0x03)+1) - -#define CPR0_PERD			0xE0 -#if !defined(CONFIG_440EPX) -#define CPR0_PERD_PERDV0_MASK		0x03000000 -#define CPR0_PERD_PERDV0_ENCODE(n)	((((unsigned long)(n))&0x03)<<24) -#define CPR0_PERD_PERDV0_DECODE(n)	((((((unsigned long)(n))>>24)-1)&0x03)+1) -#endif - -#define CPR0_MALD			0x100 -#define CPR0_MALD_MALDV0_MASK		0x03000000 -#define CPR0_MALD_MALDV0_ENCODE(n)	((((unsigned long)(n))&0x03)<<24) -#define CPR0_MALD_MALDV0_DECODE(n)	((((((unsigned long)(n))>>24)-1)&0x03)+1) - -#define CPR0_ICFG			0x140 -#define CPR0_ICFG_RLI_MASK		0x80000000 -#define CPR0_ICFG_RLI_RESETCPR		0x00000000 -#define CPR0_ICFG_RLI_PRESERVECPR	0x80000000 -#define CPR0_ICFG_ICS_MASK		0x00000007 -#define CPR0_ICFG_ICS_ENCODE(n)		((((unsigned long)(n))&0x3F)<<0) -#define CPR0_ICFG_ICS_DECODE(n)		((((((unsigned long)(n))>>0)-1)&0x3F)+1) - -/************************/ -/* IIC defines          */ -/************************/ -#define IIC0_MMIO_BASE 0xA0000400 -#define IIC1_MMIO_BASE 0xA0000500 - -#endif /* CONFIG_440SP */ - -/*-----------------------------------------------------------------------------   | DMA   +----------------------------------------------------------------------------*/  #if defined(CONFIG_460EX) || defined(CONFIG_460GT) @@ -1136,708 +870,6 @@  #define malrcbs24   (MAL_DCR_BASE+0x78) /* RX 24 Channel buffer size reg    */  #endif /* CONFIG_440GX */ - -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller 0 interrupts (UIC0) -+---------------------------------------------------------------------------*/ -#if defined(CONFIG_440SP) -#define UIC_U0		0x80000000	/* UART 0			    */ -#define UIC_U1		0x40000000	/* UART 1			    */ -#define UIC_IIC0	0x20000000	/* IIC				    */ -#define UIC_IIC1	0x10000000	/* IIC				    */ -#define UIC_PIM		0x08000000	/* PCI0 inbound message		    */ -#define UIC_PCRW	0x04000000	/* PCI0 command write register	    */ -#define UIC_PPM		0x02000000	/* PCI0 power management	    */ -#define UIC_PVPD	0x01000000	/* PCI0 VPD Access		    */ -#define UIC_MSI0	0x00800000	/* PCI0 MSI level 0		    */ -#define UIC_P1IM	0x00400000	/* PCI1 Inbound Message		    */ -#define UIC_P1CRW	0x00200000	/* PCI1 command write register	    */ -#define UIC_P1PM	0x00100000	/* PCI1 power management	    */ -#define UIC_P1VPD	0x00080000	/* PCI1 VPD Access		    */ -#define UIC_P1MSI0	0x00040000	/* PCI1 MSI level 0		    */ -#define UIC_P2IM	0x00020000	/* PCI2 inbound message		    */ -#define UIC_P2CRW	0x00010000	/* PCI2 command register write	    */ -#define UIC_P2PM	0x00008000	/* PCI2 power management	    */ -#define UIC_P2VPD	0x00004000	/* PCI2 VPD access		    */ -#define UIC_P2MSI0	0x00002000	/* PCI2 MSI level 0		    */ -#define UIC_D0CPF	0x00001000	/* DMA0 command pointer		    */ -#define UIC_D0CSF	0x00000800	/* DMA0 command status		    */ -#define UIC_D1CPF	0x00000400	/* DMA1 command pointer		    */ -#define UIC_D1CSF	0x00000200	/* DMA1 command status		    */ -#define UIC_I2OID	0x00000100	/* I2O inbound doorbell		    */ -#define UIC_I2OPLF	0x00000080	/* I2O inbound post list	    */ -#define UIC_I2O0LL	0x00000040	/* I2O0 low latency PLB write	    */ -#define UIC_I2O1LL	0x00000020	/* I2O1 low latency PLB write	    */ -#define UIC_I2O0HB	0x00000010	/* I2O0 high bandwidth PLB write    */ -#define UIC_I2O1HB	0x00000008	/* I2O1 high bandwidth PLB write    */ -#define UIC_GPTCT	0x00000004	/* GPT count timer		    */ -#define UIC_UIC1NC	0x00000002	/* UIC1 non-critical interrupt	    */ -#define UIC_UIC1C	0x00000001	/* UIC1 critical interrupt	    */ -#elif defined(CONFIG_440GX) || defined(CONFIG_440EP) -#define UIC_U0		0x80000000	/* UART 0			    */ -#define UIC_U1		0x40000000	/* UART 1			    */ -#define UIC_IIC0	0x20000000	/* IIC				    */ -#define UIC_IIC1	0x10000000	/* IIC				    */ -#define UIC_PIM		0x08000000	/* PCI inbound message		    */ -#define UIC_PCRW	0x04000000	/* PCI command register write	    */ -#define UIC_PPM		0x02000000	/* PCI power management		    */ -#define UIC_MSI0	0x01000000	/* PCI MSI level 0		    */ -#define UIC_MSI1	0x00800000	/* PCI MSI level 1		    */ -#define UIC_MSI2	0x00400000	/* PCI MSI level 2		    */ -#define UIC_MTE		0x00200000	/* MAL TXEOB			    */ -#define UIC_MRE		0x00100000	/* MAL RXEOB			    */ -#define UIC_D0		0x00080000	/* DMA channel 0		    */ -#define UIC_D1		0x00040000	/* DMA channel 1		    */ -#define UIC_D2		0x00020000	/* DMA channel 2		    */ -#define UIC_D3		0x00010000	/* DMA channel 3		    */ -#define UIC_RSVD0	0x00008000	/* Reserved			    */ -#define UIC_RSVD1	0x00004000	/* Reserved			    */ -#define UIC_CT0		0x00002000	/* GPT compare timer 0		    */ -#define UIC_CT1		0x00001000	/* GPT compare timer 1		    */ -#define UIC_CT2		0x00000800	/* GPT compare timer 2		    */ -#define UIC_CT3		0x00000400	/* GPT compare timer 3		    */ -#define UIC_CT4		0x00000200	/* GPT compare timer 4		    */ -#define UIC_EIR0	0x00000100	/* External interrupt 0		    */ -#define UIC_EIR1	0x00000080	/* External interrupt 1		    */ -#define UIC_EIR2	0x00000040	/* External interrupt 2		    */ -#define UIC_EIR3	0x00000020	/* External interrupt 3		    */ -#define UIC_EIR4	0x00000010	/* External interrupt 4		    */ -#define UIC_EIR5	0x00000008	/* External interrupt 5		    */ -#define UIC_EIR6	0x00000004	/* External interrupt 6		    */ -#define UIC_UIC1NC	0x00000002	/* UIC1 non-critical interrupt	    */ -#define UIC_UIC1C	0x00000001	/* UIC1 critical interrupt	    */ - -#elif defined(CONFIG_440EPX) || defined(CONFIG_440GRX) - -#define UIC_U0        0x80000000  /* UART 0                             */ -#define UIC_U1        0x40000000  /* UART 1                             */ -#define UIC_IIC0      0x20000000  /* IIC                                */ -#define UIC_KRD       0x10000000  /* Kasumi Ready for data              */ -#define UIC_KDA       0x08000000  /* Kasumi Data Available              */ -#define UIC_PCRW      0x04000000  /* PCI command register write         */ -#define UIC_PPM       0x02000000  /* PCI power management               */ -#define UIC_IIC1      0x01000000  /* IIC                                */ -#define UIC_SPI       0x00800000  /* SPI                                */ -#define UIC_EPCISER   0x00400000  /* External PCI SERR                  */ -#define UIC_MTE       0x00200000  /* MAL TXEOB                          */ -#define UIC_MRE       0x00100000  /* MAL RXEOB                          */ -#define UIC_D0        0x00080000  /* DMA channel 0                      */ -#define UIC_D1        0x00040000  /* DMA channel 1                      */ -#define UIC_D2        0x00020000  /* DMA channel 2                      */ -#define UIC_D3        0x00010000  /* DMA channel 3                      */ -#define UIC_UD0       0x00008000  /* UDMA irq 0                         */ -#define UIC_UD1       0x00004000  /* UDMA irq 1                         */ -#define UIC_UD2       0x00002000  /* UDMA irq 2                         */ -#define UIC_UD3       0x00001000  /* UDMA irq 3                         */ -#define UIC_HSB2D     0x00000800  /* USB2.0 Device                      */ -#define UIC_OHCI1     0x00000400  /* USB2.0 Host OHCI irq 1             */ -#define UIC_OHCI2     0x00000200  /* USB2.0 Host OHCI irq 2             */ -#define UIC_EIP94     0x00000100  /* Security EIP94                     */ -#define UIC_ETH0      0x00000080  /* Emac 0                             */ -#define UIC_ETH1      0x00000040  /* Emac 1                             */ -#define UIC_EHCI      0x00000020  /* USB2.0 Host EHCI                   */ -#define UIC_EIR4      0x00000010  /* External interrupt 4               */ -#define UIC_UIC2NC    0x00000008  /* UIC2 non-critical interrupt        */ -#define UIC_UIC2C     0x00000004  /* UIC2 critical interrupt            */ -#define UIC_UIC1NC    0x00000002  /* UIC1 non-critical interrupt        */ -#define UIC_UIC1C     0x00000001  /* UIC1 critical interrupt            */ - -/* For compatibility with 405 code */ -#define UIC_MAL_TXEOB	UIC_MTE -#define UIC_MAL_RXEOB	UIC_MRE - -#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) - -#define UIC_RSVD0	0x80000000	/* N/A - unused			    */ -#define UIC_U1		0x40000000	/* UART 1			    */ -#define UIC_IIC0	0x20000000	/* IIC				    */ -#define UIC_IIC1	0x10000000	/* IIC				    */ -#define UIC_PIM		0x08000000	/* PCI inbound message		    */ -#define UIC_PCRW	0x04000000	/* PCI command register write	    */ -#define UIC_PPM		0x02000000	/* PCI power management		    */ -#define UIC_PCIVPD	0x01000000	/* PCI VPD			    */ -#define UIC_MSI0	0x00800000	/* PCI MSI level 0		    */ -#define UIC_EIR0	0x00400000	/* External interrupt 0		    */ -#define UIC_UIC2NC	0x00200000	/* UIC2 non-critical interrupt	    */ -#define UIC_UIC2C	0x00100000	/* UIC2 critical interrupt	    */ -#define UIC_D0		0x00080000	/* DMA channel 0		    */ -#define UIC_D1		0x00040000	/* DMA channel 1		    */ -#define UIC_D2		0x00020000	/* DMA channel 2		    */ -#define UIC_D3		0x00010000	/* DMA channel 3		    */ -#define UIC_UIC3NC	0x00008000	/* UIC3 non-critical interrupt	    */ -#define UIC_UIC3C	0x00004000	/* UIC3 critical interrupt	    */ -#define UIC_EIR1	0x00002000	/* External interrupt 1		    */ -#define UIC_TRNGDA	0x00001000	/* TRNG data available		    */ -#define UIC_PKAR1	0x00000800	/* PKA ready (PKA[1])		    */ -#define UIC_D1CPFF	0x00000400	/* DMA1 cp fifo full		    */ -#define UIC_D1CSNS	0x00000200	/* DMA1 cs fifo needs service	    */ -#define UIC_I2OID	0x00000100	/* I2O inbound door bell	    */ -#define UIC_I2OLNE	0x00000080	/* I2O Inbound Post List FIFO Not Empty */ -#define UIC_I20R0LL	0x00000040	/* I2O Region 0 Low Latency PLB Write */ -#define UIC_I2OR1LL	0x00000020	/* I2O Region 1 Low Latency PLB Write */ -#define UIC_I20R0HB	0x00000010	/* I2O Region 0 High Bandwidth PLB Write */ -#define UIC_I2OR1HB	0x00000008	/* I2O Region 1 High Bandwidth PLB Write */ -#define UIC_EIP94	0x00000004	/* Security EIP94		    */ -#define UIC_UIC1NC	0x00000002	/* UIC1 non-critical interrupt	    */ -#define UIC_UIC1C	0x00000001	/* UIC1 critical interrupt	    */ - -#elif !defined(CONFIG_440SPE) -#define UIC_U0		0x80000000	/* UART 0			    */ -#define UIC_U1		0x40000000	/* UART 1			    */ -#define UIC_IIC0	0x20000000	/* IIC				    */ -#define UIC_IIC1	0x10000000	/* IIC				    */ -#define UIC_PIM		0x08000000	/* PCI inbound message		    */ -#define UIC_PCRW	0x04000000	/* PCI command register write	    */ -#define UIC_PPM		0x02000000	/* PCI power management		    */ -#define UIC_MSI0	0x01000000	/* PCI MSI level 0		    */ -#define UIC_MSI1	0x00800000	/* PCI MSI level 1		    */ -#define UIC_MSI2	0x00400000	/* PCI MSI level 2		    */ -#define UIC_MTE		0x00200000	/* MAL TXEOB			    */ -#define UIC_MRE		0x00100000	/* MAL RXEOB			    */ -#define UIC_D0		0x00080000	/* DMA channel 0		    */ -#define UIC_D1		0x00040000	/* DMA channel 1		    */ -#define UIC_D2		0x00020000	/* DMA channel 2		    */ -#define UIC_D3		0x00010000	/* DMA channel 3		    */ -#define UIC_RSVD0	0x00008000	/* Reserved			    */ -#define UIC_RSVD1	0x00004000	/* Reserved			    */ -#define UIC_CT0		0x00002000	/* GPT compare timer 0		    */ -#define UIC_CT1		0x00001000	/* GPT compare timer 1		    */ -#define UIC_CT2		0x00000800	/* GPT compare timer 2		    */ -#define UIC_CT3		0x00000400	/* GPT compare timer 3		    */ -#define UIC_CT4		0x00000200	/* GPT compare timer 4		    */ -#define UIC_EIR0	0x00000100	/* External interrupt 0		    */ -#define UIC_EIR1	0x00000080	/* External interrupt 1		    */ -#define UIC_EIR2	0x00000040	/* External interrupt 2		    */ -#define UIC_EIR3	0x00000020	/* External interrupt 3		    */ -#define UIC_EIR4	0x00000010	/* External interrupt 4		    */ -#define UIC_EIR5	0x00000008	/* External interrupt 5		    */ -#define UIC_EIR6	0x00000004	/* External interrupt 6		    */ -#define UIC_UIC1NC	0x00000002	/* UIC1 non-critical interrupt	    */ -#define UIC_UIC1C	0x00000001	/* UIC1 critical interrupt	    */ -#endif /* CONFIG_440GX */ - -/* For compatibility with 405 code */ -#define UIC_MAL_TXEOB	UIC_MTE -#define UIC_MAL_RXEOB	UIC_MRE - -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller 1 interrupts (UIC1) -+---------------------------------------------------------------------------*/ -#if defined(CONFIG_440SP) -#define UIC_EIR0	0x80000000	/* External interrupt 0		    */ -#define UIC_MS		0x40000000	/* MAL SERR			    */ -#define UIC_MTDE	0x20000000	/* MAL TXDE			    */ -#define UIC_MRDE	0x10000000	/* MAL RXDE			    */ -#define UIC_DECE	0x08000000	/* DDR SDRAM correctible error	    */ -#define UIC_EBCO	0x04000000	/* EBCO interrupt status	    */ -#define UIC_MTE		0x02000000	/* MAL TXEOB			    */ -#define UIC_MRE		0x01000000	/* MAL RXEOB			    */ -#define UIC_P0MSI1	0x00800000	/* PCI0 MSI level 1		    */ -#define UIC_P1MSI1	0x00400000	/* PCI1 MSI level 1		    */ -#define UIC_P2MSI1	0x00200000	/* PCI2 MSI level 1		    */ -#define UIC_L2C		0x00100000	/* L2 cache			    */ -#define UIC_CT0		0x00080000	/* GPT compare timer 0		    */ -#define UIC_CT1		0x00040000	/* GPT compare timer 1		    */ -#define UIC_CT2		0x00020000	/* GPT compare timer 2		    */ -#define UIC_CT3		0x00010000	/* GPT compare timer 3		    */ -#define UIC_CT4		0x00008000	/* GPT compare timer 4		    */ -#define UIC_EIR1	0x00004000	/* External interrupt 1		    */ -#define UIC_EIR2	0x00002000	/* External interrupt 2		    */ -#define UIC_EIR3	0x00001000	/* External interrupt 3		    */ -#define UIC_EIR4	0x00000800	/* External interrupt 4		    */ -#define UIC_EIR5	0x00000400	/* External interrupt 5		    */ -#define UIC_DMAE	0x00000200	/* DMA error			    */ -#define UIC_I2OE	0x00000100	/* I2O error			    */ -#define UIC_SRE		0x00000080	/* Serial ROM error		    */ -#define UIC_P0AE	0x00000040	/* PCI0 asynchronous error	    */ -#define UIC_P1AE	0x00000020	/* PCI1 asynchronous error	    */ -#define UIC_P2AE	0x00000010	/* PCI2 asynchronous error	    */ -#define UIC_ETH0	0x00000008	/* Ethernet 0			    */ -#define UIC_EWU0	0x00000004	/* Ethernet 0 wakeup		    */ -#define UIC_ETH1	0x00000002	/* Reserved			    */ -#define UIC_XOR		0x00000001	/* XOR				    */ -#elif defined(CONFIG_440GX) || defined(CONFIG_440EP) -#define UIC_MS		0x80000000	/* MAL SERR			    */ -#define UIC_MTDE	0x40000000	/* MAL TXDE			    */ -#define UIC_MRDE	0x20000000	/* MAL RXDE			    */ -#define UIC_DEUE	0x10000000	/* DDR SDRAM ECC uncorrectible error*/ -#define UIC_DECE	0x08000000	/* DDR SDRAM correctible error	    */ -#define UIC_EBCO	0x04000000	/* EBCO interrupt status	    */ -#define UIC_EBMI	0x02000000	/* EBMI interrupt status	    */ -#define UIC_OPB		0x01000000	/* OPB to PLB bridge interrupt stat */ -#define UIC_MSI3	0x00800000	/* PCI MSI level 3		    */ -#define UIC_MSI4	0x00400000	/* PCI MSI level 4		    */ -#define UIC_MSI5	0x00200000	/* PCI MSI level 5		    */ -#define UIC_MSI6	0x00100000	/* PCI MSI level 6		    */ -#define UIC_MSI7	0x00080000	/* PCI MSI level 7		    */ -#define UIC_MSI8	0x00040000	/* PCI MSI level 8		    */ -#define UIC_MSI9	0x00020000	/* PCI MSI level 9		    */ -#define UIC_MSI10	0x00010000	/* PCI MSI level 10		    */ -#define UIC_MSI11	0x00008000	/* PCI MSI level 11		    */ -#define UIC_PPMI	0x00004000	/* PPM interrupt status		    */ -#define UIC_EIR7	0x00002000	/* External interrupt 7		    */ -#define UIC_EIR8	0x00001000	/* External interrupt 8		    */ -#define UIC_EIR9	0x00000800	/* External interrupt 9		    */ -#define UIC_EIR10	0x00000400	/* External interrupt 10	    */ -#define UIC_EIR11	0x00000200	/* External interrupt 11	    */ -#define UIC_EIR12	0x00000100	/* External interrupt 12	    */ -#define UIC_SRE		0x00000080	/* Serial ROM error		    */ -#define UIC_RSVD2	0x00000040	/* Reserved			    */ -#define UIC_RSVD3	0x00000020	/* Reserved			    */ -#define UIC_PAE		0x00000010	/* PCI asynchronous error	    */ -#define UIC_ETH0	0x00000008	/* Ethernet 0			    */ -#define UIC_EWU0	0x00000004	/* Ethernet 0 wakeup		    */ -#define UIC_ETH1	0x00000002	/* Ethernet 1			    */ -#define UIC_EWU1	0x00000001	/* Ethernet 1 wakeup		    */ - -#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) - -#define UIC_EIR2	0x80000000	/* External interrupt 2		    */ -#define UIC_U0		0x40000000	/* UART 0			    */ -#define UIC_SPI		0x20000000	/* SPI				    */ -#define UIC_TRNGAL	0x10000000	/* TRNG alarm			    */ -#define UIC_DEUE	0x08000000	/* DDR SDRAM ECC correct/uncorrectable error */ -#define UIC_EBCO	0x04000000	/* EBCO interrupt status	    */ -#define UIC_NDFC	0x02000000	/* NDFC				    */ -#define UIC_EIPPKPSE	0x01000000	/* EIPPKP slave error		    */ -#define UIC_P0MSI1	0x00800000	/* PCI0 MSI level 1		    */ -#define UIC_P0MSI2	0x00400000	/* PCI0 MSI level 2		    */ -#define UIC_P0MSI3	0x00200000	/* PCI0 MSI level 3		    */ -#define UIC_L2C		0x00100000	/* L2 cache			    */ -#define UIC_CT0		0x00080000	/* GPT compare timer 0		    */ -#define UIC_CT1		0x00040000	/* GPT compare timer 1		    */ -#define UIC_CT2		0x00020000	/* GPT compare timer 2		    */ -#define UIC_CT3		0x00010000	/* GPT compare timer 3		    */ -#define UIC_CT4		0x00008000	/* GPT compare timer 4		    */ -#define UIC_CT5		0x00004000	/* GPT compare timer 5		    */ -#define UIC_CT6		0x00002000	/* GPT compare timer 6		    */ -#define UIC_GPTDC	0x00001000	/* GPT decrementer pulse	    */ -#define UIC_EIR3	0x00000800	/* External interrupt 3		    */ -#define UIC_EIR4	0x00000400	/* External interrupt 4		    */ -#define UIC_DMAE	0x00000200	/* DMA error			    */ -#define UIC_I2OE	0x00000100	/* I2O error			    */ -#define UIC_SRE		0x00000080	/* Serial ROM error		    */ -#define UIC_P0AE	0x00000040	/* PCI0 asynchronous error	    */ -#define UIC_EIR5	0x00000020	/* External interrupt 5		    */ -#define UIC_EIR6	0x00000010	/* External interrupt 6		    */ -#define UIC_U2		0x00000008	/* UART 2			    */ -#define UIC_U3		0x00000004	/* UART 3			    */ -#define UIC_EIR7	0x00000002	/* External interrupt 7		    */ -#define UIC_EIR8	0x00000001	/* External interrupt 8		    */ - -#elif defined(CONFIG_440EPX) || defined(CONFIG_440GRX) - -#define UIC_MS        0x80000000  /* MAL SERR                           */ -#define UIC_MTDE      0x40000000  /* MAL TXDE                           */ -#define UIC_MRDE      0x20000000  /* MAL RXDE                           */ -#define UIC_U2        0x10000000  /* UART 2                             */ -#define UIC_U3        0x08000000  /* UART 3                             */ -#define UIC_EBCO      0x04000000  /* EBCO interrupt status              */ -#define UIC_NDFC      0x02000000  /* NDFC                               */ -#define UIC_KSLE      0x01000000  /* KASUMI slave error                 */ -#define UIC_CT5       0x00800000  /* GPT compare timer 5                */ -#define UIC_CT6       0x00400000  /* GPT compare timer 6                */ -#define UIC_PLB34I0   0x00200000  /* PLB3X4X MIRQ0                      */ -#define UIC_PLB34I1   0x00100000  /* PLB3X4X MIRQ1                      */ -#define UIC_PLB34I2   0x00080000  /* PLB3X4X MIRQ2                      */ -#define UIC_PLB34I3   0x00040000  /* PLB3X4X MIRQ3                      */ -#define UIC_PLB34I4   0x00020000  /* PLB3X4X MIRQ4                      */ -#define UIC_PLB34I5   0x00010000  /* PLB3X4X MIRQ5                      */ -#define UIC_CT0       0x00008000  /* GPT compare timer 0                */ -#define UIC_CT1       0x00004000  /* GPT compare timer 1                */ -#define UIC_EIR7      0x00002000  /* External interrupt 7               */ -#define UIC_EIR8      0x00001000  /* External interrupt 8               */ -#define UIC_EIR9      0x00000800  /* External interrupt 9               */ -#define UIC_CT2       0x00000400  /* GPT compare timer 2                */ -#define UIC_CT3       0x00000200  /* GPT compare timer 3                */ -#define UIC_CT4       0x00000100  /* GPT compare timer 4                */ -#define UIC_SRE       0x00000080  /* Serial ROM error                   */ -#define UIC_GPTDC     0x00000040  /* GPT decrementer pulse              */ -#define UIC_RSVD0     0x00000020  /* Reserved                           */ -#define UIC_EPCIPER   0x00000010  /* External PCI PERR                  */ -#define UIC_EIR0      0x00000008  /* External interrupt 0               */ -#define UIC_EWU0      0x00000004  /* Ethernet 0 wakeup                  */ -#define UIC_EIR1      0x00000002  /* External interrupt 1               */ -#define UIC_EWU1      0x00000001  /* Ethernet 1 wakeup                  */ - -/* For compatibility with 405 code */ -#define UIC_MAL_SERR	UIC_MS -#define UIC_MAL_TXDE	UIC_MTDE -#define UIC_MAL_RXDE	UIC_MRDE -#define UIC_ENET	UIC_ETH0 - -#elif !defined(CONFIG_440SPE) -#define UIC_MS		0x80000000	/* MAL SERR			    */ -#define UIC_MTDE	0x40000000	/* MAL TXDE			    */ -#define UIC_MRDE	0x20000000	/* MAL RXDE			    */ -#define UIC_DEUE	0x10000000	/* DDR SDRAM ECC uncorrectible error*/ -#define UIC_DECE	0x08000000	/* DDR SDRAM correctible error	    */ -#define UIC_EBCO	0x04000000	/* EBCO interrupt status	    */ -#define UIC_EBMI	0x02000000	/* EBMI interrupt status	    */ -#define UIC_OPB		0x01000000	/* OPB to PLB bridge interrupt stat */ -#define UIC_MSI3	0x00800000	/* PCI MSI level 3		    */ -#define UIC_MSI4	0x00400000	/* PCI MSI level 4		    */ -#define UIC_MSI5	0x00200000	/* PCI MSI level 5		    */ -#define UIC_MSI6	0x00100000	/* PCI MSI level 6		    */ -#define UIC_MSI7	0x00080000	/* PCI MSI level 7		    */ -#define UIC_MSI8	0x00040000	/* PCI MSI level 8		    */ -#define UIC_MSI9	0x00020000	/* PCI MSI level 9		    */ -#define UIC_MSI10	0x00010000	/* PCI MSI level 10		    */ -#define UIC_MSI11	0x00008000	/* PCI MSI level 11		    */ -#define UIC_PPMI	0x00004000	/* PPM interrupt status		    */ -#define UIC_EIR7	0x00002000	/* External interrupt 7		    */ -#define UIC_EIR8	0x00001000	/* External interrupt 8		    */ -#define UIC_EIR9	0x00000800	/* External interrupt 9		    */ -#define UIC_EIR10	0x00000400	/* External interrupt 10	    */ -#define UIC_EIR11	0x00000200	/* External interrupt 11	    */ -#define UIC_EIR12	0x00000100	/* External interrupt 12	    */ -#define UIC_SRE		0x00000080	/* Serial ROM error		    */ -#define UIC_RSVD2	0x00000040	/* Reserved			    */ -#define UIC_RSVD3	0x00000020	/* Reserved			    */ -#define UIC_PAE		0x00000010	/* PCI asynchronous error	    */ -#define UIC_ETH0	0x00000008	/* Ethernet 0			    */ -#define UIC_EWU0	0x00000004	/* Ethernet 0 wakeup		    */ -#define UIC_ETH1	0x00000002	/* Ethernet 1			    */ -#define UIC_EWU1	0x00000001	/* Ethernet 1 wakeup		    */ -#endif /* CONFIG_440SP */ - -/* For compatibility with 405 code */ -#define UIC_MAL_SERR	UIC_MS -#define UIC_MAL_TXDE	UIC_MTDE -#define UIC_MAL_RXDE	UIC_MRDE -#define UIC_ENET	UIC_ETH0 - -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller 2 interrupts (UIC2) -+---------------------------------------------------------------------------*/ -#if defined(CONFIG_440GX) -#define UIC_ETH2	0x80000000	/* Ethernet 2			    */ -#define UIC_EWU2	0x40000000	/* Ethernet 2 wakeup		    */ -#define UIC_ETH3	0x20000000	/* Ethernet 3			    */ -#define UIC_EWU3	0x10000000	/* Ethernet 3 wakeup		    */ -#define UIC_TAH0	0x08000000	/* TAH 0			    */ -#define UIC_TAH1	0x04000000	/* TAH 1			    */ -#define UIC_IMUOBFQ	0x02000000	/* IMU outbound free queue	    */ -#define UIC_IMUIBPQ	0x01000000	/* IMU inbound post queue	    */ -#define UIC_IMUIRQDB	0x00800000	/* IMU irq doorbell		    */ -#define UIC_IMUIBDB	0x00400000	/* IMU inbound doorbell		    */ -#define UIC_IMUMSG0	0x00200000	/* IMU inbound message 0	    */ -#define UIC_IMUMSG1	0x00100000	/* IMU inbound message 1	    */ -#define UIC_IMUTO	0x00080000	/* IMU timeout			    */ -#define UIC_MSI12	0x00040000	/* PCI MSI level 12		    */ -#define UIC_MSI13	0x00020000	/* PCI MSI level 13		    */ -#define UIC_MSI14	0x00010000	/* PCI MSI level 14		    */ -#define UIC_MSI15	0x00008000	/* PCI MSI level 15		    */ -#define UIC_EIR13	0x00004000	/* External interrupt 13	    */ -#define UIC_EIR14	0x00002000	/* External interrupt 14	    */ -#define UIC_EIR15	0x00001000	/* External interrupt 15	    */ -#define UIC_EIR16	0x00000800	/* External interrupt 16	    */ -#define UIC_EIR17	0x00000400	/* External interrupt 17	    */ -#define UIC_PCIVPD	0x00000200	/* PCI VPD			    */ -#define UIC_L2C		0x00000100	/* L2 Cache			    */ -#define UIC_ETH2PCS	0x00000080	/* Ethernet 2 PCS		    */ -#define UIC_ETH3PCS	0x00000040	/* Ethernet 3 PCS		    */ -#define UIC_RSVD26	0x00000020	/* Reserved			    */ -#define UIC_RSVD27	0x00000010	/* Reserved			    */ -#define UIC_RSVD28	0x00000008	/* Reserved			    */ -#define UIC_RSVD29	0x00000004	/* Reserved			    */ -#define UIC_RSVD30	0x00000002	/* Reserved			    */ -#define UIC_RSVD31	0x00000001	/* Reserved			    */ - -#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) - -#define UIC_TAH0	0x80000000	/* TAHOE 0			    */ -#define UIC_TAH1	0x40000000	/* TAHOE 1			    */ -#define UIC_EIR9	0x20000000	/* External interrupt 9		    */ -#define UIC_MS		0x10000000	/* MAL SERR			    */ -#define UIC_MTDE	0x08000000	/* MAL TXDE			    */ -#define UIC_MRDE	0x04000000	/* MAL RXDE			    */ -#define UIC_MTE		0x02000000	/* MAL TXEOB			    */ -#define UIC_MRE		0x01000000	/* MAL RXEOB			    */ -#define UIC_MCTX0	0x00800000	/* MAL interrupt coalescence TX0    */ -#define UIC_MCTX1	0x00400000	/* MAL interrupt coalescence TX1    */ -#define UIC_MCTX2	0x00200000	/* MAL interrupt coalescence TX2    */ -#define UIC_MCTX3	0x00100000	/* MAL interrupt coalescence TX3    */ -#define UIC_MCTR0	0x00080000	/* MAL interrupt coalescence TR0    */ -#define UIC_MCTR1	0x00040000	/* MAL interrupt coalescence TR1    */ -#define UIC_MCTR2	0x00020000	/* MAL interrupt coalescence TR2    */ -#define UIC_MCTR3	0x00010000	/* MAL interrupt coalescence TR3    */ -#define UIC_ETH0	0x00008000	/* Ethernet 0			    */ -#define UIC_ETH1	0x00004000	/* Ethernet 1			    */ -#define UIC_ETH2	0x00002000	/* Ethernet 2			    */ -#define UIC_ETH3	0x00001000	/* Ethernet 3			    */ -#define UIC_EWU0	0x00000800	/* Ethernet 0 wakeup		    */ -#define UIC_EWU1	0x00000400	/* Ethernet 1 wakeup		    */ -#define UIC_EWU2	0x00000200	/* Ethernet 2 wakeup		    */ -#define UIC_EWU3	0x00000100	/* Ethernet 3 wakeup		    */ -#define UIC_EIR10	0x00000080	/* External interrupt 10	    */ -#define UIC_EIR11	0x00000040	/* External interrupt 11	    */ -#define UIC_RSVD2	0x00000020	/* Reserved			    */ -#define UIC_PLB4XAHB	0x00000010	/* PLB4XAHB / AHBARB error	    */ -#define UIC_OTG		0x00000008	/* USB2.0 OTG			    */ -#define UIC_EHCI	0x00000004	/* USB2.0 Host EHCI		    */ -#define UIC_OHCI	0x00000002	/* USB2.0 Host OHCI		    */ -#define UIC_OHCISMI	0x00000001	/* USB2.0 Host OHCI SMI		    */ - -#elif defined(CONFIG_440EPX) || defined(CONFIG_440GRX) /* UIC2 */ - -#define UIC_EIR5    0x80000000  /* External interrupt 5                 */ -#define UIC_EIR6    0x40000000  /* External interrupt 6                 */ -#define UIC_OPB     0x20000000  /* OPB to PLB bridge interrupt stat     */ -#define UIC_EIR2    0x10000000  /* External interrupt 2                 */ -#define UIC_EIR3    0x08000000  /* External interrupt 3                 */ -#define UIC_DDR2    0x04000000  /* DDR2 sdram                           */ -#define UIC_MCTX0   0x02000000  /* MAl intp coalescence TX0             */ -#define UIC_MCTX1   0x01000000  /* MAl intp coalescence TX1             */ -#define UIC_MCTR0   0x00800000  /* MAl intp coalescence TR0             */ -#define UIC_MCTR1   0x00400000  /* MAl intp coalescence TR1             */ - -#endif	/* CONFIG_440GX */ - -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller Base 0 interrupts (UICB0) -+---------------------------------------------------------------------------*/ -#if defined(CONFIG_440GX) -#define UICB0_UIC0CI	0x80000000	/* UIC0 Critical Interrupt	    */ -#define UICB0_UIC0NCI	0x40000000	/* UIC0 Noncritical Interrupt	    */ -#define UICB0_UIC1CI	0x20000000	/* UIC1 Critical Interrupt	    */ -#define UICB0_UIC1NCI	0x10000000	/* UIC1 Noncritical Interrupt	    */ -#define UICB0_UIC2CI	0x08000000	/* UIC2 Critical Interrupt	    */ -#define UICB0_UIC2NCI	0x04000000	/* UIC2 Noncritical Interrupt	    */ - -#define UICB0_ALL	(UICB0_UIC0CI | UICB0_UIC0NCI | UICB0_UIC1CI | \ -			 UICB0_UIC1NCI | UICB0_UIC2CI | UICB0_UIC2NCI) - -#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) - -#define UICB0_UIC1NCI	0x00000002	/* UIC1 Noncritical Interrupt	    */ -#define UICB0_UIC1CI	0x00000001	/* UIC1 Critical Interrupt	    */ -#define UICB0_UIC2NCI	0x00200000	/* UIC2 Noncritical Interrupt	    */ -#define UICB0_UIC2CI	0x00100000	/* UIC2 Critical Interrupt	    */ -#define UICB0_UIC3NCI	0x00008000	/* UIC3 Noncritical Interrupt	    */ -#define UICB0_UIC3CI	0x00004000	/* UIC3 Critical Interrupt	    */ - -#define UICB0_ALL	(UICB0_UIC1CI | UICB0_UIC1NCI | UICB0_UIC2CI | \ -			 UICB0_UIC2NCI | UICB0_UIC3CI | UICB0_UIC3NCI) - -#elif defined(CONFIG_440EPX) || defined(CONFIG_440GRX) - -#define UICB0_UIC1CI	0x00000001	/* UIC1 Critical Interrupt	    */ -#define UICB0_UIC1NCI	0x00000002	/* UIC1 Noncritical Interrupt	    */ -#define UICB0_UIC2CI	0x00000004	/* UIC2 Critical Interrupt	    */ -#define UICB0_UIC2NCI	0x00000008	/* UIC2 Noncritical Interrupt	    */ - -#define UICB0_ALL	(UICB0_UIC1CI | UICB0_UIC1NCI | \ -			 UICB0_UIC1CI | UICB0_UIC2NCI) - -#elif defined(CONFIG_440GP) || defined(CONFIG_440SP) || \ -    defined(CONFIG_440EP) || defined(CONFIG_440GR) - -#define UICB0_UIC1CI	0x00000001	/* UIC1 Critical Interrupt	    */ -#define UICB0_UIC1NCI	0x00000002	/* UIC1 Noncritical Interrupt	    */ - -#define UICB0_ALL	(UICB0_UIC1CI | UICB0_UIC1NCI) - -#endif /* CONFIG_440GX */ -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller interrupts -+---------------------------------------------------------------------------*/ -#if defined(CONFIG_440SPE) -/*#define UICB0_UIC0CI	0x80000000*/	/* UIC0 Critical Interrupt	    */ -/*#define UICB0_UIC0NCI	0x40000000*/	/* UIC0 Noncritical Interrupt	    */ -#define UICB0_UIC1CI	0x00000002	/* UIC1 Critical Interrupt	    */ -#define UICB0_UIC1NCI	0x00000001	/* UIC1 Noncritical Interrupt	    */ -#define UICB0_UIC2CI	0x00200000	/* UIC2 Critical Interrupt	    */ -#define UICB0_UIC2NCI	0x00100000	/* UIC2 Noncritical Interrupt	    */ -#define UICB0_UIC3CI	0x00008000	/* UIC3 Critical Interrupt	    */ -#define UICB0_UIC3NCI	0x00004000	/* UIC3 Noncritical Interrupt	    */ - -#define UICB0_ALL		(UICB0_UIC1CI | UICB0_UIC1NCI | UICB0_UIC2CI | \ -						 UICB0_UIC2NCI | UICB0_UIC3CI | UICB0_UIC3NCI) -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller 0 interrupts (UIC0) -+---------------------------------------------------------------------------*/ -#define UIC_U0		0x80000000	/* UART 0			    */ -#define UIC_U1		0x40000000	/* UART 1			    */ -#define UIC_IIC0	0x20000000	/* IIC				    */ -#define UIC_IIC1	0x10000000	/* IIC				    */ -#define UIC_PIM		0x08000000	/* PCI inbound message		    */ -#define UIC_PCRW	0x04000000	/* PCI command register write	    */ -#define UIC_PPM		0x02000000	/* PCI power management		    */ -#define UIC_PVPDA	0x01000000	/* PCIx 0 vpd access		    */ -#define UIC_MSI0	0x00800000	/* PCIx MSI level 0		    */ -#define UIC_EIR15	0x00400000	/* External intp 15		    */ -#define UIC_PEMSI0	0x00080000	/* PCIe MSI level 0		    */ -#define UIC_PEMSI1	0x00040000	/* PCIe MSI level 1		    */ -#define UIC_PEMSI2	0x00020000	/* PCIe MSI level 2		    */ -#define UIC_PEMSI3	0x00010000	/* PCIe MSI level 3		    */ -#define UIC_EIR14	0x00002000	/* External interrupt 14	    */ -#define UIC_D0CPFF	0x00001000	/* DMA0 cp fifo full		    */ -#define UIC_D0CSNS	0x00000800	/* DMA0 cs fifo needs service	    */ -#define UIC_D1CPFF	0x00000400	/* DMA1 cp fifo full		    */ -#define UIC_D1CSNS	0x00000200	/* DMA1 cs fifo needs service	    */ -#define UIC_I2OID	0x00000100	/* I2O inbound door bell	    */ -#define UIC_I2OLNE	0x00000080	/* I2O Inbound Post List FIFO Not Empty */ -#define UIC_I20R0LL	0x00000040	/* I2O Region 0 Low Latency PLB Write */ -#define UIC_I2OR1LL	0x00000020	/* I2O Region 1 Low Latency PLB Write */ -#define UIC_I20R0HB	0x00000010	/* I2O Region 0 High Bandwidth PLB Write */ -#define UIC_I2OR1HB	0x00000008	/* I2O Region 1 High Bandwidth PLB Write */ -#define UIC_CPTCNT	0x00000004	/* GPT Count Timer		    */ -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller 1 interrupts (UIC1) -+---------------------------------------------------------------------------*/ -#define UIC_EIR13	0x80000000	/* externei intp 13		    */ -#define UIC_MS		0x40000000	/* MAL SERR			    */ -#define UIC_MTDE	0x20000000	/* MAL TXDE			    */ -#define UIC_MRDE	0x10000000	/* MAL RXDE			    */ -#define UIC_DEUE	0x08000000	/* DDR SDRAM ECC correct/uncorrectable error */ -#define UIC_EBCO	0x04000000	/* EBCO interrupt status	    */ -#define UIC_MTE		0x02000000	/* MAL TXEOB			    */ -#define UIC_MRE		0x01000000	/* MAL RXEOB			    */ -#define UIC_MSI1	0x00800000	/* PCI MSI level 1		    */ -#define UIC_MSI2	0x00400000	/* PCI MSI level 2		    */ -#define UIC_MSI3	0x00200000	/* PCI MSI level 3		    */ -#define UIC_L2C		0x00100000	/* L2 cache			    */ -#define UIC_CT0		0x00080000	/* GPT compare timer 0		    */ -#define UIC_CT1		0x00040000	/* GPT compare timer 1		    */ -#define UIC_CT2		0x00020000	/* GPT compare timer 2		    */ -#define UIC_CT3		0x00010000	/* GPT compare timer 3		    */ -#define UIC_CT4		0x00008000	/* GPT compare timer 4		    */ -#define UIC_EIR12	0x00004000	/* External interrupt 12	    */ -#define UIC_EIR11	0x00002000	/* External interrupt 11	    */ -#define UIC_EIR10	0x00001000	/* External interrupt 10	    */ -#define UIC_EIR9	0x00000800	/* External interrupt 9		    */ -#define UIC_EIR8	0x00000400	/* External interrupt 8		    */ -#define UIC_DMAE	0x00000200	/* dma error			    */ -#define UIC_I2OE	0x00000100	/* i2o error			    */ -#define UIC_SRE		0x00000080	/* Serial ROM error		    */ -#define UIC_PCIXAE	0x00000040	/* Pcix0 async error		    */ -#define UIC_EIR7	0x00000020	/* External interrupt 7		    */ -#define UIC_EIR6	0x00000010	/* External interrupt 6		    */ -#define UIC_ETH0	0x00000008	/* Ethernet 0			    */ -#define UIC_EWU0	0x00000004	/* Ethernet 0 wakeup		    */ -#define UIC_ETH1	0x00000002	/* reserved			    */ -#define UIC_XOR		0x00000001	/* xor				    */ - -/*---------------------------------------------------------------------------+ -|  Universal interrupt controller 2 interrupts (UIC2) -+---------------------------------------------------------------------------*/ -#define UIC_PEOAL	0x80000000	/* PE0  AL			    */ -#define UIC_PEOVA	0x40000000	/* PE0  VPD access		    */ -#define UIC_PEOHRR	0x20000000	/* PE0 Host reset request rising    */ -#define UIC_PE0HRF	0x10000000	/* PE0 Host reset request falling   */ -#define UIC_PE0TCR	0x08000000	/* PE0 TCR			    */ -#define UIC_PE0BVCO	0x04000000	/* PE0 Busmaster VCO		    */ -#define UIC_PE0DCRE	0x02000000	/* PE0 DCR error		    */ -#define UIC_PE1AL	0x00800000	/* PE1  AL			    */ -#define UIC_PE1VA	0x00400000	/* PE1  VPD access		    */ -#define UIC_PE1HRR	0x00200000	/* PE1 Host reset request rising    */ -#define UIC_PE1HRF	0x00100000	/* PE1 Host reset request falling   */ -#define UIC_PE1TCR	0x00080000	/* PE1 TCR			    */ -#define UIC_PE1BVCO	0x00040000	/* PE1 Busmaster VCO		    */ -#define UIC_PE1DCRE	0x00020000	/* PE1 DCR error		    */ -#define UIC_PE2AL	0x00008000	/* PE2  AL			    */ -#define UIC_PE2VA	0x00004000	/* PE2  VPD access		    */ -#define UIC_PE2HRR	0x00002000	/* PE2 Host reset request rising    */ -#define UIC_PE2HRF	0x00001000	/* PE2 Host reset request falling   */ -#define UIC_PE2TCR	0x00000800	/* PE2 TCR			    */ -#define UIC_PE2BVCO	0x00000400	/* PE2 Busmaster VCO		    */ -#define UIC_PE2DCRE	0x00000200	/* PE2 DCR error		    */ -#define UIC_EIR5	0x00000080	/* External interrupt 5		    */ -#define UIC_EIR4	0x00000040	/* External interrupt 4		    */ -#define UIC_EIR3	0x00000020	/* External interrupt 3		    */ -#define UIC_EIR2	0x00000010	/* External interrupt 2		    */ -#define UIC_EIR1	0x00000008	/* External interrupt 1		    */ -#define UIC_EIR0	0x00000004	/* External interrupt 0		    */ -#endif /* CONFIG_440SPE */ - -/*-----------------------------------------------------------------------------+ -|  External Bus Controller Bit Settings -+-----------------------------------------------------------------------------*/ -#define EBC_CFGADDR_MASK		0x0000003F - -#define EBC_BXCR_BAS_ENCODE(n)	((((unsigned long)(n))&0xFFF00000)<<0) -#define EBC_BXCR_BS_MASK		0x000E0000 -#define EBC_BXCR_BS_1MB			0x00000000 -#define EBC_BXCR_BS_2MB			0x00020000 -#define EBC_BXCR_BS_4MB			0x00040000 -#define EBC_BXCR_BS_8MB			0x00060000 -#define EBC_BXCR_BS_16MB		0x00080000 -#define EBC_BXCR_BS_32MB		0x000A0000 -#define EBC_BXCR_BS_64MB		0x000C0000 -#define EBC_BXCR_BS_128MB		0x000E0000 -#define EBC_BXCR_BU_MASK		0x00018000 -#define EBC_BXCR_BU_R			0x00008000 -#define EBC_BXCR_BU_W			0x00010000 -#define EBC_BXCR_BU_RW			0x00018000 -#define EBC_BXCR_BW_MASK		0x00006000 -#define EBC_BXCR_BW_8BIT		0x00000000 -#define EBC_BXCR_BW_16BIT		0x00002000 -#define EBC_BXCR_BW_32BIT		0x00006000 -#define EBC_BXAP_BME_ENABLED		0x80000000 -#define EBC_BXAP_BME_DISABLED		0x00000000 -#define EBC_BXAP_TWT_ENCODE(n)		((((unsigned long)(n))&0xFF)<<23) -#define EBC_BXAP_BCE_DISABLE		0x00000000 -#define EBC_BXAP_BCE_ENABLE		0x00400000 -#define EBC_BXAP_BCT_MASK		0x00300000 -#define EBC_BXAP_BCT_2TRANS		0x00000000 -#define EBC_BXAP_BCT_4TRANS		0x00100000 -#define EBC_BXAP_BCT_8TRANS		0x00200000 -#define EBC_BXAP_BCT_16TRANS		0x00300000 -#define EBC_BXAP_CSN_ENCODE(n)		((((unsigned long)(n))&0x3)<<18) -#define EBC_BXAP_OEN_ENCODE(n)		((((unsigned long)(n))&0x3)<<16) -#define EBC_BXAP_WBN_ENCODE(n)		((((unsigned long)(n))&0x3)<<14) -#define EBC_BXAP_WBF_ENCODE(n)		((((unsigned long)(n))&0x3)<<12) -#define EBC_BXAP_TH_ENCODE(n)		((((unsigned long)(n))&0x7)<<9) -#define EBC_BXAP_RE_ENABLED		0x00000100 -#define EBC_BXAP_RE_DISABLED		0x00000000 -#define EBC_BXAP_SOR_DELAYED		0x00000000 -#define EBC_BXAP_SOR_NONDELAYED		0x00000080 -#define EBC_BXAP_BEM_WRITEONLY		0x00000000 -#define EBC_BXAP_BEM_RW			0x00000040 -#define EBC_BXAP_PEN_DISABLED		0x00000000 - -#define EBC_CFG_LE_MASK			0x80000000 -#define EBC_CFG_LE_UNLOCK		0x00000000 -#define EBC_CFG_LE_LOCK			0x80000000 -#define EBC_CFG_PTD_MASK		0x40000000 -#define EBC_CFG_PTD_ENABLE		0x00000000 -#define EBC_CFG_PTD_DISABLE		0x40000000 -#define EBC_CFG_RTC_MASK		0x38000000 -#define EBC_CFG_RTC_16PERCLK		0x00000000 -#define EBC_CFG_RTC_32PERCLK		0x08000000 -#define EBC_CFG_RTC_64PERCLK		0x10000000 -#define EBC_CFG_RTC_128PERCLK		0x18000000 -#define EBC_CFG_RTC_256PERCLK		0x20000000 -#define EBC_CFG_RTC_512PERCLK		0x28000000 -#define EBC_CFG_RTC_1024PERCLK		0x30000000 -#define EBC_CFG_RTC_2048PERCLK		0x38000000 -#define EBC_CFG_ATC_MASK		0x04000000 -#define EBC_CFG_ATC_HI			0x00000000 -#define EBC_CFG_ATC_PREVIOUS		0x04000000 -#define EBC_CFG_DTC_MASK		0x02000000 -#define EBC_CFG_DTC_HI			0x00000000 -#define EBC_CFG_DTC_PREVIOUS		0x02000000 -#define EBC_CFG_CTC_MASK		0x01000000 -#define EBC_CFG_CTC_HI			0x00000000 -#define EBC_CFG_CTC_PREVIOUS		0x01000000 -#define EBC_CFG_OEO_MASK		0x00800000 -#define EBC_CFG_OEO_HI			0x00000000 -#define EBC_CFG_OEO_PREVIOUS		0x00800000 -#define EBC_CFG_EMC_MASK		0x00400000 -#define EBC_CFG_EMC_NONDEFAULT		0x00000000 -#define EBC_CFG_EMC_DEFAULT		0x00400000 -#define EBC_CFG_PME_MASK		0x00200000 -#define EBC_CFG_PME_DISABLE		0x00000000 -#define EBC_CFG_PME_ENABLE		0x00200000 -#define EBC_CFG_PMT_MASK		0x001F0000 -#define EBC_CFG_PMT_ENCODE(n)		((((unsigned long)(n))&0x1F)<<12) -#define EBC_CFG_PR_MASK			0x0000C000 -#define EBC_CFG_PR_16			0x00000000 -#define EBC_CFG_PR_32			0x00004000 -#define EBC_CFG_PR_64			0x00008000 -#define EBC_CFG_PR_128			0x0000C000 -  /*-----------------------------------------------------------------------------+  |  SDR0 Bit Settings  +-----------------------------------------------------------------------------*/ @@ -1855,7 +887,7 @@  #define SDR0_DDR0_TUNE_DECODE(n)	((((unsigned long)(n))>>0)&0x2FF)  #endif -#if defined(CONFIG_440SPE) +#if defined(CONFIG_440SPE) || defined(CONFIG_460SX)  #define SDR0_CP440			0x0180  #define SDR0_CP440_ERPN_MASK		0x30000000  #define SDR0_CP440_ERPN_MASK_HI		0x3000 @@ -2793,7 +1825,8 @@  /*-----------------------------------------------------------------------------+  |  Clocking  +-----------------------------------------------------------------------------*/ -#if defined(CONFIG_460EX) || defined(CONFIG_460GT) +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  #define PLLSYS0_FWD_DIV_A_MASK	0x000000f0	/* Fwd Div A */  #define PLLSYS0_FWD_DIV_B_MASK	0x0000000f	/* Fwd Div B */  #define PLLSYS0_FB_DIV_MASK	0x0000ff00	/* Feedback divisor */ @@ -2873,118 +1906,10 @@  #endif /* CONFIG_440GX */  #if defined (CONFIG_440EPX) || defined (CONFIG_440GRX) -/*--------------------------------------*/ -#define CPR0_PLLC                   0x40 -#define   CPR0_PLLC_RST_MASK           0x80000000 -#define   CPR0_PLLC_RST_PLLLOCKED      0x00000000 -#define   CPR0_PLLC_RST_PLLRESET       0x80000000 -#define   CPR0_PLLC_ENG_MASK           0x40000000 -#define   CPR0_PLLC_ENG_DISABLE        0x00000000 -#define   CPR0_PLLC_ENG_ENABLE         0x40000000 -#define   CPR0_PLLC_ENG_ENCODE(n)      ((((unsigned long)(n))&0x01)<<30) -#define   CPR0_PLLC_ENG_DECODE(n)      ((((unsigned long)(n))>>30)&0x01) -#define   CPR0_PLLC_SRC_MASK           0x20000000 -#define   CPR0_PLLC_SRC_PLLOUTA        0x00000000 -#define   CPR0_PLLC_SRC_PLLOUTB        0x20000000 -#define   CPR0_PLLC_SRC_ENCODE(n)      ((((unsigned long)(n))&0x01)<<29) -#define   CPR0_PLLC_SRC_DECODE(n)      ((((unsigned long)(n))>>29)&0x01) -#define   CPR0_PLLC_SEL_MASK           0x07000000 -#define   CPR0_PLLC_SEL_PLL            0x00000000 -#define   CPR0_PLLC_SEL_CPU            0x01000000 -#define   CPR0_PLLC_SEL_PER            0x05000000 -#define   CPR0_PLLC_SEL_ENCODE(n)      ((((unsigned long)(n))&0x07)<<24) -#define   CPR0_PLLC_SEL_DECODE(n)      ((((unsigned long)(n))>>24)&0x07) -#define   CPR0_PLLC_TUNE_MASK          0x000003FF -#define   CPR0_PLLC_TUNE_ENCODE(n)     ((((unsigned long)(n))&0x3FF)<<0) -#define   CPR0_PLLC_TUNE_DECODE(n)     ((((unsigned long)(n))>>0)&0x3FF) -/*--------------------------------------*/ -#define CPR0_PLLD                   0x60 -#define   CPR0_PLLD_FBDV_MASK          0x1F000000 -#define   CPR0_PLLD_FBDV_ENCODE(n)     ((((unsigned long)(n))&0x1F)<<24) -#define   CPR0_PLLD_FBDV_DECODE(n)     ((((((unsigned long)(n))>>24)-1)&0x1F)+1) -#define   CPR0_PLLD_FWDVA_MASK         0x000F0000 -#define   CPR0_PLLD_FWDVA_ENCODE(n)    ((((unsigned long)(n))&0x0F)<<16) -#define   CPR0_PLLD_FWDVA_DECODE(n)    ((((((unsigned long)(n))>>16)-1)&0x0F)+1) -#define   CPR0_PLLD_FWDVB_MASK         0x00000700 -#define   CPR0_PLLD_FWDVB_ENCODE(n)    ((((unsigned long)(n))&0x07)<<8) -#define   CPR0_PLLD_FWDVB_DECODE(n)    ((((((unsigned long)(n))>>8)-1)&0x07)+1) -#define   CPR0_PLLD_LFBDV_MASK         0x0000003F -#define   CPR0_PLLD_LFBDV_ENCODE(n)    ((((unsigned long)(n))&0x3F)<<0) -#define   CPR0_PLLD_LFBDV_DECODE(n)    ((((((unsigned long)(n))>>0)-1)&0x3F)+1) -/*--------------------------------------*/ -#define CPR0_PRIMAD                 0x80 -#define   CPR0_PRIMAD_PRADV0_MASK      0x07000000 -#define   CPR0_PRIMAD_PRADV0_ENCODE(n) ((((unsigned long)(n))&0x07)<<24) -#define   CPR0_PRIMAD_PRADV0_DECODE(n) ((((((unsigned long)(n))>>24)-1)&0x07)+1) -/*--------------------------------------*/ -#define CPR0_PRIMBD                 0xA0 -#define   CPR0_PRIMBD_PRBDV0_MASK      0x07000000 -#define   CPR0_PRIMBD_PRBDV0_ENCODE(n) ((((unsigned long)(n))&0x07)<<24) -#define   CPR0_PRIMBD_PRBDV0_DECODE(n) ((((((unsigned long)(n))>>24)-1)&0x07)+1) -/*--------------------------------------*/ -#if 0 -#define CPR0_CPM0_ER                0xB0    /* CPM Enable Register */ -#define CPR0_CPM0_FR                0xB1    /* CPM Force Register */ -#define CPR0_CPM0_SR                0xB2    /* CPM Status Register */ -#define CPR0_CPM0_IIC0               0x80000000    /* Inter-Intergrated Circuit0 */ -#define CPR0_CPM0_IIC1               0x40000000    /* Inter-Intergrated Circuit1 */ -#define CPR0_CPM0_PCI                0x20000000    /* Peripheral Component Interconnect */ -#define CPR0_CPM0_USB1H              0x08000000    /* USB1.1 Host */ -#define CPR0_CPM0_FPU                0x04000000    /* PPC440 FPU */ -#define CPR0_CPM0_CPU                0x02000000    /* PPC440x5 Processor Core */ -#define CPR0_CPM0_DMA                0x01000000    /* Direct Memory Access Controller */ -#define CPR0_CPM0_BGO                0x00800000    /* PLB to OPB Bridge */ -#define CPR0_CPM0_BGI                0x00400000    /* OPB to PLB Bridge */ -#define CPR0_CPM0_EBC                0x00200000    /* External Bus Controller */ -#define CPR0_CPM0_NDFC               0x00100000    /* Nand Flash Controller */ -#define CPR0_CPM0_MADMAL             0x00080000    /* DDR SDRAM Controller or MADMAL ??? */ -#define CPR0_CPM0_DMC                0x00080000    /* DDR SDRAM Controller or MADMAL ??? */ -#define CPR0_CPM0_PLB4               0x00040000    /* PLB4 Arbiter */ -#define CPR0_CPM0_PLB4x3x            0x00020000    /* PLB4 to PLB3 */ -#define CPR0_CPM0_PLB3x4x            0x00010000    /* PLB3 to PLB4 */ -#define CPR0_CPM0_PLB3               0x00008000    /* PLB3 Arbiter */ -#define CPR0_CPM0_PPM                0x00002000    /* PLB Performance Monitor */ -#define CPR0_CPM0_UIC1               0x00001000    /* Universal Interrupt Controller 1 */ -#define CPR0_CPM0_GPIO               0x00000800    /* General Purpose IO */ -#define CPR0_CPM0_GPT                0x00000400    /* General Purpose Timer */ -#define CPR0_CPM0_UART0              0x00000200    /* Universal Asynchronous Rcver/Xmitter 0 */ -#define CPR0_CPM0_UART1              0x00000100    /* Universal Asynchronous Rcver/Xmitter 1 */ -#define CPR0_CPM0_UIC0               0x00000080    /* Universal Interrupt Controller 0 */ -#define CPR0_CPM0_TMRCLK             0x00000040    /* CPU Timer */ -#define CPR0_CPM0_EMC0               0x00000020    /* Ethernet 0 */ -#define CPR0_CPM0_EMC1               0x00000010    /* Ethernet 1 */ -#define CPR0_CPM0_UART2              0x00000008    /* Universal Asynchronous Rcver/Xmitter 2 */ -#define CPR0_CPM0_UART3              0x00000004    /* Universal Asynchronous Rcver/Xmitter 3 */ -#define CPR0_CPM0_USB2D              0x00000002    /* USB2.0 Device */ -#define CPR0_CPM0_USB2H              0x00000001    /* USB2.0 Host */ +#define CPR0_ICFG_RLI_MASK	0x80000000 +#define CPR0_SPCID_SPCIDV0_MASK	0x03000000 +#define CPR0_PERD_PERDV0_MASK	0x07000000  #endif -/*--------------------------------------*/ -#define CPR0_OPBD                   0xC0 -#define   CPR0_OPBD_OPBDV0_MASK        0x03000000 -#define   CPR0_OPBD_OPBDV0_ENCODE(n)   ((((unsigned long)(n))&0x03)<<24) -#define   CPR0_OPBD_OPBDV0_DECODE(n)   ((((((unsigned long)(n))>>24)-1)&0x03)+1) -/*--------------------------------------*/ -#define CPR0_PERD                   0xE0 -#define   CPR0_PERD_PERDV0_MASK        0x07000000 -#define   CPR0_PERD_PERDV0_ENCODE(n)   ((((unsigned long)(n))&0x07)<<24) -#define   CPR0_PERD_PERDV0_DECODE(n)   ((((((unsigned long)(n))>>24)-1)&0x07)+1) -/*--------------------------------------*/ -#define CPR0_MALD                  0x100 -#define   CPR0_MALD_MALDV0_MASK        0x03000000 -#define   CPR0_MALD_MALDV0_ENCODE(n)   ((((unsigned long)(n))&0x03)<<24) -#define   CPR0_MALD_MALDV0_DECODE(n)   ((((((unsigned long)(n))>>24)-1)&0x03)+1) -/*--------------------------------------*/ -#define CPR0_SPCID                 0x120 -#define   CPR0_SPCID_SPCIDV0_MASK      0x03000000 -#define   CPR0_SPCID_SPCIDV0_ENCODE(n) ((((unsigned long)(n))&0x03)<<24) -#define   CPR0_SPCID_SPCIDV0_DECODE(n) ((((((unsigned long)(n))>>24)-1)&0x03)+1) -/*--------------------------------------*/ -#define CPR0_ICFG                  0x140 -#define   CPR0_ICFG_RLI_MASK           0x80000000 -#define   CPR0_ICFG_RLI_RESETCPR       0x00000000 -#define   CPR0_ICFG_RLI_PRESERVECPR    0x80000000 -#define   CPR0_ICFG_ICS_MASK           0x00000007 -#endif /* defined (CONFIG_440EPX) || defined (CONFIG_440GRX) */  /*-----------------------------------------------------------------------------  | IIC Register Offsets @@ -3006,20 +1931,6 @@  #define IICDIRECTCNTL		0x10  /*----------------------------------------------------------------------------- -| UART Register Offsets -'----------------------------------------------------------------------------*/ -#define DATA_REG		0x00 -#define DL_LSB			0x00 -#define DL_MSB			0x01 -#define INT_ENABLE		0x01 -#define FIFO_CONTROL		0x02 -#define LINE_CONTROL		0x03 -#define MODEM_CONTROL		0x04 -#define LINE_STATUS		0x05 -#define MODEM_STATUS		0x06 -#define SCRATCH			0x07 - -/*-----------------------------------------------------------------------------  | PCI Internal Registers et. al. (accessed via plb)  +----------------------------------------------------------------------------*/  #define PCIX0_CFGADR		(CFG_PCI_BASE + 0x0ec00000) @@ -3145,7 +2056,8 @@   * GPIO macro register defines   ******************************************************************************/  #if defined(CONFIG_440GP) || defined(CONFIG_440GX) || \ -    defined(CONFIG_440SP) || defined(CONFIG_440SPE) +    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ +    defined(CONFIG_460SX)  #define GPIO0_BASE             (CFG_PERIPHERAL_BASE+0x00000700)  #define GPIO0_OR               (GPIO0_BASE+0x0) diff --git a/include/ppc4xx.h b/include/ppc4xx.h index 1d06da877..c71da6084 100644 --- a/include/ppc4xx.h +++ b/include/ppc4xx.h @@ -41,7 +41,8 @@  #if defined(CONFIG_405EX) || \      defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ -    defined(CONFIG_460EX) || defined(CONFIG_460GT) +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX)  #define CONFIG_SDRAM_PPC4xx_IBM_DDR2	/* IBM DDR(2) controller */  #endif @@ -58,6 +59,10 @@  #endif  #include <asm/ppc4xx-sdram.h> +#include <asm/ppc4xx-ebc.h> +#if !defined(CONFIG_XILINX_440) +#include <asm/ppc4xx-uic.h> +#endif  /*   * Macro for generating register field mnemonics diff --git a/include/ppc4xx_enet.h b/include/ppc4xx_enet.h index 4c97b36c0..b74c6fcaf 100644 --- a/include/ppc4xx_enet.h +++ b/include/ppc4xx_enet.h @@ -153,6 +153,20 @@ typedef struct emac_4xx_hw_st {  #define SDR0_PFC1_EM_1000	(0x00200000)  #endif +/* + * XMII bridge configurations for those systems (e.g. 405EX(r)) that do + * not have a pin function control (PFC) register to otherwise determine + * the bridge configuration. + */ +#define EMAC_PHY_MODE_NONE		0 +#define EMAC_PHY_MODE_NONE_RGMII	1 +#define EMAC_PHY_MODE_RGMII_NONE	2 +#define EMAC_PHY_MODE_RGMII_RGMII	3 +#define EMAC_PHY_MODE_NONE_GMII		4 +#define EMAC_PHY_MODE_GMII_NONE		5 +#define EMAC_PHY_MODE_NONE_MII		6 +#define EMAC_PHY_MODE_MII_NONE		7 +  /* ZMII Bridge Register addresses */  #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \      defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ @@ -218,12 +232,12 @@ typedef struct emac_4xx_hw_st {  #endif  /* RGMII Function Enable (FER) Register Bit Definitions */ -/* Note: for EMAC 2 and 3 only, 440GX only */  #define RGMII_FER_DIS		(0x00)  #define RGMII_FER_RTBI		(0x04)  #define RGMII_FER_RGMII		(0x05)  #define RGMII_FER_TBI		(0x06)  #define RGMII_FER_GMII		(0x07) +#define RGMII_FER_MII		(RGMII_FER_GMII)  #define RGMII_FER_V(__x)	((__x - 2) * 4) |