Commit Graph

2946 Commits

Author SHA1 Message Date
royger
0c5b62d3d2 loader: implement multiboot support for Xen Dom0
Implement a subset of the multiboot specification in order to boot Xen
and a FreeBSD Dom0 from the FreeBSD bootloader. This multiboot
implementation is tailored to boot Xen and FreeBSD Dom0, and it will
most surely fail to boot any other multiboot compilant kernel.

In order to detect and boot the Xen microkernel, two new file formats
are added to the bootloader, multiboot and multiboot_obj. Multiboot
support must be tested before regular ELF support, since Xen is a
multiboot kernel that also uses ELF. After a multiboot kernel is
detected, all the other loaded kernels/modules are parsed by the
multiboot_obj format.

The layout of the loaded objects in memory is the following; first the
Xen kernel is loaded as a 32bit ELF into memory (Xen will switch to
long mode by itself), after that the FreeBSD kernel is loaded as a RAW
file (Xen will parse and load it using it's internal ELF loader), and
finally the metadata and the modules are loaded using the native
FreeBSD way. After everything is loaded we jump into Xen's entry point
using a small trampoline. The order of the multiboot modules passed to
Xen is the following, the first module is the RAW FreeBSD kernel, and
the second module is the metadata and the FreeBSD modules.

Since Xen will relocate the memory position of the second
multiboot module (the one that contains the metadata and native
FreeBSD modules), we need to stash the original modulep address inside
of the metadata itself in order to recalculate its position once
booted. This also means the metadata must come before the loaded
modules, so after loading the FreeBSD kernel a portion of memory is
reserved in order to place the metadata before booting.

In order to tell the loader to boot Xen and then the FreeBSD kernel the
following has to be added to the /boot/loader.conf file:

xen_cmdline="dom0_mem=1024M dom0_max_vcpus=2 dom0pvh=1 console=com1,vga"
xen_kernel="/boot/xen"

The first argument contains the command line that will be passed to the Xen
kernel, while the second argument is the path to the Xen kernel itself. This
can also be done manually from the loader command line, by for example
typing the following set of commands:

OK unload
OK load /boot/xen dom0_mem=1024M dom0_max_vcpus=2 dom0pvh=1 console=com1,vga
OK load kernel
OK load zfs
OK load if_tap
OK load ...
OK boot

Sponsored by: Citrix Systems R&D
Reviewed by: jhb
Differential Revision: https://reviews.freebsd.org/D517

For the Forth bits:
Submitted by: Julien Grall <julien.grall AT citrix.com>
2015-01-15 16:27:20 +00:00
loos
decdf2bedd Fix the PMIC node name to match the PMIC i2c address.
Remove an extra blank line.

No functional changes.

MFC after:	3 days
2015-01-15 01:20:56 +00:00
imp
d70d76bce5 Reserve and ignore the a new module metadata type MDT_PNP_INFO for
associating an optional PNP hint table with this module. In the
future, when these are added, these changes will silently ignore the
new type they would otherwise warn about. It will always be safe to
ignore this data. Get this into the builds today for some future
proofing.

MFC After: 3 days
2015-01-15 00:46:30 +00:00
hselasky
1346d3ca63 Add new USB template to the USB bootloader module. 2015-01-13 16:06:38 +00:00
loos
8e5fb35624 Add support to turn off Beaglebone with poweroff(8) or shutdown(8) -p.
To cut off the power we need to start the shutdown sequence by writing
the OFF bit on PMIC.

Once the PMIC is programmed the SoC needs to toggle the PMIC_PWR_ENABLE
pin when it is ready for the PMIC to cut off the power.  This is done by
triggering the ALARM2 interrupt on SoC RTC.

The RTC driver only works in power management mode which means it won't
provide any kind of time keeping functionality.  It only implements a way
to trigger the ALARM2 interrupt when requested.

Differential Revision:	https://reviews.freebsd.org/D1489
Reviewed by:	rpaulo
MFC after:	2 weeks
2015-01-12 03:23:16 +00:00
dim
59eeccaa33 Apparently more Makefiles use stuff from compiler-rt, so fix them up
too.  (This did not show during a make universe, strangely.)
2015-01-08 20:11:38 +00:00
nwhitehorn
8d2c79a0f0 Missed change in r276688. Apologies for build breakage. 2015-01-05 16:52:25 +00:00
nwhitehorn
0968c04c83 Add kexec-based Linux shim loader for use with the firmware petitboot
loader on PS3 and POWER8 systems. This is reasonably portable to other
architectures, especially FDT-based ones, if similar features are useful
elsewhere.

Netboot support is missing for now and will be added in a future commit,
at which time loader.ps3 will be garbage collected.

Done at:	Hackathon
2015-01-05 04:33:39 +00:00
ian
6f10ad7da9 Create a custom /boot/defaults/loader.conf for ARM. This differs from the
standard file in the following ways:

 - modules_path includes /boot/dtb
 - It doesn't contain 533 lines, of which 500 are either commented out,
   empty, or something_which_doesnt_work_on_arm_anyway=NO

The standard defaults file takes 40+ seconds to process on an arm beaglebone
board.  This one takes just a couple seconds.

This gets installed instead of the original because of the .PATH magic in
the makefile.
2015-01-03 19:38:37 +00:00
br
76a7fec0c1 Add driver for general-purpose I/O (GPIO).
Sponsored by:	DARPA, AFRL
2015-01-02 13:15:36 +00:00
dim
46bb7dfa77 Merge ^/head r274961 through r276418. 2014-12-30 20:23:03 +00:00
dim
4f8488255a For building sys/boot/powerpc, get rid of the obsolete -mppc64bridge
assembler flag.  No change in the generated code.

Reviewed by:	nwhitehorn
Differential Revision: https://reviews.freebsd.org/D1392
2014-12-29 17:36:37 +00:00
joel
fb7abcd8fc mdoc: remove EOL whitespace. 2014-12-29 13:50:59 +00:00
dim
0cdb9f6679 Merge ^/head r276347 through r276356. 2014-12-29 09:27:42 +00:00
dim
586a09b0c7 Use -Wl, to pass options to the linker for PowerPC's boot1.chrp.
MFC after:	3 days
2014-12-29 09:24:21 +00:00
dim
051b05da04 Merge ^/head r274961 through r276342. 2014-12-28 20:02:06 +00:00
ian
a048e38060 Use the proper markup for single quotes. 2014-12-27 17:02:09 +00:00
dim
1848cf1db3 Merge ^/head r274961 through r276301. 2014-12-27 14:58:52 +00:00
joel
7e529110a7 mdoc: improvements to SEE ALSO. 2014-12-27 07:07:37 +00:00
loos
33bb6f5b7f Add interrupt support for GPIO pins on OMAP4 and AM335x.
This enables the use of GPIO pins as interrupt sources for kernel devices
directly attached to gpiobus (userland notification will be added soon).

The use of gpio interrupts for other kernel devices will be possible when
intrng is complete.

All GPIO pins can be set to trigger on:

- active-low;
- active-high;
- rising edge;
- falling edge.

Tested on:	Beaglebone-black
2014-12-25 17:28:26 +00:00
ian
f885269f67 Revert r276101, it didn't fix the problem and causes a compile error
(nested comment blocks).
2014-12-24 01:10:53 +00:00
emaste
42dfcce67a Update comment: only one file in the FAT file system EFI boot image
Sponsored by:	The FreeBSD Foundation
2014-12-23 16:00:25 +00:00
emaste
c2a20050e7 Use explicit --output-target to set EFI file format
According to objcopy(1) --target is for use where the input and output
formats are the same ("no translation"). In practice it does detect the
input format in any case, but be explicit that we're specifying the
output format as we are translating from ELF to EFI PE format.

Sponsored by:	The FreeBSD Foundation
2014-12-23 15:58:45 +00:00
ian
7034229ae2 Convert a couple lingering NO_FORTH conditionals to test MK_FORTH. 2014-12-23 15:42:34 +00:00
rpaulo
a3b3fd6e37 Temporarily disable the cpus directive until I figure out what's wrong. 2014-12-23 03:00:18 +00:00
ian
802f4aada4 Add a new loader(8) variable, twiddle_divisor, allowing control over the
output frequency of the "twiddle" IO progress indicator.  The default
value is 1.  For larger values N, the next stage of the animation is only
output on every Nth call to the output routine.  A sufficiently large N
effectively disables the animation completely.
2014-12-22 22:07:22 +00:00
imp
69f63eaef2 Make this compile when TERM_EMU is not defined. 2014-12-22 19:10:11 +00:00
ian
c515629dd9 Allow whitspace to appear between device name and unit number in loaderdev.
This allows the same value to be used in u-boot commands and the loaderdev
env var that gets passed to ubldr, for example 'fatload mmc 1 ${bootfile}".
2014-12-21 17:10:24 +00:00
rpaulo
d78172d28f Driver for CPU frequency/voltage control on the Raspberry Pi.
Differential Revision:	https://reviews.freebsd.org/D1025
Submitted by:	Daisuke Aoyama aoyama@peach.ne.jp
Reviewed by:	ian (earlier version), rpaulo
MFC after:	1 month
Relnotes:	yes
2014-12-20 19:15:10 +00:00
dim
467c59d5a8 Merge ^/head r275759 through r275911. 2014-12-18 18:44:22 +00:00
br
2df3680ba6 Add configuration files for BERI soft-core synthesized on
Terasic SoCKit board (Altera FPGA).

Use virtio block as root filesystem device.

Sponsored by:	DARPA, AFRL
2014-12-17 11:36:31 +00:00
br
a2bb4d601d Move memory node to the root, so fdt_get_mem_regions() can find it. 2014-12-17 11:05:44 +00:00
br
af909cc2bd o Add PIO[2,3] devices information
o Enable Virtio Block
2014-12-17 10:48:53 +00:00
dim
3f2f30da4d Merge ^/head r274961 through r275684. 2014-12-10 19:24:42 +00:00
br
b236515e57 o Add BERI Virtio Networking Frontend (if_vtbe)
o Move similar block/networking methods to common file
o Follow r275640 and correct MMIO registers width
o Pass value to MMIO platform_note method.

Sponsored by:	DARPA, AFRL
2014-12-09 16:39:21 +00:00
dim
9f5c1c1611 Merge ^/head r275478 through r275622. 2014-12-08 19:56:34 +00:00
hselasky
eccb719b3b Define the ffs() function in the USB bootloader's global and
independent header file.
2014-12-05 12:04:47 +00:00
dim
5d679d6127 Merge ^/head r275387 through r275477. 2014-12-04 17:38:32 +00:00
emaste
dcd97c2f39 Increase BERI loader section alignment to 16
The .text, .bss, and .data sections claimed 16-byte alignment, but were
only aligned to 8 by the linker script.

Discovered with strip(1) from elftoolchain, which performs validation
absent from the binutils strip(1).

Sponsored by:	DARPA, AFRL
2014-12-03 14:04:57 +00:00
nyan
1daffcfa02 MFi386: r275305 (by rdivacky)
Unbreak the code for non-digits below '0' by casting the expression
  to unsigned int.
2014-12-02 14:48:21 +00:00
dim
78c1f8fbf4 Merge ^/head r275262 through r275363. 2014-12-01 13:14:39 +00:00
rdivacky
844e919815 Unbreak the code for non-digits below '0' by casting the expression
to unsigned int.

Pointed out by: bde
2014-11-30 08:43:55 +00:00
dim
409c2db38e Merge ^/head r274961 through r275261. 2014-11-29 18:44:52 +00:00
imp
d737995628 The current limit of 100k for the linker hints file is getting a bit
crowded as we now are at about 70k. Bump the limit to 1MB instead
which is still quite a reasonable limit and allows for future growth
of this file and possible future expansion to additional data.

MFC After: 2 weeks
2014-11-29 17:29:30 +00:00
nyan
e9f219c6ad MFi386: r275059, r275061, r275062 and r275191 (by rdivacky)
Shrink boot2 by a couple more bytes.
2014-11-29 12:22:31 +00:00
nyan
42d4bd50d9 MFi386: r275237 (by rdivacky)
Shrink boot2 a bit more by factoring out common pattern
  of printf();return(-1);
2014-11-29 09:27:18 +00:00
rdivacky
0dd1357d84 Shrink boot2 a bit more by factoring out common pattern
of printf();return(-1);

This shrinks it by 8bytes using clang35 and by 12bytes using clang34.
2014-11-29 08:59:26 +00:00
dim
931d83884d Merge ^/head r275118 through r275209. 2014-11-28 13:25:57 +00:00
rdivacky
50fd85b21c Revert part of r275059. Comparing unsigned 8 bit value
against -'0' is always false so the conditional block is
optimized away.
2014-11-27 18:43:44 +00:00
dim
cb8fb3ea0e r274961 through r275075 2014-11-25 21:43:01 +00:00