Raspberry Pi SD access

Mohamed Nasr <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <CAP6qbm9wqg0o7cEKjTJOQx4ngk3762KpWDxs_XsDSDOp3PvLrQ@mail.gmail.com>
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[]: [email protected],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
[email protected]
http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.