소소한/갤러리

Original Link
@아이뱅크 님께서 링크를 남겨주신 게시물을 따라.. 야밤에 토니맥을 마실 갔다가- 잠도 안오고 해서 한 번 간략하게나마 정리를 해볼까 합니다. 정보 제공해주신 @아이뱅크님, @D'Artagnan 님 감사합니다.

---------------------------------------------------------------------------------------------

애플 OEM ACPI 테이블을 보면 아래의 이름으로 GPU 함수 이름이 정리되어 있습니다.

iMac13/14/15/17: Discrete GPU = "GFX0" (@0). Integrated GPU = "IGPU" (@2 or 0x00020000)
MacPro3,1/5,1: Discrete GPU#1 = "PSX1" (@0).
MacPro6,1: Discrete GPU#1 = "GFX1" (@0). Discrete GPU#2 = "GFX2" (@0).

iMac13/14/15/17의 외장 GPU는 GFX0으로 할당되고 내장 그래픽은 IGPU로 할당 됩니다.
MacPro3,1/5,1은 외장 GPU가
PSX1으로 할당 됩니다.
MacPro6,1은 외장 GPU1번이
GFX1 외장 GPU2번이  GFX2로 할당되게 되는데요.


커스텀 맥을 사용할 때 빈번하게 발생하는 블랙 아웃은 할당되는 함수에서 GPU 포트가 할당되어 있지 않기 때문입니다.
그래서 설치후 블랙 아웃이 발생하게 된다고 Tonymac에 글을 남긴 shilohh의 표현이 그렇습니다.
(근데 토니맥에 글을 정말 복잡하게 써놓긴 했어요;; ㅎㅎ)


* 주의 *

가) 최소한 Error 수정을 끝낸 DSDT.aml을 첨부 했을 때 빛을 발휘 합니다!
나) DSDT의 GPU 네이밍이 GFX0 / GFX1등으로 되어 있지 않다면 SSDT에 인젝션을 권장 합니다

어쩔수 없이 맥에서 DSDT를 추출할 경우 아래의 과정을 거쳐 주세요
1) 최초 부팅 시 클로버 부트로더 GUI에서 F4를 누르고 5초 정도 기다려 주세요
2) EFI/Clover/ACPI/origin 폴더에 다량의 aml이 추출됩니다
3) 그 중 OEM으로 추출된 DSDT.aml을 바탕화면으로 복사합니다
4) 만약 SSDT.aml과 SSDT-1이 있다면 SSDT-2를 새로 만들어서 GPU 인젝션을 하시면 됩니다
5) 완성된 SSDT-1.aml은 EFI/Clover/ACPI/patched에 넣어 줍니다
6) DSDT.aml은  EFI/Clover/ACPI/patched에 넣어 줍니다
 

SSDT GPU Injection workflow

우선  IORegistryExplorer에서 여러분의 그래픽 카드의 디바이스 이름이 어떻게 되어 있는지 확인하면, DSDT에서 그래픽 장착 슬롯에 대한 디바이스 이름을 손쉽게 확인할 수 있습니다.

IOResistryExplorer path                   /    SSDT Scope Variations

PCI0@0 > PEG0@1 > PEGP@0         /     (\_SB.PCI0.PEG0.PEGP)
PCI0@0 > BR3A@3 > H000@0       /     (_SB.PCI0.BR3A.H000)
PCI0@0 > BR3A@3 > D077@0        /     (_SB.PCI0.BR3A.D077)
PCI0@0 > BR2A@2 > H000@0       /     (_SB.PCI0.BR2A.H000)
PCI0@0 > BR2A@2 > D075@0        /     (_SB.PCI0.BR3A.D075)

IOResistryExplorer에서 검색한 GPU 디바이스 이름을 DSDT.aml에서 찾았을 때
"Name (_ADR, Zero)" 또는 "Name (_ADR, 0x00)"으로 보일 때 해당 DSDT는 잘못되었다고 보셔야 하고 윈도우에서 추출하셔서 다시 시도하시기 바랍니다.

 

가장 많은 케이스가될 PEG0.PEGP에 대한 수정 방법 입니다.


DSDT.aml / PEG0.PEGP 

    External (PEGP, DeviceObj)
    External (\_SB_.PCI0.PEG0, DeviceObj)
