Contribute
Register

[Guide] Disabling discrete graphics in dual-GPU laptops

Hi everyone, I got a problem with disabling my AMD radeon card. The problem is that Ioreg shows that AMD support is avalable at PCI0.RP09.GFX0, but as far as I know GFX0 is for integrated graphics, not for the discrete. _INI and _OFF methods are located in SSDT-5 and SSDT-0 aml. But the _REG in DSDT is not kind of attached to any of these devices, any solution from what excatly I should start?

Thanks Rehabman, but how should I know which one to disable, and the paths under the methods quite different than those provided in this guide, can you please give hint where I should start?

Your ioreg/IOService shows your AMD device at PCI0.RP09.GFX0.
But I think that is due to renaming that WhateverGreen is doing (I would probably disable that feature).

The actual path is _SB.PCI0.RP09.PEGP, as you can see when you start to look at IOACPIPlane and the actual ACPI files.

You have a PowerResource macro at _SB.PCI0.RP09 that has an _OFF:
Code:
            Method (_OFF, 0, Serialized)  // _OFF: Power Off
            {
                P8XH (Zero, 0xAA)
                \_SB.PCI0.RP09.PEGP.HGOF ()
                Store (Zero, _STA)
            }

For the most part, it calls PEGP.HGOF (all in SSDT-5).

So first step would be to call _OFF from the _INI at the HGOF path.
It is a one line addition.
Code:
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            Store (0x07, CMDR)
            Store (0x07, CMDS)
            Store (SVID, HVID)
            Store (SDID, HDID)
            Store (BADR, BARD)
            HGOF() // added to turn off AMD graphics
        }

There doesn't appear to be any EC references in the HGOF code, so no need to fiddle with moving anything to _REG.
 
hello rehab man, may u check my dsdt/ssdt and help me disabling DGPU? _INI is in SSDT 5 and _OFF is in PowerResurce in SSDT too.. I found a method called SGOF but I cant understand the way to reach him.. are 2 days I'm studying your patching guide but I'm still confused...
 

Attachments

  • debug_27851.zip
    2.1 MB · Views: 83
hello rehab man, may u check my dsdt/ssdt and help me disabling DGPU? _INI is in SSDT 5 and _OFF is in PowerResurce in SSDT too.. I found a method called SGOF but I cant understand the way to reach him.. are 2 days I'm studying your patching guide but I'm still confused...

