Hi L4 Team,

I am trying to access SD card of Raspberry Pi 4 But the IO fail with
IO      | new iomem region: p=0000007e000000 v=00000000400000 s=400000
(bmb=0x24370)
IO      | map mem: p=0000007e300000 v=00000000700000 s=1000: failed(-12)
VMM: FATAL: Insufficient memory

Can you help me on what I am missing?

My configurations are:

----------- io.cfg ----------------------------------
local Res = Io.Res
local Hw = Io.Hw
local add_children = Io.Dt.add_children

add_children(Io.system_bus(), function()
    mmc = Hw.Device(function()
        compatible = { "brcm,bcm2835-mmc" };
        Resource.reg0 = Res.mmio(0x7e300000, 0x7e3000FF);
        Resource.irq0 = Res.irq(0x7e);
        Property.flags = Io.Hw_device_DF_dma_supported;
    end)
end)

-------- vm_hw.vbus ---------------------------
Io.add_vbusses
{
  vm_hw = Io.Vi.System_bus(function()
    MMC = wrap(Io.system_bus().mmc);
  end);
}

-------- rpi_mmc.ned -------------------------
local L4 = require("L4");
local l = L4.default_loader;

vbus_l4linux = l:new_channel();

-- Start io & flash memory
l:start({
    caps = {
        sigma0 = L4.cast(L4.Proto.Factory,
L4.Env.sigma0):create(L4.Proto.Sigma0),
        icu = L4.Env.icu,
        vm_hw = vbus_l4linux:svr()
    },
    log = {"IO", "y"}
}, "rom/io rom/io.cfg rom/vm_hw.vbus -vvvvvv");

l:startv({
    caps = {
        ram = L4.Env.user_factory:create(L4.Proto.Dataspace, 256 * 1024 *
1024, 7, 21):m("rws");
        vbus = vbus_l4linux;
    },
    log = L4.Env.log:m("rws")
}, "rom/uvmm", "-v", "-krom/image.bin",
        "-rrom/ramdisk-arm64.rd",
        "-drom/virt-arm_virt-64-2.dtb",
        "-cconsole=hvc0 ramdisk_size=10000 root=/dev/ram0 rw");

--------------- modules.list ---------------------
entry rpi-mmc
kernel fiasco -serial_esc
roottask moe rom/rpi-mmc.ned
module uvmm
module l4re
module ned
module virt-arm_virt-64-mod.dtb
module ramdisk-arm64.rd
module rpi-mmc.ned
module image.bin
module io
module io.cfg
module vm_hw.vbus

------------- I added mmc to device tree ---------
mmc@7e300000 {
   compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
   reg = <0x7e300000 0x100>;
   interrupts = <0x0 0x7e 0x4>;
   clocks = <0x3 0x1c>;
   dmas = <0xa 0xb>;
   dma-names = "rx-tx";
   brcm,overclock-50 = <0x0>;
   status = "disabled";
   pinctrl-names = "default";
   pinctrl-0 = <0x19>;
   bus-width = <0x4>;
   phandle = <0x2d>;
};

--------------------------------------------------------------------
I tested Linux kernel with uvmm module and without IO module and it was
working perfectly. I compiled it with the following options on:

 CONFIG_VIRTIO=y
 CONFIG_VIRTIO_PCI=y
 CONFIG_VIRTIO_BLK=y
 CONFIG_BLK_MQ_VIRTIO=y
 CONFIG_VIRTIO_CONSOLE=y
 CONFIG_VIRTIO_INPUT=y
 CONFIG_VIRTIO_NET=y

---------------------------------------------------------------------
boot log messages are:

L4 Bootstrapper
  Build: #104 Wed Oct  7 20:14:57 EET 2020, 7.5.0
  Raspberry Pi Model 4B, Rev 1.1, 4096MB, SoC BCM2711 [c03111]
  Warranty intact, OTP reading allowed, OTP programming allowed,
Overvoltage allowed
  RAM: 0000000000000000 - 000000003b3fffff: 970752kB
  RAM: 0000000040000000 - 00000000fbffffff: 3080192kB
  Total RAM: 3956MB
  Scanning fiasco
  Scanning sigma0
  Scanning moe
  Moving up to 14 modules behind 1100000
  moving module 13 { 2540000-25400bb } -> { 262c000-262c0bb } [188]
  moving module 12 { 253f000-253f555 } -> { 262b000-262b555 } [1366]
  moving module 11 { 230c000-253e187 } -> { 23f8000-262a187 } [2302344]
  moving module 10 { 15b3000-230b9ff } -> { 169f000-23f79ff } [13994496]
  moving module 09 { 15b2000-15b22ea } -> { 169e000-169e2ea } [747]
  moving module 08 { 1232000-15b1fff } -> { 131e000-169dfff } [3670016]
  moving module 07 { 1231000-123176c } -> { 131d000-131d76c } [1901]
  moving module 06 { 11be000-123041f } -> { 12aa000-131c41f } [468000]
  moving module 05 { 11a0000-11bd14f } -> { 128c000-12a914f } [119120]
  moving module 04 { 119f000-119fdbf } -> { 128b000-128bdbf } [3520]
  moving module 03 { 10eb000-119e957 } -> { 11d7000-128a957 } [735576]
  moving module 02 { 10ad000-10eaf0f } -> { 1199000-11d6f0f } [253712]
  moving module 01 { 10a3000-10ac947 } -> { 118f000-1198947 } [39240]
  moving module 00 { 1014000-10a24c7 } -> { 1100000-118e4c7 } [582856]
  Loading fiasco
  Loading sigma0
  Loading moe
  find kernel info page...
  found kernel info page (via ELF) at 3000
