Compare commits

...

2 Commits

Author SHA1 Message Date
Jose Martins 17ed426a1d
complete DEMO table with linux-ivshmem-net 2021-04-06 00:20:22 +01:00
Jose Martins 209f511fea
add new demo showcasing ivshmem-net driver port 2021-04-06 00:07:10 +01:00
18 changed files with 3200 additions and 24 deletions

View File

@ -6,6 +6,7 @@ systems and targeting several supported platforms. The available demos are:
* [Single-guest Baremetal](demos/baremetal/README.md) * [Single-guest Baremetal](demos/baremetal/README.md)
* [Dual-guest Linux+FreeRTOS](demos/linux+freertos/README.md) * [Dual-guest Linux+FreeRTOS](demos/linux+freertos/README.md)
* [Dual-Linux connected via IVSHMEM-NET](demos/linux-ivshmem-net/README.md)
--- ---
@ -152,6 +153,7 @@ Build guests according to the target demo:
* [Single Baremetal Guest](demos/baremetal/README.md) * [Single Baremetal Guest](demos/baremetal/README.md)
* [Dual-guest Linux+FreeRTOS](demos/linux+freertos/README.md) * [Dual-guest Linux+FreeRTOS](demos/linux+freertos/README.md)
* [Dual-Linux connected via IVSHMEM-NET](demos/linux-ivshmem-net/README.md)
### B.4) Build Bao ### B.4) Build Bao
@ -229,6 +231,7 @@ Build the firmware and deploy the system according to the target platform:
|--|--| |--|--|
| Baremetal guest | baremetal | | Baremetal guest | baremetal |
| Linux+FreeRTOS | linux+freertos | | Linux+FreeRTOS | linux+freertos |
| Dual-Linux IVSHMEM-NET | linux-ivshmem-net |
<!-- TODO: Add Accepted Platform/Demos table --> <!-- TODO: Add Accepted Platform/Demos table -->

View File

@ -4,6 +4,7 @@ The following demos are available:
* [Bare Metal Application](../demos/baremetal/README.md) * [Bare Metal Application](../demos/baremetal/README.md)
* [Dual-Guest Linux+FreeRTOS](../demos/linux+freertos/README.md) * [Dual-Guest Linux+FreeRTOS](../demos/linux+freertos/README.md)
* [Dual-Linux connected via IVSHMEM-NET](../demos/linux-ivshmem-net/README.md)
More demos, showcasing different Bao features, guests and configurations will More demos, showcasing different Bao features, guests and configurations will
be available in the future. be available in the future.

View File

@ -0,0 +1,11 @@
# Dual-Linux, pseudo IVSHMEM-NET Demo
This demo features two Linux guests connected via ab inter-VM communication
object (i.e. shared memory plus a doorbell mechanism) communication using a
port of the IVSHMEM-NET driver which exposes the object as a network interface.
While one of the guests is assigned the platform's main UART, the second Linux
instance is "hidden" from the world and only reachable through this
communication mechanism via ssh at the static address *192.168.42.16*.
Follow the [instructions to build Linux](../../guests/linux/README.md).

View File