.
.
    Scope (\_SB_.PCI0.PEG0)
    {
           Scope (PEGP)
          {
                  Name (_STA, Zero)
          }
          Device (GFX1)

a) 위 코드를 SSDT-1.aml의 Device (_SB.PCI0.NPE3.GFX1) 코드 위에 붙여 넣습니다. b)의 과정을 보시면 더 잘 이해 되실 겁니다.

/*
 * Intel ACPI Component Architecture
 * AML Disassembler version 20100331
 *
 * Disassembly of iASLTzPejO.aml, Sun Oct  9 01:14:02 2016
 *
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x0000015F (351)
 *     Revision         0x01
 *     Checksum         0x26
 *     OEM ID           "shiloh"
 *     OEM Table ID     "GFX1"
 *     OEM Revision     0x00001000 (4096)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20100331 (537920305)
 */
DefinitionBlock ("iASLTzPejO.aml", "SSDT", 1, "shiloh", "GFX1", 0x00001000)
{
    External (PEGP, DeviceObj)  /* DSDT.aml에 포함된 GPU 정보 코드 */
    External (\_SB_.PCI0.PEG0, DeviceObj)  /* Zero Address 코드 */
 
    Scope (\_SB.PCI0.PEG0) /* Zero Address 를 패치 합니다 */
    {
        Scope (PEGP)  /*  DSDT.aml의 PEGP 주소를 비워냅니다 */
        {
            Name (_STA, Zero)
        }

        Device (GFX1)  /* SMbios는 맥프로6,1이기에 GFX1으로 GPU정보를 로드 합니다 */
        {
            Name (_ADR, Zero)
            Name (_SUN, One)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x0E)
                {
                    "@0,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@1,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@2,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@3,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@4,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@5,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }

        Device (HDAU)   /* Scope 구문안에 있으므로 HDAU를 패치할 패스를 기재 안합니다 */ 
        {
            Name (_ADR, One)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x02)
                {
                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }
    }
}

b) 위 코드는 DSDT.aml에 GPU와 관련된 정보가 없을 때 SSDT-1에서 GPU정보를 참고하라는 의미입니다.
* DSDT에 이미  GPU 정보가 있는 것도 있습니다만, 포트 정보가 인식되냐 안되냐의 문제보다 GPU Device 이름이 SMBIOS 버전에 맞는 GPU 정보가 나오는지가 관건입니다.
* 무작정 DSDT의 디바이스 이름 한 두개  변경 한다고 인젝션이 되지 않습니다. (에러로 인한 DSDT 수정외에는 추가 SSDT등을 통해서 편집하는게 유지 보수 면에서는 간편하다고 할 수 있습니다)
 

 

NPE2.SLT2 : HP Z420 / Z620의 C602, X79 칩셋
* 제가 사용중인 실사용 코드이며 HP Z420용입니다. 타 시스템의 칩셋은 이 것과 다를 수 있습니다.

우선 DSDT.aml 스샷을 보겠습니다.

스크린샷 2016-10-09 오전 2.42.07.png
DSDT상에서 NPE2/SLT2에 그래픽 카드를 설치한 것은 IORegistryExplorer에서 확인한 내용이지만 정작 C602 칩셋의 경우, GPU 관련 정보를 넣으면 여전히 블랙아웃이 생기므로 SSDT에 GPU정보를 인젝션하거나 EFI String으로 블랙 아웃을 회피할 수 있겠습니다. 바로 아래 링크를 누르시면 참고해 보실 수 있습니다

.

클로버 Device Properties를 이용한 EFI String

 


/*
 * Intel ACPI Component Architecture
 * AML Disassembler version 20100331
 *
 * Disassembly of iASL87J1f0.aml, Sat Oct  8 23:32:20 2016
 *
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x0000021F (543)
 *     Revision         0x01
 *     Checksum         0x63
 *     OEM ID           "APPLE "
 *     OEM Table ID     "Devicein"
 *     OEM Revision     0x00015601 (87553)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20100331 (537920305)
 */