Regions of list 'regions'
    [        0,       fff] {     1000} Arch   mpspin
    [     1000,     9ffff] {    9f000} Kern   fiasco
    [    a0000,     a01ff] {      200} Root   mbi_rt
    [   100000,    10e46f] {     e470} Sigma0 sigma0
    [   140000,    17d70f] {    3d710} Root   moe
    [   17e710,    189edf] {     b7d0} Root   moe
    [  1000000,   10122b3] {    122b4} Boot   bootstrap
    [  1013210,   1013c1c] {      a0d} Boot   modinfo
    [  11d7000,   262c0bb] {  14550bc} Root   Module
  found kernel options (via ELF) at 4000
  Sigma0 config    ip:0010042c sp:00000000
  Roottask config  ip:00141594 sp:00000000
  Starting kernel fiasco at 00001760
Hello from Startup::stage2
Number of IRQs available at this GIC: 256
FPU: Initialize
ARM generic timer: freq=54000000 interval=54000 cnt=2085101974
SERIAL ESC: allocated IRQ 125 for serial uart
Not using serial hack in slow timer handler.
Welcome to L4/Fiasco.OC!
L4/Fiasco.OC microkernel on arm
Rev: unknown compiled with gcc 7.5.0 for RPi4 (Broadcom 2711)    []
Build: #1 Mon Oct  5 13:54:22 EET 2020

Allocate ARM PPI 25 to virtual 0
Allocate ARM PPI 27 to virtual 1
Allocate ARM PPI 25 to virtual 0
Allocate ARM PPI 27 to virtual 1
Allocate ARM PPI 25 to virtual 0
Cache config: ON
Allocate ARM PPI 27 to virtual 1
Calibrating timer loop... Cache config: ON
Allocate ARM PPI 25 to virtual 0
done.
Allocate ARM PPI 27 to virtual 1
MDB: use page size: 30
Cache config: ON
MDB: use page size: 21
ID_PFR[01]:  00002222 00000000MDB: use page size: 12
 ID_[DA]FR0: 10305106 00000000
SIGMA0: Hello!
ID_MMFR[04]: 00001124 00000000 00000000 00000000
  KIP @ ID_PFR[01]:  00002222 000000003000 ID_[DA]FR0: 10305106 00000000

ID_MMFR[04]: 00001124 00000000 00000000 00000000
  allocated ID_PFR[01]:  00002222 000000004 ID_[DA]FR0: 10305106 00000000
KBID_MMFR[04]: 00001124 00000000 00000000 00000000
 for maintenance structures
SIGMA0: Dump of all resource maps
RAM:------------------------
[4:RWX:a0000;a0fff]
[0:RWX:a1000;fffff]
[0:RWX:10f000;13ffff]
[4:R-X:140000;17dfff]
[4:RW-:17e000;189fff]
[0:RWX:18a000;11d6fff]
[4:RWX:11d7000;262cfff]
[0:RWX:262d000;3b3fffff]
[0:RWX:40000000;faffffff]
IOMEM:----------------------
[0:RW-:0;fff]
[0:RW-:3b400000;3fffffff]
[0:RWX:fc000000;ffffffffffffffff]
MOE: Hello world
MOE: found 4012740 KByte free memory
MOE: found RAM from a0000 to fb000000
MOE: allocated 4015 KByte for the page array @0x18a000
MOE: virtual user address space [0-7fffffffff]
MOE: rom name space cap -> [C:103000]
MOE: rwfs name space cap -> [C:105000]
  BOOTFS: [11d7000-128a958] [C:107000] uvmm
  BOOTFS: [128b000-128bdc0] [C:109000] vmm.lua
  BOOTFS: [128c000-12a9150] [C:10b000] l4re
  BOOTFS: [12aa000-131c420] [C:10d000] ned
  BOOTFS: [131d000-131d76d] [C:10f000] virt-arm_virt-64-2.dtb
  BOOTFS: [131e000-169e000] [C:111000] ramdisk-arm64.rd
  BOOTFS: [169e000-169e2eb] [C:113000] rpi-mmc3.ned
  BOOTFS: [169f000-23f7a00] [C:115000] image.bin
  BOOTFS: [23f8000-262a188] [C:117000] io
  BOOTFS: [262b000-262b556] [C:119000] io.cfg
  BOOTFS: [262c000-262c0bc] [C:11b000] vm_hw.vbus
