[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 22/25] ahci: properly reset PxCMD on HBA reset
From: |
Jason Baron |
Subject: |
[Qemu-devel] [PATCH 22/25] ahci: properly reset PxCMD on HBA reset |
Date: |
Thu, 13 Sep 2012 16:12:49 -0400 |
While testing q35, I found that windows 7 (specifically, windows 7 ultimate
with sp1 x64), wouldn't install because it can't find the cdrom or disk drive.
The failure message is: 'A required cd/dvd device driver is missing. If you
have a driver floppy disk, CD, DVD, or USB flash drive, please insert it now.'
This can also be reproduced on piix by adding an ahci controller, and
observing that windows 7 does not see any devices behind it.
The problem is that when windows issues a HBA reset, qemu does not reset the
individual ports' PxCMD register. Windows 7 then reads back the PxCMD register
and presumably assumes that the ahci controller has already been initialized.
Windows then never sets up the PxIE register to enable interrupts, and thus it
never gets irqs back when it sends ata device inquiry commands.
This change brings qemu into ahci 1.3 specification compliance.
Section 10.4.3 HBA Reset:
"
When GHC.HR is set to ‘1’, GHC.AE, GHC.IE, the IS register, and all port
register fields (except PxFB/PxFBU/PxCLB/PxCLBU) that are not HwInit in the
HBA’s register memory space are reset.
"
I've also re-tested Fedora 16 and 17 to verify that they continue to work with
this change.
Signed-off-by: Jason Baron <address@hidden>
changes in v2:
-From Kevin Wolf:
-continue to set PORT_CMD_SPIN_UP, PORT_CMD_POWER_ON on reset
---
hw/ide/ahci.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 3d41771..97a0fa9 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1175,7 +1175,6 @@ void ahci_init(AHCIState *s, DeviceState *qdev,
DMAContext *dma, int ports)
ad->port_no = i;
ad->port.dma = &ad->dma;
ad->port.dma->ops = &ahci_dma_ops;
- ad->port_regs.cmd = PORT_CMD_SPIN_UP | PORT_CMD_POWER_ON;
}
}
@@ -1199,6 +1198,7 @@ void ahci_reset(AHCIState *s)
pr->irq_stat = 0;
pr->irq_mask = 0;
pr->scr_ctl = 0;
+ pr->cmd = PORT_CMD_SPIN_UP | PORT_CMD_POWER_ON;
ahci_reset_port(s, i);
}
}
--
1.7.1
- [Qemu-devel] [PATCH 04/25] ahci: add ide device initialization helper, (continued)
- [Qemu-devel] [PATCH 04/25] ahci: add ide device initialization helper, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 15/25] q35: smbus: Remove PCI_STATUS_SIG_SYSTEM_ERROR and PCI_STATUS_DETECTED_PARITY from w1cmask, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 09/25] pcie: pass pcie window size to pcie_host_mmcfg_update(), Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 17/25] q35: Add kvmclock support, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 14/25] q35: Fix non-PCI IRQ processing in ich9_lpc_update_apic, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 20/25] pcie: drop version_id field for live migration, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 25/25] q35: automatically load the q35 dsdt table, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 22/25] ahci: properly reset PxCMD on HBA reset,
Jason Baron <=
- [Qemu-devel] [PATCH 01/25] pci: pci capability must be in PCI space, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 05/25] pc, pc_piix: split out pc nic initialization, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 19/25] ahci: add migration support, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 21/25] pcie_aer: clear cmask for Advanced Error Interrupt Message Number, Jason Baron, 2012/09/13
- [Qemu-devel] [PATCH 11/25] q35: Introduce q35 pc based chipset emulator, Jason Baron, 2012/09/13