Page 1 of 1

Handling 64bit MMIO BAR in 32bit OS

Posted: Sun Nov 27, 2022 4:01 am
by prajwal
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

Re: Handling 64bit MMIO BAR in 32bit OS

Posted: Sun Nov 27, 2022 6:01 am
by 8infy
prajwal wrote: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
Simple, don't support non-PAE 32 bit. Problem solved. This is only < 2000 hardware anyways.

Re: Handling 64bit MMIO BAR in 32bit OS

Posted: Sun Nov 27, 2022 6:37 am
by iansjack
Exactly. A computer that is 32-bit only won't have a 64-bit UEFI.

Re: Handling 64bit MMIO BAR in 32bit OS

Posted: Sun Nov 27, 2022 6:40 am
by prajwal
Is there way to configure OVMF to assign only 32bit BAR to PCI devices ? Wouldn't it be correct for OVMF to do that by default to make it compatible for both 32bit and 64bit OS to run - particularly when it is built with config to support both IA32 and X64 ARCH.

Re: Handling 64bit MMIO BAR in 32bit OS

Posted: Sun Nov 27, 2022 8:41 am
by iansjack
If you are using the 64 bit OVMF you must have a 64-bit capable processor. So, even if your OS is 32-bit, you can use PAE to access 64-bit addresses.

Re: Handling 64bit MMIO BAR in 32bit OS

Posted: Mon Nov 28, 2022 5:12 am
by prajwal
Got it! Thanks for clarifying.