diff options
| -rw-r--r-- | arch/m68k/cpu/mcf5445x/config.mk | 10 | ||||
| -rw-r--r-- | arch/m68k/cpu/mcf5445x/cpu.c | 17 | ||||
| -rw-r--r-- | arch/m68k/cpu/mcf5445x/cpu_init.c | 313 | ||||
| -rw-r--r-- | arch/m68k/cpu/mcf5445x/speed.c | 80 | ||||
| -rw-r--r-- | arch/m68k/cpu/mcf5445x/start.S | 273 | ||||
| -rw-r--r-- | arch/m68k/include/asm/cache.h | 11 | ||||
| -rw-r--r-- | arch/m68k/include/asm/immap.h | 43 | ||||
| -rw-r--r-- | arch/m68k/include/asm/immap_5441x.h | 387 | ||||
| -rw-r--r-- | arch/m68k/include/asm/m5441x.h | 887 | 
9 files changed, 1967 insertions, 54 deletions
| diff --git a/arch/m68k/cpu/mcf5445x/config.mk b/arch/m68k/cpu/mcf5445x/config.mk index 61a731eef..0c48783e4 100644 --- a/arch/m68k/cpu/mcf5445x/config.mk +++ b/arch/m68k/cpu/mcf5445x/config.mk @@ -4,6 +4,8 @@  # (C) Copyright 2000-2004  # Wolfgang Denk, DENX Software Engineering, wd@denx.de.  # +# Copyright 2011-2012 Freescale Semiconductor, Inc. +#  # See file CREDITS for list of people who contributed to this  # project.  # @@ -24,7 +26,15 @@  #  PLATFORM_RELFLAGS += -ffixed-d7 -msep-data + +cfg=$(shell grep configs $(OBJTREE)/include/config.h | sed 's/.*<\(configs.*\)>/\1/') +is5441x:=$(shell grep CONFIG_MCF5441x $(TOPDIR)/include/$(cfg)) + +ifneq (,$(findstring CONFIG_MCF5441x,$(is5441x))) +PLATFORM_CPPFLAGS += -mcpu=54418 -fPIC +else  PLATFORM_CPPFLAGS += -mcpu=54455 -fPIC +endif  ifneq (,$(findstring -linux-,$(shell $(CC) --version)))  ifneq (,$(findstring GOT,$(shell $(LD) --help))) diff --git a/arch/m68k/cpu/mcf5445x/cpu.c b/arch/m68k/cpu/mcf5445x/cpu.c index adfc708c3..b612cdaea 100644 --- a/arch/m68k/cpu/mcf5445x/cpu.c +++ b/arch/m68k/cpu/mcf5445x/cpu.c @@ -39,6 +39,8 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  {  	rcm_t *rcm = (rcm_t *) (MMAP_RCM);  	udelay(1000); +	out_8(&rcm->rcr, RCM_RCR_FRCRSTOUT); +	udelay(10000);  	setbits_8(&rcm->rcr, RCM_RCR_SOFTRST);  	/* we don't return! */ @@ -74,6 +76,21 @@ int checkcpu(void)  	case 0x4f:  		id = 54450;  		break; +	case 0x9F: +		id = 54410; +		break; +	case 0xA0: +		id = 54415; +		break; +	case 0xA1: +		id = 54416; +		break; +	case 0xA2: +		id = 54417; +		break; +	case 0xA3: +		id = 54418; +		break;  	}  	if (id) { diff --git a/arch/m68k/cpu/mcf5445x/cpu_init.c b/arch/m68k/cpu/mcf5445x/cpu_init.c index b6ceac32e..6e947d06f 100644 --- a/arch/m68k/cpu/mcf5445x/cpu_init.c +++ b/arch/m68k/cpu/mcf5445x/cpu_init.c @@ -39,37 +39,11 @@  #include <asm/fec.h>  #endif -/* - * Breath some life into the CPU... - * - * Set up the memory map, - * initialize a bunch of registers, - * initialize the UPM's - */ -void cpu_init_f(void) +void init_fbcs(void)  { -	scm1_t *scm1 = (scm1_t *) MMAP_SCM1; -	gpio_t *gpio = (gpio_t *) MMAP_GPIO;  	fbcs_t *fbcs __maybe_unused = (fbcs_t *) MMAP_FBCS; -	out_be32(&scm1->mpr, 0x77777777); -	out_be32(&scm1->pacra, 0); -	out_be32(&scm1->pacrb, 0); -	out_be32(&scm1->pacrc, 0); -	out_be32(&scm1->pacrd, 0); -	out_be32(&scm1->pacre, 0); -	out_be32(&scm1->pacrf, 0); -	out_be32(&scm1->pacrg, 0); - -	/* FlexBus */ -	out_8(&gpio->par_be, -		GPIO_PAR_BE_BE3_BE3 | GPIO_PAR_BE_BE2_BE2 | -		GPIO_PAR_BE_BE1_BE1 | GPIO_PAR_BE_BE0_BE0); -	out_8(&gpio->par_fbctl, -		GPIO_PAR_FBCTL_OE | GPIO_PAR_FBCTL_TA_TA | -		GPIO_PAR_FBCTL_RW_RW | GPIO_PAR_FBCTL_TS_TS); - -#if !defined(CONFIG_CF_SBF) +#if !defined(CONFIG_SERIAL_BOOT)  #if (defined(CONFIG_SYS_CS0_BASE) && defined(CONFIG_SYS_CS0_MASK) && defined(CONFIG_SYS_CS0_CTRL))  	out_be32(&fbcs->csar0, CONFIG_SYS_CS0_BASE);  	out_be32(&fbcs->cscr0, CONFIG_SYS_CS0_CTRL); @@ -107,6 +81,145 @@ void cpu_init_f(void)  	out_be32(&fbcs->cscr5, CONFIG_SYS_CS5_CTRL);  	out_be32(&fbcs->csmr5, CONFIG_SYS_CS5_MASK);  #endif +} + +/* + * Breath some life into the CPU... + * + * Set up the memory map, + * initialize a bunch of registers, + * initialize the UPM's + */ +void cpu_init_f(void) +{ +	gpio_t *gpio = (gpio_t *) MMAP_GPIO; + +#ifdef CONFIG_MCF5441x +	scm_t *scm = (scm_t *) MMAP_SCM; +	pm_t *pm = (pm_t *) MMAP_PM; + +	/* Disable Switch */ +	*(unsigned long *)(MMAP_L2_SW0 + 0x00000024) = 0; + +	/* Disable core watchdog */ +	out_be16(&scm->cwcr, 0); +	out_8(&gpio->par_fbctl, +		GPIO_PAR_FBCTL_ALE_FB_ALE | GPIO_PAR_FBCTL_OE_FB_OE | +		GPIO_PAR_FBCTL_FBCLK | GPIO_PAR_FBCTL_RW | +		GPIO_PAR_FBCTL_TA_TA); +	out_8(&gpio->par_be, +		GPIO_PAR_BE_BE3_BE3 | GPIO_PAR_BE_BE2_BE2 | +		GPIO_PAR_BE_BE1_BE1 | GPIO_PAR_BE_BE0_BE0); + +	/* eDMA */ +	out_8(&pm->pmcr0, 17); + +	/* INTR0 - INTR2 */ +	out_8(&pm->pmcr0, 18); +	out_8(&pm->pmcr0, 19); +	out_8(&pm->pmcr0, 20); + +	/* I2C */ +	out_8(&pm->pmcr0, 22); +	out_8(&pm->pmcr1, 4); +	out_8(&pm->pmcr1, 7); + +	/* DTMR0 - DTMR3*/ +	out_8(&pm->pmcr0, 28); +	out_8(&pm->pmcr0, 29); +	out_8(&pm->pmcr0, 30); +	out_8(&pm->pmcr0, 31); + +	/* PIT0 - PIT3 */ +	out_8(&pm->pmcr0, 32); +	out_8(&pm->pmcr0, 33); +	out_8(&pm->pmcr0, 34); +	out_8(&pm->pmcr0, 35); + +	/* Edge Port */ +	out_8(&pm->pmcr0, 36); +	out_8(&pm->pmcr0, 37); + +	/* USB OTG */ +	out_8(&pm->pmcr0, 44); +	/* USB Host */ +	out_8(&pm->pmcr0, 45); + +	/* ESDHC */ +	out_8(&pm->pmcr0, 51); + +	/* ENET0 - ENET1 */ +	out_8(&pm->pmcr0, 53); +	out_8(&pm->pmcr0, 54); + +	/* NAND */ +	out_8(&pm->pmcr0, 63); + +#ifdef CONFIG_SYS_I2C_0 +	out_8(&gpio->par_cani2c, 0xF0); +	/* I2C0 pull up */ +	out_be16(&gpio->pcr_b, 0x003C); +	/* I2C0 max speed */ +	out_8(&gpio->srcr_cani2c, 0x03); +#endif +#ifdef CONFIG_SYS_I2C_2 +	/* I2C2 */ +	out_8(&gpio->par_ssi0h, 0xA0); +	/* I2C2, UART7 */ +	out_8(&gpio->par_ssi0h, 0xA8); +	/* UART7 */ +	out_8(&gpio->par_ssi0l, 0x2); +	/* UART8, UART9 */ +	out_8(&gpio->par_cani2c, 0xAA); +	/* UART4, UART0 */ +	out_8(&gpio->par_uart0, 0xAF); +	/* UART5, UART1 */ +	out_8(&gpio->par_uart1, 0xAF); +	/* UART6, UART2 */ +	out_8(&gpio->par_uart2, 0xAF); +	/* I2C2 pull up */ +	out_be16(&gpio->pcr_h, 0xF000); +#endif +#ifdef CONFIG_SYS_I2C_5 +	/* I2C5 */ +	out_8(&gpio->par_uart1, 0x0A); +	/* I2C5 pull up */ +	out_be16(&gpio->pcr_e, 0x0003); +	out_be16(&gpio->pcr_f, 0xC000); +#endif + +	/* Lowest slew rate for UART0,1,2 */ +	out_8(&gpio->srcr_uart, 0x00); +#endif		/* CONFIG_MCF5441x */ + +#ifdef CONFIG_MCF5445x +	scm1_t *scm1 = (scm1_t *) MMAP_SCM1; + +	out_be32(&scm1->mpr, 0x77777777); +	out_be32(&scm1->pacra, 0); +	out_be32(&scm1->pacrb, 0); +	out_be32(&scm1->pacrc, 0); +	out_be32(&scm1->pacrd, 0); +	out_be32(&scm1->pacre, 0); +	out_be32(&scm1->pacrf, 0); +	out_be32(&scm1->pacrg, 0); + +	/* FlexBus */ +	out_8(&gpio->par_be, +		GPIO_PAR_BE_BE3_BE3 | GPIO_PAR_BE_BE2_BE2 | +		GPIO_PAR_BE_BE1_BE1 | GPIO_PAR_BE_BE0_BE0); +	out_8(&gpio->par_fbctl, +		GPIO_PAR_FBCTL_OE | GPIO_PAR_FBCTL_TA_TA | +		GPIO_PAR_FBCTL_RW_RW | GPIO_PAR_FBCTL_TS_TS); + +#ifdef CONFIG_FSL_I2C +	out_be16(&gpio->par_feci2c, +		GPIO_PAR_FECI2C_SCL_SCL | GPIO_PAR_FECI2C_SDA_SDA); +#endif +#endif		/* CONFIG_MCF5445x */ + +	/* FlexBus Chipselect */ +	init_fbcs();  	/*  	 * now the flash base address is no longer at 0 (Newer ColdFire family @@ -116,11 +229,6 @@ void cpu_init_f(void)  	if (CONFIG_SYS_CS0_BASE != 0)  		setvbr(CONFIG_SYS_CS0_BASE); -#ifdef CONFIG_FSL_I2C -	out_be16(&gpio->par_feci2c, -		GPIO_PAR_FECI2C_SCL_SCL | GPIO_PAR_FECI2C_SDA_SDA); -#endif -  	icache_enable();  } @@ -143,9 +251,95 @@ int cpu_init_r(void)  void uart_port_conf(int port)  {  	gpio_t *gpio = (gpio_t *) MMAP_GPIO; +#ifdef CONFIG_MCF5441x +	pm_t *pm = (pm_t *) MMAP_PM; +#endif  	/* Setup Ports: */  	switch (port) { +#ifdef CONFIG_MCF5441x +	case 0: +		/* UART0 */ +		out_8(&pm->pmcr0, 24); +		clrbits_8(&gpio->par_uart0, +			~(GPIO_PAR_UART0_U0RXD_MASK | GPIO_PAR_UART0_U0TXD_MASK)); +		setbits_8(&gpio->par_uart0, +			GPIO_PAR_UART0_U0RXD_U0RXD | GPIO_PAR_UART0_U0TXD_U0TXD); +		break; +	case 1: +		/* UART1 */ +		out_8(&pm->pmcr0, 25); +		clrbits_8(&gpio->par_uart1, +			~(GPIO_PAR_UART1_U1RXD_MASK | GPIO_PAR_UART1_U1TXD_MASK)); +		setbits_8(&gpio->par_uart1, +			GPIO_PAR_UART1_U1RXD_U1RXD | GPIO_PAR_UART1_U1TXD_U1TXD); +		break; +	case 2: +		/* UART2 */ +		out_8(&pm->pmcr0, 26); +		clrbits_8(&gpio->par_uart2, +			~(GPIO_PAR_UART2_U2RXD_MASK | GPIO_PAR_UART2_U2TXD_MASK)); +		setbits_8(&gpio->par_uart2, +			GPIO_PAR_UART2_U2RXD_U2RXD | GPIO_PAR_UART2_U2TXD_U2TXD); +		break; +	case 3: +		/* UART3 */ +		out_8(&pm->pmcr0, 27); +		clrbits_8(&gpio->par_dspi0, +			~(GPIO_PAR_DSPI0_SIN_MASK | GPIO_PAR_DSPI0_SOUT_MASK)); +		setbits_8(&gpio->par_dspi0, +			GPIO_PAR_DSPI0_SIN_U3RXD | GPIO_PAR_DSPI0_SOUT_U3TXD); +		break; +	case 4: +		/* UART4 */ +		out_8(&pm->pmcr1, 24); +		clrbits_8(&gpio->par_uart0, +			~(GPIO_PAR_UART0_U0CTS_MASK | GPIO_PAR_UART0_U0RTS_MASK)); +		setbits_8(&gpio->par_uart0, +			GPIO_PAR_UART0_U0CTS_U4TXD | GPIO_PAR_UART0_U0RTS_U4RXD); +		break; +	case 5: +		/* UART5 */ +		out_8(&pm->pmcr1, 25); +		clrbits_8(&gpio->par_uart1, +			~(GPIO_PAR_UART1_U1CTS_MASK | GPIO_PAR_UART1_U1RTS_MASK)); +		setbits_8(&gpio->par_uart1, +			GPIO_PAR_UART1_U1CTS_U5TXD | GPIO_PAR_UART1_U1RTS_U5RXD); +		break; +	case 6: +		/* UART6 */ +		out_8(&pm->pmcr1, 26); +		clrbits_8(&gpio->par_uart2, +			~(GPIO_PAR_UART2_U2CTS_MASK | GPIO_PAR_UART2_U2RTS_MASK)); +		setbits_8(&gpio->par_uart2, +			GPIO_PAR_UART2_U2CTS_U6TXD | GPIO_PAR_UART2_U2RTS_U6RXD); +		break; +	case 7: +		/* UART7 */ +		out_8(&pm->pmcr1, 27); +		clrbits_8(&gpio->par_ssi0h, ~GPIO_PAR_SSI0H_RXD_MASK); +		clrbits_8(&gpio->par_ssi0l, ~GPIO_PAR_SSI0L_BCLK_MASK); +		setbits_8(&gpio->par_ssi0h, GPIO_PAR_SSI0H_FS_U7TXD); +		setbits_8(&gpio->par_ssi0l, GPIO_PAR_SSI0L_BCLK_U7RXD); +		break; +	case 8: +		/* UART8 */ +		out_8(&pm->pmcr0, 28); +		clrbits_8(&gpio->par_cani2c, +			~(GPIO_PAR_CANI2C_I2C0SCL_MASK | GPIO_PAR_CANI2C_I2C0SDA_MASK)); +		setbits_8(&gpio->par_cani2c, +			GPIO_PAR_CANI2C_I2C0SCL_U8TXD | GPIO_PAR_CANI2C_I2C0SDA_U8RXD); +		break; +	case 9: +		/* UART9 */ +		out_8(&pm->pmcr1, 29); +		clrbits_8(&gpio->par_cani2c, +			~(GPIO_PAR_CANI2C_CAN1TX_MASK | GPIO_PAR_CANI2C_CAN1RX_MASK)); +		setbits_8(&gpio->par_cani2c, +			GPIO_PAR_CANI2C_CAN1TX_U9TXD | GPIO_PAR_CANI2C_CAN1RX_U9RXD); +		break; +#endif +#ifdef CONFIG_MCF5445x  	case 0:  		clrbits_8(&gpio->par_uart,  			GPIO_PAR_UART_U0TXD_U0TXD | GPIO_PAR_UART_U0RXD_U0RXD); @@ -178,6 +372,7 @@ void uart_port_conf(int port)  			GPIO_PAR_FECI2C_SCL_U2TXD | GPIO_PAR_FECI2C_SDA_U2RXD);  #endif  		break; +#endif	/* CONFIG_MCF5445x */  	}  } @@ -187,6 +382,7 @@ int fecpin_setclear(struct eth_device *dev, int setclear)  	gpio_t *gpio = (gpio_t *) MMAP_GPIO;  	struct fec_info_s *info = (struct fec_info_s *)dev->priv; +#ifdef CONFIG_MCF5445x  	if (setclear) {  #ifdef CONFIG_SYS_FEC_NO_SHARED_PHY  		if (info->iobase == CONFIG_SYS_FEC0_IOBASE) @@ -224,6 +420,21 @@ int fecpin_setclear(struct eth_device *dev, int setclear)  #endif  		}  	} +#endif	/* CONFIG_MCF5445x */ + +#ifdef CONFIG_MCF5441x +	if (setclear) { +		out_8(&gpio->par_fec, 0x03); +		out_8(&gpio->srcr_fec, 0x0F); +		clrsetbits_8(&gpio->par_simp0h, ~GPIO_PAR_SIMP0H_DAT_MASK, +			GPIO_PAR_SIMP0H_DAT_GPIO); +		clrsetbits_8(&gpio->pddr_g, ~GPIO_PDDR_G4_MASK, +			GPIO_PDDR_G4_OUTPUT); +		clrbits_8(&gpio->podr_g, ~GPIO_PODR_G4_MASK); + +	} else +		clrbits_8(&gpio->par_fec, ~GPIO_PAR_FEC_FEC_MASK); +#endif  	return 0;  }  #endif @@ -233,10 +444,24 @@ void cfspi_port_conf(void)  {  	gpio_t *gpio = (gpio_t *) MMAP_GPIO; +#ifdef CONFIG_MCF5445x  	out_8(&gpio->par_dspi,  		GPIO_PAR_DSPI_SIN_SIN |  		GPIO_PAR_DSPI_SOUT_SOUT |  		GPIO_PAR_DSPI_SCK_SCK); +#endif + +#ifdef CONFIG_MCF5441x +	pm_t *pm = (pm_t *) MMAP_PM; + +	out_8(&gpio->par_dspi0, +		GPIO_PAR_DSPI0_SIN_DSPI0SIN | GPIO_PAR_DSPI0_SOUT_DSPI0SOUT | +		GPIO_PAR_DSPI0_SCK_DSPI0SCK); +	out_8(&gpio->srcr_dspiow, 3); + +	/* DSPI0 */ +	out_8(&pm->pmcr0, 23); +#endif  }  int cfspi_claim_bus(uint bus, uint cs) @@ -250,6 +475,7 @@ int cfspi_claim_bus(uint bus, uint cs)  	/* Clear FIFO and resume transfer */  	clrbits_be32(&dspi->mcr, DSPI_MCR_CTXF | DSPI_MCR_CRXF); +#ifdef CONFIG_MCF5445x  	switch (cs) {  	case 0:  		clrbits_8(&gpio->par_dspi, GPIO_PAR_DSPI_PCS0_PCS0); @@ -272,6 +498,20 @@ int cfspi_claim_bus(uint bus, uint cs)  		setbits_8(&gpio->par_dspi, GPIO_PAR_DSPI_PCS5_PCS5);  		break;  	} +#endif + +#ifdef CONFIG_MCF5441x +	switch (cs) { +	case 0: +		clrbits_8(&gpio->par_dspi0, ~GPIO_PAR_DSPI0_PCS0_MASK); +		setbits_8(&gpio->par_dspi0, GPIO_PAR_DSPI0_PCS0_DSPI0PCS0); +		break; +	case 1: +		clrbits_8(&gpio->par_dspiow, GPIO_PAR_DSPIOW_DSPI0PSC1); +		setbits_8(&gpio->par_dspiow, GPIO_PAR_DSPIOW_DSPI0PSC1); +		break; +	} +#endif  	return 0;  } @@ -284,6 +524,7 @@ void cfspi_release_bus(uint bus, uint cs)  	/* Clear FIFO */  	clrbits_be32(&dspi->mcr, DSPI_MCR_CTXF | DSPI_MCR_CRXF); +#ifdef CONFIG_MCF5445x  	switch (cs) {  	case 0:  		clrbits_8(&gpio->par_dspi, GPIO_PAR_DSPI_PCS0_PCS0); @@ -301,5 +542,11 @@ void cfspi_release_bus(uint bus, uint cs)  		clrbits_8(&gpio->par_dspi, GPIO_PAR_DSPI_PCS5_PCS5);  		break;  	} +#endif + +#ifdef CONFIG_MCF5441x +	if (cs == 1) +		clrbits_8(&gpio->par_dspiow, GPIO_PAR_DSPIOW_DSPI0PSC1); +#endif  }  #endif diff --git a/arch/m68k/cpu/mcf5445x/speed.c b/arch/m68k/cpu/mcf5445x/speed.c index d71b5fe84..55d1c488a 100644 --- a/arch/m68k/cpu/mcf5445x/speed.c +++ b/arch/m68k/cpu/mcf5445x/speed.c @@ -57,8 +57,10 @@ void clock_enter_limp(int lpdiv)  	/* Round divider down to nearest power of two */  	for (i = 0, j = lpdiv; j != 1; j >>= 1, i++) ; +#ifdef CONFIG_MCF5445x  	/* Apply the divider to the system clock */  	clrsetbits_be16(&ccm->cdr, 0x0f00, CCM_CDR_LPDIV(i)); +#endif  	/* Enable Limp Mode */  	setbits_be16(&ccm->misccr, CCM_MISCCR_LIMP); @@ -81,12 +83,66 @@ void clock_exit_limp(void)  		;  } -/* - * get_clocks() fills in gd->cpu_clock and gd->bus_clk - */ -int get_clocks(void) +#ifdef CONFIG_MCF5441x +void setup_5441x_clocks(void)  { +	ccm_t *ccm = (ccm_t *)MMAP_CCM; +	pll_t *pll = (pll_t *)MMAP_PLL; +	int temp, vco = 0, bootmod_ccr, pdr; + +	bootmod_ccr = (in_be16(&ccm->ccr) & CCM_CCR_BOOTMOD) >> 14; + +	switch (bootmod_ccr) { +	case 0: +		out_be32(&pll->pcr, 0x00000013); +		out_be32(&pll->pdr, 0x00e70c61); +		clock_exit_limp(); +		break; +	case 2: +		break; +	case 3: +		break; +	} + +	/*Change frequency for Modelo SER1 USB host*/ +#ifdef CONFIG_LOW_MCFCLK +	temp = in_be32(&pll->pcr); +	temp &= ~0x3f; +	temp |= 5; +	out_be32(&pll->pcr, temp); + +	temp = in_be32(&pll->pdr); +	temp &= ~0x001f0000; +	temp |= 0x00040000; +	out_be32(&pll->pdr, temp); +	__asm__("tpf"); +#endif + +	setbits_be16(&ccm->misccr2, 0x02); + +	vco =  ((in_be32(&pll->pcr) & PLL_CR_FBKDIV_BITS) + 1) * +		CONFIG_SYS_INPUT_CLKSRC; +	gd->vco_clk = vco; + +	gd->inp_clk = CONFIG_SYS_INPUT_CLKSRC;	/* Input clock */ + +	pdr = in_be32(&pll->pdr); +	temp = (pdr & PLL_DR_OUTDIV1_BITS) + 1; +	gd->cpu_clk = vco / temp;	/* cpu clock */ +	gd->flb_clk = vco / temp;	/* FlexBus clock */ +	gd->flb_clk >>= 1; +	if (in_be16(ccm->misccr2) & 2)		/* fsys/4 */ +		gd->flb_clk >>= 1; +	temp = ((pdr & PLL_DR_OUTDIV2_BITS) >> 5) + 1; +	gd->bus_clk = vco / temp;	/* bus clock */ + +} +#endif + +#ifdef CONFIG_MCF5445x +void setup_5445x_clocks(void) +{  	ccm_t *ccm = (ccm_t *)MMAP_CCM;  	pll_t *pll = (pll_t *)MMAP_PLL;  	int pllmult_nopci[] = { 20, 10, 24, 18, 12, 6, 16, 8 }; @@ -220,6 +276,22 @@ int get_clocks(void)  #ifdef CONFIG_FSL_I2C  	gd->i2c1_clk = gd->bus_clk;  #endif +} +#endif + +/* get_clocks() fills in gd->cpu_clock and gd->bus_clk */ +int get_clocks(void) +{ +#ifdef CONFIG_MCF5441x +	setup_5441x_clocks(); +#endif +#ifdef CONFIG_MCF5445x +	setup_5445x_clocks(); +#endif + +#ifdef CONFIG_FSL_I2C +	gd->i2c1_clk = gd->bus_clk; +#endif  	return (0);  } diff --git a/arch/m68k/cpu/mcf5445x/start.S b/arch/m68k/cpu/mcf5445x/start.S index 99060141d..5fc944d2f 100644 --- a/arch/m68k/cpu/mcf5445x/start.S +++ b/arch/m68k/cpu/mcf5445x/start.S @@ -2,6 +2,9 @@   * Copyright (C) 2003	Josef Baumgartner <josef.baumgartner@telex.de>   * Based on code from Bernhard Kuhn <bkuhn@metrowerks.com>   * + * Copyright 2010-2012 Freescale Semiconductor, Inc. + * TsiChung Liew (Tsi-Chung.Liew@freescale.com) + *   * See file CREDITS for list of people who contributed to this   * project.   * @@ -21,8 +24,10 @@   * MA 02111-1307 USA   */ +#include <common.h>  #include <asm-offsets.h>  #include <config.h> +#include <timestamp.h>  #include "version.h"  #include <asm/cache.h> @@ -43,8 +48,9 @@  	addl	#60,%sp;		/* space for 15 regs */ \  	rte; -#if defined(CONFIG_CF_SBF) +#if defined(CONFIG_SERIAL_BOOT)  #define ASM_DRAMINIT	(asm_dram_init - CONFIG_SYS_TEXT_BASE + CONFIG_SYS_INIT_RAM_ADDR) +#define ASM_DRAMINIT_N	(asm_dram_init - TEXT_BASE)  #define ASM_SBF_IMG_HDR	(asm_sbf_img_hdr - CONFIG_SYS_TEXT_BASE + CONFIG_SYS_INIT_RAM_ADDR)  #endif @@ -55,10 +61,15 @@   *	These vectors are to catch any un-intended traps.   */  _vectors: -#if defined(CONFIG_CF_SBF) +#if defined(CONFIG_SERIAL_BOOT)  INITSP:	.long	0		/* Initial SP	*/ +#ifdef CONFIG_CF_SBF  INITPC:	.long	ASM_DRAMINIT	/* Initial PC 	*/ +#endif +#ifdef CONFIG_SYS_NAND_BOOT +INITPC:	.long	ASM_DRAMINIT_N	/* Initial PC 	*/ +#endif  #else @@ -95,7 +106,7 @@ vector1D:	.long	_FAULT	/* Autovector Level 5	*/  vector1E:	.long	_FAULT	/* Autovector Level 6	*/  vector1F:	.long	_FAULT	/* Autovector Level 7	*/ -#if !defined(CONFIG_CF_SBF) +#if !defined(CONFIG_SERIAL_BOOT)  /* TRAP #0 - #15 */  vector20_2F: @@ -138,16 +149,26 @@ vector192_255:  .long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT  #endif -#if defined(CONFIG_CF_SBF) +#if defined(CONFIG_SERIAL_BOOT)  	/* Image header: chksum 4 bytes, len 4 bytes, img dest 4 bytes */  asm_sbf_img_hdr:  	.long	0x00000000	/* checksum, not yet implemented */ -	.long	0x00030000	/* image length */ +	.long	0x00040000	/* image length */  	.long	CONFIG_SYS_TEXT_BASE	/* image to be relocated at */  asm_dram_init:  	move.w #0x2700,%sr		/* Mask off Interrupt */ +#ifdef CONFIG_SYS_NAND_BOOT +	/* for assembly stack */ +	move.l	#(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_RAM_CTRL), %d0 +	movec	%d0, %RAMBAR1 + +	move.l	#(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET), %sp +	clr.l %sp@- +#endif + +#ifdef CONFIG_CF_SBF  	move.l	#CONFIG_SYS_INIT_RAM_ADDR, %d0  	movec	%d0, %VBR @@ -180,7 +201,90 @@ asm_dram_init:  	move.l	#(CONFIG_SYS_CS0_CTRL), (%a1)  	move.l	#0xFC008004, %a1  	move.l	#(CONFIG_SYS_CS0_MASK), (%a1) +#endif			/* CONFIG_CF_SBF */ + +#ifdef CONFIG_MCF5441x +	/* TC: enable all peripherals, +	in the future only enable certain peripherals */ +	move.l	#0xFC04002D, %a1 + +#if defined(CONFIG_CF_SBF) +	move.b	#23, (%a1)	/* dspi */ +#endif +	move.b	#46, (%a1)	/* DDR */ + +	/* slew settings */ +	move.l	#0xEC094060, %a1 +	move.b	#0, (%a1) + +	/* use vco instead of cpu*2 clock for ddr clock */ +	move.l	#0xEC09001A, %a1 +	move.w	#0xE01D, (%a1) + +	/* DDR settings */ +	move.l	#0xFC0B8180, %a1 +	move.l	#0x00000000, (%a1) +	move.l	#0x40000000, (%a1) + +	move.l	#0xFC0B81AC, %a1 +	move.l	#0x01030203, (%a1) +	move.l	#0xFC0B8000, %a1 +	move.l	#0x01010101, (%a1)+	/* 0x00 */ +	move.l	#0x00000101, (%a1)+	/* 0x04 */ +	move.l	#0x01010100, (%a1)+	/* 0x08 */ +	move.l	#0x01010000, (%a1)+	/* 0x0C */ +	move.l	#0x00010101, (%a1)+	/* 0x10 */ +	move.l	#0xFC0B8018, %a1 +	move.l	#0x00010100, (%a1)+	/* 0x18 */ +	move.l	#0x00000001, (%a1)+	/* 0x1C */ +	move.l	#0x01000001, (%a1)+	/* 0x20 */ +	move.l	#0x00000100, (%a1)+	/* 0x24 */ +	move.l	#0x00010001, (%a1)+	/* 0x28 */ +	move.l	#0x00000200, (%a1)+	/* 0x2C */ +	move.l	#0x01000002, (%a1)+	/* 0x30 */ +	move.l	#0x00000000, (%a1)+	/* 0x34 */ +	move.l	#0x00000100, (%a1)+	/* 0x38 */ +	move.l	#0x02000100, (%a1)+	/* 0x3C */ +	move.l	#0x02000407, (%a1)+	/* 0x40 */ +	move.l	#0x02030007, (%a1)+	/* 0x44 */ +	move.l	#0x02000100, (%a1)+	/* 0x48 */ +	move.l	#0x0A030203, (%a1)+	/* 0x4C */ +	move.l	#0x00020708, (%a1)+	/* 0x50 */ +	move.l	#0x00050008, (%a1)+	/* 0x54 */ +	move.l	#0x04030002, (%a1)+	/* 0x58 */ +	move.l	#0x00000004, (%a1)+	/* 0x5C */ +	move.l	#0x020A0000, (%a1)+	/* 0x60 */ +	move.l	#0x0C00000E, (%a1)+	/* 0x64 */ +	move.l	#0x00002004, (%a1)+	/* 0x68 */ +	move.l	#0x00000000, (%a1)+	/* 0x6C */ +	move.l	#0x00100010, (%a1)+	/* 0x70 */ +	move.l	#0x00100010, (%a1)+	/* 0x74 */ +	move.l	#0x00000000, (%a1)+	/* 0x78 */ +	move.l	#0x07990000, (%a1)+	/* 0x7C */ +	move.l	#0xFC0B80A0, %a1 +	move.l	#0x00000000, (%a1)+	/* 0xA0 */ +	move.l	#0x00C80064, (%a1)+	/* 0xA4 */ +	move.l	#0x44520002, (%a1)+	/* 0xA8 */ +	move.l	#0x00C80023, (%a1)+	/* 0xAC */ +	move.l	#0xFC0B80B4, %a1 +	move.l	#0x0000C350, (%a1)	/* 0xB4 */ +	move.l	#0xFC0B80E0, %a1 +	move.l	#0x04000000, (%a1)+	/* 0xE0 */ +	move.l	#0x03000304, (%a1)+	/* 0xE4 */ +	move.l	#0x40040000, (%a1)+	/* 0xE8 */ +	move.l	#0xC0004004, (%a1)+	/* 0xEC */ +	move.l	#0x0642C000, (%a1)+	/* 0xF0 */ +	move.l	#0x00000642, (%a1)+	/* 0xF4 */ +	move.l	#0xFC0B8024, %a1 +	tpf +	move.l	#0x01000100, (%a1)	/* 0x24 */ + +	move.l	#0x2000, %d1 +	jsr	asm_delay +#endif		/* CONFIG_MCF5441x */ + +#ifdef CONFIG_MCF5445x  	/* Dram Initialization a1, a2, and d0 */  	/* mscr sdram */  	move.l	#0xFC0A4074, %a1 @@ -203,7 +307,9 @@ dramsz_loop:  	add.l	#1, %d1  	cmp.l	#1, %d2  	bne	dramsz_loop - +#ifdef CONFIG_SYS_NAND_BOOT +	beq	asm_nand_chk_status +#endif  	/* SDRAM Chip 0 and 1 */  	move.l	#(CONFIG_SYS_SDRAM_BASE), (%a1)  	or.l	%d1, (%a1) @@ -275,7 +381,9 @@ dramsz_loop:  	move.l	#2000, %d1  	jsr	asm_delay +#endif		/* CONFIG_MCF5445x */ +#ifdef CONFIG_CF_SBF  	/*  	 * DSPI Initialization  	 * a0 - general, sram - 0x80008000 - 32, see M54455EVB.h @@ -286,15 +394,28 @@ dramsz_loop:  	 */  	/* Enable pins for DSPI mode - chip-selects are enabled later */  asm_dspi_init: +#ifdef CONFIG_MCF5441x +	move.l	#0xEC09404E, %a1 +	move.l	#0xEC09404F, %a2 +	move.b	#0xFF, (%a1) +	move.b	#0x80, (%a2) +#endif + +#ifdef CONFIG_MCF5445x  	move.l	#0xFC0A4063, %a0  	move.b	#0x7F, (%a0) - +#endif  	/* Configure DSPI module */  	move.l	#0xFC05C000, %a0  	move.l	#0x80FF0C00, (%a0)	/* Master, clear TX/RX FIFO */  	move.l	#0xFC05C00C, %a0 +#ifdef CONFIG_MCF5441x +	move.l	#0x3E000016, (%a0) +#endif +#ifdef CONFIG_MCF5445x  	move.l	#0x3E000011, (%a0) +#endif  	move.l	#0xFC05C034, %a2	/* dtfr */  	move.l	#0xFC05C03B, %a3	/* drfr */ @@ -379,19 +500,148 @@ asm_dspi_rd_status:  	move.b	(%a3), %d1  	rts +#endif			/* CONFIG_CF_SBF */ + +#ifdef CONFIG_SYS_NAND_BOOT +	/* copy 4 boot pages to dram as soon as possible */ +	/* each page is 996 bytes (1056 total with 60 ECC bytes */ +	move.l  #0x00000000, %a1	/* src */ +	move.l	#TEXT_BASE, %a2		/* dst */ +	move.l	#0x3E0, %d0		/* sz in long */ + +asm_boot_nand_copy: +	move.l	(%a1)+, (%a2)+ +	subq.l	#1, %d0 +	bne	asm_boot_nand_copy + +	/* jump to memory and execute */ +	move.l	#(asm_nand_init), %a0 +	jmp	(%a0) + +asm_nand_init: +	/* exit nand boot-mode */ +	move.l	#0xFC0FFF30, %a1 +	or.l	#0x00000040, %d1 +	move.l	%d1, (%a1) + +	/* initialize general use internal ram */ +	move.l #0, %d0 +	move.l #(CACR_STATUS), %a1	/* CACR */ +	move.l #(ICACHE_STATUS), %a2	/* icache */ +	move.l #(DCACHE_STATUS), %a3	/* dcache */ +	move.l %d0, (%a1) +	move.l %d0, (%a2) +	move.l %d0, (%a3) + +	/* invalidate and disable cache */ +	move.l	#0x01004100, %d0	/* Invalidate cache cmd */ +	movec	%d0, %CACR		/* Invalidate cache */ +	move.l	#0, %d0 +	movec	%d0, %ACR0 +	movec	%d0, %ACR1 +	movec	%d0, %ACR2 +	movec	%d0, %ACR3 + +	/* Must disable global address */ +	move.l	#0xFC008000, %a1 +	move.l	#(CONFIG_SYS_CS0_BASE), (%a1) +	move.l	#0xFC008008, %a1 +	move.l	#(CONFIG_SYS_CS0_CTRL), (%a1) +	move.l	#0xFC008004, %a1 +	move.l	#(CONFIG_SYS_CS0_MASK), (%a1) + +	/* NAND port configuration */ +	move.l	#0xEC094048, %a1 +	move.b	#0xFD, (%a1)+ +	move.b	#0x5F, (%a1)+ +	move.b	#0x04, (%a1)+ + +	/* reset nand */ +	move.l  #0xFC0FFF38, %a1	/* isr */ +	move.l  #0x000e0000, (%a1) +	move.l	#0xFC0FFF08, %a2 +	move.l	#0x00000000, (%a2)+	/* car */ +	move.l	#0x11000000, (%a2)+	/* rar */ +	move.l	#0x00000000, (%a2)+	/* rpt */ +	move.l	#0x00000000, (%a2)+	/* rai */ +	move.l  #0xFC0FFF2c, %a2	/* cfg */ +	move.l  #0x00000000, (%a2)+	/* secsz */ +	move.l  #0x000e0681, (%a2)+ +	move.l  #0xFC0FFF04, %a2	/* cmd2 */ +	move.l  #0xFF404001, (%a2) +	move.l  #0x000e0000, (%a1) + +	move.l	#0x2000, %d1 +	jsr	asm_delay + +	/* setup nand */ +	move.l  #0xFC0FFF00, %a1 +	move.l  #0x30700000, (%a1)+	/* cmd1 */ +	move.l  #0x007EF000, (%a1)+	/* cmd2 */ + +	move.l  #0xFC0FFF2C, %a1 +	move.l  #0x00000841, (%a1)+	/* secsz */ +	move.l  #0x000e0681, (%a1)+	/* cfg */ + +	move.l	#100, %d4		/* 100 pages ~200KB */ +	move.l	#4, %d2			/* start at 4 */ +	move.l  #0xFC0FFF04, %a0	/* cmd2 */ +	move.l  #0xFC0FFF0C, %a1	/* rar */ +	move.l	#(TEXT_BASE + 0xF80), %a2	/* dst */ + +asm_nand_read: +	move.l	#0x11000000, %d0	/* rar */ +	or.l	%d2, %d0 +	move.l	%d0, (%a1) +	add.l	#1, %d2 + +	move.l	(%a0), %d0		/* cmd2 */ +	or.l	#1, %d0 +	move.l	%d0, (%a0) + +	move.l	#0x200, %d1 +	jsr	asm_delay + +asm_nand_chk_status: +	move.l  #0xFC0FFF38, %a4	/* isr */ +	move.l	(%a4), %d0 +	and.l	#0x40000000, %d0 +	tst.l	%d0 +	beq	asm_nand_chk_status + +	move.l  #0xFC0FFF38, %a4	/* isr */ +	move.l	(%a4), %d0 +	or.l	#0x000E0000, %d0 +	move.l	%d0, (%a4) + +	move.l	#0x200, %d3 +	move.l	#0xFC0FC000, %a3	/* buf 1 */ +asm_nand_copy: +	move.l	(%a3)+, (%a2)+ +	subq.l	#1, %d3 +	bgt	asm_nand_copy + +	subq.l	#1, %d4 +	bgt	asm_nand_read + +	/* jump to memory and execute */ +	move.l	#(TEXT_BASE + 0x400), %a0 +	jmp	(%a0) + +#endif			/* CONFIG_SYS_NAND_BOOT */  asm_delay:  	nop  	subq.l	#1, %d1  	bne	asm_delay  	rts -#endif			/* CONFIG_CF_SBF */ +#endif			/* CONFIG_CF_SBF || CONFIG_NAND_U_BOOT */  	.text  	. = 0x400  	.globl	_start  _start: -#if !defined(CONFIG_CF_SBF) +#if !defined(CONFIG_SERIAL_BOOT)  	nop  	nop  	move.w #0x2700,%sr		/* Mask off Interrupt */ @@ -418,12 +668,15 @@ _start:  	movec	%d0, %ACR1  	movec	%d0, %ACR2  	movec	%d0, %ACR3 +#else +	move.l	#(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_RAM_CTRL), %d0 +	movec	%d0, %RAMBAR1 +#endif  	/* set stackpointer to end of internal ram to get some stackspace for  	   the first c-code */  	move.l	#(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET), %sp  	clr.l %sp@- -#endif  	move.l #__got_start, %a5	/* put relocation table address to a5 */ diff --git a/arch/m68k/include/asm/cache.h b/arch/m68k/include/asm/cache.h index 5c9bb3083..f9e2d15f4 100644 --- a/arch/m68k/include/asm/cache.h +++ b/arch/m68k/include/asm/cache.h @@ -1,7 +1,7 @@  /*   * ColdFire cache   * - * Copyright (C) 2004-2010 Freescale Semiconductor, Inc. + * Copyright 2004-2012 Freescale Semiconductor, Inc.   * TsiChung Liew (Tsi-Chung.Liew@freescale.com)   *   * See file CREDITS for list of people who contributed to this @@ -37,10 +37,9 @@  #if defined(CONFIG_MCF547x_8x) || defined(CONFIG_MCF5445x)  #define CONFIG_CF_V4 -#if defined(CONFIG_MCF5441x) +#elif defined(CONFIG_MCF5441x)  #define CONFIG_CF_V4E		/* Four Extra ACRn */  #endif -#endif  /* ***** CACR ***** */  /* V2 Core */ @@ -87,7 +86,7 @@  #endif				/* CONFIG_CF_V3 */  /* V4 Core */ -#ifdef CONFIG_CF_V4 +#if defined(CONFIG_CF_V4) || defined(CONFIG_CF_V4E)  #define CF_CACR_DEC		(1 << 31)  #define CF_CACR_DW		(1 << 30) @@ -113,7 +112,7 @@  #define CF_CACR_IDSP		(1 << 7)  #define CF_CACR_EUSP		(1 << 5) -#ifdef CONFIG_MCF5445x +#if defined(CONFIG_MCF5445x) || defined(CONFIG_MCF5441x)  #define CF_CACR_IVO		(1 << 20)  #define CF_CACR_SPA		(1 << 14)  #else @@ -148,7 +147,7 @@  #endif				/* CONFIG_CF_V2 */  /* V4 Core */ -#ifdef CONFIG_CF_V4 +#if defined(CONFIG_CF_V4) || defined(CONFIG_CF_V4E)  #define CF_ACR_AMM		(1 << 10)  #define CF_ACR_SP		(1 << 3)  #endif				/* CONFIG_CF_V4 */ diff --git a/arch/m68k/include/asm/immap.h b/arch/m68k/include/asm/immap.h index e83ce08d5..2aab463a9 100644 --- a/arch/m68k/include/asm/immap.h +++ b/arch/m68k/include/asm/immap.h @@ -1,7 +1,7 @@  /*   * ColdFire Internal Memory Map and Defines   * - * Copyright (C) 2004-2007 Freescale Semiconductor, Inc. + * Copyright 2004-2012 Freescale Semiconductor, Inc.   * TsiChung Liew (Tsi-Chung.Liew@freescale.com)   *   * See file CREDITS for list of people who contributed to this @@ -318,6 +318,47 @@  #define CONFIG_SYS_NUM_IRQS		(128)  #endif				/* CONFIG_M5329 && CONFIG_M5373 */ +#if defined(CONFIG_M54418) +#include <asm/immap_5441x.h> +#include <asm/m5441x.h> + +#define CONFIG_SYS_FEC0_IOBASE		(MMAP_FEC0) +#define CONFIG_SYS_FEC1_IOBASE		(MMAP_FEC1) + +#if (CONFIG_SYS_UART_PORT < 4) +#define CONFIG_SYS_UART_BASE		(MMAP_UART0 + \ +					(CONFIG_SYS_UART_PORT * 0x4000)) +#else +#define CONFIG_SYS_UART_BASE		(MMAP_UART4 + \ +					((CONFIG_SYS_UART_PORT - 4) * 0x4000)) +#endif + +#define MMAP_DSPI			MMAP_DSPI0 +#define CONFIG_SYS_MCFRTC_BASE		(MMAP_RTC) + +/* Timer */ +#ifdef CONFIG_MCFTMR +#define CONFIG_SYS_UDELAY_BASE		(MMAP_DTMR0) +#define CONFIG_SYS_TMR_BASE		(MMAP_DTMR1) +#define CONFIG_SYS_TMRPND_REG	(((int0_t *)(CONFIG_SYS_INTR_BASE))->iprh0) +#define CONFIG_SYS_TMRINTR_NO		(INT0_HI_DTMR1) +#define CONFIG_SYS_TMRINTR_MASK		(INTC_IPRH_INT33) +#define CONFIG_SYS_TMRINTR_PEND		(CONFIG_SYS_TMRINTR_MASK) +#define CONFIG_SYS_TMRINTR_PRI		(6) +#define CONFIG_SYS_TIMER_PRESCALER	(((gd->bus_clk / 1000000) - 1) << 8) +#endif + +#ifdef CONFIG_MCFPIT +#define CONFIG_SYS_UDELAY_BASE		(MMAP_PIT0) +#define CONFIG_SYS_PIT_BASE		(MMAP_PIT1) +#define CONFIG_SYS_PIT_PRESCALE	(6) +#endif + +#define CONFIG_SYS_INTR_BASE		(MMAP_INTC0) +#define CONFIG_SYS_NUM_IRQS		(128) + +#endif				/* CONFIG_M54418 */ +  #if defined(CONFIG_M54451) || defined(CONFIG_M54455)  #include <asm/immap_5445x.h>  #include <asm/m5445x.h> diff --git a/arch/m68k/include/asm/immap_5441x.h b/arch/m68k/include/asm/immap_5441x.h new file mode 100644 index 000000000..300f4d286 --- /dev/null +++ b/arch/m68k/include/asm/immap_5441x.h @@ -0,0 +1,387 @@ +/* + * MCF5441x Internal Memory Map + * + * Copyright 2010-2012 Freescale Semiconductor, Inc. + * TsiChung Liew (Tsi-Chung.Liew@freescale.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 __IMMAP_5441X__ +#define __IMMAP_5441X__ + +/* Module Base Addresses */ +#define MMAP_XBS	0xFC004000 +#define MMAP_FBCS	0xFC008000 +#define MMAP_CAN0	0xFC020000 +#define MMAP_CAN1	0xFC024000 +#define MMAP_I2C1	0xFC038000 +#define MMAP_DSPI1	0xFC03C000 +#define MMAP_SCM	0xFC040000 +#define MMAP_PM		0xFC04002C +#define MMAP_EDMA	0xFC044000 +#define MMAP_INTC0	0xFC048000 +#define MMAP_INTC1	0xFC04C000 +#define MMAP_INTC2	0xFC050000 +#define MMAP_IACK	0xFC054000 +#define MMAP_I2C0	0xFC058000 +#define MMAP_DSPI0	0xFC05C000 +#define MMAP_UART0	0xFC060000 +#define MMAP_UART1	0xFC064000 +#define MMAP_UART2	0xFC068000 +#define MMAP_UART3	0xFC06C000 +#define MMAP_DTMR0	0xFC070000 +#define MMAP_DTMR1	0xFC074000 +#define MMAP_DTMR2	0xFC078000 +#define MMAP_DTMR3	0xFC07C000 +#define MMAP_PIT0	0xFC080000 +#define MMAP_PIT1	0xFC084000 +#define MMAP_PIT2	0xFC088000 +#define MMAP_PIT3	0xFC08C000 +#define MMAP_EPORT0	0xFC090000 +#define MMAP_ADC	0xFC094000 +#define MMAP_DAC0	0xFC098000 +#define MMAP_DAC1	0xFC09C000 +#define MMAP_RRTC	0xFC0A8000 +#define MMAP_SIM	0xFC0AC000 +#define MMAP_USBOTG	0xFC0B0000 +#define MMAP_USBEHCI	0xFC0B4000 +#define MMAP_SDRAM	0xFC0B8000 +#define MMAP_SSI0	0xFC0BC000 +#define MMAP_PLL	0xFC0C0000 +#define MMAP_RNG	0xFC0C4000 +#define MMAP_SSI1	0xFC0C8000 +#define MMAP_ESDHC	0xFC0CC000 +#define MMAP_FEC0	0xFC0D4000 +#define MMAP_FEC1	0xFC0D8000 +#define MMAP_L2_SW0	0xFC0DC000 +#define MMAP_L2_SW1	0xFC0E0000 + +#define MMAP_NFC_RAM	0xFC0FC000 +#define MMAP_NFC	0xFC0FF000 + +#define MMAP_1WIRE	0xEC008000 +#define MMAP_I2C2	0xEC010000 +#define MMAP_I2C3	0xEC014000 +#define MMAP_I2C4	0xEC018000 +#define MMAP_I2C5	0xEC01C000 +#define MMAP_DSPI2	0xEC038000 +#define MMAP_DSPI3	0xEC03C000 +#define MMAP_UART4	0xEC060000 +#define MMAP_UART5	0xEC064000 +#define MMAP_UART6	0xEC068000 +#define MMAP_UART7	0xEC06C000 +#define MMAP_UART8	0xEC070000 +#define MMAP_UART9	0xEC074000 +#define MMAP_RCM	0xEC090000 +#define MMAP_CCM	0xEC090000 +#define MMAP_GPIO	0xEC094000 + +#include <asm/coldfire/crossbar.h> +#include <asm/coldfire/dspi.h> +#include <asm/coldfire/edma.h> +#include <asm/coldfire/eport.h> +#include <asm/coldfire/flexbus.h> +#include <asm/coldfire/flexcan.h> +#include <asm/coldfire/intctrl.h> +#include <asm/coldfire/ssi.h> + +/* Serial Boot Facility (SBF) */ +typedef struct sbf { +	u8 resv0[0x18]; +	u16 sbfsr;		/* Serial Boot Facility Status */ +	u8 resv1[0x6]; +	u16 sbfcr;		/* Serial Boot Facility Control */ +} sbf_t; + +/* Reset Controller Module (RCM) */ +typedef struct rcm { +	u8 rcr; +	u8 rsr; +} rcm_t; + +/* Chip Configuration Module (CCM) */ +typedef struct ccm { +	u8 ccm_resv0[0x4];	/* 0x00 */ +	u16 ccr;		/* 0x04 Chip Configuration */ +	u8 resv1[0x2];		/* 0x06 */ +	u16 rcon;		/* 0x08 Reset Configuration */ +	u16 cir;		/* 0x0A Chip Identification */ +	u8 resv2[0x2];		/* 0x0C */ +	u16 misccr;		/* 0x0E Miscellaneous Control */ +	u16 cdrh;		/* 0x10 Clock Divider */ +	u16 cdrl;		/* 0x12 Clock Divider */ +	u16 uocsr;		/* 0x14 USB On-the-Go Controller Status */ +	u16 uhcsr;		/* 0x16 */ +	u16 misccr3;		/* 0x18 */ +	u16 misccr2;		/* 0x1A */ +	u16 adctsr;		/* 0x1C */ +	u16 dactsr;		/* 0x1E */ +	u16 sbfsr;		/* 0x20 */ +	u16 sbfcr;		/* 0x22 */ +	u32 fnacr;		/* 0x24 */ +} ccm_t; + +/* General Purpose I/O Module (GPIO) */ +typedef struct gpio { +	u8 podr_a;		/* 0x00 */ +	u8 podr_b;		/* 0x01 */ +	u8 podr_c;		/* 0x02 */ +	u8 podr_d;		/* 0x03 */ +	u8 podr_e;		/* 0x04 */ +	u8 podr_f;		/* 0x05 */ +	u8 podr_g;		/* 0x06 */ +	u8 podr_h;		/* 0x07 */ +	u8 podr_i;		/* 0x08 */ +	u8 podr_j;		/* 0x09 */ +	u8 podr_k;		/* 0x0A */ +	u8 rsvd0;		/* 0x0B */ + +	u8 pddr_a;		/* 0x0C */ +	u8 pddr_b;		/* 0x0D */ +	u8 pddr_c;		/* 0x0E */ +	u8 pddr_d;		/* 0x0F */ +	u8 pddr_e;		/* 0x10 */ +	u8 pddr_f;		/* 0x11 */ +	u8 pddr_g;		/* 0x12 */ +	u8 pddr_h;		/* 0x13 */ +	u8 pddr_i;		/* 0x14 */ +	u8 pddr_j;		/* 0x15 */ +	u8 pddr_k;		/* 0x16 */ +	u8 rsvd1;		/* 0x17 */ + +	u8 ppdsdr_a;		/* 0x18 */ +	u8 ppdsdr_b;		/* 0x19 */ +	u8 ppdsdr_c;		/* 0x1A */ +	u8 ppdsdr_d;		/* 0x1B */ +	u8 ppdsdr_e;		/* 0x1C */ +	u8 ppdsdr_f;		/* 0x1D */ +	u8 ppdsdr_g;		/* 0x1E */ +	u8 ppdsdr_h;		/* 0x1F */ +	u8 ppdsdr_i;		/* 0x20 */ +	u8 ppdsdr_j;		/* 0x21 */ +	u8 ppdsdr_k;		/* 0x22 */ +	u8 rsvd2;		/* 0x23 */ + +	u8 pclrr_a;		/* 0x24 */ +	u8 pclrr_b;		/* 0x25 */ +	u8 pclrr_c;		/* 0x26 */ +	u8 pclrr_d;		/* 0x27 */ +	u8 pclrr_e;		/* 0x28 */ +	u8 pclrr_f;		/* 0x29 */ +	u8 pclrr_g;		/* 0x2A */ +	u8 pclrr_h;		/* 0x2B */ +	u8 pclrr_i;		/* 0x2C */ +	u8 pclrr_j;		/* 0x2D */ +	u8 pclrr_k;		/* 0x2E */ +	u8 rsvd3;		/* 0x2F */ + +	u16 pcr_a;		/* 0x30 */ +	u16 pcr_b;		/* 0x32 */ +	u16 pcr_c;		/* 0x34 */ +	u16 pcr_d;		/* 0x36 */ +	u16 pcr_e;		/* 0x38 */ +	u16 pcr_f;		/* 0x3A */ +	u16 pcr_g;		/* 0x3C */ +	u16 pcr_h;		/* 0x3E */ +	u16 pcr_i;		/* 0x40 */ +	u16 pcr_j;		/* 0x42 */ +	u16 pcr_k;		/* 0x44 */ +	u16 rsvd4;		/* 0x46 */ + +	u8 par_fbctl;		/* 0x48 */ +	u8 par_be;		/* 0x49 */ +	u8 par_cs;		/* 0x4A */ +	u8 par_cani2c;		/* 0x4B */ +	u8 par_irqh;		/* 0x4C */ +	u8 par_irql;		/* 0x4D */ +	u8 par_dspi0;		/* 0x4E */ +	u8 par_dspiow;		/* 0x4F */ +	u8 par_timer;		/* 0x50 */ +	u8 par_uart2;		/* 0x51 */ +	u8 par_uart1;		/* 0x52 */ +	u8 par_uart0;		/* 0x53 */ +	u8 par_sdhch;		/* 0x54 */ +	u8 par_sdhcl;		/* 0x55 */ +	u8 par_simp0h;		/* 0x56 */ +	u8 par_simp1h;		/* 0x57 */ +	u8 par_ssi0h;		/* 0x58 */ +	u8 par_ssi0l;		/* 0x59 */ +	u8 par_dbg1h;		/* 0x5A */ +	u8 par_dbg0h;		/* 0x5B */ +	u8 par_dbgl;		/* 0x5C */ +	u8 rsvd5;		/* 0x5D */ +	u8 par_fec;		/* 0x5E */ +	u8 rsvd6;		/* 0x5F */ + +	u8 mscr_sdram;		/* 0x60 */ +	u8 rsvd7[3];		/* 0x61-0x63 */ + +	u8 srcr_fb1;		/* 0x64 */ +	u8 srcr_fb2;		/* 0x65 */ +	u8 srcr_fb3;		/* 0x66 */ +	u8 srcr_fb4;		/* 0x67 */ +	u8 srcr_dspiow;		/* 0x68 */ +	u8 srcr_cani2c;		/* 0x69 */ +	u8 srcr_irq;		/* 0x6A */ +	u8 srcr_timer;		/* 0x6B */ +	u8 srcr_uart;		/* 0x6C */ +	u8 srcr_fec;		/* 0x6D */ +	u8 srcr_sdhc;		/* 0x6E */ +	u8 srcr_simp0;		/* 0x6F */ +	u8 srcr_ssi0;		/* 0x70 */ +	u8 rsvd8[3];		/* 0x71-0x73 */ + +	u16 urts_pol;		/* 0x74 */ +	u16 ucts_pol;		/* 0x76 */ +	u16 utxd_wom;		/* 0x78 */ +	u32 urxd_wom;		/* 0x7c */ + +	u32 hcr1;		/* 0x80 */ +	u32 hcr0;		/* 0x84 */ +} gpio_t; + +/* SDRAM Controller (SDRAMC) */ +typedef struct sdramc { +	u32 cr00;		/* 0x00 */ +	u32 cr01;		/* 0x04 */ +	u32 cr02;		/* 0x08 */ +	u32 cr03;		/* 0x0C */ +	u32 cr04;		/* 0x10 */ +	u32 cr05;		/* 0x14 */ +	u32 cr06;		/* 0x18 */ +	u32 cr07;		/* 0x1C */ + +	u32 cr08;		/* 0x20 */ +	u32 cr09;		/* 0x24 */ +	u32 cr10;		/* 0x28 */ +	u32 cr11;		/* 0x2C */ +	u32 cr12;		/* 0x30 */ +	u32 cr13;		/* 0x34 */ +	u32 cr14;		/* 0x38 */ +	u32 cr15;		/* 0x3C */ + +	u32 cr16;		/* 0x40 */ +	u32 cr17;		/* 0x44 */ +	u32 cr18;		/* 0x48 */ +	u32 cr19;		/* 0x4C */ +	u32 cr20;		/* 0x50 */ +	u32 cr21;		/* 0x54 */ +	u32 cr22;		/* 0x58 */ +	u32 cr23;		/* 0x5C */ + +	u32 cr24;		/* 0x60 */ +	u32 cr25;		/* 0x64 */ +	u32 cr26;		/* 0x68 */ +	u32 cr27;		/* 0x6C */ +	u32 cr28;		/* 0x70 */ +	u32 cr29;		/* 0x74 */ +	u32 cr30;		/* 0x78 */ +	u32 cr31;		/* 0x7C */ + +	u32 cr32;		/* 0x80 */ +	u32 cr33;		/* 0x84 */ +	u32 cr34;		/* 0x88 */ +	u32 cr35;		/* 0x8C */ +	u32 cr36;		/* 0x90 */ +	u32 cr37;		/* 0x94 */ +	u32 cr38;		/* 0x98 */ +	u32 cr39;		/* 0x9C */ + +	u32 cr40;		/* 0xA0 */ +	u32 cr41;		/* 0xA4 */ +	u32 cr42;		/* 0xA8 */ +	u32 cr43;		/* 0xAC */ +	u32 cr44;		/* 0xB0 */ +	u32 cr45;		/* 0xB4 */ +	u32 cr46;		/* 0xB8 */ +	u32 cr47;		/* 0xBC */ +	u32 cr48;		/* 0xC0 */ +	u32 cr49;		/* 0xC4 */ +	u32 cr50;		/* 0xC8 */ +	u32 cr51;		/* 0xCC */ +	u32 cr52;		/* 0xD0 */ +	u32 cr53;		/* 0xD4 */ +	u32 cr54;		/* 0xD8 */ +	u32 cr55;		/* 0xDC */ +	u32 cr56;		/* 0xE0 */ +	u32 cr57;		/* 0xE4 */ +	u32 cr58;		/* 0xE8 */ +	u32 cr59;		/* 0xEC */ +	u32 cr60;		/* 0xF0 */ +	u32 cr61;		/* 0xF4 */ +	u32 cr62;		/* 0xF8 */ +	u32 cr63;		/* 0xFC */ + +	u32 rsvd3[32];		/* 0xF4-0x1A8 */ + +	u32 rcrcr;		/* 0x180 */ +	u32 swrcr;		/* 0x184 */ +	u32 rcr;		/* 0x188 */ +	u32 msovr;		/* 0x18C */ +	u32 rcrdbg;		/* 0x190 */ +	u32 sl0adj;		/* 0x194 */ +	u32 sl1adj;		/* 0x198 */ +	u32 sl2adj;		/* 0x19C */ +	u32 sl3adj;		/* 0x1A0 */ +	u32 sl4adj;		/* 0x1A4 */ +	u32 flight_tm;		/* 0x1A8 */ +	u32 padcr;		/* 0x1AC */ +} sdramc_t; + +/* Phase Locked Loop (PLL) */ +typedef struct pll { +	u32 pcr;		/* Control */ +	u32 pdr;		/* Divider */ +	u32 psr;		/* Status */ +} pll_t; + +typedef struct scm { +	u8 rsvd1[19];		/* 0x00 - 0x12 */ +	u8 wcr;			/* 0x13 */ +	u16 rsvd2;		/* 0x14 - 0x15 */ +	u16 cwcr;		/* 0x16 */ +	u8 rsvd3[3];		/* 0x18 - 0x1A */ +	u8 cwsr;		/* 0x1B */ +	u8 rsvd4[3];		/* 0x1C - 0x1E */ +	u8 scmisr;		/* 0x1F */ +	u32 rsvd5;		/* 0x20 - 0x23 */ +	u32 bcr;		/* 0x24 */ +	u8 rsvd6[72];		/* 0x28 - 0x6F */ +	u32 cfadr;		/* 0x70 */ +	u8 rsvd7;		/* 0x74 */ +	u8 cfier;		/* 0x75 */ +	u8 cfloc;		/* 0x76 */ +	u8 cfatr;		/* 0x77 */ +	u32 rsvd8;		/* 0x78 - 0x7B */ +	u32 cfdtr;		/* 0x7C */ +} scm_t; + +typedef struct pm { +	u8 pmsr0;		/* */ +	u8 pmcr0; +	u8 pmsr1; +	u8 pmcr1; +	u32 pmhr0; +	u32 pmlr0; +	u32 pmhr1; +	u32 pmlr1; +} pm_t; + +#endif				/* __IMMAP_5441X__ */ diff --git a/arch/m68k/include/asm/m5441x.h b/arch/m68k/include/asm/m5441x.h new file mode 100644 index 000000000..f5c82d4b5 --- /dev/null +++ b/arch/m68k/include/asm/m5441x.h @@ -0,0 +1,887 @@ +/* + * MCF5441X Internal Memory Map + * + * Copyright 2010-2012 Freescale Semiconductor, Inc. + * TsiChung Liew (Tsi-Chung.Liew@freescale.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 __MCF5441X__ +#define __MCF5441X__ + +/* Interrupt Controller (INTC) */ +#define INT0_LO_RSVD0			(0) +#define INT0_LO_EPORT1			(1) +#define INT0_LO_EPORT2			(2) +#define INT0_LO_EPORT3			(3) +#define INT0_LO_EPORT4			(4) +#define INT0_LO_EPORT5			(5) +#define INT0_LO_EPORT6			(6) +#define INT0_LO_EPORT7			(7) +#define INT0_LO_EDMA_00		(8) +#define INT0_LO_EDMA_01		(9) +#define INT0_LO_EDMA_02		(10) +#define INT0_LO_EDMA_03		(11) +#define INT0_LO_EDMA_04		(12) +#define INT0_LO_EDMA_05		(13) +#define INT0_LO_EDMA_06		(14) +#define INT0_LO_EDMA_07		(15) +#define INT0_LO_EDMA_08		(16) +#define INT0_LO_EDMA_09		(17) +#define INT0_LO_EDMA_10		(18) +#define INT0_LO_EDMA_11		(19) +#define INT0_LO_EDMA_12		(20) +#define INT0_LO_EDMA_13		(21) +#define INT0_LO_EDMA_14		(22) +#define INT0_LO_EDMA_15		(23) +#define INT0_LO_EDMA_ERR		(24) +#define INT0_LO_SCM			(25) +#define INT0_LO_UART0			(26) +#define INT0_LO_UART1			(27) +#define INT0_LO_UART2			(28) +#define INT0_LO_UART3			(29) +#define INT0_LO_I2C0			(30) +#define INT0_LO_DSPI0			(31) +#define INT0_HI_DTMR0			(32) +#define INT0_HI_DTMR1			(33) +#define INT0_HI_DTMR2			(34) +#define INT0_HI_DTMR3			(35) +#define INT0_HI_MACNET0_TXF		(36) +#define INT0_HI_MACNET0_TXB		(37) +#define INT0_HI_MACNET0_UN		(38) +#define INT0_HI_MACNET0_RL		(39) +#define INT0_HI_MACNET0_RXF		(40) +#define INT0_HI_MACNET0_RXB		(41) +#define INT0_HI_MACNET0_MII		(42) +#define INT0_HI_MACNET0_LC		(43) +/* not used 44 */ +#define INT0_HI_MACNET0_GRA		(45) +#define INT0_HI_MACNET0_EBERR		(46) +#define INT0_HI_MACNET0_BABT		(47) +#define INT0_HI_MACNET0_BABR		(48) +#define INT0_HI_MACNET1_TXF		(49) +#define INT0_HI_MACNET1_TXB		(50) +#define INT0_HI_MACNET1_UN		(51) +#define INT0_HI_MACNET1_RL		(52) +#define INT0_HI_MACNET1_RXF		(53) +#define INT0_HI_MACNET1_RXB		(54) +#define INT0_HI_MACNET1_MII		(55) +#define INT0_HI_MACNET1_LC		(56) +/* not used 57 */ +#define INT0_HI_MACNET1_GRA		(58) +#define INT0_HI_MACNET1_EBERR		(59) +#define INT0_HI_MACNET1_BABT		(60) +#define INT0_HI_MACNET1_BABR		(61) +#define INT0_HI_SCMIR			(62) +#define INT0_HI_OW			(63) + +#define INT1_LO_CAN0_IFG		(0) +#define INT1_LO_CAN0_BOFF		(1) +/* not used 2 */ +#define INT1_LO_CAN0_TXRXWRN		(3) +#define INT1_LO_CAN1_IFG		(4) +#define INT1_LO_CAN1_BOFF		(5) +/* not used 6 */ +#define INT1_LO_CAN1_TXRXWRN		(7) +#define INT1_LO_EDMA_16		(8) +#define INT1_LO_EDMA_17		(9) +#define INT1_LO_EDMA_18		(10) +#define INT1_LO_EDMA_19		(11) +#define INT1_LO_EDMA_20		(12) +#define INT1_LO_EDMA_21		(13) +#define INT1_LO_EDMA_22		(14) +#define INT1_LO_EDMA_23		(15) +#define INT1_LO_EDMA_24		(16) +#define INT1_LO_EDMA_25		(17) +#define INT1_LO_EDMA_26		(18) +#define INT1_LO_EDMA_27		(19) +#define INT1_LO_EDMA_28		(20) +#define INT1_LO_EDMA_29		(21) +#define INT1_LO_EDMA_30		(22) +#define INT1_LO_EDMA_31		(23) +#define INT1_LO_EDMA_32		(24) +#define INT1_LO_EDMA_33		(25) +#define INT1_LO_EDMA_34		(26) +#define INT1_LO_EDMA_35		(27) +#define INT1_LO_EDMA_36		(28) +#define INT1_LO_EDMA_37		(29) +#define INT1_LO_EDMA_38		(30) +#define INT1_LO_EDMA_39		(31) +#define INT1_LO_EDMA_40		(32) +#define INT1_HI_EDMA_41		(33) +#define INT1_HI_EDMA_42		(34) +#define INT1_HI_EDMA_43		(35) +#define INT1_HI_EDMA_44		(36) +#define INT1_HI_EDMA_45		(37) +#define INT1_HI_EDMA_46		(38) +#define INT1_HI_EDMA_47		(39) +#define INT1_HI_EDMA_48		(40) +#define INT1_HI_EDMA_49		(41) +#define INT1_HI_EDMA_50		(42) +#define INT1_HI_EDMA_51		(43) +#define INT1_HI_EDMA_52		(44) +#define INT1_HI_EDMA_53		(45) +#define INT1_HI_EDMA_54		(46) +#define INT1_HI_EDMA_55		(47) +#define INT1_HI_UART4			(48) +#define INT1_HI_UART5			(49) +#define INT1_HI_UART6			(50) +#define INT1_HI_UART7			(51) +#define INT1_HI_UART8			(52) +#define INT1_HI_UART9			(53) +#define INT1_HI_DSPI1			(54) +#define INT1_HI_DSPI2			(55) +#define INT1_HI_DSPI3			(56) +#define INT1_HI_I2C1			(57) +#define INT1_HI_I2C2			(58) +#define INT1_HI_I2C3			(59) +#define INT1_HI_I2C4			(60) +#define INT1_HI_I2C5			(61) + +#define INT2_LO_EDMA56_63		(0) +#define INT2_LO_PWM_SM0SR_CF		(1) +#define INT2_LO_PWM_SM1SR_CF		(2) +#define INT2_LO_PWM_SM2SR_CF		(3) +#define INT2_LO_PWM_SM3SR_CF		(4) +#define INT2_LO_PWM_SM0SR_RF		(5) +#define INT2_LO_PWM_SM1SR_RF		(6) +#define INT2_LO_PWM_SM2SR_RF		(7) +#define INT2_LO_PWM_SM3SR_RF		(8) +#define INT2_LO_PWM_FSR		(9) +#define INT2_LO_PWM_SMSR_REF		(10) +#define INT2_LO_PLL_SR_LOCF		(11) +#define INT2_LO_PLL_SR_LOLF		(12) +#define INT2_LO_PIT0_PIF		(13) +#define INT2_LO_PIT1_PIF		(14) +#define INT2_LO_PIT2_PIF		(15) +#define INT2_LO_PIT3_PIF		(16) +#define INT2_LO_USBOTG_USBSTS		(17) +#define INT2_LO_USBH_USBSTS		(18) +/* not used 19-20 */ +#define INT2_LO_SSI0			(21) +#define INT2_LO_SSI1			(22) +#define INT2_LO_NFC			(23) +/* not used 24-25 */ +#define INT2_LO_RTC			(26) +#define INT2_LO_CCM_UOCSR		(27) +#define INT2_LO_RNG_EI			(28) +#define INT2_LO_SIM1_DATA		(29) +#define INT2_LO_SIM1			(30) +#define INT2_LO_SDHC			(31) +/* not used 32-37 */ +#define INT2_HI_L2SW_BERR		(38) +#define INT2_HI_L2SW_RXB		(39) +#define INT2_HI_L2SW_RXF		(40) +#define INT2_HI_L2SW_TXB		(41) +#define INT2_HI_L2SW_TXF		(42) +#define INT2_HI_L2SW_QM		(43) +#define INT2_HI_L2SW_OD0		(44) +#define INT2_HI_L2SW_OD1		(45) +#define INT2_HI_L2SW_OD2		(46) +#define INT2_HI_L2SW_LRN		(47) +#define INT2_HI_MACNET0_TS		(48) +#define INT2_HI_MACNET0_WAKE		(49) +#define INT2_HI_MACNET0_PLR		(50) +/* not used 51-54 */ +#define INT2_HI_MACNET1_TS		(51) +#define INT2_HI_MACNET1_WAKE		(52) +#define INT2_HI_MACNET1_PLR		(53) + +/* Serial Boot Facility (SBF) */ +#define SBF_SBFCR_BLDIV(x)		(((x)&0x000F)) +#define SBF_SBFCR_FR			(0x0010) + +/* Reset Controller Module (RCM) */ +#define RCM_RCR_SOFTRST		(0x80) +#define RCM_RCR_FRCRSTOUT		(0x40) + +#define RCM_RSR_SOFT			(0x20) +#define RCM_RSR_LOC			(0x10) +#define RCM_RSR_POR			(0x08) +#define RCM_RSR_EXT			(0x04) +#define RCM_RSR_WDR_CORE		(0x02) +#define RCM_RSR_LOL			(0x01) + +/* Chip Configuration Module (CCM) */ +#define CCM_CCR_BOOTMOD		(0xC000) +#define CCM_CCR_PLLMULT		(0x0FC0) +#define CCM_CCR_BOOTPS			(0x0030) +#define CCM_CCR_BOOTPS_32		(0x0000) +#define CCM_CCR_BOOTPS_16		(0x0020) +#define CCM_CCR_BOOTPS_8		(0x0010) +#define CCM_CCR_BOOTPS_		(0x0000) +#define CCM_CCR_ALESEL			(0x0008) +#define CCM_CCR_OSCMOD			(0x0004) +#define CCM_CCR_PLLMOD			(0x0002) +#define CCM_CCR_BOOTMEM		(0x0001) + +#define CCM_CIR_PIN_MASK		(0xFFC0) +#define CCM_CIR_PRN_MASK		(0x003F) +#define CCM_CIR_PIN_MCF54410		(0x9F<<6) +#define CCM_CIR_PIN_MCF54415		(0xA0<<6) +#define CCM_CIR_PIN_MCF54416		(0xA1<<6) +#define CCM_CIR_PIN_MCF54417		(0xA2<<6) +#define CCM_CIR_PIN_MCF54418		(0xA3<<6) + +#define CCM_MISCCR_PWM_EXTCLK(x)	(((x)&(0x0003)<<14) +#define CCM_MISCCR_PWM_EXTCLK_MASK	(0x3FFF) +#define CCM_MISCCR_PWM_EXTCLK_TMR0	(0x0000) +#define CCM_MISCCR_PWM_EXTCLK_TMR1	(0x4000) +#define CCM_MISCCR_PWM_EXTCLK_TMR2	(0x8000) +#define CCM_MISCCR_PWM_EXTCLK_TMR3	(0xC000) +#define CCM_MISCCR_LIMP		(0x1000) +#define CCM_MISCCR_BME			(0x0800) +#define CCM_MISCCR_BMT(x)		(((x)&0x0007)<<8) +#define CCM_MISCCR_BMT_65536		(0) +#define CCM_MISCCR_BMT_32768		(1) +#define CCM_MISCCR_BMT_16384		(2) +#define CCM_MISCCR_BMT_8192		(3) +#define CCM_MISCCR_BMT_4096		(4) +#define CCM_MISCCR_BMT_2048		(5) +#define CCM_MISCCR_BMT_1024		(6) +#define CCM_MISCCR_BMT_512		(7) +#define CCM_MISCCR_SDHCSRC		(0x0040) +#define CCM_MISCCR_SSI1SRC		(0x0020) +#define CCM_MISCCR_SSI0SRC		(0x0010) +#define CCM_MISCCR_USBHOC		(0x0008) +#define CCM_MISCCR_USBOOC		(0x0004) +#define CCM_MISCCR_USBPUE		(0x0002) +#define CCM_MISCCR_USBSRC		(0x0001) + +#define CCM_CDRH_SSI0DIV(x)		(((x)&0x00FF)<<8) +#define CCM_CDRH_SSI0DIV_MASK		(0x00FF) +#define CCM_CDRH_SSI1DIV(x)		(((x)&0x00FF)) +#define CCM_CDRH_SSI1DIV_MASK		(0xFF00) +#define CCM_CDRL_LPDIV(x)		(((x)&0x000F)<<8) +#define CCM_CDRL_LPDIV_MASK		(0xFF0F) +#define CCM_CDR_LPDIV(x)		CCM_CDRL_LPDIV(x) + +#define CCM_UOCSR_DPPD			(0x2000) +#define CCM_UOCSR_DMPD			(0x1000) +#define CCM_UOCSR_DRV_VBUS		(0x0800) +#define CCM_UOCSR_CRG_VBUS		(0x0400) +#define CCM_UOCSR_DCR_VBUS		(0x0200) +#define CCM_UOCSR_DPPU			(0x0100) +#define CCM_UOCSR_AVLD			(0x0080) +#define CCM_UOCSR_BVLD			(0x0040) +#define CCM_UOCSR_VVLD			(0x0020) +#define CCM_UOCSR_SEND			(0x0010) +#define CCM_UOCSR_PWRFLT		(0x0008) +#define CCM_UOCSR_WKUP			(0x0004) +#define CCM_UOCSR_UOMIE		(0x0002) +#define CCM_UOCSR_XPDE			(0x0001) + +#define CCM_UHCSR_DRV_VBUS		(0x0010) +#define CCM_UHCSR_PWRFLT		(0x0008) +#define CCM_UHCSR_WKUP			(0x0004) +#define CCM_UHCSR_UOMIE		(0x0002) +#define CCM_UHCSR_XPDE			(0x0001) + +#define CCM_MISCCR3_TMR_ENET		(0x1000) +#define CCM_MISCCR3_ENETCLK(x)		(((x)&7)<<8) +#define CCM_MISCCR3_ENETCLK_MASK	(0xF8FF) +#define CCM_MISCCR3_ENETCLK_MII	(0x0700) +#define CCM_MISCCR3_ENETCLK_OSC	(0x0600) +#define CCM_MISCCR3_ENETCLK_USB	(0x0500) +#define CCM_MISCCR3_ENETCLK_TMR3	(0x0400) +#define CCM_MISCCR3_ENETCLK_TMR2	(0x0300) +#define CCM_MISCCR3_ENETCLK_TMR1	(0x0200) +#define CCM_MISCCR3_ENETCLK_TMR0	(0x0100) +#define CCM_MISCCR3_ENETCLK_INTBUS	(0x0000) + +#define CCM_MISCCR2_EXTCLKBYP		(0x8000) +#define CCM_MISCCR2_DDR2CLK		(0x4000) +#define CCM_MISCCR2_RGPIO_HALF		(0x2000) +#define CCM_MISCCR2_SWTSCR		(0x1000) +#define CCM_MISCCR2_PLLMODE(x)		(((x)&7)<<8) +#define CCM_MISCCR2_PLLMODE_MASK	(0xF8FF) +#define CCM_MISCCR2_DCCBYP		(0x0080) +#define CCM_MISCCR2_DAC1SEL		(0x0040) +#define CCM_MISCCR2_DAC0SEL		(0x0020) +#define CCM_MISCCR2_ADCEN		(0x0010) +#define CCM_MISCCR2_ADC7SEL		(0x0008) +#define CCM_MISCCR2_ADC3SEL		(0x0004) +#define CCM_MISCCR2_FBHALF		(0x0002) +#define CCM_MISCCR2_ULPI		(0x0001) + +#define CCM_FNACR_PCR(x)		(((x)&0x0F)<<24) +#define CCM_FNACR_PCR_MASK		(0xF0FFFFFF) +#define CCM_FNACR_MCC(x)		((x)&0xFFFF) +#define CCM_FNACR_MCC_MASK		(0xFFFF0000) + +/* General Purpose I/O Module (GPIO) */ +#define GPIO_PAR_FBCTL_ALE(x)		(((x)&3)<<6) +#define GPIO_PAR_FBCTL_ALE_MASK	(0x3F) +#define GPIO_PAR_FBCTL_ALE_FB_ALE	(0xC0) +#define GPIO_PAR_FBCTL_ALE_FB_TS	(0x80) +#define GPIO_PAR_FBCTL_ALE_GPIO	(0x00) +#define GPIO_PAR_FBCTL_OE(x)		(((x)&3)<<4) +#define GPIO_PAR_FBCTL_OE_MASK		(0xCF) +#define GPIO_PAR_FBCTL_OE_FB_OE	(0x30) +#define GPIO_PAR_FBCTL_OE_FB_TBST	(0x20) +#define GPIO_PAR_FBCTL_OE_NFC_RE	(0x20) +#define GPIO_PAR_FBCTL_OE_GPIO		(0x00) +#define GPIO_PAR_FBCTL_FBCLK		(0x08) +#define GPIO_PAR_FBCTL_RW		(0x04) +#define GPIO_PAR_FBCTL_TA(x)		((x)&3) +#define GPIO_PAR_FBCTL_TA_MASK		(0xFC) +#define GPIO_PAR_FBCTL_TA_TA		(0x03) +#define GPIO_PAR_FBCTL_TA_NFC_RB	(0x01) +#define GPIO_PAR_FBCTL_TA_GPIO		(0x00) + +#define GPIO_PAR_BE_BS3(x)		(((x)&0x03)<<6) +#define GPIO_PAR_BE_BE3_MASK		(0x3F) +#define GPIO_PAR_BE_BE3_BE3		(0xC0) +#define GPIO_PAR_BE_BE3_CS3		(0x80) +#define GPIO_PAR_BE_BE3_FB_A1		(0x40) +#define GPIO_PAR_BE_BE3_NFC_ALE	(0x40) +#define GPIO_PAR_BE_BE3_GPIO		(0x00) +#define GPIO_PAR_BE_BS2(x)		(((x)&0x03)<<4) +#define GPIO_PAR_BE_BE2_MASK		(0xCF) +#define GPIO_PAR_BE_BE2_BE2		(0x30) +#define GPIO_PAR_BE_BE2_CS2		(0x20) +#define GPIO_PAR_BE_BE2_FB_A0		(0x10) +#define GPIO_PAR_BE_BE2_NFC_CLE	(0x10) +#define GPIO_PAR_BE_BE2_GPIO		(0x00) +#define GPIO_PAR_BE_BS1(x)		(((x)&0x03)<<2) +#define GPIO_PAR_BE_BE1_MASK		(0xF3) +#define GPIO_PAR_BE_BE1_BE1		(0x0C) +#define GPIO_PAR_BE_BE1_FB_TSZ1	(0x08) +#define GPIO_PAR_BE_BE1_GPIO		(0x00) +#define GPIO_PAR_BE_BS0(x)		((x)&0x03) +#define GPIO_PAR_BE_BE0_MASK		(0xFC) +#define GPIO_PAR_BE_BE0_BE0		(0x03) +#define GPIO_PAR_BE_BE0_FB_TSZ0	(0x02) +#define GPIO_PAR_BE_BE0_GPIO		(0x00) + +#define GPIO_PAR_CS_CS5(x)		(((x)&0x03)<<6) +#define GPIO_PAR_CS_CS5_MASK		(0x3F) +#define GPIO_PAR_CS_CS5_CS5		(0xC0) +#define GPIO_PAR_CS_CS5_DACK1		(0x80) +#define GPIO_PAR_CS_CS5_GPIO		(0x00) +#define GPIO_PAR_CS_CS4(x)		(((x)&0x03)<<4) +#define GPIO_PAR_CS_CS4_MASK		(0xCF) +#define GPIO_PAR_CS_CS4_CS4		(0x30) +#define GPIO_PAR_CS_CS4_DREQ1		(0x20) +#define GPIO_PAR_CS_CS4_GPIO		(0x00) +#define GPIO_PAR_CS_CS1(x)		(((x)&0x03)<<2) +#define GPIO_PAR_CS_CS1_MASK		(0xF3) +#define GPIO_PAR_CS_CS1_CS1		(0x0C) +#define GPIO_PAR_CS_CS1_NFC_CE		(0x04) +#define GPIO_PAR_CS_CS1_GPIO		(0x00) +#define GPIO_PAR_CS_CS0_CS0		(0x01) + +#define GPIO_PAR_CANI2C_I2C0SCL(x)	(((x)&0x03)<<6) +#define GPIO_PAR_CANI2C_I2C0SCL_MASK	(0x3F) +#define GPIO_PAR_CANI2C_I2C0SCL_I2C0SCL	(0xC0) +#define GPIO_PAR_CANI2C_I2C0SCL_U8TXD	(0x80) +#define GPIO_PAR_CANI2C_I2C0SCL_CAN0TX	(0x40) +#define GPIO_PAR_CANI2C_I2C0SCL_GPIO	(0x00) +#define GPIO_PAR_CANI2C_I2C0SDA(x)	(((x)&0x03)<<4) +#define GPIO_PAR_CANI2C_I2C0SDA_MASK	(0xCF) +#define GPIO_PAR_CANI2C_I2C0SDA_I2C0SDA	(0x30) +#define GPIO_PAR_CANI2C_I2C0SDA_U8RXD	(0x20) +#define GPIO_PAR_CANI2C_I2C0SDA_CAN0RX	(0x10) +#define GPIO_PAR_CANI2C_I2C0SDA_GPIO	(0x00) +#define GPIO_PAR_CANI2C_CAN1TX(x)	(((x)&0x03)<<2) +#define GPIO_PAR_CANI2C_CAN1TX_MASK	(0xF3) +#define GPIO_PAR_CANI2C_CAN1TX_CAN1TX	(0x0C) +#define GPIO_PAR_CANI2C_CAN1TX_U9TXD	(0x08) +#define GPIO_PAR_CANI2C_CAN1TX_I2C1SCL	(0x04) +#define GPIO_PAR_CANI2C_CAN1TX_GPIO	(0x00) +#define GPIO_PAR_CANI2C_CAN1RX(x)	((x)&0x03) +#define GPIO_PAR_CANI2C_CAN1RX_MASK	(0xFC) +#define GPIO_PAR_CANI2C_CAN1RX_CAN1RX	(0x03) +#define GPIO_PAR_CANI2C_CAN1RX_U9RXD	(0x02) +#define GPIO_PAR_CANI2C_CAN1RX_I2C1SDA	(0x01) +#define GPIO_PAR_CANI2C_CAN1RX_GPIO	(0x00) + +#define GPIO_PAR_IRQH_IRQ7		(0x10) +#define GPIO_PAR_IRQH_IRQ4(x)		(((x)&0x03)<<2) +#define GPIO_PAR_IRQH_IRQ4_MASK	(0xF3) +#define GPIO_PAR_IRQH_IRQ4_IRQ4	(0x0C) +#define GPIO_PAR_IRQH_IRQ4_DREQ0	(0x08) +#define GPIO_PAR_IRQH_IRQ4_GPIO	(0x00) +#define GPIO_PAR_IRQH_IRQ1		(0x03) + +#define GPIO_PAR_IRQL_IRQ6(x)		(((x)&0x03)<<6) +#define GPIO_PAR_IRQL_IRQ6_MASK	(0x3F) +#define GPIO_PAR_IRQL_IRQ6_IRQ6	(0xC0) +#define GPIO_PAR_IRQL_IRQ6_USBCLKIN	(0x40) +#define GPIO_PAR_IRQL_IRQ6_GPIO	(0x00) +#define GPIO_PAR_IRQL_IRQ3(x)		(((x)&0x03)<<4) +#define GPIO_PAR_IRQL_IRQ3_MASK	(0xCF) +#define GPIO_PAR_IRQL_IRQ3_IRQ3	(0x30) +#define GPIO_PAR_IRQL_IRQ3_DSPI0_PCS3	(0x20) +#define GPIO_PAR_IRQL_IRQ3_USB1_VBUS_EN	(0x10) +#define GPIO_PAR_IRQL_IRQ3_GPIO	(0x00) +#define GPIO_PAR_IRQL_IRQ2(x)		(((x)&0x03)<<2) +#define GPIO_PAR_IRQL_IRQ2_MASK	(0xF3) +#define GPIO_PAR_IRQL_IRQ2_IRQ2	(0x0C) +#define GPIO_PAR_IRQL_IRQ2_DSPI0_PCS2	(0x08) +#define GPIO_PAR_IRQL_IRQ2_USB1_VBUS_OC	(0x04) +#define GPIO_PAR_IRQL_IRQ2_GPIO	(0x00) + +#define GPIO_PAR_DSPI0_SIN(x)		(((x)&0x03)<<6) +#define GPIO_PAR_DSPI0_SIN_MASK	(0x3F) +#define GPIO_PAR_DSPI0_SIN_DSPI0SIN	(0xC0) +#define GPIO_PAR_DSPI0_SIN_SBF_DI	(0xC0) +#define GPIO_PAR_DSPI0_SIN_U3RXD	(0x80) +#define GPIO_PAR_DSPI0_SIN_SDHC_CMD	(0x40) +#define GPIO_PAR_DSPI0_SIN_GPIO	(0x00) +#define GPIO_PAR_DSPI0_SOUT(x)		(((x)&0x03)<<4) +#define GPIO_PAR_DSPI0_SOUT_MASK	(0xCF) +#define GPIO_PAR_DSPI0_SOUT_DSPI0SOUT	(0x30) +#define GPIO_PAR_DSPI0_SOUT_SBF_DO	(0x30) +#define GPIO_PAR_DSPI0_SOUT_U3TXD	(0x20) +#define GPIO_PAR_DSPI0_SOUT_SDHC_DAT0	(0x10) +#define GPIO_PAR_DSPI0_SOUT_GPIO	(0x00) +#define GPIO_PAR_DSPI0_SCK(x)		(((x)&0x03)<<2) +#define GPIO_PAR_DSPI0_SCK_MASK	(0xF3) +#define GPIO_PAR_DSPI0_SCK_DSPI0SCK	(0x0C) +#define GPIO_PAR_DSPI0_SCK_SBF_CK	(0x0C) +#define GPIO_PAR_DSPI0_SCK_I2C3SCL	(0x08) +#define GPIO_PAR_DSPI0_SCK_SDHC_CLK	(0x04) +#define GPIO_PAR_DSPI0_SCK_GPIO	(0x00) +#define GPIO_PAR_DSPI0_PCS0(x)		((x)&0x03) +#define GPIO_PAR_DSPI0_PCS0_MASK	(0xFC) +#define GPIO_PAR_DSPI0_PCS0_DSPI0PCS0	(0x03) +#define GPIO_PAR_DSPI0_PCS0_SS		(0x03) +#define GPIO_PAR_DSPI0_PCS0_I2C3SDA	(0x02) +#define GPIO_PAR_DSPI0_PCS0_SDHC_DAT3	(0x01) +#define GPIO_PAR_DSPI0_PCS0_GPIO	(0x00) + +#define GPIO_PAR_DSPIOW_DSPI0PSC1	(0x80) +#define GPIO_PAR_DSPIOW_SBF_CS		(0x80) +#define GPIO_PAR_DSPIOW_OWDAT		(((x)&0x03)<<4) +#define GPIO_PAR_DSPIOW_OWDAT_MASK	(0xCF) +#define GPIO_PAR_DSPIOW_OWDAT_OWDAT	(0x30) +#define GPIO_PAR_DSPIOW_OWDAT_DACK0	(0x20) +#define GPIO_PAR_DSPIOW_OWDAT_GPIO	(0x00) + +#define GPIO_PAR_TIMER_T3IN(x)		(((x)&0x03)<<6) +#define GPIO_PAR_TIMER_T3IN_MASK	(0x3F) +#define GPIO_PAR_TIMER_T3IN_T3IN	(0xC0) +#define GPIO_PAR_TIMER_T3IN_EXTA3	(0xC0) +#define GPIO_PAR_TIMER_T3IN_T3OUT	(0x80) +#define GPIO_PAR_TIMER_T3IN_USB0_VBUSEN	(0x40) +#define GPIO_PAR_TIMER_T3IN_ULIPI_DIR	(0x40) +#define GPIO_PAR_TIMER_T3IN_GPIO	(0x00) +#define GPIO_PAR_TIMER_T2IN(x)		(((x)&0x03)<<4) +#define GPIO_PAR_TIMER_T2IN_MASK	(0xCF) +#define GPIO_PAR_TIMER_T2IN_T2IN	(0x30) +#define GPIO_PAR_TIMER_T2IN_EXTA2	(0x30) +#define GPIO_PAR_TIMER_T2IN_T2OUT	(0x20) +#define GPIO_PAR_TIMER_T2IN_SDHC_DAT2	(0x10) +#define GPIO_PAR_TIMER_T2IN_GPIO	(0x00) +#define GPIO_PAR_TIMER_T1IN(x)		(((x)&0x03)<<2) +#define GPIO_PAR_TIMER_T1IN_MASK	(0xF3) +#define GPIO_PAR_TIMER_T1IN_T1IN	(0x0C) +#define GPIO_PAR_TIMER_T1IN_EXTA1	(0x0C) +#define GPIO_PAR_TIMER_T1IN_T1OUT	(0x08) +#define GPIO_PAR_TIMER_T1IN_SDHC_DAT1	(0x04) +#define GPIO_PAR_TIMER_T1IN_GPIO	(0x00) +#define GPIO_PAR_TIMER_T0IN(x)		((x)&0x03) +#define GPIO_PAR_TIMER_T0IN_MASK	(0xFC) +#define GPIO_PAR_TIMER_T0IN_T0IN	(0x03) +#define GPIO_PAR_TIMER_T0IN_EXTA0	(0x03) +#define GPIO_PAR_TIMER_T0IN_T0OUT	(0x02) +#define GPIO_PAR_TIMER_T0IN_USBO_VBUSOC	(0x01) +#define GPIO_PAR_TIMER_T0IN_ULPI_NXT	(0x01) +#define GPIO_PAR_TIMER_T0IN_GPIO	(0x00) + +#define GPIO_PAR_UART2_U2CTS(x)	(((x)&0x03)<<6) +#define GPIO_PAR_UART2_U2CTS_MASK	(0x3F) +#define GPIO_PAR_UART2_U2CTS_U2CTS	(0xC0) +#define GPIO_PAR_UART2_U2CTS_U6TXD	(0x80) +#define GPIO_PAR_UART2_U2CTS_SSI1_BCLK	(0x40) +#define GPIO_PAR_UART2_U2CTS_GPIO	(0x00) +#define GPIO_PAR_UART2_U2RTS(x)	(((x)&0x03)<<4) +#define GPIO_PAR_UART2_U2RTS_MASK	(0xCF) +#define GPIO_PAR_UART2_U2RTS_U2RTS	(0x30) +#define GPIO_PAR_UART2_U2RTS_U6RXD	(0x20) +#define GPIO_PAR_UART2_U2RTS_SSI1_FS	(0x10) +#define GPIO_PAR_UART2_U2RTS_GPIO	(0x00) +#define GPIO_PAR_UART2_U2RXD(x)	(((x)&0x03)<<2) +#define GPIO_PAR_UART2_U2RXD_MASK	(0xF3) +#define GPIO_PAR_UART2_U2RXD_U2RXD	(0x0C) +#define GPIO_PAR_UART2_U2RXD_PWM_A3	(0x08) +#define GPIO_PAR_UART2_U2RXD_SSI1_RXD	(0x04) +#define GPIO_PAR_UART2_U2RXD_GPIO	(0x00) +#define GPIO_PAR_UART2_U2TXD(x)	((x)&0x03) +#define GPIO_PAR_UART2_U2TXD_MASK	(0xFC) +#define GPIO_PAR_UART2_U2TXD_U2TXD	(0x03) +#define GPIO_PAR_UART2_U2TXD_PWM_B3	(0x02) +#define GPIO_PAR_UART2_U2TXD_SSI1_TXD	(0x01) +#define GPIO_PAR_UART2_U2TXD_GPIO	(0x00) + +#define GPIO_PAR_UART1_U1CTS(x)	(((x)&0x03)<<6) +#define GPIO_PAR_UART1_U1CTS_MASK	(0x3F) +#define GPIO_PAR_UART1_U1CTS_U1CTS	(0xC0) +#define GPIO_PAR_UART1_U1CTS_U5TXD	(0x80) +#define GPIO_PAR_UART1_U1CTS_DSPI3_SCK	(0x40) +#define GPIO_PAR_UART1_U1CTS_GPIO	(0x00) +#define GPIO_PAR_UART1_U1RTS(x)	(((x)&0x03)<<4) +#define GPIO_PAR_UART1_U1RTS_MASK	(0xCF) +#define GPIO_PAR_UART1_U1RTS_U1RTS	(0x30) +#define GPIO_PAR_UART1_U1RTS_U5RXD	(0x20) +#define GPIO_PAR_UART1_U1RTS_DSPI3_PCS0	(0x10) +#define GPIO_PAR_UART1_U1RTS_GPIO	(0x00) +#define GPIO_PAR_UART1_U1RXD(x)	(((x)&0x03)<<2) +#define GPIO_PAR_UART1_U1RXD_MASK	(0xF3) +#define GPIO_PAR_UART1_U1RXD_U1RXD	(0x0C) +#define GPIO_PAR_UART1_U1RXD_I2C5SDA	(0x08) +#define GPIO_PAR_UART1_U1RXD_DSPI3_SIN	(0x04) +#define GPIO_PAR_UART1_U1RXD_GPIO	(0x00) +#define GPIO_PAR_UART1_U1TXD(x)	((x)&0x03) +#define GPIO_PAR_UART1_U1TXD_MASK	(0xFC) +#define GPIO_PAR_UART1_U1TXD_U1TXD	(0x03) +#define GPIO_PAR_UART1_U1TXD_I2C5SCL	(0x02) +#define GPIO_PAR_UART1_U1TXD_DSPI3_SOUT	(0x01) +#define GPIO_PAR_UART1_U1TXD_GPIO	(0x00) + +#define GPIO_PAR_UART0_U0CTS(x)	(((x)&0x03)<<6) +#define GPIO_PAR_UART0_U0CTS_MASK	(0x3F) +#define GPIO_PAR_UART0_U0CTS_U0CTS	(0xC0) +#define GPIO_PAR_UART0_U0CTS_U4TXD	(0x80) +#define GPIO_PAR_UART0_U0CTS_DSPI2_SCK	(0x40) +#define GPIO_PAR_UART0_U0CTS_GPIO	(0x00) +#define GPIO_PAR_UART0_U0RTS(x)	(((x)&0x03)<<4) +#define GPIO_PAR_UART0_U0RTS_MASK	(0xCF) +#define GPIO_PAR_UART0_U0RTS_U0RTS	(0x30) +#define GPIO_PAR_UART0_U0RTS_U4RXD	(0x20) +#define GPIO_PAR_UART0_U0RTS_DSPI2_PCS0	(0x10) +#define GPIO_PAR_UART0_U0RTS_GPIO	(0x00) +#define GPIO_PAR_UART0_U0RXD(x)	(((x)&0x03)<<2) +#define GPIO_PAR_UART0_U0RXD_MASK	(0xF3) +#define GPIO_PAR_UART0_U0RXD_U0RXD	(0x0C) +#define GPIO_PAR_UART0_U0RXD_I2C4SDA	(0x08) +#define GPIO_PAR_UART0_U0RXD_DSPI2_SIN	(0x04) +#define GPIO_PAR_UART0_U0RXD_GPIO	(0x00) +#define GPIO_PAR_UART0_U0TXD(x)	((x)&0x03) +#define GPIO_PAR_UART0_U0TXD_MASK	(0xFC) +#define GPIO_PAR_UART0_U0TXD_U0TXD	(0x03) +#define GPIO_PAR_UART0_U0TXD_I2C4SCL	(0x02) +#define GPIO_PAR_UART0_U0TXD_DSPI2_SOUT	(0x01) +#define GPIO_PAR_UART0_U0TXD_GPIO	(0x00) + +#define GPIO_PAR_SDHCH_DAT3(x)		(((x)&0x03)<<6) +#define GPIO_PAR_SDHCH_DAT3_MASK	(0x3F) +#define GPIO_PAR_SDHCH_DAT3_DAT3	(0xC0) +#define GPIO_PAR_SDHCH_DAT3_PWM_A1	(0x80) +#define GPIO_PAR_SDHCH_DAT3_DSPI1_PCS0	(0x40) +#define GPIO_PAR_SDHCH_DAT3_GPIO	(0x00) +#define GPIO_PAR_SDHCH_DAT2(x)		(((x)&0x03)<<4) +#define GPIO_PAR_SDHCH_DAT2_MASK	(0xCF) +#define GPIO_PAR_SDHCH_DAT2_DAT2	(0x30) +#define GPIO_PAR_SDHCH_DAT2_PWM_B1	(0x20) +#define GPIO_PAR_SDHCH_DAT2_DSPI1_PCS2	(0x10) +#define GPIO_PAR_SDHCH_DAT2_GPIO	(0x00) +#define GPIO_PAR_SDHCH_DAT1(x)		(((x)&0x03)<<2) +#define GPIO_PAR_SDHCH_DAT1_MASK	(0xF3) +#define GPIO_PAR_SDHCH_DAT1_DAT1	(0x0C) +#define GPIO_PAR_SDHCH_DAT1_PWM_A2	(0x08) +#define GPIO_PAR_SDHCH_DAT1_DSPI1_PCS1	(0x04) +#define GPIO_PAR_SDHCH_DAT1_GPIO	(0x00) +#define GPIO_PAR_SDHCH_DAT0(x)		((x)&0x03) +#define GPIO_PAR_SDHCH_DAT0_MASK	(0xFC) +#define GPIO_PAR_SDHCH_DAT0_DAT0	(0x03) +#define GPIO_PAR_SDHCH_DAT0_PWM_B2	(0x02) +#define GPIO_PAR_SDHCH_DAT0_DSPI1_SOUT	(0x01) +#define GPIO_PAR_SDHCH_DAT0_GPIO	(0x00) + +#define GPIO_PAR_SDHCL_CMD(x)		(((x)&0x03)<<2) +#define GPIO_PAR_SDHCL_CMD_MASK	(0xF3) +#define GPIO_PAR_SDHCL_CMD_CMD		(0x0C) +#define GPIO_PAR_SDHCL_CMD_PWM_A0	(0x08) +#define GPIO_PAR_SDHCL_CMD_DSPI1_SIN	(0x04) +#define GPIO_PAR_SDHCL_CMD_GPIO	(0x00) +#define GPIO_PAR_SDHCL_CLK(x)		((x)&0x03) +#define GPIO_PAR_SDHCL_CLK_MASK	(0xFC) +#define GPIO_PAR_SDHCL_CLK_CLK		(0x03) +#define GPIO_PAR_SDHCL_CLK_PWM_B0	(0x02) +#define GPIO_PAR_SDHCL_CLK_DSPI1_SCK	(0x01) +#define GPIO_PAR_SDHCL_CLK_GPIO	(0x00) + +#define GPIO_PAR_SIMP0H_DAT(x)		(((x)&0x03)<<6) +#define GPIO_PAR_SIMP0H_DAT_MASK	(0x3F) +#define GPIO_PAR_SIMP0H_DAT_DAT	(0xC0) +#define GPIO_PAR_SIMP0H_DAT_PWM_FAULT2	(0x80) +#define GPIO_PAR_SIMP0H_DAT_SDHC_DAT7	(0x40) +#define GPIO_PAR_SIMP0H_DAT_GPIO	(0x00) +#define GPIO_PAR_SIMP0H_VEN(x)		(((x)&0x03)<<4) +#define GPIO_PAR_SIMP0H_VEN_MASK	(0xCF) +#define GPIO_PAR_SIMP0H_VEN_VEN	(0x30) +#define GPIO_PAR_SIMP0H_VEN_PWM_FAULT0	(0x20) +#define GPIO_PAR_SIMP0H_VEN_GPIO	(0x00) +#define GPIO_PAR_SIMP0H_RST(x)		(((x)&0x03)<<2) +#define GPIO_PAR_SIMP0H_RST_MASK	(0xF3) +#define GPIO_PAR_SIMP0H_RST_RST	(0x0C) +#define GPIO_PAR_SIMP0H_RST_PWM_FORCE	(0x08) +#define GPIO_PAR_SIMP0H_RST_SDHC_DAT6	(0x04) +#define GPIO_PAR_SIMP0H_RST_GPIO	(0x00) +#define GPIO_PAR_SIMP0H_PD(x)		((x)&0x03) +#define GPIO_PAR_SIMP0H_PD_MASK	(0xFC) +#define GPIO_PAR_SIMP0H_PD_PD		(0x03) +#define GPIO_PAR_SIMP0H_PD_PWM_SYNC	(0x02) +#define GPIO_PAR_SIMP0H_PD_SDHC_DAT5	(0x01) +#define GPIO_PAR_SIMP0H_PD_GPIO	(0x00) + +#define GPIO_PAR_SIMP0L_CLK(x)		((x)&0x03) +#define GPIO_PAR_SIMP0L_CLK_MASK	(0xFC) +#define GPIO_PAR_SIMP0L_CLK_CLK	(0x03) +#define GPIO_PAR_SIMP0L_CLK_PWM_FAULT1	(0x02) +#define GPIO_PAR_SIMP0L_CLK_SDHC_DAT4	(0x01) +#define GPIO_PAR_SIMP0L_CLK_GPIO	(0x00) + +#define GPIO_PAR_SSI0H_RXD(x)		(((x)&0x03)<<6) +#define GPIO_PAR_SSI0H_RXD_MASK	(0x3F) +#define GPIO_PAR_SSI0H_RXD_RXD		(0xC0) +#define GPIO_PAR_SSI0H_RXD_I2C2SDA	(0x80) +#define GPIO_PAR_SSI0H_RXD_SIM1_VEN	(0x40) +#define GPIO_PAR_SSI0H_RXD_GPIO	(0x00) +#define GPIO_PAR_SSI0H_TXD(x)		(((x)&0x03)<<4) +#define GPIO_PAR_SSI0H_TXD_MASK	(0xCF) +#define GPIO_PAR_SSI0H_TXD_TXD		(0x30) +#define GPIO_PAR_SSI0H_TXD_I2C2SCL	(0x20) +#define GPIO_PAR_SSI0H_TXD_SIM1_DAT	(0x10) +#define GPIO_PAR_SSI0H_TXD_GPIO	(0x00) +#define GPIO_PAR_SSI0H_FS(x)		(((x)&0x03)<<2) +#define GPIO_PAR_SSI0H_FS_MASK		(0xF3) +#define GPIO_PAR_SSI0H_FS_FS		(0x0C) +#define GPIO_PAR_SSI0H_FS_U7TXD	(0x08) +#define GPIO_PAR_SSI0H_FS_SIM1_RST	(0x04) +#define GPIO_PAR_SSI0H_FS_GPIO		(0x00) +#define GPIO_PAR_SSI0H_MCLK(x)		((x)&0x03) +#define GPIO_PAR_SSI0H_MCLK_MASK	(0xFC) +#define GPIO_PAR_SSI0H_MCLK_MCLK	(0x03) +#define GPIO_PAR_SSI0H_MCLK_SSI_CLKIN	(0x02) +#define GPIO_PAR_SSI0H_MCLK_SIM1_CLK	(0x01) +#define GPIO_PAR_SSI0H_MCLK_GPIO	(0x00) + +#define GPIO_PAR_SSI0L_BCLK(x)		((x)&0x03) +#define GPIO_PAR_SSI0L_BCLK_MASK	(0xFC) +#define GPIO_PAR_SSI0L_BCLK_BCLK	(0x03) +#define GPIO_PAR_SSI0L_BCLK_U7RXD	(0x02) +#define GPIO_PAR_SSI0L_BCLK_SIM1_PD	(0x01) +#define GPIO_PAR_SSI0L_BCLK_GPIO	(0x00) + +#define GPIO_PAR_DEBUGH1_DAT3		(0x40) +#define GPIO_PAR_DEBUGH1_DAT2		(0x10) +#define GPIO_PAR_DEBUGH1_DAT1		(0x04) +#define GPIO_PAR_DEBUGH1_DAT0		(0x01) + +#define GPIO_PAR_DEBUGH0_PST3		(0x40) +#define GPIO_PAR_DEBUGH0_PST2		(0x10) +#define GPIO_PAR_DEBUGH0_PST1		(0x04) +#define GPIO_PAR_DEBUGH0_PST0		(0x01) + +#define GPIO_PODR_G4_VAL		(0x01 << 4) +#define GPIO_PODR_G4_MASK		(0xff & ~GPIO_PODR_G4_VAL) +#define GPIO_PDDR_G4_OUTPUT		(0x01 << 4) +#define GPIO_PDDR_G4_MASK		(0xff & ~GPIO_PDDR_G4_OUTPUT) + +#define GPIO_PAR_DEBUGL_ALLPST		(0x01) + +#define GPIO_PAR_FEC_FEC(x)		((x)&0x0F) +#define GPIO_PAR_FEC_FEC_MASK		(0xF0) +#define GPIO_PAR_FEC_FEC_GPIO		(0x0D) +#define GPIO_PAR_FEC_FEC_RMII1		(0x0C) +#define GPIO_PAR_FEC_FEC_RMII1FUL	(0x0B) +#define GPIO_PAR_FEC_FEC_RMII_ULPI	(0x0A) +#define GPIO_PAR_FEC_FEC_RMII0		(0x09) +#define GPIO_PAR_FEC_FEC_RMII0FUL_ULPI	(0x08) +#define GPIO_PAR_FEC_FEC_RMII0FUL	(0x07) +#define GPIO_PAR_FEC_FEC_RMII0_1FUL	(0x06) +#define GPIO_PAR_FEC_FEC_RMII0FUL_1	(0x05)	/* 0:Full 1: */ +/* Both 0&1: MDC, MDIO, COL & TXER - GPIO */ +#define GPIO_PAR_FEC_FEC_RMII0_1	(0x04) +#define GPIO_PAR_FEC_FEC_RMII0FUL_1FUL	(0x03) +#define GPIO_PAR_FEC_FEC_MII		(0x01)	/* MDC & MDIO - GPIO */ +#define GPIO_PAR_FEC_FEC_MIIFUL	(0x00) + + +/* TC: Need to edit here.... */ + +/* Mode Select Control */ +#define GPIO_MSCR_SDRAM_MSC(x)		((x)&0x03) +#define GPIO_MSCR_SDRAM_MSC_MASK	(0xFC) + +/* Slew Rate Control */ + +#define GPIO_SRCR_FB3_FB3(x)		((x)&0x03) +#define GPIO_SRCR_FB3_FB3_MASK		(0xFC) + +#define GPIO_SRCR_FB2_FB2(x)		((x)&0x03) +#define GPIO_SRCR_FB2_FB2_MASK		(0xFC) + +#define GPIO_SRCR_FB1_FB1(x)		((x)&0x03) +#define GPIO_SRCR_FB1_FB1_MASK		(0xFC) + +#define GPIO_SRCR_FB4_FB5(x)		(((x)&0x03)<<2) +#define GPIO_SRCR_FB4_FB5_MASK		(0xF3) +#define GPIO_SRCR_FB4_FB4(x)		((x)&0x03) +#define GPIO_SRCR_FB4_FB4_MASK		(0xFC) + +#define GPIO_SRCR_DSPIOW_OWDAT(x)	(((x)&0x03)<<4) +#define GPIO_SRCR_DSPIOW_OWDAT_MASK	(0xCF) +#define GPIO_SRCR_DSPIOW_DSPI0(x)	((x)&0x03) +#define GPIO_SRCR_DSPIOW_DSPI0_MASK	(0xFC) + +#define GPIO_SRCR_CANI2C_CAN1(x)	(((x)&0x03)<<2) +#define GPIO_SRCR_CANI2C_CAN1_MASK	(0xF3) +#define GPIO_SRCR_CANI2C_I2C0(x)	((x)&0x03) +#define GPIO_SRCR_CANI2C_I2C0_MASK	(0xFC) + +#define GPIO_SRCR_IRQ0_IRQ0(x)		((x)&0x03) +#define GPIO_SRCR_IRQ0_IRQ0_MASK	(0xFC) + +#define GPIO_SRCR_TIMER_TMR3(x)	(((x)&0x03)<<6) +#define GPIO_SRCR_TIMER_TMR3_MASK	(0x3F) +#define GPIO_SRCR_TIMER_TMR2(x)	(((x)&0x03)<<4) +#define GPIO_SRCR_TIMER_TMR2_MASK	(0xCF) +#define GPIO_SRCR_TIMER_TMR1(x)	(((x)&0x03)<<2) +#define GPIO_SRCR_TIMER_TMR1_MASK	(0xF3) +#define GPIO_SRCR_TIMER_TMR0(x)	((x)&0x03) +#define GPIO_SRCR_TIMER_TMR0_MASK	(0xFC) + +#define GPIO_SRCR_UART_U2(x)		(((x)&0x03)<<4) +#define GPIO_SRCR_UART_U2_MASK		(0xCF) +#define GPIO_SRCR_UART_U1(x)		(((x)&0x03)<<2) +#define GPIO_SRCR_UART_U1_MASK		(0xF3) +#define GPIO_SRCR_UART_U0(x)		((x)&0x03) +#define GPIO_SRCR_UART_U0_MASK		(0xFC) + +#define GPIO_SRCR_FEC_RMII0(x)		(((x)&0x03)<<2) +#define GPIO_SRCR_FEC_RMII0_MASK	(0xF3) +#define GPIO_SRCR_FEC_RMII1(x)		((x)&0x03) +#define GPIO_SRCR_FEC_RMII1_MASK	(0xFC) + +#define GPIO_SRCR_SDHC_SDHC(x)		((x)&0x03) +#define GPIO_SRCR_SDHC_SDHC_MASK	(0xFC) + +#define GPIO_SRCR_SIM0_SIMP0(x)	((x)&0x03) +#define GPIO_SRCR_SIM0_SIMP0_MASK	(0xFC) + +#define GPIO_SRCR_SSI0_SSI0(x)		((x)&0x03) +#define GPIO_SRCR_SSI0_SSI0_MASK	(0xFC) + +#define GPIO_PCR_URTS_U2		(0x0004) +#define GPIO_PCR_URTS_U1		(0x0002) +#define GPIO_PCR_URTS_U0		(0x0001) + +#define GPIO_PCR_UCTS_U2		(0x0004) +#define GPIO_PCR_UCTS_U1		(0x0002) +#define GPIO_PCR_UCTS_U0		(0x0001) + +#define GPIO_UTXD_WOM_U9		(0x0200) +#define GPIO_UTXD_WOM_U8		(0x0100) +#define GPIO_UTXD_WOM_U7		(0x0080) +#define GPIO_UTXD_WOM_U6		(0x0040) +#define GPIO_UTXD_WOM_U5		(0x0020) +#define GPIO_UTXD_WOM_U4		(0x0010) +#define GPIO_UTXD_WOM_U3		(0x0008) +#define GPIO_UTXD_WOM_U2		(0x0004) +#define GPIO_UTXD_WOM_U1		(0x0002) +#define GPIO_UTXD_WOM_U0		(0x0001) + +#define GPIO_URXD_WOM_U9(x)		(((x)&3)<<18) +#define GPIO_URXD_WOM_U9_MASK		(0xFFF3FFFF) +#define GPIO_URXD_WOM_U8(x)		(((x)&3)<<16) +#define GPIO_URXD_WOM_U8_MASK		(0xFFFCFFFF) +#define GPIO_URXD_WOM_U7(x)		(((x)&3)<<14) +#define GPIO_URXD_WOM_U7_MASK		(0xFFFF3FFF) +#define GPIO_URXD_WOM_U6(x)		(((x)&3)<<12) +#define GPIO_URXD_WOM_U6_MASK		(0xFFFFCFFF) +#define GPIO_URXD_WOM_U5(x)		(((x)&3)<<10) +#define GPIO_URXD_WOM_U5_MASK		(0xFFFFF3FF) +#define GPIO_URXD_WOM_U4(x)		(((x)&3)<<8) +#define GPIO_URXD_WOM_U4_MASK		(0xFFFFFCFF) +#define GPIO_URXD_WOM_U3(x)		(((x)&3)<<6) +#define GPIO_URXD_WOM_U3_MASK		(0xFFFFFF3F) +#define GPIO_URXD_WOM_U2(x)		(((x)&3)<<4) +#define GPIO_URXD_WOM_U2_MASK		(0xFFFFFFCF) +#define GPIO_URXD_WOM_U1(x)		(((x)&3)<<2) +#define GPIO_URXD_WOM_U1_MASK		(0xFFFFFFF3) +#define GPIO_URXD_WOM_U0(x)		((x)&3) +#define GPIO_URXD_WOM_U0_MASK		(0xFFFFFFFC) + +#define GPIO_HCR1_PG4_0(x)		(((x)&0x1F)<<27) +#define GPIO_HCR1_PG4_0_MASK		(0x07FFFFFF) +#define GPIO_HCR1_PF7_3(x)		(((x)&0x1F)<<22) +#define GPIO_HCR1_PF7_3_MASK		(0xF83FFFFF) +#define GPIO_HCR1_PE6_0(x)		(((x)&0x7F)<<15) +#define GPIO_HCR1_PE6_0_MASK		(0xFFC07FFF) +#define GPIO_HCR1_PD7_3(x)		(((x)&0x1F)<<10) +#define GPIO_HCR1_PD7_3_MASK		(0xFFFF83FF) +#define GPIO_HCR1_PC7_1(x)		(((x)&0x7F)<<3) +#define GPIO_HCR1_PC7_1_MASK		(0xFFFFFC07) +#define GPIO_HCR1_PB2_0(x)		((x)&7) +#define GPIO_HCR1_PB2_0_MASK		(0xFFFFFFF8) + +#define GPIO_HCR0_PK3			(0x00000400) +#define GPIO_HCR0_PK0			(0x00000200) +#define GPIO_HCR0_PD2_0(x)		(((x)&7)<<6) +#define GPIO_HCR0_PD2_0_MASK		(0xFFFFFE3F) +#define GPIO_HCR0_PE7			(0x00000020) +#define GPIO_HCR0_PH7_3(x)		((x)&0x1F) +#define GPIO_HCR0_PH7_3_MASK(x)	(0xFFFFFFE0) + +/* SDRAM Controller (SDRAMC) */ + +/* Phase Locked Loop (PLL) */ +#define PLL_CR_LOCIRQ			(0x00040000) +#define PLL_CR_LOCRE			(0x00020000) +#define PLL_CR_LOCEN			(0x00010000) +#define PLL_CR_LOLIRQ			(0x00004000) +#define PLL_CR_LOLRE			(0x00002000) +#define PLL_CR_LOLEN			(0x00001000) +#define PLL_CR_REFDIV(x)		(((x)&7)<<8) +#define PLL_CR_REFDIV_MASK		(0xFFFFF8FF) +#define PLL_CR_FBKDIV(x)		((x)&0x3F) +#define PLL_CR_FBKDIV_MASK		(0xFFFFFFC0) +#define PLL_CR_FBKDIV_BITS		(0x3F) + +#define PLL_DR_OUTDIV5(x)		(((x)&0x1F)<<21) +#define PLL_DR_OUTDIV5_MASK		(0xFC1FFFFF) +#define PLL_DR_OUTDIV5_BITS		(0x03E00000) +#define PLL_DR_OUTDIV4(x)		(((x)&0x1F)<<16) +#define PLL_DR_OUTDIV4_MASK		(0xFFE0FFFF) +#define PLL_DR_OUTDIV4_BITS		(0x001F0000) +#define PLL_DR_OUTDIV3(x)		(((x)&0x1F)<<10) +#define PLL_DR_OUTDIV3_MASK		(0xFFFF83FF) +#define PLL_DR_OUTDIV3_BITS		(0x00007C00) +#define PLL_DR_OUTDIV2(x)		(((x)&0x1F)<<5) +#define PLL_DR_OUTDIV2_MASK		(0xFFFFFC1F) +#define PLL_DR_OUTDIV2_BITS		(0x000003E0) +#define PLL_DR_OUTDIV1(x)		((x)&0x1F) +#define PLL_DR_OUTDIV1_MASK		(0xFFFFFFE0) +#define PLL_DR_OUTDIV1_BITS		(0x0000001F) + +#define PLL_SR_LOCF			(0x00000200) +#define PLL_SR_LOC			(0x00000100) +#define PLL_SR_LOLF			(0x00000040) +#define PLL_SR_LOCKS			(0x00000020) +#define PLL_SR_LOCK			(0x00000010) +#define PLL_PSR_LOCK			PLL_SR_LOCK	/* compatible with 5x */ +#define PLL_SR_MODE(x)			((x)&7) +#define PLL_SR_MODE_MASK		(0xFFFFFFF8) + +#endif				/* __MCF5441X__ */ |