Re: Fiasco.oc & trustzone

Nikolay Golikov <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <CALQLEJyACH_Vx1yAnfS1CEMzeWFXWx6+HeTcGPP1v7ZFU+A8EQ@mail.gmail.com>
Thank you for the detailed explanation.
Now I have another problem: I map aipstz-1 registers with
l4io_request_iomem(base, AISPTZ_SIZE, L4IO_MEM_NONCACHED, &_vbase);
(base = 0x53F00000, AISPTZ_SIZE = 0x4000)
It return 0.

But when I try to write to mapped registers my program stopping:
*((volatile l4_umword_t *)(_vbase + reg)) = val
(reg = 0x0, val = 0x77777777)

This is my io config:

hw-root
{
	CSU => new Device()
	{
		.hid = "Central Security Unit";
		new-res Mmio(0x63f9c000 .. 0x63f9ffff);
	}

	AIPSTZ1 => new Device()
	{
		.hid = "Aipstz-1";
		new-res Mmio(0x53F00000 .. 0x53f0ffff);
	}
}

mmio => new System_bus()
{
	CSU => wrap(hw-root.CSU);
	AIPSTZ1 => wrap(hw-root.AIPSTZ1);
}


2012/9/15 Adam Lackorzynski <[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/
>
> _______________________________________________
> l4-hackers mailing list
> [email protected]
> http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
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.