DefinitionBlock ("iASL87J1f0.aml", "SSDT", 1, "APPLE ", "Devicein", 0x00015601)
/* 저는 SSDT drop table을 GFX1으로 안하고 Devicein으로 Config.plist에서 로드합니다 */
{
    External (\_SB_.PCI0, DeviceObj)    /* \_SB.PCI0의 전체를 참고 합니다 */
    External (\_SB_.PCI0.NPE2, DeviceObj)   /* \_SB_,PCI0.NPE2를 참고 합니다 */
    External (\_SB_.PCI0.NPE2.SLT2, DeviceObj) /* \_SB_,PCI0.NPE2.SLT2를 참고 합니다 */

    Method (XOSI, 1, NotSerialized)
    {
        Name (WINV, Package (0x06)
        {
            "Windows", 
            "Windows 2001", 
            "Windows 2001 SP2", 
            "Windows 2006", 
            "Windows 2006 SP1", 
            "Windows 2009"
        })
        Return (LNotEqual (Match (WINV, MEQ, Arg0, MTR, Zero, Zero), 
            Ones))
    }

    Scope (\_SB.PCI0)  /* HDEF 관련 패치입니다만 GPU 정보는 아닙니다 */
    {
        Device (HDEF)
        {
            Name (_ADR, 0x001B0000)
            Name (_PRW, Package (0x02)
            {
                0x08, 
                0x04
            })
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x02)
                {
                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }
    }

    Scope (\_SB.PCI0.NPE2.SLT2)  /* SLT2 코드의 제로 어드레스를 비워 냅니다 */
    {
        Name (_STA, Zero)
    }

    Scope (\_SB.PCI0.NPE2)  /* NPE2 코드에 GFX1으로 GPU정보를 로드합니다  */
    {
        Device (GFX1) /* 저도 MacPro6,1로 사용중이라 GPU이름을  GFX1으로 합니다 */
        {
            Name (_ADR, Zero)
            Name (_SUN, 0x05)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x0C)
                {
                    "@0,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x04, 0x00, 0x00
                    }, 

                    "@1,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x08, 0x00, 0x00
                    }, 

                    "@2,connector-type", 
                    Buffer (0x04)
                    {
                        0x00, 0x02, 0x00, 0x00
                    }, 

                    "@3,AAPL,boot-display", 
                    Buffer (Zero) {}, 
                    "@3,connector-type", 
                    Buffer (0x04)
                    {
                        0x04, 0x00, 0x00, 0x00
                    }, 

                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }

        Device (HDAU)  /* Scope 구문안에 있으므로 HDAU를 패치할 패스를 기재 안합니다  */
        {
            Name (_ADR, One)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x02)
                {
                    "hda-gfx", 
                    Buffer (0x0A)
                    {
                        "onboard-1"
                    }
                })
            }
        }
    }
}


 

멀티 GPU

GPU가 장착된 슬롯 번호는 DSDT의 _SUN 함수의 주소를 확인하시면 됩니다

_SUN, One : 1번 슬롯
_SUN, 0x02 :  2번 슬롯
_SUN, 0x03 :  3번 슬롯
_SUN, 0x04 :  4번 슬롯
_SUN, 0x05 :  5번 슬롯... 등등..

 

일반 데스크탑 메인보드라면 CPU에서 가까운 곳이 One에 해당하고 서버 보드들은 CPU에서 먼 곳이 One입니다만, 꼭 _SUN 함수가 중요하진 않습니다. 그 이유중 하나가 EFI String을 할 경우 간혹 _SUN함수로 인해 슬롯 정보가 제대로 인식을 하지 않는 경우가 있기 때문입니다. 

만약 멀티플 GPU를 설정하려면 아래처럼 진행 하시면 됩니다.

가) 첫 번째 GPU는 SSDT-1.aml이며 onboard-1입니다. SSDT Table은  Device1
나) 두 번째 GPU는 SSDT-2.aml이며 onboard-2입니다. SSDT Table은  Device2

이렇게 해주시면 되는데 SSDT Table은 여러분이 인식하기 편한 것으로 하시고, Config.plist에서는 모두 Table Drop되어야 합니다.

 

 

동작 확인
만약 IOResistryExplorer에서 Display 키워드를 입력하고 3차경로가 여러분의 SMBIOS에 맞는 GFX1@0또는 GFX0@0 표시 된다면  이미 블랙 아웃없이 부팅이 되었다는 뜻이겠죠? AGPDFix가 필요 없어지는 시점인 것입니다. 아래 스샷이 정상적으로 동작하는 예제입니다

