Contribute
Register

[HELP] Disable HD 7650M in DSDT

Status
Not open for further replies.
The files in 01 folder works. No ATI in system information. Should I try 02 as well?

01 is without the LNKS loop
02 is with the LNKS loop

It would also be nice to find out if _OFF can be called from DGFX._INI (in SSDT) instead of _SB._INI (in DSDT). It would make for a cleaner patch to only have to modify one file instead of both DSDT/SSDT.

Now that we know why the SSDT was not loading: Looks like OS X throws the entire SSDT away upon encountering an error (eg. trying to insert objects into a non-existing scope) or at least stops processing at that point, leaving later declarations unprocessed. Good to know...
 
01 is without the LNKS loop
02 is with the LNKS loop

It would also be nice to find out if _OFF can be called from DGFX._INI (in SSDT) instead of _SB._INI (in DSDT). It would make for a cleaner patch to only have to modify one file instead of both DSDT/SSDT.

Now that we know why the SSDT was not loading: Looks like OS X throws the entire SSDT away upon encountering an error (eg. trying to insert objects into a non-existing scope) or at least stops processing at that point, leaving later declarations unprocessed. Good to know...


Just FYI: the SSDT-5.AML can be disassembled cleanly with: 'iasl -e dsdt.aml -d ssdt-5.aml'. The errors are caused by an incorrect disassembly process. The patches are "fixing" it properly, so no worries.
 
Please try files in 2 too

Also, it looks to me like the whole thing can be done in just the SSDT. No need to edit both SSDT+DSDT, which is nice (the only case would be if _OFF was required in _WAK).

The only outstanding question is the LNKS loop question, at which point I can checkin a modified SSDT patch and remove the DSDT patch.
 
Also, it looks to me like the whole thing can be done in just the SSDT. No need to edit both SSDT+DSDT, which is nice (the only case would be if _OFF was required in _WAK).

The only outstanding question is the LNKS loop question, at which point I can checkin a modified SSDT patch and remove the DSDT patch.

Where is the best way to call _OFF() in SSDT? DGFX._INI?
 
Where is the best way to call _OFF() in SSDT? DGFX._INI?

Yes. Makes everything really easy.

The patch:
Code:
# call _OFF from _SB.PCI0.DGFX._INI
into method label _INI parent_label \_SB.PCI0.PEGP.DGFX code_regex . insert begin _OFF()\n end;

Here is the complete set:
Code:
#Maintained by: RehabMan for: HP Probook 4x30s/4x40s
# 11a_Radeon_OFF_SSDT.txt

# To disable the Radeon chipset
# Apply these patches to SSDT containing the secondary graphics routines
# "SgTabl"
# Include patched version as SSDT-1.aml

# PLEASE NOTE: These patches are a work-in-progress

