blob: 0fe33d2d34c1aedce13f8dd2436a9fcecd61e684 [file] [log] [blame]
Bin Meng8dbb67b2022-03-28 10:43:49 +08001.. SPDX-License-Identifier: GPL-2.0+
2.. Copyright (C) 2013, Miao Yan <miao.yan@windriver.com>
3.. Copyright (C) 2015-2018, Bin Meng <bmeng.cn@gmail.com>
4.. Copyright (C) 2019, Lihua Zhao <lihua.zhao@windriver.com>
Bin Meng6ab240d2015-10-07 20:19:20 -07005
Bin Meng8dbb67b2022-03-28 10:43:49 +08006VxWorks
7=======
Bin Meng6ab240d2015-10-07 20:19:20 -07008
9This document describes the information about U-Boot loading VxWorks kernel.
10
11Status
12------
13U-Boot supports loading VxWorks kernels via 'bootvx' and 'bootm' commands.
14For booting old kernels (6.9.x) on PowerPC and ARM, and all kernel versions
15on other architectures, 'bootvx' shall be used. For booting VxWorks 7 kernels
Bin Meng2b71e132022-03-28 10:43:50 +080016on PowerPC/ARM/RISC-V, 'bootm' shall be used.
Bin Meng6ab240d2015-10-07 20:19:20 -070017
Bin Mengb9cf35b2018-06-27 20:38:06 -070018With CONFIG_EFI_LOADER option, it's possible to chain load a VxWorks x86 kernel
19via the UEFI boot loader application for VxWorks loaded by 'bootefi' command.
20
Bin Meng2b71e132022-03-28 10:43:50 +080021VxWorks 7 on PowerPC/ARM/RISC-V
22-------------------------------
Bin Mengb9cf35b2018-06-27 20:38:06 -070023From VxWorks 7, VxWorks starts adopting device tree as its hardware description
24mechanism (for PowerPC and ARM), thus requiring boot interface changes.
Miao Yanaed14582013-11-28 17:51:40 +080025This section will describe the new interface.
26
Lihua Zhaodcda76e2019-11-15 00:21:17 -080027Since VxWorks 7 SR0640 release, VxWorks starts using Linux compatible standard
28DTB for some boards. With that, the exact same bootm flow as used by Linux is
29used, which includes board-specific DTB fix up. To keep backward compatibility,
30only when the least significant bit of flags in bootargs is set, the standard
31DTB will be used. Otherwise it falls back to the legacy bootm flow.
32
33For legacy bootm flow, make sure the least significant bit of flags in bootargs
34is cleared. The calling convention is described below:
35
Bin Meng6ab240d2015-10-07 20:19:20 -070036For PowerPC, the calling convention of the new VxWorks entry point conforms to
37the ePAPR standard, which is shown below (see ePAPR for more details):
Miao Yanaed14582013-11-28 17:51:40 +080038
Bin Meng8dbb67b2022-03-28 10:43:49 +080039.. code-block:: c
40
Bin Meng6ab240d2015-10-07 20:19:20 -070041 void (*kernel_entry)(fdt_addr, 0, 0, EPAPR_MAGIC, boot_IMA, 0, 0)
Miao Yanaed14582013-11-28 17:51:40 +080042
Bin Menge1544542018-04-11 22:02:06 -070043For ARM, the calling convention is shown below:
Miao Yanaed14582013-11-28 17:51:40 +080044
Bin Meng8dbb67b2022-03-28 10:43:49 +080045.. code-block:: c
46
Miao Yanaed14582013-11-28 17:51:40 +080047 void (*kernel_entry)(void *fdt_addr)
48
Lihua Zhaodcda76e2019-11-15 00:21:17 -080049When using the Linux compatible standard DTB, the calling convention of VxWorks
50entry point is exactly the same as the Linux kernel.
51
Bin Meng2b71e132022-03-28 10:43:50 +080052For RISC-V, there is no legacy bootm flow as VxWorks always uses the same boot
53interface as the Linux kernel, with the calling convention below::
54
55 void (*kernel_entry)(unsigned long hartid, void *fdt_addr)
56
Bin Menge1544542018-04-11 22:02:06 -070057When booting a VxWorks 7 kernel (uImage format), the parameters passed to bootm
Bin Meng8dbb67b2022-03-28 10:43:49 +080058is like below::
Miao Yanaed14582013-11-28 17:51:40 +080059
60 bootm <kernel image address> - <device tree address>
61
Bin Meng6ab240d2015-10-07 20:19:20 -070062VxWorks bootline
63----------------
64When using 'bootvx', the kernel bootline must be prepared by U-Boot at a
65board-specific address before loading VxWorks. U-Boot supplies its address
66via "bootaddr" environment variable. To check where the bootline should be
67for a specific board, go to the VxWorks BSP for that board, and look for a
68parameter called BOOT_LINE_ADRS. Assign its value to "bootaddr". A typical
Bin Menge1544542018-04-11 22:02:06 -070069value for "bootaddr" on an x86 board is 0x101200.
Bin Meng6ab240d2015-10-07 20:19:20 -070070
71If a "bootargs" variable is defined, its content will be copied to the memory
72location pointed by "bootaddr" as the kernel bootline. If "bootargs" is not
73there, command 'bootvx' can construct a valid bootline using the following
74environments variables: bootdev, bootfile, ipaddr, netmask, serverip,
75gatewayip, hostname, othbootargs.
76
77When using 'bootm', just define "bootargs" in the environment and U-Boot will
78handle bootline fix up for the kernel dtb automatically.
79
Bin Mengb9cf35b2018-06-27 20:38:06 -070080When using 'bootefi' to chain load an x86 kernel, the UEFI boot loader
81application for VxWorks takes care of the kernel bootline preparation.
82
Bin Meng6ab240d2015-10-07 20:19:20 -070083Serial console
84--------------
85It's very common that VxWorks BSPs configure a different baud rate for the
86serial console from what is being used by U-Boot. For example, VxWorks tends
87to use 9600 as the default baud rate on all x86 BSPs while U-Boot uses 115200.
88Please configure both U-Boot and VxWorks to use the same baud rate, or it may
89look like VxWorks hangs somewhere as nothing outputs on the serial console.
90
91x86-specific information
92------------------------
Bin Mengb9cf35b2018-06-27 20:38:06 -070093Before direct loading an x86 kernel via 'bootvx', one additional environment
94variable need to be provided. This is "vx_phys_mem_base", which represent the
95physical memory base address of VxWorks.
Bin Meng6ab240d2015-10-07 20:19:20 -070096
Bin Menge3be8902018-04-11 22:02:07 -070097Check VxWorks kernel configuration to look for LOCAL_MEM_LOCAL_ADRS. For
98VxWorks 7, this is normally a virtual address and you need find out its
99corresponding physical address and assign its value to "vx_phys_mem_base".
Bin Meng6ab240d2015-10-07 20:19:20 -0700100
Bin Menge1544542018-04-11 22:02:06 -0700101For boards on which ACPI is not supported by U-Boot yet, VxWorks kernel must
Bin Meng6ab240d2015-10-07 20:19:20 -0700102be configured to use MP table and virtual wire interrupt mode. This requires
103INCLUDE_MPTABLE_BOOT_OP and INCLUDE_VIRTUAL_WIRE_MODE to be included in a
104VxWorks kernel configuration.
Bin Menga0024552018-04-11 22:02:23 -0700105
106Both 32-bit x86 and 64-bit x64 kernels can be loaded.
107
108There are two types of graphics console drivers in VxWorks. One is the 80x25
109VGA text mode driver. The other one is the EFI console bitmapped graphics mode
110driver. To make these drivers function, U-Boot needs to load and run the VGA
111BIOS of the graphics card first.
112
113 - If the kernel is configured with 80x25 VGA text mode driver,
114 CONFIG_FRAMEBUFFER_SET_VESA_MODE must be unset in U-Boot.
115 - If the kernel is configured with bitmapped graphics mode driver,
116 CONFIG_FRAMEBUFFER_SET_VESA_MODE need remain set but care must be taken
117 at which VESA mode is to be set. The supported pixel format is 32-bit
118 RGBA, hence the available VESA mode can only be one of the following:
Bin Meng8dbb67b2022-03-28 10:43:49 +0800119
Bin Menga0024552018-04-11 22:02:23 -0700120 * FRAMEBUFFER_VESA_MODE_10F
121 * FRAMEBUFFER_VESA_MODE_112
122 * FRAMEBUFFER_VESA_MODE_115
123 * FRAMEBUFFER_VESA_MODE_118
124 * FRAMEBUFFER_VESA_MODE_11B