Home | History | Annotate | Download | only in doc
      1 # SPDX-License-Identifier: GPL-2.0+
      2 #
      3 # Copyright (C) 2013, Miao Yan <miao.yan (a] windriver.com>
      4 # Copyright (C) 2015-2018, Bin Meng <bmeng.cn (a] gmail.com>
      5 
      6 VxWorks Support
      7 ===============
      8 
      9 This document describes the information about U-Boot loading VxWorks kernel.
     10 
     11 Status
     12 ------
     13 U-Boot supports loading VxWorks kernels via 'bootvx' and 'bootm' commands.
     14 For booting old kernels (6.9.x) on PowerPC and ARM, and all kernel versions
     15 on other architectures, 'bootvx' shall be used. For booting VxWorks 7 kernels
     16 on PowerPC and ARM, 'bootm' shall be used.
     17 
     18 With CONFIG_EFI_LOADER option, it's possible to chain load a VxWorks x86 kernel
     19 via the UEFI boot loader application for VxWorks loaded by 'bootefi' command.
     20 
     21 VxWorks 7 on PowerPC and ARM
     22 ---------------------------
     23 From VxWorks 7, VxWorks starts adopting device tree as its hardware description
     24 mechanism (for PowerPC and ARM), thus requiring boot interface changes.
     25 This section will describe the new interface.
     26 
     27 For PowerPC, the calling convention of the new VxWorks entry point conforms to
     28 the ePAPR standard, which is shown below (see ePAPR for more details):
     29 
     30     void (*kernel_entry)(fdt_addr, 0, 0, EPAPR_MAGIC, boot_IMA, 0, 0)
     31 
     32 For ARM, the calling convention is shown below:
     33 
     34     void (*kernel_entry)(void *fdt_addr)
     35 
     36 When booting a VxWorks 7 kernel (uImage format), the parameters passed to bootm
     37 is like below:
     38 
     39     bootm <kernel image address> - <device tree address>
     40 
     41 VxWorks bootline
     42 ----------------
     43 When using 'bootvx', the kernel bootline must be prepared by U-Boot at a
     44 board-specific address before loading VxWorks. U-Boot supplies its address
     45 via "bootaddr" environment variable. To check where the bootline should be
     46 for a specific board, go to the VxWorks BSP for that board, and look for a
     47 parameter called BOOT_LINE_ADRS. Assign its value to "bootaddr". A typical
     48 value for "bootaddr" on an x86 board is 0x101200.
     49 
     50 If a "bootargs" variable is defined, its content will be copied to the memory
     51 location pointed by "bootaddr" as the kernel bootline. If "bootargs" is not
     52 there, command 'bootvx' can construct a valid bootline using the following
     53 environments variables: bootdev, bootfile, ipaddr, netmask, serverip,
     54 gatewayip, hostname, othbootargs.
     55 
     56 When using 'bootm', just define "bootargs" in the environment and U-Boot will
     57 handle bootline fix up for the kernel dtb automatically.
     58 
     59 When using 'bootefi' to chain load an x86 kernel, the UEFI boot loader
     60 application for VxWorks takes care of the kernel bootline preparation.
     61 
     62 Serial console
     63 --------------
     64 It's very common that VxWorks BSPs configure a different baud rate for the
     65 serial console from what is being used by U-Boot. For example, VxWorks tends
     66 to use 9600 as the default baud rate on all x86 BSPs while U-Boot uses 115200.
     67 Please configure both U-Boot and VxWorks to use the same baud rate, or it may
     68 look like VxWorks hangs somewhere as nothing outputs on the serial console.
     69 
     70 x86-specific information
     71 ------------------------
     72 Before direct loading an x86 kernel via 'bootvx', one additional environment
     73 variable need to be provided. This is "vx_phys_mem_base", which represent the
     74 physical memory base address of VxWorks.
     75 
     76 Check VxWorks kernel configuration to look for LOCAL_MEM_LOCAL_ADRS. For
     77 VxWorks 7, this is normally a virtual address and you need find out its
     78 corresponding physical address and assign its value to "vx_phys_mem_base".
     79 
     80 For boards on which ACPI is not supported by U-Boot yet, VxWorks kernel must
     81 be configured to use MP table and virtual wire interrupt mode. This requires
     82 INCLUDE_MPTABLE_BOOT_OP and INCLUDE_VIRTUAL_WIRE_MODE to be included in a
     83 VxWorks kernel configuration.
     84 
     85 Both 32-bit x86 and 64-bit x64 kernels can be loaded.
     86 
     87 There are two types of graphics console drivers in VxWorks. One is the 80x25
     88 VGA text mode driver. The other one is the EFI console bitmapped graphics mode
     89 driver. To make these drivers function, U-Boot needs to load and run the VGA
     90 BIOS 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
    103