claim works differently depending on the selected device. it serves to allocate physical memory on /memory, virtual addresses on /cpus/@0.
i quote IEEE 1275-1994 on its prototype and description:
( [ addr ... ] size ... align -- base ... )
Allocates size ... (whose format depends on the package) bytes of the addressable resource managed by the package containing this method.
If align is zero, the allocated range begins at the address addr ... (whose format depends on the package). Otherwise, addr ... is not present, and an aligned address is automatically chosen.
The alignment boundary is the smallest power of two greater than or equal to the value of align; an align value of 1 signifies one-byte alignment. base ... (whose format is the same as addr ...) is the address that was allocated (equal to addr ... if align was 0).
It does make sense to specify your own addr while allocating virtual memory. otherwise, it will pick one for you, which is going to be returned as base. it's then possible to map physical addresses to virtual ones using map (provided in /cpus/@0, on which i also quote the standard):
map ( phys.lo ... phys.hi virt len ... mode -- )
Creates an address translation associating virtual addresses beginning at virt and continuing for len ... (whose format depends on the package) bytes with consecutive physical addresses beginning at phys.lo ... phys.hi.
mode is an MMU-dependent parameter (typically, but not necessarily, one cell) denoting additional attributes of the translation, for example access permissions, cacheability, mapping granularity, etc. If mode is –1, an implementation-dependent default mode is used.
If there are already existing address translations within the region delimited by virt and len ..., the result is undefined
mode, in this particular implementation, refers to a bitarray of the following form: WIMG0PP.