Skip to content

Commit 52cf422

Browse files
committed
feat(aarch64): Don't ignore 32-bit memory bars
Signed-off-by: Jens Reidel <[email protected]>
1 parent 250f22e commit 52cf422

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/arch/aarch64/kernel/pci.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ pub fn init() {
240240
flags,
241241
);
242242

243-
let (mut io_start, mem32_start, mut mem64_start) = detect_pci_regions(pci_node);
243+
let (mut io_start, mut mem32_start, mut mem64_start) = detect_pci_regions(pci_node);
244244

245245
debug!("IO address space starts at{io_start:#X}");
246246
debug!("Memory32 address space starts at {mem32_start:#X}");
@@ -267,7 +267,8 @@ pub fn init() {
267267

268268
// Initializes BARs
269269
let mut cmd = CommandRegister::empty();
270-
for i in 0..MAX_BARS {
270+
let mut range_iter = 0..MAX_BARS;
271+
while let Some(i) = range_iter.next() {
271272
if let Some(bar) = dev.get_bar(i.try_into().unwrap()) {
272273
match bar {
273274
Bar::Io { .. } => {
@@ -281,11 +282,22 @@ pub fn init() {
281282
cmd |= CommandRegister::IO_ENABLE
282283
| CommandRegister::BUS_MASTER_ENABLE;
283284
}
284-
Bar::Memory32 { .. } => {
285-
// Currently, we ignore 32 bit memory bars
286-
// dev.set_bar(i.try_into().unwrap(), Bar::Memory32 { address: mem32_start.try_into().unwrap(), size, prefetchable });
287-
// mem32_start += u64::from(size);
288-
// cmd |= CommandRegister::MEMORY_ENABLE | CommandRegister::BUS_MASTER_ENABLE;
285+
Bar::Memory32 {
286+
address: _,
287+
size,
288+
prefetchable,
289+
} => {
290+
dev.set_bar(
291+
i.try_into().unwrap(),
292+
Bar::Memory32 {
293+
address: mem32_start.try_into().unwrap(),
294+
size,
295+
prefetchable,
296+
},
297+
);
298+
mem32_start += u64::from(size);
299+
cmd |= CommandRegister::MEMORY_ENABLE
300+
| CommandRegister::BUS_MASTER_ENABLE;
289301
}
290302
Bar::Memory64 {
291303
address: _,
@@ -303,6 +315,7 @@ pub fn init() {
303315
mem64_start += size;
304316
cmd |= CommandRegister::MEMORY_ENABLE
305317
| CommandRegister::BUS_MASTER_ENABLE;
318+
range_iter.next(); // Skip 32-bit bar that is part of the 64-bit bar
306319
}
307320
}
308321
}

0 commit comments

Comments
 (0)