9900Kのsleep問題〜原因はiGPUのデバイスID

ASUSのZ390マザーボードで作ったHackintoshのその後の報告です。sleep/shutdownが全て完璧に動くようになりました。最初の記事はこちらです。(今回の対策を追記してあります)

その後、シャットダウンが不完全な問題を解決すべく試行錯誤したところで、EmuVariableUefi-64.efiを使うことで解決しました。

追記WhateverGreen 1.2.7でIntel HD Graphics 630用のデバイスIDとして0x3E98が追加されたそうです。これでこのパッチは不要になったかもしれません。検証して報告します。

sleepがまだ不完全

一時はこれで解決したかに見えたのですが、sleepからの復帰がおかしいです。iGPUを使うと、sleepで画面が消えた後、キーボード押下で画面が復帰します。ただし、画面が消えるだけで、CPUファンは回転し続けています。一方、グラフィックスカード(dGPU)を使うと、sleepで画面が消えた後、しばらくはキーボード押下で画面復帰するのですが、15秒くらい経つと画面が復帰しなくなります。さらに放置するとCPUファンの回転も中止しますが、やはり復帰しません。

という状態で、しばらく頓挫していたのですが、ようやく解決したので報告します。たまたま hackintosher.comで紹介されていたconfig.plistを使ってみたらsleepが機能するようになったので、それと、問題を引き起こしているconfig.plistとの比較からの結論です。

UHD Graphics 630のデバイスID

Intel UHD グラフィックス630は、MacBook Pro 2018やMac mini 2018で使用されています。なのでmacOSの標準ドライバーでサポートされています。でも、UHD 630のデバイスIDはCPUごとに微妙に違います。例えばMacBook Pro 2018で使用される8050HのUHD 630のデバイスIDは0x3E9Bです。Mac mini 2018で使用される8700BのUHD 630デバイスIDも同じく0x3E9Bです。ところが今回使用している9900KのUHD 630のデバイスIDは微妙に違っていて0x3E98なのです。このデバイスIDの不一致が、sleep問題の原因のようでした。

i3-8100でも対応必要

Intel UHDグラフィックス630のデバイスIDの違いは、他のCPUでも問題を引き起こすようです。こちらの記事

で紹介しましたが、Core i3-8100のUHD 630もデバイスIDが異なっていて(0x3E92および0x3E91)、対応が必要だそうです。結果として今回も同じ問題のようです。今回は、表示されないとか表示が乱れるという現象は起きていませんでしたが、sleepからの復帰の問題につながっていたようです。

9900KのデバイスID対応

上記の記事では、8700K搭載UHD 630のデバイスIDの指定方法が書いてあります。この方法に従うと、デバイスIDを逆順に(little endian方式に)並べた数値に、0x0000を付け加えた値をconfig.plistで指定すれば良いようです。デバイスIDは先に述べたように0x3E98ですので、これの順番を入れ替え、ゼロを追加します。つまり、0x983E0000を指定すれば良いことになります。config.plistではBase64で記述するので、変換します。ターミナルコマンドbase64で0x983E0000をBase64変換するには以下のようにタイプします。

echo -ne "\x98\x3e\x00\x00" | base64

この結果

mD4AAA==

が得られます。この値を、<key>Devices</key>の中の<key>Properties</key>にdevice-idキーとして追加します。

<key>Properties</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>
                    AwCSPg==
                </data>
                <key>device-id</key>
                <data>
                    mD4AAA==
                </data>
                <key>framebuffer-patch-enable</key>
                <data>
                    AQAAAA==
                </data>
            </dict>
        </dict>

この結果、sleepが完璧に動くようになりました。つまり、sleepになるよう設定した時間になると、画面が消え、数秒してCPUファンが停止します。その後、キーボード押下などにより、元どおりの画面に復帰します。

今回のconfig.plistの全体を以下に置いておきます。シリアル番号などは伏せ字になっています。

2件のコメント

  1. iGPUをオンにすると、Final Cut Pro XやMotionが起動できなくなるようです。クイックルックができない問題は、NoVPAJpeg.kextで解決したほうが良さそうですね。

    1. iGPUのon/offで特定のアプリで支障が出るのはしばらくは仕方ないようですね。実機でも時々切り替えの問題が出ているので、将来のmacOSで解決されると期待しています。

返信を残す

メールアドレスが公開されることはありません。

「名前」「メールアドレス」「サイト」は空白でも投稿できますが、日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)