# syntax fixes
into scope label \_SB.PCI0.GFX0 code_regex (OperationRegion.*)VRMB\s+\(VRMS\s+\(\)\), replace_matched begin %1VRMB(),VRMS())\n end;
into scope label \_SB.PCI0.GFX0 code_regex (Field\s+\(REVD,.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into scope label \_SB.PCI0.PEGP code_regex (OperationRegion.*)\\XBAS\s+\(0x9000\), replace_matched begin %1\\XBAS,0x9000)\n end;
into scope label \_SB.PCI0.PEGP code_regex (Field\s+\(RPCX,.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (OperationRegion.*)\\GBAS\s+\(0x60\), replace_matched begin %1\\GBAS,0x60)\n end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (Field\s+\(GPIO,.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (OperationRegion.*)\\EECP\s+\(0x14\), replace_matched begin %1\\EECP,0x14)\n end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (Field\s+\(PCAP.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into definitionblock code_regex External\s+\(\\_SB_\.PCI0\.GFX0\.DD02\._BCM,\s+IntObj\) replace_matched begin External(\\_SB_.PCI0.GFX0.DD02._BCM, MethodObj)
end;
into method label _BCM parent_label DD02 code_regex Return\s+\(([^\)]*)\)\n.*Arg0 replace_matched begin Return(%1(Arg0)) end;

# rename GFX0
into_all all code_regex \.GFX0 replaceall_matched begin .IGPU end;
into_all all label \_SB.PCI0.GFX0 set_label begin \_SB.PCI0.IGPU end;

#REVIEW: may not be necessary)
# remove wait for LNKS (while loop)  
into method label _OFF parent_label \_SB.PCI0.PEGP.DGFX code_regex While\s+\([^\}]*\} remove_matched;

# call _OFF from _SB.PCI0.DGFX._INI
into method label _INI parent_label \_SB.PCI0.PEGP.DGFX code_regex . insert begin _OFF()\n end;

Note patch marked REVIEW...
 
Good morning Guys,

Please try files in 2 too

02 Works too. Sleep is also working. Just noticed a weird thing is, when I restarted my pc after putting 02 files, it shut down...

EDIT: Maybe the shutdown is just the one time thing.
 
Yes. Makes everything really easy.

The patch:
Code:
# call _OFF from _SB.PCI0.DGFX._INI
into method label _INI parent_label \_SB.PCI0.PEGP.DGFX code_regex . insert begin _OFF()\n end;

Here is the complete set:
Code:
#Maintained by: RehabMan for: HP Probook 4x30s/4x40s
# 11a_Radeon_OFF_SSDT.txt

# To disable the Radeon chipset
# Apply these patches to SSDT containing the secondary graphics routines
# "SgTabl"
# Include patched version as SSDT-1.aml

# PLEASE NOTE: These patches are a work-in-progress

# syntax fixes
into scope label \_SB.PCI0.GFX0 code_regex (OperationRegion.*)VRMB\s+\(VRMS\s+\(\)\), replace_matched begin %1VRMB(),VRMS())\n end;
into scope label \_SB.PCI0.GFX0 code_regex (Field\s+\(REVD,.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into scope label \_SB.PCI0.PEGP code_regex (OperationRegion.*)\\XBAS\s+\(0x9000\), replace_matched begin %1\\XBAS,0x9000)\n end;
into scope label \_SB.PCI0.PEGP code_regex (Field\s+\(RPCX,.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (OperationRegion.*)\\GBAS\s+\(0x60\), replace_matched begin %1\\GBAS,0x60)\n end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (Field\s+\(GPIO,.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (OperationRegion.*)\\EECP\s+\(0x14\), replace_matched begin %1\\EECP,0x14)\n end;
into scope label \_SB.PCI0.PEGP.DGFX code_regex (Field\s+\(PCAP.*\n.*\n.*\n.*\n.*\})\) replace_matched begin %1 end;
into definitionblock code_regex External\s+\(\\_SB_\.PCI0\.GFX0\.DD02\._BCM,\s+IntObj\) replace_matched begin External(\\_SB_.PCI0.GFX0.DD02._BCM, MethodObj)
end;
into method label _BCM parent_label DD02 code_regex Return\s+\(([^\)]*)\)\n.*Arg0 replace_matched begin Return(%1(Arg0)) end;

# rename GFX0
into_all all code_regex \.GFX0 replaceall_matched begin .IGPU end;
into_all all label \_SB.PCI0.GFX0 set_label begin \_SB.PCI0.IGPU end;

#REVIEW: may not be necessary)
# remove wait for LNKS (while loop)  
into method label _OFF parent_label \_SB.PCI0.PEGP.DGFX code_regex While\s+\([^\}]*\} remove_matched;

# call _OFF from _SB.PCI0.DGFX._INI
into method label _INI parent_label \_SB.PCI0.PEGP.DGFX code_regex . insert begin _OFF()\n end;

Note patch marked REVIEW...


Should I try this patch on my original SSDT-5 along with Original PBI's DSDT (leaving DSDT unpatch) ?
 
Should I try this patch on my original SSDT-5 along with Original PBI's DSDT (leaving DSDT unpatch) ?

Only apply "complete set" to original SSDT-5.aml, you don't need to patch DSDT, only use PBI's DSDT.
 
Should I try this patch on my original SSDT-5 along with Original PBI's DSDT (leaving DSDT unpatch) ?

It looks like the loop elimination is not needed with SSDT technique (eg. hang/failure was caused by moving code into DSDT)...

Test with and without the patch to LNKS (second patch from the bottom) just to verify...

But, yes, it is only necessary to patch just the SSDT, no need to do anything to DSDT to implement this feature.
 
Status
Not open for further replies.
Back
Top