summaryrefslogtreecommitdiffstats
path: root/arch/m68k/mach-mcfv4e.dox
blob: 0ecfbc2c9d343191558199238624e8b08dde7159 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* This document is intended to provide the developer with information
 * how to integrate a new CPU (MACH) into this part of the U-Boot tree
 */

/** @page dev_m68k_mach M68k/Coldfire based CPU (MACH) into the tree

FIXME - fill in further info about Coldfire and so on. Check code
  for compliance with the specs given below - move code otherwise.

@par What's happens when the reset signal is gone

@note Code running immediately after reset runs at an address it is not linked
      to: "runtime address != link address". You should only use branches and
      do not refer to fixed data. This implies the use of assembler code only.

The M68k CPU starts at lable \<reset\> in one of the corresponding start-*.S
files. After some basic hardware setup it can call a function
\<arch_init_lowlevel\> if not disabled. This call is intended to give all
developers a chance to use a standard reset vector file, but also do some
special things required only on their specific CPU.

After handling some MMU, Stack or similiar issues, \<board_init_lowlevel\> can
be called (if not disabled). This is a board specific function for SDRAM setup
for example. As its board specific, your can do whatever you need to bring
your board up. As stack is already set to internal core RAM, this routine can
be C.

@note: You are not allowed to call other code here, because we are not running
       at link address.

When \<board_init_lowlevel\> returns it will be assumed that there is now
working RAM that can be used for all further steps.

Next step is relocation of U-Boot itself. It gets copied to the end of
available RAM and the last assembly instruction is a jump to \<start_uboot\>.

At this point of time: "runtime address == link address".

*/