Contribute
Register

Hopefully near universal USB 3.0 driver for 3rd part controllers in 10.8.x

Status
Not open for further replies.
Interesting that it works with Asus boards. So clearly this is a Gigabyte specific (well, so far anyhow) issue.
I presume none of you are using DSDT files, but rather are using modified UEFI's?
I compared the USB 3.0 (RP08) sections of the dsdt for an Asus P8Z77-I Deluxe to the dsdt of the Gigabyte Z77X-UD5H. The Asus RP08 is presented with notations for Asus code that does not appear in Gigabyte code.

Code:
Asus P8Z77-I Deluxe USB 3.0 0508

            Device (RP08)
            {
                Name (_ADR, 0x001C0007)  // _ADR: Address
                Name (_HPP, Package (0x04)  // _HPP: Hot Plug Parameters  - Asus begin
                {
                    0x08, 
                    0x40, 
                    One, 
                    Zero
                })                   //Asus end
                OperationRegion (PXCS, PCI_Config, 0x40, 0xC0)
                Field (PXCS, AnyAcc, NoLock, Preserve)
                {
                    Offset (0x10), 
                    L0SE,   1, 
                    Offset (0x11), 
                    Offset (0x12), 
                        ,   13, 
                    LASX,   1, 
                    Offset (0x14),   //Asus - diff
                        ,   6,       //Asus - diff
                    HPCE,   1,       //Asus 
                    Offset (0x1A),   //Asus
                    ABPX,   1, 
                        ,   2, 
                    PDCX,   1, 
                        ,   2, 
                    PDSX,   1, 
                    Offset (0x1B), 
                    Offset (0x20), 
                    Offset (0x22), 
                    PSPX,   1, 
                    Offset (0x98), 
                        ,   30, 
                    HPEX,   1, 
                    PMEX,   1
                }

                Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
                {
                    Offset (0x94),   //Asus begin
                        ,   1, 
                    EIFD,   1, 
                    Offset (0x95),   //Asus end
                    Offset (0x9C), 
                        ,   30, 
                    HPSX,   1, 
                    PMSX,   1
                }

                Device (PXSX)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
                    {
                        0x09, 
                        0x04
                    })
                }

                Method (HPME, 0, Serialized)
                {
                    If (PMSX)
                    {
                        Store (0xC8, Local0)
                        While (Local0)
                        {
                            Store (One, PMSX)
                            If (PMSX)
                            {
                                Decrement (Local0)
                            }
                            Else
                            {
                                Store (Zero, Local0)
                            }
                        }

                        Notify (PXSX, 0x02)
                    }
                }

                Method (_PRT, 0, NotSerialized)  // _PRT: PCI Routing Table
                {
                    If (PICM)
                    {
                        Return (AR0F ())
                    }


                    Return (PR0F ())
                }
            }
 
Getting better!!

Running Lion 10.7.4 on my GA-X58A-UD3R, the built in USB 3.0, which I believe uses the NEC 720200 Chipset, was blazing fast.

After updating to 10.8, the built in USB 3.0 stopped working, even after installing MB's USB 3.0 support.

I plugged in this card: http://www.amazon.com/gp/product/B007PPYXNS/ref=oh_details_o01_s01_i02 (based on Asmedia ASM1042) and USB 3.0 drives were recognized, but ran significantly slower than under Lion. (See attached AJA speed test).

After updating to these newest drivers from thelostswede, the built-in USB 3.0 still doesn't work, but the speeds on my Asmedia ASM1042 based cards have significantly increased, and are now just a notch below where they were using the built in usb3.0 under Lion.

I also have this card: http://www.amazon.com/gp/product/B003GAM67G/ref=oh_details_o01_s00_i00, that's based on the NEC uPD720200 Chipset, which I'll hopefully be able to test tomorrow.
 

