Hi Robert,

The FSR value of 0x1c06 represents an asynchronous abort. In this case, the 
address reported cannot be trusted! The abort occurs when a physical address is 
accessed that has no valid backing RAM or device register. We have had lots of 
fun with this feature on the SabreLite. Common causes are:
* Accessing device registers that do exist (some devices have voids in the 
middle of their address map).
* If you (for some reason) map a device with the cacheable attribute, all 
addresses which would be used to fill the cache line must be valid (again, 
watch out for voids).
* Some UART registers are unavailable when the appropriate enable bits are not 
set.

My advice to you is to check that you are using the correct physical address 
for your device mappings (Including the kernel IRQ controller and timer).

Also, the first printf at userspace may trigger the initialisation of the 
default UART (which will be incorrect in your case).
https://github.com/seL4/libplatsupport/blob/master/plat_include/imx6/platsupport/plat/serial.h#L40

There may also be slight differences in the availability of device registers 
between the 2 SoCs.

 - Alex


________________________________________
From: Devel [devel-bounces@sel4.systems] on behalf of Robert Kaiser 
[robert.kai...@hs-rm.de]
Sent: Sunday, 15 March 2015 19:03
To: devel@sel4.systems
Subject: [seL4] Wandboard Port

Hello,

in an attempt to familiarize myself with the seL4 code, I am trying to
"port" it to the Wandboard (see www.wandboard.org). This should be an
easy task for a beginner (thought I) since the board is very similar to
the SabeLite, and seL4 is already running well on that board. I have
access to a SabreLite and a Wandboard Quad, both (according to U-boot)
have the same revision of the iMX6 SoC installed.

Differences between the Sabre and the Wand I have noticed so far are:

- 2GB of RAM from (0x10000000 to 0x90000000) on the Wand (Sabrelite has 1GB)
- Wand uses UART1 for debug output, Sabrelite: UART2

I compiled an sel4test project where I adapted the UART port in
kernel/include/plat/imx6/plat/machine/devices.h and
elfloader/src/arch-arm/plat-imx6/platform.h and the RAM size in kernel
src/plat/imx6/machine/hardware.c. When I boot this system, I get:

Jumping to kernel-image entry point...
Bootstrapping kernel
Caught cap fault in send phase at address 0x0
while trying to handle:
vm fault on data at address 0x9f11c2e0 with status 0x1c06
in thread 0xffdfad00 at address 0x13294

(Needless to say, "all is well in the universe" on the SabreLite... )
What is not shown here are a ton of other debug messages which I have
added to convince myself that kernel initialization completes as
expected. The crash seems to happen upon entry into user code. The
address 0x13294 is the virtual address of the entry point:

$ nm build/arm/imx6/sel4test-driver/sel4test-driver.bin | grep 13294
00013294 T _sel4_start

I suspect that this fault happens on opcode fetch, because the user code
is not properly mapped when invoked. Does "status 0x1c06" confirm this?

If so, *should* the code be mapped at this point or are these mappings
expected to be installed "on demand", i.e. through page fault handling?

Thanks for any help...

Robert


--
Robert Kaiser
Computer Engineering
RheinMain University of Applied Sciences



_______________________________________________
Devel mailing list
Devel@sel4.systems
https://sel4.systems/lists/listinfo/devel

________________________________

The information in this e-mail may be confidential and subject to legal 
professional privilege and/or copyright. National ICT Australia Limited accepts 
no liability for any damage caused by this email or its attachments.

_______________________________________________
Devel mailing list
Devel@sel4.systems
https://sel4.systems/lists/listinfo/devel

Reply via email to