MOE: cmdline: moe rom/rpi-mmc3.ned
MOE: Starting: rom/ned rom/rpi-mmc3.ned
MOE: loading 'rom/ned'
Ned says: Hi World!
Ned: loading file: 'rom/rpi-mmc3.ned'
IO      | Io service
IO      | Verboseness level: 7
IO      | unused physical memory space:
IO      |   [0000003b400000-0000003fffffff]
IO      |   [000000fc000000-ffffffffffffffff]
IO      | no 'iommu' capability found, using CPU-phys for DMA
VMM[]: Created VCPU 0 @ 16000
IO      | Loading: config 'rom/io.cfg'
IO      | Loading: config 'rom/vm_hw.vbus'
IO      | Add IRQ resources to vbus: IRQ     [0000000000007e-0000000000007e
1] none (align=0 flags=1)
IO      | vm_hw: [N12_GLOBAL__N_112Virtual_sbusE]
IO      |   Resources: ==== start ====
IO      |   Resources: ===== end =====
IO      |   L4ICU: [N2Vi6Sw_icuE]
IO      |     Resources: ==== start ====
IO      |     Resources: ===== end =====
IO      |   MMC: [N2Vi9Proxy_devE]
IO      |     Resources: ==== start ====
IO      |     IRQ     [0000000000007e-0000000000007e 1] none (align=0
flags=1)
IO      |     IOMEM   [0000007e300000-0000007e3000ff 100] 32-bit non-pref
(align=ff flags=2)
IO      |     DMADOM  [00000000000000-00000000000000 1] (align=0 flags=6)
IO      |     Resources: ===== end =====
IO      | Real Hardware -----------------------------------
IO      | System Bus:
IO      |   Resources: ==== start ====
IO      |   DMADOM  [00000000000000-00000000000000 1] (align=0 flags=6)
IO      |   Resources: ===== end =====
IO      |   mmc:
IO      |     compatible= { "brcm,bcm2835-mmc" }
IO      |     Clients: ===== start ====
IO      |       MMC: [N2Vi9Proxy_devE]
IO      |     Clients: ===== end ====
IO      |     Resources: ==== start ====
IO      |     IRQ     [0000000000007e-0000000000007e 1] none (align=0
flags=1)
IO      |     IOMEM   [0000007e300000-0000007e3000ff 100] 32-bit non-pref
(align=ff flags=2)
IO      |     DMADOM  [00000000000000-00000000000000 1] (align=0 flags=6)
IO      |     Resources: ===== end =====
IO      | warning: could not register control interface at cap
'platform_ctl'
IO      | Ready. Waiting for request.
VMM[GIC]: create ARM GICv2
VMM[main]: Hello out there.
VMM[ram]: RAM: @ 0x2800000 size=0x10000000 (ci)
VMM[ram]: RAM: VMM mapping @ 0x1200000 size=0x10000000
VMM[ram]: RAM: VM offset=0xfffffffffea00000
VMM[main]: Loading kernel...
VMM[file]: load: @ 0x2880000
VMM[file]: copy in: to offset 0x80000-0xdd8a00
VMM[]: Create virtual console
VMM[guest]: New mmio mapping: @ f1040000 10000
VMM[GIC]: GICC virtualization only supports sizes up to 0x1000, adjusting
device tree node
VMM[GIC]: GIC interrupt-controller.reg update: Adjusting GICC size from
20000 to 1000
VMM[guest]: New mmio mapping: @ f1060000 1000
VMM[guest]: New mmio mapping: @ f1120000 100
VMM[]: virtio_net@10000.l4vmm,virtiocap: capability net is invalid.
VMM[vm]: Device creation for virtual device virtio_net@10000 failed.
Disabling device.
VMM[Timer]: Guest timer frequency is 54000000
using (1/54), (9942053/29) to calculate timeouts
VMM[psci]: Register PSCI device: hvc mode
VMM[ioproxy]: Registering IRQ resource MMC.irq0 : 0x7e
VMM[ioproxy]: Adding MMIO resource MMC.reg0 : [0x7e300000 - 0x7e3000ff]
IO      | new iomem region: p=0000007e000000 v=00000000400000 s=400000
(bmb=0x24370)
IO      | map mem: p=0000007e300000 v=00000000700000 s=1000: failed(-12)
VMM: FATAL: Insufficient memory

Best Regards,
Nasr

-- 


*Driving Innovation! Visit our website www.avelabs.com 
<http://www.avelabs.com/>*, to read Avelabs Confidentiality Notice, follow 
this link: http://www.avelabs.com/email/disclaimer.html 
<http://www.avelabs.com/email/disclaimer.html>

_______________________________________________
l4-hackers mailing list
l4-hackers@os.inf.tu-dresden.de
http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers

Reply via email to