summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/README.gpt17
-rw-r--r--doc/develop/driver-model/index.rst1
-rw-r--r--doc/develop/driver-model/virtio.rst (renamed from doc/README.virtio)90
-rw-r--r--doc/device-tree-bindings/sysinfo/gpio-sysinfo.txt37
-rw-r--r--doc/usage/exception.rst3
5 files changed, 120 insertions, 28 deletions
diff --git a/doc/README.gpt b/doc/README.gpt
index ac975f66b88..91e397d06f8 100644
--- a/doc/README.gpt
+++ b/doc/README.gpt
@@ -237,6 +237,23 @@ doc/arch/index.rst:
=> gpt swap host 0 name othername
[ . . . ]
+Modifying GPT partition layout from U-Boot:
+===========================================
+
+The entire GPT partition layout can be exported to an environment
+variable and then modified enmasse. Users can change the partition
+numbers, offsets, names and sizes. The resulting variable can used to
+reformat the device. Here is an example of reading the GPT partitions
+into a variable and then modifying them:
+
+U-BOOT> gpt read mmc 0 current_partitions
+U-BOOT> env edit current_partitions
+edit: uuid_disk=[...];name=part1,start=0x4000,size=0x4000,uuid=[...];
+name=part2,start=0xc000,size=0xc000,uuid=[...];[ . . . ]
+
+U-BOOT> gpt write mmc 0 $current_partitions
+U-BOOT> gpt verify mmc 0 $current_partitions
+
Partition type GUID:
====================
diff --git a/doc/develop/driver-model/index.rst b/doc/develop/driver-model/index.rst
index fd4575db9b7..10a76256b0d 100644
--- a/doc/develop/driver-model/index.rst
+++ b/doc/develop/driver-model/index.rst
@@ -27,3 +27,4 @@ subsystems
soc-framework
spi-howto
usb-info
+ virtio
diff --git a/doc/README.virtio b/doc/develop/driver-model/virtio.rst
index d3652f2e2f8..8ac9c94cafe 100644
--- a/doc/README.virtio
+++ b/doc/develop/driver-model/virtio.rst
@@ -1,11 +1,10 @@
-# SPDX-License-Identifier: GPL-2.0+
-#
-# Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
+.. SPDX-License-Identifier: GPL-2.0+
+.. sectionauthor:: Bin Meng <bmeng.cn@gmail.com>
VirtIO Support
==============
-This document describes the information about U-Boot support for VirtIO [1]
+This document describes the information about U-Boot support for VirtIO_
devices, including supported boards, build instructions, driver details etc.
What's VirtIO?
@@ -15,7 +14,7 @@ just the guest's device driver "knows" it is running in a virtual environment,
and cooperates with the hypervisor. This enables guests to get high performance
network and disk operations, and gives most of the performance benefits of
paravirtualization. In the U-Boot case, the guest is U-Boot itself, while the
-virtual environment are normally QEMU [2] targets like ARM, RISC-V and x86.
+virtual environment are normally QEMU_ targets like ARM, RISC-V and x86.
Status
------
@@ -49,6 +48,8 @@ Building U-Boot for pre-configured QEMU targets is no different from others.
For example, we can do the following with the CROSS_COMPILE environment
variable being properly set to a working toolchain for ARM:
+.. code-block:: bash
+
$ make qemu_arm_defconfig
$ make
@@ -56,11 +57,13 @@ You can even create a QEMU ARM target with VirtIO devices showing up on both
MMIO and PCI buses. In this case, you can enable the PCI transport driver
from 'make menuconfig':
-Device Drivers --->
- ...
- VirtIO Drivers --->
- ...
- [*] PCI driver for virtio devices
+.. code-block:: none
+
+ Device Drivers --->
+ ...
+ VirtIO Drivers --->
+ ...
+ [*] PCI driver for virtio devices
Other drivers are at the same location and can be tuned to suit the needs.
@@ -74,6 +77,8 @@ Testing
The following QEMU command line is used to get U-Boot up and running with
VirtIO net and block devices on ARM.
+.. code-block:: bash
+
$ qemu-system-arm -nographic -machine virt -bios u-boot.bin \
-netdev tap,ifname=tap0,id=net0 \
-device virtio-net-device,netdev=net0 \
@@ -82,6 +87,8 @@ VirtIO net and block devices on ARM.
On x86, command is slightly different to create PCI VirtIO devices.
+.. code-block:: bash
+
$ qemu-system-i386 -nographic -bios u-boot.rom \
-netdev tap,ifname=tap0,id=net0 \
-device virtio-net-pci,netdev=net0 \
@@ -93,6 +100,8 @@ parameters. It is also possible to specify both MMIO and PCI VirtIO devices.
For example, the following commnad creates 3 VirtIO devices, with 1 on MMIO
and 2 on PCI bus.
+.. code-block:: bash
+
$ qemu-system-arm -nographic -machine virt -bios u-boot.bin \
-netdev tap,ifname=tap0,id=net0 \
-device virtio-net-pci,netdev=net0 \
@@ -104,6 +113,8 @@ and 2 on PCI bus.
By default QEMU creates VirtIO legacy devices by default. To create non-legacy
(aka modern) devices, pass additional device property/value pairs like below:
+.. code-block:: bash
+
$ qemu-system-i386 -nographic -bios u-boot.rom \
-netdev tap,ifname=tap0,id=net0 \
-device virtio-net-pci,netdev=net0,disable-legacy=true,disable-modern=false \
@@ -112,6 +123,8 @@ By default QEMU creates VirtIO legacy devices by default. To create non-legacy
A 'virtio' command is provided in U-Boot shell.
+.. code-block:: none
+
=> virtio
virtio - virtio block devices sub-system
@@ -127,10 +140,14 @@ A 'virtio' command is provided in U-Boot shell.
To probe all the VirtIO devices, type:
+.. code-block:: none
+
=> virtio scan
Then we can show the connected block device details by:
+.. code-block:: none
+
=> virtio info
Device 0: QEMU VirtIO Block Device
Type: Hard Disk
@@ -138,6 +155,8 @@ Then we can show the connected block device details by:
And list the directories and files on the disk by:
+.. code-block:: none
+
=> ls virtio 0 /
<DIR> 4096 .
<DIR> 4096 ..
@@ -167,6 +186,8 @@ Driver Internals
----------------
There are 3 level of drivers in the VirtIO driver family.
+.. code-block:: none
+
+---------------------------------------+
| virtio device drivers |
| +-------------+ +------------+ |
@@ -199,20 +220,26 @@ The transport drivers provide a set of ops (struct dm_virtio_ops) for the real
virtio device driver to call. These ops APIs's parameter is designed to remind
the caller to pass the correct 'struct udevice' id of the virtio device, eg:
-int virtio_get_status(struct udevice *vdev, u8 *status)
+.. code-block:: C
+
+ int virtio_get_status(struct udevice *vdev, u8 *status)
So the parameter 'vdev' indicates the device should be the real virtio device.
But we also have an API like:
-struct virtqueue *vring_create_virtqueue(unsigned int index, unsigned int num,
- unsigned int vring_align,
- struct udevice *udev)
+.. code-block:: C
+
+ struct virtqueue *vring_create_virtqueue(unsigned int index, unsigned int num,
+ unsigned int vring_align,
+ struct udevice *udev)
Here the parameter 'udev' indicates the device should be the transport device.
Similar naming is applied in other functions that are even not APIs, eg:
-static int virtio_uclass_post_probe(struct udevice *udev)
-static int virtio_uclass_child_pre_probe(struct udevice *vdev)
+.. code-block:: C
+
+ static int virtio_uclass_post_probe(struct udevice *udev)
+ static int virtio_uclass_child_pre_probe(struct udevice *vdev)
So it's easy to tell which device these functions are operating on.
@@ -223,20 +250,29 @@ ID 2) are supported. If you want to develop new driver for new devices,
please follow the guideline below.
1. add new device ID in virtio.h
-#define VIRTIO_ID_XXX X
+
+.. code-block:: C
+
+ #define VIRTIO_ID_XXX X
2. update VIRTIO_ID_MAX_NUM to be the largest device ID plus 1
3. add new driver name string in virtio.h
-#define VIRTIO_XXX_DRV_NAME "virtio-xxx"
+
+.. code-block:: C
+
+ #define VIRTIO_XXX_DRV_NAME "virtio-xxx"
4. create a new driver with name set to the name string above
-U_BOOT_DRIVER(virtio_xxx) = {
- .name = VIRTIO_XXX_DRV_NAME,
- ...
- .remove = virtio_reset,
- .flags = DM_FLAG_ACTIVE_DMA,
-}
+
+.. code-block:: C
+
+ U_BOOT_DRIVER(virtio_xxx) = {
+ .name = VIRTIO_XXX_DRV_NAME,
+ ...
+ .remove = virtio_reset,
+ .flags = DM_FLAG_ACTIVE_DMA,
+ }
Note the driver needs to provide the remove method and normally this can be
hooked to virtio_reset(). The driver flags should contain DM_FLAG_ACTIVE_DMA
@@ -247,7 +283,5 @@ for the remove method to be called before jumping to OS.
6. do funny stuff with the driver
-References
-----------
-[1] http://docs.oasis-open.org/virtio/virtio/v1.0/virtio-v1.0.pdf
-[2] https://www.qemu.org
+.. _VirtIO: http://docs.oasis-open.org/virtio/virtio/v1.0/virtio-v1.0.pdf
+.. _QEMU: https://www.qemu.org
diff --git a/doc/device-tree-bindings/sysinfo/gpio-sysinfo.txt b/doc/device-tree-bindings/sysinfo/gpio-sysinfo.txt
new file mode 100644
index 00000000000..b5739d94e9e
--- /dev/null
+++ b/doc/device-tree-bindings/sysinfo/gpio-sysinfo.txt
@@ -0,0 +1,37 @@
+GPIO-based Sysinfo device
+
+This binding describes several GPIOs which specify a board revision. Each GPIO
+forms a digit in a ternary revision number. This revision is then mapped to a
+name using the revisions and names properties.
+
+Each GPIO may be floating, pulled-up, or pulled-down, mapping to digits 2, 1,
+and 0, respectively. The first GPIO forms the least-significant digit of the
+revision. For example, consider the property
+
+ gpios = <&gpio 0>, <&gpio 1>, <&gpio 2>;
+
+If GPIO 0 is pulled-up, GPIO 1 is pulled-down, and GPIO 2 is floating, then the
+revision would be
+
+ 0t201 = 2*9 + 0*3 + 1*3 = 19
+
+If instead GPIO 0 is floating, GPIO 1 is pulled-up, and GPIO 2 is pulled-down,
+then the revision would be
+
+ 0t012 = 0*9 + 1*3 + 2*1 = 5
+
+Required properties:
+- compatible: should be "gpio-sysinfo".
+- gpios: should be a list of gpios forming the revision number,
+ least-significant-digit first
+- revisions: a list of known revisions; any revisions not present will have the
+ name "unknown"
+- names: the name of each revision in revisions
+
+Example:
+sysinfo {
+ compatible = "gpio-sysinfo";
+ gpios = <&gpio_a 15>, <&gpio_a 16>, <&gpio_a 17>;
+ revisions = <19>, <5>;
+ names = "rev_a", "foo";
+};
diff --git a/doc/usage/exception.rst b/doc/usage/exception.rst
index db1490f0055..27df88bd5c9 100644
--- a/doc/usage/exception.rst
+++ b/doc/usage/exception.rst
@@ -31,6 +31,9 @@ type
**RISC-V:**
+ ebreak
+ breakpoint exception
+
unaligned
load address misaligned