Hi Martin,
I really appreciate your kind response.
I just want to let only Genode to access the ESDHC and run tz_vmm successfully without generating data abort exception . Can i disable the ESDHC in the Linux kernel so that the Linux (unsecure side) can't request to access the ESDHC. Please let me know if it is possible and how i can do that. Or is there something to do this in Genode configuration?
Thanks,
On Thu, Nov 19, 2015 at 11:19 AM, Martin Stein <martin.stein@...1...
wrote:
Hey Joseph,
Am 19.11.2015 um 01:58 schrieb Joseph Lee:
the problem was that the SDHC driver timed out which then generates the "Completion host signal timed out" error message. It is solved by
replacing
if (!wait_for<Irqstat>(irq_goal, _delayer)) { PERR("Completion host signal timed out");
in [1] with
if (!wait_for<Irqstat>(irq_goal, _delayer, 3000)) { PERR("Completion host signal timed out %x", read<Irqstat>());
Thank you for the info :)
I tried to modify trustzone settings for ESDHC MMIO and IRQs and make run/tz_vmm. it hangs when the Linux kernel tries to access the sd_card and displays the following error message.
mxsdhci: MXC Secure Digital Host Controller Interface driver mxsdhci: MXC SDHCI Controller Driver. [init -> tz_vmm] Cpu state: [init -> tz_vmm] Register Virt Phys [init -> tz_vmm] --------------------------------- [init -> tz_vmm] r0 = c5bc6e00 [85bc6e00] [init -> tz_vmm] r1 = 00000001 [00000000] [init -> tz_vmm] r2 = c030aef8 [8030aef8] [init -> tz_vmm] r3 = c690e000 [50004000] [init -> tz_vmm] r4 = c5bc6e00 [85bc6e00] [init -> tz_vmm] r5 = c5bc6e00 [85bc6e00] [init -> tz_vmm] r6 = 00000000 [00000000] [init -> tz_vmm] r7 = 00000001 [00000000] [init -> tz_vmm] r8 = c088cf50 [8088cf50] [init -> tz_vmm] r9 = 00000000 [00000000] [init -> tz_vmm] r10 = 00000001 [00000000] [init -> tz_vmm] r11 = c5b5b0c0 [85b5b0c0] [init -> tz_vmm] r12 = 00002000 [00000000] [init -> tz_vmm] sp = 00000000 [00000000] [init -> tz_vmm] lr = 00000000 [00000000] [init -> tz_vmm] ip = c0309288 [80309288] [init -> tz_vmm] cpsr = 20000013 [init -> tz_vmm] sp_und = c08e3978 [808e3978] [init -> tz_vmm] lr_und = c08e3978 [808e3978] [init -> tz_vmm] spsr_und = 00000000 [00000000] [init -> tz_vmm] sp_svc = c5023ee8 [85023ee8] [init -> tz_vmm] lr_svc = c030afd0 [8030afd0] [init -> tz_vmm] spsr_svc = 60000013 [00000000] [init -> tz_vmm] sp_abt = c08e396c [808e396c] [init -> tz_vmm] lr_abt = c0038a20 [80038a20] [init -> tz_vmm] spsr_abt = 20000093 [00000000] [init -> tz_vmm] sp_irq = c08e3960 [808e3960] [init -> tz_vmm] lr_irq = c0038a80 [80038a80] [init -> tz_vmm] spsr_irq = 60000093 [00000000] [init -> tz_vmm] sp_fiq = 00000000 [00000000] [init -> tz_vmm] lr_fiq = 00000000 [00000000] [init -> tz_vmm] spsr_fiq = 00000000 [00000000] [init -> tz_vmm] ttbr0 = 85e34019 [init -> tz_vmm] ttbr1 = 80004019 [init -> tz_vmm] ttbrc = 00000000 [init -> tz_vmm] dfar = c690e02c [5000402c] [init -> tz_vmm] exception = data_abort [init -> tz_vmm] Could not handle data-abort will exit!
As you configured your ESDHC secure, unsecure Linux consequently isn't allowed anymore to access it. If you want to let both Linux and Genode access the ESDHC you can use an SMC-based stub block driver in the unsecure world. You might have a look at [1] (unsecure sided driver) and [2] (secure sided back-end) as an inspiration. In this example, Genode secures the ESDHC in general but, via part_blk and tz_vmm, provides the second partition of an ESDHC medium to the Linux stub block driver.
Cheers, Martin
[1]
https://github.com/m-stein/genode/commit/225f1fe1296da11b8304ebe55a4c23f6e29...
repos/os/src/server/tz_vmm/include/block.h repos/os/src/server/tz_vmm/block.cc
[2]
https://github.com/m-stein/linux/commit/9418cc87ed26b6cd7c4ec66ba4bdc1f998cd...
drivers/block/genode.c
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main