summaryrefslogtreecommitdiffstats
path: root/rsnix/src/ahci.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rsnix/src/ahci.rs')
-rw-r--r--rsnix/src/ahci.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/rsnix/src/ahci.rs b/rsnix/src/ahci.rs
index a77b341..543bb21 100644
--- a/rsnix/src/ahci.rs
+++ b/rsnix/src/ahci.rs
@@ -230,9 +230,12 @@ pub fn init() -> bool {
230 let Some((dev, func)) = find_ahci() else { 230 let Some((dev, func)) = find_ahci() else {
231 return false; 231 return false;
232 }; 232 };
233 // Enable memory space + bus mastering so MMIO and DMA work. 233 // Enable memory space + bus mastering so MMIO and DMA work, plus INTx
234 // disable (bit 10): the driver polls command completion (no ISR, no
235 // MSI), so the HBA must not assert INTx — a stray SATA interrupt would
236 // re-fire forever on real hardware.
234 let cmd_reg = pci::config_read(0, dev, func, 0x04); 237 let cmd_reg = pci::config_read(0, dev, func, 0x04);
235 pci::config_write(0, dev, func, 0x04, cmd_reg | 0x7); 238 pci::config_write(0, dev, func, 0x04, cmd_reg | 0x7 | 0x400);
236 239
237 let Some(abar) = pci::bar64(0, dev, func, 5) else { 240 let Some(abar) = pci::bar64(0, dev, func, 5) else {
238 return false; 241 return false;