@ -0,0 +1,152 @@
#include <config.h>
VM_IMAGE(linux1, XSTR(BAO_DEMOS_WRKDIR_IMGS/linux1.bin));
VM_IMAGE(linux2, XSTR(BAO_DEMOS_WRKDIR_IMGS/linux2.bin));
struct config config = {
CONFIG_HEADER
.shmemlist_size = 1,
.shmemlist = (struct shmem[]) {
[0] = { .size = 0x00010000, }
},
.vmlist_size = 2,
.vmlist = {
{
.image = {
.base_addr = 0x80200000,
.load_addr = VM_IMAGE_OFFSET(linux1),
.size = VM_IMAGE_SIZE(linux1)
},
.entry = 0x80200000,
.cpu_affinity = 0b000001,
.platform = {
.cpu_num = 1,
.region_num = 1,
.regions = (struct mem_region[]) {
{
.base = 0x80000000,
.size = 0x40000000
}
},
.ipc_num = 1,
.ipcs = (struct ipc[]) {
{
.base = 0x60000000,
.size = 0x00010000,
.shmem_id = 0,
.interrupt_num = 2,
.interrupts = (uint64_t[]) {184,185}
}
},
.dev_num = 5,
.devs = (struct dev_region[]) {
{
/* lpuart0 */
.pa = 0x5a060000,
.va = 0x5a060000,
.size = 0x1000,
.interrupt_num = 1,
.interrupts = (uint64_t[]) {377}
},
{
/* lpuart0 clock generator */
.pa = 0x5a460000,
.va = 0x5a460000,
.size = 0x10000
},
{
/* edma0 channels 12 and 13 */
.pa = 0x5a2c0000,
.va = 0x5a2c0000,
.size = 0x20000,
.interrupt_num = 2,
.interrupts = (uint64_t[]) {466, 467},
/**
* this streamid must be configured in atf or uboot
* through a call to scfw
*/
.id = 0x1,
},
{
/* message unit 1 */
.pa = 0x5d1c0000,
.va = 0x5d1c0000,
.size = 0x10000,
.interrupt_num = 1,
.interrupts = (uint64_t[]) {209},
},
{
/* Arch timer interrupt */
.interrupt_num = 1,
.interrupts = (uint64_t[]) {27}
}
},
.arch = {
.gic = {
.gicd_addr = 0x51a00000,
.gicr_addr = 0x51b00000
},
},
},
},
{
.image = {
.base_addr = 0x80200000,
.load_addr = VM_IMAGE_OFFSET(linux2),
.size = VM_IMAGE_SIZE(linux2)
},
.entry = 0x80200000,
.cpu_affinity = 0b111110,
.platform = {
.cpu_num = 5,
.region_num = 1,
.regions = (struct mem_region[]) {
{
.base = 0x80000000,
.size = 0x40000000
}
},
.ipc_num = 1,
.ipcs = (struct ipc[]) {
{
.base = 0x60000000,
.size = 0x00010000,
.shmem_id = 0,
.interrupt_num = 2,
.interrupts = (uint64_t[]) {184,185}
}
},
.dev_num = 1,
.devs = (struct dev_region[]) {
{
/* Arch timer interrupt */
.interrupt_num = 1,
.interrupts = (uint64_t[]) {27}
},
},
.arch = {
.gic = {
.gicd_addr = 0x51a00000,
.gicr_addr = 0x51b00000
},
},
},
}
},
};

View File

@ -0,0 +1,125 @@
#include <config.h>
VM_IMAGE(linux1, XSTR(BAO_DEMOS_WRKDIR_IMGS/linux1.bin));
VM_IMAGE(linux2, XSTR(BAO_DEMOS_WRKDIR_IMGS/linux2.bin));
struct config config = {
CONFIG_HEADER
.shmemlist_size = 1,
.shmemlist = (struct shmem[]) {
[0] = { .size = 0x00010000, }
},
.vmlist_size = 2,
.vmlist = {
{
.image = {
.base_addr = 0x40000000,
.load_addr = VM_IMAGE_OFFSET(linux1),
.size = VM_IMAGE_SIZE(linux1)
},
.entry = 0x40000000,
.cpu_affinity = 0b1,
.platform = {
.cpu_num = 1,
.region_num = 1,
.regions = (struct mem_region[]) {
{
.base = 0x40000000,
.size = 0x20000000,
}
},
.ipc_num = 1,
.ipcs = (struct ipc[]) {
{
.base = 0x60000000,
.size = 0x00010000,
.shmem_id = 0,
.interrupt_num = 2,
.interrupts = (uint64_t[]) {184,185}
}
},
.dev_num = 2,
.devs = (struct dev_region[]) {
{
/* PL011 */
.pa = 0x9000000,
.va = 0x9000000,
.size = 0x1000,
.interrupt_num = 1,
.interrupts = (uint64_t[]) {33}
},
{
/* Arch timer interrupt */
.interrupt_num = 1,
.interrupts = (uint64_t[]) {27}
}
},
.arch = {
.gic = {
.gicd_addr = 0x8000000,
.gicr_addr = 0x80A0000
}
}
},
},
{
.image = {
.base_addr = 0x40000000,
.load_addr = VM_IMAGE_OFFSET(linux2),
.size = VM_IMAGE_SIZE(linux2)
},
.entry = 0x40000000,
.cpu_affinity = 0b1110,
.platform = {
.cpu_num = 3,
.region_num = 1,
.regions = (struct mem_region[]) {
{
.base = 0x40000000,
.size = 0x20000000
}
},
.ipc_num = 1,
.ipcs = (struct ipc[]) {
{
.base = 0x60000000,
.size = 0x00010000,
.shmem_id = 0,
.interrupt_num = 2,
.interrupts = (uint64_t[]) {184,185}
}
},
.dev_num = 1,
.devs = (struct dev_region[]) {
{
/* Arch timer interrupt */
.interrupt_num = 1,
.interrupts =
(uint64_t[]) {27}
}
},
.arch = {
.gic = {
.gicd_addr = 0x8000000,
.gicr_addr = 0x80A0000
}
}
},
}
},
};

View File

