Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) Booting ARM Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) Author:	Russell King
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) Date  : 18 May 2002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) The following documentation is relevant to 2.4.18-rmk6 and beyond.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) In order to boot ARM Linux, you require a boot loader, which is a small
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) program that runs before the main kernel.  The boot loader is expected
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) to initialise various devices, and eventually call the Linux kernel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) passing information to the kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) Essentially, the boot loader should provide (as a minimum) the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) following:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 1. Setup and initialise the RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 2. Initialise one serial port.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 3. Detect the machine type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 4. Setup the kernel tagged list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 5. Load initramfs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 6. Call the kernel image.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 1. Setup and initialise RAM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) The boot loader is expected to find and initialise all RAM that the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) kernel will use for volatile data storage in the system.  It performs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) this in a machine dependent manner.  (It may use internal algorithms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) to automatically locate and size all RAM, or it may use knowledge of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) the RAM in the machine, or any other method the boot loader designer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) sees fit.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 2. Initialise one serial port
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) -----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	OPTIONAL, RECOMMENDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	OPTIONAL, RECOMMENDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) The boot loader should initialise and enable one serial port on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) target.  This allows the kernel serial driver to automatically detect
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) which serial port it should use for the kernel console (generally
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) used for debugging purposes, or communication with the target.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) As an alternative, the boot loader can pass the relevant 'console='
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) option to the kernel via the tagged lists specifying the port, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) serial format options as described in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)        Documentation/admin-guide/kernel-parameters.rst.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 3. Detect the machine type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	MANDATORY except for DT-only platforms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) The boot loader should detect the machine type its running on by some
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) method.  Whether this is a hard coded value or some algorithm that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) looks at the connected hardware is beyond the scope of this document.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) The boot loader must ultimately be able to provide a MACH_TYPE_xxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) value to the kernel. (see linux/arch/arm/tools/mach-types).  This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) should be passed to the kernel in register r1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) For DT-only platforms, the machine type will be determined by device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) tree.  set the machine type to all ones (~0).  This is not strictly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) necessary, but assures that it will not match any existing types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 4. Setup boot data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) ------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	OPTIONAL, HIGHLY RECOMMENDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) The boot loader must provide either a tagged list or a dtb image for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) passing configuration data to the kernel.  The physical address of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) boot data is passed to the kernel in register r2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 4a. Setup the kernel tagged list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) --------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) The boot loader must create and initialise the kernel tagged list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) The ATAG_CORE tag may or may not be empty.  An empty ATAG_CORE tag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) has the size field set to '2' (0x00000002).  The ATAG_NONE must set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) the size field to zero.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) Any number of tags can be placed in the list.  It is undefined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) whether a repeated tag appends to the information carried by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) previous tag, or whether it replaces the information in its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) entirety; some tags behave as the former, others the latter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) The boot loader must pass at a minimum the size and location of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) the system memory, and root filesystem location.  Therefore, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) minimum tagged list should look::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 		+-----------+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)   base ->	| ATAG_CORE |  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 		+-----------+  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 		| ATAG_MEM  |  | increasing address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 		+-----------+  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 		| ATAG_NONE |  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 		+-----------+  v
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) The tagged list should be stored in system RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) The tagged list must be placed in a region of memory where neither
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) the kernel decompressor nor initrd 'bootp' program will overwrite
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) it.  The recommended placement is in the first 16KiB of RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 4b. Setup the device tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) -------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) The boot loader must load a device tree image (dtb) into system ram
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) at a 64bit aligned address and initialize it with the boot data.  The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) dtb format is documented in Documentation/devicetree/booting-without-of.rst.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) The kernel will look for the dtb magic value of 0xd00dfeed at the dtb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) physical address to determine if a dtb has been passed instead of a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) tagged list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) The boot loader must pass at a minimum the size and location of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) system memory, and the root filesystem location.  The dtb must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) placed in a region of memory where the kernel decompressor will not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) overwrite it, while remaining within the region which will be covered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) by the kernel's low-memory mapping.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) A safe location is just above the 128MiB boundary from start of RAM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 5. Load initramfs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) If an initramfs is in use then, as with the dtb, it must be placed in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) a region of memory where the kernel decompressor will not overwrite it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) while also with the region which will be covered by the kernel's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) low-memory mapping.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) A safe location is just above the device tree blob which itself will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) be loaded just above the 128MiB boundary from the start of RAM as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) recommended above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 6. Calling the kernel image
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) Existing boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) New boot loaders:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	MANDATORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) There are two options for calling the kernel zImage.  If the zImage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) is stored in flash, and is linked correctly to be run from flash,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) then it is legal for the boot loader to call the zImage in flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) directly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) The zImage may also be placed in system RAM and called there.  The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) kernel should be placed in the first 128MiB of RAM.  It is recommended
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) that it is loaded above 32MiB in order to avoid the need to relocate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) prior to decompression, which will make the boot process slightly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) faster.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) When booting a raw (non-zImage) kernel the constraints are tighter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) In this case the kernel must be loaded at an offset into system equal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) to TEXT_OFFSET - PAGE_OFFSET.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) In any case, the following conditions must be met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) - Quiesce all DMA capable devices so that memory does not get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)   corrupted by bogus network packets or disk data. This will save
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)   you many hours of debug.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) - CPU register settings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)   - r0 = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)   - r1 = machine type number discovered in (3) above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)   - r2 = physical address of tagged list in system RAM, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)     physical address of device tree block (dtb) in system RAM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) - CPU mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)   All forms of interrupts must be disabled (IRQs and FIQs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)   For CPUs which do not include the ARM virtualization extensions, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202)   CPU must be in SVC mode.  (A special exception exists for Angel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)   CPUs which include support for the virtualization extensions can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)   entered in HYP mode in order to enable the kernel to make full use of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)   these extensions.  This is the recommended boot method for such CPUs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)   unless the virtualisations are already in use by a pre-installed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)   hypervisor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)   If the kernel is not entered in HYP mode for any reason, it must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)   entered in SVC mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) - Caches, MMUs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)   The MMU must be off.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)   Instruction cache may be on or off.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)   Data cache must be off.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)   If the kernel is entered in HYP mode, the above requirements apply to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)   the HYP mode configuration in addition to the ordinary PL1 (privileged
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)   kernel modes) configuration.  In addition, all traps into the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)   hypervisor must be disabled, and PL1 access must be granted for all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)   peripherals and CPU resources for which this is architecturally
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)   possible.  Except for entering in HYP mode, the system configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)   should be such that a kernel which does not include support for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)   virtualization extensions can boot correctly without extra help.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) - The boot loader is expected to call the kernel image by jumping
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)   directly to the first instruction of the kernel image.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)   On CPUs supporting the ARM instruction set, the entry must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)   made in ARM state, even for a Thumb-2 kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)   On CPUs supporting only the Thumb instruction set such as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)   Cortex-M class CPUs, the entry must be made in Thumb state.