x86 주요 단축키
  • 1 X86 톺아보기
  • 2 커스텀맥 최신글
  • 3 파트너즈 최신글
  • 4 커뮤니티 최신글
  • 5 소모임 최신글
  • 6 인생은 랜덤
  • H 단축키 도움말
읽기 최소레벨 지정  

About ZISQO

Phaseone POCP 2017-2019
Phaseone CaptureONE Pro Master Class Instructor in South Korea
Commercial Photographer, Photography Consultant & Intructor, Web & Mobile Developer
PHASEONE, HP, DATACOLOR, X-RITE, EIZO, APPLE, SAEKI P&C

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을 지정했던 옵션을 더이상 하지 않아도 되는 장점이 있습니다. 


#인젝션, #Nvidia, #GPU, #SSDT-1, #SSDT, #그래픽포트, #ZISQO

연관된 글
  1. [2017/07/28] GA-B250M-DS3H, i3-7100, HD 630 Mac OS Sierra 10.12.6 설치 후기 by shl628 (2136, 22) *41
  2. [2017/07/20] 간편하게 마치는 시에라 10.12.6 AMD RX4xx / 5xx 네이티브 설치 by ZISQO (201, 1) *11
  3. [2017/07/19] AMD RX560 단독 부팅 설정 (10.12.6~하이시에라) by ZISQO (208, 4) *7
  4. [2017/07/10] [OOB] Sapphire Tri-X R9 280X OC by ZISQO (214, 2) *8
★ 이 글이 도움이 되셨다면 커피한잔(후원)을 사주세요.(클릭) ★ 글쓴이가 후원 정보를 입력하지 않았습니다.
  • ↩ 씨에라용 Nvidia 드라이버
  • 앱스토어 다운로드 이슈 - 캐시삭제 ↪





이 사이트의 기능을 모두 활용하기 위해서는 자바스크립트를 활성화 시킬 필요가 있습니다.
브라우저에서 자바스크립트를 활성화하는 방법을 참고 하세요.
No 제목 조회 닉네임 등록일
공지
팁 게시판 다운로드 권한 : 꾸준회원 등업 필요 504 mactopia 06.01
820 소트프웨어| 아이메시지 문자전달 코드 해결법 (다른방법) 2 602 각시수련 11.10
819 소트프웨어| Dropbox.app 사용하지 마세요 2 683 comed78 11.09
818 메인보드| i3-6100, Asrock H110M-HDV 시에라 전용 완벽 최적화시킨 config.plist, dsdt 등 부트로더 파일 8 968 D'Artagnan 11.08
817 CPU| 스피드스텝, 제값이 출력돼야 과연 좋은 걸까요? 6 1015 송준섭 11.07
816 공통팁| 시에라 USB3.0 관련 SSDT 생성 커맨드라인 수정한거 올립니다. 8 1467 D'Artagnan 11.05
815 메인보드| 메인보드교체후 엡스토어오류 7 357 아이뱅크 11.04
814 메인보드| HP Z620 이더넷 82574L칩셋 정상인식시키기 18 667 BBongs 11.04
813 소트프웨어| 2016년 맥북프로 nvram 재설정 방법 404 mactopia 11.03
812 그래픽| 부트 arg for applesklgraphic.kext 1 121 mactopia 11.03
811 메인보드| B85m-d3h 보드 -오류 __UEFI방식으로 USB설치시__바이오스 최신 필수 561 빗소리들으며 11.03
810 소트프웨어| 시에라 HD530 글리치 이슈 해결팁이 나왔습니다. 12 2127 soullees 11.03
809 메인보드| 기가바이트 B85M-D3H Rev 3.0 한 방 설치를 간편하게 모아 봤습니다. 6 1662 ZISQO 11.03
808 메인보드| Laptop HD530 부팅화면 애플로고 깨짐 DSDT fix 1 1087 comed78 11.02
807 사운드| 퓨리온님의 사운드잡아볼까요? 보충입니다. 3 2848 아이뱅크 10.31
806 메인보드| HP Z420 MOD BIOS v3.91 16 1108 ZISQO 10.30
805 소트프웨어| 시에라(Sierra)의 사파리가 시스템 다운 시키는 문제 패치 1 632 terminator 10.29
804 그래픽| Device Properties를 이용한 HP Z420 EFI String 변경(GPU 인젝션 가능) 4 992 ZISQO 10.27
803 소트프웨어| 시리 사용법 도움말 페이지 385 mactopia 10.26
802 그래픽| Nvidia Webdriver의 OS 버전 패치를 직접 하는 방법 1 923 ZISQO 10.26
801 사운드| 앨캐피탄 업데이트 설치후 사운드가 먹통일때! 조치! 5 419 홍대퀸카 10.25
800 그래픽| 10.12.1(16B2555) 업데이트 이후 Nvidia 웹 드라이버 설치 오류 9 1389 ZISQO 10.25
799 소트프웨어| 베타 인증서 받는 곳 247 SenkovLee 10.25
798 공통팁| usb 없이 커맥 설치하기! 3 1219 대낮의호롱불 10.24
797 소트프웨어| MAC을 처음 사용하시나요? 497 mactopia 10.23
796 소트프웨어| 시리 호출 단축키 변경방법 1 302 mactopia 10.22
795 소트프웨어| Cosmetic) SSDT EFI String Injection 6 971 ZISQO 10.18
794 소트프웨어| 아이메시지 문자전달 코드 안될 때 해결 방법 8 1193 각시수련 10.14
793 공통팁| 간편하게 Trim을 활성화 하는 방법 (클로버 부트로더) 7 1449 ZISQO 10.14
792 메인보드| 시에라 USB3.0 관련 SSDT INJECTION+클로버 패치 2091 mactopia 10.13
791 공통팁| config.plist를 clover configurator어플 이용방법 7 4403 아이뱅크 10.12
790 증상별팁| (NSRangeException) 디스플레이 환경설정 패널을 로드할 수 없습니다 문제 해결하기 4 879 하늘처럼 10.11
789 소트프웨어| 시에라 - 모든곳에서 다운로드한 앱 허용 1 940 mactopia 10.11
788 그래픽| rx480 시에라에서 기본 잡기 입니다. 28 2292 아이뱅크 10.11
787 소트프웨어| 맥 OS 바탕화면 사이트 424 mactopia 10.10
786 공통팁| 2016 ~ 2017 맥북시리즈 예상 라인업 6 1254 KsJ 10.10
785 소트프웨어| 앱스토어 다운로드 이슈 - 캐시삭제 501 mactopia 10.09
» 그래픽| HOT| Nvidia GPU를 SSDT-1.aml에 인젝션하는 글타래입니다. 63 3676 ZISQO 10.08
783 소트프웨어| 씨에라용 Nvidia 드라이버 4 1284 마음의창 10.08
782 메인보드| HP Z420/620 GPU inject를 통해 nv_disable=1을 벗어나 봅니다 3 1132 ZISQO 10.08
781 메인보드| HP Z420 / Z620 디스플레이 블랙아웃 회피 방법입니다. 7 1290 ZISQO 10.08
서버에 요청 중입니다. 잠시만 기다려 주십시오...