diff options
| author | Wolfgang Denk <wd@pollux.denx.de> | 2006-11-30 02:01:32 +0100 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2006-11-30 02:01:32 +0100 | 
| commit | ab07b6c221da99442b6c93986ca30607c6289bf0 (patch) | |
| tree | 610bccb5c1ebd790004268f1efc3a4f29ed3d3bb /cpu/mpc83xx/cpu_init.c | |
| parent | 8d9a8610b8256331132227e9e6585c6bd5742787 (diff) | |
| parent | 1939d969443ccf316cab2bf32ab1027d4db5ba1a (diff) | |
| download | olio-uboot-2014.01-ab07b6c221da99442b6c93986ca30607c6289bf0.tar.xz olio-uboot-2014.01-ab07b6c221da99442b6c93986ca30607c6289bf0.zip | |
Merge with http://opensource.freescale.com/pub/scm/u-boot-83xx.git
Diffstat (limited to 'cpu/mpc83xx/cpu_init.c')
| -rw-r--r-- | cpu/mpc83xx/cpu_init.c | 76 | 
1 files changed, 65 insertions, 11 deletions
| diff --git a/cpu/mpc83xx/cpu_init.c b/cpu/mpc83xx/cpu_init.c index 6ed0992c0..e5725fb91 100644 --- a/cpu/mpc83xx/cpu_init.c +++ b/cpu/mpc83xx/cpu_init.c @@ -1,5 +1,5 @@  /* - * Copyright 2004 Freescale Semiconductor, Inc. + * Copyright (C) 2004-2006 Freescale Semiconductor, Inc.   *   * See file CREDITS for list of people who contributed to this   * project. @@ -18,11 +18,6 @@   * along with this program; if not, write to the Free Software   * Foundation, Inc., 59 Temple Place, Suite 330, Boston,   * MA 02111-1307 USA - * - * Change log: - * - * 20050101: Eran Liberty (liberty@freescale.com) - *           Initial file creating (porting from 85XX & 8260)   */  #include <common.h> @@ -31,6 +26,30 @@  DECLARE_GLOBAL_DATA_PTR; +#ifdef CONFIG_QE +extern qe_iop_conf_t qe_iop_conf_tab[]; +extern void qe_config_iopin(u8 port, u8 pin, int dir, +			 int open_drain, int assign); +extern void qe_init(uint qe_base); +extern void qe_reset(void); + +static void config_qe_ioports(void) +{ +	u8	port, pin; +	int	dir, open_drain, assign; +	int	i; + +	for (i = 0; qe_iop_conf_tab[i].assign != QE_IOP_TAB_END; i++) { +		port		= qe_iop_conf_tab[i].port; +		pin		= qe_iop_conf_tab[i].pin; +		dir		= qe_iop_conf_tab[i].dir; +		open_drain	= qe_iop_conf_tab[i].open_drain; +		assign		= qe_iop_conf_tab[i].assign; +		qe_config_iopin(port, pin, dir, open_drain, assign); +	} +} +#endif +  /*   * Breathe some life into the CPU...   * @@ -46,6 +65,37 @@ void cpu_init_f (volatile immap_t * im)  	/* Clear initial global data */  	memset ((void *) gd, 0, sizeof (gd_t)); +	/* system performance tweaking */ + +#ifdef CFG_ACR_PIPE_DEP +	/* Arbiter pipeline depth */ +	im->arbiter.acr = (im->arbiter.acr & ~ACR_PIPE_DEP) | (3 << ACR_PIPE_DEP_SHIFT); +#endif + +#ifdef CFG_SPCR_TSEC1EP +	/* TSEC1 Emergency priority */ +	im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_TSEC1EP) | (3 << SPCR_TSEC1EP_SHIFT); +#endif + +#ifdef CFG_SPCR_TSEC2EP +	/* TSEC2 Emergency priority */ +	im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_TSEC2EP) | (3 << SPCR_TSEC2EP_SHIFT); +#endif + +#ifdef CFG_SCCR_TSEC1CM +	/* TSEC1 clock mode */ +	im->clk.sccr = (im->clk.sccr & ~SCCR_TSEC1CM) | (1 << SCCR_TSEC1CM_SHIFT); +#endif +#ifdef CFG_SCCR_TSEC2CM +	/* TSEC2 & I2C1 clock mode */ +	im->clk.sccr = (im->clk.sccr & ~SCCR_TSEC2CM) | (1 << SCCR_TSEC2CM_SHIFT); +#endif + +#ifdef CFG_ACR_RPTCNT +	/* Arbiter repeat count */ +	im->arbiter.acr = ((im->arbiter.acr & ~(ACR_RPTCNT)) | (3 << ACR_RPTCNT_SHIFT)); +#endif +  	/* RSR - Reset Status Register - clear all status (4.6.1.3) */  	gd->reset_status = im->reset.rsr;  	im->reset.rsr = ~(RSR_RES); @@ -69,6 +119,10 @@ void cpu_init_f (volatile immap_t * im)  #ifdef CFG_SICRL  	im->sysconf.sicrl = CFG_SICRL;  #endif +#ifdef CONFIG_QE +	/* Config QE ioports */ +	config_qe_ioports(); +#endif  	/*  	 * Memory Controller: @@ -157,12 +211,12 @@ void cpu_init_f (volatile immap_t * im)  #endif  } - -/* - * Initialize higher level parts of CPU like time base and timers. - */ -  int cpu_init_r (void)  { +#ifdef CONFIG_QE +	uint qe_base = CFG_IMMR + 0x00100000; /* QE immr base */ +	qe_init(qe_base); +	qe_reset(); +#endif  	return 0;  } |