⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bamboo.c

📁 比较合适at91的u_boot源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * (C) Copyright 2005-2007 * 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 */#include <common.h>#include <asm/processor.h>#include <asm/gpio.h>#include <spd_sdram.h>#include <ppc440.h>#include "bamboo.h"void ext_bus_cntlr_init(void);void configure_ppc440ep_pins(void);int is_nand_selected(void);unsigned char cfg_simulate_spd_eeprom[128];gpio_param_s gpio_tab[GPIO_GROUP_MAX][GPIO_MAX];#if 0{	   /* GPIO   Alternate1	      Alternate2	Alternate3 */    {	/* GPIO Core 0 */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_0	-> EBC_ADDR(7)	    DMA_REQ(2) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_1	-> EBC_ADDR(6)	    DMA_ACK(2) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_2	-> EBC_ADDR(5)	    DMA_EOT/TC(2) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_3	-> EBC_ADDR(4)	    DMA_REQ(3) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_4	-> EBC_ADDR(3)	    DMA_ACK(3) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_5 ................. */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_6	-> EBC_CS_N(1) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_7	-> EBC_CS_N(2) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_8	-> EBC_CS_N(3) */	{ GPIO0_BASE, GPIO_DIS, GPIO_ALT1 }, /* GPIO0_9	 -> EBC_CS_N(4) */	{ GPIO0_BASE, GPIO_OUT, GPIO_ALT1 }, /* GPIO0_10 -> EBC_CS_N(5) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_11 -> EBC_BUS_ERR */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_12 -> ZII_p0Rxd(0) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_13 -> ZII_p0Rxd(1) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_14 -> ZII_p0Rxd(2) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_15 -> ZII_p0Rxd(3) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_16 -> ZII_p0Txd(0) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_17 -> ZII_p0Txd(1) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_18 -> ZII_p0Txd(2) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_19 -> ZII_p0Txd(3) */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_20 -> ZII_p0Rx_er */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_21 -> ZII_p0Rx_dv */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_22 -> ZII_p0RxCrs */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_23 -> ZII_p0Tx_er */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_24 -> ZII_p0Tx_en */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_25 -> ZII_p0Col */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_26 ->		    USB2D_RXVALID */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_27 -> EXT_EBC_REQ	    USB2D_RXERROR */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_28 ->		    USB2D_TXVALID */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_29 -> EBC_EXT_HDLA	    USB2D_PAD_SUSPNDM */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_30 -> EBC_EXT_ACK	    USB2D_XCVRSELECT */	{ GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_31 -> EBC_EXR_BUSREQ   USB2D_TERMSELECT */    },    {	/* GPIO Core 1 */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_0	-> USB2D_OPMODE0 */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_1	-> USB2D_OPMODE1 */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_2	-> UART0_DCD_N	    UART1_DSR_CTS_N   UART2_SOUT */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_3	-> UART0_8PIN_DSR_N UART1_RTS_DTR_N   UART2_SIN */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_4	-> UART0_8PIN_CTS_N		      UART3_SIN */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_5	-> UART0_RTS_N */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_6	-> UART0_DTR_N	    UART1_SOUT */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_7	-> UART0_RI_N	    UART1_SIN */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_8	-> UIC_IRQ(0) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_9	-> UIC_IRQ(1) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_10 -> UIC_IRQ(2) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_11 -> UIC_IRQ(3) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_12 -> UIC_IRQ(4)	    DMA_ACK(1) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_13 -> UIC_IRQ(6)	    DMA_EOT/TC(1) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_14 -> UIC_IRQ(7)	    DMA_REQ(0) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_15 -> UIC_IRQ(8)	    DMA_ACK(0) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_16 -> UIC_IRQ(9)	    DMA_EOT/TC(0) */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_17 -> - */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_18 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_19 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_20 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_21 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_22 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_23 ->   \	   Can be unselected thru TraceSelect Bit */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_24 ->   /	      in PowerPC440EP Chip */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_25 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_26 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_27 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_28 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_29 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_30 ->  | */	{ GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_31 -> - */    }};#endif/*----------------------------------------------------------------------------+  | EBC Devices Characteristics  |   Peripheral Bank Access Parameters	      -	  EBC0_BnAP  |   Peripheral Bank Configuration Register  -	  EBC0_BnCR  +----------------------------------------------------------------------------*//* Small Flash */#define EBC0_BNAP_SMALL_FLASH				\	EBC0_BNAP_BME_DISABLED			|	\	EBC0_BNAP_TWT_ENCODE(6)			|	\	EBC0_BNAP_CSN_ENCODE(0)	    		|	\	EBC0_BNAP_OEN_ENCODE(1)	    		|	\	EBC0_BNAP_WBN_ENCODE(1)	    		|	\	EBC0_BNAP_WBF_ENCODE(3)	    		|	\	EBC0_BNAP_TH_ENCODE(1)	    		|	\	EBC0_BNAP_RE_ENABLED	    		|	\	EBC0_BNAP_SOR_DELAYED	    		|	\	EBC0_BNAP_BEM_WRITEONLY	    		|	\	EBC0_BNAP_PEN_DISABLED#define EBC0_BNCR_SMALL_FLASH_CS0			\	EBC0_BNCR_BAS_ENCODE(0xFFF00000)    	| 	\	EBC0_BNCR_BS_1MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_8BIT#define EBC0_BNCR_SMALL_FLASH_CS4			\	EBC0_BNCR_BAS_ENCODE(0x87F00000)    	| 	\	EBC0_BNCR_BS_1MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_8BIT/* Large Flash or SRAM */#define EBC0_BNAP_LARGE_FLASH_OR_SRAM			\	EBC0_BNAP_BME_DISABLED	    		|	\	EBC0_BNAP_TWT_ENCODE(8)	    		|	\	EBC0_BNAP_CSN_ENCODE(0)	    		|	\	EBC0_BNAP_OEN_ENCODE(1)	    		|	\	EBC0_BNAP_WBN_ENCODE(1)	    		|	\	EBC0_BNAP_WBF_ENCODE(1)	    		|	\	EBC0_BNAP_TH_ENCODE(2)	    		|	\	EBC0_BNAP_SOR_DELAYED	    		|	\	EBC0_BNAP_BEM_RW	    		|	\	EBC0_BNAP_PEN_DISABLED#define EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0   		\	EBC0_BNCR_BAS_ENCODE(0xFF800000)	| 	\	EBC0_BNCR_BS_8MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_16BIT#define EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4   		\	EBC0_BNCR_BAS_ENCODE(0x87800000)	| 	\	EBC0_BNCR_BS_8MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_16BIT/* NVRAM - FPGA */#define EBC0_BNAP_NVRAM_FPGA				\	EBC0_BNAP_BME_DISABLED	    		|	\	EBC0_BNAP_TWT_ENCODE(9)	    		|	\	EBC0_BNAP_CSN_ENCODE(0)	    		|	\	EBC0_BNAP_OEN_ENCODE(1)	    		|	\	EBC0_BNAP_WBN_ENCODE(1)	    		|	\	EBC0_BNAP_WBF_ENCODE(0)	    		|	\	EBC0_BNAP_TH_ENCODE(2)	    		|	\	EBC0_BNAP_RE_ENABLED	    		|	\	EBC0_BNAP_SOR_DELAYED	    		|	\	EBC0_BNAP_BEM_WRITEONLY	    		|	\	EBC0_BNAP_PEN_DISABLED#define EBC0_BNCR_NVRAM_FPGA_CS5			\	EBC0_BNCR_BAS_ENCODE(0x80000000)    	| 	\	EBC0_BNCR_BS_1MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_8BIT/* Nand Flash */#define EBC0_BNAP_NAND_FLASH				\	EBC0_BNAP_BME_DISABLED	    		|	\	EBC0_BNAP_TWT_ENCODE(3)	    		|	\	EBC0_BNAP_CSN_ENCODE(0)	    		|	\	EBC0_BNAP_OEN_ENCODE(0)	    		|	\	EBC0_BNAP_WBN_ENCODE(0)	    		|	\	EBC0_BNAP_WBF_ENCODE(0)	    		|	\	EBC0_BNAP_TH_ENCODE(1)	    		|	\	EBC0_BNAP_RE_ENABLED	    		|	\	EBC0_BNAP_SOR_NOT_DELAYED   		|	\	EBC0_BNAP_BEM_RW	    		|	\	EBC0_BNAP_PEN_DISABLED#define EBC0_BNCR_NAND_FLASH_CS0	0xB8400000/* NAND0 */#define EBC0_BNCR_NAND_FLASH_CS1			\	EBC0_BNCR_BAS_ENCODE(0x90000000)    	| 	\	EBC0_BNCR_BS_1MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_32BIT/* NAND1 - Bank2 */#define EBC0_BNCR_NAND_FLASH_CS2			\	EBC0_BNCR_BAS_ENCODE(0x94000000)    	| 	\	EBC0_BNCR_BS_1MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_32BIT/* NAND1 - Bank3 */#define EBC0_BNCR_NAND_FLASH_CS3			\	EBC0_BNCR_BAS_ENCODE(0x94000000)    	| 	\	EBC0_BNCR_BS_1MB		    	|	\	EBC0_BNCR_BU_RW			    	|	\	EBC0_BNCR_BW_32BITint board_early_init_f(void){	ext_bus_cntlr_init();	/*--------------------------------------------------------------------	 * Setup the interrupt controller polarities, triggers, etc.	 *-------------------------------------------------------------------*/	mtdcr(uic0sr, 0xffffffff);	/* clear all */	mtdcr(uic0er, 0x00000000);	/* disable all */	mtdcr(uic0cr, 0x00000009);	/* ATI & 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 */	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(uic1vr, 0x00000001);	/* int31 highest, base=0x000 */	mtdcr(uic1sr, 0xffffffff);	/* clear all */	/*--------------------------------------------------------------------	 * Setup the GPIO pins	 *-------------------------------------------------------------------*/	out32(GPIO0_OSRL,  0x00000400);	out32(GPIO0_OSRH,  0x00000000);	out32(GPIO0_TSRL,  0x00000400);	out32(GPIO0_TSRH,  0x00000000);	out32(GPIO0_ISR1L, 0x00000000);	out32(GPIO0_ISR1H, 0x00000000);	out32(GPIO0_ISR2L, 0x00000000);	out32(GPIO0_ISR2H, 0x00000000);	out32(GPIO0_ISR3L, 0x00000000);	out32(GPIO0_ISR3H, 0x00000000);	out32(GPIO1_OSRL,  0x0C380000);	out32(GPIO1_OSRH,  0x00000000);	out32(GPIO1_TSRL,  0x0C380000);	out32(GPIO1_TSRH,  0x00000000);	out32(GPIO1_ISR1L, 0x0FC30000);	out32(GPIO1_ISR1H, 0x00000000);	out32(GPIO1_ISR2L, 0x0C010000);	out32(GPIO1_ISR2H, 0x00000000);	out32(GPIO1_ISR3L, 0x01400000);	out32(GPIO1_ISR3H, 0x00000000);	configure_ppc440ep_pins();	return 0;}int checkboard(void){	char *s = getenv("serial#");	printf("Board: Bamboo - AMCC PPC440EP Evaluation Board");	if (s != NULL) {		puts(", serial# ");		puts(s);	}	putc('\n');	return (0);}#if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))/************************************************************************* * * init_spd_array -- Bamboo has one bank onboard sdram (plus DIMM) * * Fixed memory is composed of : *	MT46V16M16TG-75 from Micron (x 2), 256Mb, 16 M x16, DDR266, *	13 row add bits, 10 column add bits (but 12 row used only). *	ECC device: MT46V16M8TG-75 from Micron (x 1), 128Mb, x8, DDR266, *	12 row add bits, 10 column add bits. *	Prepare a subset (only the used ones) of SPD data * *	Note : if the ECC is enabled (SDRAM_ECC_ENABLE) the size of *	the corresponding bank is divided by 2 due to number of Row addresses *	12 in the ECC module * *  Assumes:	64 MB, ECC, non-registered *		PLB @ 133 MHz * ************************************************************************/static void init_spd_array(void){	cfg_simulate_spd_eeprom[8]     = 0x04;    /* 2.5 Volt */	cfg_simulate_spd_eeprom[2]     = 0x07;    /* DDR ram */#ifdef CONFIG_DDR_ECC	cfg_simulate_spd_eeprom[11]    = 0x02;    /* ECC ON : 02 OFF : 00 */	cfg_simulate_spd_eeprom[31]    = 0x08;    /* bankSizeID: 32MB */	cfg_simulate_spd_eeprom[3]     = 0x0C;    /* num Row Addr: 12 */#else	cfg_simulate_spd_eeprom[11]    = 0x00;    /* ECC ON : 02 OFF : 00 */	cfg_simulate_spd_eeprom[31]    = 0x10;    /* bankSizeID: 64MB */	cfg_simulate_spd_eeprom[3]     = 0x0D;    /* num Row Addr: 13 */#endif	cfg_simulate_spd_eeprom[4]     = 0x09;    /* numColAddr: 9  */	cfg_simulate_spd_eeprom[5]     = 0x01;    /* numBanks: 1 */	cfg_simulate_spd_eeprom[0]     = 0x80;    /* number of SPD bytes used: 128 */	cfg_simulate_spd_eeprom[1]     = 0x08;    /*  total number bytes in SPD device = 256 */	cfg_simulate_spd_eeprom[21]    = 0x00;    /* not registered: 0  registered : 0x02*/	cfg_simulate_spd_eeprom[6]     = 0x20;    /* Module data width: 32 bits */	cfg_simulate_spd_eeprom[7]     = 0x00;    /* Module data width continued: +0 */	cfg_simulate_spd_eeprom[15]    = 0x01;    /* wcsbc = 1 */	cfg_simulate_spd_eeprom[27]    = 0x50;    /* tRpNs = 20 ns  */	cfg_simulate_spd_eeprom[29]    = 0x50;    /* tRcdNs = 20 ns */	cfg_simulate_spd_eeprom[30]    = 45;      /* tRasNs */	cfg_simulate_spd_eeprom[18]    = 0x0C;    /* casBit (2,2.5) */	cfg_simulate_spd_eeprom[9]     = 0x75;    /* SDRAM Cycle Time (cas latency 2.5) = 7.5 ns */	cfg_simulate_spd_eeprom[23]    = 0xA0;    /* SDRAM Cycle Time (cas latency 2) = 10 ns */	cfg_simulate_spd_eeprom[25]    = 0x00;    /* SDRAM Cycle Time (cas latency 1.5) = N.A */	cfg_simulate_spd_eeprom[12]    = 0x82;    /* refresh Rate Type: Normal (15.625us) + Self refresh */}#endiflong int initdram (int board_type){#if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))	long dram_size;	/*	 * First write simulated values in eeprom array for onboard bank 0	 */	init_spd_array();	dram_size = spd_sdram();	return dram_size;#else	return CFG_MBYTES_SDRAM << 20;#endif}#if defined(CFG_DRAM_TEST)int testdram(void){	unsigned long *mem = (unsigned long *)0;	const unsigned long kend = (1024 / sizeof(unsigned long));	unsigned long k, n;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -