Jump to content

DSDT: trick retail drivers by changing "device-id" (e.g USB)


zhell
 Share

366 posts in this topic

Recommended Posts

Unfortunately the issue of my USB was not able to be settle by this method.

but it was useful about an SATA device.

 

8086:3a02 82801JD/DO (ICH10 Family) SATA AHCI Controller (My borad)

8086:3a22 82801JI (ICH10 Family) SATA AHCI Controller (Machintosh)

 

		Device (SAT0)
		{
			Name (_ADR, 0x001F0002)
			....


	 		Method (_DSM, 4, NotSerialized)
			{
				Store (Package (0x02)
					{
						"device-id",
						Buffer (0x04)
						{
							0x22, 0x3A, 0x00, 0x00
						}
					}, Local0)
				DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
			Return (Local0)
			}
		}

No Modified DSDT

post-53179-1243495833_thumb.png

 

Modified DSDT(Device ID)

post-53179-1243496000_thumb.png

post-53179-1243495872_thumb.png

 

Yes! I am not necessary with LegacyAppleAHCIPort.kext after adding device ID to DSDT.

 

Thanks zhell, it's a nice trick.

Sorry for my poor English.

post-53179-1243494125_thumb.png

Link to comment
Share on other sites

Unfortunately the issue of my USB was not able to be settle by this method.

but it was useful about an SATA device.

Great to hear that you put it to good use! And thanks for sharing your method.

I have tried to "sell" my ICH9-R as an ICH10 with 10.5.6, but it did not work, so I still needed the legacy AHCI kext. I will give it another try with 10.5.7.

 

What is the issue with your USB? Is it sleep-related, or something else?

Link to comment
Share on other sites

Those parameters are injected via custom DSDT table. Also all devices names has been modified to match a macpro DSDT.

Right. I should have know that, being a MacPro user myself (see sig).

Furthermore I have injected the necessary data for my 7600GT to work OOTB without NVkush, NVInject, or any other extra kext. DSDT has a lot of posibilities

Cool. I however used EFI Studio to inject my 8600GT data – it was just a click on a button. I do wonder how / what you've done to get that working – it might be available via search, but I haven't checked it yet.

 

BTW: We might need DSDT patching to get Snow Leopard (10.6.0) going, and thus I re-generated my dsdt.aml yesterday evening, after reading this. I'll start researching DSDT in combination with OS X later today – I already use it for my good old notebook running Ubuntu. Thanks :)

 

I have tried to "sell" my ICH9-R as an ICH10 with 10.5.6, but it did not work, so I still needed the legacy AHCI kext. I will give it another try with 10.5.7.

