|
|||
Prex Home / Browse Source - Prex Version: 0.9.0 |
|||
root/bsp/hal/arm/integrator/machdep.c/* [<][>][^][v][top][bottom][index][help] */DEFINITIONSThis source file includes following definitions.1 /*- 2 * Copyright (c) 2008-2009, Kohsuke Ohtani 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the author nor the names of any co-contributors 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 /* 31 * machdep.c - machine-dependent routines for ARM Integrator-CP 32 */ 33 34 #include <machine/syspage.h> 35 #include <sys/power.h> 36 #include <sys/bootinfo.h> 37 #include <kernel.h> 38 #include <page.h> 39 #include <mmu.h> 40 #include <cpu.h> 41 #include <cpufunc.h> 42 #include <locore.h> 43 44 #include "platform.h" 45 46 /* System control reg */ 47 #define SC_CTRL (*(volatile uint32_t *)(FPGA_BASE + 0x0c)) 48 49 #define SCCTRL_SOFTRESET 0x08 50 51 #ifdef CONFIG_MMU 52 /* 53 * Virtual and physical address mapping 54 * 55 * { virtual, physical, size, type } 56 */ 57 struct mmumap mmumap_table[] = 58 { 59 /* 60 * Internal SRAM (4M) 61 */ 62 { 0x80000000, 0x00000000, 0x400000, VMT_RAM }, 63 64 /* 65 * FPGA core control (4K) 66 */ 67 { 0xD0000000, 0x10000000, 0x1000, VMT_IO }, 68 69 /* 70 * Counter/Timers (1M) 71 */ 72 { 0xD3000000, 0x13000000, 0x100000, VMT_IO }, 73 74 /* 75 * Interrupt controller (1M) 76 */ 77 { 0xD4000000, 0x14000000, 0x100000, VMT_IO }, 78 79 /* 80 * Real-time clock (1M) 81 */ 82 { 0xD5000000, 0x15000000, 0x100000, VMT_IO }, 83 84 /* 85 * UART 0 (1M) 86 */ 87 { 0xD6000000, 0x16000000, 0x100000, VMT_IO }, 88 89 { 0,0,0,0 } 90 }; 91 #endif 92 93 /* 94 * Idle 95 */ 96 void 97 machine_idle(void) 98 { 99 100 cpu_idle(); 101 } 102 103 /* 104 * Reset system. 105 */ 106 static void 107 machine_reset(void) 108 { 109 110 SC_CTRL = SCCTRL_SOFTRESET; 111 112 for (;;) ; 113 /* NOTREACHED */ 114 } 115 116 /* 117 * Set system power 118 */ 119 void 120 machine_powerdown(int state) 121 { 122 123 splhigh(); 124 125 DPRINTF(("Power down machine\n")); 126 127 switch (state) { 128 case PWR_OFF: 129 for (;;) 130 cpu_idle(); 131 /* NOTREACHED */ 132 break; 133 case PWR_REBOOT: 134 machine_reset(); 135 /* NOTREACHED */ 136 break; 137 } 138 } 139 140 /* 141 * Return pointer to the boot information. 142 */ 143 void 144 machine_bootinfo(struct bootinfo **bip) 145 { 146 147 *bip = (struct bootinfo *)BOOTINFO; 148 } 149 150 void 151 machine_abort(void) 152 { 153 154 for (;;) 155 cpu_idle(); 156 } 157 158 /* 159 * Machine-dependent startup code 160 */ 161 void 162 machine_startup(void) 163 { 164 165 /* 166 * Initialize CPU and basic hardware. 167 */ 168 cpu_init(); 169 cache_init(); 170 171 /* 172 * Reserve system pages. 173 */ 174 page_reserve(kvtop(SYSPAGE), SYSPAGESZ); 175 176 /* 177 * Setup vector page. 178 */ 179 vector_copy((vaddr_t)ptokv(CONFIG_ARM_VECTORS)); 180 181 #ifdef CONFIG_MMU 182 /* 183 * Initialize MMU 184 */ 185 mmu_init(mmumap_table); 186 #endif 187 } /* [<][>][^][v][top][bottom][index][help] */ | |||
Copyright© 2005-2009 Kohsuke Ohtani |