Nathan Lynch <nath...@linux.ibm.com> writes: > Memory locations passed as arguments from the OS to RTAS usually need > to be addressable in 32-bit mode and must reside in the Real Mode > Area. On PAPR guests, the RMA starts at logical address 0 and is the > first logical memory block reported in the LPAR’s device tree. > > On powerpc targets with RTAS, Linux makes available to user space a > region of memory suitable for arguments to be passed to RTAS via > sys_rtas(). This region (rtas_rmo_buf) is allocated via the memblock > API during boot in order to ensure that it satisfies the requirements > described above. > > With radix MMU, the upper limit supplied to the memblock allocation > can exceed the bounds of the first logical memory block, since > ppc64_rma_size is ULONG_MAX and RTAS_INSTANTIATE_MAX is 1GB.
Why does the size of the first memory block matter for radix? The 1GB limit is sufficient to make it accessible by 32-bit code. > (512MB is a common size of the first memory block according to a small sample > of > LPARs I have checked.) That's the minimum we request, see prom_init.c: /* option vector 2: Open Firmware options supported */ .vec2 = { .byte1 = OV2_REAL_MODE, .reserved = 0, .real_base = cpu_to_be32(0xffffffff), .real_size = cpu_to_be32(0xffffffff), .virt_base = cpu_to_be32(0xffffffff), .virt_size = cpu_to_be32(0xffffffff), .load_base = cpu_to_be32(0xffffffff), .min_rma = cpu_to_be32(512), /* 512MB min RMA */ Since v4.12 in 2017. cheers