Are you certain ACPI/origin/* files are the result of dumping with the discrete card enabled in BIOS?
Do you have the latest BIOS?

But SGOF is easy to find... it is in SSDT-5.
 
yes the cards can't be disabled from bios, yes I have the latest Bios available.. but how I have to call it? directly above the ini using your patch call off from ini?
 
yes the cards can't be disabled from bios, yes I have the latest Bios available.. but how I have to call it? directly above the ini using your patch call off from ini?

It is all covered in the guide... you'll just be calling SGOF instead of _OFF.
Don't forget to move the EC related code to _REG.
 
helping my friend to disable DGPU but can't disassemble DSDT and SSDTs getting error
Intel ACPI Component Architecture

ASL+ Optimizing Compiler/Disassembler version 20180427(RM)

Copyright (c) 2000 - 2018 Intel Corporation


Input file APIC.aml, Length 0xBC (188) bytes

ACPI: APIC 0x0000000000000000 0000BC (v03 DELL CBX3 01072009 AMI 00010013)

External object resolution file XSDT.aml

Input file XSDT.aml, Length 0xFC (252) bytes

XSDT.aml: Table [XSDT] is not an AML table - ignoring

External object resolution file WSMT.aml

Input file WSMT.aml, Length 0x28 (40) bytes

WSMT.aml: Table [WSMT] is not an AML table - ignoring

External object resolution file UEFI.aml

Input file UEFI.aml, Length 0x42 (66) bytes

UEFI.aml: Table [UEFI] is not an AML table - ignoring

External object resolution file SSDT-9x-ApHwp.aml

Input file SSDT-9x-ApHwp.aml, Length 0x317 (791) bytes

ACPI: SSDT 0x0000000000000000 000317 (v02 PmRef ApHwp 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-8x-Cpu0Hwp.aml

Input file SSDT-8x-Cpu0Hwp.aml, Length 0xBA (186) bytes

ACPI: SSDT 0x0000000000000000 0000BA (v02 PmRef Cpu0Hwp 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-7x-ApCst.aml

Input file SSDT-7x-ApCst.aml, Length 0x30A (778) bytes

ACPI: SSDT 0x0000000000000000 00030A (v02 PmRef ApCst 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-6x-Cpu0Cst.aml

Input file SSDT-6x-Cpu0Cst.aml, Length 0x3FF (1023) bytes

ACPI: SSDT 0x0000000000000000 0003FF (v02 PmRef Cpu0Cst 00003001 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-5x-ApIst.aml

Input file SSDT-5x-ApIst.aml, Length 0xD14 (3348) bytes

ACPI: SSDT 0x0000000000000000 000D14 (v02 PmRef ApIst 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-4x-Cpu0Ist.aml

Input file SSDT-4x-Cpu0Ist.aml, Length 0x58B (1419) bytes

ACPI: SSDT 0x0000000000000000 00058B (v02 PmRef Cpu0Ist 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-3-CpuSsdt.aml

Input file SSDT-3-CpuSsdt.aml, Length 0x17AE (6062) bytes

ACPI: SSDT 0x0000000000000000 0017AE (v02 CpuRef CpuSsdt 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-2-xh_OEMBD.aml

Input file SSDT-2-xh_OEMBD.aml, Length 0x825 (2085) bytes

ACPI: SSDT 0x0000000000000000 000825 (v02 INTEL xh_OEMBD 00000000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-19-AmdTabl.aml

Input file SSDT-19-AmdTabl.aml, Length 0xF88 (3976) bytes

ACPI: SSDT 0x0000000000000000 000F88 (v01 AmdRef AmdTabl 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-18-SgUlx.aml

Input file SSDT-18-SgUlx.aml, Length 0x281 (641) bytes

ACPI: SSDT 0x0000000000000000 000281 (v02 SgRef SgUlx 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-17-SgPch.aml

Input file SSDT-17-SgPch.aml, Length 0x699 (1689) bytes

ACPI: SSDT 0x0000000000000000 000699 (v02 SgRef SgPch 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-17-AmdTabl.aml

Input file SSDT-17-AmdTabl.aml, Length 0xF88 (3976) bytes

ACPI: SSDT 0x0000000000000000 000F88 (v01 AmdRef AmdTabl 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Firmware Error (ACPI): Failure creating [\_SB.PCI0.RP01.PEGP._ON], AE_ALREADY_EXISTS (20180427/dswload-498)

ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20180427/psobject-371)

Could not parse external ACPI tables, AE_ALREADY_EXISTS
 

Attachments

  • origin.zip
    94 KB · Views: 71
helping my friend to disable DGPU but can't disassemble DSDT and SSDTs getting error
Intel ACPI Component Architecture

ASL+ Optimizing Compiler/Disassembler version 20180427(RM)

Copyright (c) 2000 - 2018 Intel Corporation


Input file APIC.aml, Length 0xBC (188) bytes

ACPI: APIC 0x0000000000000000 0000BC (v03 DELL CBX3 01072009 AMI 00010013)

External object resolution file XSDT.aml

Input file XSDT.aml, Length 0xFC (252) bytes

XSDT.aml: Table [XSDT] is not an AML table - ignoring

External object resolution file WSMT.aml

Input file WSMT.aml, Length 0x28 (40) bytes

WSMT.aml: Table [WSMT] is not an AML table - ignoring

External object resolution file UEFI.aml

Input file UEFI.aml, Length 0x42 (66) bytes

UEFI.aml: Table [UEFI] is not an AML table - ignoring

External object resolution file SSDT-9x-ApHwp.aml

Input file SSDT-9x-ApHwp.aml, Length 0x317 (791) bytes

ACPI: SSDT 0x0000000000000000 000317 (v02 PmRef ApHwp 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-8x-Cpu0Hwp.aml

Input file SSDT-8x-Cpu0Hwp.aml, Length 0xBA (186) bytes

ACPI: SSDT 0x0000000000000000 0000BA (v02 PmRef Cpu0Hwp 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-7x-ApCst.aml

Input file SSDT-7x-ApCst.aml, Length 0x30A (778) bytes

ACPI: SSDT 0x0000000000000000 00030A (v02 PmRef ApCst 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-6x-Cpu0Cst.aml

Input file SSDT-6x-Cpu0Cst.aml, Length 0x3FF (1023) bytes

ACPI: SSDT 0x0000000000000000 0003FF (v02 PmRef Cpu0Cst 00003001 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-5x-ApIst.aml

Input file SSDT-5x-ApIst.aml, Length 0xD14 (3348) bytes

ACPI: SSDT 0x0000000000000000 000D14 (v02 PmRef ApIst 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-4x-Cpu0Ist.aml

Input file SSDT-4x-Cpu0Ist.aml, Length 0x58B (1419) bytes

ACPI: SSDT 0x0000000000000000 00058B (v02 PmRef Cpu0Ist 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-3-CpuSsdt.aml

Input file SSDT-3-CpuSsdt.aml, Length 0x17AE (6062) bytes

ACPI: SSDT 0x0000000000000000 0017AE (v02 CpuRef CpuSsdt 00003000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-2-xh_OEMBD.aml

Input file SSDT-2-xh_OEMBD.aml, Length 0x825 (2085) bytes

ACPI: SSDT 0x0000000000000000 000825 (v02 INTEL xh_OEMBD 00000000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-19-AmdTabl.aml

Input file SSDT-19-AmdTabl.aml, Length 0xF88 (3976) bytes

ACPI: SSDT 0x0000000000000000 000F88 (v01 AmdRef AmdTabl 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-18-SgUlx.aml

Input file SSDT-18-SgUlx.aml, Length 0x281 (641) bytes

ACPI: SSDT 0x0000000000000000 000281 (v02 SgRef SgUlx 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-17-SgPch.aml

Input file SSDT-17-SgPch.aml, Length 0x699 (1689) bytes

ACPI: SSDT 0x0000000000000000 000699 (v02 SgRef SgPch 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Pass 2 parse of [SSDT]

External object resolution file SSDT-17-AmdTabl.aml

Input file SSDT-17-AmdTabl.aml, Length 0xF88 (3976) bytes

ACPI: SSDT 0x0000000000000000 000F88 (v01 AmdRef AmdTabl 00001000 INTL 20160422)

Pass 1 parse of [SSDT]

Firmware Error (ACPI): Failure creating [\_SB.PCI0.RP01.PEGP._ON], AE_ALREADY_EXISTS (20180427/dswload-498)

ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20180427/psobject-371)

Could not parse external ACPI tables, AE_ALREADY_EXISTS

No issue with disassembly: iasl -dl DSDT.aml SSDT*.aml
 
Hi, i followed the guide but I dont seem able to find the _OFF method on my SSDT files
Thanks in advanced
 

Attachments

  • origin.zip
    52.9 KB · Views: 86
Hi, i followed the guide but I dont seem able to find the _OFF method on my SSDT files
Thanks in advanced

Really?
Likely in SSDT-7. Note:
Code:
NUC6i7KYK:origin rehabman$ grep Method.*_OFF *.dsl
SSDT-1-Ther_Rvp.dsl:            Method (_OFF, 0, Serialized)  // _OFF: Power Off
SSDT-6-SgPch.dsl:            Method (_OFF, 0, Serialized)  // _OFF: Power Off
SSDT-7-AmdTabl.dsl:        Method (_OFF, 0, Serialized)  // _OFF: Power Off
 
Really?
Likely in SSDT-7. Note:
Code:
NUC6i7KYK:origin rehabman$ grep Method.*_OFF *.dsl
SSDT-1-Ther_Rvp.dsl:            Method (_OFF, 0, Serialized)  // _OFF: Power Off
SSDT-6-SgPch.dsl:            Method (_OFF, 0, Serialized)  // _OFF: Power Off
SSDT-7-AmdTabl.dsl:        Method (_OFF, 0, Serialized)  // _OFF: Power Off
But it’s inside of a function, its that ok?
 
Back
Top