100% 당첨매일매일 출석 도장 찍고 포인트 받아가세요
  • X86 통합검색
    X86 기상정보
    흐림 9

    중구 필동, 23:38 현재

    현재바람
    동 2m/s
    현재습도
    97%
    통합대기
    좋음

    X86 운영알림판
    레벨 글쓴이가 전체공개한 글 입니다.
    💯11 17

    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

    💯11 17
    https://x86.co.kr/@ZISQO [ Lv12 | 팔로워 17 | 팔로잉 1 | 글 336 | 댓글 2698 | 포인트 151730P | 가입 575일 | 도장 95bb6]

    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

    ZISQO's 팔로잉 보기
  • ZISQO profile |
    • HOT Comments 이글에 핫코멘트가 있으며 클릭하시면 바로 이동합니다. (추천 수 : 3 이상)

     


  • 그냥 가실건가요? 댓글로 이 글을 더 풍성하게~
    No 레벨 제목 추천 닉네임 조회
    공지
    [퍼옴] Common Problems in 10.13 High Sierra 8 14-0
    좌절금지
    1136
    공지
    클로버 컨피규레이터 기본 사전 17.09.07 58 55-0
    ariC.
    3416
    공지
    입문자를 위한 x86 안내서 110 65-0
    아이뱅크
    68875
    538 메인보드 | HOT | 25 22-0
    DavidKim
    4547
    537 커맥팁 | 15 5-0
    아이뱅크
    1555
    536 커맥팁 | 1 0-0
    LeeDeaRi
    530
    535 커맥팁 | 2 1-0
    ham
    631
    534 커맥팁 | 3 4-0
    아이뱅크
    1812
    533 사운드 | 2 2-0
    순덕아
    925
    532 메인보드 | 9 7-0
    D'Art
    1116
    531 CPU | 6 1-0
    송준섭
    1230
    530 커맥팁 | 10 6-0
    D'Art
    1818
    529 메인보드 | 7 3-0
    아이뱅크
    453
    528 메인보드 | 18 3-0
    BBongs
    907
    527 그래픽 | 1 0-0
    mactopia
    199
    526 메인보드 | 0-0
    빗소리들으며
    720
    525 커맥팁 | 12 4-0
    soullees
    2487
    524 메인보드 | 9 4-0
    ZISQO
    2066
    523 메인보드 | 1 1-0
    comed78
    1219
    522 사운드 | 5 6-0
    아이뱅크
    3503
    521 메인보드 | 16 5-0
    ZISQO
    1321
    520 그래픽 | 4 3-0
    ZISQO
    1186
    519 그래픽 | 1 5-0
    ZISQO
    1058
    518 사운드 | 5 0-0
    홍대퀸카
    501
    517 그래픽 | 9 2-0
    ZISQO
    1581
    516 커맥팁 | 3 0-0
    대낮의호롱불
    1335
    515 커맥팁 | 6 1-0
    ZISQO
    1124
    514 커맥팁 | 8 3-0
    ZISQO
    1812
    513 메인보드 | 4-0
    mactopia
    2852
    512 커맥팁 | HOT | 10 12-0
    아이뱅크
    6573
    511 커맥팁 | 4 1-0
    하늘처럼
    1058
    510 그래픽 | 28 2-0
    아이뱅크
    2488
    509 커맥팁 | 6 1-0
    KsJ
    1289
    »»» 그래픽 | HOT | 63 11-0
    ZISQO
    4191
    507 메인보드 | 3 4-0
    ZISQO
    1234
    506 메인보드 | 7 3-0
    ZISQO
    1506
    505 커맥팁 | 2 4-0
    안녕하세요
    774
    504