summaryrefslogtreecommitdiffstats
path: root/sys/boot
diff options
context:
space:
mode:
Diffstat (limited to 'sys/boot')
-rw-r--r--sys/boot/fdt/dts/am335x.dtsi30
-rw-r--r--sys/boot/fdt/dts/bcm2835.dtsi (renamed from sys/boot/fdt/dts/bcm2835-rpi-b.dts)239
-rw-r--r--sys/boot/fdt/dts/exynos5250-arndale.dts45
-rw-r--r--sys/boot/fdt/dts/exynos5250.dtsi157
-rw-r--r--sys/boot/fdt/dts/rpi.dts381
-rw-r--r--sys/boot/i386/gptboot/Makefile1
-rw-r--r--sys/boot/i386/gptboot/gptboot.8238
7 files changed, 915 insertions, 176 deletions
diff --git a/sys/boot/fdt/dts/am335x.dtsi b/sys/boot/fdt/dts/am335x.dtsi
index 482de9c..7a210b1 100644
--- a/sys/boot/fdt/dts/am335x.dtsi
+++ b/sys/boot/fdt/dts/am335x.dtsi
@@ -155,7 +155,7 @@
compatible = "ti,am335x-pwm";
#address-cells = <1>;
#size-cells = <1>;
- reg = < 0x48300000 0x100 /* PWMSS */
+ reg = < 0x48300000 0x100 /* PWMSS0 */
0x48300100 0x80 /* eCAP0 */
0x48300180 0x80 /* eQEP0 */
0x48300200 0x60 /* ePWM0 */
@@ -165,6 +165,34 @@
pwm-device-id = <0>;
};
+ pwm@48302000 {
+ compatible = "ti,am335x-pwm";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = < 0x48302000 0x100 /* PWMSS1 */
+ 0x48302100 0x80 /* eCAP1 */
+ 0x48302180 0x80 /* eQEP1 */
+ 0x48302200 0x60 /* ePWM1 */
+ >;
+ interrupts = <87 59>; /* ePWM1INT, ePWM1_TZINT */
+ interrupt-parent = <&AINTC>;
+ pwm-device-id = <1>;
+ };
+
+ pwm@48304000 {
+ compatible = "ti,am335x-pwm";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = < 0x48304000 0x100 /* PWMSS2 */
+ 0x48304100 0x80 /* eCAP2 */
+ 0x48304180 0x80 /* eQEP2 */
+ 0x48304200 0x60 /* ePWM2 */
+ >;
+ interrupts = <88 60>; /* ePWM2INT, ePWM2_TZINT */
+ interrupt-parent = <&AINTC>;
+ pwm-device-id = <2>;
+ };
+
lcd: lcd@4830e000 {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/sys/boot/fdt/dts/bcm2835-rpi-b.dts b/sys/boot/fdt/dts/bcm2835.dtsi
index 80bbef0..8078ee4 100644
--- a/sys/boot/fdt/dts/bcm2835-rpi-b.dts
+++ b/sys/boot/fdt/dts/bcm2835.dtsi
@@ -1,19 +1,33 @@
/*
+ * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@bluezbox.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
* $FreeBSD$
*/
-/dts-v1/;
-/memreserve/ 0x08000000 0x08000000; /* Set by VideoCore */
/ {
- model = "Raspberry Pi Model B (BCM2835)";
#address-cells = <1>;
#size-cells = <1>;
- compatible = "raspberrypi,model-b", "broadcom,bcm2835-vc", "broadcom,bcm2708-vc";
-
- system {
- revision = <0>; /* Set by VideoCore */
- serial = <0 0>; /* Set by VideoCore */
- };
cpus {
cpu@0 {
@@ -22,7 +36,7 @@
};
- axi {
+ SOC: axi {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
@@ -30,7 +44,8 @@
ranges = <0 0x20000000 0x01000000>;
intc: interrupt-controller {
- compatible = "broadcom,bcm2835-armctrl-ic", "broadcom,bcm2708-armctrl-ic";
+ compatible = "broadcom,bcm2835-armctrl-ic",
+ "broadcom,bcm2708-armctrl-ic";
reg = <0xB200 0x200>;
interrupt-controller;
@@ -87,7 +102,8 @@
};
timer {
- compatible = "broadcom,bcm2835-system-timer", "broadcom,bcm2708-system-timer";
+ compatible = "broadcom,bcm2835-system-timer",
+ "broadcom,bcm2708-system-timer";
reg = <0x3000 0x1000>;
interrupts = <8 9 10 11>;
interrupt-parent = <&intc>;
@@ -104,15 +120,18 @@
};
watchdog0 {
- compatible = "broadcom,bcm2835-wdt", "broadcom,bcm2708-wdt";
+ compatible = "broadcom,bcm2835-wdt",
+ "broadcom,bcm2708-wdt";
reg = <0x10001c 0x0c>; /* 0x1c, 0x20, 0x24 */
};
gpio: gpio {
- compatible = "broadcom,bcm2835-gpio", "broadcom,bcm2708-gpio";
+ compatible = "broadcom,bcm2835-gpio",
+ "broadcom,bcm2708-gpio";
reg = <0x200000 0xb0>;
- /* Unusual arrangement of interrupts (determined by testing)
+ /* Unusual arrangement of interrupts
+ * (determined by testing)
* 17: Bank 0 (GPIOs 0-31)
* 19: Bank 1 (GPIOs 32-53)
* 18: Bank 2
@@ -130,301 +149,256 @@
pinctrl-names = "default";
pinctrl-0 = <&pins_reserved>;
- /* pins that can short 3.3V to GND in output mode: 46-47
- * pins used by VideoCore: 48-53
+ /* Pins that can short 3.3V to GND in output mode: 46-47
+ * Pins used by VideoCore: 48-53
*/
- broadcom,read-only = <46>, <47>, <48>, <49>, <50>, <51>, <52>, <53>;
+ broadcom,read-only = <46>, <47>, <48>, <49>, <50>,
+ <51>, <52>, <53>;
/* BSC0 */
pins_bsc0_a: bsc0_a {
broadcom,pins = <0>, <1>;
- broadcom,function = "ALT0";
};
pins_bsc0_b: bsc0_b {
broadcom,pins = <28>, <29>;
- broadcom,function = "ALT0";
};
pins_bsc0_c: bsc0_c {
broadcom,pins = <44>, <45>;
- broadcom,function = "ALT1";
};
/* BSC1 */
pins_bsc1_a: bsc1_a {
broadcom,pins = <2>, <3>;
- broadcom,function = "ALT0";
};
pins_bsc1_b: bsc1_b {
broadcom,pins = <44>, <45>;
- broadcom,function = "ALT2";
};
/* GPCLK0 */
pins_gpclk0_a: gpclk0_a {
broadcom,pins = <4>;
- broadcom,function = "ALT0";
};
pins_gpclk0_b: gpclk0_b {
broadcom,pins = <20>;
- broadcom,function = "ALT5";
};
pins_gpclk0_c: gpclk0_c {
broadcom,pins = <32>;
- broadcom,function = "ALT0";
};
pins_gpclk0_d: gpclk0_d {
broadcom,pins = <34>;
- broadcom,function = "ALT0";
};
/* GPCLK1 */
pins_gpclk1_a: gpclk1_a {
broadcom,pins = <5>;
- broadcom,function = "ALT0";
};
pins_gpclk1_b: gpclk1_b {
broadcom,pins = <21>;
- broadcom,function = "ALT5";
};
pins_gpclk1_c: gpclk1_c {
broadcom,pins = <42>;
- broadcom,function = "ALT0";
};
pins_gpclk1_d: gpclk1_d {
broadcom,pins = <44>;
- broadcom,function = "ALT0";
};
/* GPCLK2 */
pins_gpclk2_a: gpclk2_a {
broadcom,pins = <6>;
- broadcom,function = "ALT0";
};
pins_gpclk2_b: gpclk2_b {
broadcom,pins = <43>;
- broadcom,function = "ALT0";
};
/* SPI0 */
pins_spi0_a: spi0_a {
broadcom,pins = <7>, <8>, <9>, <10>, <11>;
- broadcom,function = "ALT0";
};
pins_spi0_b: spi0_b {
broadcom,pins = <35>, <36>, <37>, <38>, <39>;
- broadcom,function = "ALT0";
};
/* PWM */
pins_pwm0_a: pwm0_a {
broadcom,pins = <12>;
- broadcom,function = "ALT0";
};
pins_pwm0_b: pwm0_b {
broadcom,pins = <18>;
- broadcom,function = "ALT5";
};
pins_pwm0_c: pwm0_c {
broadcom,pins = <40>;
- broadcom,function = "ALT0";
};
pins_pwm1_a: pwm1_a {
broadcom,pins = <13>;
- broadcom,function = "ALT0";
};
pins_pwm1_b: pwm1_b {
broadcom,pins = <19>;
- broadcom,function = "ALT5";
};
pins_pwm1_c: pwm1_c {
broadcom,pins = <41>;
- broadcom,function = "ALT0";
};
pins_pwm1_d: pwm1_d {
broadcom,pins = <45>;
- broadcom,function = "ALT0";
};
/* UART0 */
pins_uart0_a: uart0_a {
broadcom,pins = <14>, <15>;
- broadcom,function = "ALT0";
};
pins_uart0_b: uart0_b {
broadcom,pins = <32>, <33>;
- broadcom,function = "ALT3";
};
pins_uart0_c: uart0_c {
broadcom,pins = <36>, <37>;
- broadcom,function = "ALT2";
};
pins_uart0_fc_a: uart0_fc_a {
broadcom,pins = <16>, <17>;
- broadcom,function = "ALT3";
};
pins_uart0_fc_b: uart0_fc_b {
broadcom,pins = <30>, <31>;
- broadcom,function = "ALT3";
};
pins_uart0_fc_c: uart0_fc_c {
broadcom,pins = <39>, <38>;
- broadcom,function = "ALT2";
};
/* PCM */
pins_pcm_a: pcm_a {
broadcom,pins = <18>, <19>, <20>, <21>;
- broadcom,function = "ALT0";
};
pins_pcm_b: pcm_b {
broadcom,pins = <28>, <29>, <30>, <31>;
- broadcom,function = "ALT2";
};
/* Secondary Address Bus */
pins_sm_addr_a: sm_addr_a {
broadcom,pins = <5>, <4>, <3>, <2>, <1>, <0>;
- broadcom,function = "ALT1";
};
pins_sm_addr_b: sm_addr_b {
- broadcom,pins = <33>, <32>, <31>, <30>, <29>, <28>;
- broadcom,function = "ALT1";
+ broadcom,pins = <33>, <32>, <31>, <30>, <29>,
+ <28>;
};
pins_sm_ctl_a: sm_ctl_a {
broadcom,pins = <6>, <7>;
- broadcom,function = "ALT1";
};
pins_sm_ctl_b: sm_ctl_b {
broadcom,pins = <34>, <35>;
- broadcom,function = "ALT1";
};
pins_sm_data_8bit_a: sm_data_8bit_a {
- broadcom,pins = <8>, <9>, <10>, <11>, <12>, <13>, <14>, <15>;
- broadcom,function = "ALT1";
+ broadcom,pins = <8>, <9>, <10>, <11>, <12>,
+ <13>, <14>, <15>;
};
pins_sm_data_8bit_b: sm_data_8bit_b {
- broadcom,pins = <36>, <37>, <38>, <39>, <40>, <41>, <42>, <43>;
- broadcom,function = "ALT1";
+ broadcom,pins = <36>, <37>, <38>, <39>, <40>,
+ <41>, <42>, <43>;
};
pins_sm_data_16bit: sm_data_16bit {
- broadcom,pins = <16>, <17>, <18>, <19>, <20>, <21>, <22>, <23>;
- broadcom,function = "ALT1";
+ broadcom,pins = <16>, <17>, <18>, <19>, <20>,
+ <21>, <22>, <23>;
};
pins_sm_data_18bit: sm_data_18bit {
broadcom,pins = <24>, <25>;
- broadcom,function = "ALT1";
};
/* BSCSL */
pins_bscsl: bscsl {
broadcom,pins = <18>, <19>;
- broadcom,function = "ALT3";
};
/* SPISL */
pins_spisl: spisl {
broadcom,pins = <18>, <19>, <20>, <21>;
- broadcom,function = "ALT3";
};
/* SPI1 */
pins_spi1: spi1 {
- broadcom,pins = <16>, <17>, <18>, <19>, <20>, <21>;
- broadcom,function = "ALT4";
+ broadcom,pins = <16>, <17>, <18>, <19>, <20>,
+ <21>;
};
/* UART1 */
pins_uart1_a: uart1_a {
broadcom,pins = <14>, <15>;
- broadcom,function = "ALT5";
};
pins_uart1_b: uart1_b {
broadcom,pins = <32>, <33>;
- broadcom,function = "ALT5";
};
pins_uart1_c: uart1_c {
broadcom,pins = <40>, <41>;
- broadcom,function = "ALT5";
};
pins_uart1_fc_a: uart1_fc_a {
broadcom,pins = <16>, <17>;
- broadcom,function = "ALT5";
};
pins_uart1_fc_b: uart1_fc_b {
broadcom,pins = <30>, <31>;
- broadcom,function = "ALT5";
};
pins_uart1_fc_c: uart1_fc_c {
broadcom,pins = <43>, <42>;
- broadcom,function = "ALT5";
};
/* SPI2 */
pins_spi2: spi2 {
- broadcom,pins = <40>, <41>, <42>, <43>, <44>, <45>;
- broadcom,function = "ALT4";
+ broadcom,pins = <40>, <41>, <42>, <43>, <44>,
+ <45>;
};
/* ARM JTAG */
pins_arm_jtag_trst: arm_jtag_trst {
broadcom,pins = <22>;
- broadcom,function = "ALT4";
};
pins_arm_jtag_a: arm_jtag_a {
broadcom,pins = <4>, <5>, <6>, <12>, <13>;
- broadcom,function = "ALT5";
};
pins_arm_jtag_b: arm_jtag_b {
broadcom,pins = <23>, <24>, <25>, <26>, <27>;
- broadcom,function = "ALT4";
};
/* Reserved */
pins_reserved: reserved {
- broadcom,pins = <48>, <49>, <50>, <51>, <52>, <53>;
- broadcom,function = "ALT3";
+ broadcom,pins = <48>, <49>, <50>, <51>, <52>,
+ <53>;
};
};
dma: dma {
- compatible = "broadcom,bcm2835-dma", "broadcom,bcm2708-dma";
+ compatible = "broadcom,bcm2835-dma",
+ "broadcom,bcm2708-dma";
reg = <0x7000 0x1000>, <0xE05000 0x1000>;
interrupts = <24 25 26 27 28 29 30 31 32 33 34 35 36>;
interrupt-parent = <&intc>;
@@ -433,7 +407,8 @@
};
vc_mbox: mbox {
- compatible = "broadcom,bcm2835-mbox", "broadcom,bcm2708-mbox";
+ compatible = "broadcom,bcm2835-mbox",
+ "broadcom,bcm2708-mbox";
reg = <0xB880 0x40>;
interrupts = <1>;
interrupt-parent = <&intc>;
@@ -450,7 +425,8 @@
};
sdhci {
- compatible = "broadcom,bcm2835-sdhci", "broadcom,bcm2708-sdhci";
+ compatible = "broadcom,bcm2835-sdhci",
+ "broadcom,bcm2708-sdhci";
reg = <0x300000 0x100>;
interrupts = <70>;
interrupt-parent = <&intc>;
@@ -459,7 +435,9 @@
};
uart0: uart0 {
- compatible = "broadcom,bcm2835-uart", "broadcom,bcm2708-uart", "arm,pl011", "arm,primecell";
+ compatible = "broadcom,bcm2835-uart",
+ "broadcom,bcm2708-uart", "arm,pl011",
+ "arm,primecell";
reg = <0x201000 0x1000>;
interrupts = <65>;
interrupt-parent = <&intc>;
@@ -476,104 +454,15 @@
};
usb {
- compatible = "broadcom,bcm2835-usb", "broadcom,bcm2708-usb", "synopsys,designware-hs-otg2";
+ compatible = "broadcom,bcm2835-usb",
+ "broadcom,bcm2708-usb",
+ "synopsys,designware-hs-otg2";
reg = <0x980000 0x20000>;
interrupts = <17>;
interrupt-parent = <&intc>;
#address-cells = <1>;
#size-cells = <0>;
- hub {
- compatible = "usb,hub", "usb,device";
- reg = <0x00000001>;
- #address-cells = <1>;
- #size-cells = <0>;
- ethernet {
- compatible = "net,ethernet", "usb,device";
- reg = <0x00000001>;
- mac-address = [00 00 00 00 00 00];
- };
- };
- };
-
- };
-
- memory {
- device_type = "memory";
- reg = <0 0x08000000>; /* 128MB */
- };
-
- display {
- compatible = "broadcom,bcm2835-fb", "broadcom,bcm2708-fb";
-
- broadcom,vc-mailbox = <&vc_mbox>;
- broadcom,vc-channel = <1>;
-
- broadcom,width = <0>; /* Set by VideoCore */
- broadcom,height = <0>; /* Set by VideoCore */
- broadcom,depth = <0>; /* Set by VideoCore */
- };
-
- leds {
- compatible = "gpio-leds";
-
- ok {
- label = "ok";
- gpios = <&gpio 16 1>;
-
- /* Don't change this - it configures
- * how the led driver determines if
- * the led is on or off when it loads.
- */
- default-state = "keep";
-
- /* This is the real default state. */
- linux,default-trigger = "default-on";
- };
- };
-
- power: regulator {
- compatible = "broadcom,bcm2835-power-mgr", "broadcom,bcm2708-power-mgr", "simple-bus";
- #address-cells = <1>;
- #size-cells = <0>;
-
- broadcom,vc-mailbox = <&vc_mbox>;
- broadcom,vc-channel = <0>;
-
- regulator-name = "VideoCore";
- regulator-min-microvolt = <5000000>;
- regulator-max-microvolt = <5000000>;
- regulator-always-on = <1>;
-
- sd_card_power: regulator@0 {
- compatible = "broadcom,bcm2835-power-dev", "broadcom,bcm2708-power-dev";
- reg = <0>;
-
- vin-supply = <&power>;
- regulator-name = "SD Card";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- };
-
- /* This is for the controller itself, not the root port */
- usb_hcd_power: regulator@3 {
- compatible = "broadcom,bcm2835-power-dev", "broadcom,bcm2708-power-dev";
- reg = <3>;
-
- vin-supply = <&power>;
- regulator-name = "USB HCD";
- regulator-min-microvolt = <5000000>;
- regulator-max-microvolt = <5000000>;
};
- };
-
- aliases {
- uart0 = &uart0;
- };
- chosen {
- bootargs = ""; /* Set by VideoCore */
- stdin = "uart0";
- stdout = "uart0";
};
-
};
diff --git a/sys/boot/fdt/dts/exynos5250-arndale.dts b/sys/boot/fdt/dts/exynos5250-arndale.dts
new file mode 100644
index 0000000..67cadcb
--- /dev/null
+++ b/sys/boot/fdt/dts/exynos5250-arndale.dts
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2013 Ruslan Bukin <br@bsdpad.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/dts-v1/;
+
+/include/ "exynos5250.dtsi"
+
+/ {
+ model = "Arndale Board";
+
+ memory {
+ device_type = "memory";
+ reg = < 0x40000000 0x80000000 >; /* 2G */
+ };
+
+ chosen {
+ stdin = &serial2;
+ stdout = &serial2;
+ };
+};
diff --git a/sys/boot/fdt/dts/exynos5250.dtsi b/sys/boot/fdt/dts/exynos5250.dtsi
new file mode 100644
index 0000000..860fcd0
--- /dev/null
+++ b/sys/boot/fdt/dts/exynos5250.dtsi
@@ -0,0 +1,157 @@
+/*-
+ * Copyright (c) 2013 Ruslan Bukin <br@bsdpad.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/ {
+ compatible = "samsung,exynos5250";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ interrupt-parent = <&GIC>;
+
+ Exynos5@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "simple-bus";
+ ranges;
+ bus-frequency = <0>;
+
+ GIC: interrupt-controller@10481000 {
+ compatible = "arm,gic";
+ reg = < 0x10481000 0x1000 >, /* Distributor Registers */
+ < 0x10482000 0x2000 >; /* CPU Interface Registers */
+ interrupt-controller;
+ #address-cells = <0>;
+ #interrupt-cells = <1>;
+ };
+
+ mct {
+ compatible = "exynos,mct";
+ reg = < 0x101C0000 0x1000 >;
+ clock-frequency = <24000000>;
+ };
+
+ generic_timer {
+ compatible = "arm,armv7-timer";
+ clock-frequency = <24000000>;
+ };
+
+ pwm {
+ compatible = "samsung,s3c24x0-timer";
+ reg = <0x12DD0000 0x1000>;
+ interrupts = < 71 >;
+ interrupt-parent = <&GIC>;
+ clock-frequency = <24000000>;
+ };
+
+ usb@12110000 {
+ compatible = "exynos,usb-ehci", "usb-ehci";
+ reg = <0x12110000 0x1000>, /* EHCI */
+ <0x12130000 0x1000>, /* EHCI host ctrl */
+ <0x10040000 0x1000>, /* Power */
+ <0x10050000 0x1000>, /* Sysreg */
+ <0x11400000 0x1000>; /* GPIO left */
+ interrupts = < 103 >;
+ interrupt-parent = <&GIC>;
+ };
+
+ usb@12120000 {
+ compatible = "exynos,usb-ohci", "usb-ohci";
+ reg = <0x12120000 0x10000>;
+ interrupts = < 103 >;
+ interrupt-parent = <&GIC>;
+ };
+
+ sdhci@12200000 {
+ compatible = "sdhci_generic";
+ reg = <0x12200000 0x1000>;
+ interrupts = <107>;
+ interrupt-parent = <&GIC>;
+ clock-frequency = <24000000>; /* TODO: verify freq */
+ };
+
+ sdhci@12210000 {
+ compatible = "sdhci_generic";
+ reg = <0x12210000 0x1000>;
+ interrupts = <108>;
+ interrupt-parent = <&GIC>;
+ clock-frequency = <24000000>;
+ };
+
+ sdhci@12220000 {
+ compatible = "sdhci_generic";
+ reg = <0x12220000 0x1000>;
+ interrupts = <109>;
+ interrupt-parent = <&GIC>;
+ clock-frequency = <24000000>;
+ };
+
+ sdhci@12230000 {
+ compatible = "sdhci_generic";
+ reg = <0x12230000 0x1000>;
+ interrupts = <110>;
+ interrupt-parent = <&GIC>;
+ clock-frequency = <24000000>;
+ };
+
+ serial0: serial@12C00000 {
+ compatible = "exynos";
+ reg = <0x12C00000 0x100>;
+ interrupts = < 83 >;
+ interrupt-parent = <&GIC>;
+ clock-frequency = < 100000000 >;
+ current-speed = <115200>;
+ };
+
+ serial1: serial@12C10000 {
+ compatible = "exynos";
+ reg = <0x12C10000 0x100>;
+ interrupts = < 84 >;
+ interrupt-parent = <&GIC>;
+ clock-frequency = < 100000000 >;
+ current-speed = <115200>;
+ };
+
+ serial2: serial@12C20000 {
+ compatible = "exynos";
+ reg = <0x12C20000 0x100>;
+ interrupts = < 85 >;
+ interrupt-parent = <&GIC>;
+ clock-frequency = < 100000000 >;
+ current-speed = <115200>;
+ };
+
+ serial3: serial@12C30000 {
+ compatible = "exynos";
+ reg = <0x12C30000 0x100>;
+ interrupts = < 86 >;
+ interrupt-parent = <&GIC>;
+ clock-frequency = < 100000000 >;
+ current-speed = <115200>;
+ };
+
+ };
+};
diff --git a/sys/boot/fdt/dts/rpi.dts b/sys/boot/fdt/dts/rpi.dts
new file mode 100644
index 0000000..bdcee00
--- /dev/null
+++ b/sys/boot/fdt/dts/rpi.dts
@@ -0,0 +1,381 @@
+/*
+ * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@bluezbox.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+/dts-v1/;
+
+/include/ "bcm2835.dtsi"
+
+/memreserve/ 0x08000000 0x08000000; /* Set by VideoCore */
+
+/ {
+ model = "Raspberry Pi (BCM2835)";
+ compatible = "raspberrypi,model-a", "raspberrypi,model-b",
+ "broadcom,bcm2835-vc", "broadcom,bcm2708-vc";
+
+ memory {
+ device_type = "memory";
+ reg = <0 0x8000000>; /* 128MB, Set by VideoCore */
+
+ };
+
+ system {
+ revision = <0>; /* Set by VideoCore */
+ serial = <0 0>; /* Set by VideoCore */
+ };
+
+ axi {
+ gpio: gpio {
+ /* BSC0 */
+ pins_bsc0_a: bsc0_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_bsc0_b: bsc0_b {
+ broadcom,function = "ALT0";
+ };
+
+ pins_bsc0_c: bsc0_c {
+ broadcom,function = "ALT1";
+ };
+
+ /* BSC1 */
+ pins_bsc1_a: bsc1_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_bsc1_b: bsc1_b {
+ broadcom,function = "ALT2";
+ };
+
+ /* GPCLK0 */
+ pins_gpclk0_a: gpclk0_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_gpclk0_b: gpclk0_b {
+ broadcom,function = "ALT5";
+ };
+
+ pins_gpclk0_c: gpclk0_c {
+ broadcom,function = "ALT0";
+ };
+
+ pins_gpclk0_d: gpclk0_d {
+ broadcom,function = "ALT0";
+ };
+
+ /* GPCLK1 */
+ pins_gpclk1_a: gpclk1_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_gpclk1_b: gpclk1_b {
+ broadcom,function = "ALT5";
+ };
+
+ pins_gpclk1_c: gpclk1_c {
+ broadcom,function = "ALT0";
+ };
+
+ pins_gpclk1_d: gpclk1_d {
+ broadcom,function = "ALT0";
+ };
+
+ /* GPCLK2 */
+ pins_gpclk2_a: gpclk2_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_gpclk2_b: gpclk2_b {
+ broadcom,function = "ALT0";
+ };
+
+ /* SPI0 */
+ pins_spi0_a: spi0_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_spi0_b: spi0_b {
+ broadcom,function = "ALT0";
+ };
+
+ /* PWM */
+ pins_pwm0_a: pwm0_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_pwm0_b: pwm0_b {
+ broadcom,function = "ALT5";
+ };
+
+ pins_pwm0_c: pwm0_c {
+ broadcom,function = "ALT0";
+ };
+
+ pins_pwm1_a: pwm1_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_pwm1_b: pwm1_b {
+ broadcom,function = "ALT5";
+ };
+
+ pins_pwm1_c: pwm1_c {
+ broadcom,function = "ALT0";
+ };
+
+ pins_pwm1_d: pwm1_d {
+ broadcom,function = "ALT0";
+ };
+
+ /* UART0 */
+ pins_uart0_a: uart0_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_uart0_b: uart0_b {
+ broadcom,function = "ALT3";
+ };
+
+ pins_uart0_c: uart0_c {
+ broadcom,function = "ALT2";
+ };
+
+ pins_uart0_fc_a: uart0_fc_a {
+ broadcom,function = "ALT3";
+ };
+
+ pins_uart0_fc_b: uart0_fc_b {
+ broadcom,function = "ALT3";
+ };
+
+ pins_uart0_fc_c: uart0_fc_c {
+ broadcom,function = "ALT2";
+ };
+
+ /* PCM */
+ pins_pcm_a: pcm_a {
+ broadcom,function = "ALT0";
+ };
+
+ pins_pcm_b: pcm_b {
+ broadcom,function = "ALT2";
+ };
+
+ /* Secondary Address Bus */
+ pins_sm_addr_a: sm_addr_a {
+ broadcom,function = "ALT1";
+ };
+
+ pins_sm_addr_b: sm_addr_b {
+ broadcom,function = "ALT1";
+ };
+
+ pins_sm_ctl_a: sm_ctl_a {
+ broadcom,function = "ALT1";
+ };
+
+ pins_sm_ctl_b: sm_ctl_b {
+ broadcom,function = "ALT1";
+ };
+
+ pins_sm_data_8bit_a: sm_data_8bit_a {
+ broadcom,function = "ALT1";
+ };
+
+ pins_sm_data_8bit_b: sm_data_8bit_b {
+ broadcom,function = "ALT1";
+ };
+
+ pins_sm_data_16bit: sm_data_16bit {
+ broadcom,function = "ALT1";
+ };
+
+ pins_sm_data_18bit: sm_data_18bit {
+ broadcom,function = "ALT1";
+ };
+
+ /* BSCSL */
+ pins_bscsl: bscsl {
+ broadcom,function = "ALT3";
+ };
+
+ /* SPISL */
+ pins_spisl: spisl {
+ broadcom,function = "ALT3";
+ };
+
+ /* SPI1 */
+ pins_spi1: spi1 {
+ broadcom,function = "ALT4";
+ };
+
+ /* UART1 */
+ pins_uart1_a: uart1_a {
+ broadcom,function = "ALT5";
+ };
+
+ pins_uart1_b: uart1_b {
+ broadcom,function = "ALT5";
+ };
+
+ pins_uart1_c: uart1_c {
+ broadcom,function = "ALT5";
+ };
+
+ pins_uart1_fc_a: uart1_fc_a {
+ broadcom,function = "ALT5";
+ };
+
+ pins_uart1_fc_b: uart1_fc_b {
+ broadcom,function = "ALT5";
+ };
+
+ pins_uart1_fc_c: uart1_fc_c {
+ broadcom,function = "ALT5";
+ };
+
+ /* SPI2 */
+ pins_spi2: spi2 {
+ broadcom,function = "ALT4";
+ };
+
+ /* ARM JTAG */
+ pins_arm_jtag_trst: arm_jtag_trst {
+ broadcom,function = "ALT4";
+ };
+
+ pins_arm_jtag_a: arm_jtag_a {
+ broadcom,function = "ALT5";
+ };
+
+ pins_arm_jtag_b: arm_jtag_b {
+ broadcom,function = "ALT4";
+ };
+
+ /* Reserved */
+ pins_reserved: reserved {
+ broadcom,function = "ALT3";
+ };
+ };
+ usb {
+ hub {
+ compatible = "usb,hub", "usb,device";
+ reg = <0x00000001>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ ethernet {
+ compatible = "net,ethernet",
+ "usb,device";
+ reg = <0x00000001>;
+ mac-address = [00 00 00 00 00 00];
+ };
+ };
+
+ };
+
+
+ };
+
+ display {
+ compatible = "broadcom,bcm2835-fb", "broadcom,bcm2708-fb";
+
+ broadcom,vc-mailbox = <&vc_mbox>;
+ broadcom,vc-channel = <1>;
+
+ broadcom,width = <0>; /* Set by VideoCore */
+ broadcom,height = <0>; /* Set by VideoCore */
+ broadcom,depth = <0>; /* Set by VideoCore */
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ ok {
+ label = "ok";
+ gpios = <&gpio 16 1>;
+
+ /* Don't change this - it configures
+ * how the led driver determines if
+ * the led is on or off when it loads.
+ */
+ default-state = "keep";
+
+ /* This is the real default state. */
+ linux,default-trigger = "default-on";
+ };
+ };
+
+ power: regulator {
+ compatible = "broadcom,bcm2835-power-mgr",
+ "broadcom,bcm2708-power-mgr",
+ "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ broadcom,vc-mailbox = <&vc_mbox>;
+ broadcom,vc-channel = <0>;
+
+ regulator-name = "VideoCore";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-always-on = <1>;
+
+ sd_card_power: regulator@0 {
+ compatible = "broadcom,bcm2835-power-dev",
+ "broadcom,bcm2708-power-dev";
+ reg = <0>;
+
+ vin-supply = <&power>;
+ regulator-name = "SD Card";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+
+ /* This is for the controller itself, not the root port */
+ usb_hcd_power: regulator@3 {
+ compatible = "broadcom,bcm2835-power-dev",
+ "broadcom,bcm2708-power-dev";
+ reg = <3>;
+
+ vin-supply = <&power>;
+ regulator-name = "USB HCD";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+ };
+
+ aliases {
+ uart0 = &uart0;
+ };
+
+ chosen {
+ bootargs = ""; /* Set by VideoCore */
+ stdin = "uart0";
+ stdout = "uart0";
+ };
+
+};
diff --git a/sys/boot/i386/gptboot/Makefile b/sys/boot/i386/gptboot/Makefile
index e1a640a..7fb0336 100644
--- a/sys/boot/i386/gptboot/Makefile
+++ b/sys/boot/i386/gptboot/Makefile
@@ -3,6 +3,7 @@
.PATH: ${.CURDIR}/../boot2 ${.CURDIR}/../common ${.CURDIR}/../../common
FILES= gptboot
+MAN= gptboot.8
NM?= nm
diff --git a/sys/boot/i386/gptboot/gptboot.8 b/sys/boot/i386/gptboot/gptboot.8
new file mode 100644
index 0000000..691bcb7
--- /dev/null
+++ b/sys/boot/i386/gptboot/gptboot.8
@@ -0,0 +1,238 @@
+.\" Copyright (c) 2013 Warren Block
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd July 3, 2013
+.Dt GPTBOOT 8
+.Os
+.Sh NAME
+.Nm gptboot
+.Nd GPT bootcode for UFS on BIOS-based computers
+.Sh DESCRIPTION
+.Nm
+is used on BIOS-based computers to boot from a UFS partition on a
+GPT-partitioned disk.
+.Nm
+is installed in a
+.Cm freebsd-boot
+partition with
+.Xr gpart 8 .
+.Sh IMPLEMENTATION NOTES
+The GPT standard allows a variable number of partitions, but
+.Nm
+only boots from tables with 128 partitions or less.
+.Sh PARTITION ATTRIBUTES
+.Nm
+checks and manages several attributes of GPT UFS partitions.
+.Bl -tag -width ".Cm bootfailed"
+.It Cm bootme
+Attempt to boot from this partition.
+If more than one partition has the
+.Cm bootme
+attribute set,
+.Nm
+will attempt to boot each one until successful.
+.It Cm bootonce
+Attempt to boot from this partition only one time.
+Setting this attribute with
+.Xr gpart 8
+automatically also sets the
+.Cm bootme
+attribute.
+Multiple partitions may have the
+.Cm bootonce
+and
+.Cm bootme
+attributes set.
+.It Cm bootfailed
+The
+.Cm bootfailed
+attribute marks partitions that had the
+.Cm bootonce
+attribute set, but failed to boot.
+This attribute is managed by the system.
+See
+.Sx "BOOTING"
+and
+.Sx "POST-BOOT ACTIONS"
+below for details.
+.El
+.Sh USAGE
+For normal usage, the user does not have to set or manage any of the
+partition attributes.
+.Nm
+will boot from the first UFS partition found.
+.Pp
+The
+.Cm bootonce
+attribute can be used for testing an upgraded operating system on
+an already-working computer.
+The existing system partition is left untouched, and the new version
+of the operating system to be tested is installed on another partition.
+The
+.Cm bootonce
+attribute is set on that new test partition.
+The next boot is attempted from the test partition.
+Success or failure will be shown in the system log files.
+After a successful boot of the test partition, a user script can check
+the logs and change the
+.Cm bootme
+attributes so the test partition becomes the new system partition.
+Because the
+.Cm bootonce
+attribute is cleared after an attempted boot, a failed boot will not
+leave the system attempting to boot from a partition that will never
+succeed.
+Instead, the system will boot from the older, known-working operating
+system that has not been modified.
+If the
+.Cm bootme
+attribute is set on any partitions, booting will be attempted from them
+first.
+If no partitions with
+.Cm bootme
+attributes are found, booting will be attempted from the first UFS
+partition found.
+.Sh BOOTING
+.Nm
+first reads the partition table.
+All
+.Cm freebsd-ufs
+partitions with only the
+.Cm bootonce
+attribute set, indicating a failed boot, are set to
+.Cm bootfailed .
+.Nm
+then scans through all of the
+.Cm freebsd-ufs
+partitions.
+Boot behavior depends on the combination of
+.Cm bootme
+and
+.Cm bootonce
+attributes set on those partitions.
+.Bl -tag -width ".Cm bootonce + .Cm bootme"
+.It Cm bootonce + Cm bootme
+Highest priority: booting is attempted from each of the
+.Cm freebsd-ufs
+partitions with both of these attributes.
+On each partition, the
+.Cm bootme
+attribute is removed and the boot attempted.
+.It Cm bootme
+Middle priority: booting is attempted from each of the
+.Cm freebsd-ufs
+partitions with the
+.Cm bootme
+attribute.
+.El
+.Pp
+If neither
+.Cm bootonce
+nor
+.Cm bootme
+attributes are found on any partitions, booting is attempted from the
+first
+.Cm freebsd-ufs
+partition on the disk.
+.Sh POST-BOOT ACTIONS
+The startup script
+.Pa /etc/rc.d/gptboot
+checks the attributes of
+.Cm freebsd-ufs
+partitions on all GPT disks.
+Partitions with the
+.Cm bootfailed
+attribute generate a
+.Dq boot from X failed
+system log message.
+Partitions with only the
+.Cm bootonce
+attribute, indicating a partition that successfully booted, generate a
+.Dq boot from X succeeded
+system log message.
+The
+.Cm bootfailed
+attributes are cleared from all the partitions.
+The
+.Cm bootonce
+attribute is cleared from the partition that successfully booted.
+There is normally only one of these.
+.Sh FILES
+.Bl -tag -width /boot/gptboot -compact
+.It Pa /boot/gptboot
+bootcode binary
+.It Pa /boot.config
+parameters for the boot blocks
+.Pq optional
+.El
+.Sh EXAMPLES
+.Nm
+is typically installed in combination with a
+.Dq protective MBR
+.Po
+see
+.Xr gpart 8
+.Pc .
+Install
+.Nm
+on the
+.Pa ada0
+drive:
+.Bd -literal -offset indent
+gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
+.Ed
+.Pp
+.Nm
+can also be installed without the PMBR:
+.Bd -literal -offset indent
+gpart bootcode -p /boot/gptboot -i 1 ada0
+.Ed
+.Pp
+Set the
+.Cm bootme
+attribute for partition 2:
+.Bd -literal -offset indent
+gpart set -a bootme -i 2 ada0
+.Ed
+.Pp
+Set the
+.Cm bootonce
+attribute for partition 2, automatically also setting the
+.Cm bootme
+attribute:
+.Bd -literal -offset indent
+gpart set -a bootonce -i 2 ada0
+.Ed
+.Sh SEE ALSO
+.Xr boot.config 5 ,
+.Xr rc.conf 5 ,
+.Xr boot 8 ,
+.Xr gpart 8
+.Sh HISTORY
+.Nm
+appeared in FreeBSD 7.1.
+.Sh AUTHORS
+Warren Block <wblock@FreeBSD.org>
OpenPOWER on IntegriCloud