@ -0,0 +1,117 @@
#include <config.h>
VM_IMAGE(linux1, XSTR(BAO_DEMOS_WRKDIR_IMGS/linux1.bin));
VM_IMAGE(linux2, XSTR(BAO_DEMOS_WRKDIR_IMGS/linux2.bin));
struct config config = {
CONFIG_HEADER
.shmemlist_size = 1,
.shmemlist = (struct shmem[]) {
[0] = { .size = 0x00010000, }
},
.vmlist_size = 2,
.vmlist = {
{
.image = {
.base_addr = 0x80200000,
.load_addr = VM_IMAGE_OFFSET(linux1),
.size = VM_IMAGE_SIZE(linux1)
},
.entry = 0x80200000,
.platform = {
.cpu_num = 1,
.region_num = 1,
.regions = (struct mem_region[]) {
{
.base = 0x80000000,
.size = 0x40000000
}
},
.ipc_num = 1,
.ipcs = (struct ipc[]) {
{
.base = 0xf0000000,
.size = 0x00010000,
.shmem_id = 0,
.interrupt_num = 2,
.interrupts = (uint64_t[]) {52, 53}
}
},
.dev_num = 1,
.devs = (struct dev_region[]) {
{
/* UART */
.pa = 0x10000000,
.va = 0x10000000,
.size = 0x1000,
.interrupt_num = 1,
.interrupts = (uint64_t[]) {10}
},
},
.arch = {
.plic_base = 0xc000000,
}
},
},
{
.image = {
.base_addr = 0xa0200000,
.load_addr = VM_IMAGE_OFFSET(linux2),
.size = VM_IMAGE_SIZE(linux2)
},
.entry = 0xa0200000,
.platform = {
.cpu_num = 3,
.region_num = 1,
.regions = (struct mem_region[]) {
{
.base = 0xa0000000,
.size = 0x40000000, //128MB
.place_phys = true,
.phys = 0xa0000000,
}
},
.ipc_num = 1,
.ipcs = (struct ipc[]) {
{
.base = 0xf0000000,
.size = 0x00010000,
.shmem_id = 0,
.interrupt_num = 2,
.interrupts = (uint64_t[]) {52, 53}
}
},
.dev_num = 1,
.devs = (struct dev_region[]) {
{
/* virtio devices */
.pa = 0x10001000,
.va = 0x10001000,
.size = 0x8000,
.interrupt_num = 8,
.interrupts = (uint64_t[]) {1,2,3,4,5,6,7,8}
},
},
.arch = {
.plic_base = 0xc000000,
}
},
},
}
};

View File

