Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
240 lines (228 sloc) 7.15 KB
#Maintained by: RehabMan for: Laptop Patches
#usb_7-series-multiplex.txt
# Originally Maintained by: PJALM for: PJALM Intel7 at: Thu Aug 15 09:07:46 UTC 2013
# Intel z77 USB2/USB3 Multiplexing Fix
# USB3 patches in thanks to SJ_Underwater and Mieze
# Code optimizations thanks to RehabMan and PikeRAlpha
# Further optimizations by RehabMan 2013-10-14
#
# Note: These patches are often not universal. If your DSDT is substantially
# different, you may need to tweak them or refer to the various
# guides for XHC patching to implement it correctly for your
# board.
#
# Fix method _OSC
into method label _OSC parent_label PCI0 remove_entry;
into device label PCI0 parent_label _SB insert
begin
Method (_OSC, 4, Serialized)\n
{\n
Store (Arg3, Local0)\n
CreateDWordField (Local0, Zero, CDW1)\n
CreateDWordField (Local0, 0x04, CDW2)\n
CreateDWordField (Local0, 0x08, CDW3)\n
//was: Store (CDW2, SUPP)\n
Store (CDW3, Local3) //was: Store (CDW3, CTRL))\n
If (LAnd (LEqual (Arg0, GUID), NEXP))\n
{\n
If (Not (And (CDW1, One)))\n
{\n
If (And (Local3, 0x02)) //was: And (CTRL, 0x02)\n
{\n
NHPG ()\n
}\n
If (And (Local3, 0x04)) //was: And (CTRL, 0x04)\n
{\n
NPME ()\n
}\n
}\n
If (LNotEqual (Arg1, One))\n
{\n
Or (CDW1, 0x08, CDW1)\n
}\n
If (LNotEqual (CDW3, Local3)) //was: LNotEqual (CDW3, CTRL)\n
{\n
Or (CDW1, 0x10, CDW1)\n
}\n
Store (Local3, CDW3) //was: Store(CTRL, CDW3)\n
Store (Local3, OSCC) //was: Store(CTRL, OSCC)\n
}\n
Else\n
{\n
Or (CDW1, 0x04, CDW1)\n
}\n
Return (Local0)\n
}\n
end;
# Fix EHC1
into device label PR11 code_regex Name\s\(MUXS[^)]+\) remove_matched;
into device label PR11 parent_label PR01 insert begin Name (MUXS, "XHCA") end;
into device label PR12 code_regex Name\s\(MUXS[^)]+\) remove_matched;
into device label PR12 parent_label PR01 insert begin Name (MUXS, "XHCB") end;
into device label PR13 code_regex Name\s\(MUXS[^)]+\) remove_matched;
into device label PR13 parent_label PR01 insert begin Name (MUXS, "XHCC") end;
into device label PR18 code_regex Name\s\(MUXS[^)]+\) remove_matched;
into device label PR18 parent_label PR01 insert begin Name (MUXS, "XHCD") end;
into method label XHCA parent_label EHC1 remove_entry;
into method label XHCB parent_label EHC1 remove_entry;
into method label XHCC parent_label EHC1 remove_entry;
into method label XHCD parent_label EHC1 remove_entry;
into method label EHCA parent_label EHC1 remove_entry;
into method label EHCB parent_label EHC1 remove_entry;
into method label EHCC parent_label EHC1 remove_entry;
into method label EHCD parent_label EHC1 remove_entry;
into method label XHCN parent_label EHC1 remove_entry;
into device label EHC1 code_regex Name\s\(XHCN,\sOne\) remove_matched;
into device label EHC1 insert begin
Name (XHCN, One)\n
Method (XHCA, 0, NotSerialized) { Store (1, ^^XHC1.PAHC) }\n
Method (XHCB, 0, NotSerialized) { Store (1, ^^XHC1.PBHC) }\n
Method (XHCC, 0, NotSerialized) { Store (1, ^^XHC1.PCHC) }\n
Method (XHCD, 0, NotSerialized) { Store (1, ^^XHC1.PDHC) }\n
Method (EHCA, 0, NotSerialized) { Store (0, ^^XHC1.PAHC) }\n
Method (EHCB, 0, NotSerialized) { Store (0, ^^XHC1.PBHC) }\n
Method (EHCC, 0, NotSerialized) { Store (0, ^^XHC1.PCHC) }\n
Method (EHCD, 0, NotSerialized) { Store (0, ^^XHC1.PDHC) }\n
end;
# Fix EHC2
into method label XHCN parent_label EHC2 remove_entry;
into device label EHC2 code_regex Name\s\(XHCN,\sOne\) remove_matched;
into device label EHC2 insert begin Name (XHCN, One)\n end;
# Fix XHC1
into device label XHC set_label begin XHC1 end;
into_all all code_regex XHC(?=\W) replaceall_matched begin XHC1 end;
into method label _WAK code_regex \_SB.PCI0.XHC1.XWAK replace_matched begin _SB.PCI0.XHC1._INI end;
# Rewrite XHC/XHC1 device
into device label XHC1 replace_content
begin
Name (_ADR, 0x00140000)\n
Name (_S3D, 0x02)\n
Name (_S4D, 0x02)\n
Name (XRST, Zero)\n
\n
OperationRegion (XPRT, PCI_Config, 0x74, 0x10)\n
Field (XPRT, DWordAcc, NoLock, Preserve)\n
{\n
Offset (0x01),\n
PMEE, 1,\n
, 6,\n
PMES, 1\n
}\n
\n
OperationRegion (XH1C, PCI_Config, 0xD0, 0x10)\n
Field (XH1C, ByteAcc, NoLock, Preserve)\n
{\n
PAHC, 1,\n
PBHC, 1,\n
PCHC, 1,\n
PDHC, 1,\n
Offset (0x08),\n
PASS, 1,\n
PBSS, 1,\n
PCSS, 1,\n
PDSS, 1\n
}\n
\n
OperationRegion (XHC2, PCI_Config, 0x44, 0x04)\n
Field (XHC2, ByteAcc, NoLock, Preserve)\n
{\n
Offset (0x01),\n
MIAI, 2\n
}\n
\n
Method (_INI, 0, NotSerialized)\n
{\n
Store (Zero, MIAI)\n
}\n
\n
Device (RHUB)\n
{\n
Name (_ADR, Zero)\n
Name (UPCP, Package() { 0xFF, 0x03, Zero, Zero })\n
Device (PRT1)\n
{\n
Name (_ADR, One)\n
Alias (UPCP, _UPC)\n
Name (_PLD, Package()\n
{\n
Buffer()\n
{\n
0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n
0x69, 0x0C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00\n
}\n
})\n
Name (MUXS, "EHCA")\n
}\n
Device (PRT2)\n
{\n
Name (_ADR, 0x02)\n
Alias (UPCP, _UPC)\n
Name (_PLD, Package()\n
{\n
Buffer()\n
{\n
0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n
0x69, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00\n
}\n
})\n
Name (MUXS, "EHCB")\n
}\n
Device (PRT3)\n
{\n
Name (_ADR, 0x03)\n
Alias (UPCP, _UPC)\n
Name (_PLD, Package()\n
{\n
Buffer()\n
{\n
0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n
0x69, 0x0C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00\n
}\n
})\n
Name (MUXS, "EHCC")\n
}\n
Device (PRT4)\n
{\n
Name (_ADR, 0x04)\n
Alias (UPCP, _UPC)\n
Name (_PLD, Package()\n
{\n
Buffer()\n
{\n
0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n
0x69, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00\n
}\n
})\n
Name (MUXS, "EHCD")\n
}\n
}\n
\n
Method (_DSM, 4, NotSerialized)\n
{\n
If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
Return (Package()\n
{\n
"AAPL,clock-id", Buffer() { 0x02 },\n
"built-in", Buffer() { 0x00 },\n
"subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n
"subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n
"AAPL,current-available", 2100,\n
"AAPL,current-extra", 2200,\n
"AAPL,current-extra-in-sleep", 1600,\n
"AAPL,device-internal", 0x02,\n
"AAPL,max-port-current-in-sleep", 2100,\n
})\n
}\n
\n
Method (_PRW, 0, NotSerialized) { Return (GPRW (0x0D, 0x04)) }\n
// alternate for above\n
//Method (_PRW, 0, NotSerialized) { Return (Package() { 0x0D, 0x04 }) }\n
Method (XHCA, 0, NotSerialized) { Store (One, PAHC) }\n
Method (XHCB, 0, NotSerialized) { Store (One, PBHC) }\n
Method (XHCC, 0, NotSerialized) { Store (One, PCHC) }\n
Method (XHCD, 0, NotSerialized) { Store (One, PDHC) }\n
Method (EHCA, 0, NotSerialized) { Store (Zero, PAHC) }\n
Method (EHCB, 0, NotSerialized) { Store (Zero, PBHC) }\n
Method (EHCC, 0, NotSerialized) { Store (Zero, PCHC) }\n
Method (EHCD, 0, NotSerialized) { Store (Zero, PDHC) }\n
end;