123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /*
- *
- * Common functions for OMAP4 based boards
- *
- * (C) Copyright 2010
- * Texas Instruments, <www.ti.com>
- *
- * Author :
- * Aneesh V <aneesh@ti.com>
- * Steve Sakoman <steve@sakoman.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
- */
- #include <common.h>
- #include <asm/arch/cpu.h>
- #include <asm/arch/sys_proto.h>
- #include <asm/sizes.h>
- /*
- * Routine: s_init
- * Description: Does early system init of muxing and clocks.
- * - Called path is with SRAM stack.
- */
- void s_init(void)
- {
- watchdog_init();
- }
- /*
- * Routine: wait_for_command_complete
- * Description: Wait for posting to finish on watchdog
- */
- void wait_for_command_complete(struct watchdog *wd_base)
- {
- int pending = 1;
- do {
- pending = readl(&wd_base->wwps);
- } while (pending);
- }
- /*
- * Routine: watchdog_init
- * Description: Shut down watch dogs
- */
- void watchdog_init(void)
- {
- struct watchdog *wd2_base = (struct watchdog *)WDT2_BASE;
- writel(WD_UNLOCK1, &wd2_base->wspr);
- wait_for_command_complete(wd2_base);
- writel(WD_UNLOCK2, &wd2_base->wspr);
- }
- /*
- * This function finds the SDRAM size available in the system
- * based on DMM section configurations
- * This is needed because the size of memory installed may be
- * different on different versions of the board
- */
- u32 sdram_size(void)
- {
- u32 section, i, total_size = 0, size, addr;
- for (i = 0; i < 4; i++) {
- section = __raw_readl(DMM_LISA_MAP_BASE + i*4);
- addr = section & DMM_LISA_MAP_SYS_ADDR_MASK;
- /* See if the address is valid */
- if ((addr >= OMAP44XX_DRAM_ADDR_SPACE_START) &&
- (addr < OMAP44XX_DRAM_ADDR_SPACE_END)) {
- size = ((section & DMM_LISA_MAP_SYS_SIZE_MASK) >>
- DMM_LISA_MAP_SYS_SIZE_SHIFT);
- size = 1 << size;
- size *= SZ_16M;
- total_size += size;
- }
- }
- return total_size;
- }
- /*
- * Routine: dram_init
- * Description: sets uboots idea of sdram size
- */
- int dram_init(void)
- {
- DECLARE_GLOBAL_DATA_PTR;
- #if defined(CONFIG_SYS_ARM_WITHOUT_RELOC)
- gd->bd->bi_dram[0].start = 0x80000000;
- gd->bd->bi_dram[0].size = sdram_size();
- #else
- gd->ram_size = sdram_size();
- #endif
- return 0;
- }
- /*
- * Print board information
- */
- int checkboard(void)
- {
- puts(sysinfo.board_string);
- return 0;
- }
- /*
- * This function is called by start_armboot. You can reliably use static
- * data. Any boot-time function that require static data should be
- * called from here
- */
- int arch_cpu_init(void)
- {
- set_muxconf_regs();
- return 0;
- }
|