Help - Search - Members - Calendar
Full Version: Firewire Hub Fix
Project OS X Forums > Snow Leopard Guides & Tutorials > DSDT Patching
prasys
Hey guys

Recently , I bought a PCI FireWire card and it had some issues. For instance that it would not say that its built-in and it will say something about secure mode. This has caused me kernel panic with couple of firewire devices. After countless hours of searching , I've found the fix for it , it seems that you gotta add fwhub to your firewire and then it will work. Well I tested it out and it did work with my NEC FireWire PCI card.

You'll have to find your firewire device ADR and add in. Anyway this is mine. Credit goes to the King on fixing the ADR for me , otherwise I'll be screwed big time tongue.gif

CODE
         Device (FRWR) // FireWire PCI
                {
                    Name (_ADR, 0x00010000)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x02)
                            {
                                "fwhub",
                                Buffer (0x04)
                                {
                                    0x00, 0x00, 0x00, 0x00
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }
scrax
QUOTE (prasys @ Feb 5 2010, 04:08 PM) *
Hey guys

Recently , I bought a PCI FireWire card and it had some issues. For instance that it would not say that its built-in and it will say something about secure mode. This has caused me kernel panic with couple of firewire devices. After countless hours of searching , I've found the fix for it , it seems that you gotta add fwhub to your firewire and then it will work. Well I tested it out and it did work with my NEC FireWire PCI card.

You'll have to find your firewire device ADR and add in. Anyway this is mine. Credit goes to the King on fixing the ADR for me , otherwise I'll be screwed big time tongue.gif

CODE
         Device (FRWR) // FireWire PCI
                {
                    Name (_ADR, 0x00010000)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x02)
                            {
                                "fwhub",
                                Buffer (0x04)
                                {
                                    0x00, 0x00, 0x00, 0x00
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }

For me this dosen't fix hotplug, the anly workaround is to make a sleep and wake, and after this it works

EDIT: I've tried this:
CODE
                Name(_HPP, Package(){0x08,0x40, One, One}) //6.2.6 _HPP (Hot Plug Parameters) pg.172 ACPIspec3.0b

just before the Device (FRWR) line, but still nothing...
gsam_fan
for me it worked by deleting FWHD devie and added it as FRWR into P0P1 Device...
CODE
.
.
.

    Method (MCDP, 2, NotSerialized)
    {
        If (LEqual (Arg0, Zero))
        {
            Store (Buffer (One)
                {
                    0x03
                }, Arg1)
        }
    }
.
.
.
.

            Device (P0P1)
            {
                Name (_ADR, 0x001E0000)
                Method (_PRT, 0, NotSerialized)
                {
                    If (PICM)
                    {
                        Return (AR01)
                    }

                    Return (PR01)
                }

                Method (_PRW, 0, NotSerialized)
                {
                    Return (Package (0x02)
                    {
                        0x0B,
                        0x05
                    })
                }

                Device (FRWR)
                {
                    Name (_ADR, 0x05040000)
                    Name (_SUN, 0x02)
                    Name (_GPE, 0x19)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x0A)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                    0x00
                                },

                                "fwhub",
                                Buffer (0x04)
                                {
                                    0x00, 0x00, 0x00, 0x00
                                },

                                "device-id",
                                Buffer (0x04)
                                {
                                    0x11, 0x58, 0x00, 0x00
                                },
                                
                                "vendor-id",
                                Buffer (0x04)
                                {
                                    0xC1, 0x11, 0x00, 0x00
                                },

                                "name",
                                Buffer (0x18)
                                {
                                    "Agere Systems FW322/323"
                                }
                                
                            }, Local0)
                        MCDP (Arg2, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }
.
.
.
.
.
        Method (_L19, 0, NotSerialized)
        {
            Notify (\_SB.PCI0.P0P1.FRWR, Zero)
            Notify (\_SB.PWRB, 0x02)
        }
    }

x.di
...
tea
Wow, i too have Gigabyte! Very interesting solutions! I'll try it.
About IRQ routing - you can assign IRQ by editing _PTR method in PCI0 device and in all HUB devices. For example:
PCI0 device _PTR:
QUOTE
// HDEF
Package () { 0x001BFFFF, 0x00, 0x00, 0x16 },

// PEGP
Package () { 0x0001FFFF, 0x00, 0x00, 0x10 }, // PEGP
Package () { 0x0001FFFF, 0x01, 0x00, 0x11 },
Package () { 0x0001FFFF, 0x02, 0x00, 0x12 },
Package () { 0x0001FFFF, 0x03, 0x00, 0x13 },

// PEX0-PEX5
Package () { 0x001CFFFF, 0x00, 0x00, 0x10 }, // PEX0
Package () { 0x001CFFFF, 0x01, 0x00, 0x11 }, //
Package () { 0x001CFFFF, 0x02, 0x00, 0x12 }, //
Package () { 0x001CFFFF, 0x03, 0x00, 0x13 }, // PEX3
Package () { 0x001CFFFF, 0x00, 0x00, 0x10 }, // PEX4 -> GIGE
Package () { 0x001CFFFF, 0x01, 0x00, 0x11 }, //

