X86.CO.KR

100% 당첨매일매일 출석 도장 찍고 포인트 받아가세요
  • 일반모드 다크나이트모드 다크모드
    직구 지름 도우미
    미국 달러
    1 USD 1000 KRW
    1132.69 1000
    1 0.883
    113.436 100.147
    6.9076 6.098
    0.88422 0.781
    0.79441 0.701
    7.8134 6.898
    4.18504 3.695
    1.37704 1.216
    Sun Dec 16 2018 2:37:39 UTC Informational purposes only.
    Extra Form
    공유레벨 글쓴이가 전체공개한 글 입니다.

    바로 1편을 작성하고 2편을 작성해봅니다 ㅎㅎㅎ...

    시간이 있을 때, 그리고 그간 작성을 하도 못하다보니... 밀린걸 다 처리한다는 느낌이

    생각보다 많이 들긴 합니다만, 그래도 전 계속 적으려 합니다. (헣헣)


    요번편은 SSDT를 아에 통째로 복붙해넣고 다 뜯어보도록 할겁니다.... 글이 길어질 수 있으니!

    주의 부탁드리도록 하겠습니다 :)


    /*

     * Intel ACPI Component Architecture

     * AML Disassembler version 20140210-00 [Feb 10 2014]

     * Copyright (c) 2000 - 2014 Intel Corporation

     * 

     * Original Table Header:

     *     Signature        "SSDT"

     *     Length           0x0000036A (874)

     *     Revision         0x01

     *     Checksum         0x00

     *     OEM ID           "APPLE "

     *     OEM Table ID     "CpuPm"

     *     OEM Revision     0x00017600 (95744)

     *     Compiler ID      "INTL"

     *     Compiler Version 0x20140210 (538182160)

     */


    DefinitionBlock ("ssdt.aml", "SSDT", 1, "APPLE ", "CpuPm", 0x00017600)

    {

        External (\_PR.CPU4, DeviceObj)

        External (\_PR.CPU5, DeviceObj)

        External (\_PR.CPU6, DeviceObj)

        External (\_PR.CPU7, DeviceObj)


        Scope (\_PR.CPU4)

        {

            Method (_INI, 0, NotSerialized)

            {

                Store ("ssdtPRGen version....: 17.6 / Mac OS X 10.11.3 (15D21)", Debug)

                Store ("custom mode..........: 0", Debug)

                Store ("host processor.......: Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz", Debug)

                Store ("target processor.....: i5-4670", Debug)

                Store ("number of processors.: 1", Debug)

                Store ("baseFrequency........: 800", Debug)

                Store ("frequency............: 3400", Debug)

                Store ("busFrequency.........: 100", Debug)

                Store ("logicalCPUs..........: 4", Debug)

                Store ("maximum TDP..........: 84", Debug)

                Store ("packageLength........: 31", Debug)

                Store ("turboStates..........: 4", Debug)

                Store ("maxTurboFrequency....: 3800", Debug)

                Store ("machdep.xcpm.mode....: 1", Debug)

            }


            Name (APLF, Zero)

            Name (APSN, 0x04)

            Name (APSS, Package (0x1F)

            {

                /* High Frequency Modes (turbo) */

                Package (0x06) { 0x0ED8, 0x014820, 0x0A, 0x0A, 0x2600, 0x2600 },

                Package (0x06) { 0x0E74, 0x014820, 0x0A, 0x0A, 0x2500, 0x2500 },

                Package (0x06) { 0x0E10, 0x014820, 0x0A, 0x0A, 0x2400, 0x2400 },

                Package (0x06) { 0x0DAC, 0x014820, 0x0A, 0x0A, 0x2300, 0x2300 },

                /* High Frequency Modes (non-turbo) */

                Package (0x06) { 0x0D48, 0x014820, 0x0A, 0x0A, 0x2200, 0x2200 },

                Package (0x06) { 0x0CE4, 0x013ADD, 0x0A, 0x0A, 0x2100, 0x2100 },

                Package (0x06) { 0x0C80, 0x012DD8, 0x0A, 0x0A, 0x2000, 0x2000 },

                Package (0x06) { 0x0C1C, 0x01210F, 0x0A, 0x0A, 0x1F00, 0x1F00 },

                Package (0x06) { 0x0BB8, 0x011482, 0x0A, 0x0A, 0x1E00, 0x1E00 },

                Package (0x06) { 0x0B54, 0x010831, 0x0A, 0x0A, 0x1D00, 0x1D00 },

                Package (0x06) { 0x0AF0, 0x00FC1C, 0x0A, 0x0A, 0x1C00, 0x1C00 },

                Package (0x06) { 0x0A8C, 0x00F041, 0x0A, 0x0A, 0x1B00, 0x1B00 },

                Package (0x06) { 0x0A28, 0x00E4A0, 0x0A, 0x0A, 0x1A00, 0x1A00 },

                Package (0x06) { 0x09C4, 0x00D939, 0x0A, 0x0A, 0x1900, 0x1900 },

                Package (0x06) { 0x0960, 0x00CE0B, 0x0A, 0x0A, 0x1800, 0x1800 },

                Package (0x06) { 0x08FC, 0x00C316, 0x0A, 0x0A, 0x1700, 0x1700 },

                Package (0x06) { 0x0898, 0x00B859, 0x0A, 0x0A, 0x1600, 0x1600 },

                Package (0x06) { 0x0834, 0x00ADD4, 0x0A, 0x0A, 0x1500, 0x1500 },

                Package (0x06) { 0x07D0, 0x00A387, 0x0A, 0x0A, 0x1400, 0x1400 },

                Package (0x06) { 0x076C, 0x009970, 0x0A, 0x0A, 0x1300, 0x1300 },

                Package (0x06) { 0x0708, 0x008F90, 0x0A, 0x0A, 0x1200, 0x1200 },

                Package (0x06) { 0x06A4, 0x0085E6, 0x0A, 0x0A, 0x1100, 0x1100 },

                Package (0x06) { 0x0640, 0x007C71, 0x0A, 0x0A, 0x1000, 0x1000 },

                Package (0x06) { 0x05DC, 0x007331, 0x0A, 0x0A, 0x0F00, 0x0F00 },

                Package (0x06) { 0x0578, 0x006A25, 0x0A, 0x0A, 0x0E00, 0x0E00 },

                Package (0x06) { 0x0514, 0x00614E, 0x0A, 0x0A, 0x0D00, 0x0D00 },

                Package (0x06) { 0x04B0, 0x0058AA, 0x0A, 0x0A, 0x0C00, 0x0C00 },

                Package (0x06) { 0x044C, 0x005039, 0x0A, 0x0A, 0x0B00, 0x0B00 },

                Package (0x06) { 0x03E8, 0x0047FB, 0x0A, 0x0A, 0x0A00, 0x0A00 },

                Package (0x06) { 0x0384, 0x003FEE, 0x0A, 0x0A, 0x0900, 0x0900 },

                /* Low Frequency Mode */

                Package (0x06) { 0x0320, 0x003814, 0x0A, 0x0A, 0x0800, 0x0800 }

            })


            Method (ACST, 0, NotSerialized)

            {

                Store ("Method _PR.CPU4.ACST Called", Debug)

                Store ("CPU4 C-States    : 29", Debug)


                /* Low Power Modes for CPU4 */

                Return (Package (0x06)

                {

                    One,

                    0x04,

                    Package (0x04)

                    {

                        ResourceTemplate ()

                        {

                            Register (FFixedHW,

                                0x01,               // Bit Width

                                0x02,               // Bit Offset

                                0x0000000000000000, // Address

                                0x01,               // Access Size

                                )

                        },

                        One,

                        Zero,

                        0x03E8

                    },


                    Package (0x04)

                    {

                        ResourceTemplate ()

                        {

                            Register (FFixedHW,

                                0x01,               // Bit Width

                                0x02,               // Bit Offset

                                0x0000000000000010, // Address

                                0x03,               // Access Size

                                )

                        },

                        0x03,

                        0xCD,

                        0x01F4

                    },


                    Package (0x04)

                    {

                        ResourceTemplate ()

                        {

                            Register (FFixedHW,

                                0x01,               // Bit Width

                                0x02,               // Bit Offset

                                0x0000000000000020, // Address

                                0x03,               // Access Size

                                )

                        },

                        0x06,

                        0xF5,

                        0x015E

                    },


                    Package (0x04)

                    {

                        ResourceTemplate ()

                        {

                            Register (FFixedHW,

                                0x01,               // Bit Width

                                0x02,               // Bit Offset

                                0x0000000000000030, // Address

                                0x03,               // Access Size

                                )

                        },

                        0x07,

                        0xF5,

                        0xC8

                    }

                })

            }


            Method (_DSM, 4, NotSerialized)

            {

                Store ("Method _PR.CPU4._DSM Called", Debug)


                If (LEqual (Arg2, Zero))

                {

                    Return (Buffer (One)

                    {

                        0x03

                    })

                }


                Return (Package (0x02)

                {

                    "plugin-type",

                    One

                })

            }

        }


        Scope (\_PR.CPU5)

        {

            Method (APSS, 0, NotSerialized)

            {

                Store ("Method _PR.CPU5.APSS Called", Debug)


                Return (\_PR.CPU4.APSS)

            }


            Method (ACST, 0, NotSerialized)

            {

                Store ("Method _PR.CPU5.ACST Called", Debug)

                Store ("CPU5 C-States    : 7", Debug)


                /* Low Power Modes for CPU5 */

                Return (Package (0x05)

                {

                    One,

                    0x03,

                    Package (0x04)

                    {

                        ResourceTemplate ()

                        {

                            Register (FFixedHW,

                                0x01,               // Bit Width

                                0x02,               // Bit Offset

                                0x0000000000000000, // Address

                                0x01,               // Access Size

                                )

                        },

                        One,

                        0x03E8,

                        0x03E8

                    },


                    Package (0x04)

                    {

                        ResourceTemplate ()

                        {

                            Register (FFixedHW,

                                0x01,               // Bit Width

                                0x02,               // Bit Offset

                                0x0000000000000010, // Address

                                0x03,               // Access Size

                                )

                        },

                        0x02,

                        0x94,

                        0x01F4

                    },


                    Package (0x04)

                    {

                        ResourceTemplate ()

                        {

                            Register (FFixedHW,

                                0x01,               // Bit Width

                                0x02,               // Bit Offset

                                0x0000000000000030, // Address

                                0x03,               // Access Size

                                )

                        },

                        0x03,

                        0xC6,

                        0xC8

                    }

                })

            }

        }


        Scope (\_PR.CPU6)

        {

            Method (APSS, 0, NotSerialized)

            {

                Store ("Method _PR.CPU6.APSS Called", Debug)


                Return (\_PR.CPU4.APSS)

            }


            Method (ACST, 0, NotSerialized) { Return (\_PR.CPU5.ACST ()) }

        }


        Scope (\_PR.CPU7)

        {

            Method (APSS, 0, NotSerialized)

            {

                Store ("Method _PR.CPU7.APSS Called", Debug)


                Return (\_PR.CPU4.APSS)

            }


            Method (ACST, 0, NotSerialized) { Return (\_PR.CPU5.ACST ()) }

        }

    }


    이제부터 위의 내용을 가지고 하나하나 뜯어보도록 하겠습니다.

    DefinitionBlock ("ssdt.aml", "SSDT", 1, "APPLE ", "CpuPm", 0x00017600)
    이 부분은 ssdt의 시작을 알리는 정의블록 구간입니다. CpuPm을 통하여 cpu관련 ssdt임을 시스템이 파악할 수 있습니다.

    External (\_PR.CPU4, DeviceObj)
    이부분은 DSDT연동구문입니다만, 정확하게는
    외부로부터 함수를 참조해오는겁니다.

    씨퓨4부분에 관한걸 다른 테이블에서 찾아서 참조해달라는 것이지요.

    Scope (\_PR.CPU4)
    이 스코프구문으로 해당 씨피유에 관한 정보를 
    통째로 감싸게 됩니다.

    Method (_INI, 0, NotSerialized)
    미리 정의해주는것입니다. 별로 중요한 내용은 아닙니다.

    Name (APLF, Zero)
    이부분은 LowFrequencyPState와 관련이 있는 부분입니다.

    파커즈 아저씨가 작성해둔 ssdtPRGen.sh를 통해 살펴보면,
    샌디브릿지가 아닌 기종은 이 값이 0으로 설정됩니다.

    그리고 아이비 브릿지 경우에는 이 값이 또 다르게 설정되는데요
    정확하게는 자신의 씨피유가 최저 클락배수로 1000까지밖에 지원하지 않는다고 칩니다.
    그리고 버스 프리퀀시는 100이구요

    그러면 1000/100을 하면 10이 나옵니다. 이게 로우 프리퀀시 라티오 (배율)값인데
    이값에서 기본 디폴트인 8을 제하면 2가나옵니다.

    한마디로 800~1000사이인 동작속도에 관한 값이라 보시면 되겠습니다.
    스테이츠므로 개수로 파악되어 APLF에 16진수로 표기됩니다.

    Name (APSN, 0x04)
    이 값은 위와 정 반대입니다.
    터보부스트 지원 씨피유인 경우에는 그 값에서 논터보 최고 동작값을 제합니다.
    그 사이 구간갯수만큼이 위 값에 16진수로 쓰여집니다.

    예컨데 자신의 씨퓨가 3300이 논터보 최고고, 3900이 터보 최고값이면
    3900 - 3300하여 나온 600을 버스프리퀀시 (100)로나눈 6값이 해당 값이 되는 것입니다.

    Name (APSS, Package (0x1F)
            {
                /* High Frequency Modes (turbo) */
                Package (0x06) { 0x0ED8, 0x014820, 0x0A, 0x0A, 0x2600, 0x2600 },
                Package (0x06) { 0x0E74, 0x014820, 0x0A, 0x0A, 0x2500, 0x2500 },
                Package (0x06) { 0x0E10, 0x014820, 0x0A, 0x0A, 0x2400, 0x2400 },
                Package (0x06) { 0x0DAC, 0x014820, 0x0A, 0x0A, 0x2300, 0x2300 },
                /* High Frequency Modes (non-turbo) */
                Package (0x06) { 0x0D48, 0x014820, 0x0A, 0x0A, 0x2200, 0x2200 },
                Package (0x06) { 0x0CE4, 0x013ADD, 0x0A, 0x0A, 0x2100, 0x2100 },
                Package (0x06) { 0x0C80, 0x012DD8, 0x0A, 0x0A, 0x2000, 0x2000 },
                Package (0x06) { 0x0C1C, 0x01210F, 0x0A, 0x0A, 0x1F00, 0x1F00 },
                Package (0x06) { 0x0BB8, 0x011482, 0x0A, 0x0A, 0x1E00, 0x1E00 },
                Package (0x06) { 0x0B54, 0x010831, 0x0A, 0x0A, 0x1D00, 0x1D00 },
                Package (0x06) { 0x0AF0, 0x00FC1C, 0x0A, 0x0A, 0x1C00, 0x1C00 },
                Package (0x06) { 0x0A8C, 0x00F041, 0x0A, 0x0A, 0x1B00, 0x1B00 },
                Package (0x06) { 0x0A28, 0x00E4A0, 0x0A, 0x0A, 0x1A00, 0x1A00 },
                Package (0x06) { 0x09C4, 0x00D939, 0x0A, 0x0A, 0x1900, 0x1900 },
                Package (0x06) { 0x0960, 0x00CE0B, 0x0A, 0x0A, 0x1800, 0x1800 },
                Package (0x06) { 0x08FC, 0x00C316, 0x0A, 0x0A, 0x1700, 0x1700 },
                Package (0x06) { 0x0898, 0x00B859, 0x0A, 0x0A, 0x1600, 0x1600 },
                Package (0x06) { 0x0834, 0x00ADD4, 0x0A, 0x0A, 0x1500, 0x1500 },
                Package (0x06) { 0x07D0, 0x00A387, 0x0A, 0x0A, 0x1400, 0x1400 },
                Package (0x06) { 0x076C, 0x009970, 0x0A, 0x0A, 0x1300, 0x1300 },
                Package (0x06) { 0x0708, 0x008F90, 0x0A, 0x0A, 0x1200, 0x1200 },
                Package (0x06) { 0x06A4, 0x0085E6, 0x0A, 0x0A, 0x1100, 0x1100 },
                Package (0x06) { 0x0640, 0x007C71, 0x0A, 0x0A, 0x1000, 0x1000 },
                Package (0x06) { 0x05DC, 0x007331, 0x0A, 0x0A, 0x0F00, 0x0F00 },
                Package (0x06) { 0x0578, 0x006A25, 0x0A, 0x0A, 0x0E00, 0x0E00 },
                Package (0x06) { 0x0514, 0x00614E, 0x0A, 0x0A, 0x0D00, 0x0D00 },
                Package (0x06) { 0x04B0, 0x0058AA, 0x0A, 0x0A, 0x0C00, 0x0C00 },
                Package (0x06) { 0x044C, 0x005039, 0x0A, 0x0A, 0x0B00, 0x0B00 },
                Package (0x06) { 0x03E8, 0x0047FB, 0x0A, 0x0A, 0x0A00, 0x0A00 },
                Package (0x06) { 0x0384, 0x003FEE, 0x0A, 0x0A, 0x0900, 0x0900 },
                /* Low Frequency Mode */
                Package (0x06) { 0x0320, 0x003814, 0x0A, 0x0A, 0x0800, 0x0800 }
            })

    이 부분은 이제 P-State에 관하여 기술해둔 부분입니다.
    이 모든게 특정 공식으로 나온 값들이기 때문에
    딱 한줄만 살펴보도록 하겠습니다.

    하나만 알면 나머지는 동일하게 계산되므로 쉬워요~

    Package (0x06) { 0x0CE4, 0x013ADD, 0x0A, 0x0A, 0x2100, 0x2100 },
    이 값을 모르모트로 삼도록 하겠습니다.

    0CE4를 10진수 변환하면? 3300이 나옵니다.
    한마디로 3300MHz를 의미합니다.

    0x013ADD이 값은 3300Mhz로 동작할때 씨피유가 소모하는
    P-state TDP값입니다.

    계산방식이 매우 복잡합니다 ;;

    우선 자신의 논터보 최고 동작속도의 배율값을 기준으로 잡습니다.
    만약 논터보 최고동작속도가 3300이라면 33, 3500이라면 35로합니다.
    그리고 자신이 계산하려고 하는 씨피유의 동작속도의 배율을 빼줍니다.

    위 경우는 34에서 33을 빼주므로 1이됩니다.
    이 1에다 0.00625를 곱해줍니다.

    그리고 이걸 1.1에서 빼줍니다.
    1.09375이 나올텐데 이것을 다시 1.1로 나누어줍니다
    그러면 0.994318181818182값이 나옵니다...

    이걸 제곱해줍니다. 0.988668646694215이 나오는군요.

    그리고 여기다가 33/34한 값을 곱해주면 됩니다.
    이 계산법은 만약 현재 동작속도가 3200이고 자신의 논터보 맥스값이 38이라면?
    32/38로 바뀌어집니다.

    저희는 논터보 3400에 현재 동작속도인 3300을 작성중이므로!
    33/34를 해줍니다.

    0.970588235294118이 나오는군요
    이걸 위에 제곱해준 값이랑 곱해줍니다.

    0.959590157085562이라는 값이 나옵니다.
    여기다가 Max TDP를 곱해줍니다.

    해당씨퓨는 84w이므로 84를 곱해줍니다.
    80.605573195187176라는 값이 나옵니다.

    이것은 와트의 기준이므로 mw로 환산하여야 하기때문에
    1000을 또 곱해줍니다.

    80605.573195187175882이 나옵니다.
    소수점은 과감히 버려주고, 80605를 16진수로 바꾸어줍니다!

    0x13ADD로 나옵니다.
    이런식으로?? 복잡하게 계산되어 표기됩니다 ㅎㅎ...

    그리고 0A, 0A는 기본값이므로 그냥 그대로 적어줍니다.
    마지막으로 0CE4가 3300이므로 이값의 배율은? 33입니다.

    33을 16진수로 표기해줍니다.. 0x21로 표기됩니다.
    이걸 4자리 16진수로 변환해주어야 하는데

    만약 버스프리퀀시가 100단위라면
    0x2100으로 표기해주며 133이나 166등이라면 0x0021로 표기해주면 됩니다.
    이렇게 패키지갯수인 800~3800까지 모두 작성됩니다...!

    Method (ACST, 0, NotSerialized)
            {
                Store ("Method _PR.CPU0.ACST Called", Debug)
                Store ("CPU0 C-States    : 29", Debug)

                /* Low Power Modes for CPU0 */

    이부분은 이제 C-State를 정의해준다는걸 알리는 것입니다.
    해당 숫자 29를 보시면 의아해 하실겁니다.

    해당 C-state는 자신만의 고유 넘버가 있습니다.

    C1/C1E -> 1,
    C2 -> 2
    C3 -> 4
    C6 -> 8
    C7 -> 16
    C8 -> 32
    C9 -> 64
    C10 -> 128

    따라서 자신이 지원하는 씨피유의 C-State를 확인하시여
    해당하는 고유 넘버를 다 더해줍니다

    29의경우는 C1/C1E, C3, C6, C7이렇게 4개입니다.

    Return (Package (0x06)
                {
                    One,
                    0x04,
                    Package (0x04)
                    {
                        ResourceTemplate ()
                        {
                            Register (FFixedHW,
                                0x01,               // Bit Width
                                0x02,               // Bit Offset
                                0x0000000000000000, // Address
                                0x01,               // Access Size
                                )
                        },
                        One,
                        Zero,
                        0x03E8
                    },

    리턴은 반환값이며 패키지 06은 6개를 의미합니다.

    참고로 위값은 6개를 넘어보이지만 컴마를 잘 구분하셔서 보시면
    반환하는게 One, 0x04, Package (0x04) {}, 이렇게 3개뿐입니다.

    패키지 안에 패키지가 펼쳐져 있어서 많아보이는 것이지요 ㅎㅎㅎ
    저기서 Address값은 동작하는 씨 스테이트값마다 다르게변합니다.

    그외에 비트 길이, 오프셋, 엑세스사이즈는 변하지 않습니다.

    C1부터 차례대로 0x10씩 더해줍니다. (물론 16진수기준입니다)
    C1,C2,C3,C6를 지원하면 순서는
    00,10,20,30 순으로 매겨지겠죠?

    그리고 C7의 경우에는 만약 자신의 차례때에
    이미 C6값이 30이라면 0x31로 표기해주어야 한다는 제약이 있습니다.
    만약 C6에 매겨진 어드레스값이 20이라면? 30으로 해주시면 됩니다.

    그리고 아래의 One, Zero, 0x03E8이라는 값이 보이실겁니다.
    이 값들은 차례대로 자신이 무슨 동작인지를 알리며,
    기다려야하는 레이턴시값과 소모하는 파워값을 의미합니다.

    4세대 씨피유 기술문서에 따르면 C1E가 지원하는 최고 맥스 TDP값은
    26와트입니다. 이것을 16진수로 변경해줍니다.

    아, 변경하기 전에 이 값에 x 100을 꼬옥 해줍니다.
    고로 2600을 변환하는 것입니다.

    0xA28이라는 값이 나옵니다.
    잘못되었군요! 0x3E8을 고쳐줍니다.

    그리고 레이턴시값은... FACP를 참조하여 작성하면 됩니다.
    위경우는 0이므로 Zero가 됩니다.

    이런식으로 SSDT가 작성되고 구현되어집니다.
    설명이라기 보다는 그냥 해석하는 수준으로 글이 작성되어져 버렸습니다 ㅎㅎ...

    제가 만들어둔 eFxsDiT 프로그램도 위의 방식을 기준으로하여
    작성된 프로그램입니다. :) 그래서 여러분께 요구하는 씨피유 자료가 많았던 것이지요 -_-;;;;

    사람이 노가다로 작성할 것이 못됩니다..... (흑)

    자신이 원하는 부분만을 건드려 ACST를 없애고 apss만 남겨주는식으로 만들어주면
    아래와같이 재작성됩니다.

    /*

     * Intel ACPI Component Architecture

     * AML Disassembler version 20140210-00 [Feb 10 2014]

     * Copyright (c) 2000 - 2014 Intel Corporation

     * 

     * Original Table Header:

     *     Signature        "SSDT"

     *     Length           0x0000036A (874)

     *     Revision         0x01

     *     Checksum         0x00

     *     OEM ID           "APPLE "

     *     OEM Table ID     "CpuPm"

     *     OEM Revision     0x00017600 (95744)

     *     Compiler ID      "INTL"

     *     Compiler Version 0x20140210 (538182160)

     */


    DefinitionBlock ("ssdt.aml", "SSDT", 1, "APPLE ", "CpuPm", 0x00017600)

    {

        External (\_PR.CPU4, DeviceObj)

        External (\_PR.CPU5, DeviceObj)

        External (\_PR.CPU6, DeviceObj)

        External (\_PR.CPU7, DeviceObj)


        Scope (\_PR.CPU4)

        {

            Method (_INI, 0, NotSerialized)

            {

                Store ("ssdtPRGen version....: 17.6 / Mac OS X 10.11.3 (15D21)", Debug)

                Store ("custom mode..........: 0", Debug)

                Store ("host processor.......: Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz", Debug)

                Store ("target processor.....: i5-4670", Debug)

                Store ("number of processors.: 1", Debug)

                Store ("baseFrequency........: 800", Debug)

                Store ("frequency............: 3400", Debug)

                Store ("busFrequency.........: 100", Debug)

                Store ("logicalCPUs..........: 4", Debug)

                Store ("maximum TDP..........: 84", Debug)

                Store ("packageLength........: 31", Debug)

                Store ("turboStates..........: 4", Debug)

                Store ("maxTurboFrequency....: 3800", Debug)

                Store ("machdep.xcpm.mode....: 1", Debug)

            }


            Name (APLF, Zero)

            Name (APSN, 0x04)

            Name (APSS, Package (0x1F)

            {

                /* High Frequency Modes (turbo) */

                Package (0x06) { 0x0ED8, 0x014820, 0x0A, 0x0A, 0x2600, 0x2600 },

                Package (0x06) { 0x0E74, 0x014820, 0x0A, 0x0A, 0x2500, 0x2500 },

                Package (0x06) { 0x0E10, 0x014820, 0x0A, 0x0A, 0x2400, 0x2400 },

                Package (0x06) { 0x0DAC, 0x014820, 0x0A, 0x0A, 0x2300, 0x2300 },

                /* High Frequency Modes (non-turbo) */

                Package (0x06) { 0x0D48, 0x014820, 0x0A, 0x0A, 0x2200, 0x2200 },

                Package (0x06) { 0x0CE4, 0x013ADD, 0x0A, 0x0A, 0x2100, 0x2100 },

                Package (0x06) { 0x0C80, 0x012DD8, 0x0A, 0x0A, 0x2000, 0x2000 },

                Package (0x06) { 0x0C1C, 0x01210F, 0x0A, 0x0A, 0x1F00, 0x1F00 },

                Package (0x06) { 0x0BB8, 0x011482, 0x0A, 0x0A, 0x1E00, 0x1E00 },

                Package (0x06) { 0x0B54, 0x010831, 0x0A, 0x0A, 0x1D00, 0x1D00 },

                Package (0x06) { 0x0AF0, 0x00FC1C, 0x0A, 0x0A, 0x1C00, 0x1C00 },

                Package (0x06) { 0x0A8C, 0x00F041, 0x0A, 0x0A, 0x1B00, 0x1B00 },

                Package (0x06) { 0x0A28, 0x00E4A0, 0x0A, 0x0A, 0x1A00, 0x1A00 },

                Package (0x06) { 0x09C4, 0x00D939, 0x0A, 0x0A, 0x1900, 0x1900 },

                Package (0x06) { 0x0960, 0x00CE0B, 0x0A, 0x0A, 0x1800, 0x1800 },

                Package (0x06) { 0x08FC, 0x00C316, 0x0A, 0x0A, 0x1700, 0x1700 },

                Package (0x06) { 0x0898, 0x00B859, 0x0A, 0x0A, 0x1600, 0x1600 },

                Package (0x06) { 0x0834, 0x00ADD4, 0x0A, 0x0A, 0x1500, 0x1500 },

                Package (0x06) { 0x07D0, 0x00A387, 0x0A, 0x0A, 0x1400, 0x1400 },

                Package (0x06) { 0x076C, 0x009970, 0x0A, 0x0A, 0x1300, 0x1300 },

                Package (0x06) { 0x0708, 0x008F90, 0x0A, 0x0A, 0x1200, 0x1200 },

                Package (0x06) { 0x06A4, 0x0085E6, 0x0A, 0x0A, 0x1100, 0x1100 },

                Package (0x06) { 0x0640, 0x007C71, 0x0A, 0x0A, 0x1000, 0x1000 },

                Package (0x06) { 0x05DC, 0x007331, 0x0A, 0x0A, 0x0F00, 0x0F00 },

                Package (0x06) { 0x0578, 0x006A25, 0x0A, 0x0A, 0x0E00, 0x0E00 },

                Package (0x06) { 0x0514, 0x00614E, 0x0A, 0x0A, 0x0D00, 0x0D00 },

                Package (0x06) { 0x04B0, 0x0058AA, 0x0A, 0x0A, 0x0C00, 0x0C00 },

                Package (0x06) { 0x044C, 0x005039, 0x0A, 0x0A, 0x0B00, 0x0B00 },

                Package (0x06) { 0x03E8, 0x0047FB, 0x0A, 0x0A, 0x0A00, 0x0A00 },

                Package (0x06) { 0x0384, 0x003FEE, 0x0A, 0x0A, 0x0900, 0x0900 },

                /* Low Frequency Mode */

                Package (0x06) { 0x0320, 0x003814, 0x0A, 0x0A, 0x0800, 0x0800 }

            })


            Method (_DSM, 4, NotSerialized)

            {

                Store ("Method _PR.CPU4._DSM Called", Debug)


                If (LEqual (Arg2, Zero))

                {

                    Return (Buffer (One)

                    {

                        0x03

                    })

                }


                Return (Package (0x02)

                {

                    "plugin-type",

                    One

                })

            }

        }


        Scope (\_PR.CPU5)

        {

            Method (APSS, 0, NotSerialized)

            {

                Store ("Method _PR.CPU5.APSS Called", Debug)


                Return (\_PR.CPU4.APSS)

            }

        }


        Scope (\_PR.CPU6)

        {

            Method (APSS, 0, NotSerialized)

            {

                Store ("Method _PR.CPU6.APSS Called", Debug)


                Return (\_PR.CPU4.APSS)

            }

        }


        Scope (\_PR.CPU7)

        {

            Method (APSS, 0, NotSerialized)

            {

                Store ("Method _PR.CPU7.APSS Called", Debug)


                Return (\_PR.CPU4.APSS)

            }

        }

    }


    굉장히 간략해졌죠? ㅎㅎㅎ

    참고로 하나 빼먹은게 있네요 ㅜㅜ


    Method (_DSM, 4, NotSerialized)

            {

                Store ("Method _PR.CPU4._DSM Called", Debug)


                If (LEqual (Arg2, Zero))

                {

                    Return (Buffer (One)

                    {

                        0x03

                    })

                }


                Return (Package (0x02)

                {

                    "plugin-type",

                    One

                })

            }


    이부분은 씨피유 전력관리 켁스트로 XPCM을 사용하겠습니다라고

    알려주는 구문이됩니다만, 실제로 ACST구문에서 xpcm을 사용할지에 대한 여부 옵션이

    따로 있는 것으로 알고 있습니다.


    P-State만의 패치구문에서 위의 구문은 따로 동작하지 않는것 같으나,

    문제가 생길 수 있어 추가로 함께 작성하여 적용하는게 좋다 사료됩니다.


    대부분의 C-State은 보드의 바이오스 설정에 들어가면

    강제로 설정해줄 수 있는 부분이 되기 때문에,


    굳이 SSDT로 패치해주실 필요는 없다 생각됩니다.

    이 부분은 다음 하편에서 나올 잠자기에서 그 이유가 매우 자세하게 기술됩니다.


    이상으로 마치겠습니다.

    감사합니다!

    KsJ 님의 SIGNATURE

    profile

    Odd Customer

    댓글 14
    댓글 쓰기 권한이 없습니다.
  • 다음글 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [상] [9]
  • 이전글 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [하] [30]
  • 0    커맥공통 지금 보시는 곳은 커스텀맥 설치 및 안정화 팁 공유 게시판 입니다. Mactopia 36
    18 커맥공통 입문자 안내서보충 69 아이뱅크 5639
    89 커맥공통 입문자를 위한 x86 안내서 237 아이뱅크 104845
    4    인텔칩셋 인텔 USB 3.0 포트 가지런하게 정리하기 (ft. USBInjectAll.kext) 5 5 ZISQO 62
    4    인텔칩셋 기가바이트 Z3xx/2xx/1xx 칩셋용 알파인 릿지 SSDT 인젝션 Part 2. 21 5 ZISQO 179
    0    인텔칩셋 SMBIOS는 코스매틱이 아니었습니다. 17 때군 373
    11 인텔칩셋 intel speedshift 적용 여부 파악하기 17 ClimbJoe 294
    5    인텔칩셋 macOS의 사소한 렉을 없애보자 25 Kailker 585
    5    인텔칩셋 i7 8750H UHD 630 성공사례(?) - 논의중입니다. 24 때군 476
    6    인텔칩셋 하우스웰이후 부터 스피드스텝 쉽게 잡으세요. 10 ClimbJoe 220
    4    인텔칩셋 Lilu.kext의 친구 CPUFriend.kext로 FrequencyVector 추가 11 스톤콜드 435
    0    인텔칩셋 G4405U에서 설치 팁 2 박정한 189
    3    인텔칩셋 6세대 Skylake 노트북에서X86Platform 로드 하기 9 goldbat 1051
    7    인텔칩셋 CPU 최저클럭이 1Ghz인 경우 800Mhz로 수정하는 방법입니다. (freqVectorsEdit) 8 Uetax 1258
    1    인텔칩셋 Intel Power Gadget 이 멈추는 현상에 대한 고찰 1 스티븐안 488
    1    인텔칩셋 XCPM 기능 적용시 bootargs -xcpm 해제해주세요. 14 개발인생40년 1111
    7    인텔칩셋 Xnu CPU Power Management 에 관하여 그리고 제온에서의 XCPM 버그 30 개발인생40년 2819
    8    인텔칩셋 [연재] Intel 社 CPU 파헤치기 (下) rev161202 2 KsJ 1017
    13 인텔칩셋 [연재] Intel 社 CPU 파헤치기 (上) rev.161129 6 KsJ 1546
    1    인텔칩셋 스피드스텝, 제값이 출력돼야 과연 좋은 걸까요? 6 송준섭 1371
    1    인텔칩셋 스피드스텝 이후 잠자기에서 깨어나지 않을 때 조치 방법중 하나입니다. 2 ZISQO 1582
    2    인텔칩셋 시피유표시 메모리 표시가 달라서 정확하게 표시하기 5 아이뱅크 646
    2    인텔칩셋 잠자기가 안될때 간단한 해결방법! 7 홍대퀸카 2083
    3    인텔칩셋 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 하] 17 KsJ 2034
    6    인텔칩셋 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 중] 19 KsJ 1878
    12 인텔칩셋 [CPU] 스피드스텝 :: AppleLPC.kext, ACPI_SMC_PlatformPlugin.kext 를 로드하는 방법... 37 2 DArtagnan 4372
    14 인텔칩셋 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 상] 53 KsJ 5057
    9    인텔칩셋 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [하] 30 KsJ 1989
    8    인텔칩셋 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [중] 14 KsJ 1207
    13 인텔칩셋 [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [상] 9 KsJ 1870
    20 인텔칩셋 스피드스텝 측정하는 3가지 방법 합침 8 Mactopia 4589
    10 인텔칩셋 ssdtPRGen.sh 최신버전을 통해 ssdt을 추출하여 dsdt에 인젝션시키는 방법 16 KsJ 3398
    4    인텔칩셋 지원되는 메인보드 하이퍼 스레딩 켜고 끄기 7 kim 1309
    2    인텔칩셋 CPU TYPE - 올바른 CPU 표기를 위한 추가 정보 (아래 Fake CPU ID 에 대한 내용에 이어서) 2 Mactopia 1297
    3    인텔칩셋 CPU ID - FAKE CPU ID Table list 및 사용법 9 Mactopia 1776
    3    인텔칩셋 [재업로드] 스피드 스텝 확인 방법 및 KEXT 구분 - kext 에 관해서 혼선(?) 이 있네요. 12 Mactopia 2672
    3    인텔칩셋 iMac SMBIOS 을 유지하면서 Mac Pro 처럼 스피드스텝 효율을 올리는 방법 (중요내용 추가) 9 DArtagnan 1214
    8    인텔칩셋 4세대 CPU 스피드 스텝 (전원관리, SSDT) 적용하는 법 43 terminator 8578
    1    인텔칩셋 CPU 별 스피드 스텝 Config 추천 설정 10 Mactopia 5057
    1    인텔칩셋 CPU Power Management에 대한 정보(Speedstep 관련) 3 HackBook 2084
    8    인텔칩셋 DSDT에 SSDT를 추가하는 방법 (for Speed Step) 24 KsJ 4921
    1    인텔칩셋 Asus P8Z68-v lx Speedstep 잡기 9 LeeDeaRi 916
    3    인텔칩셋 제온 E3-1230v2 CPU 에 대한 정리 9 라자 4472
    4    인텔칩셋 IvyBridge 사용자는 보세요. ssdtPRGen v12 및 사용 방법 32 Mactopia 6689
    0    인텔칩셋 IVY 이상 Native PM 지원을 받기 위한 방법 2 Mactopia 1653
    2    인텔칩셋 안정화 테스트 6 - 스피드 스텝 확인용 - AppleIntelCPUPowerManagementInfo.kext 12 HackBook 5182
    4    인텔칩셋 해킨토시 설치 이후 안정화 테스트 2 - 스피드스텝 측정 - MSRDUMP 34 Mactopia 12922
    1
    서버에 요청 중입니다. 잠시만 기다려 주십시오...