Attachments

  • Lion - Built In - SR1 32GB USB3.0 Drive 1GB.png
    Lion - Built In - SR1 32GB USB3.0 Drive 1GB.png
    53.9 KB · Views: 761
  • Mountain Lion - Asmedia ASM1042 - SR1 32GB USB3.0 Drive 1GB.png
    Mountain Lion - Asmedia ASM1042 - SR1 32GB USB3.0 Drive 1GB.png
    55 KB · Views: 357
  • ML-newest thelostswede drivers-Asmedia ASM1042 - SR1 32GB USB3.0 Drive 1GB.png
    ML-newest thelostswede drivers-Asmedia ASM1042 - SR1 32GB USB3.0 Drive 1GB.png
    55 KB · Views: 435
Hey, props for the driver!

Sadly, for FL1009 things are not that great.

I have tested the .02 revision from the OP on my Vostro that has 10.8.1 installed onto external HDD.
After installing the driver system refused to boot, it was just stuck at random places during the boot process.... until I plugged a random empty flashdrive into USB3.0 port... only then it booted the OS X installation.
The situation is the same as using dsdt injection an relying on native apple kexts - the ports (or should I say port, because only one of them is getting recognized) are seen but refuse to mount or power anything.

I thought this behavior can be due to my dsdt injection (to allow sleep/wake functionality with non-working ports), but I guess it really shouldn't impact anything:
Code:
        Device (RP03)
        {
            Name (_ADR, 0x001C0002)  // _ADR: Address
            OperationRegion (PXCS, PCI_Config, 0x40, 0xC0)
            Field (PXCS, AnyAcc, NoLock, Preserve)
            {
                Offset (0x10), 
                L0SE,   1, 
                    ,   3, 
                LDRP,   1, 
                Offset (0x11), 
                Offset (0x12), 
                    ,   13, 
                LASX,   1, 
                Offset (0x1A), 
                ABPX,   1, 
                    ,   2, 
                PDCX,   1, 
                    ,   2, 
                PDSX,   1, 
                Offset (0x1B), 
                LSCX,   1, 
                Offset (0x20), 
                Offset (0x22), 
                PSPX,   1, 
                Offset (0x98), 
                    ,   30, 
                HPEX,   1, 
                PMEX,   1, 
                    ,   30, 
                HPSX,   1, 
                PMSX,   1
            }

            Device (XHCB)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    Store (Package (0x11)
                        {
                            "built-in", 
                            Buffer (One)
                            {
                                 0x00
                            }, 

                            "AAPL,clock-id", 
                            Buffer (One)
                            {
                                 0x00
                            }, 

                            "model", 
                            Buffer (0x26)
                            {
                                "Fresco Logic USB 3.0 Host Controller"
                            }, 

                            "AAPL,current-available", 
                            0x0834, 
                            "AAPL,current-extra", 
                            0x0898, 
                            "AAPL,current-extra-in-sleep", 
                            0x0640, 
                            "AAPL,max-port-current-in-sleep", 
                            0x0834, 
                            "AAPL,device-internal", 
                            0x02, 
                            Buffer (One)
                            {
                                 0x00
                            }
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }

                Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
                {
                    0x09, 
                    0x04
                })
            }

            Method (HPME, 0, Serialized)
            {
                If (PMSX)
                {
                    Store (0xC8, Local0)
                    While (Local0)
                    {
                        Store (One, PMSX)
                        If (PMSX)
                        {
                            Decrement (Local0)
                        }
                        Else
                        {
                            Store (Zero, Local0)
                        }
                    }

                    Notify (XHCB, 0x02)
                }
            }

            Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                If (LEqual (USBK, One))
                {
                    Return (GPRW (0x0B, 0x03))
                }
                Else
                {
                    Return (GPRW (0x0B, Zero))
                }
            }

            Method (_PRT, 0, NotSerialized)  // _PRT: PCI Routing Table
            {
                If (PICM)
                {
                    Return (AR06 ())
                }

                Return (PR06 ())
            }
        }

Doing a grep of kextstat shows:
localhost:~ test$ kextstat | grep Cal
39 0 0xffffff7f809ff000 0x1d000 0x1d000 com.CalDigit.driver.CalDigitUSBxHCI (1.3.8a2) <33 10 7 5 4 3 1>


Update:

NO FREAKIN WAY!
I tried the kexts from the attachements (the ones that have 'bout 40 downloads).. without any particular hope it would work, but then I saw this in my boot log:

Code:
Sep  3 09:55:21 localhost kernel[0]: bLen=9, bDescType=2
Sep  3 09:55:21 localhost kernel[0]: [9][2][2c][0][1][1][0][80][70]
Sep  3 09:55:21 localhost kernel[0]: bLen=9, bDescType=4
Sep  3 09:55:21 localhost kernel[0]: interfaceProtocal is 0x50
Sep  3 09:55:21 localhost kernel[0]: [9][4][0][0][2][8][6][50][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=7, bDescType=5
Sep  3 09:55:21 localhost kernel[0]: [7][5][84][2][0][4][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=6, bDescType=48
Sep  3 09:55:21 localhost kernel[0]: Update bInterfaceSubClass B 0x50
Sep  3 09:55:21 localhost kernel[0]: [6][30][f][0][0][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=7, bDescType=5
Sep  3 09:55:21 localhost kernel[0]: [7][5][3][2][0][4][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=6, bDescType=48
Sep  3 09:55:21 localhost kernel[0]: Update bInterfaceSubClass B 0x50
Sep  3 09:55:21 localhost kernel[0]: [6][30][f][0][0][0]
Sep  3 09:55:21 localhost kernel[0]: USBMSC Identifier (non-unique): 575838314337304434363532 0x1058 0x730 0x1008
Sep  3 09:55:21 localhost kernel[0]: USBF:	7.900	Endpoint 0x84 of the USB device "My Passport 0730" at location 0x5c300000:  converting Bulk MPS from 1024 to 512 (USB 2.0 Spec section 5.8.3)
Sep  3 09:55:21 localhost kernel[0]: USBF:	7.914	Endpoint 0x3 of the USB device "My Passport 0730" at location 0x5c300000:  converting Bulk MPS from 1024 to 512 (USB 2.0 Spec section 5.8.3)

And when it booted I saw my USB 3.0 HDD mounted on the desktop! Will give it some speed test if I can (its nearly full).
Apparently it only works from cold boot or restart, hotplug is not functional.

Also I should point out that sleep is working perfectly fine for me, it's just that devices from USB 3.0 ports get unloaded across sleep. Disk Utility sees the volume and is somewhat mounting it, it appears on the desktop but Disk Utility says to perform FirstAid on the given disk, even though its mounted perfectly fine and I see the contents and able access them.

The speeds are awfully slow (42/43 W/R) but it may be due to the fact that I'm using a version of the UEFI bios that is still not supporting this controller at it's full potential (I'm rocking a A04 version, whilst only A07 brings support for Fresco Logic but breaks a lot of stuff along the way)...
 

Attachments

  • Screen Shot 2012-09-03 at 9.27.42 AM.jpg
    Screen Shot 2012-09-03 at 9.27.42 AM.jpg
    190.7 KB · Views: 249
  • Screen Shot 2012-09-03 at 9.28.31 AM.jpg
    Screen Shot 2012-09-03 at 9.28.31 AM.jpg
    195.6 KB · Views: 207
  • Screen Shot 2012-09-03 at 9.28.43 AM.png
    Screen Shot 2012-09-03 at 9.28.43 AM.png
    115.5 KB · Views: 224
  • Screen Shot 2012-09-03 at 9.59.51 AM.png
    Screen Shot 2012-09-03 at 9.59.51 AM.png
    177.4 KB · Views: 256
  • Screen Shot 2012-09-03 at 10.01.49 AM.jpg
    Screen Shot 2012-09-03 at 10.01.49 AM.jpg
    191.4 KB · Views: 583
Here are the tests I've done to compare USB2.0 speed and USB3.0 speed on the same external HDD. I've got the same speed when the HDD is connected on my SATA 2 (3GB/s) port.

USB3.jpg
 
Getting better!!

Running Lion 10.7.4 on my GA-X58A-UD3R, the built in USB 3.0, which I believe uses the NEC 720200 Chipset, was blazing fast.

After updating to 10.8, the built in USB 3.0 stopped working, even after installing MB's USB 3.0 support.

I plugged in this card: http://www.amazon.com/gp/product/B007PPYXNS/ref=oh_details_o01_s01_i02 (based on Asmedia ASM1042) and USB 3.0 drives were recognized, but ran significantly slower than under Lion. (See attached AJA speed test).

After updating to these newest drivers from thelostswede, the built-in USB 3.0 still doesn't work, but the speeds on my Asmedia ASM1042 based cards have significantly increased, and are now just a notch below where they were using the built in usb3.0 under Lion.

I also have this card: http://www.amazon.com/gp/product/B003GAM67G/ref=oh_details_o01_s00_i00, that's based on the NEC uPD720200 Chipset, which I'll hopefully be able to test tomorrow.

That's bizarr, as they're both based on edits of the same driver from CalDigit. :crazy:
I have no real explanation as to why it would be so different apart from the fact that the current driver in MB has the device ID checked removed entirely, while I've added all of the device ID's manually.
 
Hey, props for the driver!

Sadly, for FL1009 things are not that great.

I have tested the .02 revision from the OP on my Vostro that has 10.8.1 installed onto external HDD.
After installing the driver system refused to boot, it was just stuck at random places during the boot process.... until I plugged a random empty flashdrive into USB3.0 port... only then it booted the OS X installation.
The situation is the same as using dsdt injection an relying on native apple kexts - the ports (or should I say port, because only one of them is getting recognized) are seen but refuse to mount or power anything.

I thought this behavior can be due to my dsdt injection (to allow sleep/wake functionality with non-working ports), but I guess it really shouldn't impact anything:
Code:
        Device (RP03)
        {
            Name (_ADR, 0x001C0002)  // _ADR: Address
            OperationRegion (PXCS, PCI_Config, 0x40, 0xC0)
            Field (PXCS, AnyAcc, NoLock, Preserve)
            {
                Offset (0x10), 
                L0SE,   1, 
                    ,   3, 
                LDRP,   1, 
                Offset (0x11), 
                Offset (0x12), 
                    ,   13, 
                LASX,   1, 
                Offset (0x1A), 
                ABPX,   1, 
                    ,   2, 
                PDCX,   1, 
                    ,   2, 
                PDSX,   1, 
                Offset (0x1B), 
                LSCX,   1, 
                Offset (0x20), 
                Offset (0x22), 
                PSPX,   1, 
                Offset (0x98), 
                    ,   30, 
                HPEX,   1, 
                PMEX,   1, 
                    ,   30, 
                HPSX,   1, 
                PMSX,   1
            }

            Device (XHCB)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    Store (Package (0x11)
                        {
                            "built-in", 
                            Buffer (One)
                            {
                                 0x00
                            }, 

                            "AAPL,clock-id", 
                            Buffer (One)
                            {
                                 0x00
                            }, 

                            "model", 
                            Buffer (0x26)
                            {
                                "Fresco Logic USB 3.0 Host Controller"
                            }, 

                            "AAPL,current-available", 
                            0x0834, 
                            "AAPL,current-extra", 
                            0x0898, 
                            "AAPL,current-extra-in-sleep", 
                            0x0640, 
                            "AAPL,max-port-current-in-sleep", 
                            0x0834, 
                            "AAPL,device-internal", 
                            0x02, 
                            Buffer (One)
                            {
                                 0x00
                            }
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }

                Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
                {
                    0x09, 
                    0x04
                })
            }

            Method (HPME, 0, Serialized)
            {
                If (PMSX)
                {
                    Store (0xC8, Local0)
                    While (Local0)
                    {
                        Store (One, PMSX)
                        If (PMSX)
                        {
                            Decrement (Local0)
                        }
                        Else
                        {
                            Store (Zero, Local0)
                        }
                    }

                    Notify (XHCB, 0x02)
                }
            }

            Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                If (LEqual (USBK, One))
                {
                    Return (GPRW (0x0B, 0x03))
                }
                Else
                {
                    Return (GPRW (0x0B, Zero))
                }
            }

            Method (_PRT, 0, NotSerialized)  // _PRT: PCI Routing Table
            {
                If (PICM)
                {
                    Return (AR06 ())
                }

                Return (PR06 ())
            }
        }

Doing a grep of kextstat shows:
localhost:~ test$ kextstat | grep Cal
39 0 0xffffff7f809ff000 0x1d000 0x1d000 com.CalDigit.driver.CalDigitUSBxHCI (1.3.8a2) <33 10 7 5 4 3 1>


Update:

NO FREAKIN WAY!
I tried the kexts from the attachements (the ones that have 'bout 40 downloads).. without any particular hope it would work, but then I saw this in my boot log:

Code:
Sep  3 09:55:21 localhost kernel[0]: bLen=9, bDescType=2
Sep  3 09:55:21 localhost kernel[0]: [9][2][2c][0][1][1][0][80][70]
Sep  3 09:55:21 localhost kernel[0]: bLen=9, bDescType=4
Sep  3 09:55:21 localhost kernel[0]: interfaceProtocal is 0x50
Sep  3 09:55:21 localhost kernel[0]: [9][4][0][0][2][8][6][50][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=7, bDescType=5
Sep  3 09:55:21 localhost kernel[0]: [7][5][84][2][0][4][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=6, bDescType=48
Sep  3 09:55:21 localhost kernel[0]: Update bInterfaceSubClass B 0x50
Sep  3 09:55:21 localhost kernel[0]: [6][30][f][0][0][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=7, bDescType=5
Sep  3 09:55:21 localhost kernel[0]: [7][5][3][2][0][4][0]
Sep  3 09:55:21 localhost kernel[0]: bLen=6, bDescType=48
Sep  3 09:55:21 localhost kernel[0]: Update bInterfaceSubClass B 0x50
Sep  3 09:55:21 localhost kernel[0]: [6][30][f][0][0][0]
Sep  3 09:55:21 localhost kernel[0]: USBMSC Identifier (non-unique): 575838314337304434363532 0x1058 0x730 0x1008
Sep  3 09:55:21 localhost kernel[0]: USBF:    7.900    Endpoint 0x84 of the USB device "My Passport 0730" at location 0x5c300000:  converting Bulk MPS from 1024 to 512 (USB 2.0 Spec section 5.8.3)
Sep  3 09:55:21 localhost kernel[0]: USBF:    7.914    Endpoint 0x3 of the USB device "My Passport 0730" at location 0x5c300000:  converting Bulk MPS from 1024 to 512 (USB 2.0 Spec section 5.8.3)

And when it booted I saw my USB 3.0 HDD mounted on the desktop! Will give it some speed test if I can (its nearly full).
Apparently it only works from cold boot or restart, hotplug is not functional.

Also I should point out that sleep is working perfectly fine for me, it's just that devices from USB 3.0 ports get unloaded across sleep. Disk Utility sees the volume and is somewhat mounting it, it appears on the desktop but Disk Utility says to perform FirstAid on the given disk, even though its mounted perfectly fine and I see the contents and able access them.

The speeds are awfully slow (42/43 W/R) but it may be due to the fact that I'm using a version of the UEFI bios that is still not supporting this controller at it's full potential (I'm rocking a A04 version, whilst only A07 brings support for Fresco Logic but breaks a lot of stuff along the way)...

Strange, that's faster than USB 2.0 speeds, despite the external drive being reported as working at USB 2.0 speeds according to the system information screenshot you supplied. It's a real head scratcher and I can't work out why it's only sort of working, but as you say, it might be a UEFI issue in your specific case.
 
Here are the tests I've done to compare USB2.0 speed and USB3.0 speed on the same external HDD. I've got the same speed when the HDD is connected on my SATA 2 (3GB/s) port.

USB3.jpg

Looking good :thumbup:

Clearly in your case the limitation isn't the USB 3.0 drivers, but rather the speed of the hard drive interface if you see the same performance when it's connected over SATA.
 
Status
Not open for further replies.
Back
Top