Bad deduction. What's happening is that the write to the BAR is causingThe BAR claims to be a 64-bit BAR.
it to overlap the decode for mmconfig space. So the mmconfig write to
set the BAR back never gets through.
I have a different idea to fix this problem. Instead of writing
0xffffffff, we could look for an unused bit of space in the E820 map and
write, say, 0xdfffffff to the low 32-bits of a BAR. Then it wouldn't
overlap, and we could find its size using MMCONFIG.
Does anyone know how Windows handles these machines? Obviously, if it'sAs far as I know, Windows has a blacklist that limits systems with these
using MMCONFIG, it'd have the same problems. Does it just use type 1
for initial sizing? Or does it use type 1 for all accesses below 256
bytes?