On 03/04/13 08:02, Artyom Tarasenko wrote:
Per IEEE 1275, 6.3.2.4, the claim method is supposed to entirely ignore the virtual address if you provide an alignment. With a non-zero alignment, it's supposed to allocate from a pool of its own address space.
Thanks, this is a good starting point. Can you give some comments to an OpenSolaris comment below? http://fxr.watson.org/fxr/source/sun/sys/promif.h?v=OPENSOLARIS#L79
/*
- resource allocation group: OBP and IEEE 1275-1994.
- prom_alloc is platform dependent on SPARC.
*/
What is exactly platform dependent?
While the above is true for the IEEE 1275 claim word, there is definitely a different behaviour for the old romvec memalloc() method. Bear in mind that the parameters look like this in gdb:
Breakpoint 1, obp_memalloc (va=0xf0040000 <Address 0xf0040000 out of bounds>, size=262144, align=262144) at /home/build/src/openbios/openbios-git/openbios-devel/arch/sparc32/lib.c:273
However if we pass the align parameter to the virtual allocator too, as per my suggestion, the boot loader then blows up with the following message:
Alloc of 0x40000 bytes at 0xf0040000 refused.
So the old romvec routines clearly expect the specified virtual address to be allocated, even if an align parameter is passed. Currently we assume that this is just a physical alignment, so any clarification on this behaviour would be quite useful.
Of course we'll know a lot more if you can post the debug output requested in my previous email :)
ATB,
Mark.