pci/ecam: Fix reading config registers using ACPI method.
Also adjust end-address computation: we read up to 4 bytes past the offset. Change-Id: I76343aba38cddb614394bd0dca1b36094b8dd85e Reviewed-on: https://review.haiku-os.org/c/haiku/+/6469 Reviewed-by: waddlesplash <[email protected]> Reviewed-by: X512 <[email protected]> Tested-by: Commit checker robot <[email protected]> Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
769b4ee4aa
commit
19ae638fb6
@@ -166,10 +166,7 @@ ECAMPCIController::ConfigAddress(uint8 bus, uint8 device, uint8 function, uint16
|
|||||||
.device = device,
|
.device = device,
|
||||||
.bus = bus
|
.bus = bus
|
||||||
};
|
};
|
||||||
PciAddressEcam addressEnd = address;
|
if ((address.val + 4) > fRegsLen)
|
||||||
addressEnd.offset = /*~(uint32)0*/ 4095;
|
|
||||||
|
|
||||||
if (addressEnd.val >= fRegsLen)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return (addr_t)fRegs + address.val;
|
return (addr_t)fRegs + address.val;
|
||||||
|
|||||||
@@ -57,8 +57,9 @@ ECAMPCIControllerACPI::ReadResourceInfo()
|
|||||||
uint8 startBusNumber = alloc->start_bus_number;
|
uint8 startBusNumber = alloc->start_bus_number;
|
||||||
uint8 endBusNumber = alloc->end_bus_number;
|
uint8 endBusNumber = alloc->end_bus_number;
|
||||||
|
|
||||||
|
fRegsLen = (endBusNumber - startBusNumber + 1) << 20;
|
||||||
fRegsArea.SetTo(map_physical_memory("PCI Config MMIO",
|
fRegsArea.SetTo(map_physical_memory("PCI Config MMIO",
|
||||||
alloc->address, (endBusNumber - startBusNumber + 1) << 20, B_ANY_KERNEL_ADDRESS,
|
alloc->address, fRegsLen, B_ANY_KERNEL_ADDRESS,
|
||||||
B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, (void **)&fRegs));
|
B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, (void **)&fRegs));
|
||||||
CHECK_RET(fRegsArea.Get());
|
CHECK_RET(fRegsArea.Get());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user