// USB
Package () { 0x001DFFFF, 0x00, 0x00, 0x17 }, // EHC1 UHC1
Package () { 0x001DFFFF, 0x01, 0x00, 0x13 }, // UHC2
Package () { 0x001DFFFF, 0x02, 0x00, 0x12 }, // UHC3
Package () { 0x001DFFFF, 0x03, 0x00, 0x10 },

// SATA & SBUS
Package () { 0x001FFFFF, 0x00, 0x00, 0x13 },
Package () { 0x001FFFFF, 0x01, 0x00, 0x13 }, // SATA
Package () { 0x001FFFFF, 0x02, 0x00, 0x12 }, // SBUS

// USB
Package () { 0x001AFFFF, 0x00, 0x00, 0x10 }, // UHC4
Package () { 0x001AFFFF, 0x01, 0x00, 0x15 }, // UHC5
Package () { 0x001AFFFF, 0x02, 0x00, 0x12 }, // EHC2
Package () { 0x001AFFFF, 0x02, 0x00, 0x12 } // UHC6


PCIB device _PTR:
QUOTE
Package () { 0x0000FFFF, 0x00, 0x00, 0x14 }, // ARPT
Package () { 0x0000FFFF, 0x01, 0x00, 0x13 },
Package () { 0x0000FFFF, 0x02, 0x00, 0x12 },
Package () { 0x0000FFFF, 0x03, 0x00, 0x10 },

Package () { 0x0001FFFF, 0x00, 0x00, 0x12 }, // FRWR
Package () { 0x0001FFFF, 0x01, 0x00, 0x10 },
Package () { 0x0001FFFF, 0x02, 0x00, 0x14 },
Package () { 0x0001FFFF, 0x03, 0x00, 0x13 },

Package () { 0x0002FFFF, 0x00, 0x00, 0x13 },
Package () { 0x0002FFFF, 0x01, 0x00, 0x12 },
Package () { 0x0002FFFF, 0x02, 0x00, 0x10 },
Package () { 0x0002FFFF, 0x03, 0x00, 0x14 },

Package () { 0x0007FFFF, 0x00, 0x00, 0x17 },
Package () { 0x0007FFFF, 0x01, 0x00, 0x17 },
Package () { 0x0007FFFF, 0x02, 0x00, 0x17 },
Package () { 0x0007FFFF, 0x03, 0x00, 0x17 }


Thank you for solution.
x.di
QUOTE (tea @ Mar 5 2010, 10:57 AM) *
Wow, i too have Gigabyte! Very interesting solutions! I'll try it.
About IRQ routing - you can assign IRQ by editing _PTR method in PCI0 device and in all HUB devices. For example:
...

Привет.
Thanks.I know this stuff and this cause problems.
On Gigabyte boards too much devices can share one IRQ and this is the real problem .
On mac pro IRQs assigns differently and when i try to use mac pro IRQ (_PRT) on gigabyte board than i end with "Still waiting for root device"
because on mac pro 4.1 Sata have IRQ 11 and on gig board SATA can have IRQ 12 or 13...
But more important USB and Firewire because they gets shared IRQ (UHC6, EHC2, UHC3, SBUS,Firewire )
That just TOO MUCH -> system will LAG!
But important EHC1 and UHC1 that is the pain!
On MACs they have different IRQs 10 and 17
but on Gig boards whatever i try they gets shared IRQ..
I will try to dig deeper... May be I miss something.
may be if i assign for EHC1 UHC1 irq 10 and for firewire irq 17 it would help without disabling one high speed bus??? don't know.
rolleyes.gif
Konsti
QUOTE (tea @ Mar 5 2010, 10:57 AM) *
Wow, i too have Gigabyte! Very interesting solutions! I'll try it.
About IRQ routing - you can assign IRQ by editing _PTR method in PCI0 device and in all HUB devices.
Thank you for solution.

Dear tea, this is very good information; I was wondering what all that was in my DSDTs.
Please, can you tell me how I can tell which device is assigned to which part/address?
I mean, how can I know where GIGE or FRWR or ARPT are assigned in my DSDT, for IRQs?
Is there a method or some guideline you can tell us?
Thank you all. Merry Christmas!
tea
Package () { 0x001BFFFF, Zero, Zero, 0x16 },
...
Device (HDEF)
{
Name (_ADR, 0x001B0000)
...
}

Konsti
QUOTE (tea @ Dec 23 2010, 08:22 PM) *
Package () { 0x001BFFFF, Zero, Zero, 0x16 },
...
Device (HDEF)
{
Name (_ADR, 0x001B0000)
...
}

I must be blind! Thank you very much, indeed. Merry Christmas to all tongue.gif
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2012 Invision Power Services, Inc.