diff options
Diffstat (limited to '')
| -rw-r--r-- | rsnix/src/ahci.rs | 7 |
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; |