스크린샷 2016-10-08 오후 9.05.08.png

 

 HP Z420, 620, 820 시리즈 유저는 Recovery mode 진입시  npci=0x3000 부트 플래그를 주고, AsusAICPUPM만 활성화 시킨다음 진입해보세요. 매번 nv_disable=1을 지정했던 옵션을 더이상 하지 않아도 되는 장점이 있습니다. 

 

 

클럽 : 당주

See the Unseen

★ 글쓴이에게 고마우시면 커피한잔 후원(클릭) ★ 후원 정보를 입력하지 않았습니다.

  • HOT Comments 이글에 핫코멘트가 있으며 클릭하시면 바로 이동합니다. (추천 수 : 3 이상)




No 섬네일 제목 조회 닉네임 추천 등록일
870 팁/안정화| HOT Device Properties를 이용한 HP Z420 EFI String 변경(GPU 인젝션 가능) 4 728 zisqo 3 - 0 2016.10.27
869 macOS팁| 시리 사용법 도움말 페이지 222 Mactopia 0 - 0 2016.10.26
868 팁/안정화| HOT Nvidia Webdriver의 OS 버전 패치를 직접 하는 방법 1 711 zisqo 3 - 0 2016.10.26
867 팁/안정화| 앨캐피탄 업데이트 설치후 사운드가 먹통일때! 조치! 5 350 홍대퀸카 0 - 0 2016.10.25
866 팁/안정화| 10.12.1(16B2555) 업데이트 이후 Nvidia 웹 드라이버 설치 오류 9 1087 zisqo 2 - 0 2016.10.25
865 macOS팁| 베타 인증서 받는 곳 180 SenkovLee 2 - 0 2016.10.25
864 팁/안정화| usb 없이 해킨 설치하기! 3 937 대낮의호롱불 0 - 0 2016.10.24
863 macOS팁| MAC을 처음 사용하시나요? 381 Mactopia 0 - 0 2016.10.23
862 macOS팁| 시리 호출 단축키 변경방법 1 219 Mactopia 0 - 0 2016.10.22
861 팁/안정화| aspire v3 571g + bcm94352 업그레이드버전 297 하수 2 - 0 2016.10.21
860 팁/안정화| Cosmetic) SSDT EFI String Injection 6 764 zisqo 1 - 0 2016.10.18
859 팁/안정화| [HP Z420] FL1100 USB 3.0 인식 시키기 (와이파이 모듈 충돌 회피) 4 718 zisqo 2 - 0 2016.10.16
858 팁/안정화| 아이메시지 문자전달 코드 안될 때 해결 방법 8 804 각시수련 2 - 0 2016.10.14
857 팁/안정화| 간편하게 Trim을 활성화 하는 방법 (클로버 부트로더) 7 1040 zisqo 1 - 0 2016.10.14
856 팁/안정화| 시에라 USB3.0 관련 SSDT INJECTION+클로버 패치 1308 Mactopia 2 - 0 2016.10.13
855 팁/안정화| SSD가 링크 속도 3기가로 뜰 경우 해결 방법 7 426 zisqo 1 - 0 2016.10.13
854 팁/안정화| HOT config.plist를 clover configurator어플 이용방법 4 2567 아이뱅크 7 - 0 2016.10.12
853 팁/안정화| (NSRangeException) 디스플레이 환경설정 패널을 로드할 수 없습니다 문제 해결하기 3 613 하늘처럼 1 - 0 2016.10.11
852 macOS팁| 시에라 - 모든곳에서 다운로드한 앱 허용 1 727 Mactopia 1 - 0 2016.10.11
851 팁/안정화| rx480 시에라에서 기본 잡기 입니다. 28 1691 아이뱅크 2 - 0 2016.10.11
850 macOS팁| 맥 OS 바탕화면 사이트 349 Mactopia 0 - 0 2016.10.10
849 강좌/연재| 2016 ~ 2017 맥북시리즈 예상 라인업 6 814 KsJ 1 - 0 2016.10.10
848 macOS팁| 앱스토어 다운로드 이슈 - 캐시삭제 365 Mactopia 0 - 0 2016.10.09
» 팁/안정화| HOT Nvidia GPU를 SSDT-1.aml에 인젝션하는 글타래입니다. 63 2747 zisqo 8 - 0 2016.10.08
846 macOS팁| 씨에라용 Nvidia 드라이버 4 946 마음의창 0 - 0 2016.10.08
845 팁/안정화| HOT HP Z420/620 GPU inject를 통해 nv_disable=1을 벗어나 봅니다 3 778 zisqo 3 - 0 2016.10.08
844 팁/안정화| HOT HP Z420 / Z620 디스플레이 블랙아웃 회피 방법입니다. 7 911 zisqo 3 - 0 2016.10.08
843 macOS팁| HOT 106키 한국어키보드에서 한영키 인식시키기 11 1781 안녕하세요 10 - 0 2016.10.07
842 팁/안정화| HOT 퓨리온님의 시에라&엘캐피탄 16GB 용량초과문제 & dd명령 더 빠르게 2 626 안녕하세요 4 - 0 2016.10.07
841 팁/안정화| 키보드 언어변경 1 345 아이뱅크 0 - 0 2016.10.05
840 팁/안정화| HOT 디스플레이 EDID 정보 편집 방법입니다. 5 962 zisqo 4 - 0 2016.10.04
839 팁/안정화| HOT rx480 관련 글타래 6 1092 KsJ 4 - 0 2016.10.04
838 팁/안정화| 스피드스텝 이후 잠자기에서 깨어나지 않을 때 조치 방법중 하나입니다. 1 704 zisqo 1 - 0 2016.10.04
837 macOS팁| HOT 맥의 키보드 및 디스플레이 설정 초기화 5 711 XEXEX 3 - 0 2016.10.04
836 팁/안정화| [시에라 성공]b150-ds3h 사운드 잡기 alc887 2 1103 SeungHanKim 1 - 0 2016.10.04
835 팁/안정화| VGA -> DVI 컨버터 쓰지 마세요! 2 521 SangHoMetHackin 1 - 0 2016.10.03
834 macOS팁| macOS 또는 OS X에서 Caps lock 키 지연시간 제거방법 (Elimination of Caps lock key delay on 10.11 +) 378 D'Artagnan 1 - 0 2016.09.30
833 팁/안정화| [임시 글타래] RX 480으로 1순위 부팅 이슈 66 1142 D'Artagnan 2 - 0 2016.09.30
832 macOS팁| macOS에서 블루투스 이어폰 사용 시 aptX 코덱을 강제로 활성화하는 방법 3 237 Mactopia 0 - 0 2016.09.29
831 팁/안정화| HOT AGDPfix.app 사용할 필요 없이 바로 그래픽 활성화  5 2005 아이뱅크 3 - 0 2016.09.29
830 팁/안정화| rx480 모니터 케이블 분리 안해도 되는 팁 17 657 comed78 0 - 0 2016.09.29
829 팁/안정화| HOT 시에라 전용 최신 버전 웹드라이버에 문제가 있습니다. (잠자기 이슈, 디스플레이 연결 유실 등) 36 2328 D'Artagnan 4 - 0 2016.09.29
828 팁/안정화| 10.12.1 베타2 에서 AmdRadeonX4100.kext 안정화 작업이 있었네요 4 546 comed78 0 - 0 2016.09.28
827 팁/안정화| HOT 썬더볼트3 지원설정 13 884 아이뱅크 5 - 0 2016.09.28
826 팁/안정화| HOT rx480 깊은 잠자기 테스트 10 691 comed78 4 - 0 2016.09.27
825 팁/안정화| HOT 시에라(Sierra)에서 잠재우기 및 깨우기 설정 2 1451 terminator 7 - 0 2016.09.27
824 팁/안정화| HOT 디스플레이 인치 및 아이콘 변경 방법 (10.12:16A323) 1 642 김찬 5 - 0 2016.09.26
823 팁/안정화| HOT [Solved]HD5200 HDMI Audio+ApplHDA Patcher 1.5 5 578 작은거인 3 - 0 2016.09.25
822 macOS팁| 시에라 알려진 와이파이 버그 해결방법 5 908 Mactopia 1 - 0 2016.09.24
821 팁/안정화| HOT 폴라리스RX470 (480?) 씨에라 10.12.1 PB 에서 정상가속됩니다. 23 1810 봄날 8 - 0 2016.09.23
서버에 요청 중입니다. 잠시만 기다려 주십시오...