1f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* 2f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de> 3f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * 4f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * See file CREDITS for list of people who contributed to this 5f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * project. 6f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * 7f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * This program is free software; you can redistribute it and/or 8f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * modify it under the terms of the GNU General Public License as 9f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * published by the Free Software Foundation; either version 2 of 10f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * the License, or (at your option) any later version. 11f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * 12f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * This program is distributed in the hope that it will be useful, 13f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * but WITHOUT ANY WARRANTY; without even the implied warranty of 14f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * GNU General Public License for more details. 16f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * 17f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * You should have received a copy of the GNU General Public License 18f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * along with this program; if not, write to the Free Software 19f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * MA 02111-1307 USA 21f5acb9fdSJean-Christophe PLAGNIOL-VILLARD */ 22f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 23f5acb9fdSJean-Christophe PLAGNIOL-VILLARD #include <common.h> 24b1c0eaacSBen Warren #include <netdev.h> 25f5acb9fdSJean-Christophe PLAGNIOL-VILLARD #include <asm/io.h> 2686271115SStefano Babic #include <asm/arch/clock.h> 2786271115SStefano Babic #include <asm/arch/imx-regs.h> 28f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 29f5acb9fdSJean-Christophe PLAGNIOL-VILLARD DECLARE_GLOBAL_DATA_PTR; 30f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 31f5acb9fdSJean-Christophe PLAGNIOL-VILLARD int dram_init(void) 32f5acb9fdSJean-Christophe PLAGNIOL-VILLARD { 33*4ac2e2d6SFabio Estevam /* dram_init must store complete ramsize in gd->ram_size */ 34*4ac2e2d6SFabio Estevam gd->ram_size = get_ram_size((volatile void *)PHYS_SDRAM_1, 35*4ac2e2d6SFabio Estevam PHYS_SDRAM_1_SIZE); 36f5acb9fdSJean-Christophe PLAGNIOL-VILLARD return 0; 37f5acb9fdSJean-Christophe PLAGNIOL-VILLARD } 38f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 39*4ac2e2d6SFabio Estevam void dram_init_banksize(void) 40*4ac2e2d6SFabio Estevam { 41*4ac2e2d6SFabio Estevam gd->bd->bi_dram[0].start = PHYS_SDRAM_1; 42*4ac2e2d6SFabio Estevam gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; 43*4ac2e2d6SFabio Estevam } 44*4ac2e2d6SFabio Estevam 45*4ac2e2d6SFabio Estevam int board_early_init_f(void) 46f5acb9fdSJean-Christophe PLAGNIOL-VILLARD { 47f5acb9fdSJean-Christophe PLAGNIOL-VILLARD int i; 48f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 49f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* CS0: Nor Flash */ 50f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* 51f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * CS0L and CS0A values are from the RedBoot sources by Freescale 52f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * and are also equal to those used by Sascha Hauer for the Phytec 53f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * i.MX31 board. CS0U is just a slightly optimized hardware default: 54f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * the only non-zero field "Wait State Control" is set to half the 55f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * default value. 56f5acb9fdSJean-Christophe PLAGNIOL-VILLARD */ 57f5acb9fdSJean-Christophe PLAGNIOL-VILLARD __REG(CSCR_U(0)) = 0x00000f00; 58f5acb9fdSJean-Christophe PLAGNIOL-VILLARD __REG(CSCR_L(0)) = 0x10000D03; 59f5acb9fdSJean-Christophe PLAGNIOL-VILLARD __REG(CSCR_A(0)) = 0x00720900; 60f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 61f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* setup pins for UART1 */ 62f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_RXD1__UART1_RXD_MUX); 63f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_TXD1__UART1_TXD_MUX); 64f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_RTS1__UART1_RTS_B); 65f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CTS1__UART1_CTS_B); 66f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 67f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* SPI2 */ 68f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CSPI2_SS2__CSPI2_SS2_B); 69f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CSPI2_SCLK__CSPI2_CLK); 70f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CSPI2_SPI_RDY__CSPI2_DATAREADY_B); 71f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CSPI2_MOSI__CSPI2_MOSI); 72f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CSPI2_MISO__CSPI2_MISO); 73f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CSPI2_SS0__CSPI2_SS0_B); 74f5acb9fdSJean-Christophe PLAGNIOL-VILLARD mx31_gpio_mux(MUX_CSPI2_SS1__CSPI2_SS1_B); 75f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 76f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* start SPI2 clock */ 77f5acb9fdSJean-Christophe PLAGNIOL-VILLARD __REG(CCM_CGR2) = __REG(CCM_CGR2) | (3 << 4); 78f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 79f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* PBC setup */ 80f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* Enable UART transceivers also reset the Ethernet/external UART */ 81f5acb9fdSJean-Christophe PLAGNIOL-VILLARD readw(CS4_BASE + 4); 82f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 83f5acb9fdSJean-Christophe PLAGNIOL-VILLARD writew(0x8023, CS4_BASE + 4); 84f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 85f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* RedBoot also has an empty loop with 100000 iterations here - 86f5acb9fdSJean-Christophe PLAGNIOL-VILLARD * clock doesn't run yet */ 87f5acb9fdSJean-Christophe PLAGNIOL-VILLARD for (i = 0; i < 100000; i++) 88f5acb9fdSJean-Christophe PLAGNIOL-VILLARD ; 89f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 90f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* Clear the reset, toggle the LEDs */ 91f5acb9fdSJean-Christophe PLAGNIOL-VILLARD writew(0xDF, CS4_BASE + 6); 92f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 93f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* clock still doesn't run */ 94f5acb9fdSJean-Christophe PLAGNIOL-VILLARD for (i = 0; i < 100000; i++) 95f5acb9fdSJean-Christophe PLAGNIOL-VILLARD ; 96f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 97f5acb9fdSJean-Christophe PLAGNIOL-VILLARD /* See 1.5.4 in IMX31ADSE_PERI_BUS_CNTRL_CPLD_RM.pdf */ 98f5acb9fdSJean-Christophe PLAGNIOL-VILLARD readb(CS4_BASE + 8); 99f5acb9fdSJean-Christophe PLAGNIOL-VILLARD readb(CS4_BASE + 7); 100f5acb9fdSJean-Christophe PLAGNIOL-VILLARD readb(CS4_BASE + 8); 101f5acb9fdSJean-Christophe PLAGNIOL-VILLARD readb(CS4_BASE + 7); 102f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 103*4ac2e2d6SFabio Estevam return 0; 104*4ac2e2d6SFabio Estevam } 105*4ac2e2d6SFabio Estevam 106*4ac2e2d6SFabio Estevam int board_init(void) 107*4ac2e2d6SFabio Estevam { 108f5acb9fdSJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_arch_number = MACH_TYPE_MX31ADS; /* board id for linux */ 109f5acb9fdSJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_boot_params = 0x80000100; /* adress of boot parameters */ 110f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 111f5acb9fdSJean-Christophe PLAGNIOL-VILLARD return 0; 112f5acb9fdSJean-Christophe PLAGNIOL-VILLARD } 113f5acb9fdSJean-Christophe PLAGNIOL-VILLARD 114f5acb9fdSJean-Christophe PLAGNIOL-VILLARD int checkboard (void) 115f5acb9fdSJean-Christophe PLAGNIOL-VILLARD { 116f5acb9fdSJean-Christophe PLAGNIOL-VILLARD printf("Board: MX31ADS\n"); 117f5acb9fdSJean-Christophe PLAGNIOL-VILLARD return 0; 118f5acb9fdSJean-Christophe PLAGNIOL-VILLARD } 119b1c0eaacSBen Warren 120b1c0eaacSBen Warren #ifdef CONFIG_CMD_NET 121b1c0eaacSBen Warren int board_eth_init(bd_t *bis) 122b1c0eaacSBen Warren { 123b1c0eaacSBen Warren int rc = 0; 124b1c0eaacSBen Warren #ifdef CONFIG_CS8900 125b1c0eaacSBen Warren rc = cs8900_initialize(0, CONFIG_CS8900_BASE); 126b1c0eaacSBen Warren #endif 127b1c0eaacSBen Warren return rc; 128b1c0eaacSBen Warren } 129b1c0eaacSBen Warren #endif 130