1# 2# Copyright (C) 2013, Miao Yan <miao.yan@windriver.com> 3# Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com> 4# 5# SPDX-License-Identifier: GPL-2.0+ 6# 7 8VxWorks Support 9=============== 10 11This document describes the information about U-Boot loading VxWorks kernel. 12 13Status 14------ 15U-Boot supports loading VxWorks kernels via 'bootvx' and 'bootm' commands. 16For booting old kernels (6.9.x) on PowerPC and ARM, and all kernel versions 17on other architectures, 'bootvx' shall be used. For booting VxWorks 7 kernels 18on PowerPC and ARM, 'bootm' shall be used. 19 2064-bit x86 kernel cannot be loaded as of today. 21 22VxWork 7 on PowerPC and ARM 23--------------------------- 24From VxWorks 7, VxWorks starts adopting device tree as its hardware decription 25mechansim (for PowerPC and ARM), thus requiring boot interface changes. 26This section will describe the new interface. 27 28For PowerPC, the calling convention of the new VxWorks entry point conforms to 29the ePAPR standard, which is shown below (see ePAPR for more details): 30 31 void (*kernel_entry)(fdt_addr, 0, 0, EPAPR_MAGIC, boot_IMA, 0, 0) 32 33For ARM, the calling convention is show below: 34 35 void (*kernel_entry)(void *fdt_addr) 36 37When booting new VxWorks kernel (uImage format), the parameters passed to bootm 38is like below: 39 40 bootm <kernel image address> - <device tree address> 41 42VxWorks bootline 43---------------- 44When using 'bootvx', the kernel bootline must be prepared by U-Boot at a 45board-specific address before loading VxWorks. U-Boot supplies its address 46via "bootaddr" environment variable. To check where the bootline should be 47for a specific board, go to the VxWorks BSP for that board, and look for a 48parameter called BOOT_LINE_ADRS. Assign its value to "bootaddr". A typical 49value for "bootaddr" is 0x101200. 50 51If a "bootargs" variable is defined, its content will be copied to the memory 52location pointed by "bootaddr" as the kernel bootline. If "bootargs" is not 53there, command 'bootvx' can construct a valid bootline using the following 54environments variables: bootdev, bootfile, ipaddr, netmask, serverip, 55gatewayip, hostname, othbootargs. 56 57When using 'bootm', just define "bootargs" in the environment and U-Boot will 58handle bootline fix up for the kernel dtb automatically. 59 60Serial console 61-------------- 62It's very common that VxWorks BSPs configure a different baud rate for the 63serial console from what is being used by U-Boot. For example, VxWorks tends 64to use 9600 as the default baud rate on all x86 BSPs while U-Boot uses 115200. 65Please configure both U-Boot and VxWorks to use the same baud rate, or it may 66look like VxWorks hangs somewhere as nothing outputs on the serial console. 67 68x86-specific information 69------------------------ 70Before loading an x86 kernel, two additional environment variables need to be 71provided. They are "e820data" and "e820info", which represent the address of 72E820 table and E820 information (defined by VxWorks) in system memory. 73 74Check VxWorks kernel configuration to look for BIOS_E820_DATA_START and 75BIOS_E820_INFO_START, and assign their values to "e820data" and "e820info" 76accordingly. If neither of these two are supplied, U-Boot assumes a default 77location at 0x4000 for "e820data" and 0x4a00 for "e820info". Typical values 78for "e820data" and "e820info" are 0x104000 and 0x104a00. But there is one 79exception on Intel Galileo, where "e820data" and "e820info" should be left 80unset, which assume the default location for VxWorks. 81 82Note since currently U-Boot does not support ACPI yet, VxWorks kernel must 83be configured to use MP table and virtual wire interrupt mode. This requires 84INCLUDE_MPTABLE_BOOT_OP and INCLUDE_VIRTUAL_WIRE_MODE to be included in a 85VxWorks kernel configuration. 86