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