Handling 64bit MMIO BAR in 32bit OS
Posted: Sun Nov 27, 2022 4:01 am
Hi,
For my OS dev, I use QEMU and TianoCore OVMF (both 32bit & 64bit - downloaded from sourceforge. On QEMU, my OS works fine with both 32bit OVMF and 64bit OVMF while my OS itself is a 32bit protected mode OS (developed for x86 platform)
I recently decided to locally build and use the latest stable tag of OVMF from: https://github.com/tianocore/edk2.git
I was able to build 3 different variants - OvmfIa32, Ovmf3264 and OvmfX64
My OS works fine when using OvmfIa32, however when using Ovmf3264, the XHCI controller initialization in my OS fails because the BAR address is a 64 bit address while I can only map 32bit address
Is it correct for the firmware to assign 64bit BAR to a PCI device while loading a 32bit OS ? If so, how to handle this scenario ? (b/w the problem doesn't happen on my laptop that runs on i7 processor)
Thanks
Prajwal
For my OS dev, I use QEMU and TianoCore OVMF (both 32bit & 64bit - downloaded from sourceforge. On QEMU, my OS works fine with both 32bit OVMF and 64bit OVMF while my OS itself is a 32bit protected mode OS (developed for x86 platform)
I recently decided to locally build and use the latest stable tag of OVMF from: https://github.com/tianocore/edk2.git
I was able to build 3 different variants - OvmfIa32, Ovmf3264 and OvmfX64
My OS works fine when using OvmfIa32, however when using Ovmf3264, the XHCI controller initialization in my OS fails because the BAR address is a 64 bit address while I can only map 32bit address
Is it correct for the firmware to assign 64bit BAR to a PCI device while loading a 32bit OS ? If so, how to handle this scenario ? (b/w the problem doesn't happen on my laptop that runs on i7 processor)
Thanks
Prajwal