xref: /openbmc/u-boot/doc/README.vxworks (revision 2ad3d088d2177908bd9bc7a988bd75fe55c6874c)
13619e94aSBin Meng#
23619e94aSBin Meng# Copyright (C) 2013, Miao Yan <miao.yan@windriver.com>
33619e94aSBin Meng# Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
43619e94aSBin Meng#
53619e94aSBin Meng# SPDX-License-Identifier:	GPL-2.0+
63619e94aSBin Meng#
73619e94aSBin Meng
83619e94aSBin MengVxWorks Support
93619e94aSBin Meng===============
103619e94aSBin Meng
113619e94aSBin MengThis document describes the information about U-Boot loading VxWorks kernel.
123619e94aSBin Meng
133619e94aSBin MengStatus
143619e94aSBin Meng------
153619e94aSBin MengU-Boot supports loading VxWorks kernels via 'bootvx' and 'bootm' commands.
163619e94aSBin MengFor booting old kernels (6.9.x) on PowerPC and ARM, and all kernel versions
173619e94aSBin Mengon other architectures, 'bootvx' shall be used. For booting VxWorks 7 kernels
183619e94aSBin Mengon PowerPC and ARM, 'bootm' shall be used.
193619e94aSBin Meng
203619e94aSBin Meng64-bit x86 kernel cannot be loaded as of today.
213619e94aSBin Meng
22*2ad3d088SBin MengVxWorks 7 on PowerPC and ARM
233619e94aSBin Meng---------------------------
243619e94aSBin MengFrom VxWorks 7, VxWorks starts adopting device tree as its hardware decription
253619e94aSBin Mengmechansim (for PowerPC and ARM), thus requiring boot interface changes.
2682450b9aSMiao YanThis section will describe the new interface.
2782450b9aSMiao Yan
283619e94aSBin MengFor PowerPC, the calling convention of the new VxWorks entry point conforms to
293619e94aSBin Mengthe ePAPR standard, which is shown below (see ePAPR for more details):
3082450b9aSMiao Yan
313619e94aSBin Meng    void (*kernel_entry)(fdt_addr, 0, 0, EPAPR_MAGIC, boot_IMA, 0, 0)
3282450b9aSMiao Yan
33*2ad3d088SBin MengFor ARM, the calling convention is shown below:
3482450b9aSMiao Yan
3582450b9aSMiao Yan    void (*kernel_entry)(void *fdt_addr)
3682450b9aSMiao Yan
37*2ad3d088SBin MengWhen booting a VxWorks 7 kernel (uImage format), the parameters passed to bootm
383619e94aSBin Mengis like below:
3982450b9aSMiao Yan
4082450b9aSMiao Yan    bootm <kernel image address> - <device tree address>
4182450b9aSMiao Yan
423619e94aSBin MengVxWorks bootline
433619e94aSBin Meng----------------
443619e94aSBin MengWhen using 'bootvx', the kernel bootline must be prepared by U-Boot at a
453619e94aSBin Mengboard-specific address before loading VxWorks. U-Boot supplies its address
463619e94aSBin Mengvia "bootaddr" environment variable. To check where the bootline should be
473619e94aSBin Mengfor a specific board, go to the VxWorks BSP for that board, and look for a
483619e94aSBin Mengparameter called BOOT_LINE_ADRS. Assign its value to "bootaddr". A typical
49*2ad3d088SBin Mengvalue for "bootaddr" on an x86 board is 0x101200.
503619e94aSBin Meng
513619e94aSBin MengIf a "bootargs" variable is defined, its content will be copied to the memory
523619e94aSBin Menglocation pointed by "bootaddr" as the kernel bootline. If "bootargs" is not
533619e94aSBin Mengthere, command 'bootvx' can construct a valid bootline using the following
543619e94aSBin Mengenvironments variables: bootdev, bootfile, ipaddr, netmask, serverip,
553619e94aSBin Menggatewayip, hostname, othbootargs.
563619e94aSBin Meng
573619e94aSBin MengWhen using 'bootm', just define "bootargs" in the environment and U-Boot will
583619e94aSBin Menghandle bootline fix up for the kernel dtb automatically.
593619e94aSBin Meng
603619e94aSBin MengSerial console
613619e94aSBin Meng--------------
623619e94aSBin MengIt's very common that VxWorks BSPs configure a different baud rate for the
633619e94aSBin Mengserial console from what is being used by U-Boot. For example, VxWorks tends
643619e94aSBin Mengto use 9600 as the default baud rate on all x86 BSPs while U-Boot uses 115200.
653619e94aSBin MengPlease configure both U-Boot and VxWorks to use the same baud rate, or it may
663619e94aSBin Menglook like VxWorks hangs somewhere as nothing outputs on the serial console.
673619e94aSBin Meng
683619e94aSBin Mengx86-specific information
693619e94aSBin Meng------------------------
703619e94aSBin MengBefore loading an x86 kernel, two additional environment variables need to be
713619e94aSBin Mengprovided. They are "e820data" and "e820info", which represent the address of
723619e94aSBin MengE820 table and E820 information (defined by VxWorks) in system memory.
733619e94aSBin Meng
743619e94aSBin MengCheck VxWorks kernel configuration to look for BIOS_E820_DATA_START and
753619e94aSBin MengBIOS_E820_INFO_START, and assign their values to "e820data" and "e820info"
763619e94aSBin Mengaccordingly. If neither of these two are supplied, U-Boot assumes a default
773619e94aSBin Menglocation at 0x4000 for "e820data" and 0x4a00 for "e820info". Typical values
783619e94aSBin Mengfor "e820data" and "e820info" are 0x104000 and 0x104a00. But there is one
793619e94aSBin Mengexception on Intel Galileo, where "e820data" and "e820info" should be left
803619e94aSBin Mengunset, which assume the default location for VxWorks.
813619e94aSBin Meng
82*2ad3d088SBin MengFor boards on which ACPI is not supported by U-Boot yet, VxWorks kernel must
833619e94aSBin Mengbe configured to use MP table and virtual wire interrupt mode. This requires
843619e94aSBin MengINCLUDE_MPTABLE_BOOT_OP and INCLUDE_VIRTUAL_WIRE_MODE to be included in a
853619e94aSBin MengVxWorks kernel configuration.
86