Re: Fiasco.oc & trustzone

Adam Lackorzynski <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <[email protected]>
On Fri Sep 14, 2012 at 12:37:41 +0400, Nikolay Golikov wrote:
> 2012/9/14 Adam Lackorzynski <[email protected]>:
> >
> > On Thu Sep 13, 2012 at 13:09:52 +0400, Nikolay Golikov wrote:
> >> Yes, I found it. Is that tested on real hw? If I understand correctly,
> >> it shouldn't work. Because it use l4sigma0_map_iomem for mapping
> >> memory region to vmm's address space.
> >
> > It assumes a different approach for getting memory to the ns side.
> > Initially bootstrap is configured to only uses a part of the memory so
> > that the other part can be used for the ns side. From the point of view
> > of the vmm this is 'iomem' because it's not ram. However, getting ram
> > for the vmm shall also work via a dataspace.
> >
> 
> Now I get strange error:
> In bootstrap I define region for ns ram as Region::Arch.
> 
> SIGMA0: Dump of all resource maps
> RAM:------------------------
> [0:70000000;70000fff]
> [0:70061000;7008ffff]
> [0:70097000;70097fff]
> [0:7009f000;7013ffff]
> [4:70140000;70172fff]
> [0:70173000;70177fff]
> [4:70178000;7018efff]
> [0:7018f000;71010fff]
> [4:71011000;71011fff]
> [0:71012000;710fffff]
> [4:71100000;7127dfff]
> [0:7127e000;7effffff]
> IOMEM:----------------------
> [0:0;6fffffff]
> [0:80000000;ffffffff]
> 
> But on
> 
>   int err = l4sigma0_map_iomem(_sigma0.cap(), Ram_base, Ram_base, size, 1);
> (Ram_base = 0x80000000, size = 0x4000000)
> 
> I have an error:
> 
> TZ-VMM  | L4Re[rm]: unhandled read page fault @8858a820 pc=8858a820
> TZ-VMM  | L4Re: unhandled exception: pc=0x8858a820
> 
> Before it mapping for aisptz works normally:
> 
> l4sigma0_map_iomem(_sigma0.cap(), _base, _base, AISPTZ_SIZE, 1)
> (_base = 0x53F00000)

In your l4sigma0_map_iomem calls you are doing identity mappings, i.e.
you must make sure that the address space in your task is free from
0x80000000 - 0xbffffff and 0x53F00000 - 0x53F00000 + AISPTZ_SIZE - 1
The latter is likely to be free by luck, however, from 2gb to 3gb
there's for example the stack of your program, which you destroy by
doing the sigma0-map call. Consequently the program misbehaves, here
with a page-fault.
For getting access to device registers io should be used, for example via
l4io_request_iomem(). Mapping device registers cached is probably also
not wanted. In your case doing some special with l4sigma0_map_iomem, you
must reserve free space in your virtual address space via
l4re_rm_reserve_area / L4Re::Rm::reserve_area and map the memory to the
location returned by reserve_area.



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.