head.S
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * arch/ppc/boot/simple/head.S
  3.  *
  4.  * Initial board bringup code for many different boards.
  5.  *
  6.  * Author: Tom Rini
  7.  *    trini@mvista.com
  8.  * Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
  9.  *
  10.  * Copyright 2001 MontaVista Software Inc.
  11.  *
  12.  * This program is free software; you can redistribute  it and/or modify it
  13.  * under  the terms of  the GNU General  Public License as published by the
  14.  * Free Software Foundation;  either version 2 of the  License, or (at your
  15.  * option) any later version.
  16.  */
  17. #include <linux/config.h>
  18. #include <asm/processor.h>
  19. #include <asm/cache.h>
  20. #include <asm/ppc_asm.h>
  21. .text
  22. /*
  23.  *      Begin at some arbitrary location in RAM or Flash
  24.  *   Initialize core registers
  25.  *   Configure memory controller (Not executing from RAM)
  26.  * Move the boot code to the link address (8M)
  27.  *   Setup C stack
  28.  *   Initialize UART
  29.  *      Decompress the kernel to 0x0
  30.  *      Jump to the kernel entry
  31.  *
  32.  */
  33. .globl start
  34. start:
  35. bl start_
  36. #ifdef CONFIG_TREEBOOT
  37. /* The IBM "Tree" bootrom knows that the address of the bootrom
  38.  * read only structure is 4 bytes after _start.
  39.  */
  40. .long 0x62726f6d # structure ID - "brom"
  41. .long 0x5f726f00 #              - "_ro"
  42. .long 1 # structure version
  43. .long bootrom_cmdline # address of *bootrom_cmdline
  44. #endif
  45. start_:
  46. #ifdef CONFIG_FORCE
  47. /* We have some really bad firmware.  We must disable the L1
  48.  * icache/dcache now or the board won't boot.
  49.  */
  50. li r4,0x0000
  51. isync
  52. mtspr HID0,r4
  53. sync
  54. isync
  55. #endif
  56. #if defined(CONFIG_MBX) || defined(CONFIG_RPX6)
  57. mr r29,r3 /* On the MBX860, r3 is the board info pointer.
  58.  * On the RPXSUPER, r3 points to the
  59.  * NVRAM configuration keys.
  60.  */
  61. #endif
  62. mflr r3 /* Save our actual starting address. */
  63. /* The following functions we call must not modify r3 or r4.....
  64. */
  65. #ifdef CONFIG_6xx
  66. bl disable_6xx_mmu
  67. bl disable_6xx_l1cache
  68. #if defined(CONFIG_FORCE) || defined(CONFIG_K2) || defined(CONFIG_EV64260)
  69. bl _setup_L2CR
  70. #endif
  71. #endif
  72. #ifdef CONFIG_8xx
  73. mfmsr r8 /* Turn off interrupts */
  74. li r9,0
  75. ori r9,r9,MSR_EE
  76. andc r8,r8,r9
  77. mtmsr r8
  78. /* We do this because some boot roms don't initialize the
  79.  * processor correctly. Don't do this if you want to debug
  80.  * using a BDM device.
  81.  */
  82. li r4,0 /* Zero DER to prevent FRZ */
  83. mtspr SPRN_DER,r4
  84. #endif
  85. #ifdef CONFIG_REDWOOD_4
  86. /* All of this Redwood 4 stuff will soon disappear when the
  87.  * boot rom is straightened out.
  88.  */
  89. mr r29, r3 /* Easier than changing the other code */
  90. bl HdwInit
  91. mr r3, r29
  92. #endif
  93. #if defined(CONFIG_MBX) || defined(CONFIG_RPX6)
  94. mr r4,r29 /* put the board info pointer where the relocate
  95.  * routine will find it
  96.  */
  97. #endif
  98. #ifdef CONFIG_EV64260
  99. /* Move 64260's base regs & CS window for external UART */
  100. bl ev64260_init
  101. #endif
  102. /* Get the load address.
  103. */
  104. subi r3, r3, 4 /* Get the actual IP, not NIP */
  105. b relocate