@Ni, Ray

I think EDK2 needs to provide a way for root port to operate without IO space 
assigned in a platform-independent way. I can think of the following cases when 
root port didn't get IO space:

1. We have run out of IO space but it's fine since the device under the root 
port doesn't use IO or has only non-critical functionalities under IO
2. We have run out of IO space and it's really not fine since device needs IO
3. We are running on a CPU which doesn't support IO

For 1. the question is whether the device driver in EDK2 understands that IO 
bar for that device is optional and will bother to check if it has been 
assigned and either fail gracefully or continue operation in limited capacity. 
For 2. the question is whether the driver will fail gracefully. 3 is for 
completeness at this point I think since the only other architecture that uses 
EDK2 is ARM which has to deal with it in some way right now which I think maps 
IO region into MMIO so in a way it supports IO.

I've checked the device driver behavior in EDK2 for devices which use IO bar 
here is the rundown:
1. IDE - Doesn't check if IO has been assigned, not giving IO results in 
undefined behavior
2. SerialIo -> Doesn't check, will assert the system when IO is not assigned 
(although the logic there is really strange as it can use 3 different access 
methods)
3. UHCI -> Checks but too late, will most likely result in undefined behavior

Even with those bad device drivers I would agree that taking this change 
presents low risk given that those devices are pretty old and should be mostly 
unused on new systems(SerialIo being an exception but that one is usually an 
RCIEP). That said I think we are missing a larger issue here - why are we 
running out of IO when we have 16 root ports? Surely we don't have a device 
with IO requirement behind each of those root ports so is the BIOS blindly 
assigning IO to root ports which have no requirement? I see on my system that 
when we don't have IO requirement behind the root port BIOS sets IOBASE to 0xF0 
and IOLIMIT to 0x0 which means no IO decode will be performed.

Thanks,
Mateusz


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#89963): https://edk2.groups.io/g/devel/message/89963
Mute This Topic: https://groups.io/mt/90623478/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to