@ -0,0 +1,176 @@
/dts-v1/;
/ {
#size-cells = <0x2>;
#address-cells = <0x2>;
cpus {
#size-cells = <0x0>;
#address-cells = <0x1>;
cpu@0 {
compatible = "arm,armv8";
device_type = "cpu";
enable-method = "psci";
reg = <0x0>;
};
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
memory@80000000 {
reg = <0x0 0x80000000 0x0 0x20000000>;
device_type = "memory";
};
gic: intc@8000000 {
interrupts = <0x01 0x09 0x04>;
reg = <0x00 0x51a00000 0x00 0x10000 0x00 0x51b00000 0x00 0xf60000>;
#redistributor-regions = <0x01>;
compatible = "arm,gic-v3";
interrupt-controller;
#interrupt-cells = <0x03>;
interrupt-parent = <&gic>;
};
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&gic>;
interrupts = <0x1 0xd 0xf08 0x1 0xe 0xf08 0x1 0xb 0xf08 0x1 0xa 0xf08>;
};
xtal32k: clock-xtal32k {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <32768>;
clock-output-names = "xtal_32KHz";
};
xtal24m: clock-xtal24m {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24000000>;
clock-output-names = "xtal_24MHz";
};
dma_ipg_clk: clock-dma-ipg {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <120000000>;
clock-output-names = "dma_ipg_clk";
};
/**
* We are assigning a mu to the linux guest because the linux drivers
* assume linux can directly interact with the SCU to configure its devices.
* Therefore, this guest will be able to configure peripherals not assigned
* to it. In the future we will have to either to move the cores
* belonging to this guest to a separate scfw partition or paravirtualise
* the MU1 and interpose the guest's communcation to the SCU, to limit
* which resource it might configure.
*/
lsio_mu1: mailbox@5d1c0000 {
compatible = "fsl,imx8qm-mu", "fsl,imx6sx-mu";
reg = <0x0 0x5d1c0000 0x0 0x10000>;
interrupt-parent = <&gic>;
interrupts = <0 177 4>;
#mbox-cells = <2>;
status = "okay";
};
scu {
compatible = "fsl,imx-scu";
mbox-names = "tx0", "tx1", "tx2", "tx3",
"rx0", "rx1", "rx2", "rx3",
"gip3";
mboxes = <&lsio_mu1 0 0
&lsio_mu1 0 1
&lsio_mu1 0 2
&lsio_mu1 0 3
&lsio_mu1 1 0
&lsio_mu1 1 1
&lsio_mu1 1 2
&lsio_mu1 1 3
&lsio_mu1 3 3>;
pd: imx8qx-pd {
compatible = "fsl,imx8qm-scu-pd", "fsl,scu-pd";
#power-domain-cells = <1>;
};
clk: clock-controller {
compatible = "fsl,imx8qm-clk", "fsl,scu-clk";
#clock-cells = <2>;
clocks = <&xtal32k &xtal24m>;
clock-names = "xtal_32KHz", "xtal_24Mhz";
};
};
edma0: dma-controller@5a2c0000 {
compatible = "fsl,imx8qm-edma";
reg = <0x0 0x5a2c0000 0x0 0x10000>, /* channel12 UART0 rx */
<0x0 0x5a2d0000 0x0 0x10000>; /* channel13 UART0 tx */
#dma-cells = <3>;
dma-channels = <2>;
interrupts = <0 434 4>, <0 435 4>;
interrupt-parent = <&gic>;
interrupt-names = "edma0-chan12-rx", "edma0-chan13-tx";
power-domains = <&pd 76>, <&pd 77>; /* lpuart0 */
power-domain-names = "edma0-chan12", "edma0-chan13";
status = "okay";
};
uart0_lpcg: clock-controller@5a460000 {
compatible = "fsl,imx8qxp-lpcg";
reg = <0x0 0x5a460000 0x0 0x10000>;
#clock-cells = <1>;
clocks = <&clk 57 2>,
<&dma_ipg_clk>;
bit-offset = <0 16>;
clock-output-names = "uart0_lpcg_baud_clk",
"uart0_lpcg_ipg_clk";
power-domains = <&pd 57>;
};
lpuart0: serial@5a060000 {
compatible = "fsl,imx8qm-lpuart", "fsl,imx8qxp-lpuart";
reg = <0x0 0x5a060000 0x0 0x1000>;
interrupt-parent = <&gic>;
interrupts = <0 345 4>;
clocks = <&uart0_lpcg 1>, <&uart0_lpcg 0>;
clock-names = "ipg", "baud";
assigned-clocks = <&clk 57 2>;
assigned-clock-rates = <80000000>;
power-domains = <&pd 57>;
power-domain-names = "uart";
dmas = <&edma0 13 0 0>, <&edma0 12 0 1>;
dma-names = "tx","rx";
status = "okay";
};
bao-ipc@60000000 {
compatible = "bao,pseudo-ivshmem-net";
#address-cells = <2>;
#size-cells = <2>;
reg = <0x0 0x60000000 0x0 0x00010000>;
interrupt-parent = <&gic>;
interrupts = <0x0 152 0x4 0x0 153 0x4>;
id = <0>;
};
aliases {
serial0 = &lpuart0;
};
chosen {
bootargs = "clk_ignore_unused ip=192.168.42.15 carrier_timeout=0";
stdout-path = &lpuart0;
};
};

View File

@ -0,0 +1,88 @@
/dts-v1/;
/ {
#size-cells = <0x2>;
#address-cells = <0x2>;
cpus {
#size-cells = <0x0>;
#address-cells = <0x1>;
cpu@0 {
compatible = "arm,armv8";
device_type = "cpu";
enable-method = "psci";
reg = <0x0>;
};
cpu@1 {
compatible = "arm,armv8";
device_type = "cpu";
enable-method = "psci";
reg = <0x1>;
};
cpu@2 {
reg = <0x2>;
compatible = "arm,armv8";
device_type = "cpu";
enable-method = "psci";
};
cpu@3 {
reg = <0x3>;
compatible = "arm,armv8";
device_type = "cpu";
enable-method = "psci";
};
cpu@4 {
compatible = "arm,armv8";
device_type = "cpu";
reg = <0x4>;
enable-method = "psci";
};
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
memory@80000000 {
reg = <0x0 0x80000000 0x0 0x40000000>;
device_type = "memory";
};
gic: intc@8000000 {
interrupts = <0x01 0x09 0x04>;
reg = <0x00 0x51a00000 0x00 0x10000 0x00 0x51b00000 0x00 0xf60000>;
#redistributor-regions = <0x01>;
compatible = "arm,gic-v3";
interrupt-controller;
#interrupt-cells = <0x03>;
interrupt-parent = <&gic>;
};
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&gic>;
interrupts = <0x1 0xd 0xf08 0x1 0xe 0xf08 0x1 0xb 0xf08 0x1 0xa 0xf08>;
};
bao-ipc@60000000 {
compatible = "bao,pseudo-ivshmem-net";
#address-cells = <2>;
#size-cells = <2>;
reg = <0x0 0x60000000 0x0 0x00010000>;
interrupt-parent = <&gic>;
interrupts = <0x0 152 0x4 0x0 153 0x4>;
id = <0>;
};
chosen {
bootargs = "clk_ignore_unused ip=192.168.42.16 carrier_timeout=0";
};
};

