diff options
| -rw-r--r-- | README | 40 | ||||
| -rw-r--r-- | board/delta/delta.c | 67 | ||||
| -rw-r--r-- | board/delta/lowlevel_init.S | 245 | ||||
| -rw-r--r-- | board/delta/nand.c | 10 | ||||
| -rw-r--r-- | common/env_nand.c | 113 | ||||
| -rw-r--r-- | cpu/pxa/i2c.c | 19 | ||||
| -rw-r--r-- | cpu/pxa/start.S | 17 | ||||
| -rw-r--r-- | include/asm-arm/arch-pxa/pxa-regs.h | 119 | ||||
| -rw-r--r-- | include/configs/delta.h | 127 | ||||
| -rw-r--r-- | include/da9030.h | 106 | ||||
| -rw-r--r-- | include/environment.h | 12 | 
11 files changed, 449 insertions, 426 deletions
| @@ -246,6 +246,7 @@ The following options need to be configured:  		CONFIG_SA1110  		CONFIG_ARM7  		CONFIG_PXA250 +		CONFIG_CPU_MONAHANS  		MicroBlaze based CPUs:  		---------------------- @@ -304,13 +305,13 @@ The following options need to be configured:  		-----------------  		CONFIG_ARMADILLO,	CONFIG_AT91RM9200DK,	CONFIG_CERF250, -		CONFIG_CSB637,		CONFIG_DNP1110, 	CONFIG_EP7312, -		CONFIG_H2_OMAP1610,	CONFIG_HHP_CRADLE,	CONFIG_IMPA7, -		CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610, CONFIG_KB9202, -		CONFIG_LART,		CONFIG_LPD7A400,	CONFIG_LUBBOCK, -		CONFIG_OSK_OMAP5912,	CONFIG_OMAP2420H4,	CONFIG_SHANNON, -		CONFIG_P2_OMAP730,	CONFIG_SMDK2400,	CONFIG_SMDK2410, -		CONFIG_TRAB,		CONFIG_VCMA9 +		CONFIG_CSB637,		CONFIG_DELTA,		CONFIG_DNP1110, +	 	CONFIG_EP7312,		CONFIG_H2_OMAP1610,	CONFIG_HHP_CRADLE, +		CONFIG_IMPA7,		CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610,  +		CONFIG_KB9202,		CONFIG_LART,		CONFIG_LPD7A400, +		CONFIG_LUBBOCK,		CONFIG_OSK_OMAP5912,	CONFIG_OMAP2420H4, +		CONFIG_SHANNON,		CONFIG_P2_OMAP730,	CONFIG_SMDK2400, +		CONFIG_SMDK2410,	CONFIG_TRAB,		CONFIG_VCMA9  		MicroBlaze based boards:  		------------------------ @@ -379,6 +380,20 @@ The following options need to be configured:  		that this requires a (stable) reference clock (32 kHz  		RTC clock or CFG_8XX_XIN) +- Intel Monahans options: +		CFG_MONAHANS_RUN_MODE_OSC_RATIO + +		Defines the Monahans run mode to oscillator +		ratio. Valid values are 8, 16, 24, 31. The core +		frequency is this value multiplied by 13 MHz. + +		CFG_MONAHANS_TURBO_RUN_MODE_RATIO +		 +		Defines the Monahans turbo mode to oscillator +		ratio. Valid values are 1 (default if undefined) and +		2. The core frequency as calculated above is multiplied  +		by this value. +		  - Linux Kernel Interface:  		CONFIG_CLOCKS_IN_MHZ @@ -1969,6 +1984,17 @@ to save the current settings.  	  These two #defines specify the offset and size of the environment  	  area within the first NAND device. +	- CFG_ENV_OFFSET_REDUND + +	  This setting describes a second storage area of CFG_ENV_SIZE +	  size used to hold a redundant copy of the environment data, +	  so that there is a valid backup copy in case there is a +	  power failure during a "saveenv" operation. + +	Note: CFG_ENV_OFFSET and CFG_ENV_OFFSET_REDUND must be aligned +	to a block boundary, and CFG_ENV_SIZE must be a multiple of +	the NAND devices block size. +  - CFG_SPI_INIT_OFFSET  	Defines offset to the initial SPI buffer area in DPRAM. The diff --git a/board/delta/delta.c b/board/delta/delta.c index 3ffcc2af9..6ef7e2fc2 100644 --- a/board/delta/delta.c +++ b/board/delta/delta.c @@ -26,9 +26,13 @@   */  #include <common.h> +#include <i2c.h> +#include <da9030.h> +#include <asm/arch/pxa-regs.h>  /* ------------------------------------------------------------------------- */ +static void init_DA9030(void);  /*   * Miscelaneous platform dependent initialisations @@ -54,6 +58,7 @@ int board_late_init(void)  {  	setenv("stdout", "serial");  	setenv("stderr", "serial"); +	init_DA9030();  	return 0;  } @@ -73,3 +78,65 @@ int dram_init (void)  	return 0;  } + +/* initialize the DA9030 Power Controller */ +static void init_DA9030() +{ +	uchar addr = (uchar) DA9030_I2C_ADDR, val = 0; + +	/* setup I2C GPIO's */ +	GPIO32 = 0x801;		/* SCL = Alt. Fkt. 1 */ +	GPIO33 = 0x801;		/* SDA = Alt. Fkt. 1 */ + +	/* rising Edge on EXTON */ +	GPIO17 = 0x8800; +	udelay(5); +	GPIO17 = 0xc800; +	udelay(100000);		/* wait for DA9030 */ + +	/* reset the watchdog and go active (0xec) */ +	val = (SYS_CONTROL_A_HWRES_ENABLE | +	       (0x6<<4) | +	       SYS_CONTROL_A_WDOG_ACTION | +	       SYS_CONTROL_A_WATCHDOG); + +	i2c_reg_write(addr, SYS_CONTROL_A, val); + +	i2c_reg_write(addr, REG_CONTROL_1_97, 0xfd); /* disable LDO1, enable LDO6 */ +	i2c_reg_write(addr, LDO2_3, 0xd1);	/* LDO2 =1,9V, LDO3=3,1V */ +	i2c_reg_write(addr, LDO4_5, 0xcc);	/* LDO2 =1,9V, LDO3=3,1V */ +	i2c_reg_write(addr, LDO6_SIMCP, 0x3e); 	/* LDO6=3,2V, SIMCP = 5V support */ +	i2c_reg_write(addr, LDO7_8, 0xc9);	/* LDO7=2,7V, LDO8=3,0V */ +	i2c_reg_write(addr, LDO9_12, 0xec);	/* LDO9=3,0V, LDO12=3,2V */ +	i2c_reg_write(addr, BUCK, 0x0c); 	/* Buck=1.2V */ +	i2c_reg_write(addr, REG_CONTROL_2_98, 0x7f); /* All LDO'S on 8,9,10,11,12,14 */ +	i2c_reg_write(addr, LDO_10_11, 0xcc); 	/* LDO10=3.0V  LDO11=3.0V */ +	i2c_reg_write(addr, LDO_15, 0xae);	/* LDO15=1.8V, dislock first 3bit */ +	i2c_reg_write(addr, LDO_14_16, 0x05); 	/* LDO14=2.8V, LDO16=NB */ +	i2c_reg_write(addr, LDO_18_19, 0x9c);	/* LDO18=3.0V, LDO19=2.7V */ +	i2c_reg_write(addr, LDO_17_SIMCP0, 0x2c); /* LDO17=3.0V, SIMCP=3V support */ +	i2c_reg_write(addr, BUCK2_DVC1, 0x9a);	/* Buck2=1.5V plus Update support of 520 MHz */ +	i2c_reg_write(addr, REG_CONTROL_2_18, 0x43); /* Ball on */ +	i2c_reg_write(addr, MISC_CONTROLB, 0x08); /* session valid enable */ +	i2c_reg_write(addr, USBPUMP, 0xc1);	/* start pump, ignore HW signals */ + +	val = i2c_reg_read(addr, STATUS); +	if(val & STATUS_CHDET) +		printf("Charger detected, turning on LED.\n"); +	else { +		printf("No charger detetected.\n"); +		/* undervoltage? print error and power down */ +	} +} + + +#if 0 +/* reset the DA9030 watchdog */ +void hw_watchdog_reset(void) +{ +	uchar addr = (uchar) DA9030_I2C_ADDR, val = 0; +	val = i2c_reg_read(addr, SYS_CONTROL_A); +	val |= SYS_CONTROL_A_WATCHDOG; +	i2c_reg_write(addr, SYS_CONTROL_A, val); +} +#endif diff --git a/board/delta/lowlevel_init.S b/board/delta/lowlevel_init.S index 498cf7f60..f059db505 100644 --- a/board/delta/lowlevel_init.S +++ b/board/delta/lowlevel_init.S @@ -1,10 +1,5 @@  /* - * Most of this taken from Redboot hal_platform_setup.h with cleanup - * - * NOTE: I haven't clean this up considerably, just enough to get it - * running. See hal_platform_setup.h for the source. See - * board/cradle/lowlevel_init.S for another PXA250 setup that is - * much cleaner. + * (C) Copyright 2006 DENX Software Engineering   *   * See file CREDITS for list of people who contributed to this   * project. @@ -31,14 +26,6 @@  DRAM_SIZE:  .long   CFG_DRAM_SIZE -/* wait for coprocessor write complete */ -.macro CPWAIT reg -	mrc	p15,0,\reg,c2,c0,0 -	mov	\reg,\reg -	sub	pc,pc,#4 -.endm - -  .macro wait time  	ldr		r2, =OSCR  	mov		r3, #0 @@ -49,13 +36,9 @@ DRAM_SIZE:  .long   CFG_DRAM_SIZE  	bls		0b  .endm -/* - *	Memory setup - */ -  .globl lowlevel_init  lowlevel_init: -	/* Set up GPIO pins first ----------------------------------------- */ +	/* Set up GPIO pins first */  	mov	 r10, lr  	/*  Configure GPIO  Pins 97, 98 UART1 / altern. Fkt. 1 */ @@ -73,22 +56,7 @@ lowlevel_init:  	bic		r1, r1, #0x80000000  	str		r1, [r0] -	/* ---------------------------------------------------------------- */ -	/* Enable memory interface					    */ -	/* ---------------------------------------------------------------- */ - -	/* ---------------------------------------------------------------- */ -	/* Step 1: Wait for at least 200 microsedonds to allow internal	    */ -	/*	   clocks to settle. Only necessary after hard reset...	    */ -	/*	   FIXME: can be optimized later			    */ -	/* ---------------------------------------------------------------- */ -;	wait #300 -  mem_init: - -#define NEW_SDRAM_INIT 1 -#ifdef NEW_SDRAM_INIT -  	/* Configure ACCR Register - enable DMEMC Clock at 260 / 2 MHz */  	ldr		r0, =ACCR  	ldr		r1, [r0] @@ -99,7 +67,7 @@ mem_init:  	/* 2. Programm MDCNFG, leaving DMCEN de-asserted */  	ldr		r0, =MDCNFG  	ldr		r1, =(MDCNFG_DMAP | MDCNFG_DTYPE | MDCNFG_DTC_2 | MDCNFG_DCSE0 | MDCNFG_DRAC_13) -	/*	ldr		r1, =0x80000403 */ +	/* ldr		r1, =0x80000403 */  	str		r1, [r0]  	ldr		r1, [r0]	/* delay until written */ @@ -140,121 +108,6 @@ mem_init:  	orr		r1, r1, #MDCNFG_DMCEN  	str		r1, [r0] - -#else /* NEW_SDRAM_INIT */ - -	/* configure the MEMCLKCFG register */ -	ldr		r1, =MEMCLKCFG -	ldr		r2, =0x00010001 -	str		r2, [r1]	     @ WRITE -	ldr		r2, [r1]	     @ DELAY UNTIL WRITTEN - -	/* set CSADRCFG[0] to data flash SRAM mode */ -	ldr		r1, =CSADRCFG0 -	ldr		r2, =0x00320809 -	str		r2, [r1]	     @ WRITE -	ldr		r2, [r1]	     @ DELAY UNTIL WRITTEN - -	/* set CSADRCFG[1] to data flash SRAM mode */ -	ldr		r1, =CSADRCFG1 -	ldr		r2, =0x00320809 -	str		r2, [r1]	     @ WRITE -	ldr		r2, [r1]	     @ DELAY UNTIL WRITTEN - -	/* set MSC 0 register for SRAM memory */ -	ldr		r1, =MSC0 -	ldr		r2, =0x11191119 -	str		r2, [r1]	     @ WRITE -	ldr		r2, [r1]	     @ DELAY UNTIL WRITTEN - -	/* set CSADRCFG[2] to data flash SRAM mode */ -	ldr		r1, =CSADRCFG2 -	ldr		r2, =0x00320809 -	str		r2, [r1]	     @ WRITE -	ldr		r2, [r1]	     @ DELAY UNTIL WRITTEN - -	/* set CSADRCFG[3] to VLIO mode */ -	ldr		r1, =CSADRCFG3 -	ldr		r2, =0x0032080B -	str		r2, [r1]	     @ WRITE -	ldr		r2, [r1]	     @ DELAY UNTIL WRITTEN - -	/* set MSC 1 register for VLIO memory */ -	ldr		r1, =MSC1 -	ldr		r2, =0x123C1119 -	str		r2, [r1]	     @ WRITE -	ldr		r2, [r1]	     @ DELAY UNTIL WRITTEN - -#if 0 -	/* This does not work in Zylonite. -SC */ -	ldr		r0, =0x15fffff0 -	ldr		r1, =0xb10b -	str		r1, [r0] -	str		r1, [r0, #4] -#endif - -	/* Configure ACCR Register */ -	ldr		r0, =ACCR		@ ACCR -	ldr		r1, =0x0180b108 -	str		r1, [r0] -	ldr		r1, [r0] - -	/* Configure MDCNFG Register */ -	ldr		r0, =MDCNFG		@ MDCNFG -	ldr		r1, =0x403 -	str		r1, [r0] -	ldr		r1, [r0] - -	/* Perform Resistive Compensation by configuring RCOMP register */ -	ldr		r1, =RCOMP		@ RCOMP -	ldr		r2, =0x000000ff -	str		r2, [r1] -	ldr		r2, [r1] - -	/* Configure MDMRS Register for SDCS0 */ -	ldr		r1, =MDMRS		@ MDMRS -	ldr		r2, =0x60000023 -	ldr		r3, [r1] -	orr		r2, r2, r3 -	str		r2, [r1] -	ldr		r2, [r1] - -	/* Configure MDMRS Register for SDCS1 */ -	ldr		r1, =MDMRS		@ MDMRS -	ldr		r2, =0xa0000023 -	ldr		r3, [r1] -	orr		r2, r2, r3 -	str		r2, [r1] -	ldr		r2, [r1] - -	/* Configure MDREFR */ -	ldr		r1, =MDREFR		@ MDREFR -	ldr		r2, =0x00000006 -	str		r2, [r1] -	ldr		r2, [r1] - -	/* Configure EMPI */ -	ldr		r1, =EMPI		@ EMPI -	ldr		r2, =0x80000000 -	str		r2, [r1] -	ldr		r2, [r1] - -	/* Hardware DDR Read-Strobe Delay Calibration */ -	ldr		r0, =DDR_HCAL		@ DDR_HCAL -	ldr		r1, =0x803ffc07	    @ the offset is correct? -SC -	str		r1, [r0] -	wait		#5 -	ldr		r1, [r0] - -	/* Here we assume the hardware calibration alwasy be successful. -SC */ -	/* Set DMCEN bit in MDCNFG Register */ -	ldr		r0, =MDCNFG		@ MDCNFG -	ldr		r1, [r0] -	orr		r1, r1, #0x40000000	@ enable SDRAM for Normal Access -	str		r1, [r0] - -#endif /* NEW_SDRAM_INIT */ -  #ifndef CFG_SKIP_DRAM_SCRUB  	/* scrub/init SDRAM if enabled/present */  	ldr	r8, =CFG_DRAM_BASE	/* base address of SDRAM (CFG_DRAM_BASE) */ @@ -290,96 +143,4 @@ mem_init:  	mcr	p14,0,r0,c10,c0,0  /* dcsr */  endlowlevel_init: -  	mov	pc, lr - - -/* -@******************************************************************************** -@ DDR calibration -@ -@  This function is used to calibrate DQS delay lines. -@ Monahans supports three ways to do it. One is software -@ calibration. Two is hardware calibration. Three is hybrid -@ calibration. -@ -@ TBD -@ -SC -ddr_calibration: - -	@ Case 1:	Write the correct delay value once -	@ Configure DDR_SCAL Register -	ldr		r0, =DDR_SCAL		@ DDR_SCAL -q	ldr		r1, =0xaf2f2f2f -	str		r1, [r0] -	ldr		r1, [r0] -*/ -/*	@ Case 2:	Software Calibration -	@ Write test pattern to memory -	ldr		r5, =0x0faf0faf		@ Data Pattern -	ldr		r4, =0xa0000000		@ DDR ram -	str		r5, [r4] - -	mov		r1, =0x0		@ delay count -	mov		r6, =0x0 -	mov		r7, =0x0 -ddr_loop1: -	add		r1, r1, =0x1 -	cmp		r1, =0xf -	ble		end_loop -	mov		r3, r1 -	mov		r0, r1, lsl #30 -	orr		r3, r3, r0 -	mov		r0, r1, lsl #22 -	orr		r3, r3, r0 -	mov		r0, r1, lsl #14 -	orr		r3, r3, r0 -	orr		r3, r3, =0x80000000 -	ldr		r2, =DDR_SCAL -	str		r3, [r2] - -	ldr		r2, [r4] -	cmp		r2, r5 -	bne		ddr_loop1 -	mov		r6, r1 -ddr_loop2: -	add		r1, r1, =0x1 -	cmp		r1, =0xf -	ble		end_loop -	mov		r3, r1 -	mov		r0, r1, lsl #30 -	orr		r3, r3, r0 -	mov		r0, r1, lsl #22 -	orr		r3, r3, r0 -	mov		r0, r1, lsl #14 -	orr		r3, r3, r0 -	orr		r3, r3, =0x80000000 -	ldr		r2, =DDR_SCAL -	str		r3, [r2] - -	ldr		r2, [r4] -	cmp		r2, r5 -	be		ddr_loop2 -	mov		r7, r2 - -	add		r3, r6, r7 -	lsr		r3, r3, =0x1 -	mov		r0, r1, lsl #30 -	orr		r3, r3, r0 -	mov		r0, r1, lsl #22 -	orr		r3, r3, r0 -	mov		r0, r1, lsl #14 -	orr		r3, r3, r0 -	orr		r3, r3, =0x80000000 -	ldr		r2, =DDR_SCAL - -end_loop: - -	@ Case 3:	Hardware Calibratoin -	ldr		r0, =DDR_HCAL		@ DDR_HCAL -	ldr		r1, =0x803ffc07	    @ the offset is correct? -SC -	str		r1, [r0] -	wait		#5 -	ldr		r1, [r0] -	mov		pc, lr -*/ diff --git a/board/delta/nand.c b/board/delta/nand.c index c4df6e57e..5d2cd6585 100644 --- a/board/delta/nand.c +++ b/board/delta/nand.c @@ -293,11 +293,6 @@ static int dfc_wait(struct mtd_info *mtd, struct nand_chip *this, int state)  {  	unsigned long ndsr=0, event=0; -	/* mk@tbd set appropriate timeouts */ -	/* 	if (state == FL_ERASING) */ -	/* 		timeo = CFG_HZ * 400; */ -	/* 	else */ -	/* 		timeo = CFG_HZ * 20; */  	if(state == FL_WRITING) {  		event = NDSR_CS0_CMDD | NDSR_CS0_BBD;  	} else if(state == FL_ERASING) { @@ -563,13 +558,12 @@ void board_nand_init(struct nand_chip *nand)  	/* wait 10 us due to cmd buffer clear reset */ -	/* 	wait(10); */ +	/*	wait(10); */  	nand->hwcontrol = dfc_hwcontrol; -/* 	nand->dev_ready = dfc_device_ready; */ +/*	nand->dev_ready = dfc_device_ready; */  	nand->eccmode = NAND_ECC_SOFT; -	nand->chip_delay = NAND_DELAY_US;  	nand->options = NAND_BUSWIDTH_16;  	nand->waitfunc = dfc_wait;  	nand->read_byte = dfc_read_byte; diff --git a/common/env_nand.c b/common/env_nand.c index dd27f7b62..a6af74a75 100644 --- a/common/env_nand.c +++ b/common/env_nand.c @@ -36,21 +36,19 @@  #include <command.h>  #include <environment.h>  #include <linux/stddef.h> +#include <malloc.h>  #include <nand.h>  #if ((CONFIG_COMMANDS&(CFG_CMD_ENV|CFG_CMD_NAND)) == (CFG_CMD_ENV|CFG_CMD_NAND))  #define CMD_SAVEENV +#elif defined(CFG_ENV_OFFSET_REDUND) +#error Cannot use CFG_ENV_OFFSET_REDUND without CFG_CMD_ENV & CFG_CMD_NAND  #endif -#if defined(CFG_ENV_SIZE_REDUND) -#error CFG_ENV_SIZE_REDUND  not supported yet +#if defined(CFG_ENV_SIZE_REDUND) && (CFG_ENV_SIZE_REDUND != CFG_ENV_SIZE) +#error CFG_ENV_SIZE_REDUND should be the same as CFG_ENV_SIZE  #endif -#if defined(CFG_ENV_ADDR_REDUND) -#error CFG_ENV_ADDR_REDUND and CFG_ENV_IS_IN_NAND not supported yet -#endif - -  #ifdef CONFIG_INFERNO  #error CONFIG_INFERNO not supported yet  #endif @@ -99,7 +97,7 @@ int env_init(void)  {  	DECLARE_GLOBAL_DATA_PTR; -  	gd->env_addr  = (ulong)&default_environment[0]; +	gd->env_addr  = (ulong)&default_environment[0];  	gd->env_valid = 1;  	return (0); @@ -110,6 +108,43 @@ int env_init(void)   * The legacy NAND code saved the environment in the first NAND device i.e.,   * nand_dev_desc + 0. This is also the behaviour using the new NAND code.   */ +#ifdef CFG_ENV_OFFSET_REDUND +int saveenv(void) +{ +	ulong total; +	int ret = 0; + +	DECLARE_GLOBAL_DATA_PTR; + +	env_ptr->flags++; +	total = CFG_ENV_SIZE; + +	if(gd->env_valid == 1) { +		puts ("Erasing redundant Nand..."); +		if (nand_erase(&nand_info[0], +			       CFG_ENV_OFFSET_REDUND, CFG_ENV_SIZE)) +			return 1; +		puts ("Writing to redundant Nand... "); +		ret = nand_write(&nand_info[0], CFG_ENV_OFFSET_REDUND, &total, +				 (u_char*) env_ptr); +	} else { +		puts ("Erasing Nand..."); +		if (nand_erase(&nand_info[0], +			       CFG_ENV_OFFSET, CFG_ENV_SIZE)) +			return 1; + +		puts ("Writing to Nand... "); +		ret = nand_write(&nand_info[0], CFG_ENV_OFFSET, &total, +				 (u_char*) env_ptr); +	} +	if (ret || total != CFG_ENV_SIZE) +		return 1; + +	puts ("done\n"); +	gd->env_valid = (gd->env_valid == 2 ? 1 : 2); +	return ret; +} +#else /* ! CFG_ENV_OFFSET_REDUND */  int saveenv(void)  {  	ulong total; @@ -128,9 +163,65 @@ int saveenv(void)  	puts ("done\n");  	return ret;  } +#endif /* CFG_ENV_OFFSET_REDUND */  #endif /* CMD_SAVEENV */ +#ifdef CFG_ENV_OFFSET_REDUND +void env_relocate_spec (void) +{ +#if !defined(ENV_IS_EMBEDDED) +	ulong total; +	int crc1_ok = 0, crc2_ok = 0; +	env_t *tmp_env1, *tmp_env2; + +	DECLARE_GLOBAL_DATA_PTR; + +	total = CFG_ENV_SIZE; + +	tmp_env1 = (env_t *) malloc(CFG_ENV_SIZE); +	tmp_env2 = (env_t *) malloc(CFG_ENV_SIZE); + +	nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, +		  (u_char*) tmp_env1); +	nand_read(&nand_info[0], CFG_ENV_OFFSET_REDUND, &total, +		  (u_char*) tmp_env2); + +	crc1_ok = (crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc); +	crc2_ok = (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc); +	if(!crc1_ok && !crc2_ok) +		return use_default(); +	else if(crc1_ok && !crc2_ok) +		gd->env_valid = 1; +	else if(!crc1_ok && crc2_ok) +		gd->env_valid = 2; +	else { +		/* both ok - check serial */ +		if(tmp_env1->flags == 255 && tmp_env2->flags == 0) +			gd->env_valid = 2; +		else if(tmp_env2->flags == 255 && tmp_env1->flags == 0) +			gd->env_valid = 1; +		else if(tmp_env1->flags > tmp_env2->flags) +			gd->env_valid = 1; +		else if(tmp_env2->flags > tmp_env1->flags) +			gd->env_valid = 2; +		else /* flags are equal - almost impossible */ +			gd->env_valid = 1; + +	} + +	free(env_ptr); +	if(gd->env_valid == 1) { +		env_ptr = tmp_env1; +		free(tmp_env2); +	} else { +		env_ptr = tmp_env2; +		free(tmp_env1); +	} + +#endif /* ! ENV_IS_EMBEDDED */ +} +#else /* ! CFG_ENV_OFFSET_REDUND */  /*   * The legacy NAND code saved the environment in the first NAND device i.e.,   * nand_dev_desc + 0. This is also the behaviour using the new NAND code. @@ -149,8 +240,8 @@ void env_relocate_spec (void)  	if (crc32(0, env_ptr->data, ENV_SIZE) != env_ptr->crc)  		return use_default();  #endif /* ! ENV_IS_EMBEDDED */ -  } +#endif /* CFG_ENV_OFFSET_REDUND */  static void use_default()  { @@ -158,7 +249,7 @@ static void use_default()  	puts ("*** Warning - bad CRC or NAND, using default environment\n\n"); -  	if (default_environment_size > CFG_ENV_SIZE){ +	if (default_environment_size > CFG_ENV_SIZE){  		puts ("*** Error - default environment is too large\n\n");  		return;  	} @@ -168,7 +259,7 @@ static void use_default()  			default_environment,  			default_environment_size);  	env_ptr->crc = crc32(0, env_ptr->data, ENV_SIZE); - 	gd->env_valid = 1; +	gd->env_valid = 1;  } diff --git a/cpu/pxa/i2c.c b/cpu/pxa/i2c.c index b6155b137..722d94947 100644 --- a/cpu/pxa/i2c.c +++ b/cpu/pxa/i2c.c @@ -47,7 +47,13 @@  /*#define	DEBUG_I2C 	1	/###* activate local debugging output  */  #define I2C_PXA_SLAVE_ADDR	0x1	/* slave pxa unit address           */ -#define I2C_ICR_INIT		(ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE) + +#if (CFG_I2C_SPEED == 400000) +#define I2C_ICR_INIT	(ICR_FM | ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE) +#else +#define I2C_ICR_INIT	(ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE) +#endif +  #define I2C_ISR_INIT		0x7FF  #ifdef DEBUG_I2C @@ -91,7 +97,11 @@ static void i2c_reset( void )  	ICR |= ICR_UR;			/* reset the unit */  	udelay(100);  	ICR &= ~ICR_IUE;		/* disable unit */ +#ifdef CONFIG_CPU_MONAHANS +	CKENB |= (CKENB_4_I2C); /*  | CKENB_1_PWM1 | CKENB_0_PWM0); */ +#else /* CONFIG_CPU_MONAHANS */  	CKEN |= CKEN14_I2C;		/* set the global I2C clock on */ +#endif  	ISAR = I2C_PXA_SLAVE_ADDR;	/* set our slave address */  	ICR = I2C_ICR_INIT;		/* set control register values */  	ISR = I2C_ISR_INIT;		/* set clear interrupt bits */ @@ -104,9 +114,8 @@ static void i2c_reset( void )   * i2c_isr_set_cleared: - wait until certain bits of the I2C status register   *	                  are set and cleared   * - * @return: 0 in case of success, 1 means timeout (no match within 10 ms). + * @return: 1 in case of success, 0 means timeout (no match within 10 ms).   */ -  static int i2c_isr_set_cleared( unsigned long set_mask, unsigned long cleared_mask )  {  	int timeout = 10000; @@ -360,9 +369,9 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)  		msg.data      = 0x00;  		if ((ret=i2c_transfer(&msg))) return -1; -		*(buffer++) = msg.data; - +		*buffer = msg.data;  		PRINTD(("i2c_read: reading byte (0x%08x)=0x%02x\n",(unsigned int)buffer,*buffer)); +		buffer++;  	} diff --git a/cpu/pxa/start.S b/cpu/pxa/start.S index 9541c9b2b..ffaa30fdc 100644 --- a/cpu/pxa/start.S +++ b/cpu/pxa/start.S @@ -190,6 +190,14 @@ OSTIMER_BASE:	.word	0x40a00000  #define OIER	0x1C  /* Clock Manager Registers						    */ +#ifdef CONFIG_CPU_MONAHANS +# ifndef CFG_MONAHANS_RUN_MODE_OSC_RATIO +#  error "You have to define CFG_MONAHANS_RUN_MODE_OSC_RATIO!!" +# endif +# ifndef CFG_MONAHANS_TURBO_RUN_MODE_RATIO +#  define CFG_MONAHANS_TURBO_RUN_MODE_RATIO 0x1 +# endif +#else /* ! CONFIG_CPU_MONAHANS */  #ifdef CFG_CPUSPEED  CC_BASE:	.word	0x41300000  #define CCCR	0x00 @@ -197,6 +205,7 @@ cpuspeed:	.word	CFG_CPUSPEED  #else  #error "You have to define CFG_CPUSPEED!!"  #endif +#endif /* CONFIG_CPU_MONAHANS */  	/* takes care the CP15 update has taken place */  	.macro CPWAIT reg @@ -233,9 +242,13 @@ cpu_init_crit:  	str	r2, [r1]  #endif -#ifndef CONFIG_CPU_MONAHANS +	/* set clock speed */ +#ifdef CONFIG_CPU_MONAHANS +	ldr	r0, =ACCR +	ldr	r1, =(((CFG_MONAHANS_TURBO_RUN_MODE_RATIO<<8) & ACCR_XN_MASK) | (CFG_MONAHANS_RUN_MODE_OSC_RATIO & ACCR_XL_MASK)) +	str	r1, [r0] +#else /* ! CONFIG_CPU_MONAHANS */  #ifdef CFG_CPUSPEED -	/* set clock speed tbd@mk: required for monahans? */  	ldr	r0, CC_BASE  	ldr	r1, cpuspeed  	str	r1, [r0, #CCCR] diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h index 83ae5e3e1..ebda7192e 100644 --- a/include/asm-arm/arch-pxa/pxa-regs.h +++ b/include/asm-arm/arch-pxa/pxa-regs.h @@ -475,11 +475,11 @@ typedef void		(*ExcpHndlr) (void) ;  #define ICR_ACKNAK	0x4		/* send ACK(0) or NAK(1) */  #define ICR_TB		0x8		/* transfer byte bit */  #define ICR_MA		0x10		/* master abort */ -#define ICR_SCLE	0x20		/* master clock enable */ +#define ICR_SCLE	0x20		/* master clock enable, mona SCLEA */  #define ICR_IUE		0x40		/* unit enable */  #define ICR_GCD		0x80		/* general call disable */  #define ICR_ITEIE	0x100		/* enable tx interrupts */ -#define ICR_IRFIE	0x200		/* enable rx interrupts */ +#define ICR_IRFIE	0x200		/* enable rx interrupts, mona: DRFIE */  #define ICR_BEIE	0x400		/* enable bus error ints */  #define ICR_SSDIE	0x800		/* slave STOP detected int enable */  #define ICR_ALDIE	0x1000		/* enable arbitration interrupt */ @@ -821,21 +821,21 @@ typedef void		(*ExcpHndlr) (void) ;  #define RTAR		__REG(0x40900004)  /* RTC Alarm Register */  #define RTSR		__REG(0x40900008)  /* RTC Status Register */  #define RTTR		__REG(0x4090000C)  /* RTC Timer Trim Register */ -#define RDAR1	   __REG(0x40900018)  /* Wristwatch Day Alarm Reg 1 */ -#define RDAR2	   __REG(0x40900020)  /* Wristwatch Day Alarm Reg 2 */ -#define RYAR1	   __REG(0x4090001C)  /* Wristwatch Year Alarm Reg 1 */ -#define RYAR2	   __REG(0x40900024)  /* Wristwatch Year Alarm Reg 2 */ -#define SWAR1	   __REG(0x4090002C)  /* Stopwatch Alarm Register 1 */ -#define SWAR2	   __REG(0x40900030)  /* Stopwatch Alarm Register 2 */ -#define PIAR	   __REG(0x40900038)  /* Periodic Interrupt Alarm Register */ -#define RDCR	   __REG(0x40900010)  /* RTC Day Count Register. */ -#define RYCR	   __REG(0x40900014)  /* RTC Year Count Register. */ -#define SWCR	   __REG(0x40900028)  /* Stopwatch Count Register */ -#define RTCPICR	   __REG(0x40900034)  /* Periodic Interrupt Counter Register */ +#define RDAR1		__REG(0x40900018)  /* Wristwatch Day Alarm Reg 1 */ +#define RDAR2		__REG(0x40900020)  /* Wristwatch Day Alarm Reg 2 */ +#define RYAR1		__REG(0x4090001C)  /* Wristwatch Year Alarm Reg 1 */ +#define RYAR2		__REG(0x40900024)  /* Wristwatch Year Alarm Reg 2 */ +#define SWAR1		__REG(0x4090002C)  /* Stopwatch Alarm Register 1 */ +#define SWAR2		__REG(0x40900030)  /* Stopwatch Alarm Register 2 */ +#define PIAR		__REG(0x40900038)  /* Periodic Interrupt Alarm Register */ +#define RDCR		__REG(0x40900010)  /* RTC Day Count Register. */ +#define RYCR		__REG(0x40900014)  /* RTC Year Count Register. */ +#define SWCR		__REG(0x40900028)  /* Stopwatch Count Register */ +#define RTCPICR		__REG(0x40900034)  /* Periodic Interrupt Counter Register */ -#define RTSR_PICE  (1 << 15)   /* Peridoc interrupt count enable */ -#define RTSR_PIALE (1 << 14)   /* Peridoc interrupt Alarm enable */ -#define RTSR_PIAL  (1 << 13)   /* Peridoc  interrupt Alarm status */ +#define RTSR_PICE	(1 << 15)	/* Peridoc interrupt count enable */ +#define RTSR_PIALE	(1 << 14)	/* Peridoc interrupt Alarm enable */ +#define RTSR_PIAL	(1 << 13)	/* Peridoc  interrupt Alarm status */  #define RTSR_HZE	(1 << 3)	/* HZ interrupt enable */  #define RTSR_ALE	(1 << 2)	/* RTC alarm interrupt enable */  #define RTSR_HZ		(1 << 1)	/* HZ rising-edge detected */ @@ -921,9 +921,10 @@ typedef void		(*ExcpHndlr) (void) ;  #ifdef CONFIG_CPU_MONAHANS  #define ICHP		__REG(0x40D00018)  /* Interrupt Controller Highest Priority Register */ -/* Missing: 32 Interrupt priority registers */ -/* mk@tbd: These are the same as beneath for PXA27x: maybe can be - * merged if GPIO Stuff is same too. */ +/* Missing: 32 Interrupt priority registers + * These are the same as beneath for PXA27x: maybe can be merged if + * GPIO Stuff is same too. + */  #define ICIP2		__REG(0x40D0009C)  /* Interrupt Controller IRQ Pending Register 2 */  #define ICMR2		__REG(0x40D000A0)  /* Interrupt Controller Mask Register 2 */  #define ICLR2		__REG(0x40D000A4)  /* Interrupt Controller Level Register 2 */ @@ -983,24 +984,24 @@ typedef void		(*ExcpHndlr) (void) ;  #define GCDR3		__REG(0x40E0042C) /* Bit-wise Clear of GPDR[127:96] */  #define GSRER0		__REG(0x40E00440) /* Set Rising Edge Det. Enable [31:0] */ -#define GSRER1  	__REG(0x40E00444) /* Set Rising Edge Det. Enable [63:32] */ +#define GSRER1		__REG(0x40E00444) /* Set Rising Edge Det. Enable [63:32] */  #define GSRER2		__REG(0x40E00448) /* Set Rising Edge Det. Enable [95:64] */ -#define GSRER3  	__REG(0x40E0044C) /* Set Rising Edge Det. Enable [127:96] */ +#define GSRER3		__REG(0x40E0044C) /* Set Rising Edge Det. Enable [127:96] */  #define GCRER0		__REG(0x40E00460) /* Clear Rising Edge Det. Enable [31:0] */ -#define GCRER1  	__REG(0x40E00464) /* Clear Rising Edge Det. Enable [63:32] */ +#define GCRER1		__REG(0x40E00464) /* Clear Rising Edge Det. Enable [63:32] */  #define GCRER2		__REG(0x40E00468) /* Clear Rising Edge Det. Enable [95:64] */ -#define GCRER3  	__REG(0x40E0046C) /* Clear Rising Edge Det. Enable[127:96] */ +#define GCRER3		__REG(0x40E0046C) /* Clear Rising Edge Det. Enable[127:96] */  #define GSFER0		__REG(0x40E00480) /* Set Falling Edge Det. Enable [31:0] */ -#define GSFER1  	__REG(0x40E00484) /* Set Falling Edge Det. Enable [63:32] */ +#define GSFER1		__REG(0x40E00484) /* Set Falling Edge Det. Enable [63:32] */  #define GSFER2		__REG(0x40E00488) /* Set Falling Edge Det. Enable [95:64] */ -#define GSFER3  	__REG(0x40E0048C) /* Set Falling Edge Det. Enable[127:96] */ +#define GSFER3		__REG(0x40E0048C) /* Set Falling Edge Det. Enable[127:96] */  #define GCFER0		__REG(0x40E004A0) /* Clr Falling Edge Det. Enable [31:0] */ -#define GCFER1  	__REG(0x40E004A4) /* Clr Falling Edge Det. Enable [63:32] */ +#define GCFER1		__REG(0x40E004A4) /* Clr Falling Edge Det. Enable [63:32] */  #define GCFER2		__REG(0x40E004A8) /* Clr Falling Edge Det. Enable [95:64] */ -#define GCFER3  	__REG(0x40E004AC) /* Clr Falling Edge Det. Enable[127:96] */ +#define GCFER3		__REG(0x40E004AC) /* Clr Falling Edge Det. Enable[127:96] */  #define GSDR(x)		__REG2(0x40E00400, ((x) & 0x60) >> 3)  #define GCDR(x)		__REG2(0x40300420, ((x) & 0x60) >> 3) @@ -1488,8 +1489,8 @@ typedef void		(*ExcpHndlr) (void) ;  #define GPIO79_nCS_3_MD		(79 | GPIO_ALT_FN_2_OUT)  #define GPIO80_nCS_4_MD		(80 | GPIO_ALT_FN_2_OUT) -#define GPIO117_SCL	     (117 | GPIO_ALT_FN_1_OUT) -#define GPIO118_SDA	     (118 | GPIO_ALT_FN_1_OUT) +#define GPIO117_SCL		(117 | GPIO_ALT_FN_1_OUT) +#define GPIO118_SDA		(118 | GPIO_ALT_FN_1_OUT)  /*   * Power Manager @@ -1709,10 +1710,10 @@ typedef void		(*ExcpHndlr) (void) ;  #define ACCR_13MEND2	(1 << 21)  #define ACCR_PCCE	(1 << 11) -#define CKENA_30_MSL0	(1 << 30) 	/* MSL0 Interface Unit Clock Enable */ -#define CKENA_29_SSP4	(1 << 29) 	/* SSP3 Unit Clock Enable */ -#define CKENA_28_SSP3	(1 << 28) 	/* SSP2 Unit Clock Enable */ -#define CKENA_27_SSP2	(1 << 27)  	/* SSP1 Unit Clock Enable */ +#define CKENA_30_MSL0	(1 << 30)	/* MSL0 Interface Unit Clock Enable */ +#define CKENA_29_SSP4	(1 << 29)	/* SSP3 Unit Clock Enable */ +#define CKENA_28_SSP3	(1 << 28)	/* SSP2 Unit Clock Enable */ +#define CKENA_27_SSP2	(1 << 27)	/* SSP1 Unit Clock Enable */  #define CKENA_26_SSP1	(1 << 26)	/* SSP0 Unit Clock Enable */  #define CKENA_25_TSI	(1 << 25)	/* TSI Clock Enable */  #define CKENA_24_AC97	(1 << 24)	/* AC97 Unit Clock Enable */ @@ -1720,27 +1721,27 @@ typedef void		(*ExcpHndlr) (void) ;  #define CKENA_22_FFUART	(1 << 22)	/* FFUART Unit Clock Enable */  #define CKENA_21_BTUART	(1 << 21)	/* BTUART Unit Clock Enable */  #define CKENA_20_UDC	(1 << 20)	/* UDC Clock Enable */ -#define CKENA_19_TPM	(1 << 19) 	/* TPM Unit Clock Enable */ -#define CKENA_18_USIM1	(1 << 18) 	/* USIM1 Unit Clock Enable */ -#define CKENA_17_USIM0	(1 << 17) 	/* USIM0 Unit Clock Enable */ -#define CKENA_15_CIR	(1 << 15) 	/* Consumer IR Clock Enable */ -#define CKENA_14_KEY	(1 << 14) 	/* Keypad Controller Clock Enable */ -#define CKENA_13_MMC1	(1 << 13) 	/* MMC1 Clock Enable */ -#define CKENA_12_MMC0	(1 << 12) 	/* MMC0 Clock Enable */ -#define CKENA_11_FLASH	(1 << 11) 	/* Boot ROM Clock Enable */ -#define CKENA_10_SRAM	(1 << 10) 	/* SRAM Controller Clock Enable */ -#define CKENA_9_SMC	(1 << 9) 	/* Static Memory Controller */ -#define CKENA_8_DMC	(1 << 8) 	/* Dynamic Memory Controller */ -#define CKENA_7_GRAPHICS (1 << 7) 	/* 2D Graphics Clock Enable */ +#define CKENA_19_TPM	(1 << 19)	/* TPM Unit Clock Enable */ +#define CKENA_18_USIM1	(1 << 18)	/* USIM1 Unit Clock Enable */ +#define CKENA_17_USIM0	(1 << 17)	/* USIM0 Unit Clock Enable */ +#define CKENA_15_CIR	(1 << 15)	/* Consumer IR Clock Enable */ +#define CKENA_14_KEY	(1 << 14)	/* Keypad Controller Clock Enable */ +#define CKENA_13_MMC1	(1 << 13)	/* MMC1 Clock Enable */ +#define CKENA_12_MMC0	(1 << 12)	/* MMC0 Clock Enable */ +#define CKENA_11_FLASH	(1 << 11)	/* Boot ROM Clock Enable */ +#define CKENA_10_SRAM	(1 << 10)	/* SRAM Controller Clock Enable */ +#define CKENA_9_SMC	(1 << 9)	/* Static Memory Controller */ +#define CKENA_8_DMC	(1 << 8)	/* Dynamic Memory Controller */ +#define CKENA_7_GRAPHICS (1 << 7)	/* 2D Graphics Clock Enable */  #define CKENA_6_USBCLI	(1 << 6)	/* USB Client Unit Clock Enable */ -#define CKENA_4_NAND	(1 << 4) 	/* NAND Flash Controller Clock Enable */ -#define CKENA_3_CAMERA	(1 << 3) 	/* Camera Interface Clock Enable */ +#define CKENA_4_NAND	(1 << 4)	/* NAND Flash Controller Clock Enable */ +#define CKENA_3_CAMERA	(1 << 3)	/* Camera Interface Clock Enable */  #define CKENA_2_USBHOST	(1 << 2)	/* USB Host Unit Clock Enable */  #define CKENA_1_LCD	(1 << 1)	/* LCD Unit Clock Enable */  #define CKENB_8_1WIRE	((1 << 8) + 32) /* One Wire Interface Unit Clock Enable */ -#define CKENB_7_GPIO	((1 << 7) + 32) 	/* GPIO Clock Enable */ -#define CKENB_6_IRQ	((1 << 6) + 32) 	/* Interrupt Controller Clock Enable */ +#define CKENB_7_GPIO	((1 << 7) + 32)	/* GPIO Clock Enable */ +#define CKENB_6_IRQ	((1 << 6) + 32)	/* Interrupt Controller Clock Enable */  #define CKENB_4_I2C	((1 << 4) + 32)	/* I2C Unit Clock Enable */  #define CKENB_1_PWM1	((1 << 1) + 32)	/* PWM2 & PWM3 Clock Enable */  #define CKENB_0_PWM0	((1 << 0) + 32)	/* PWM0 & PWM1 Clock Enable */ @@ -2382,16 +2383,16 @@ typedef void		(*ExcpHndlr) (void) ;  #define KPAS_SO		(0x1 << 31)  #define KPASMKPx_SO	(0x1 << 31) -#define GPIO113_BIT	   (1 << 17)/* GPIO113 in GPSR, GPCR, bit 17 */ -#define PSLR	   __REG(0x40F00034) -#define PSTR	   __REG(0x40F00038)  /* Power Manager Standby Configuration Reg */ -#define PSNR	   __REG(0x40F0003C)  /* Power Manager Sense Configuration Reg */ -#define PVCR	   __REG(0x40F00040)  /* Power Manager Voltage Change Control Reg */ -#define PKWR	   __REG(0x40F00050)  /* Power Manager KB Wake-Up Enable Reg */ -#define PKSR	   __REG(0x40F00054)  /* Power Manager KB Level-Detect Status Reg */ -#define OSMR4	    __REG(0x40A00080)  /* */ -#define OSCR4	    __REG(0x40A00040)  /* OS Timer Counter Register */ -#define OMCR4	    __REG(0x40A000C0)  /* */ +#define GPIO113_BIT	(1 << 17)/* GPIO113 in GPSR, GPCR, bit 17 */ +#define PSLR		__REG(0x40F00034) +#define PSTR		__REG(0x40F00038)  /* Power Manager Standby Configuration Reg */ +#define PSNR		__REG(0x40F0003C)  /* Power Manager Sense Configuration Reg */ +#define PVCR		__REG(0x40F00040)  /* Power Manager Voltage Change Control Reg */ +#define PKWR		__REG(0x40F00050)  /* Power Manager KB Wake-Up Enable Reg */ +#define PKSR		__REG(0x40F00054)  /* Power Manager KB Level-Detect Status Reg */ +#define OSMR4		__REG(0x40A00080)  /* */ +#define OSCR4		__REG(0x40A00040)  /* OS Timer Counter Register */ +#define OMCR4		__REG(0x40A000C0)  /* */  #endif	/* CONFIG_PXA27X */ diff --git a/include/configs/delta.h b/include/configs/delta.h index b42a7e2c1..776ee15d1 100644 --- a/include/configs/delta.h +++ b/include/configs/delta.h @@ -49,7 +49,6 @@  /*   * Hardware drivers   */ -  #undef TURN_ON_ETHERNET  #ifdef TURN_ON_ETHERNET  # define CONFIG_DRIVER_SMC91111 1 @@ -59,10 +58,16 @@  # undef CONFIG_SMC_USE_IOFUNCS          /* just for use with the kernel */  #endif +#define CONFIG_HARD_I2C		1	/* required for DA9030 access */ +#define CFG_I2C_SPEED		400000	/* I2C speed */ +#define CFG_I2C_SLAVE		1	/* I2C controllers address */ +#define DA9030_I2C_ADDR		0x49	/* I2C address of DA9030 */ +/* #define CONFIG_HW_WATCHDOG	1	/\* Required for hitting the DA9030 WD *\/ */ +  /*   * select serial console configuration   */ -#define CONFIG_FFUART	       1 +#define CONFIG_FFUART		1  /* allow to overwrite serial and ethaddr */  #define CONFIG_ENV_OVERWRITE @@ -73,8 +78,13 @@  #ifdef TURN_ON_ETHERNET  # define CONFIG_COMMANDS        (CONFIG_CMD_DFL | CFG_CMD_PING)  #else -# define CONFIG_COMMANDS	((CONFIG_CMD_DFL | CFG_CMD_ENV | CFG_CMD_NAND) \ -				& ~(CFG_CMD_NET | CFG_CMD_FLASH | CFG_CMD_IMLS)) +# define CONFIG_COMMANDS	((CONFIG_CMD_DFL \ +				  | CFG_CMD_ENV \ +				  | CFG_CMD_NAND \ +				  | CFG_CMD_I2C) \ +				 & ~(CFG_CMD_NET \ +				     | CFG_CMD_FLASH \ +				     | CFG_CMD_IMLS))  #endif @@ -121,8 +131,14 @@  #define CFG_LOAD_ADDR	(CFG_DRAM_BASE + 0x8000) /* default load address */ -#define CFG_HZ			3686400		/* incrementer freq: 3.6864 MHz */ -#define CFG_CPUSPEED		0x161		/* set core clock to 400/200/100 MHz */ +#define CFG_HZ			3250000		/* incrementer freq: 3.25 MHz */ + +/* Monahans Core Frequency =  + *  + */ +#define CFG_MONAHANS_RUN_MODE_OSC_RATIO		16 /* valid values: 8, 16, 24, 31 */ +#define CFG_MONAHANS_TURBO_RUN_MODE_RATIO	1  /* valid values: 1, 2 */ +  						/* valid baudrates */  #define CFG_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 } @@ -168,8 +184,6 @@  #define CFG_NAND_BASE_LIST	{ CFG_NAND0_BASE }  #define CFG_MAX_NAND_DEVICE	1	/* Max number of NAND devices */ -#define SECTORSIZE 		512 -#define NAND_DELAY_US		25	/* mk@tbd: could be 0, I guess */  /* nand timeout values */  #define CFG_NAND_PROG_ERASE_TO	3000 @@ -178,16 +192,15 @@  #undef NAND_ALLOW_ERASE_ALL	/* Allow erasing bad blocks - don't use */  /* NAND Timing Parameters (in ns) */ -#define NAND_TIMING_tCH 	10 -#define NAND_TIMING_tCS 	0 +#define NAND_TIMING_tCH		10 +#define NAND_TIMING_tCS		0  #define NAND_TIMING_tWH		20 -#define NAND_TIMING_tWP 	40 +#define NAND_TIMING_tWP		40 -#define NAND_TIMING_tRH 	20 -#define NAND_TIMING_tRP 	40 +#define NAND_TIMING_tRH		20 +#define NAND_TIMING_tRP		40 -#define NAND_TIMING_tR  	11123 -/* #define NAND_TIMING_tWHR	110 */ +#define NAND_TIMING_tR		11123  #define NAND_TIMING_tWHR	100  #define NAND_TIMING_tAR		10 @@ -199,89 +212,19 @@  #define CONFIG_MTD_DEBUG  #define CONFIG_MTD_DEBUG_VERBOSE 1 -#define ADDR_COLUMN 1 -#define ADDR_PAGE 2 -#define ADDR_COLUMN_PAGE 3 +#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 CFG_NO_FLASH	1 -#ifndef CGF_NO_FLASH -/* these are required by the environment code */ -#define PHYS_FLASH_1            CFG_NAND0_BASE /* Flash Bank #1 */ -#define PHYS_FLASH_SIZE         0x04000000 /* 64 MB */ -#define PHYS_FLASH_BANK_SIZE    0x04000000 /* 64 MB Banks */ -#define PHYS_FLASH_SECT_SIZE    (SECTORSIZE*1024) /*  KB sectors (x2) */ -#endif - -/* - * GPIO settings - */ -#define CFG_GPSR0_VAL		0x00008000 -#define CFG_GPSR1_VAL		0x00FC0382 -#define CFG_GPSR2_VAL		0x0001FFFF -#define CFG_GPCR0_VAL		0x00000000 -#define CFG_GPCR1_VAL		0x00000000 -#define CFG_GPCR2_VAL		0x00000000 -#define CFG_GPDR0_VAL		0x0060A800 -#define CFG_GPDR1_VAL		0x00FF0382 -#define CFG_GPDR2_VAL		0x0001C000 -#define CFG_GAFR0_L_VAL		0x98400000 -#define CFG_GAFR0_U_VAL		0x00002950 -#define CFG_GAFR1_L_VAL		0x000A9558 -#define CFG_GAFR1_U_VAL		0x0005AAAA -#define CFG_GAFR2_L_VAL		0xA0000000 -#define CFG_GAFR2_U_VAL		0x00000002 - -#define CFG_PSSR_VAL		0x20 - -/* - * Memory settings - */ -#define CFG_MSC0_VAL		0x23F223F2 -#define CFG_MSC1_VAL		0x3FF1A441 -#define CFG_MSC2_VAL		0x7FF97FF1 -#define CFG_MDCNFG_VAL		0x00001AC9 -#define CFG_MDREFR_VAL		0x00018018 -#define CFG_MDMRS_VAL		0x00000000 - -/* - * PCMCIA and CF Interfaces - */ -#define CFG_MECR_VAL		0x00000000 -#define CFG_MCMEM0_VAL		0x00010504 -#define CFG_MCMEM1_VAL		0x00010504 -#define CFG_MCATT0_VAL		0x00010504 -#define CFG_MCATT1_VAL		0x00010504 -#define CFG_MCIO0_VAL		0x00004715 -#define CFG_MCIO1_VAL		0x00004715 - -#define _LED			0x08000010 -#define LED_BLANK		0x08000040 +#define NAND_MAX_FLOORS		1 +#define NAND_MAX_CHIPS		1 -/* - * FLASH and environment organization - */ -#ifndef CFG_NO_FLASH -#define CFG_MAX_FLASH_BANKS	2	/* max number of memory banks		*/ -#define CFG_MAX_FLASH_SECT	128  /* max number of sectors on one chip    */ - -/* timeout values are in ticks */ -#define CFG_FLASH_ERASE_TOUT	(25*CFG_HZ) /* Timeout for Flash Erase */ -#define CFG_FLASH_WRITE_TOUT	(25*CFG_HZ) /* Timeout for Flash Write */ - - -/* NOTE: many default partitioning schemes assume the kernel starts at the - * second sector, not an environment.  You have been warned! - */ -#define	CFG_MONITOR_LEN		PHYS_FLASH_SECT_SIZE -#endif /* #ifndef CFG_NO_FLASH */ +#define CFG_NO_FLASH		1 -/* #define CFG_ENV_IS_NOWHERE */  #define CFG_ENV_IS_IN_NAND	1  #define CFG_ENV_OFFSET		0x40000 +#define CFG_ENV_OFFSET_REDUND	0x44000  #define CFG_ENV_SIZE		0x4000  #endif	/* __CONFIG_H */ diff --git a/include/da9030.h b/include/da9030.h new file mode 100644 index 000000000..41108b9b3 --- /dev/null +++ b/include/da9030.h @@ -0,0 +1,106 @@ +/* + * (C) Copyright 2006 DENX Software Engineering + * + * 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 + */ + +/* DA9030 register definitions */ +#define CID			0x00 +#define EVENT_A			0x01 +#define EVENT_B			0x02 +#define EVENT_C			0x03 +#define STATUS			0x04 +#define IRQ_MASK_A		0x05 +#define IRQ_MASK_B		0x06 +#define IRQ_MASK_C		0x07 +#define SYS_CONTROL_A		0x08 +#define SYS_CONTROL_B		0x09 +#define FAULT_LOG		0x0A +#define LDO_10_11		0x10 +#define LDO_15			0x11 +#define LDO_14_16		0x12 +#define LDO_18_19		0x13 +#define LDO_17_SIMCP0		0x14 +#define BUCK2_DVC1		0x15 +#define BUCK2_DVC2		0x16 +#define REG_CONTROL_1_17	0x17 +#define REG_CONTROL_2_18	0x18 +#define USBPUMP			0x19 +#define SLEEP_CONTROL		0x1A +#define STARTUP_CONTROL		0x1B +#define LED1_CONTROL		0x20 +#define LED2_CONTROL		0x21 +#define LED3_CONTROL		0x22 +#define LED4_CONTROL		0x23 +#define LEDPC_CONTROL		0x24 +#define WLED_CONTROL		0x25 +#define MISC_CONTROLA		0x26 +#define MISC_CONTROLB		0x27 +#define CHARGE_CONTROL		0x28 +#define CCTR_CONTROL		0x29 +#define TCTR_CONTROL		0x2A +#define CHARGE_PULSE		0x2B + +/* ... some missing ...*/ + +#define LDO1			0x90 +#define LDO2_3			0x91 +#define LDO4_5			0x92 +#define LDO6_SIMCP		0x93 +#define LDO7_8			0x94 +#define LDO9_12			0x95 +#define BUCK			0x96 +#define REG_CONTROL_1_97	0x97 +#define REG_CONTROL_2_98	0x98 +#define REG_SLEEP_CONTROL1	0x99 +#define REG_SLEEP_CONTROL2	0x9A +#define REG_SLEEP_CONTROL3	0x9B +#define ADC_MAN_CONTROL		0xA0 +#define ADC_AUTO_CONTROL	0xA1 +#define VBATMON			0xA2 +#define VBATMONTXMON		0xA3 +#define TBATHIGHP		0xA4 +#define TBATHIGHN		0xA5 +#define TBATLOW			0xA6 +#define MAN_RES			0xB0 +#define VBAT_RES		0xB1 +#define VBATMIN_RES		0xB2 +#define VBATMINTXON_RES		0xB3 +#define ICHMAX_RES		0xB4 +#define ICHMIN_RES		0xB5 +#define ICHAVERAGE_RES		0xB6 +#define VCHMAX_RES		0xB7 +#define VCHMIN_RES		0xB8 +#define TBAT_RES		0xB9 +#define ADC_IN4_RES		0xBA + +#define STATUS_ONKEY_N		0x1	/* current ONKEY_N value */ +#define STATUS_PWREN1		(1<<1)	/* PWREN1 value */ +#define STATUS_EXTON		(1<<2)	/* EXTON value */ +#define STATUS_CHDET		(1<<3)	/* Charger detection status */ +#define STATUS_TBAT		(1<<4)	/* Battery over/under temperature status */ +#define STATUS_VBATMON		(1<<5)	/* VBATMON comparison status */ +#define STATUS_VBATMONTXON	(1<<6)	/* VBATMONTXON comparison status */ +#define STATUS_CHIOVER		(1<<7)	/* Charge overcurrent */ + +#define SYS_CONTROL_A_SLEEP_N_PIN_ENABLE	0x1 +#define SYS_CONTROL_A_SHUT_DOWN			(1<<1) +#define SYS_CONTROL_A_HWRES_ENABLE		(1<<2) +#define SYS_CONTROL_A_WDOG_ACTION		(1<<3) +#define SYS_CONTROL_A_WATCHDOG			(1<<7) diff --git a/include/environment.h b/include/environment.h index bb109649f..422f80089 100644 --- a/include/environment.h +++ b/include/environment.h @@ -69,6 +69,18 @@  # endif  #endif	/* CFG_ENV_IS_IN_FLASH */ +#if defined(CFG_ENV_IS_IN_NAND) +# ifndef CFG_ENV_OFFSET +#  error "Need to define CFG_ENV_OFFSET when using CFG_ENV_IS_IN_NAND" +# endif +# ifndef CFG_ENV_SIZE +#  error "Need to define CFG_ENV_SIZE when using CFG_ENV_IS_IN_NAND" +# endif +# ifdef CFG_ENV_OFFSET_REDUND +#  define CFG_REDUNDAND_ENVIRONMENT +# endif +#endif /* CFG_ENV_IS_IN_NAND */ +  #ifdef CFG_REDUNDAND_ENVIRONMENT  # define ENV_HEADER_SIZE	(sizeof(unsigned long) + 1) |