1a4145534SPeter Tyser /* 2a4145534SPeter Tyser * (C) Copyright 2003 3a4145534SPeter Tyser * Josef Baumgartner <josef.baumgartner@telex.de> 4a4145534SPeter Tyser * 5a4145534SPeter Tyser * MCF5282 additionals 6a4145534SPeter Tyser * (C) Copyright 2005 7a4145534SPeter Tyser * BuS Elektronik GmbH & Co. KG <esw@bus-elektronik.de> 8a4145534SPeter Tyser * (c) Copyright 2010 9a4145534SPeter Tyser * Arcturus Networks Inc. <www.arcturusnetworks.com> 10a4145534SPeter Tyser * 11a4145534SPeter Tyser * Copyright (C) 2004-2007 Freescale Semiconductor, Inc. 12a4145534SPeter Tyser * TsiChung Liew (Tsi-Chung.Liew@freescale.com) 13a4145534SPeter Tyser * Hayden Fraser (Hayden.Fraser@freescale.com) 14a4145534SPeter Tyser * 15a4145534SPeter Tyser * MCF5275 additions 16a4145534SPeter Tyser * Copyright (C) 2008 Arthur Shipkowski (art@videon-central.com) 17a4145534SPeter Tyser * 18a4145534SPeter Tyser * See file CREDITS for list of people who contributed to this 19a4145534SPeter Tyser * project. 20a4145534SPeter Tyser * 21a4145534SPeter Tyser * This program is free software; you can redistribute it and/or 22a4145534SPeter Tyser * modify it under the terms of the GNU General Public License as 23a4145534SPeter Tyser * published by the Free Software Foundation; either version 2 of 24a4145534SPeter Tyser * the License, or (at your option) any later version. 25a4145534SPeter Tyser * 26a4145534SPeter Tyser * This program is distributed in the hope that it will be useful, 27a4145534SPeter Tyser * but WITHOUT ANY WARRANTY; without even the implied warranty of 28a4145534SPeter Tyser * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 29a4145534SPeter Tyser * GNU General Public License for more details. 30a4145534SPeter Tyser * 31a4145534SPeter Tyser * You should have received a copy of the GNU General Public License 32a4145534SPeter Tyser * along with this program; if not, write to the Free Software 33a4145534SPeter Tyser * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 34a4145534SPeter Tyser * MA 02111-1307 USA 35a4145534SPeter Tyser */ 36a4145534SPeter Tyser 37a4145534SPeter Tyser #include <common.h> 38a4145534SPeter Tyser #include <watchdog.h> 39a4145534SPeter Tyser #include <asm/immap.h> 40a4145534SPeter Tyser 41a4145534SPeter Tyser #if defined(CONFIG_CMD_NET) 42a4145534SPeter Tyser #include <config.h> 43a4145534SPeter Tyser #include <net.h> 44a4145534SPeter Tyser #include <asm/fec.h> 45a4145534SPeter Tyser #endif 46a4145534SPeter Tyser 47a4145534SPeter Tyser #ifndef CONFIG_M5272 48a4145534SPeter Tyser /* Only 5272 Flexbus chipselect is different from the rest */ 49a4145534SPeter Tyser void init_fbcs(void) 50a4145534SPeter Tyser { 51a4145534SPeter Tyser volatile fbcs_t *fbcs = (fbcs_t *) (MMAP_FBCS); 52a4145534SPeter Tyser 53a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS0_BASE) && defined(CONFIG_SYS_CS0_MASK) \ 54a4145534SPeter Tyser && defined(CONFIG_SYS_CS0_CTRL)) 55a4145534SPeter Tyser fbcs->csar0 = CONFIG_SYS_CS0_BASE; 56a4145534SPeter Tyser fbcs->cscr0 = CONFIG_SYS_CS0_CTRL; 57a4145534SPeter Tyser fbcs->csmr0 = CONFIG_SYS_CS0_MASK; 58a4145534SPeter Tyser #else 59a4145534SPeter Tyser #warning "Chip Select 0 are not initialized/used" 60a4145534SPeter Tyser #endif 61a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS1_BASE) && defined(CONFIG_SYS_CS1_MASK) \ 62a4145534SPeter Tyser && defined(CONFIG_SYS_CS1_CTRL)) 63a4145534SPeter Tyser fbcs->csar1 = CONFIG_SYS_CS1_BASE; 64a4145534SPeter Tyser fbcs->cscr1 = CONFIG_SYS_CS1_CTRL; 65a4145534SPeter Tyser fbcs->csmr1 = CONFIG_SYS_CS1_MASK; 66a4145534SPeter Tyser #endif 67a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS2_BASE) && defined(CONFIG_SYS_CS2_MASK) \ 68a4145534SPeter Tyser && defined(CONFIG_SYS_CS2_CTRL)) 69a4145534SPeter Tyser fbcs->csar2 = CONFIG_SYS_CS2_BASE; 70a4145534SPeter Tyser fbcs->cscr2 = CONFIG_SYS_CS2_CTRL; 71a4145534SPeter Tyser fbcs->csmr2 = CONFIG_SYS_CS2_MASK; 72a4145534SPeter Tyser #endif 73a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS3_BASE) && defined(CONFIG_SYS_CS3_MASK) \ 74a4145534SPeter Tyser && defined(CONFIG_SYS_CS3_CTRL)) 75a4145534SPeter Tyser fbcs->csar3 = CONFIG_SYS_CS3_BASE; 76a4145534SPeter Tyser fbcs->cscr3 = CONFIG_SYS_CS3_CTRL; 77a4145534SPeter Tyser fbcs->csmr3 = CONFIG_SYS_CS3_MASK; 78a4145534SPeter Tyser #endif 79a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS4_BASE) && defined(CONFIG_SYS_CS4_MASK) \ 80a4145534SPeter Tyser && defined(CONFIG_SYS_CS4_CTRL)) 81a4145534SPeter Tyser fbcs->csar4 = CONFIG_SYS_CS4_BASE; 82a4145534SPeter Tyser fbcs->cscr4 = CONFIG_SYS_CS4_CTRL; 83a4145534SPeter Tyser fbcs->csmr4 = CONFIG_SYS_CS4_MASK; 84a4145534SPeter Tyser #endif 85a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS5_BASE) && defined(CONFIG_SYS_CS5_MASK) \ 86a4145534SPeter Tyser && defined(CONFIG_SYS_CS5_CTRL)) 87a4145534SPeter Tyser fbcs->csar5 = CONFIG_SYS_CS5_BASE; 88a4145534SPeter Tyser fbcs->cscr5 = CONFIG_SYS_CS5_CTRL; 89a4145534SPeter Tyser fbcs->csmr5 = CONFIG_SYS_CS5_MASK; 90a4145534SPeter Tyser #endif 91a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS6_BASE) && defined(CONFIG_SYS_CS6_MASK) \ 92a4145534SPeter Tyser && defined(CONFIG_SYS_CS6_CTRL)) 93a4145534SPeter Tyser fbcs->csar6 = CONFIG_SYS_CS6_BASE; 94a4145534SPeter Tyser fbcs->cscr6 = CONFIG_SYS_CS6_CTRL; 95a4145534SPeter Tyser fbcs->csmr6 = CONFIG_SYS_CS6_MASK; 96a4145534SPeter Tyser #endif 97a4145534SPeter Tyser #if (defined(CONFIG_SYS_CS7_BASE) && defined(CONFIG_SYS_CS7_MASK) \ 98a4145534SPeter Tyser && defined(CONFIG_SYS_CS7_CTRL)) 99a4145534SPeter Tyser fbcs->csar7 = CONFIG_SYS_CS7_BASE; 100a4145534SPeter Tyser fbcs->cscr7 = CONFIG_SYS_CS7_CTRL; 101a4145534SPeter Tyser fbcs->csmr7 = CONFIG_SYS_CS7_MASK; 102a4145534SPeter Tyser #endif 103a4145534SPeter Tyser } 104a4145534SPeter Tyser #endif 105a4145534SPeter Tyser 106a4145534SPeter Tyser #if defined(CONFIG_M5208) 107a4145534SPeter Tyser void cpu_init_f(void) 108a4145534SPeter Tyser { 109a4145534SPeter Tyser volatile scm1_t *scm1 = (scm1_t *) MMAP_SCM1; 110a4145534SPeter Tyser 111a4145534SPeter Tyser #ifndef CONFIG_WATCHDOG 112a4145534SPeter Tyser volatile wdog_t *wdg = (wdog_t *) MMAP_WDOG; 113a4145534SPeter Tyser 114a4145534SPeter Tyser /* Disable the watchdog if we aren't using it */ 115a4145534SPeter Tyser wdg->cr = 0; 116a4145534SPeter Tyser #endif 117a4145534SPeter Tyser 118a4145534SPeter Tyser scm1->mpr = 0x77777777; 119a4145534SPeter Tyser scm1->pacra = 0; 120a4145534SPeter Tyser scm1->pacrb = 0; 121a4145534SPeter Tyser scm1->pacrc = 0; 122a4145534SPeter Tyser scm1->pacrd = 0; 123a4145534SPeter Tyser scm1->pacre = 0; 124a4145534SPeter Tyser scm1->pacrf = 0; 125a4145534SPeter Tyser 126a4145534SPeter Tyser /* FlexBus Chipselect */ 127a4145534SPeter Tyser init_fbcs(); 128a4145534SPeter Tyser 129a4145534SPeter Tyser icache_enable(); 130a4145534SPeter Tyser } 131a4145534SPeter Tyser 132a4145534SPeter Tyser /* initialize higher level parts of CPU like timers */ 133a4145534SPeter Tyser int cpu_init_r(void) 134a4145534SPeter Tyser { 135a4145534SPeter Tyser return (0); 136a4145534SPeter Tyser } 137a4145534SPeter Tyser 138a4145534SPeter Tyser void uart_port_conf(int port) 139a4145534SPeter Tyser { 140a4145534SPeter Tyser volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; 141a4145534SPeter Tyser 142a4145534SPeter Tyser /* Setup Ports: */ 143a4145534SPeter Tyser switch (port) { 144a4145534SPeter Tyser case 0: 145a4145534SPeter Tyser gpio->par_uart &= GPIO_PAR_UART0_UNMASK; 146a4145534SPeter Tyser gpio->par_uart |= (GPIO_PAR_UART_U0TXD | GPIO_PAR_UART_U0RXD); 147a4145534SPeter Tyser break; 148a4145534SPeter Tyser case 1: 149a4145534SPeter Tyser gpio->par_uart &= GPIO_PAR_UART0_UNMASK; 150a4145534SPeter Tyser gpio->par_uart |= (GPIO_PAR_UART_U1TXD | GPIO_PAR_UART_U1RXD); 151a4145534SPeter Tyser break; 152a4145534SPeter Tyser case 2: 153a4145534SPeter Tyser #ifdef CONFIG_SYS_UART2_PRI_GPIO 154a4145534SPeter Tyser gpio->par_timer &= 155a4145534SPeter Tyser (GPIO_PAR_TMR_TIN0_UNMASK | GPIO_PAR_TMR_TIN1_UNMASK); 156a4145534SPeter Tyser gpio->par_timer |= 157a4145534SPeter Tyser (GPIO_PAR_TMR_TIN0_U2TXD | GPIO_PAR_TMR_TIN1_U2RXD); 158a4145534SPeter Tyser #endif 159a4145534SPeter Tyser #ifdef CONFIG_SYS_UART2_ALT1_GPIO 160a4145534SPeter Tyser gpio->par_feci2c &= 161a4145534SPeter Tyser (GPIO_PAR_FECI2C_MDC_UNMASK | GPIO_PAR_FECI2C_MDIO_UNMASK); 162a4145534SPeter Tyser gpio->par_feci2c |= 163a4145534SPeter Tyser (GPIO_PAR_FECI2C_MDC_U2TXD | GPIO_PAR_FECI2C_MDIO_U2RXD); 164a4145534SPeter Tyser #endif 165a4145534SPeter Tyser #ifdef CONFIG_SYS_UART2_ALT1_GPIO 166a4145534SPeter Tyser gpio->par_feci2c &= 167a4145534SPeter Tyser (GPIO_PAR_FECI2C_SDA_UNMASK | GPIO_PAR_FECI2C_SCL_UNMASK); 168a4145534SPeter Tyser gpio->par_feci2c |= 169a4145534SPeter Tyser (GPIO_PAR_FECI2C_SDA_U2TXD | GPIO_PAR_FECI2C_SCL_U2RXD); 170a4145534SPeter Tyser #endif 171a4145534SPeter Tyser break; 172a4145534SPeter Tyser } 173a4145534SPeter Tyser } 174a4145534SPeter Tyser 175a4145534SPeter Tyser #if defined(CONFIG_CMD_NET) 176a4145534SPeter Tyser int fecpin_setclear(struct eth_device *dev, int setclear) 177a4145534SPeter Tyser { 178a4145534SPeter Tyser volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; 179a4145534SPeter Tyser 180a4145534SPeter Tyser if (setclear) { 181a4145534SPeter Tyser gpio->par_fec |= 182a4145534SPeter Tyser GPIO_PAR_FEC_7W_FEC | GPIO_PAR_FEC_MII_FEC; 183a4145534SPeter Tyser gpio->par_feci2c |= 184a4145534SPeter Tyser GPIO_PAR_FECI2C_MDC_MDC | GPIO_PAR_FECI2C_MDIO_MDIO; 185a4145534SPeter Tyser } else { 186a4145534SPeter Tyser gpio->par_fec &= 187a4145534SPeter Tyser (GPIO_PAR_FEC_7W_UNMASK & GPIO_PAR_FEC_MII_UNMASK); 188a4145534SPeter Tyser gpio->par_feci2c &= GPIO_PAR_FECI2C_RMII_UNMASK; 189a4145534SPeter Tyser } 190a4145534SPeter Tyser return 0; 191a4145534SPeter Tyser } 192a4145534SPeter Tyser #endif /* CONFIG_CMD_NET */ 193a4145534SPeter Tyser #endif /* CONFIG_M5208 */ 194a4145534SPeter Tyser 195a4145534SPeter Tyser #if defined(CONFIG_M5253) 196a4145534SPeter Tyser /* 197a4145534SPeter Tyser * Breath some life into the CPU... 198a4145534SPeter Tyser * 199a4145534SPeter Tyser * Set up the memory map, 200a4145534SPeter Tyser * initialize a bunch of registers, 201a4145534SPeter Tyser * initialize the UPM's 202a4145534SPeter Tyser */ 203a4145534SPeter Tyser void cpu_init_f(void) 204a4145534SPeter Tyser { 205a4145534SPeter Tyser mbar_writeByte(MCFSIM_MPARK, 0x40); /* 5249 Internal Core takes priority over DMA */ 206a4145534SPeter Tyser mbar_writeByte(MCFSIM_SYPCR, 0x00); 207a4145534SPeter Tyser mbar_writeByte(MCFSIM_SWIVR, 0x0f); 208a4145534SPeter Tyser mbar_writeByte(MCFSIM_SWSR, 0x00); 209a4145534SPeter Tyser mbar_writeByte(MCFSIM_SWDICR, 0x00); 210a4145534SPeter Tyser mbar_writeByte(MCFSIM_TIMER1ICR, 0x00); 211a4145534SPeter Tyser mbar_writeByte(MCFSIM_TIMER2ICR, 0x88); 212a4145534SPeter Tyser mbar_writeByte(MCFSIM_I2CICR, 0x00); 213a4145534SPeter Tyser mbar_writeByte(MCFSIM_UART1ICR, 0x00); 214a4145534SPeter Tyser mbar_writeByte(MCFSIM_UART2ICR, 0x00); 215a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR6, 0x00); 216a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR7, 0x00); 217a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR8, 0x00); 218a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR9, 0x00); 219a4145534SPeter Tyser mbar_writeByte(MCFSIM_QSPIICR, 0x00); 220a4145534SPeter Tyser 221a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO_INT_EN, 0x00000080); 222a4145534SPeter Tyser mbar2_writeByte(MCFSIM_INTBASE, 0x40); /* Base interrupts at 64 */ 223a4145534SPeter Tyser mbar2_writeByte(MCFSIM_SPURVEC, 0x00); 224a4145534SPeter Tyser 225a4145534SPeter Tyser /*mbar2_writeLong(MCFSIM_IDECONFIG1, 0x00000020); */ /* Enable a 1 cycle pre-drive cycle on CS1 */ 226a4145534SPeter Tyser 227a4145534SPeter Tyser /* FlexBus Chipselect */ 228a4145534SPeter Tyser init_fbcs(); 229a4145534SPeter Tyser 230a4145534SPeter Tyser #ifdef CONFIG_FSL_I2C 231a4145534SPeter Tyser CONFIG_SYS_I2C_PINMUX_REG = 232a4145534SPeter Tyser CONFIG_SYS_I2C_PINMUX_REG & CONFIG_SYS_I2C_PINMUX_CLR; 233a4145534SPeter Tyser CONFIG_SYS_I2C_PINMUX_REG |= CONFIG_SYS_I2C_PINMUX_SET; 234a4145534SPeter Tyser #ifdef CONFIG_SYS_I2C2_OFFSET 235a4145534SPeter Tyser CONFIG_SYS_I2C2_PINMUX_REG &= CONFIG_SYS_I2C2_PINMUX_CLR; 236a4145534SPeter Tyser CONFIG_SYS_I2C2_PINMUX_REG |= CONFIG_SYS_I2C2_PINMUX_SET; 237a4145534SPeter Tyser #endif 238a4145534SPeter Tyser #endif 239a4145534SPeter Tyser 240a4145534SPeter Tyser /* enable instruction cache now */ 241a4145534SPeter Tyser icache_enable(); 242a4145534SPeter Tyser } 243a4145534SPeter Tyser 244a4145534SPeter Tyser /*initialize higher level parts of CPU like timers */ 245a4145534SPeter Tyser int cpu_init_r(void) 246a4145534SPeter Tyser { 247a4145534SPeter Tyser return (0); 248a4145534SPeter Tyser } 249a4145534SPeter Tyser 250a4145534SPeter Tyser void uart_port_conf(int port) 251a4145534SPeter Tyser { 252a4145534SPeter Tyser volatile u32 *par = (u32 *) MMAP_PAR; 253a4145534SPeter Tyser 254a4145534SPeter Tyser /* Setup Ports: */ 255a4145534SPeter Tyser switch (port) { 256a4145534SPeter Tyser case 1: 257a4145534SPeter Tyser *par &= 0xFFE7FFFF; 258a4145534SPeter Tyser *par |= 0x00180000; 259a4145534SPeter Tyser break; 260a4145534SPeter Tyser case 2: 261a4145534SPeter Tyser *par &= 0xFFFFFFFC; 262a4145534SPeter Tyser *par &= 0x00000003; 263a4145534SPeter Tyser break; 264a4145534SPeter Tyser } 265a4145534SPeter Tyser } 266a4145534SPeter Tyser #endif /* #if defined(CONFIG_M5253) */ 267a4145534SPeter Tyser 268a4145534SPeter Tyser #if defined(CONFIG_M5271) 269a4145534SPeter Tyser void cpu_init_f(void) 270a4145534SPeter Tyser { 271a4145534SPeter Tyser #ifndef CONFIG_WATCHDOG 272a4145534SPeter Tyser /* Disable the watchdog if we aren't using it */ 273a4145534SPeter Tyser mbar_writeShort(MCF_WTM_WCR, 0); 274a4145534SPeter Tyser #endif 275a4145534SPeter Tyser 276a4145534SPeter Tyser /* FlexBus Chipselect */ 277a4145534SPeter Tyser init_fbcs(); 278a4145534SPeter Tyser 279a4145534SPeter Tyser #ifdef CONFIG_SYS_MCF_SYNCR 280a4145534SPeter Tyser /* Set clockspeed according to board header file */ 281a4145534SPeter Tyser mbar_writeLong(MCF_FMPLL_SYNCR, CONFIG_SYS_MCF_SYNCR); 282a4145534SPeter Tyser #else 283a4145534SPeter Tyser /* Set clockspeed to 100MHz */ 284a4145534SPeter Tyser mbar_writeLong(MCF_FMPLL_SYNCR, 285a4145534SPeter Tyser MCF_FMPLL_SYNCR_MFD(0) | MCF_FMPLL_SYNCR_RFD(0)); 286a4145534SPeter Tyser #endif 287*65f0d121SMike Frysinger while (!(mbar_readByte(MCF_FMPLL_SYNSR) & MCF_FMPLL_SYNSR_LOCK)) ; 288a4145534SPeter Tyser } 289a4145534SPeter Tyser 290a4145534SPeter Tyser /* 291a4145534SPeter Tyser * initialize higher level parts of CPU like timers 292a4145534SPeter Tyser */ 293a4145534SPeter Tyser int cpu_init_r(void) 294a4145534SPeter Tyser { 295a4145534SPeter Tyser return (0); 296a4145534SPeter Tyser } 297a4145534SPeter Tyser 298a4145534SPeter Tyser void uart_port_conf(int port) 299a4145534SPeter Tyser { 300a4145534SPeter Tyser u16 temp; 301a4145534SPeter Tyser 302a4145534SPeter Tyser /* Setup Ports: */ 303a4145534SPeter Tyser switch (port) { 304a4145534SPeter Tyser case 0: 305a4145534SPeter Tyser temp = mbar_readShort(MCF_GPIO_PAR_UART) & 0xFFF3; 306a4145534SPeter Tyser temp |= (MCF_GPIO_PAR_UART_U0TXD | MCF_GPIO_PAR_UART_U0RXD); 307a4145534SPeter Tyser mbar_writeShort(MCF_GPIO_PAR_UART, temp); 308a4145534SPeter Tyser break; 309a4145534SPeter Tyser case 1: 310a4145534SPeter Tyser temp = mbar_readShort(MCF_GPIO_PAR_UART) & 0xF0FF; 311a4145534SPeter Tyser temp |= (MCF_GPIO_PAR_UART_U1RXD_UART1 | MCF_GPIO_PAR_UART_U1TXD_UART1); 312a4145534SPeter Tyser mbar_writeShort(MCF_GPIO_PAR_UART, temp); 313a4145534SPeter Tyser break; 314a4145534SPeter Tyser case 2: 315a4145534SPeter Tyser temp = mbar_readShort(MCF_GPIO_PAR_UART) & 0xCFFF; 316a4145534SPeter Tyser temp |= (0x3000); 317a4145534SPeter Tyser mbar_writeShort(MCF_GPIO_PAR_UART, temp); 318a4145534SPeter Tyser break; 319a4145534SPeter Tyser } 320a4145534SPeter Tyser } 321a4145534SPeter Tyser 322a4145534SPeter Tyser #if defined(CONFIG_CMD_NET) 323a4145534SPeter Tyser int fecpin_setclear(struct eth_device *dev, int setclear) 324a4145534SPeter Tyser { 325a4145534SPeter Tyser if (setclear) { 326a4145534SPeter Tyser /* Enable Ethernet pins */ 327a4145534SPeter Tyser mbar_writeByte(MCF_GPIO_PAR_FECI2C, 328a4145534SPeter Tyser (mbar_readByte(MCF_GPIO_PAR_FECI2C) | 0xF0)); 329a4145534SPeter Tyser } else { 330a4145534SPeter Tyser } 331a4145534SPeter Tyser 332a4145534SPeter Tyser return 0; 333a4145534SPeter Tyser } 334a4145534SPeter Tyser #endif /* CONFIG_CMD_NET */ 335a4145534SPeter Tyser #endif 336a4145534SPeter Tyser 337a4145534SPeter Tyser #if defined(CONFIG_M5272) 338a4145534SPeter Tyser /* 339a4145534SPeter Tyser * Breath some life into the CPU... 340a4145534SPeter Tyser * 341a4145534SPeter Tyser * Set up the memory map, 342a4145534SPeter Tyser * initialize a bunch of registers, 343a4145534SPeter Tyser * initialize the UPM's 344a4145534SPeter Tyser */ 345a4145534SPeter Tyser void cpu_init_f(void) 346a4145534SPeter Tyser { 347a4145534SPeter Tyser /* if we come from RAM we assume the CPU is 348a4145534SPeter Tyser * already initialized. 349a4145534SPeter Tyser */ 350a4145534SPeter Tyser #ifndef CONFIG_MONITOR_IS_IN_RAM 351a4145534SPeter Tyser volatile sysctrl_t *sysctrl = (sysctrl_t *) (CONFIG_SYS_MBAR); 352a4145534SPeter Tyser volatile gpio_t *gpio = (gpio_t *) (MMAP_GPIO); 353a4145534SPeter Tyser volatile csctrl_t *csctrl = (csctrl_t *) (MMAP_FBCS); 354a4145534SPeter Tyser 355a4145534SPeter Tyser sysctrl->sc_scr = CONFIG_SYS_SCR; 356a4145534SPeter Tyser sysctrl->sc_spr = CONFIG_SYS_SPR; 357a4145534SPeter Tyser 358a4145534SPeter Tyser /* Setup Ports: */ 359a4145534SPeter Tyser gpio->gpio_pacnt = CONFIG_SYS_PACNT; 360a4145534SPeter Tyser gpio->gpio_paddr = CONFIG_SYS_PADDR; 361a4145534SPeter Tyser gpio->gpio_padat = CONFIG_SYS_PADAT; 362a4145534SPeter Tyser gpio->gpio_pbcnt = CONFIG_SYS_PBCNT; 363a4145534SPeter Tyser gpio->gpio_pbddr = CONFIG_SYS_PBDDR; 364a4145534SPeter Tyser gpio->gpio_pbdat = CONFIG_SYS_PBDAT; 365a4145534SPeter Tyser gpio->gpio_pdcnt = CONFIG_SYS_PDCNT; 366a4145534SPeter Tyser 367a4145534SPeter Tyser /* Memory Controller: */ 368a4145534SPeter Tyser csctrl->cs_br0 = CONFIG_SYS_BR0_PRELIM; 369a4145534SPeter Tyser csctrl->cs_or0 = CONFIG_SYS_OR0_PRELIM; 370a4145534SPeter Tyser 371a4145534SPeter Tyser #if (defined(CONFIG_SYS_OR1_PRELIM) && defined(CONFIG_SYS_BR1_PRELIM)) 372a4145534SPeter Tyser csctrl->cs_br1 = CONFIG_SYS_BR1_PRELIM; 373a4145534SPeter Tyser csctrl->cs_or1 = CONFIG_SYS_OR1_PRELIM; 374a4145534SPeter Tyser #endif 375a4145534SPeter Tyser 376a4145534SPeter Tyser #if defined(CONFIG_SYS_OR2_PRELIM) && defined(CONFIG_SYS_BR2_PRELIM) 377a4145534SPeter Tyser csctrl->cs_br2 = CONFIG_SYS_BR2_PRELIM; 378a4145534SPeter Tyser csctrl->cs_or2 = CONFIG_SYS_OR2_PRELIM; 379a4145534SPeter Tyser #endif 380a4145534SPeter Tyser 381a4145534SPeter Tyser #if defined(CONFIG_SYS_OR3_PRELIM) && defined(CONFIG_SYS_BR3_PRELIM) 382a4145534SPeter Tyser csctrl->cs_br3 = CONFIG_SYS_BR3_PRELIM; 383a4145534SPeter Tyser csctrl->cs_or3 = CONFIG_SYS_OR3_PRELIM; 384a4145534SPeter Tyser #endif 385a4145534SPeter Tyser 386a4145534SPeter Tyser #if defined(CONFIG_SYS_OR4_PRELIM) && defined(CONFIG_SYS_BR4_PRELIM) 387a4145534SPeter Tyser csctrl->cs_br4 = CONFIG_SYS_BR4_PRELIM; 388a4145534SPeter Tyser csctrl->cs_or4 = CONFIG_SYS_OR4_PRELIM; 389a4145534SPeter Tyser #endif 390a4145534SPeter Tyser 391a4145534SPeter Tyser #if defined(CONFIG_SYS_OR5_PRELIM) && defined(CONFIG_SYS_BR5_PRELIM) 392a4145534SPeter Tyser csctrl->cs_br5 = CONFIG_SYS_BR5_PRELIM; 393a4145534SPeter Tyser csctrl->cs_or5 = CONFIG_SYS_OR5_PRELIM; 394a4145534SPeter Tyser #endif 395a4145534SPeter Tyser 396a4145534SPeter Tyser #if defined(CONFIG_SYS_OR6_PRELIM) && defined(CONFIG_SYS_BR6_PRELIM) 397a4145534SPeter Tyser csctrl->cs_br6 = CONFIG_SYS_BR6_PRELIM; 398a4145534SPeter Tyser csctrl->cs_or6 = CONFIG_SYS_OR6_PRELIM; 399a4145534SPeter Tyser #endif 400a4145534SPeter Tyser 401a4145534SPeter Tyser #if defined(CONFIG_SYS_OR7_PRELIM) && defined(CONFIG_SYS_BR7_PRELIM) 402a4145534SPeter Tyser csctrl->cs_br7 = CONFIG_SYS_BR7_PRELIM; 403a4145534SPeter Tyser csctrl->cs_or7 = CONFIG_SYS_OR7_PRELIM; 404a4145534SPeter Tyser #endif 405a4145534SPeter Tyser 406a4145534SPeter Tyser #endif /* #ifndef CONFIG_MONITOR_IS_IN_RAM */ 407a4145534SPeter Tyser 408a4145534SPeter Tyser /* enable instruction cache now */ 409a4145534SPeter Tyser icache_enable(); 410a4145534SPeter Tyser 411a4145534SPeter Tyser } 412a4145534SPeter Tyser 413a4145534SPeter Tyser /* 414a4145534SPeter Tyser * initialize higher level parts of CPU like timers 415a4145534SPeter Tyser */ 416a4145534SPeter Tyser int cpu_init_r(void) 417a4145534SPeter Tyser { 418a4145534SPeter Tyser return (0); 419a4145534SPeter Tyser } 420a4145534SPeter Tyser 421a4145534SPeter Tyser void uart_port_conf(int port) 422a4145534SPeter Tyser { 423a4145534SPeter Tyser volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; 424a4145534SPeter Tyser 425a4145534SPeter Tyser /* Setup Ports: */ 426a4145534SPeter Tyser switch (port) { 427a4145534SPeter Tyser case 0: 428a4145534SPeter Tyser gpio->gpio_pbcnt &= ~(GPIO_PBCNT_PB0MSK | GPIO_PBCNT_PB1MSK); 429a4145534SPeter Tyser gpio->gpio_pbcnt |= (GPIO_PBCNT_URT0_TXD | GPIO_PBCNT_URT0_RXD); 430a4145534SPeter Tyser break; 431a4145534SPeter Tyser case 1: 432a4145534SPeter Tyser gpio->gpio_pdcnt &= ~(GPIO_PDCNT_PD1MSK | GPIO_PDCNT_PD4MSK); 433a4145534SPeter Tyser gpio->gpio_pdcnt |= (GPIO_PDCNT_URT1_RXD | GPIO_PDCNT_URT1_TXD); 434a4145534SPeter Tyser break; 435a4145534SPeter Tyser } 436a4145534SPeter Tyser } 437a4145534SPeter Tyser 438a4145534SPeter Tyser #if defined(CONFIG_CMD_NET) 439a4145534SPeter Tyser int fecpin_setclear(struct eth_device *dev, int setclear) 440a4145534SPeter Tyser { 441a4145534SPeter Tyser volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; 442a4145534SPeter Tyser 443a4145534SPeter Tyser if (setclear) { 444a4145534SPeter Tyser gpio->gpio_pbcnt |= GPIO_PBCNT_E_MDC | GPIO_PBCNT_E_RXER | 445a4145534SPeter Tyser GPIO_PBCNT_E_RXD1 | GPIO_PBCNT_E_RXD2 | 446a4145534SPeter Tyser GPIO_PBCNT_E_RXD3 | GPIO_PBCNT_E_TXD1 | 447a4145534SPeter Tyser GPIO_PBCNT_E_TXD2 | GPIO_PBCNT_E_TXD3; 448a4145534SPeter Tyser } else { 449a4145534SPeter Tyser } 450a4145534SPeter Tyser return 0; 451a4145534SPeter Tyser } 452a4145534SPeter Tyser #endif /* CONFIG_CMD_NET */ 453a4145534SPeter Tyser #endif /* #if defined(CONFIG_M5272) */ 454a4145534SPeter Tyser 455a4145534SPeter Tyser #if defined(CONFIG_M5275) 456a4145534SPeter Tyser 457a4145534SPeter Tyser /* 458a4145534SPeter Tyser * Breathe some life into the CPU... 459a4145534SPeter Tyser * 460a4145534SPeter Tyser * Set up the memory map, 461a4145534SPeter Tyser * initialize a bunch of registers, 462a4145534SPeter Tyser * initialize the UPM's 463a4145534SPeter Tyser */ 464a4145534SPeter Tyser void cpu_init_f(void) 465a4145534SPeter Tyser { 466a4145534SPeter Tyser /* 467a4145534SPeter Tyser * if we come from RAM we assume the CPU is 468a4145534SPeter Tyser * already initialized. 469a4145534SPeter Tyser */ 470a4145534SPeter Tyser 471a4145534SPeter Tyser #ifndef CONFIG_MONITOR_IS_IN_RAM 472a4145534SPeter Tyser volatile wdog_t *wdog_reg = (wdog_t *) (MMAP_WDOG); 473a4145534SPeter Tyser volatile gpio_t *gpio_reg = (gpio_t *) (MMAP_GPIO); 474a4145534SPeter Tyser 475a4145534SPeter Tyser /* Kill watchdog so we can initialize the PLL */ 476a4145534SPeter Tyser wdog_reg->wcr = 0; 477a4145534SPeter Tyser 478a4145534SPeter Tyser /* FlexBus Chipselect */ 479a4145534SPeter Tyser init_fbcs(); 480a4145534SPeter Tyser #endif /* #ifndef CONFIG_MONITOR_IS_IN_RAM */ 481a4145534SPeter Tyser 482a4145534SPeter Tyser #ifdef CONFIG_FSL_I2C 483a4145534SPeter Tyser CONFIG_SYS_I2C_PINMUX_REG &= CONFIG_SYS_I2C_PINMUX_CLR; 484a4145534SPeter Tyser CONFIG_SYS_I2C_PINMUX_REG |= CONFIG_SYS_I2C_PINMUX_SET; 485a4145534SPeter Tyser #endif 486a4145534SPeter Tyser 487a4145534SPeter Tyser /* enable instruction cache now */ 488a4145534SPeter Tyser icache_enable(); 489a4145534SPeter Tyser } 490a4145534SPeter Tyser 491a4145534SPeter Tyser /* 492a4145534SPeter Tyser * initialize higher level parts of CPU like timers 493a4145534SPeter Tyser */ 494a4145534SPeter Tyser int cpu_init_r(void) 495a4145534SPeter Tyser { 496a4145534SPeter Tyser return (0); 497a4145534SPeter Tyser } 498a4145534SPeter Tyser 499a4145534SPeter Tyser void uart_port_conf(int port) 500a4145534SPeter Tyser { 501a4145534SPeter Tyser volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; 502a4145534SPeter Tyser 503a4145534SPeter Tyser /* Setup Ports: */ 504a4145534SPeter Tyser switch (port) { 505a4145534SPeter Tyser case 0: 506a4145534SPeter Tyser gpio->par_uart &= ~UART0_ENABLE_MASK; 507a4145534SPeter Tyser gpio->par_uart |= UART0_ENABLE_MASK; 508a4145534SPeter Tyser break; 509a4145534SPeter Tyser case 1: 510a4145534SPeter Tyser gpio->par_uart &= ~UART1_ENABLE_MASK; 511a4145534SPeter Tyser gpio->par_uart |= UART1_ENABLE_MASK; 512a4145534SPeter Tyser break; 513a4145534SPeter Tyser case 2: 514a4145534SPeter Tyser gpio->par_uart &= ~UART2_ENABLE_MASK; 515a4145534SPeter Tyser gpio->par_uart |= UART2_ENABLE_MASK; 516a4145534SPeter Tyser break; 517a4145534SPeter Tyser } 518a4145534SPeter Tyser } 519a4145534SPeter Tyser 520a4145534SPeter Tyser #if defined(CONFIG_CMD_NET) 521a4145534SPeter Tyser int fecpin_setclear(struct eth_device *dev, int setclear) 522a4145534SPeter Tyser { 523a4145534SPeter Tyser struct fec_info_s *info = (struct fec_info_s *) dev->priv; 524a4145534SPeter Tyser volatile gpio_t *gpio = (gpio_t *)MMAP_GPIO; 525a4145534SPeter Tyser 526a4145534SPeter Tyser if (setclear) { 527a4145534SPeter Tyser /* Enable Ethernet pins */ 528a4145534SPeter Tyser if (info->iobase == CONFIG_SYS_FEC0_IOBASE) { 529a4145534SPeter Tyser gpio->par_feci2c |= 0x0F00; 530a4145534SPeter Tyser gpio->par_fec0hl |= 0xC0; 531a4145534SPeter Tyser } else { 532a4145534SPeter Tyser gpio->par_feci2c |= 0x00A0; 533a4145534SPeter Tyser gpio->par_fec1hl |= 0xC0; 534a4145534SPeter Tyser } 535a4145534SPeter Tyser } else { 536a4145534SPeter Tyser if (info->iobase == CONFIG_SYS_FEC0_IOBASE) { 537a4145534SPeter Tyser gpio->par_feci2c &= ~0x0F00; 538a4145534SPeter Tyser gpio->par_fec0hl &= ~0xC0; 539a4145534SPeter Tyser } else { 540a4145534SPeter Tyser gpio->par_feci2c &= ~0x00A0; 541a4145534SPeter Tyser gpio->par_fec1hl &= ~0xC0; 542a4145534SPeter Tyser } 543a4145534SPeter Tyser } 544a4145534SPeter Tyser 545a4145534SPeter Tyser return 0; 546a4145534SPeter Tyser } 547a4145534SPeter Tyser #endif /* CONFIG_CMD_NET */ 548a4145534SPeter Tyser #endif /* #if defined(CONFIG_M5275) */ 549a4145534SPeter Tyser 550a4145534SPeter Tyser #if defined(CONFIG_M5282) 551a4145534SPeter Tyser /* 552a4145534SPeter Tyser * Breath some life into the CPU... 553a4145534SPeter Tyser * 554a4145534SPeter Tyser * Set up the memory map, 555a4145534SPeter Tyser * initialize a bunch of registers, 556a4145534SPeter Tyser * initialize the UPM's 557a4145534SPeter Tyser */ 558a4145534SPeter Tyser void cpu_init_f(void) 559a4145534SPeter Tyser { 560a4145534SPeter Tyser #ifndef CONFIG_WATCHDOG 561a4145534SPeter Tyser /* disable watchdog if we aren't using it */ 562a4145534SPeter Tyser MCFWTM_WCR = 0; 563a4145534SPeter Tyser #endif 564a4145534SPeter Tyser 565a4145534SPeter Tyser #ifndef CONFIG_MONITOR_IS_IN_RAM 566a4145534SPeter Tyser /* Set speed /PLL */ 567a4145534SPeter Tyser MCFCLOCK_SYNCR = 568a4145534SPeter Tyser MCFCLOCK_SYNCR_MFD(CONFIG_SYS_MFD) | 569a4145534SPeter Tyser MCFCLOCK_SYNCR_RFD(CONFIG_SYS_RFD); 570a4145534SPeter Tyser while (!(MCFCLOCK_SYNSR & MCFCLOCK_SYNSR_LOCK)) ; 571a4145534SPeter Tyser 572a4145534SPeter Tyser MCFGPIO_PBCDPAR = 0xc0; 573a4145534SPeter Tyser 574a4145534SPeter Tyser /* Set up the GPIO ports */ 575a4145534SPeter Tyser #ifdef CONFIG_SYS_PEPAR 576a4145534SPeter Tyser MCFGPIO_PEPAR = CONFIG_SYS_PEPAR; 577a4145534SPeter Tyser #endif 578a4145534SPeter Tyser #ifdef CONFIG_SYS_PFPAR 579a4145534SPeter Tyser MCFGPIO_PFPAR = CONFIG_SYS_PFPAR; 580a4145534SPeter Tyser #endif 581a4145534SPeter Tyser #ifdef CONFIG_SYS_PJPAR 582a4145534SPeter Tyser MCFGPIO_PJPAR = CONFIG_SYS_PJPAR; 583a4145534SPeter Tyser #endif 584a4145534SPeter Tyser #ifdef CONFIG_SYS_PSDPAR 585a4145534SPeter Tyser MCFGPIO_PSDPAR = CONFIG_SYS_PSDPAR; 586a4145534SPeter Tyser #endif 587a4145534SPeter Tyser #ifdef CONFIG_SYS_PASPAR 588a4145534SPeter Tyser MCFGPIO_PASPAR = CONFIG_SYS_PASPAR; 589a4145534SPeter Tyser #endif 590a4145534SPeter Tyser #ifdef CONFIG_SYS_PEHLPAR 591a4145534SPeter Tyser MCFGPIO_PEHLPAR = CONFIG_SYS_PEHLPAR; 592a4145534SPeter Tyser #endif 593a4145534SPeter Tyser #ifdef CONFIG_SYS_PQSPAR 594a4145534SPeter Tyser MCFGPIO_PQSPAR = CONFIG_SYS_PQSPAR; 595a4145534SPeter Tyser #endif 596a4145534SPeter Tyser #ifdef CONFIG_SYS_PTCPAR 597a4145534SPeter Tyser MCFGPIO_PTCPAR = CONFIG_SYS_PTCPAR; 598a4145534SPeter Tyser #endif 599a4145534SPeter Tyser #if defined(CONFIG_SYS_PORTTC) 600a4145534SPeter Tyser MCFGPIO_PORTTC = CONFIG_SYS_PORTTC; 601a4145534SPeter Tyser #endif 602a4145534SPeter Tyser #if defined(CONFIG_SYS_DDRTC) 603a4145534SPeter Tyser MCFGPIO_DDRTC = CONFIG_SYS_DDRTC; 604a4145534SPeter Tyser #endif 605a4145534SPeter Tyser #ifdef CONFIG_SYS_PTDPAR 606a4145534SPeter Tyser MCFGPIO_PTDPAR = CONFIG_SYS_PTDPAR; 607a4145534SPeter Tyser #endif 608a4145534SPeter Tyser #ifdef CONFIG_SYS_PUAPAR 609a4145534SPeter Tyser MCFGPIO_PUAPAR = CONFIG_SYS_PUAPAR; 610a4145534SPeter Tyser #endif 611a4145534SPeter Tyser 612a4145534SPeter Tyser #if defined(CONFIG_SYS_DDRD) 613a4145534SPeter Tyser MCFGPIO_DDRD = CONFIG_SYS_DDRD; 614a4145534SPeter Tyser #endif 615a4145534SPeter Tyser #ifdef CONFIG_SYS_DDRUA 616a4145534SPeter Tyser MCFGPIO_DDRUA = CONFIG_SYS_DDRUA; 617a4145534SPeter Tyser #endif 618a4145534SPeter Tyser 619a4145534SPeter Tyser /* FlexBus Chipselect */ 620a4145534SPeter Tyser init_fbcs(); 621a4145534SPeter Tyser 622a4145534SPeter Tyser #endif /* CONFIG_MONITOR_IS_IN_RAM */ 623a4145534SPeter Tyser 624a4145534SPeter Tyser /* defer enabling cache until boot (see do_go) */ 625a4145534SPeter Tyser /* icache_enable(); */ 626a4145534SPeter Tyser } 627a4145534SPeter Tyser 628a4145534SPeter Tyser /* 629a4145534SPeter Tyser * initialize higher level parts of CPU like timers 630a4145534SPeter Tyser */ 631a4145534SPeter Tyser int cpu_init_r(void) 632a4145534SPeter Tyser { 633a4145534SPeter Tyser return (0); 634a4145534SPeter Tyser } 635a4145534SPeter Tyser 636a4145534SPeter Tyser void uart_port_conf(int port) 637a4145534SPeter Tyser { 638a4145534SPeter Tyser /* Setup Ports: */ 639a4145534SPeter Tyser switch (port) { 640a4145534SPeter Tyser case 0: 641a4145534SPeter Tyser MCFGPIO_PUAPAR &= 0xFc; 642a4145534SPeter Tyser MCFGPIO_PUAPAR |= 0x03; 643a4145534SPeter Tyser break; 644a4145534SPeter Tyser case 1: 645a4145534SPeter Tyser MCFGPIO_PUAPAR &= 0xF3; 646a4145534SPeter Tyser MCFGPIO_PUAPAR |= 0x0C; 647a4145534SPeter Tyser break; 648a4145534SPeter Tyser case 2: 649a4145534SPeter Tyser MCFGPIO_PASPAR &= 0xFF0F; 650a4145534SPeter Tyser MCFGPIO_PASPAR |= 0x00A0; 651a4145534SPeter Tyser break; 652a4145534SPeter Tyser } 653a4145534SPeter Tyser } 654a4145534SPeter Tyser 655a4145534SPeter Tyser #if defined(CONFIG_CMD_NET) 656a4145534SPeter Tyser int fecpin_setclear(struct eth_device *dev, int setclear) 657a4145534SPeter Tyser { 658a4145534SPeter Tyser if (setclear) { 659a4145534SPeter Tyser MCFGPIO_PASPAR |= 0x0F00; 660a4145534SPeter Tyser MCFGPIO_PEHLPAR = CONFIG_SYS_PEHLPAR; 661a4145534SPeter Tyser } else { 662a4145534SPeter Tyser MCFGPIO_PASPAR &= 0xF0FF; 663a4145534SPeter Tyser MCFGPIO_PEHLPAR &= ~CONFIG_SYS_PEHLPAR; 664a4145534SPeter Tyser } 665a4145534SPeter Tyser return 0; 666a4145534SPeter Tyser } 667a4145534SPeter Tyser #endif /* CONFIG_CMD_NET */ 668a4145534SPeter Tyser #endif 669a4145534SPeter Tyser 670a4145534SPeter Tyser #if defined(CONFIG_M5249) 671a4145534SPeter Tyser /* 672a4145534SPeter Tyser * Breath some life into the CPU... 673a4145534SPeter Tyser * 674a4145534SPeter Tyser * Set up the memory map, 675a4145534SPeter Tyser * initialize a bunch of registers, 676a4145534SPeter Tyser * initialize the UPM's 677a4145534SPeter Tyser */ 678a4145534SPeter Tyser void cpu_init_f(void) 679a4145534SPeter Tyser { 680a4145534SPeter Tyser /* 681a4145534SPeter Tyser * NOTE: by setting the GPIO_FUNCTION registers, we ensure that the UART pins 682a4145534SPeter Tyser * (UART0: gpio 30,27, UART1: gpio 31, 28) will be used as UART pins 683a4145534SPeter Tyser * which is their primary function. 684a4145534SPeter Tyser * ~Jeremy 685a4145534SPeter Tyser */ 686a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO_FUNC, CONFIG_SYS_GPIO_FUNC); 687a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO1_FUNC, CONFIG_SYS_GPIO1_FUNC); 688a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO_EN, CONFIG_SYS_GPIO_EN); 689a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO1_EN, CONFIG_SYS_GPIO1_EN); 690a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO_OUT, CONFIG_SYS_GPIO_OUT); 691a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO1_OUT, CONFIG_SYS_GPIO1_OUT); 692a4145534SPeter Tyser 693a4145534SPeter Tyser /* 694a4145534SPeter Tyser * dBug Compliance: 695a4145534SPeter Tyser * You can verify these values by using dBug's 'ird' 696a4145534SPeter Tyser * (Internal Register Display) command 697a4145534SPeter Tyser * ~Jeremy 698a4145534SPeter Tyser * 699a4145534SPeter Tyser */ 700a4145534SPeter Tyser mbar_writeByte(MCFSIM_MPARK, 0x30); /* 5249 Internal Core takes priority over DMA */ 701a4145534SPeter Tyser mbar_writeByte(MCFSIM_SYPCR, 0x00); 702a4145534SPeter Tyser mbar_writeByte(MCFSIM_SWIVR, 0x0f); 703a4145534SPeter Tyser mbar_writeByte(MCFSIM_SWSR, 0x00); 704a4145534SPeter Tyser mbar_writeLong(MCFSIM_IMR, 0xfffffbff); 705a4145534SPeter Tyser mbar_writeByte(MCFSIM_SWDICR, 0x00); 706a4145534SPeter Tyser mbar_writeByte(MCFSIM_TIMER1ICR, 0x00); 707a4145534SPeter Tyser mbar_writeByte(MCFSIM_TIMER2ICR, 0x88); 708a4145534SPeter Tyser mbar_writeByte(MCFSIM_I2CICR, 0x00); 709a4145534SPeter Tyser mbar_writeByte(MCFSIM_UART1ICR, 0x00); 710a4145534SPeter Tyser mbar_writeByte(MCFSIM_UART2ICR, 0x00); 711a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR6, 0x00); 712a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR7, 0x00); 713a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR8, 0x00); 714a4145534SPeter Tyser mbar_writeByte(MCFSIM_ICR9, 0x00); 715a4145534SPeter Tyser mbar_writeByte(MCFSIM_QSPIICR, 0x00); 716a4145534SPeter Tyser 717a4145534SPeter Tyser mbar2_writeLong(MCFSIM_GPIO_INT_EN, 0x00000080); 718a4145534SPeter Tyser mbar2_writeByte(MCFSIM_INTBASE, 0x40); /* Base interrupts at 64 */ 719a4145534SPeter Tyser mbar2_writeByte(MCFSIM_SPURVEC, 0x00); 720a4145534SPeter Tyser mbar2_writeLong(MCFSIM_IDECONFIG1, 0x00000020); /* Enable a 1 cycle pre-drive cycle on CS1 */ 721a4145534SPeter Tyser 722a4145534SPeter Tyser /* Setup interrupt priorities for gpio7 */ 723a4145534SPeter Tyser /* mbar2_writeLong(MCFSIM_INTLEV5, 0x70000000); */ 724a4145534SPeter Tyser 725a4145534SPeter Tyser /* IDE Config registers */ 726a4145534SPeter Tyser mbar2_writeLong(MCFSIM_IDECONFIG1, 0x00000020); 727a4145534SPeter Tyser mbar2_writeLong(MCFSIM_IDECONFIG2, 0x00000000); 728a4145534SPeter Tyser 729a4145534SPeter Tyser /* FlexBus Chipselect */ 730a4145534SPeter Tyser init_fbcs(); 731a4145534SPeter Tyser 732a4145534SPeter Tyser /* enable instruction cache now */ 733a4145534SPeter Tyser icache_enable(); 734a4145534SPeter Tyser } 735a4145534SPeter Tyser 736a4145534SPeter Tyser /* 737a4145534SPeter Tyser * initialize higher level parts of CPU like timers 738a4145534SPeter Tyser */ 739a4145534SPeter Tyser int cpu_init_r(void) 740a4145534SPeter Tyser { 741a4145534SPeter Tyser return (0); 742a4145534SPeter Tyser } 743a4145534SPeter Tyser 744a4145534SPeter Tyser void uart_port_conf(int port) 745a4145534SPeter Tyser { 746a4145534SPeter Tyser } 747a4145534SPeter Tyser #endif /* #if defined(CONFIG_M5249) */ 748