Jump to content

[Guide] Native USB Fix for Desktops - No Injector/Kext Required - SkyLake+


Recommended Posts

  • Administrators

-All credits to Piker-Alpha

Here

https://pikeralpha.wordpress.com/2016/07/13/simple-skylake-usb-fix-no-kexts-required

and here

https://pikeralpha.wordpress.com/2016/11/10/two-port-usb-3-1-gen-ii-pci-express-card/

 

1- Check OEM SSDT about USBs, in my case is SSDT-6-A M I.aml, i'm using a Z390 mobo

2- Create Methods into SSDT OEM inside Scope _SB.PCI0.XHC.RHUB, Internal and USB 2 is native, just create USB 3, USB-C

-In some cases some ports have a Method _STA = Zero, change to 0x0F to enable

We just need duplicate Methods (GUPC for example) native from our ACPI table and Inject values

Connector types in the ACPI specification(pages 524 and 525)

https://uefi.org/sites/default/files/resources/ACPI_6.0.pdf

bn23gUz.png

0xFF - internal - GUPC

Zero - USB 2 - TUPC

0x03 - USB 3 - MALD

0x09 - USB-C - MAL0 (Same HSxx/SSxx in both orientations, then it has an internal switch)

0x0A - USB-C - MAL1 (Different HSxx/SSxx in each orientation, then it has no switch)

 

-Example

GUPC and TUPC is a native Methods

gecujqH.png

 

Quote
Method (GUPC, 1, Serialized)

{

Name (PCKG, Package (0x04)

{

Zero,

0xFF,

Zero,

Zero

})

PCKG [Zero] = Arg0

Return (PCKG) /* \_SB_.PCI0.XHC_.RHUB.GUPC.PCKG */

}

 

Method (TUPC, 1, Serialized)

{

Name (PCKG, Package (0x04)

{

One,

Zero,

Zero,

Zero

})

PCKG [Zero] = Arg0

Return (PCKG) /* \_SB_.PCI0.XHC_.RHUB.TUPC.PCKG */

}

 

Method (MALD, 1, Serialized)

{

Name (PCKG, Package (0x04)

{

Zero,

0x03,

Zero,

Zero

})

PCKG [Zero] = Arg0

Return (PCKG) /* \_SB_.PCI0.XHC_.RHUB.MALD.PCKG */

}

 

Method (MAL0, 1, Serialized)

{

Name (PCKG, Package (0x04)

{

Zero,

0x09,

Zero,

Zero

})

PCKG [Zero] = Arg0

Return (PCKG) /* \_SB_.PCI0.XHC_.RHUB.MAL0.PCKG */

}

 

Method (MAL1, 1, Serialized)

{

Name (PCKG, Package (0x04)

{

Zero,

0x0A,

Zero,

Zero

})

PCKG [Zero] = Arg0

Return (PCKG) /* \_SB_.PCI0.XHC_.RHUB.MAL1.PCKG */

}

}

 

3- Enable or Disable USB ports

-Check example TUPC

Look at Method _UPC - USB Port Capabilities

Enable = One

Disable = Zero

Example

Quote
Scope (\_SB.PCI0.XHC.RHUB.HS01)

{

Method (_UPC, 0, NotSerialized) // _UPC: USB Port Capabilities

{

If ((H1TC == Zero))

{

If (((UMAP & One) == One))

{

Return (TUPC (One))

}

Else

{

Return (GUPC (Zero))

}

}

Else

{

Return (\_SB.UBTC.RUCC (H1CR, One))

}

}

 

If you need identify your USB ports like USB-C for example, change TUPC/GUPC to MAL0

 

Quote
Scope (\_SB.PCI0.XHC.RHUB.SS01)

{

Method (_UPC, 0, NotSerialized) // _UPC: USB Port Capabilities

{

If ((H1TC == Zero))

{

If (((UMAP & One) == One))

{

Return (MAL0 (One))

}

Else

{

Return (GUPC (Zero))

}

}

Else

{

Return (\_SB.UBTC.RUCC (H1CR, One))

}

}

 

0xFF - internal - GUPC

Zero - USB 2 - TUPC

0x03 - USB 3 - MALD

0x09 - USB-C - MAL0 (Same HSxx/SSxx in both orientations, then it has an internal switch)

0x0A - USB-C - MAL1 (Different HSxx/SSxx in each orientation, then it has no switch)

 

-USB 2 PORTS inside USB 3 BUS, just Inject USB 3

Kzzu4cQ.png

-My SSDT with edits

SSDT-6-A M I.aml.zip

-Use a Diff Merge to compare files

-Original

ORIGINAL.txt.zip

-Edited

EDITED.txt.zip

-Download Diff Merge

https://sourcegear.com/diffmerge/downloads.php#

 

5BB76VB.png

 

Link to post
Share on other sites
  • Replies 168
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Thanks, was because I forgot delete Usbinjectall.kext, now it's working!! Thanks 😃

if set to internal don't solve. idk

enjoy

Excellent guide [ref]MaLd0n[/ref], awesome!!


Bit by bit we will understanding more about ACPI patching, thank you.


But one doubt, I need to keep the USB Injection at Clover? E.g: Devices > USB > Inject/FixOwnership/HighCurrent


Thanks

Link to post
Share on other sites
  • Administrators

[ref]piyushrawal[/ref], dont need usbinjectall and XHCI-unsupported.kext


use ssdt with usb patch limit and u don't need more

SSDT-xh.aml.zip

https://Olarila.com/forum/viewtopic.php?f=62&t=6539


if u need change connectors, check inside all _upc and change


0xFF - internal - GUPC

Zero - USB 2 - TUPC

0x03 - USB 3 - MALD

0x09 - USB-C - MAL0

0x0A - USB-C - MAL1


btw, SSDT-xh is a native name or u renamed it? use a native name and clover replace a correct table, i never test with rename

Link to post
Share on other sites

[ref]piyushrawal[/ref], dont need usbinjectall and XHCI-unsupported.kext


use ssdt with usb patch limit and u don't need more

SSDT-xh.aml.zip

https://Olarila.com/forum/viewtopic.php?f=62&t=6539


if u need change connectors, check inside all _upc and change


0xFF - internal - GUPC

Zero - USB 2 - TUPC

0x03 - USB 3 - MALD

0x09 - USB-C - MAL0

0x0A - USB-C - MAL1


btw, SSDT-xh is a native name or u renamed it? use a native name and clover replace a correct table, i never test with rename

 

It's working with limit patch. But I am unable to disable USB ports to get it under 15 limit by setting Return (MALD (One)) to Return (MALD (Zero)). It has no effect.

And yes, renaming was a bad idea. It doesn't work if renamed.

Link to post
Share on other sites
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

:cap-Please Disable Your ADBlocker-:cap