183d290c5STom Rini# SPDX-License-Identifier: GPL-2.0+ 23619e94aSBin Meng# 33619e94aSBin Meng# Copyright (C) 2013, Miao Yan <miao.yan@windriver.com> 4*40144260SBin Meng# Copyright (C) 2015-2018, Bin Meng <bmeng.cn@gmail.com> 53619e94aSBin Meng 63619e94aSBin MengVxWorks Support 73619e94aSBin Meng=============== 83619e94aSBin Meng 93619e94aSBin MengThis document describes the information about U-Boot loading VxWorks kernel. 103619e94aSBin Meng 113619e94aSBin MengStatus 123619e94aSBin Meng------ 133619e94aSBin MengU-Boot supports loading VxWorks kernels via 'bootvx' and 'bootm' commands. 143619e94aSBin MengFor booting old kernels (6.9.x) on PowerPC and ARM, and all kernel versions 153619e94aSBin Mengon other architectures, 'bootvx' shall be used. For booting VxWorks 7 kernels 163619e94aSBin Mengon PowerPC and ARM, 'bootm' shall be used. 173619e94aSBin Meng 18*40144260SBin MengWith CONFIG_EFI_LOADER option, it's possible to chain load a VxWorks x86 kernel 19*40144260SBin Mengvia the UEFI boot loader application for VxWorks loaded by 'bootefi' command. 20*40144260SBin Meng 212ad3d088SBin MengVxWorks 7 on PowerPC and ARM 223619e94aSBin Meng--------------------------- 23*40144260SBin MengFrom VxWorks 7, VxWorks starts adopting device tree as its hardware description 24*40144260SBin Mengmechanism (for PowerPC and ARM), thus requiring boot interface changes. 2582450b9aSMiao YanThis section will describe the new interface. 2682450b9aSMiao Yan 273619e94aSBin MengFor PowerPC, the calling convention of the new VxWorks entry point conforms to 283619e94aSBin Mengthe ePAPR standard, which is shown below (see ePAPR for more details): 2982450b9aSMiao Yan 303619e94aSBin Meng void (*kernel_entry)(fdt_addr, 0, 0, EPAPR_MAGIC, boot_IMA, 0, 0) 3182450b9aSMiao Yan 322ad3d088SBin MengFor ARM, the calling convention is shown below: 3382450b9aSMiao Yan 3482450b9aSMiao Yan void (*kernel_entry)(void *fdt_addr) 3582450b9aSMiao Yan 362ad3d088SBin MengWhen booting a VxWorks 7 kernel (uImage format), the parameters passed to bootm 373619e94aSBin Mengis like below: 3882450b9aSMiao Yan 3982450b9aSMiao Yan bootm <kernel image address> - <device tree address> 4082450b9aSMiao Yan 413619e94aSBin MengVxWorks bootline 423619e94aSBin Meng---------------- 433619e94aSBin MengWhen using 'bootvx', the kernel bootline must be prepared by U-Boot at a 443619e94aSBin Mengboard-specific address before loading VxWorks. U-Boot supplies its address 453619e94aSBin Mengvia "bootaddr" environment variable. To check where the bootline should be 463619e94aSBin Mengfor a specific board, go to the VxWorks BSP for that board, and look for a 473619e94aSBin Mengparameter called BOOT_LINE_ADRS. Assign its value to "bootaddr". A typical 482ad3d088SBin Mengvalue for "bootaddr" on an x86 board is 0x101200. 493619e94aSBin Meng 503619e94aSBin MengIf a "bootargs" variable is defined, its content will be copied to the memory 513619e94aSBin Menglocation pointed by "bootaddr" as the kernel bootline. If "bootargs" is not 523619e94aSBin Mengthere, command 'bootvx' can construct a valid bootline using the following 533619e94aSBin Mengenvironments variables: bootdev, bootfile, ipaddr, netmask, serverip, 543619e94aSBin Menggatewayip, hostname, othbootargs. 553619e94aSBin Meng 563619e94aSBin MengWhen using 'bootm', just define "bootargs" in the environment and U-Boot will 573619e94aSBin Menghandle bootline fix up for the kernel dtb automatically. 583619e94aSBin Meng 59*40144260SBin MengWhen using 'bootefi' to chain load an x86 kernel, the UEFI boot loader 60*40144260SBin Mengapplication for VxWorks takes care of the kernel bootline preparation. 61*40144260SBin Meng 623619e94aSBin MengSerial console 633619e94aSBin Meng-------------- 643619e94aSBin MengIt's very common that VxWorks BSPs configure a different baud rate for the 653619e94aSBin Mengserial console from what is being used by U-Boot. For example, VxWorks tends 663619e94aSBin Mengto use 9600 as the default baud rate on all x86 BSPs while U-Boot uses 115200. 673619e94aSBin MengPlease configure both U-Boot and VxWorks to use the same baud rate, or it may 683619e94aSBin Menglook like VxWorks hangs somewhere as nothing outputs on the serial console. 693619e94aSBin Meng 703619e94aSBin Mengx86-specific information 713619e94aSBin Meng------------------------ 72*40144260SBin MengBefore direct loading an x86 kernel via 'bootvx', one additional environment 73*40144260SBin Mengvariable need to be provided. This is "vx_phys_mem_base", which represent the 74*40144260SBin Mengphysical memory base address of VxWorks. 753619e94aSBin Meng 762902be86SBin MengCheck VxWorks kernel configuration to look for LOCAL_MEM_LOCAL_ADRS. For 772902be86SBin MengVxWorks 7, this is normally a virtual address and you need find out its 782902be86SBin Mengcorresponding physical address and assign its value to "vx_phys_mem_base". 793619e94aSBin Meng 802ad3d088SBin MengFor boards on which ACPI is not supported by U-Boot yet, VxWorks kernel must 813619e94aSBin Mengbe configured to use MP table and virtual wire interrupt mode. This requires 823619e94aSBin MengINCLUDE_MPTABLE_BOOT_OP and INCLUDE_VIRTUAL_WIRE_MODE to be included in a 833619e94aSBin MengVxWorks kernel configuration. 847d9974a2SBin Meng 857d9974a2SBin MengBoth 32-bit x86 and 64-bit x64 kernels can be loaded. 867d9974a2SBin Meng 877d9974a2SBin MengThere are two types of graphics console drivers in VxWorks. One is the 80x25 887d9974a2SBin MengVGA text mode driver. The other one is the EFI console bitmapped graphics mode 897d9974a2SBin Mengdriver. To make these drivers function, U-Boot needs to load and run the VGA 907d9974a2SBin MengBIOS of the graphics card first. 917d9974a2SBin Meng 927d9974a2SBin Meng - If the kernel is configured with 80x25 VGA text mode driver, 937d9974a2SBin Meng CONFIG_FRAMEBUFFER_SET_VESA_MODE must be unset in U-Boot. 947d9974a2SBin Meng - If the kernel is configured with bitmapped graphics mode driver, 957d9974a2SBin Meng CONFIG_FRAMEBUFFER_SET_VESA_MODE need remain set but care must be taken 967d9974a2SBin Meng at which VESA mode is to be set. The supported pixel format is 32-bit 977d9974a2SBin Meng RGBA, hence the available VESA mode can only be one of the following: 987d9974a2SBin Meng * FRAMEBUFFER_VESA_MODE_10F 997d9974a2SBin Meng * FRAMEBUFFER_VESA_MODE_112 1007d9974a2SBin Meng * FRAMEBUFFER_VESA_MODE_115 1017d9974a2SBin Meng * FRAMEBUFFER_VESA_MODE_118 1027d9974a2SBin Meng * FRAMEBUFFER_VESA_MODE_11B 103