View File

@ -0,0 +1,83 @@
/dts-v1/;
/ {
#size-cells = <0x2>;
#address-cells = <0x2>;
interrupt-parent = <&gic>;
cpus {
#size-cells = <0x0>;
#address-cells = <0x1>;
cpu@0 {
compatible = "arm,cortex-a53", "arm,armv8";
device_type = "cpu";
enable-method = "psci";
reg = <0x0>;
};
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
memory@40000000 {
reg = <0x0 0x40000000 0x0 0x20000000>;
device_type = "memory";
};
gic: intc@8000000 {
interrupts = <0x01 0x09 0x04>;
reg = <0x00 0x8000000 0x00 0x10000 0x00 0x80a0000 0x00 0xf60000>;
#redistributor-regions = <0x01>;
compatible = "arm,gic-v3";
ranges;
#size-cells = <0x02>;
#address-cells = <0x02>;
interrupt-controller;
#interrupt-cells = <0x03>;
};
timer {
interrupts = <0x1 0xd 0xf04 0x1 0xe 0xf04 0x1 0xb 0xf04 0x1 0xa 0xf04>;
always-on;
compatible = "arm,armv8-timer", "arm,armv7-timer";
};
uart0: pl011@9000000 {
clock-names = "uartclk", "apb_pclk";
clocks = <0x8000 0x8000>;
interrupts = <0x0 0x1 0x4>;
reg = <0x0 0x9000000 0x0 0x1000>;
compatible = "arm,pl011", "arm,primecell";
};
bao-ipc@f0000000 {
compatible = "bao,pseudo-ivshmem-net";
#address-cells = <2>;
#size-cells = <2>;
reg = <0x0 0xf0000000 0x0 0x00010000>;
interrupt-parent = <&gic>;
interrupts = <0x0 152 0x4 0x0 153 0x4>;
id = <0>;
};
apb-pclk {
phandle = <0x8000>;
clock-output-names = "clk24mhz";
clock-frequency = <0x16e3600>;
#clock-cells = <0x0>;
compatible = "fixed-clock";
};
aliases {
serial0 = &uart0;
};
chosen {
bootargs = "earlycon console=ttyAMA0 ip=192.168.42.15 carrier_timeout=0";
stdout-path = &uart0;
};
};

View File

@ -0,0 +1,76 @@
/dts-v1/;
/ {
#size-cells = <0x2>;
#address-cells = <0x2>;
interrupt-parent = <&gic>;
cpus {
#size-cells = <0x0>;
#address-cells = <0x1>;
cpu@0 {
compatible = "arm,cortex-a53", "arm,armv8";
device_type = "cpu";
enable-method = "psci";
reg = <0x0>;
};
cpu@1 {
compatible = "arm,cortex-a53", "arm,armv8";
device_type = "cpu";
enable-method = "psci";
reg = <0x1>;
};
cpu@2 {
compatible = "arm,cortex-a53", "arm,armv8";
device_type = "cpu";
enable-method = "psci";
reg = <0x2>;
};
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
memory@40000000 {
reg = <0x0 0x40000000 0x0 0x20000000>;
device_type = "memory";
};
gic: intc@8000000 {
phandle = <0x8001>;
interrupts = <0x01 0x09 0x04>;
reg = <0x00 0x8000000 0x00 0x10000 0x00 0x80a0000 0x00 0xf60000>;
#redistributor-regions = <0x01>;
compatible = "arm,gic-v3";
ranges;
#size-cells = <0x02>;
#address-cells = <0x02>;
interrupt-controller;
#interrupt-cells = <0x03>;
};
timer {
interrupts = <0x1 0xd 0xf04 0x1 0xe 0xf04 0x1 0xb 0xf04 0x1 0xa 0xf04>;
always-on;
compatible = "arm,armv8-timer", "arm,armv7-timer";
};
bao-ipc@60000000 {
compatible = "bao,pseudo-ivshmem-net";
#address-cells = <2>;
#size-cells = <2>;
reg = <0x0 0x60000000 0x0 0x00010000>;
interrupt-parent = <&gic>;
interrupts = <0x0 152 0x4 0x0 153 0x4>;
id = <0>;
};
chosen {
bootargs = "earlycon ip=192.168.42.16 carrier_timeout=0";
};
};

View File

@ -0,0 +1,67 @@
/dts-v1/;
/ {
#address-cells = <0x2>;
#size-cells = <0x2>;
cpus {
#address-cells = <0x1>;
#size-cells = <0x0>;
timebase-frequency = <10000000>;
cpu0: cpu@0 {
device_type = "cpu";
reg = <0x0>;
status = "okay";
compatible = "riscv";
riscv,isa = "rv64imafdcsu";
mmu-type = "riscv,sv48";
cpu0_intc: interrupt-controller {
#interrupt-cells = <0x1>;
interrupt-controller;
compatible = "riscv,cpu-intc";
};
};
};
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x0 0x40000000>;
};
plic: interrupt-controller@c000000 {
riscv,ndev = <60>;
reg = <0x0 0xc000000 0x0 0x4000000>;
interrupts-extended = <
&cpu0_intc 11 &cpu0_intc 9
>;
interrupt-controller;
compatible = "riscv,plic0";
#interrupt-cells = <0x1>;
};
uart0: uart@10000000 {
interrupts = <10>;
interrupt-parent = <&plic>;
clock-frequency = <0x384000>;
reg = <0x0 0x10000000 0x0 0x100>;
compatible = "ns16550a";
};
bao-ipc@f0000000 {
compatible = "bao,pseudo-ivshmem-net";
#address-cells = <2>;
#size-cells = <2>;
reg = <0x0 0xf0000000 0x0 0x00010000>;
interrupt-parent = <&plic>;
interrupts = <52 53>;
id = <0>;
};
chosen {
bootargs = "earlycon console=ttyS0 ip=192.168.42.15 carrier_timeout=0";
stdout-path = &uart0;
};
};

View File

@ -0,0 +1,149 @@
/dts-v1/;
/ {
#address-cells = <0x2>;
#size-cells = <0x2>;
cpus {
#address-cells = <0x1>;
#size-cells = <0x0>;
timebase-frequency = <10000000>;
cpu0: cpu@0 {
device_type = "cpu";
reg = <0x0>;
status = "okay";
compatible = "riscv";
riscv,isa = "rv64imafdcsu";
mmu-type = "riscv,sv48";
cpu0_intc: interrupt-controller {
#interrupt-cells = <0x1>;
interrupt-controller;
compatible = "riscv,cpu-intc";
};
};
cpu1: cpu@1 {
device_type = "cpu";
reg = <0x1>;
status = "okay";
compatible = "riscv";
riscv,isa = "rv64imafdcsu";
mmu-type = "riscv,sv48";
cpu1_intc: interrupt-controller {
#interrupt-cells = <0x1>;
interrupt-controller;
compatible = "riscv,cpu-intc";
};
};
cpu2: cpu@2 {
device_type = "cpu";
reg = <0x2>;
status = "okay";
compatible = "riscv";
riscv,isa = "rv64imafdcsu";
mmu-type = "riscv,sv48";
cpu2_intc: interrupt-controller {
#interrupt-cells = <0x1>;
interrupt-controller;
compatible = "riscv,cpu-intc";
};
};
};
memory@a0000000 {
device_type = "memory";
reg = <0x0 0xa0000000 0x0 0x40000000>;
};
plic: interrupt-controller@c000000 {
riscv,ndev = <60>;
reg = <0x0 0xc000000 0x0 0x4000000>;
interrupts-extended = <
&cpu0_intc 11 &cpu0_intc 9
&cpu1_intc 11 &cpu1_intc 9
&cpu2_intc 11 &cpu2_intc 9
>;
interrupt-controller;
compatible = "riscv,plic0";
#interrupt-cells = <0x1>;
#address-cells = <0x0>;
};
// virtio_mmio@10008000 {
// interrupts = <0x8>;
// interrupt-parent = <&plic>;
// reg = <0x0 0x10008000 0x0 0x1000>;
// compatible = "virtio,mmio";
// };
virtio_serial: virtio_mmio@10007000 {
interrupts = <0x7>;
interrupt-parent = <&plic>;
reg = <0x0 0x10007000 0x0 0x1000>;
compatible = "virtio,mmio";
};
// virtio_mmio@10006000 {
// interrupts = <0x6>;
// interrupt-parent = <&plic>;
// reg = <0x0 0x10006000 0x0 0x1000>;
// compatible = "virtio,mmio";
// };
// virtio_mmio@10005000 {
// interrupts = <0x5>;
// interrupt-parent = <&plic>;
// reg = <0x0 0x10005000 0x0 0x1000>;
// compatible = "virtio,mmio";
// };
// virtio_mmio@10004000 {
// interrupts = <0x4>;
// interrupt-parent = <&plic>;
// reg = <0x0 0x10004000 0x0 0x1000>;
// compatible = "virtio,mmio";
// };
// virtio_mmio@10003000 {
// interrupts = <0x3>;
// interrupt-parent = <&plic>;
// reg = <0x0 0x10003000 0x0 0x1000>;
// compatible = "virtio,mmio";
// };
// virtio_mmio@10002000 {
// interrupts = <0x2>;
// interrupt-parent = <&plic>;
// reg = <0x0 0x10002000 0x0 0x1000>;
// compatible = "virtio,mmio";
// };
// virtio_mmio@10001000 {
// interrupts = <0x1>;
// interrupt-parent = <&plic>;
// reg = <0x0 0x10001000 0x0 0x1000>;
// compatible = "virtio,mmio";
// };
bao-ipc@f0000000 {
compatible = "bao,pseudo-ivshmem-net";
#address-cells = <2>;
#size-cells = <2>;
reg = <0x0 0xf0000000 0x0 0x00010000>;
interrupt-parent = <&plic>;
interrupts = <52 53>;
id = <0>;
};
chosen {
bootargs = "earlycon console=hvc1 ip=192.168.42.16 carrier_timeout=0";
stdout-path = &virtio_serial;
};
};

View File

@ -0,0 +1,11 @@
include $(bao_demos)/guests/linux/make.mk
linux1_image=$(wrkdir_demo_imgs)/linux1.bin
linux1_dts=$(bao_demos)/demos/$(DEMO)/devicetrees/$(PLATFORM)/linux1.dts
$(eval $(call build-linux, $(linux1_image), $(linux1_dts)))
linux2_image=$(wrkdir_demo_imgs)/linux2.bin
linux2_dts=$(bao_demos)/demos/$(DEMO)/devicetrees/$(PLATFORM)/linux2.dts
$(eval $(call build-linux, $(linux2_image), $(linux2_dts)))
guest_images:=$(linux1_image) $(linux2_image)

View File

@ -1 +1,2 @@
CONFIG_BAO_SHMEM=y CONFIG_BAO_SHMEM=y
CONFIG_BAO_PSEUDO_IVSHMEM_NET=y

View File

@ -1,16 +1,16 @@
From fec89b9845b4d518ed8841f42f41d90370908be6 Mon Sep 17 00:00:00 2001 From 798b55da03b090dfe19aacea9a248348e322e032 Mon Sep 17 00:00:00 2001
From: Jose Martins <josemartins90@gmail.com> From: Jose Martins <josemartins90@gmail.com>
Date: Sat, 6 Mar 2021 22:51:24 +0000 Date: Mon, 5 Apr 2021 21:25:28 +0100
Subject: [PATCH] add bao ipcshmem driver Subject: [PATCH 1/2] add bao ipcshmem driver
Signed-off-by: Jose Martins <josemartins90@gmail.com> Signed-off-by: Jose Martins <josemartins90@gmail.com>
--- ---
drivers/Kconfig | 2 + drivers/Kconfig | 2 +
drivers/Makefile | 1 + drivers/Makefile | 1 +
drivers/bao/Kconfig | 5 + drivers/bao/Kconfig | 5 +
drivers/bao/Makefile | 2 + drivers/bao/Makefile | 1 +
drivers/bao/bao-ipcshmem.c | 288 +++++++++++++++++++++++++++++++++++++ drivers/bao/bao-ipcshmem.c | 288 +++++++++++++++++++++++++++++++++++++
5 files changed, 298 insertions(+) 5 files changed, 297 insertions(+)
create mode 100755 drivers/bao/Kconfig create mode 100755 drivers/bao/Kconfig
create mode 100644 drivers/bao/Makefile create mode 100644 drivers/bao/Makefile
create mode 100644 drivers/bao/bao-ipcshmem.c create mode 100644 drivers/bao/bao-ipcshmem.c
@ -37,23 +37,22 @@ index 5792caca1..61ef5b5fd 100644
+obj-$(CONFIG_BAO_SHMEM) += bao/ +obj-$(CONFIG_BAO_SHMEM) += bao/
diff --git a/drivers/bao/Kconfig b/drivers/bao/Kconfig diff --git a/drivers/bao/Kconfig b/drivers/bao/Kconfig
new file mode 100755 new file mode 100755
index 000000000..dc5e9fc08 index 000000000..aee249429
--- /dev/null --- /dev/null
+++ b/drivers/bao/Kconfig +++ b/drivers/bao/Kconfig
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
+config BAO_SHMEM +config BAO_SHMEM
+ tristate "Bao shared memory support" + tristate "Bao sample shared memory char device"
+ +
+ help + help
+ This implements an interface to communicate with bao hosted guests. + A sample driver to communicate between Bao hosted guests.
diff --git a/drivers/bao/Makefile b/drivers/bao/Makefile diff --git a/drivers/bao/Makefile b/drivers/bao/Makefile
new file mode 100644 new file mode 100644
index 000000000..f900be88e index 000000000..7265404bb
--- /dev/null --- /dev/null
+++ b/drivers/bao/Makefile +++ b/drivers/bao/Makefile
@@ -0,0 +1,2 @@ @@ -0,0 +1 @@
+obj-$(CONFIG_BAO_SHMEM) += bao.o +obj-$(CONFIG_BAO_SHMEM) += bao-ipcshmem.o
+bao-objs += bao-ipcshmem.o
diff --git a/drivers/bao/bao-ipcshmem.c b/drivers/bao/bao-ipcshmem.c diff --git a/drivers/bao/bao-ipcshmem.c b/drivers/bao/bao-ipcshmem.c
new file mode 100644 new file mode 100644
index 000000000..9a25367b0 index 000000000..9a25367b0

View File

@ -1,16 +1,16 @@
From 8b6f77465ca53540dfca7f0fda06620689543c11 Mon Sep 17 00:00:00 2001 From 5cbf7374cdca92eeb260ddadb2a8e2d9d3e51a36 Mon Sep 17 00:00:00 2001
From: Jose Martins <josemartins90@gmail.com> From: Jose Martins <josemartins90@gmail.com>
Date: Tue, 16 Feb 2021 16:37:13 +0000 Date: Tue, 16 Feb 2021 16:37:13 +0000
Subject: [PATCH] add bao ipcshmem driver Subject: [PATCH 1/2] add bao ipcshmem driver
Signed-off-by: Jose Martins <josemartins90@gmail.com> Signed-off-by: Jose Martins <josemartins90@gmail.com>
--- ---
drivers/Kconfig | 2 + drivers/Kconfig | 2 +
drivers/Makefile | 1 + drivers/Makefile | 1 +
drivers/bao/Kconfig | 5 + drivers/bao/Kconfig | 5 +
drivers/bao/Makefile | 2 + drivers/bao/Makefile | 1 +
drivers/bao/bao-ipcshmem.c | 288 +++++++++++++++++++++++++++++++++++++ drivers/bao/bao-ipcshmem.c | 288 +++++++++++++++++++++++++++++++++++++
5 files changed, 298 insertions(+) 5 files changed, 297 insertions(+)
create mode 100755 drivers/bao/Kconfig create mode 100755 drivers/bao/Kconfig
create mode 100644 drivers/bao/Makefile create mode 100644 drivers/bao/Makefile
create mode 100644 drivers/bao/bao-ipcshmem.c create mode 100644 drivers/bao/bao-ipcshmem.c
@ -37,23 +37,22 @@ index 576228037..5f45b99be 100644
+obj-$(CONFIG_BAO_SHMEM) += bao/ +obj-$(CONFIG_BAO_SHMEM) += bao/
diff --git a/drivers/bao/Kconfig b/drivers/bao/Kconfig diff --git a/drivers/bao/Kconfig b/drivers/bao/Kconfig
new file mode 100755 new file mode 100755
index 000000000..dc5e9fc08 index 000000000..aee249429
--- /dev/null --- /dev/null
+++ b/drivers/bao/Kconfig +++ b/drivers/bao/Kconfig
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
+config BAO_SHMEM +config BAO_SHMEM
+ tristate "Bao shared memory support" + tristate "Bao sample shared memory char device"
+ +
+ help + help
+ This implements an interface to communicate with bao hosted guests. + A sample driver to communicate between Bao hosted guests.
diff --git a/drivers/bao/Makefile b/drivers/bao/Makefile diff --git a/drivers/bao/Makefile b/drivers/bao/Makefile
new file mode 100644 new file mode 100644
index 000000000..f900be88e index 000000000..7265404bb
--- /dev/null --- /dev/null
+++ b/drivers/bao/Makefile +++ b/drivers/bao/Makefile
@@ -0,0 +1,2 @@ @@ -0,0 +1 @@
+obj-$(CONFIG_BAO_SHMEM) += bao.o +obj-$(CONFIG_BAO_SHMEM) += bao-ipcshmem.o
+bao-objs += bao-ipcshmem.o
diff --git a/drivers/bao/bao-ipcshmem.c b/drivers/bao/bao-ipcshmem.c diff --git a/drivers/bao/bao-ipcshmem.c b/drivers/bao/bao-ipcshmem.c
new file mode 100644 new file mode 100644
index 000000000..9a25367b0 index 000000000..9a25367b0

File diff suppressed because it is too large Load Diff