The following series implements alternative approach to solve issue where qemu provides i/o and pci memory spaces within physical RAM address space, which makes low memory addresses unusable.
Instead of changing qemu to move i/o and pci spaces out of RAM space we can remap 64M of i/o and pci spaces to above 32bit accessible by client program. Then we map physical RAM at 64M offset to start of virtual memory.
A few extra changes are required. At very least we need to find where framebuffer virtual address is placed by startup code, helper change is provided.
NOTE: this approach may hide up to 128M from client allocations, therefore default qemu memory size is not sufficient. Please use at least '-m 256' on qemu command line to test with these changes.
In my test these series are as efficient as qemu change to remap i/o and pci spaces in allowing milax032sparc.iso to not step over cmd646 registers. Currently milax loader gets a bit further and fails with
Can't open /ramdisk-root byte-load: exception caught!
v0 -> v1: split ofmem_find_virtual changes into separate patches
---
Igor V. Kovalenko (5): sparc64: remap first 64M physical address space sparc64: claim memory mapped by startup code ofmem: helper to find first virtual address map entry ofmem: use helper to access command line parameters from qemu ofmem: use helper to find framebuffer virtual address on sparc64
arch/sparc64/entry.S | 68 +++++++++++++++++++----------------------- arch/sparc64/ofmem_sparc64.c | 2 + arch/sparc64/openbios.c | 19 ++++++++---- include/ofmem.h | 1 + modules/ofmem_common.c | 25 +++++++++++++++ modules/video.c | 9 +++++- 6 files changed, 80 insertions(+), 44 deletions(-)