Hi Mohamed,

on the rpi4 there's a global offset used in Linux's device tree (check
for ranges statement in bcm2711.dtsi). The address of the sdhc/mmc
controller rather is 0xfe300000. Also use 0x7e + 32 for the IRQ to
consider it's an SPI.



Adam

On Wed Oct 07, 2020 at 20:28:44 +0200, Mohamed Nasr wrote:
> 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


Adam
-- 
Adam                 a...@os.inf.tu-dresden.de
  Lackorzynski         http://os.inf.tu-dresden.de/~adam/

_______________________________________________
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