blob: 3e087112076e7d6a1c2ed4ad1656b64a19a5e608 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001# SPDX-License-Identifier: GPL-2.0+
Bin Meng6ab240d2015-10-07 20:19:20 -07002#
3# Copyright (C) 2013, Miao Yan <miao.yan@windriver.com>
Bin Mengb9cf35b2018-06-27 20:38:06 -07004# Copyright (C) 2015-2018, Bin Meng <bmeng.cn@gmail.com>
Bin Meng6ab240d2015-10-07 20:19:20 -07005
6VxWorks Support
7===============
8
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
16on PowerPC and ARM, 'bootm' shall be used.
17
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 Menge1544542018-04-11 22:02:06 -070021VxWorks 7 on PowerPC and ARM
Bin Meng6ab240d2015-10-07 20:19:20 -070022---------------------------
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
Bin Meng6ab240d2015-10-07 20:19:20 -070027For PowerPC, the calling convention of the new VxWorks entry point conforms to
28the ePAPR standard, which is shown below (see ePAPR for more details):
Miao Yanaed14582013-11-28 17:51:40 +080029
Bin Meng6ab240d2015-10-07 20:19:20 -070030 void (*kernel_entry)(fdt_addr, 0, 0, EPAPR_MAGIC, boot_IMA, 0, 0)
Miao Yanaed14582013-11-28 17:51:40 +080031
Bin Menge1544542018-04-11 22:02:06 -070032For ARM, the calling convention is shown below:
Miao Yanaed14582013-11-28 17:51:40 +080033
34 void (*kernel_entry)(void *fdt_addr)
35
Bin Menge1544542018-04-11 22:02:06 -070036When booting a VxWorks 7 kernel (uImage format), the parameters passed to bootm
Bin Meng6ab240d2015-10-07 20:19:20 -070037is like below:
Miao Yanaed14582013-11-28 17:51:40 +080038
39 bootm <kernel image address> - <device tree address>
40
Bin Meng6ab240d2015-10-07 20:19:20 -070041VxWorks bootline
42----------------
43When using 'bootvx', the kernel bootline must be prepared by U-Boot at a
44board-specific address before loading VxWorks. U-Boot supplies its address
45via "bootaddr" environment variable. To check where the bootline should be
46for a specific board, go to the VxWorks BSP for that board, and look for a
47parameter called BOOT_LINE_ADRS. Assign its value to "bootaddr". A typical
Bin Menge1544542018-04-11 22:02:06 -070048value for "bootaddr" on an x86 board is 0x101200.
Bin Meng6ab240d2015-10-07 20:19:20 -070049
50If a "bootargs" variable is defined, its content will be copied to the memory
51location pointed by "bootaddr" as the kernel bootline. If "bootargs" is not
52there, command 'bootvx' can construct a valid bootline using the following
53environments variables: bootdev, bootfile, ipaddr, netmask, serverip,
54gatewayip, hostname, othbootargs.
55
56When using 'bootm', just define "bootargs" in the environment and U-Boot will
57handle bootline fix up for the kernel dtb automatically.
58
Bin Mengb9cf35b2018-06-27 20:38:06 -070059When using 'bootefi' to chain load an x86 kernel, the UEFI boot loader
60application for VxWorks takes care of the kernel bootline preparation.
61
Bin Meng6ab240d2015-10-07 20:19:20 -070062Serial console
63--------------
64It's very common that VxWorks BSPs configure a different baud rate for the
65serial console from what is being used by U-Boot. For example, VxWorks tends
66to use 9600 as the default baud rate on all x86 BSPs while U-Boot uses 115200.
67Please configure both U-Boot and VxWorks to use the same baud rate, or it may
68look like VxWorks hangs somewhere as nothing outputs on the serial console.
69
70x86-specific information
71------------------------
Bin Mengb9cf35b2018-06-27 20:38:06 -070072Before direct loading an x86 kernel via 'bootvx', one additional environment
73variable need to be provided. This is "vx_phys_mem_base", which represent the
74physical memory base address of VxWorks.
Bin Meng6ab240d2015-10-07 20:19:20 -070075
Bin Menge3be8902018-04-11 22:02:07 -070076Check VxWorks kernel configuration to look for LOCAL_MEM_LOCAL_ADRS. For
77VxWorks 7, this is normally a virtual address and you need find out its
78corresponding physical address and assign its value to "vx_phys_mem_base".
Bin Meng6ab240d2015-10-07 20:19:20 -070079
Bin Menge1544542018-04-11 22:02:06 -070080For boards on which ACPI is not supported by U-Boot yet, VxWorks kernel must
Bin Meng6ab240d2015-10-07 20:19:20 -070081be configured to use MP table and virtual wire interrupt mode. This requires
82INCLUDE_MPTABLE_BOOT_OP and INCLUDE_VIRTUAL_WIRE_MODE to be included in a
83VxWorks kernel configuration.
Bin Menga0024552018-04-11 22:02:23 -070084
85Both 32-bit x86 and 64-bit x64 kernels can be loaded.
86
87There are two types of graphics console drivers in VxWorks. One is the 80x25
88VGA text mode driver. The other one is the EFI console bitmapped graphics mode
89driver. To make these drivers function, U-Boot needs to load and run the VGA
90BIOS of the graphics card first.
91
92 - If the kernel is configured with 80x25 VGA text mode driver,
93 CONFIG_FRAMEBUFFER_SET_VESA_MODE must be unset in U-Boot.
94 - If the kernel is configured with bitmapped graphics mode driver,
95 CONFIG_FRAMEBUFFER_SET_VESA_MODE need remain set but care must be taken
96 at which VESA mode is to be set. The supported pixel format is 32-bit
97 RGBA, hence the available VESA mode can only be one of the following:
98 * FRAMEBUFFER_VESA_MODE_10F
99 * FRAMEBUFFER_VESA_MODE_112
100 * FRAMEBUFFER_VESA_MODE_115
101 * FRAMEBUFFER_VESA_MODE_118
102 * FRAMEBUFFER_VESA_MODE_11B