From 6d2550ea5002feac408ed252f45066aaa0af8b19 Mon Sep 17 00:00:00 2001 From: aliguori Date: Wed, 11 Feb 2009 15:11:43 +0000 Subject: [PATCH] Add BIOS patches necessary for hotplug (Marcelo Tosatti) See each patch for appropriate Signed-off-by's. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6590 c046a42c-6fe2-441c-8c8c-71466251a162 --- ...ios-use-preprocessor-for-pci-link-routing.patch | 73 ++++++++++++ ...dd-26-pci-slots,-bringing-the-total-to-32.patch | 49 ++++++++ .../0008_qemu-bios-provide-gpe-_l0x-methods.patch | 92 +++++++++++++++ .../0009_qemu-bios-pci-hotplug-support.patch | 128 +++++++++++++++++++++ ...-acpi-sci-interrupt-as-connected-to-irq-9.patch | 26 +++++ pc-bios/bios-pq/series | 5 + pc-bios/bios.bin | Bin 131072 -> 131072 bytes 7 files changed, 373 insertions(+) create mode 100644 pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch create mode 100644 pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch create mode 100644 pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch create mode 100644 pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch create mode 100644 pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch diff --git a/pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch b/pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch new file mode 100644 index 0000000000..9a2eef4c60 --- /dev/null +++ b/pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch @@ -0,0 +1,73 @@ +qemu: bios: use preprocessor for pci link routing (Avi Kivity) + +Signed-off-by: Avi Kivity +Signed-off-by: Anthony Liguori + +Index: bochs/bios/acpi-dsdt.dsl +=================================================================== +--- bochs.orig/bios/acpi-dsdt.dsl ++++ bochs/bios/acpi-dsdt.dsl +@@ -47,42 +47,22 @@ DefinitionBlock ( + section 6.2.8.1 */ + /* Note: we provide the same info as the PCI routing + table of the Bochs BIOS */ +- +- // PCI Slot 0 +- Package() {0x0000ffff, 0, LNKD, 0}, +- Package() {0x0000ffff, 1, LNKA, 0}, +- Package() {0x0000ffff, 2, LNKB, 0}, +- Package() {0x0000ffff, 3, LNKC, 0}, +- +- // PCI Slot 1 +- Package() {0x0001ffff, 0, LNKA, 0}, +- Package() {0x0001ffff, 1, LNKB, 0}, +- Package() {0x0001ffff, 2, LNKC, 0}, +- Package() {0x0001ffff, 3, LNKD, 0}, +- +- // PCI Slot 2 +- Package() {0x0002ffff, 0, LNKB, 0}, +- Package() {0x0002ffff, 1, LNKC, 0}, +- Package() {0x0002ffff, 2, LNKD, 0}, +- Package() {0x0002ffff, 3, LNKA, 0}, +- +- // PCI Slot 3 +- Package() {0x0003ffff, 0, LNKC, 0}, +- Package() {0x0003ffff, 1, LNKD, 0}, +- Package() {0x0003ffff, 2, LNKA, 0}, +- Package() {0x0003ffff, 3, LNKB, 0}, +- +- // PCI Slot 4 +- Package() {0x0004ffff, 0, LNKD, 0}, +- Package() {0x0004ffff, 1, LNKA, 0}, +- Package() {0x0004ffff, 2, LNKB, 0}, +- Package() {0x0004ffff, 3, LNKC, 0}, +- +- // PCI Slot 5 +- Package() {0x0005ffff, 0, LNKA, 0}, +- Package() {0x0005ffff, 1, LNKB, 0}, +- Package() {0x0005ffff, 2, LNKC, 0}, +- Package() {0x0005ffff, 3, LNKD, 0}, ++#define prt_slot(nr, lnk0, lnk1, lnk2, lnk3) \ ++ Package() { nr##ffff, 0, lnk0, 0 }, \ ++ Package() { nr##ffff, 1, lnk1, 0 }, \ ++ Package() { nr##ffff, 2, lnk2, 0 }, \ ++ Package() { nr##ffff, 3, lnk3, 0 } ++ ++#define prt_slot0(nr) prt_slot(nr, LNKD, LNKA, LNKB, LNKC) ++#define prt_slot1(nr) prt_slot(nr, LNKA, LNKB, LNKC, LNKD) ++#define prt_slot2(nr) prt_slot(nr, LNKB, LNKC, LNKD, LNKA) ++#define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) ++ prt_slot0(0x0000), ++ prt_slot1(0x0001), ++ prt_slot2(0x0002), ++ prt_slot3(0x0003), ++ prt_slot0(0x0004), ++ prt_slot1(0x0005), + }) + + Name (_CRS, ResourceTemplate () + +-- + + + diff --git a/pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch b/pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch new file mode 100644 index 0000000000..7cdc3d8b28 --- /dev/null +++ b/pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch @@ -0,0 +1,49 @@ +bios: add 26 pci slots, bringing the total to 32 (Avi Kivity) + +lack of pci slots causes Windows to complain when installing too many devices. + +Signed-off-by: Avi Kivity +Signed-off-by: Anthony Liguori + +Index: bochs/bios/acpi-dsdt.dsl +=================================================================== +--- bochs.orig/bios/acpi-dsdt.dsl ++++ bochs/bios/acpi-dsdt.dsl +@@ -63,6 +63,32 @@ DefinitionBlock ( + prt_slot3(0x0003), + prt_slot0(0x0004), + prt_slot1(0x0005), ++ prt_slot2(0x0006), ++ prt_slot3(0x0007), ++ prt_slot0(0x0008), ++ prt_slot1(0x0009), ++ prt_slot2(0x000a), ++ prt_slot3(0x000b), ++ prt_slot0(0x000c), ++ prt_slot1(0x000d), ++ prt_slot2(0x000e), ++ prt_slot3(0x000f), ++ prt_slot0(0x0010), ++ prt_slot1(0x0011), ++ prt_slot2(0x0012), ++ prt_slot3(0x0013), ++ prt_slot0(0x0014), ++ prt_slot1(0x0015), ++ prt_slot2(0x0016), ++ prt_slot3(0x0017), ++ prt_slot0(0x0018), ++ prt_slot1(0x0019), ++ prt_slot2(0x001a), ++ prt_slot3(0x001b), ++ prt_slot0(0x001c), ++ prt_slot1(0x001d), ++ prt_slot2(0x001e), ++ prt_slot3(0x001f), + }) + + Name (_CRS, ResourceTemplate () + +-- + + + diff --git a/pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch b/pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch new file mode 100644 index 0000000000..554a3dbbc3 --- /dev/null +++ b/pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch @@ -0,0 +1,92 @@ +qemu: bios: provide gpe _L0x methods (Glauber Costa) + +provide methods for gpe blk 0, even though they do nothing atm + +Signed-off-by: Glauber Costa +Signed-off-by: Avi Kivity +Signed-off-by: Anthony Liguori + +Index: bochs/bios/acpi-dsdt.dsl +=================================================================== +--- bochs.orig/bios/acpi-dsdt.dsl ++++ bochs/bios/acpi-dsdt.dsl +@@ -597,4 +597,59 @@ DefinitionBlock ( + Zero, /* reserved */ + Zero /* reserved */ + }) ++ ++ Scope (\_GPE) ++ { ++ Name(_HID, "ACPI0006") ++ ++ Method(_L00) { ++ Return(0x01) ++ } ++ Method(_L01) { ++ Return(0x01) ++ } ++ Method(_L02) { ++ Return(0x01) ++ } ++ Method(_L03) { ++ Return(0x01) ++ } ++ Method(_L04) { ++ Return(0x01) ++ } ++ Method(_L05) { ++ Return(0x01) ++ } ++ Method(_L06) { ++ Return(0x01) ++ } ++ Method(_L07) { ++ Return(0x01) ++ } ++ Method(_L08) { ++ Return(0x01) ++ } ++ Method(_L09) { ++ Return(0x01) ++ } ++ Method(_L0A) { ++ Return(0x01) ++ } ++ Method(_L0B) { ++ Return(0x01) ++ } ++ Method(_L0C) { ++ Return(0x01) ++ } ++ Method(_L0D) { ++ Return(0x01) ++ } ++ Method(_L0E) { ++ Return(0x01) ++ } ++ Method(_L0F) { ++ Return(0x01) ++ } ++ } ++ + } +Index: bochs/bios/rombios32.c +=================================================================== +--- bochs.orig/bios/rombios32.c ++++ bochs/bios/rombios32.c +@@ -1647,6 +1647,8 @@ void acpi_bios_init(void) + fadt->pm_tmr_len = 4; + fadt->plvl2_lat = cpu_to_le16(0xfff); // C2 state not supported + fadt->plvl3_lat = cpu_to_le16(0xfff); // C3 state not supported ++ fadt->gpe0_blk = cpu_to_le32(0xafe0); ++ fadt->gpe0_blk_len = 4; + /* WBINVD + PROC_C1 + PWR_BUTTON + SLP_BUTTON + FIX_RTC */ + fadt->flags = cpu_to_le32((1 << 0) | (1 << 2) | (1 << 4) | (1 << 5) | (1 << 6)); + acpi_build_table_header((struct acpi_table_header *)fadt, "FACP", + +-- + + + + + diff --git a/pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch b/pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch new file mode 100644 index 0000000000..f55a335b32 --- /dev/null +++ b/pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch @@ -0,0 +1,128 @@ +qemu: bios: pci hotplug support (Marcelo Tosatti) + +Signed-off-by: Marcelo Tosatti +Signed-off-by: Anthony Liguori + +Index: bochs/bios/acpi-dsdt.dsl +=================================================================== +--- bochs.orig/bios/acpi-dsdt.dsl ++++ bochs/bios/acpi-dsdt.dsl +@@ -91,6 +91,61 @@ DefinitionBlock ( + prt_slot3(0x001f), + }) + ++ OperationRegion(PCST, SystemIO, 0xae00, 0x08) ++ Field (PCST, DWordAcc, NoLock, WriteAsZeros) ++ { ++ PCIU, 32, ++ PCID, 32, ++ } ++ ++ OperationRegion(SEJ, SystemIO, 0xae08, 0x04) ++ Field (SEJ, DWordAcc, NoLock, WriteAsZeros) ++ { ++ B0EJ, 32, ++ } ++ ++#define hotplug_slot(name, nr) \ ++ Device (S##name) { \ ++ Name (_ADR, nr##0000) \ ++ Method (_EJ0,1) { \ ++ Store(ShiftLeft(1, nr), B0EJ) \ ++ Return (0x0) \ ++ } \ ++ Name (_SUN, name) \ ++ } ++ ++ hotplug_slot(1, 0x0001) ++ hotplug_slot(2, 0x0002) ++ hotplug_slot(3, 0x0003) ++ hotplug_slot(4, 0x0004) ++ hotplug_slot(5, 0x0005) ++ hotplug_slot(6, 0x0006) ++ hotplug_slot(7, 0x0007) ++ hotplug_slot(8, 0x0008) ++ hotplug_slot(9, 0x0009) ++ hotplug_slot(10, 0x000a) ++ hotplug_slot(11, 0x000b) ++ hotplug_slot(12, 0x000c) ++ hotplug_slot(13, 0x000d) ++ hotplug_slot(14, 0x000e) ++ hotplug_slot(15, 0x000f) ++ hotplug_slot(16, 0x0010) ++ hotplug_slot(17, 0x0011) ++ hotplug_slot(18, 0x0012) ++ hotplug_slot(19, 0x0013) ++ hotplug_slot(20, 0x0014) ++ hotplug_slot(21, 0x0015) ++ hotplug_slot(22, 0x0016) ++ hotplug_slot(23, 0x0017) ++ hotplug_slot(24, 0x0018) ++ hotplug_slot(25, 0x0019) ++ hotplug_slot(26, 0x001a) ++ hotplug_slot(27, 0x001b) ++ hotplug_slot(28, 0x001c) ++ hotplug_slot(29, 0x001d) ++ hotplug_slot(30, 0x001e) ++ hotplug_slot(31, 0x001f) ++ + Name (_CRS, ResourceTemplate () + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, +@@ -605,8 +660,50 @@ DefinitionBlock ( + Method(_L00) { + Return(0x01) + } ++ ++#define gen_pci_hotplug(nr) \ ++ If (And(\_SB.PCI0.PCIU, ShiftLeft(1, nr))) { \ ++ Notify(\_SB.PCI0.S##nr, 1) \ ++ } \ ++ If (And(\_SB.PCI0.PCID, ShiftLeft(1, nr))) { \ ++ Notify(\_SB.PCI0.S##nr, 3) \ ++ } ++ + Method(_L01) { +- Return(0x01) ++ gen_pci_hotplug(1) ++ gen_pci_hotplug(2) ++ gen_pci_hotplug(3) ++ gen_pci_hotplug(4) ++ gen_pci_hotplug(5) ++ gen_pci_hotplug(6) ++ gen_pci_hotplug(7) ++ gen_pci_hotplug(8) ++ gen_pci_hotplug(9) ++ gen_pci_hotplug(10) ++ gen_pci_hotplug(11) ++ gen_pci_hotplug(12) ++ gen_pci_hotplug(13) ++ gen_pci_hotplug(14) ++ gen_pci_hotplug(15) ++ gen_pci_hotplug(16) ++ gen_pci_hotplug(17) ++ gen_pci_hotplug(18) ++ gen_pci_hotplug(19) ++ gen_pci_hotplug(20) ++ gen_pci_hotplug(21) ++ gen_pci_hotplug(22) ++ gen_pci_hotplug(23) ++ gen_pci_hotplug(24) ++ gen_pci_hotplug(25) ++ gen_pci_hotplug(26) ++ gen_pci_hotplug(27) ++ gen_pci_hotplug(28) ++ gen_pci_hotplug(29) ++ gen_pci_hotplug(30) ++ gen_pci_hotplug(31) ++ ++ Return (0x01) ++ + } + Method(_L02) { + Return(0x01) + +-- + + + diff --git a/pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch b/pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch new file mode 100644 index 0000000000..bd7403f88c --- /dev/null +++ b/pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch @@ -0,0 +1,26 @@ +bios: mark the acpi sci interrupt as connected to irq 9 (Avi Kivity) + +Due to a chipset bug, the sci interrupt is hardwired to irq 9. Set the +pci interrupt line register accordingly. + +Signed-off-by: Avi Kivity +Signed-off-by: Anthony Liguori + +Index: bochs/bios/rombios32.c +=================================================================== +--- bochs.orig/bios/rombios32.c ++++ bochs/bios/rombios32.c +@@ -981,6 +981,8 @@ static void pci_bios_init_device(PCIDevi + /* PIIX4 Power Management device (for ACPI) */ + pm_io_base = PM_IO_BASE; + smb_io_base = SMB_IO_BASE; ++ // acpi sci is hardwired to 9 ++ pci_config_writeb(d, PCI_INTERRUPT_LINE, 9); + pm_sci_int = pci_config_readb(d, PCI_INTERRUPT_LINE); + piix4_pm_enable(d); + acpi_enabled = 1; + +-- + + + diff --git a/pc-bios/bios-pq/series b/pc-bios/bios-pq/series index f209002e7c..4139227b07 100644 --- a/pc-bios/bios-pq/series +++ b/pc-bios/bios-pq/series @@ -3,3 +3,8 @@ 0003_kvm-bios-generate-mptable-unconditionally.patch 0004_kvm-bios-resolve-memory-device-roll-over-reporting--issues-with-32g-guests.patch 0005_kvm-bios-fix-smbios-memory-device-length-boundary--condition.patch +0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch +0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch +0008_qemu-bios-provide-gpe-_l0x-methods.patch +0009_qemu-bios-pci-hotplug-support.patch +0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin index ef29502f037e3a8ec2832be8e69b8f1f982d9359..88feb45a948c232a37c982267c7847c9666987d6 100644 GIT binary patch delta 1497 zcwS{xdrX^E6u*}~EV1+}rHGWmpmZHZP+JsBK*#K8GQ%b_;A1l97D9}YJ+gN0AE31* z>6hAs<;E<_;u6^dr+Yz7XS)U3L8yQ+1`|V+nCce&8re`r9G#5oxgSt)_K(~1_?_Q5 z_k8DEmrLPtDNN?*km3=9!tcWIMC$J6gKt!-&=6uK>9XleQeo&fRY-7xG)aEN$AZsG z?_u0ao|fzIx!}w4OEMfKsYh#YA9+q$Tz>Hx6>{F@Lb6^E%#-FZpG^(gY0!MOY>>`~ zk_M!+#I1aCL$9do)0o0ErifvJ6G}bCmx4l8aR#0znd+A6Ab0~`nh^ZBP=@CQ_F+#9 zyYF8UQwLtjjP!xj6L6UR>%T}&sb9y}$=~XII7Z&gF6wGbTt;Zr)*_AD4myD@E;VBK z6FTlwYK{hupi!wDd7{{}Q0JTR7NFWK&dS}QXZ9aa9__aUd0`gvNal-(x`I{B~ zdWB!(KPu&$r~SL9`Gv@W5}{Z^5xc3*9ClCCBIM$yW(OY3aG_{-)R7;fl7WRlgLMh4 zo?j#bi(JSZAV1_*c7<6aKNXj?!hoPFAdkmor$q0B(`NrpBuwCD%VAnP3a7Nk9IGu{}y zkXM6o1rZ)^$?{s(CgmHlGyl9+VoqDQt5G&l0!LK3&TQ?PL$tccC%V1ZM5s=OB}7*s z;Bg|+pM@1Yudg)pEic7kS;Pu){9pgu3L9C{r*JD-D0JfYgZqmt7~6uMZfL~04G`el z!bW|&D6vuBLF6S>xs9NEhGDN6g-_xc#_m)z*;&$=_1ao-!WJ@Jva9OQI?InUlyV_C zTaE6AZZR~&RxYBJA=EY-?j`MpB7Bbc4HdYFgblT2pFx8HS_Pk53zNe)8I`M?DhPDF zxWsushHoVFkiyap_yT#M^eNm=+DprEgq$dy!*TMFF^0b-J2qa{pvtw1a*~t^`w3^- zll}ce6`dkoro2)s1J|=R5@uD;W;J;jrVQQ&z}Bf$NN|v_X9|^ zxy_xrMl72QdylVc!S&x^{Oc80Aaa#2e3Q~1ck-UlcA+h^iz9wDdlJByfFx-NAm fL<=c6l1GXZC}bWUM9$Ha01*EI!%oDYbZ#Tn!VsC6y1fKmS!Rt|rBFhjUPJVb~P z*PS7$wEszUXaKE2zr%WW+z;>So+cOIZ(SRCAD+>h>N`4-BPuT?_$PYqP-+YNgN%1Z zuH=L;5fb&C%QMO*Y~&(qsfnQViDYG!fBZr)E99l(=*>rP#$6;CDMP}e7 zLlbF(fWdCQp30UgT9T9sSIeI}dhGdW)~)|?8Nxsfr^q*OD(j{x*RJKf4W+sb`WUw8 z>Y3+cNba74)5bhv2cPjLvJGC$E`H(zWc3|U`5IL|gYS&odt}bnJm*b>5*m(+%&Q_l z>(miftd8TH-fK(atBZUv+#h!2MW}2%;cux~LsVFhjj!-Q;br(PyYg&Q(T*bEMmbL6 z@Lr25${8@maZBSXZ2gBj(Z_<~$y=00701zITNAF46q3fg`cDe!KrfWRkl)u42g{K$K!)6cNIS-Mlz~!9%gk(Y@w|1yjRtP+dBl;5jg z-V8|SAbghJN|eCw$R}BF{|=G-2w4Rmlxsts{P{n@TR>ZwBn_Z4 zb&`XDUXz^=OJJ<%DUw}|3p@`qHCIR$Q}b@vUQ(UC7kyzGuPmeR$b@O)N>)K@NpEJg zZHvxfvEA?Z{jVf<;9jeEBxKy*jX~Koh2iJJ_TX;s|dr)C1BCkQSWjA>Px-I489T>L!MJ~dH z(g+!WqxXJpnBOvMOPo@%7mBRM^nw3$Gy<<%b1b>|)I}TF^M`sZV0w)Us51YnEVo{( z?Z#L3)mZn -- 2.11.4.GIT