HP社の小型デスクトップPC、HP EliteDesk 800 G2 DM (Core i3-6100T)のUSBを設定しました。使わないポートを除外して15個以内に収めます。Cloverの起動オプションで除外しても良いですし、SSDTを作っても良いです。
前回、このマシンにmacOSをインストールして、オーディオを設定しました。でもmacOSがUSBを15個に制限している関係で、USB 3.1ポートが全てUSB 2.0として稼働する状態でした。この続編では、USBが正しく見えるように設定を行います。USBポートの設定方法は、こちらのZ390、B360チップセットマザーボードの記事もご覧ください。
Table of Contents
USBポートの観察
HP EliteDesk 800 G2 DMには、前面パネルに3個、背面パネルに4個のUSBポートがあります。詳細は、こちらのスペック表でも確認できます。USBは全部3.1 Gen 1だそうです。ちなみにマザーボードのチップセットはQ170です。
前面パネルには、向かって左から右に、
- USB 3.1 Type-C 【Type-C】
- Type-A SS表示、稲妻表示【前面SS稲妻】
- Type-A SS表示【前面SS無印】
の3個のポートがあります。SSの表示はSuper Speedの略で、USB 3.1であることを示しています。後のチェックでわかりやすいようにカギカッコ【】で示した名前をつけました。稲妻マーク付きポートは、USB充電に適しているという意味だと思います。供給電流量が強化されているのか、もしくは電源OFF状態でも5V供給されているのかもしれません。
背面には、同じく左から、
- Type-A SS表示が2個【背面SS上】【背面SS下】
- Type-A キーボード表示が2個【KBD上】【KBD下】
があります。キーボード表示のポートにはSSの表記が無いのですが、これも3.1です。
前面・背面パネルの他に、マザーボード上の無線接続用M.2コネクタにも、1本USB 2.0が出ているはずです。M.2無線カードがBluetoothの接続に際して、M.2コネクタのUSB端子を使用します。以下ではM.2コネクタに出ているはずのHSポートを【M.2のHS】呼びます。
HS (High Speed)ポートを調べる
まずはUSBInjectAll.kextだけを入れて、IORegistoryExplorer.appを起動します。次に、ウィンドウの右上にある拡大鏡アイコンのついた検索窓にxhcとタイプします。すると以下のようになりました。
USB 2.0であるHSが14本見えています。こんなに多数のポートを使っていませんので、USBInjectAllのデフォルトでこう解釈されているのだと思われます。SSもあるはずなのですが、HSが多すぎて15個制限のためにSSは見えていません。このため、USB 3.1ポートに含まれるUSB 2.0ピンしか機能しなかったのです。
HSは全て見えているので、最初にHSとUSBポートの関係を調べます。そのために、USB機器をポートに接続します。USBポートにデバイスを接続するとIORegistoryExplorerのport-statusの数値が変化するので、これで位置関係が分かります。USBメモリーを使うと、抜き差しのほかにアンマウントする必要があるので、キーボードのドングルのようなデバイスの方が楽です。【M.2のHS】を探すためには、マザーボード上のM.2ソケットに無線ユニットを挿します。今回は、余っていたmacOS非サポートのインテルWiFiカードを挿しました。この結果、各項目とUSB 2.0ポートの関係が分かりました。ここで発見できなかった不明なHSは多分未使用です。
- HS01 2.0 3.1 Gen 1【背面SS上】
- HS02 2.0 3.1 Gen 1【背面SS下】
- HS03 2.0 3.1 Gen 1【前面SS稲妻】
- HS04 2.0 3.1 Gen 1【KBD下】
- HS05 2.0 3.1 Gen 1【KBD上】
- HS06 (不明)
- HS07 2.0 3.1 Gen 1【M.2のHS】
- HS08(不明)
- HS09 2.0 3.1 Gen 1【Type-C】
- HS10 (不明)
- HS11(不明)
- HS12(不明)
- HS13 2.0 3.1 Gen 1【前面SS無印】
- HS14 (不明)
SS (Super Speed) ポートを調べる
次に、今は見えていないSSポートを調べることにします。そこでUSBInjectAllの機能を使ってHSポートを一時的に無効にします。全部のHSポートを無効にすると、キーボード・ポインティングデバイスが使えないので、HS01だけは生かしました。また元から不要なUSR1, USR2も無効にします。このために、Cloverの起動オプションを以下にしました。
<string>-v uia_exclude=HS02;HS03;HS04;HS05;HS06;HS07;HS08;HS09;HS10;HS11;HS12;HS13;HS14;USR1;USR2</string>
この結果、IORegistoryExplorerの様子は以下のようになりました。
SSが10個見えるようになりました。HS01を加えて全部で11個あります。15個制限以下ですので、SSはこれで全てだと思われます。そこで今度は、USB 3.1のUSBメモリーを使って、IORegistoryExplorerの反応を調べました。その結果、以下のように割り当てられているようです。
- SS01 3.1 Gen 2【背面SS上】
- SS02 3.1 Gen2 【背面SS下】
- SS03 3.1 Gen 1 【前面SS稲妻】
- SS04 3.1 Gen 1 【KBD下】
- SS05 3.1 Gen 1 【KBD上】
- SS06 3.1 Gen 1 【Type-C】(逆挿しも同じ)
- SS07 (不明)
- SS08 3.1 Gen 1【前面SS無印】
- SS09 (不明)
- SS010 (不明)
これも不明の番号は多分未使用です。SS01からSS05まではSSとHSで同じ番号になっています。でもSS06とSS08は微妙にずれています。実際のパネルに合わせると以下になります。
以上から、未使用のポートを全て除外するためには、起動オプションに以下の設定を行えば良いことになりました。
<string>-v uia_exclude=HS06;HS08;HS10;HS11;HS12;HS14;USR1;USR2;SS07;SS09;SS10</string>
この結果、以下のように必要なポートが見えるようになりました。存在しているポートの数がちょうど15個ですので、macOSの個数制限で諦めなければならないポートはありません。
USBを設定するSSDTを作る
こちらで説明したように、Clover起動オプションを使うよりも、USBを設定するSSDTを作成して、使用すべきポートを指定するやり方がより正しいようです。USBポートの素性を正しく記述できるので、macOSの動きがより正しくなるはずです。詳しくは該当記事を見てください。この作業で必要な情報は、USBコントローラのdevice-idです。HP EliteDeskが使っているQ170の場合、vendor-idが0x8086で、device-idが0xa12fです。0x8086はインテルの番号ですので、インテルのチップセットを表しています。これらの数値はIORegistryExplorerでXHCの項目の中で発見できます。またファインダーで、「アップルメニュー」「このMacについて」「システムレポート」と進み「システム情報」を開き、このUSBの項目にも書いてあります。
そこで、先の記事で紹介したお手本amlファイルから、”8086_a12f”と書かれた”Package”の定義だけを残して、他のPackageの定義を削除します。残すのは以下の項目です。
"8086_a12f", Package()
{
...........
},
この中にはHS01からSS10までのUSBの情報が書かれています。これに対してコネクタの情報を実際に合わせて変更していきます。UsbConnectorの値は、
- 0: USB 2.0のコネクタ
- 3: USB 3.1のコネクタ。3.1に付随するUSB 2.0も3にします。
- 255: 内部接続で外部に接続しないコネクタ。マザーボード内部でBluetoothユニットに接続しているなどの場合にこれを使います。マザーボード上のコネクタで外部に引き出す可能性のあるものは0または3にします。
- 9: USB Type-Cのコネクタ。逆挿しにしてもSSの番号が変化しない場合。内部でハブに接続されているらしいです。
- 10: USB Type-Cのコネクタ。逆挿しするとSSの番号が変化する場合。個別に接続されています。
を表しています。上で調べた内容を反映すると、以下のようなファイルになりました。
これをMaciASLで開きます。次に、MaciASLのFileメニューからSave As…を選び、バイナリー出力を指定して書き出すとSSDT-UIAC.amlが出来上がります。こうして作成したSSDT-UIAC.amlファイルを、ESPのEFI/CLOVER/ACPI/patched/にコピーすれば有効になります。これでCloverのブートオプションにuia_excludeを指定しなくても、実存するポートのみが有効になるはずです。IORegistoryExplorerで確認すると以下のようになりました。上で、Clover起動オプションで設定した場合と同じ結果です。
いつもお世話になっております。
私のElitedesk 800 G2 DMでは、USB-Cポートに逆さにUSB3.0を挿すとHS06のUSB2.0として認識されていました。最近この状態に気づき、いろいろ試してみました。
HS06を削除し、SS07を有効にしてTypeCとしてアサインしたところ、逆挿しでもUSB3.0と認識されるようになりました。
Type-CにUSB2.0を挿しても認識されなくなりましたが、この設定で様子を見てみます。
>HS06を削除し、
→HS09の間違いでした。
HS09とSS07の両方を有効にすれば、USB 3と2は両方とも、逆挿しでも、認識されると思うのですが、ダメでしょうか。Type-Cは9番にしてありますでしょうか?
訂正:SS07ではなくSS06です。
TypeCはSS06とSS07に設定しています。SS07を有効にすると15個を超えるので、どれか1つを無効にしないといけません。
HS09はType-C ライトニングケーブルでiPhone接続に必要なことが分かったので、背面のHS05/SS05のうちHS05を無効に変更しました。
下記15個の校正にしました。
HS01, HS02, HS03, HS04, HS07, HS09, HS13, SS01, SS02, SS03, SS04, SS05, SS06, SS07, SS08
記事でチェックした時は逆挿ししてもSS06だけが使われていたと思ったのですが、その後はType-Cを使っていないので、実は間違っていたのかもしれないです。今回のご報告だと逆挿しでSS06/SS07がそれぞれ使われるようですね。出荷時期によって変更されている可能性もあるのかな。情報ありがとうございました。
出荷時期によって変更されている可能性はあると思います。
100 シリーズ PCHってなんかErrataがあるみたいですね。
例の暗黒問題?と関係してるのかなど、必要なら読んで見る必要があるかもです。
https://osy.gitbook.io/hac-mini-guide/details/usb-fix#intel-errata
USBWakeFixupなるものを発見したので、ここに貼っておきます。
https://github.com/osy86/USBWakeFixup
情報ありがとうございます。「USBでスリープ解除した後で、2度目のキー押下やマウスクリックが必要な問題を解決」というようなことが書いてあるので、今回のような絶対に目覚めない問題よりは軽度な問題の解決策のような気もしました。でも何か関係があるかもしれません。
HP EliteDesk 800 G2 DMをしばらく放っておいたので、昨日Big Sur 11.0.1をあらためてインストイールしてみました。OCはv063です。
昨晩から起動しっぱなしですが、朝起きてもフリーズはしていませんでした。
USBWakeFixup.kextを入れて様子を見てみます。
Big Surで安定したのかな。スリープ復帰後に暗黒画面になる症状はいかがでしょうか?
100シリーズPCHのハードウェアバグはBIOSで対処できる様なので、今後のBIOSアップデートに期待ですね。
スリープさせてみました。
スリープからの復帰後は、変わらず暗黒画面でした。リモート接続するとマシンは動いています。
私としては、長時間放置後(スクリーンセーバー中)のフリーズが無くなった感じなのでよしとします。
情報ありがとうございます。こまめにon/offしても良いし、逆にサーバとして使っても良いので、そう考えるとスリープって中途半端な存在な気もしてます。