diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-arm/arch-at91rm9200/AT91RM9200.h | 56 | ||||
| -rw-r--r-- | include/at91rm9200_i2c.h | 126 | ||||
| -rw-r--r-- | include/configs/cmc_pu2.h | 225 | 
3 files changed, 399 insertions, 8 deletions
| diff --git a/include/asm-arm/arch-at91rm9200/AT91RM9200.h b/include/asm-arm/arch-at91rm9200/AT91RM9200.h index 463f46264..869c4e20b 100644 --- a/include/asm-arm/arch-at91rm9200/AT91RM9200.h +++ b/include/asm-arm/arch-at91rm9200/AT91RM9200.h @@ -446,7 +446,35 @@ typedef struct _AT91S_PDC {  /* ========== Register definition ==================================== */  #define AT91C_SPI_CSR   ((AT91_REG *) 	0xFFFE0030) /* (SPI) Chip Select Register */  #define AT91C_PMC_PCER  ((AT91_REG *) 	0xFFFFFC10) /* (PMC) Peripheral Clock Enable Register */ +#define AT91C_PIOA_PER  ((AT91_REG *) 	0xFFFFF400) /* (PIOA) PIO Enable Register */  #define AT91C_PIOA_PDR  ((AT91_REG *) 	0xFFFFF404) /* (PIOA) PIO Disable Register */ +#define AT91C_PIOA_PSR  ((AT91_REG *) 	0xFFFFF408) /* (PIOA) PIO Status Register */ +#define AT91C_PIOA_OER  ((AT91_REG *) 	0xFFFFF410) /* (PIOA) PIO Output Enable Register */ +#define AT91C_PIOA_ODR  ((AT91_REG *) 	0xFFFFF414) /* (PIOA) PIO Output Disable Register */ +#define AT91C_PIOA_OSR  ((AT91_REG *) 	0xFFFFF418) /* (PIOA) PIO Output Status Register */ +#define AT91C_PIOA_IFER  ((AT91_REG *) 	0xFFFFF420) /* (PIOA) PIO Glitch Input Filter Enable Register */ +#define AT91C_PIOA_IFDR  ((AT91_REG *) 	0xFFFFF424) /* (PIOA) PIO Glitch Input Filter Disable Register */ +#define AT91C_PIOA_IFSR  ((AT91_REG *) 	0xFFFFF428) /* (PIOA) PIO Glitch Input Filter Status Register */ +#define AT91C_PIOA_SODR  ((AT91_REG *) 	0xFFFFF430) /* (PIOA) PIO Set Output Data Register */ +#define AT91C_PIOA_CODR  ((AT91_REG *) 	0xFFFFF434) /* (PIOA) PIO Clear Output Data Register */ +#define AT91C_PIOA_ODSR  ((AT91_REG *) 	0xFFFFF438) /* (PIOA) PIO Output Data Status Register */ +#define AT91C_PIOA_PDSR  ((AT91_REG *) 	0xFFFFF43C) /* (PIOA) PIO Pin Data Status Register */ +#define AT91C_PIOA_IER  ((AT91_REG *) 	0xFFFFF440) /* (PIOA) PIO Interrupt Enable Register */ +#define AT91C_PIOA_IDR  ((AT91_REG *) 	0xFFFFF444) /* (PIOA) PIO Interrupt Disable Register */ +#define AT91C_PIOA_IMR  ((AT91_REG *) 	0xFFFFF448) /* (PIOA) PIO Interrupt Mask Register */ +#define AT91C_PIOA_ISR  ((AT91_REG *) 	0xFFFFF44C) /* (PIOA) PIO Interrupt Status Register */ +#define AT91C_PIOA_MDER  ((AT91_REG *) 	0xFFFFF450) /* (PIOA) PIO Multi-drive Enable Register */ +#define AT91C_PIOA_MDDR  ((AT91_REG *) 	0xFFFFF454) /* (PIOA) PIO Multi-drive Disable Register */ +#define AT91C_PIOA_MDSR  ((AT91_REG *) 	0xFFFFF458) /* (PIOA) PIO Multi-drive Status Register */ +#define AT91C_PIOA_PUDR  ((AT91_REG *) 	0xFFFFF460) /* (PIOA) PIO Pull-up Disable Register */ +#define AT91C_PIOA_PUER  ((AT91_REG *) 	0xFFFFF464) /* (PIOA) PIO Pull-up Enable Register */ +#define AT91C_PIOA_PUSR  ((AT91_REG *) 	0xFFFFF468) /* (PIOA) PIO Pull-up Status Register */ +#define AT91C_PIOA_ASR  ((AT91_REG *) 	0xFFFFF470) /* (PIOA) PIO Peripheral A Select Register */ +#define AT91C_PIOA_BSR  ((AT91_REG *) 	0xFFFFF474) /* (PIOA) PIO Peripheral B Select Register */ +#define AT91C_PIOA_ABSR  ((AT91_REG *) 	0xFFFFF478) /* (PIOA) PIO Peripheral AB Select Register */ +#define AT91C_PIOA_OWER  ((AT91_REG *) 	0xFFFFF4A0) /* (PIOA) PIO Output Write Enable Register */ +#define AT91C_PIOA_OWDR  ((AT91_REG *) 	0xFFFFF4A4) /* (PIOA) PIO Output Write Disable Register */ +#define AT91C_PIOA_OWSR  ((AT91_REG *) 	0xFFFFF4A8) /* (PIOA) PIO Output Write Status Register */  #define AT91C_PIOB_PDR  ((AT91_REG *) 	0xFFFFF604) /* (PIOB) PIO Disable Register */  #define AT91C_PIO_PA30       ((unsigned int) 1 << 30) /* Pin Controlled by PA30 */ @@ -454,19 +482,28 @@ typedef struct _AT91S_PDC {  #define AT91C_PC0_BFCK     ((unsigned int) AT91C_PIO_PC0) /*  Burst Flash Clock */  #define AT91C_PA30_DRXD     ((unsigned int) AT91C_PIO_PA30) /*  DBGU Debug Receive Data */  #define AT91C_PIO_PA31       ((unsigned int) 1 << 31) /* Pin Controlled by PA31 */ +#define AT91C_PA25_TWD		((unsigned int) 1 << 25) +#define AT91C_PA26_TWCK		((unsigned int) 1 << 26)  #define AT91C_PA31_DTXD     ((unsigned int) AT91C_PIO_PA31) /*  DBGU Debug Transmit Data */ +#define AT91C_PIO_PA17       ((unsigned int) 1 << 17) /* Pin Controlled by PA17 */ +#define AT91C_PA17_TXD0     AT91C_PIO_PA17 /*  USART0 Transmit Data */ +#define AT91C_PIO_PA18       ((unsigned int) 1 << 18) /* Pin Controlled by PA18 */ +#define AT91C_PA18_RXD0     AT91C_PIO_PA18 /*  USART0 Receive Data */  #define AT91C_PIO_PB20       ((unsigned int) 1 << 20) /* Pin Controlled by PB20 */ -#define AT91C_PB20_RXD1     ((unsigned int) AT91C_PIO_PB20) /*  USART1 Receive Data */ +#define AT91C_PB20_RXD1     AT91C_PIO_PB20 /*  USART1 Receive Data */  #define AT91C_PIO_PB21       ((unsigned int) 1 << 21) /* Pin Controlled by PB21 */ -#define AT91C_PB21_TXD1     ((unsigned int) AT91C_PIO_PB21) /*  USART1 Transmit Data */ +#define AT91C_PB21_TXD1     AT91C_PIO_PB21 /*  USART1 Transmit Data */ -#define AT91C_ID_SYS    ((unsigned int)  1) /* System Peripheral */ +#define AT91C_ID_SYS    ((unsigned int) 1) /* System Peripheral */ +#define AT91C_ID_PIOA	((unsigned int) 2)	/* PIO port A */ +#define AT91C_ID_PIOB	((unsigned int) 3)	/* PIO port B */ +#define AT91C_ID_PIOC	((unsigned int) 4)	/* PIO port C */ +#define AT91C_ID_USART0	((unsigned int) 6)	/* USART 0 */ +#define AT91C_ID_USART1	((unsigned int) 7)	/* USART 1 */ +#define AT91C_ID_TWI    ((unsigned int) 12) /* Two Wire Interface */ +#define AT91C_ID_SPI    ((unsigned int) 13) /* Serial Peripheral Interface */  #define AT91C_ID_TC0    ((unsigned int) 17) /* Timer Counter 0 */  #define AT91C_ID_EMAC   ((unsigned int) 24) /* Ethernet MAC */ -#define AT91C_ID_SPI    ((unsigned int) 13) /* Serial Peripheral Interface */ -#define AT91C_ID_PIOB	((unsigned int) 3) -#define AT91C_ID_PIOC	((unsigned int) 4) -#define AT91C_ID_USART1	((unsigned int) 7)  #define AT91C_PIO_PC1        ((unsigned int) 1 <<  1) /* Pin Controlled by PC1 */  #define AT91C_PC1_BFRDY_SMOE ((unsigned int) AT91C_PIO_PC1) /*  Burst Flash Ready */ @@ -561,11 +598,14 @@ typedef struct _AT91S_PDC {  #define AT91C_BASE_EMAC      ((AT91PS_EMAC) 	0xFFFBC000) /* (EMAC) Base Address */  #define AT91C_BASE_PMC       ((AT91PS_PMC) 	0xFFFFFC00) /* (PMC) Base Address */  #define AT91C_BASE_TC0       ((AT91PS_TC) 	0xFFFA0000) /* (TC0) Base Address */ -#define AT91C_BASE_DBGU      ((AT91PS_DBGU) 	0xFFFFF200) /* (DBGU) Base Address */ +#define AT91C_BASE_DBGU      ((AT91PS_DBGU)	0xFFFFF200) /* (DBGU) Base Address */ +#define AT91C_BASE_CKGR      ((AT91PS_CKGR) 0xFFFFFC20) /* (CKGR) Base Address */ +#define AT91C_BASE_PIOC      ((AT91PS_PIO) 	0xFFFFF800) /* (PIOC) Base Address */  #define AT91C_BASE_PIOB      ((AT91PS_PIO) 	0xFFFFF600) /* (PIOB) Base Address */  #define AT91C_BASE_PIOA      ((AT91PS_PIO) 	0xFFFFF400) /* (PIOA) Base Address */  #define AT91C_EBI_CSA   ((AT91_REG *) 	0xFFFFFF60) /* (EBI) Chip Select Assignment Register */  #define AT91C_BASE_SMC2      ((AT91PS_SMC2) 	0xFFFFFF70) /* (SMC2) Base Address */ +#define AT91C_BASE_US0       ((AT91PS_USART) 	0xFFFC0000) /* (US0) Base Address */  #define AT91C_BASE_US1       ((AT91PS_USART) 	0xFFFC4000) /* (US1) Base Address */  #define AT91C_TCB0_BMR  ((AT91_REG *) 	0xFFFA00C4) /* (TCB0) TC Block Mode Register */  #define AT91C_TCB0_BCR  ((AT91_REG *) 	0xFFFA00C0) /* (TCB0) TC Block Control Register */ diff --git a/include/at91rm9200_i2c.h b/include/at91rm9200_i2c.h new file mode 100644 index 000000000..cb13d9d4d --- /dev/null +++ b/include/at91rm9200_i2c.h @@ -0,0 +1,126 @@ +// ---------------------------------------------------------------------------- +//          ATMEL Microcontroller Software Support  -  ROUSSET  - +// ---------------------------------------------------------------------------- +//  The software is delivered "AS IS" without warranty or condition of any +//  kind, either express, implied or statutory. This includes without +//  limitation any warranty or condition with respect to merchantability or +//  fitness for any particular purpose, or against the infringements of +//  intellectual property rights of others. +// ---------------------------------------------------------------------------- +// File Name           : at91rm9200_i2c.h +// Object              : AT91RM9200 / TWI definitions +// Generated           : AT91 SW Application Group  12/03/2002 (10:48:02) +// +// ---------------------------------------------------------------------------- + +#ifndef AT91RM9200_TWI_H +#define AT91RM9200_TWI_H + +// ***************************************************************************** +//              SOFTWARE API DEFINITION  FOR Two-wire Interface +// ***************************************************************************** +#ifndef __ASSEMBLY__ + +typedef struct _AT91S_TWI { +	AT91_REG	 TWI_CR; 	// Control Register +	AT91_REG	 TWI_MMR; 	// Master Mode Register +	AT91_REG	 TWI_SMR; 	// Slave Mode Register +	AT91_REG	 TWI_IADR; 	// Internal Address Register +	AT91_REG	 TWI_CWGR; 	// Clock Waveform Generator Register +	AT91_REG	 Reserved0[3]; 	// +	AT91_REG	 TWI_SR; 	// Status Register +	AT91_REG	 TWI_IER; 	// Interrupt Enable Register +	AT91_REG	 TWI_IDR; 	// Interrupt Disable Register +	AT91_REG	 TWI_IMR; 	// Interrupt Mask Register +	AT91_REG	 TWI_RHR; 	// Receive Holding Register +	AT91_REG	 TWI_THR; 	// Transmit Holding Register +	AT91_REG	 Reserved1[50]; 	// +	AT91_REG	 TWI_RPR; 	// Receive Pointer Register +	AT91_REG	 TWI_RCR; 	// Receive Counter Register +	AT91_REG	 TWI_TPR; 	// Transmit Pointer Register +	AT91_REG	 TWI_TCR; 	// Transmit Counter Register +	AT91_REG	 TWI_RNPR; 	// Receive Next Pointer Register +	AT91_REG	 TWI_RNCR; 	// Receive Next Counter Register +	AT91_REG	 TWI_TNPR; 	// Transmit Next Pointer Register +	AT91_REG	 TWI_TNCR; 	// Transmit Next Counter Register +	AT91_REG	 TWI_PTCR; 	// PDC Transfer Control Register +	AT91_REG	 TWI_PTSR; 	// PDC Transfer Status Register +} AT91S_TWI, *AT91PS_TWI; + +#endif + +// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- +#define AT91C_TWI_START       ( 0x1 <<  0) // (TWI) Send a START Condition +#define AT91C_TWI_STOP        ( 0x1 <<  1) // (TWI) Send a STOP Condition +#define AT91C_TWI_MSEN        ( 0x1 <<  2) // (TWI) TWI Master Transfer Enabled +#define AT91C_TWI_MSDIS       ( 0x1 <<  3) // (TWI) TWI Master Transfer Disabled +#define AT91C_TWI_SVEN        ( 0x1 <<  4) // (TWI) TWI Slave Transfer Enabled +#define AT91C_TWI_SVDIS       ( 0x1 <<  5) // (TWI) TWI Slave Transfer Disabled +#define AT91C_TWI_SWRST       ( 0x1 <<  7) // (TWI) Software Reset +// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- +#define AT91C_TWI_IADRSZ      ( 0x3 <<  8) // (TWI) Internal Device Address Size +#define 	AT91C_TWI_IADRSZ_NO                   ( 0x0 <<  8) // (TWI) No internal device address +#define 	AT91C_TWI_IADRSZ_1_BYTE               ( 0x1 <<  8) // (TWI) One-byte internal device address +#define 	AT91C_TWI_IADRSZ_2_BYTE               ( 0x2 <<  8) // (TWI) Two-byte internal device address +#define 	AT91C_TWI_IADRSZ_3_BYTE               ( 0x3 <<  8) // (TWI) Three-byte internal device address +#define AT91C_TWI_MREAD       ( 0x1 << 12) // (TWI) Master Read Direction +#define AT91C_TWI_DADR        ( 0x7F <<  6) // (TWI) Device Address +// -------- TWI_SMR : (TWI Offset: 0x8) TWI Slave Mode Register -------- +#define AT91C_TWI_SADR        ( 0x7F << 16) // (TWI) Slave Device Address +// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- +#define AT91C_TWI_CLDIV       ( 0xFF <<  0) // (TWI) Clock Low Divider +#define AT91C_TWI_CHDIV       ( 0xFF <<  8) // (TWI) Clock High Divider +#define AT91C_TWI_CKDIV       ( 0x7 << 16) // (TWI) Clock Divider +// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- +#define AT91C_TWI_TXCOMP      ( 0x1 <<  0) // (TWI) Transmission Completed +#define AT91C_TWI_RXRDY       ( 0x1 <<  1) // (TWI) Receive holding register ReaDY +#define AT91C_TWI_TXRDY       ( 0x1 <<  2) // (TWI) Transmit holding register ReaDY +#define AT91C_TWI_SVREAD      ( 0x1 <<  3) // (TWI) Slave Read +#define AT91C_TWI_SVACC       ( 0x1 <<  4) // (TWI) Slave Access +#define AT91C_TWI_GCACC       ( 0x1 <<  5) // (TWI) General Call Access +#define AT91C_TWI_OVRE        ( 0x1 <<  6) // (TWI) Overrun Error +#define AT91C_TWI_UNRE        ( 0x1 <<  7) // (TWI) Underrun Error +#define AT91C_TWI_NACK        ( 0x1 <<  8) // (TWI) Not Acknowledged +#define AT91C_TWI_ARBLST      ( 0x1 <<  9) // (TWI) Arbitration Lost +// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- +// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- +// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- + +/* +    i2c Support for Atmel's AT91RM9200 Two-Wire Interface + +    (c) Rick Bronson + +    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., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef AT91_I2C_H +#define AT91_I2C_H + +#define AT91C_TWI_CLOCK		100000 +#define AT91C_TWI_SCLOCK	(10 * AT91C_MASTER_CLOCK / AT91C_TWI_CLOCK) +#define AT91C_TWI_CKDIV1	(2 << 16)	/* TWI clock divider.  NOTE: see Errata #22 */ + +#if (AT91C_TWI_SCLOCK % 10) >= 5 +#define AT91C_TWI_CLDIV2 ((AT91C_TWI_SCLOCK / 10) - 5) +#else +#define AT91C_TWI_CLDIV2 ((AT91C_TWI_SCLOCK / 10) - 6) +#endif +#define AT91C_TWI_CLDIV3 ((AT91C_TWI_CLDIV2 + (4 - AT91C_TWI_CLDIV2 % 4)) >> 2) + +#define AT91C_EEPROM_I2C_ADDRESS        (0x50 << 16) + +#endif +#endif diff --git a/include/configs/cmc_pu2.h b/include/configs/cmc_pu2.h new file mode 100644 index 000000000..03f5dde8e --- /dev/null +++ b/include/configs/cmc_pu2.h @@ -0,0 +1,225 @@ +/* + * Rick Bronson <rick@efn.org> + * + * Configuation settings for the AT91RM9200DK board. + * + * 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 + +/* + * If we are developing, we might want to start armboot from ram + * so we MUST NOT initialize critical regs like mem-timing ... + */ +#define CONFIG_INIT_CRITICAL		/* undef for developing */ + +/* ARM asynchronous clock */ +#define AT91C_MAIN_CLOCK	179712000	/* from 18.432 MHz crystal (18432000 / 4 * 39) */ +#define AT91C_MASTER_CLOCK	59904000	/* peripheral clock (AT91C_MASTER_CLOCK / 3) */ +/* #define AT91C_MASTER_CLOCK	44928000 */	/* peripheral clock (AT91C_MASTER_CLOCK / 4) */ + +#define AT91_SLOW_CLOCK		32768	/* slow clock */ + +#define CONFIG_AT91RM9200DK	1	/* on an AT91RM9200DK Board	 */ +#define CONFIG_CMC_PU2	1		/* on an CMC_PU2 Board	 */ +#undef CONFIG_USE_IRQ			/* we don't need IRQ/FIQ stuff */ +#define CONFIG_CMDLINE_TAG	1	/* enable passing of ATAGs	*/ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG	1 + +/* define this to include the functionality of boot.bin in u-boot */ +#undef CONFIG_BOOTBINFUNC + +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN	(CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE	128	/* size in bytes reserved for initial data */ + +#define CONFIG_BAUDRATE 9600 + +#define CFG_AT91C_BRGR_DIVISOR	390	/* hardcode so no __divsi3 : AT91C_MASTER_CLOCK /(baudrate * 16) */ + +/* + * Hardware drivers + */ + +/* define one of these to choose the DBGU, USART0  or USART1 as console */ +#undef CONFIG_DBGU +#undef CONFIG_USART0 +#define CONFIG_USART1 + +#undef	CONFIG_HWFLOW			/* don't include RTS/CTS flow control support	*/ + +#undef	CONFIG_MODEM_SUPPORT		/* disable modem initialization stuff */ + +#define CONFIG_HARD_I2C + +#ifdef CONFIG_HARD_I2C +#define CFG_I2C_SPEED 0 /* not used */ +#define CFG_I2C_SLAVE 0 /* not used */ +#define CONFIG_RTC_RS5C372A	/* RICOH I2C RTC */ +#define CFG_I2C_RTC_ADDR 0x32 +#define CFG_I2C_EEPROM_ADDR 0x50 +#define CFG_I2C_EEPROM_ADDR_LEN 1 +#define CFG_I2C_EEPROM_ADDR_OVERFLOW +#endif + +#define CONFIG_BOOTDELAY      3 +/* #define CONFIG_ENV_OVERWRITE	1 */ + +#ifdef CONFIG_HARD_I2C +#define CONFIG_COMMANDS		\ +		       ((CONFIG_CMD_DFL | \ +			CFG_CMD_I2C | \ +			CFG_CMD_EEPROM | \ +			CFG_CMD_DHCP ) & \ +		      ~(CFG_CMD_BDI | \ +			CFG_CMD_IMI | \ +			CFG_CMD_AUTOSCRIPT | \ +			CFG_CMD_FPGA | \ +			CFG_CMD_MISC | \ +			CFG_CMD_LOADS )) +#else +#define CONFIG_COMMANDS		\ +		       ((CONFIG_CMD_DFL | \ +			CFG_CMD_DHCP ) & \ +		      ~(CFG_CMD_BDI | \ +			CFG_CMD_IMI | \ +			CFG_CMD_AUTOSCRIPT | \ +			CFG_CMD_FPGA | \ +			CFG_CMD_MISC | \ +			CFG_CMD_LOADS )) +#endif + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include <cmd_confdefs.h> + +#define CFG_MAX_NAND_DEVICE	1	/* Max number of NAND devices		*/ +#define SECTORSIZE 512 + +#define ADDR_COLUMN 1 +#define ADDR_PAGE 2 +#define ADDR_COLUMN_PAGE 3 + +#define NAND_ChipID_UNKNOWN	0x00 +#define NAND_MAX_FLOORS 1 +#define NAND_MAX_CHIPS 1 + +#define AT91_SMART_MEDIA_ALE (1 << 22)	/* our ALE is AD22 */ +#define AT91_SMART_MEDIA_CLE (1 << 21)	/* our CLE is AD21 */ + +#define NAND_DISABLE_CE(nand) do { *AT91C_PIOC_SODR = AT91C_PIO_PC0;} while(0) +#define NAND_ENABLE_CE(nand) do { *AT91C_PIOC_CODR = AT91C_PIO_PC0;} while(0) + +#define NAND_WAIT_READY(nand) while (!(*AT91C_PIOC_PDSR & AT91C_PIO_PC2)) + +#define WRITE_NAND_COMMAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr | AT91_SMART_MEDIA_CLE) = (__u8)(d); } while(0) +#define WRITE_NAND_ADDRESS(d, adr) do{ *(volatile __u8 *)((unsigned long)adr | AT91_SMART_MEDIA_ALE) = (__u8)(d); } while(0) +#define WRITE_NAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)d; } while(0) +#define READ_NAND(adr) ((volatile unsigned char)(*(volatile __u8 *)(unsigned long)adr)) +/* the following are NOP's in our implementation */ +#define NAND_CTL_CLRALE(nandptr) +#define NAND_CTL_SETALE(nandptr) +#define NAND_CTL_CLRCLE(nandptr) +#define NAND_CTL_SETCLE(nandptr) + +#define CONFIG_NR_DRAM_BANKS 1 +#define PHYS_SDRAM 0x20000000 +#define PHYS_SDRAM_SIZE 0x2000000  /* 32 megs */ + +#define CFG_MEMTEST_START		PHYS_SDRAM +#define CFG_MEMTEST_END			CFG_MEMTEST_START + PHYS_SDRAM_SIZE - 262144 + +#define CONFIG_DRIVER_ETHER +#define CONFIG_NET_RETRY_COUNT		20 +#define CONFIG_AT91C_USE_RMII + +#define CONFIG_HAS_DATAFLASH		1 +#define CFG_SPI_WRITE_TOUT		(5*CFG_HZ) +#define CFG_MAX_DATAFLASH_BANKS 	2 +#define CFG_MAX_DATAFLASH_PAGES 	16384 +#define CFG_DATAFLASH_LOGIC_ADDR_CS0	0xC0000000	/* Logical adress for CS0 */ +#define CFG_DATAFLASH_LOGIC_ADDR_CS3	0xD0000000	/* Logical adress for CS3 */ + +#define PHYS_FLASH_1			0x10000000 +#define PHYS_FLASH_SIZE			0x200000  /* 2 megs main flash */ +#define CFG_FLASH_BASE			PHYS_FLASH_1 +#define CFG_MAX_FLASH_BANKS		1 +#define CFG_MAX_FLASH_SECT		256 +#define CFG_FLASH_ERASE_TOUT		(2*CFG_HZ) /* Timeout for Flash Erase */ +#define CFG_FLASH_WRITE_TOUT		(2*CFG_HZ) /* Timeout for Flash Write */ + +#undef	CFG_ENV_IS_IN_DATAFLASH + +#ifdef CFG_ENV_IS_IN_DATAFLASH +#define CFG_ENV_OFFSET			0x20000 +#define CFG_ENV_ADDR			(CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET) +#define CFG_ENV_SIZE			0x2000  /* 0x8000 */ +#else +#define CFG_ENV_IS_IN_FLASH		1 +#define CFG_ENV_ADDR			(PHYS_FLASH_1 + 0xe000)  /* 0x10000 */ +#define CFG_ENV_SIZE			0x2000  /* 0x8000 */ +#endif + + +#define CFG_LOAD_ADDR		0x21000000  /* default load address */ + +#define CFG_BOOT_SIZE		0x6000 /* 24 KBytes */ +#define CFG_U_BOOT_BASE		(PHYS_FLASH_1 + 0x10000) +#define CFG_U_BOOT_SIZE		0x10000 /* 64 KBytes */ + +#define CFG_BAUDRATE_TABLE	{115200 , 19200, 38400, 57600, 9600 } + +#define CFG_PROMPT		"U-Boot> "	/* Monitor Command Prompt */ +#define CFG_CBSIZE		256		/* Console I/O Buffer Size */ +#define CFG_MAXARGS		16		/* max number of command args */ +#define CFG_PBSIZE		(CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ + +#ifndef __ASSEMBLY__ +/*----------------------------------------------------------------------- + * Board specific extension for bd_info + * + * This structure is embedded in the global bd_info (bd_t) structure + * and can be used by the board specific code (eg board/...) + */ + +struct bd_info_ext { +	/* helper variable for board environment handling +	 * +	 * env_crc_valid == 0    =>   uninitialised +	 * env_crc_valid  > 0    =>   environment crc in flash is valid +	 * env_crc_valid  < 0    =>   environment crc in flash is invalid +	 */ +	int env_crc_valid; +}; +#endif + +#define CFG_HZ AT91C_MASTER_CLOCK/2	/* AT91C_TC0_CMR is implicitly set to */ +					/* AT91C_TC_TIMER_DIV1_CLOCK */ + +#define CONFIG_STACKSIZE	(32*1024)	/* regular stack */ + +#ifdef CONFIG_USE_IRQ +#error CONFIG_USE_IRQ not supported +#endif + +#endif |