Re: Raspberry Pi SD access

Adam Lackorzynski <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <[email protected]>
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/
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.