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[]: [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
Adam
--
Adam [email protected]
Lackorzynski http://os.inf.tu-dresden.de/~adam/
_______________________________________________
l4-hackers mailing list
[email protected]
http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers