/* This document is intended to provide the developer with information
 * how to integrate a new CPU (MACH) into this part of the barebox tree
 */

/** @page dev_arm_mach ARM based CPU (MACH) into the tree

FIXME

@section mach_arm_reset 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 ARM 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 related things \<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.

In the case the boot happens from NAND flash memory, further steps are required.
Most of the known processor devices are reading the first few blocks from the
NAND flash memory into some kind of internal SRAM. This small part must be able
to initialize the SDRAM controller and to read the remaining rest of the
barebox binary from the NAND flash memory prior returning from \<board_init_lowlevel\>.

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

Next step is relocation of @a barebox itself (if not already done). It gets copied
to RAM and the last assembler instruction is a jump into start_barebox(). This
target address is the first C instruction in barebox. At this point of time:\n
"runtime address == link address".

@section mach_arm_files List of changes

Lets call the new MACH new_cpu.

 - create a new subdirectory in /arch/arm/mach-new_cpu
 - create a new subdirectory in /arch/arm/mach-new_cpu/include
 - add CPU specific definitions into /arch/arm/mach-new_cpu/include
 - add /arch/arm/mach-new_cpu/Kconfig
 - add /arch/arm/mach-new_cpu/Makfile
 - add other CPU specific code into /arch/arm/mach-new_cpu/
 - modify /arch/arm/Kconfig
 - modify /arch/arm/Makfile

@section mach_arm_architecures Architectures using ARM processors
For details on specific architectures:

@subsection mach_arm_omap_info OMAP CPUs

@li @subpage dev_omap_arch

@subsection mach_arm_s3c24xx_info S3C24XX CPUs

@li @subpage dev_s3c24xx_arch

TODO add more details

*/
