Linux timer interrupts not working when booting in normal-world
Hi
I'm currently playing with the TrustZone technology on the Tegra2 Harmony board, and my goal is to boot Linux not in the secure world (as it is in mainstream Linux), but in the normal world. However, in doing this, timer interrupts are not being triggered and the system halts early in the bootstrap stage. I'd like to ask if anyone could give me a hint for why this is happening.
So far I managed to set up the secure world environment so that we can invoke secure services through the SMC instruction from the normal world. This configuration step is done by u-boot, after which it enters normal world and jumps to Linux. To make sure that Linux can handle interrupts freely, in this setup phase, I assign the SCR register 0x3 (EA, FIQ, and IRQ bit are clear, and AW and FW are set).
Assuming that this configuration is correct, one possible explanation for the absence of timer interrupts is that the Harmony board may impose some restrictions to the timer re-configuration in the normal world. Does anyone have an idea if there are such restrictions? If not, is there any other explanation for this? Is there some configuration step that I'm missing?
Thank you very much in advance!
--Nuno Santos
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 7 lines · Nuno Santos
Hi
I'm currently playing with the TrustZone technology on the Tegra2 Harmony board, and my goal is to boot Linux not in the secure world (as it is in mainstream Linux), but in the normal world. However, in doing this, timer interrupts are not being triggered and the system halts early in the bootstrap stage. ...
This isn't a topic I really know anything about. I'd assume the answer to your question is ARM-generic and not Tegra-specific; you may have better luck asking on the main ARM Linux mailing list.
I assume you're using (or at least can reproduce the issue with) mainline Linux, and not a downstream NVIDIA kernel? If you're using an NVIDIA kernel, I'd suggest asking your contacts at NVIDIA about it.
Quoted 3 lines
Assuming that this configuration is correct, one possible explanation for the absence of timer interrupts is that the Harmony board may impose some restrictions to the timer re-configuration in the normal world. ...
I don't think the board can impose any restrictions; the boot ROM in the Tegra SoC is presumably identical across all instances of Tegra20, and the code that runs after that is whatever bootloader you built and flashed onto the board. Unless of course there are strapping/fuse options that affect this, but if any do exist, and since Harmony is a developer board, I'd imagine their settings would be left as wide open as possible.
Sorry I'm not very helpful!
Nuno Santos <[email protected]>
Quoted 6 lines · writes:
I'm currently playing with the TrustZone technology on the Tegra2 Harmony board, and my goal is to boot Linux not in the secure world (as it is in mainstream Linux), but in the normal world. However, in doing this, timer interrupts are not being triggered and the system halts early in the bootstrap stage. I'd like to ask if anyone could give me a hint for why this is happening.
GIC configuration? I'm not at all familiar with TZ, but you might need to configure the interrupts as non-secure:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0048a/CHDCEAIF.html
So you have a secure monitor you can create SMCs for? Is that code available?
--
Antti P Miettinen
http://www.iki.fi/~ananaza/