From 49bf493852b9de782e006e3c21ec4ace114b196f Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Mon, 3 Sep 2012 14:22:40 +0200 Subject: [PATCH] ahci: fix ahci for win7 --- Makefile | 2 +- debian/changelog | 6 +++ .../patches/ahci-properly-reset-pxcmd.patch | 45 +++++++++++++++++++ debian/patches/series | 1 + 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 debian/patches/ahci-properly-reset-pxcmd.patch diff --git a/Makefile b/Makefile index 52408f7..2c43c22 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ RELEASE=2.1 # also update debian/changelog KVMVER=1.2 -KVMPKGREL=2 +KVMPKGREL=3 KVMPACKAGE=pve-qemu-kvm KVMDIR=qemu-kvm diff --git a/debian/changelog b/debian/changelog index e8d7123..99a09bd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +pve-qemu-kvm (1.2-3) unstable; urgency=low + + * fix ahci for win7 + + -- Proxmox Support Team Mon, 03 Sep 2012 14:22:17 +0200 + pve-qemu-kvm (1.2-2) unstable; urgency=low * add ahci migration support diff --git a/debian/patches/ahci-properly-reset-pxcmd.patch b/debian/patches/ahci-properly-reset-pxcmd.patch new file mode 100644 index 0000000..238ac0f --- /dev/null +++ b/debian/patches/ahci-properly-reset-pxcmd.patch @@ -0,0 +1,45 @@ +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. + +I believe 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 +--- + hw/ide/ahci.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c +index 9fe89a5..06c236f 100644 +--- a/hw/ide/ahci.c ++++ b/hw/ide/ahci.c +@@ -1199,6 +1199,7 @@ void ahci_reset(AHCIState *s) + pr->irq_stat = 0; + pr->irq_mask = 0; + pr->scr_ctl = 0; ++ pr->cmd = 0; + ahci_reset_port(s, i); + } + } +-- +1.7.1 diff --git a/debian/patches/series b/debian/patches/series index cbed009..de2f448 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -7,3 +7,4 @@ pve-auth.patch update-cpus-x86_64.conf-to-rhel6.2-version.patch vencrypt-auth-plain.patch ahci-add_migration-support.patch +ahci-properly-reset-pxcmd.patch -- 2.39.5