I might be wrong (haven't checked) but wasn't ICH10 support added in 10.5.7? Nah, I just checked (diff) and it was there already in IOUSBFamily-327.4.0

Link to comment
Share on other sites

Right. I should have know that, being a MacPro user myself (see sig).

 

Cool. I however used EFI Studio to inject my 8600GT data – it was just a click on a button. I do wonder how /what you've done to get that working – it might be available via search, but I haven't checked it yet.

 

BTW: We might need DSDT patching to get Snow Leopard (10.6.0) going, and thus I re-generated my dsdt.aml yesterday evening, after reading this. I'll start researching DSDT in combination with OS X later today – I already use it for my good old notebook running Ubuntu. Thanks :)

 

 

I might be wrong (haven't checked) but wasn't ICH10 support added in 10.5.7?

Slightly off-topic, but here's the entry I use for my 8600 GT/512MB.

Device (GFX0)
{
   Name (_ADR, Zero)
   Method (_DSM, 4, NotSerialized)
   {
       Store (Package (0x18)
           {
               "@0,compatible", 
               Buffer (0x0B)
               {
                   "NVDA,NVMac"
               }, 

               "@0,device_type", 
               Buffer (0x08)
               {
                   "display"
               }, 

               "@0,name", 
               Buffer (0x0F)
               {
                   "NVDA,Display-A"
               }, 

               "@1,compatible", 
               Buffer (0x0B)
               {
                   "NVDA,NVMac"
               }, 

               "@1,device_type", 
               Buffer (0x08)
               {
                   "display"
               }, 

               "@1,name", 
               Buffer (0x0F)
               {
                   "NVDA,Display-B"
               }, 

               "NVCAP", 
               Buffer (0x18)
               {
                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                   /* 0010 */    0x00, 0x00, 0x00, 0x00
               }, 

               "NVPM", 
               Buffer (0x1C)
               {
                   /* 0000 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                   /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                   /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                   /* 0018 */    0x00, 0x00, 0x00, 0x00
               }, 

               "VRAM,totalsize", 
               Buffer (0x04)
               {
                   0x00, 0x00, 0x00, 0x20
               }, 

               "device_type", 
               Buffer (0x0C)
               {
                   "NVDA,Parent"
               }, 

               "model", 
               Buffer (0x17)
               {
                   "nVidia GeForce 8600 GT"
               }, 

               "rom-revision", 
               Buffer (0x25)
               {
                   "nVidia GeForce 8600 GT OpenGL Engine"
               }
           }, Local0)
       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
       Return (Local0)
   }
}

Link to comment
Share on other sites

Slightly off-topic, but here's the entry I use for my 8600 GT/512MB.

<snip/>

Thank you very much – the data looks very similar, if not the same to my EFI string data. Which is perfect for me.

 

And the vanilla DSDT appears to work: AppleIntelCPUPowerManagement: initialization complete (disabler.kext has been removed).

 

Well, almost – the following lines showed up in /var/log/system.log:

ACPI_SMC_PlatformPlugin::pushCPU_CSTData - _CST evaluation failed
ACPI_SMC_PlatformPlugin::registerLPCDriver - WARNING - LPC device initialization failed: C-state power management not initialized

I do have a Intel SpeedStep enabled CPU so I guess I need to do some patching now – I have however no idea what/how at the moment. Wasn't this something in Scope(_PR)?

Link to comment
Share on other sites

Hi zhell,

 

Sorry, another slightly off-topic. I have to put dsdt code for GeForce Go 7300 in VGA procedure/function instead GFX0 because it is what stated in IORegistryExplorer when I use injector (NVinject.kext). Where did you get the value for "NVPM"? Was it for power management? If it is possible I want to eliminate problem where display failed to wake up after display goes to sleep.

 

kizwan

Link to comment
Share on other sites

Sorry, another slightly off-topic. I have to put dsdt code for GeForce Go 7300 in VGA procedure/function instead GFX0 because it is what stated in IORegistryExplorer when I use injector (NVinject.kext). Where did you get the value for "NVPM"? Was it for power management? If it is possible I want to eliminate problem where display failed to wake up after display goes to sleep.

I'm sorry but I'm unable to answer to this question as I have just copy-pasted the entry for my card from someone else's DSDT. I think you should be able to find some help or maybe even the DSDT entry for your card. What needs to be inserted is more or less what EFIStudio produces, just in the language of DSDT.

 

Here's a DSDT containing an entry for the 7300 including NVPM., although the NVPM part looks funny

Link to comment
Share on other sites

Hi, Zhell. Here is the my problem with sleep. I got a ICH8H MB which is recognized without any patch. Every time when I put my computer yo sleep it does sleep for a while but soon waked up. I checked the system log found this.

May 28 19:33:51 austin kernel[0]: image 447063040, uncompressed 965120000 (235625), compressed 442956576 (45%), sum1 affdc5cd, sum2 ad0a6fd0
May 28 19:33:51 austin kernel[0]: hibernate_write_image done(0)
May 28 19:33:51 austin kernel[0]: sleep
May 28 19:33:51 austin kernel[0]: Wake reason = HDEF EHC1 EHC2
May 28 19:33:51 austin kernel[0]: System Wake
May 28 19:33:51 austin kernel[0]: USB (EHCI):Port 3 on bus 0xfd connected or disconnected: portSC(0x301803)
May 28 19:33:53 austin kernel[0]: smb_iod_re

 

And I noticed the bus 0xfd is my wireless card which is Realtek 8187l.

 

I don`t quite understand the DSDT modification and I got hooked up with the generated DSDT.aml stuff. So I upload my ORIGIN DSDT dumped from IOREG and I hope you can help me out.

And I uploaded my WORKING LegacyHda KEXT can u help me inject it into the DSDT? Thanks in advance.

DSDT_DUMP.zip

post-216278-1243510933_thumb.png

audio.zip

Link to comment
Share on other sites

First which sleep problem does this fix? Mine just hangs when it goes to sleep and sits there is this the one? Secondly can the same be done for EHCI I looked through the plist of EHCI and can't seem to detirmine a valid device id.

Link to comment
Share on other sites

First which sleep problem does this fix? Mine just hangs when it goes to sleep and sits there is this the one? Secondly can the same be done for EHCI I looked through the plist of EHCI and can't seem to detirmine a valid device id.

As stated in the very first post, this fixes "the well-known behavior of the computer going to sleep only half-way and then requiring a hard reset to get back to life".

 

EHCI devices could be treated the same, but so far I have not come across an ICH9 board where this was required.

Link to comment
Share on other sites

zhell, you want us to add this:

Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x35, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

to each USB device, but why not add/call a new method with these specific bits of the patch:

Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x35, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)

Which in my case is replicated six times (with another 6 ports waiting to be patched).

Link to comment
Share on other sites

zhell, you want us to add this:

...

to each USB device, but why not add/call a new method with these specific bits of the patch:

...

Which in my case is replicated six times (with another 6 ports waiting to be patched).

The device-id is different for each of the six (3a34-3a39).

Also, you should only have six UHCI device entries (each offers two ports), or do you have 24 USB ports?

Link to comment
Share on other sites

@zhell

My problem is EHCI Host Controller, does not work.

UHCI seem fixed by your method.

 

@Master Chief

I cheaked EFI strings once again.

I am using Vanilla IOUSBFamiry.kext and delete DSDT.

and the result was the same.

 

post-53179-1243514953_thumb.png

post-53179-1243514831_thumb.png

post-53179-1243513079_thumb.png

Link to comment
Share on other sites

Sorry, another slightly off-topic. I have to put dsdt code for GeForce Go 7300 in VGA procedure/function instead GFX0 because it is what stated in IORegistryExplorer when I use injector (NVinject.kext).

 

You can change the name of the function if you like; you need to scan the DSDT table in case that you need to raplece the name more than once.

Link to comment
Share on other sites

@zhell

My problem is EHCI Host Controller, does not work.

UHCI seem fixed by your method.

Try this for EHCI 1 and EHCI 2:

Device (EHC1)
{
   Name (_ADR, 0x001D0007)
   ...
   Method (_DSM, 4, NotSerialized)
   {
       Store (Package (0x02)
       {
           "device-id", 
           Buffer (0x04)
           {
               0x3a, 0x3a, 0x00, 0x00
           }
       }, Local0)
       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
       Return (Local0)
   }
}

Device (EHC2)
{
   Name (_ADR, 0x001A0007)
   ...
   Method (_DSM, 4, NotSerialized)
   {
       Store (Package (0x02)
       {
           "device-id", 
           Buffer (0x04)
           {
               0x3c, 0x3a, 0x00, 0x00
           }
       }, Local0)
       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
       Return (Local0)
   }
}

Link to comment
Share on other sites

Try this for EHCI 1 and EHCI 2:

Device (EHC1)
{
   Name (_ADR, 0x001D0007)
   ...
   Method (_DSM, 4, NotSerialized)
   {
       Store (Package (0x02)
       {
           "device-id", 
           Buffer (0x04)
           {
               0x3a, 0x3a, 0x00, 0x00
           }
       }, Local0)
       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
       Return (Local0)
   }
}

Device (EHC2)
{
   Name (_ADR, 0x001A0007)
   ...
   Method (_DSM, 4, NotSerialized)
   {
       Store (Package (0x02)
       {
           "device-id", 
           Buffer (0x04)
           {
               0x3c, 0x3a, 0x00, 0x00
           }
       }, Local0)
       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
       Return (Local0)
   }
}

 

I already tried the method.

ECHI did not work.

 

Anyway, thank for suggestion.

it's promising for A board having the device which resembled Macintosh.

Link to comment
Share on other sites

We have found that having a disk in the DVD drive allows auto-sleep to work. This is on EP45-UD3P with 10.5.7 retail and no DSDT patching. Not sure what that implies or where to start looking for a proper fix but it's a start.

Link to comment
Share on other sites

I already tried the method.

ECHI did not work.

 

Anyway, thank for suggestion.

it's promising for A board having the device which resembled Macintosh.

Well, it's only supposed to work for ICH9/-R. Do you have such a south bridge?

 

 

We have found that having a disk in the DVD drive allows auto-sleep to work. This is on EP45-UD3P with 10.5.7 retail and no DSDT patching. Not sure what that implies or where to start looking for a proper fix but it's a start.

Thanks a lot, Bart86. Indeed, with my DP35DP, auto sleep never worked with 10.5.7, until just now when I put a DVD into the drive :-)

Edit: Found out replacing the DVD drive solves the problem

I don't know why this makes a difference, but it's definitely good to know. My board still needs the DSDT fix though, that's for sure because without the fix, it does not even sleep when forced.

Link to comment
Share on other sites

Great!!!

It works for me.

Cheating USB and ACPI as well.

Also GFX card and Audio is loaded via dsdt.aml

What can i say... dsdt patching have incredible possibilities, on my mobo i need only appledecrypt and 3 legacy kext's

(block storage and audio)

 

Thank U

post-31664-1243547282_thumb.jpg

Link to comment
Share on other sites

Great!!!

It works for me.

Cheating USB and ACPI as well.

Also GFX card and Audio is loaded via dsdt.aml

What can i say... dsdt patching have incredible possibilities, on my mobo i need only appledecrypt and 3 legacy kext's

(block storage and audio)

 

Thanks for the feedback, I agree, DSDT is a lot of fun... once you get your job done with it. The process can be painful, though, but it's worth it.

 

Enjoy! :wacko:

Link to comment
Share on other sites

I confirm it works to fake ICH9 SATA (with ICH10 id):

post-51637-1243557586_thumb.jpg

post-51637-1243557567_thumb.jpg

So no more LegacyAppleAHCIPort.kext (I assume IDE mode wont work without LegacyAppleIntelPXIIATA.kext, still need to test)

 

Pitty changing USB ids (UHCI/EHCI) didnt fix sleep

 

EDIT:

In IDE mode this mod cause a KP at boot related with the stock AppleAHCIPort.kext

Link to comment
Share on other sites

Thanks for the info it didn't fix sleep for me though but it is fun to mess with the DSDT. I managed to get the ICH9 to report as ICH10 but does anybody know how to tell the OS that the drives are internal and not external?

Link to comment
Share on other sites

I'm interested in the ICH10 fix (I have a Gigabyte P35-DQ6 with ICH9R) but would appreciate someone posting the exact section from their DSDT to help me understand ... as for USB and EHCI mine seems to be working - here's what I have from my DSDT for USB. This comes from using fassl's script and is not modified by me.

 

            Device (USB0)
           {
               Name (_ADR, 0x001D0000)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x03, 
                   0x03
               })
           }

           Device (USB1)
           {
               Name (_ADR, 0x001D0001)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x04, 
                   0x03
               })
           }

           Device (USB2)
           {
               Name (_ADR, 0x001D0002)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x0C, 
                   0x03
               })
           }

           Device (USB3)
           {
               Name (_ADR, 0x001D0003)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x0E, 
                   0x03
               })
           }

           Device (US31)
           {
               Name (_ADR, 0x001A0000)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x0E, 
                   0x03
               })
           }

           Device (USB4)
           {
               Name (_ADR, 0x001A0001)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x05, 
                   0x03
               })
           }

           Device (USB5)
           {
               Name (_ADR, 0x001A0002)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x20, 
                   0x03
               })
           }

           Device (USBE)
           {
               Name (_ADR, 0x001D0007)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x0D, 
                   0x03
               })
           }

           Device (USE2)
           {
               Name (_ADR, 0x001A0007)
               Method (_S3D, 0, NotSerialized)
               {
                   If (LEqual (OSFL, 0x02))
                   {
                       Return (0x02)
                   }

                   Return (0x03)
               }

               Name (_PRW, Package (0x02)
               {
                   0x0D, 
                   0x03
               })
           }

 

Here's what my System Profiler shows -

post-106904-1243565220_thumb.jpg

Link to comment
Share on other sites

Well for ICH10 I post this at the end of my Device (Sata) section

 Method (_DSM, 4, NotSerialized)
               {
                   Store (Package (0x02)
                       {
                           "device-id", 
                           Buffer (0x04)
                           {
                               0x22, 0x3A, 0x00, 0x00
                           }
                       }, Local0)
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                   Return (Local0)
               }

 

I am not sure what yours would be called but my physical address was 1f0002 if you look in IOreg you'll find your address it might be the same.

Link to comment
Share on other sites

Here is my part of USB dsdt for an GA-EP35 DS3 (ICH9 nonraid)

It has 29xx(hex) ICH pci dev id´s.

Also be carefull with that US31 device which is in the middle between that USB devices. Its NOT! an USB or EHCI device, let it stay as it is.

 

I would NOT change orig. device names (USB0 to UHCI1 for examle), because if you do that you have also more work to change all occurences of that in the dsl.

 

So (for less work) let them as they are and only add that device id stuff (that new method) to each of them. (For my knowledge ;) )

dsdt_part.txt

Link to comment
Share on other sites

 Share

×
×
  • Create New...