(57)【特許請求の範囲】
【請求項１】
ハードウェアプラットフォーム用のファームウェアのインシステムプロビジョニングのための方法であって、
プロセッサ、不揮発性ストレージデバイス、およびハードウェアプラットフォームの外部のデバイスをインターフェース接続する外部インターフェースを含む前記ハードウェアプラットフォームにおいて、前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていると判断する段階と、
前記外部インターフェースを介してソースからファームウェアにアクセスする段階と、
前記ファームウェアを前記不揮発性ストレージデバイスにプロビジョニングする段階と、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームをブートする段階とを備え、
前記ファームウェアをプロビジョニングする前記段階は、
前記不揮発性ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされていないことを検出する段階と、
前記複数のタイミングパラメータをトレーニングするべく、低速モードに入る段階と、
前記ファームウェアをプロビジョニングするべく高速転送モードに入る段階とを更に有する、
方法。
【請求項２】
ハードウェアプラットフォーム用のファームウェアのインシステムプロビジョニングのための方法であって、
プロセッサ、不揮発性ストレージデバイス、およびハードウェアプラットフォームの外部のデバイスをインターフェース接続する外部インターフェースを含む前記ハードウェアプラットフォームにおいて、前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていると判断する段階と、
前記外部インターフェースを介してソースからファームウェアにアクセスする段階と、
前記ファームウェアを前記不揮発性ストレージデバイスにプロビジョニングする段階と、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームをブートする段階とを備え、
前記ファームウェアをプロビジョニングする前記段階は、前記不揮発性ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされているか否かを判断する段階を更に有し、
前記複数のタイミングパラメータがトレーニングされていると判断した場合、前記ハードウェアプラットフォームは前記不揮発性ストレージデバイスと高速モードで通信し、
前記複数のタイミングパラメータがトレーニングされていないと判断した場合、前記ハードウェアプラットフォームは前記不揮発性ストレージデバイスと低速モードに通信する、
方法。
【請求項３】
前記ファームウェアをプロビジョニングする前記段階は、前記不揮発性ストレージデバイスへのインターフェースを介してセキュリティを行う段階を更に有する、請求項１または２に記載の方法。
【請求項４】
前記セキュリティを行う前記段階は、対称キーを用いて複数の暗号化メッセージを交換する段階を更に有する、請求項３に記載の方法。
【請求項５】
前記セキュリティを行う前記段階は、複数の反射攻撃を阻止するべく、前記対称キーの使用を監視する段階を更に有する、請求項４に記載の方法。
【請求項６】
ハードウェアプラットフォーム用のファームウェアのインシステムプロビジョニングのための方法であって、
プロセッサ、不揮発性ストレージデバイス、およびハードウェアプラットフォームの外部のデバイスをインターフェース接続する外部インターフェースを含む前記ハードウェアプラットフォームにおいて、前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていると判断する段階と、
前記外部インターフェースを介してソースからファームウェアにアクセスする段階と、
前記ファームウェアを前記不揮発性ストレージデバイスにプロビジョニングする段階と、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームをブートする段階とを備え、
前記ファームウェアをプロビジョニングする前記段階は、前記不揮発性ストレージデバイスへのインターフェースを介してセキュリティを行う段階を更に有し、
前記セキュリティを行う前記段階は、
複数の反射攻撃を阻止するべく、対称キーの使用を監視する段階と、
前記対称キーを用いて複数の暗号化メッセージを交換する段階と、
を含む、
方法。
【請求項７】
ハードウェアプラットフォーム用のファームウェアのインシステムプロビジョニングのための方法であって、
プロセッサ、不揮発性ストレージデバイス、およびハードウェアプラットフォームの外部のデバイスをインターフェース接続する外部インターフェースを含む前記ハードウェアプラットフォームにおいて、前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていると判断する段階と、
前記外部インターフェースを介してソースからファームウェアにアクセスする段階と、
前記ファームウェアを前記不揮発性ストレージデバイスにプロビジョニングする段階と、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームをブートする段階とを備え、
前記ファームウェアをプロビジョニングする前記段階は、前記不揮発性ストレージデバイスへのインターフェースを介してセキュリティを行う段階を更に有し、
前記ハードウェアプラットフォームは、対称キーセキュリティプロトコルに関連付けられた前記不揮発性ストレージデバイスとのオンチップヒューズを含み、
前記セキュリティを行う前記段階は、生成される各対称キー用のヒューズを飛ばす段階を更に含む、
方法。
【請求項８】
前記ファームウェアをプロビジョニングする前記段階は、
前記不揮発性ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされていないことを検出する段階と、
前記複数のタイミングパラメータをトレーニングするべく、低速モードに入る段階と、
前記ファームウェアをプロビジョニングするべく高速転送モードに入る段階とを更に有する、請求項４または５に記載の方法。
【請求項９】
前記不揮発性ストレージデバイスは、バイトアドレス指定可能なメモリデバイスを含む、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記ハードウェアプラットフォームは、２レベルのメモリシステムを含み、
前記不揮発性ストレージデバイスは、前記プロセッサのためのメインメモリとして構成され、前記不揮発性ストレージデバイスのためのキャッシュとして構成された揮発性メモリデバイスを更に含む、請求項１から９のいずれか一項に記載の方法。
【請求項１１】
前記ハードウェアプラットフォームが有効なファームウェアを欠いていると判断する前記段階は、前記ハードウェアプラットフォームが有効なプライマリファームウェアイメージを欠いており、有効なバックアップファームウェアイメージを欠いていると判断する段階を有する、請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
前記ファームウェアをプロビジョニングする前記段階は、製造、前記ファームウェアに対するフィールド更新、不揮発性ストレージデバイスのアップグレード、または破損リカバリの後の初期ブートのうちの１つを含むファームウェアライフサイクルイベントに対する前記ファームウェアをプロビジョニングする段階を有する、請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
前記セキュリティを行う前記段階は、対称キーを確立するべく、指数ベースのセキュリティハンドシェーク手順を使用する段階を更に有する、請求項３、７および８のいずれか一項に記載の方法。
【請求項１４】
複数の反射攻撃を阻止するべく、前記対称キーの使用を監視する前記段階は、複数の関連付けられたヒューズを用いて前記対称キーの使用を管理する段階を更に有し、
前記対称キーは、予め定められたヒューズパターンに関連付けられた場合にのみ有効になる、請求項５または６に記載の方法。
【請求項１５】
ハードウェアプラットフォーム用のファームウェアをインシステムでプロビジョニングするコンピューティングデバイスのための前記ハードウェアプラットフォームであって、
複数の動作を実行するプロセッサと、
前記ハードウェアプラットフォームの外部のデバイスにインターフェース接続する外部ハードウェアインターフェースと、
前記プロセッサに結合された不揮発性ストレージデバイスと、
前記プロセッサ、前記外部ハードウェアインターフェース、および前記不揮発性ストレージデバイスに結合されたコントローラデバイスであって、
前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていることを判断し、
前記外部ハードウェアインターフェースを介してファームウェアにアクセスし、
前記不揮発性ストレージデバイスに前記ファームウェアをプロビジョニングし、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームに対するブートシーケンスを開始するコントローラデバイスとを備え、
前記コントローラデバイスは、更に、
前記不揮発性ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされていないことを検出し、
前記複数のタイミングパラメータをトレーニングするべく、低速モードに入り、
前記ファームウェアをプロビジョニングするべく高速転送モードに入る、
ハードウェアプラットフォーム。
【請求項１６】
ハードウェアプラットフォーム用のファームウェアをインシステムでプロビジョニングするコンピューティングデバイスのための前記ハードウェアプラットフォームであって、
複数の動作を実行するプロセッサと、
前記ハードウェアプラットフォームの外部のデバイスにインターフェース接続する外部ハードウェアインターフェースと、
前記プロセッサに結合された不揮発性ストレージデバイスと、
前記プロセッサ、前記外部ハードウェアインターフェース、および前記不揮発性ストレージデバイスに結合されたコントローラデバイスであって、
前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていることを判断し、
前記外部ハードウェアインターフェースを介してファームウェアにアクセスし、
前記不揮発性ストレージデバイスに前記ファームウェアをプロビジョニングし、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームに対するブートシーケンスを開始するコントローラデバイスとを備え、
前記コントローラデバイスは、更に、前記不揮発性ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされているか否かを判断し、
前記複数のタイミングパラメータがトレーニングされていると判断した場合、前記コントローラデバイスは、前記不揮発性ストレージデバイスと高速モードで通信し、
前記複数のタイミングパラメータがトレーニングされていないと判断した場合、前記コントローラデバイスは、前記不揮発性ストレージデバイスと低速モードに通信する、
ハードウェアプラットフォーム。
【請求項１７】
前記コントローラデバイスは、更に、前記不揮発性ストレージデバイスへのインターフェースを介してセキュリティを行う、請求項１５または１６に記載のハードウェアプラットフォーム。
【請求項１８】
前記コントローラデバイスは、更に、対称キーを用いて複数の暗号化メッセージを交換する、請求項１７に記載のハードウェアプラットフォーム。
【請求項１９】
前記コントローラデバイスは、更に、複数の反射攻撃を阻止するべく、前記対称キーの使用を監視する、請求項１８に記載のハードウェアプラットフォーム。
【請求項２０】
ハードウェアプラットフォーム用のファームウェアをインシステムでプロビジョニングするコンピューティングデバイスのための前記ハードウェアプラットフォームであって、
複数の動作を実行するプロセッサと、
前記ハードウェアプラットフォームの外部のデバイスにインターフェース接続する外部ハードウェアインターフェースと、
前記プロセッサに結合された不揮発性ストレージデバイスと、
前記プロセッサ、前記外部ハードウェアインターフェース、および前記不揮発性ストレージデバイスに結合されたコントローラデバイスであって、
前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていることを判断し、
前記外部ハードウェアインターフェースを介してファームウェアにアクセスし、
前記不揮発性ストレージデバイスに前記ファームウェアをプロビジョニングし、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームに対するブートシーケンスを開始するコントローラデバイスとを備え、
前記コントローラデバイスは、更に、
前記不揮発性ストレージデバイスへのインターフェースを介してセキュリティを行い、
複数の反射攻撃を阻止するべく、対称キーの使用を監視し、
前記対称キーを用いて複数の暗号化メッセージを交換する、
ハードウェアプラットフォーム。
【請求項２１】
ハードウェアプラットフォーム用のファームウェアをインシステムでプロビジョニングするコンピューティングデバイスのための前記ハードウェアプラットフォームであって、
複数の動作を実行するプロセッサと、
前記ハードウェアプラットフォームの外部のデバイスにインターフェース接続する外部ハードウェアインターフェースと、
前記プロセッサに結合された不揮発性ストレージデバイスと、
前記プロセッサ、前記外部ハードウェアインターフェース、および前記不揮発性ストレージデバイスに結合されたコントローラデバイスであって、
前記ハードウェアプラットフォームが前記ハードウェアプラットフォームをブートするための有効なファームウェアを欠いていることを判断し、
前記外部ハードウェアインターフェースを介してファームウェアにアクセスし、
前記不揮発性ストレージデバイスに前記ファームウェアをプロビジョニングし、
前記不揮発性ストレージデバイスにプロビジョニングされた前記ファームウェアから前記ハードウェアプラットフォームに対するブートシーケンスを開始するコントローラデバイスとを備え、
前記コントローラデバイスは、更に、
前記不揮発性ストレージデバイスへのインターフェースを介してセキュリティを行い、
対称キーセキュリティプロトコルに関連付けられた前記不揮発性ストレージデバイスとのオンチップヒューズを備え、
生成される各対称キー用のヒューズを飛ばす、
ハードウェアプラットフォーム。
【請求項２２】
前記コントローラデバイスは、更に、
前記不揮発性ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされていないことを検出し、
前記複数のタイミングパラメータをトレーニングするべく、低速モードに入り、
前記ファームウェアをプロビジョニングするべく高速転送モードに入る、請求項２０または２１に記載のハードウェアプラットフォーム。
【請求項２３】
前記不揮発性ストレージデバイスは、前記不揮発性ストレージデバイスによる動作のための複数のメモリアクセスコマンドをデコードするインターフェースを有する、請求項１５から２２のいずれか一項に記載のハードウェアプラットフォーム。
【請求項２４】
前記不揮発性ストレージデバイスは、バイトアドレス指定可能なメモリデバイスを含む、請求項１５から２３のいずれか一項に記載のハードウェアプラットフォーム。
【請求項２５】
揮発性メモリデバイスを更に備え、
前記ハードウェアプラットフォームは、２レベルのメモリシステムを含み、
不揮発性ストレージデバイスは、前記プロセッサのためのメインメモリとして構成され、
揮発性メモリデバイスは、前記不揮発性ストレージデバイスのキャッシュとして構成される、請求項１５から２４のいずれか一項に記載のハードウェアプラットフォーム。
【請求項２６】
前記コントローラデバイスは、前記コントローラデバイス用のファームウェアにアクセスしてプロビジョニングする、請求項１５から２５のいずれか一項に記載のハードウェアプラットフォーム。
【請求項２７】
前記コントローラデバイスは、前記プロセッサ用のファームウェアにアクセスしてプロビジョニングする、請求項１５から２６のいずれか一項に記載のハードウェアプラットフォーム。
【請求項２８】
前記コントローラデバイスは、前記ハードウェアプラットフォームが有効なプライマリファームウェアイメージを欠いており、有効なバックアップファームウェアイメージを欠いていると判断する、請求項１５から２７のいずれか一項に記載のハードウェアプラットフォーム。
【請求項２９】
前記コントローラデバイスは、製造、前記ファームウェアに対するフィールド更新、不揮発性ストレージデバイスのアップグレード、または破損リカバリの後の初期ブートのうちの１つを含むファームウェアライフサイクルイベントに対する前記ファームウェアをプロビジョニングする、請求項１５から２８のいずれか一項に記載のハードウェアプラットフォーム。
【請求項３０】
前記外部ハードウェアインターフェースは、ユニバーサルシリアルバスインターフェース、ローカルエリアネットワークインターフェース、またはワイドエリアネットワークインターフェースのうちの１つに準拠したハードウェアインターフェースを有する、請求項１５から２９のいずれか一項に記載のハードウェアプラットフォーム。
【請求項３１】
前記コントローラデバイスは、対称キーを確立するべく、指数ベースのセキュリティハンドシェーク手順を更に使用する、請求項１７、２１および２２のいずれか一項に記載のハードウェアプラットフォーム。
【請求項３２】
前記コントローラデバイスは、関連付けられた複数のヒューズを用いて前記対称キーの使用を更に管理し、
前記対称キーは、予め定められたヒューズパターンに関連付けられた場合にのみ有効になる、請求項１９または２０に記載のハードウェアプラットフォーム。
【請求項３３】
コンピュータに、請求項１〜１４のいずれか１項に記載の方法を実行させる、コンピュータプログラム。
【請求項３４】
ハードウェアプラットフォーム用のファームウェアをインシステムでプロビジョニングするための装置であって、請求項１〜１４のいずれか１項に記載の方法を実行する複数のオペレーションを実行するための手段を備える、装置。
【請求項３５】
請求項３３に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の複数の実施形態は、概ねシステムファームウェアのプロビジョニングに関し、より詳細にはコンポーネントがハードウェアプラットフォームにおいてインシステムである場合のハードウェアプラットフォームファームウェアのプロビジョニングに関する。
【０００２】
［著作権の通知／許可］
本特許文献における開示は部分的に、著作権保護を受ける資料を含み得る。著作権者は、米国特許商標庁における特許出願および記録に見られる特許文献または特許開示が何人により複製されても異議を有しないが、それ以外の場合には全ての著作権等を留保するものである。著作権の通知は、下記および本明細書の添付の図面における全てのデータ、ならびに「著作権、２０１４年、インテル（登録商標）コーポレーション、無断複写・転載禁止」と下記に記載されたいずれのソフトウェアにも適用される。
【背景技術】
【０００３】
コンピューティングデバイスは、様々なコンポーネントが互いに結合されて、コンピューティングデバイスのための機能を提供するハードウェアプラットフォームを有する。一般に、コンピューティングデバイスは、プロセッサ、短期的メモリ（揮発性メモリ）、およびより長期的メモリ（不揮発性ストレージ）を含む。通常、ハードウェアプラットフォーム上の１または複数のコンポーネントは、リードオンリメモリ（ＲＯＭ）内に格納された基本的な初期コードを実行し、これによりハードウェアプラットフォームがハードウェアコンポーネントを制御するファームウェアをロードすることを可能にする。次にファームウェアは、プロセッサによる実行のためにコードおよびデータ（ホストオペレーティングシステム等）をストレージから揮発性メモリへとロードする。
【０００４】
従来、ファームウェアは別個のコンポーネント（例えばフラッシュストレージデバイス）に格納されるが、これによりコンポーネント自体に関するコスト、ならびにハードウェアプラットフォームにコンポーネントを配置する追加の設計および製造コストを付加することになる。ＲＯＭコードはハードウェアに固定され、最新のコンピューティングプラットフォームにおいてファームウェアの役割を代替することができない。従ってハードウェアプラットフォーム上のファームウェアがなければ、プラットフォームは従来、動作を開始することができない。更にファームウェアコードが破損または攻撃により何らかの危害を受ける場合、ハードウェアプラットフォームのリカバリを実行する機能に限界がある。
【図面の簡単な説明】
【０００５】
以下の説明は、図示が本発明の複数の実施形態の実装における例として与えられた図面の検討を含む。図面は、限定としてではなく例として理解されたい。本明細書において用いられるように、１または複数の「実施形態」への参照は、本発明の少なくとも一実装に含まれる具体的な機能、構造、および／または特性を説明するものと理解されたい。従って、本明細書に見られる「一実施形態において」または「代替的な実施形態において」等の文言は、本発明における様々な実施形態および実装を説明するものであり、全てが同一の実施形態を必ずしも指すわけではない。しかし、これらは必ずしも互いに排他的でもない。
【０００６】
【図１】不揮発性ストレージデバイスにファームウェアをプロビジョニングするシステムの実施形態のブロック図である。
【０００７】
【図２】コンピューティングシステムの外部のソースからのファームウェアプロビジョニングを調整するマネージャビリティエンジンを有するコンピューティングシステムの実施形態のブロック図である。
【０００８】
【図３】マネージャビリティエンジンが不揮発性ストレージデバイスとインターフェース接続するシステムの実施形態のブロック図である。
【０００９】
【図４】ファームウェアがＵＳＢデバイスからプロビジョニングされ得るシステムの実施形態のブロック図である。
【００１０】
【図５】インシステムでファームウェアをプロビジョニングし得るシステムにおいて動作するファームウェアにアクセスするプロセスの実施形態のフロー図である。
【００１１】
【図６Ａ】コンピューティングシステムの初期動作用のファームウェアをプロビジョニングするプロセスの実施形態のフロー図である。
【００１２】
【図６Ｂ】ファームウェアの更新と共にファームウェアをプロビジョニングするプロセスの実施形態のフロー図である。
【００１３】
【図６Ｃ】エラーからリカバリするべくファームウェアをプロビジョニングするプロセスの実施形態のフロー図である。
【００１４】
【図６Ｄ】システムファームウェアを格納するデバイスにおけるハードウェアアップグレードと共にファームウェアをプロビジョニングするプロセスの実施形態のフロー図である。
【００１５】
【図７】マネージャビリティエンジンから次世代メモリデバイスインターフェースにアクセスするプロセスの実施形態のフロー図である。
【００１６】
【図８】次世代メモリデバイスインターフェースを介した交換にセキュリティを適用するプロセスの実施形態のフロー図である。
【００１７】
【図９】インシステムファームウェアのプロビジョニングが実装され得るコンピューティングシステムの実施形態のブロック図である。
【００１８】
【図１０】インシステムファームウェアのプロビジョニングが実装され得るモバイルデバイスの実施形態のブロック図である。
【００１９】
下記の複数の実施形態のうちのいくつかまたは全てを図示し得る複数の図面の説明を含み、ならびに本明細書において提示される本発明の概念における他の可能な実施形態または実装を検討する、特定の詳細および実装の説明を後述する。
【発明を実施するための形態】
【００２０】
本明細書に説明されるように、ハードウェアプラットフォームは、複数の初期起動動作用のシステムファームウェア、ならびにハードウェアプラットフォームのプライマリオペレーティングシステム用のコードを格納し得る不揮発性ストレージデバイスを含む。通常のブートシーケンスにおいて、ハードウェアプラットフォーム上のコントローラは、ストレージデバイスから機能的なファームウェアをロードしてハードウェアプラットフォームを開始する。特定の状況下では、ストレージデバイスは機能的なファームウェアを格納しない場合がある。従って、コントローラは機能的なファームウェアを欠くハードウェアプラットフォームを判断して、ストレージデバイスからプライマリオペレーティングシステムをブートし、外部ファームウェアソースからファームウェアイメージをプロビジョニングする複数の動作を開始する。コントローラは、ハードウェアプラットフォームの外部のデバイスへのインターフェースを介して外部ソースからファームウェアイメージにアクセスする。コントローラは、外部デバイスからストレージデバイスへとファームウェアをプロビジョニングして、プロビジョニングされたファームウェアからブートシーケンスを開始する。コントローラは、ファームウェアのプロビジョニング中、およびファームウェアがプロビジョニングされた後に、プラットフォームのセキュリティが維持されることを保証するべく、複数のセキュリティ手順を実装し得る。
【００２１】
ハードウェアプラットフォームはストレージデバイス上にファームウェアを格納し、従ってファームウェアを格納するフラッシュメモリのような別個のコンポーネントを必要としない。ハードウェアプラットフォーム上のファームウェアがない場合、ハードウェアプラットフォームは、「ベアメタル」であるとみなされる。ベアメタルのハードウェアプラットフォームは、ハードウェアコンポーネントのみを含み、書き込み可能ファームウェアコンポーネントを含まないハードウェアプラットフォームを指す。複数のハードウェアコンポーネントは、複数のＲＯＭ（リードオンリメモリ）デバイスを含み得る。複数のハードウェアコンポーネントは、ファームウェアおよびソフトウェアを格納するが、書き込み可能ファームウェアでプリロードされない複数のコンポーネントも含み得る。従って、プラットフォーム上に格納される任意のソフトウェアは、実行するためにアクセスできない。ＲＯＭは、ハードウェアプラットフォーム用のファームウェアにアクセスしてプロビジョニングするべく、制御ロジック（または読み取り専用の実行可能ファームウェア）を提供し得る。ハードウェアプラットフォームは、製造後の初期ブート、ファームウェア破損、プラットフォームの障害、ファームウェアの更新、またはファームウェアを格納するハードウェアコンポーネントのアップグレードもしくは変更というファームウェアの「ライフサイクル」イベントのうちの１つに起因して、機能的なファームウェアを欠いている場合がある。
【００２２】
コンピューティングデバイスが電源を投入され、またはスリープもしくは低電力状態から動作可能状態へとパワーサイクルされ、もしくは移行すると、コード（例えば、ＲＯＭコードおよび／またはファームウェア）を有するプラットフォーム上の複数の電子コンポーネントも、電源を投入された状態、または電源が落ちた状態もしくは低電力状態から動作状態へと移行する。低電力、または電力のない状態から電源が投入された状態への移行は、一般には「ウェイクアップ」と称される。電子コンポーネントがウェイクアップする場合、任意のＲＯＭコードを有していれば、それを開始する。初期動作用のファームウェアに一般に依存する複数のコンポーネント（例えば、ストレージデバイス、マネージャビリティエンジンもしくは他のプラットフォームコントローラ、プロセッサ、またはシステム自体）については、そのＲＯＭコードは、コンポーネントにファームウェアイメージを格納することが期待される位置をアドレス指定させるロジックを含む。コンポーネントがその位置に有効なファームウェアイメージを見つけた場合、ファームウェアはロードして実行する。本明細書に説明されるように、ファームウェアの位置は、不揮発性ストレージデバイスである。そのようなアクセスは、揮発性メモリデバイス同様に、不揮発性ストレージデバイスがアクセスされることを可能にするインターフェースを含む場合に可能になり得る。本明細書に説明されるように、ファームウェアイメージが不明であるか、または有効でない場合、ハードウェアプラットフォームコントローラは、ハードウェアプラットフォームの外部のソースからファームウェアにアクセスする。プラットフォームコントローラは、不揮発性ストレージデバイスに格納された有効なイメージが存在しない場合、外部インターフェースにアクセスすることを可能にするＲＯＭコードを含む。
【００２３】
次世代の不揮発性ストレージ技術は、現世代の不揮発性ストレージ技術に対して低減されたアクセス時間を有すると期待されている。特定の次世代の不揮発性ストレージデバイスは、現世代の揮発性メモリデバイスと同等のアクセス時間を有すると期待されており、概して、現世代の不揮発性ストレージデバイスのアクセス時間よりも１桁以上速くなる。従って、次世代の不揮発性ストレージデバイス（簡略標記としてＮＧＤまたは次世代デバイスと称される）は、複数の揮発性メモリアクセスコマンドと整合するインターフェースを用いてアクセスされ得る。一実施形態において、複数のＮＧＤは、従来のストレージインターフェースを介するのではなく、（例えば、「チップセット」の一部として）ハードウェアプラットフォーム上に直接搭載され得る。複数のＮＧＤは、現世代の不揮発性ストレージデバイスと同等の容量を有し、異なるインターフェースを介して直接アクセス可能であり得る。従って複数のＮＧＤは、ファームウェアを格納するフラッシュデバイスの必要性を低減し、またはなくし得る。一般に、現行のファームウェアのサイズは、期待されるＮＧＤの容量の１パーセントよりもはるかに小さい。従って、複数のＮＧＤは、適切な複数のインターフェースを有し、かつ複数のストレージデバイスにファームウェアをプロビジョニングするメカニズムが存在する場合、ファームウェアを格納し得る。更に、複数のＮＧＤは、リカバリを支援するファームウェアのバックアップコピーを格納し得る。
【００２４】
一実施形態において、プラットフォームコントローラおよびＮＧＤにおけるＲＯＭコードは、複数のデバイスが次世代デバイスインターフェース（ＮＧＩ）全体で互いに通信することを可能にし得る。従来、ファームウェアを格納するプラットフォームフラッシュデバイスは、高速インターフェースを用いるべくトレーニング情報も格納する。高速インターフェースは通常、特定のタイミングパラメータが高速信号の交換を可能とするように設定される必要があるという点において「トレーニング」されなければならないことが理解されよう。フラッシュデバイスを用いない場合、インターフェースのために格納されるトレーニングデータは存在しない。トレーニングデータを用いない場合、２つのデバイス間におけるシグナリングのタイミングは、複数のコマンドおよびデータを適切に送受信するのに必要な同期性をほぼ確実に欠くことになろう。一実施形態において、プラットフォームコントローラおよびＮＧＤにおけるＲＯＭコードは、低速通信モードまたは状態に入ってインターフェースをトレーニングし、次に高速モードまたは状態を使用し、ファームウェアをプロビジョニングする。一実施形態において、インターフェースのトレーニングは、ファームウェアの初期プロビジョニングとみなされ得る。そのようなトレーニングメカニズムは、初期ブートならびにリカバリ動作に用いられ得る。
【００２５】
一実施形態において、プラットフォームコントローラは、以下でより詳細に説明される１または複数のセキュリティメカニズムを用いてインターフェースを管理する。簡単に述べれば、複数のセキュリティメカニズムは、プロビジョニングがセキュアな環境において実行されることを保証し得る。セキュリティは、反射攻撃からの保護も提供し得る。
【００２６】
一実施形態において、ハードウェアプラットフォームは、２レベルメモリ（２ＬＭ）システムとして構成されるシステム、または２レベルのメモリを有するシステムである。２ＬＭ構成において、ハードウェアプラットフォームは、ニアメモリと称され得る第１のレベルのメモリを含み得る。一実施形態において、ニアメモリは揮発性メモリとして実装される。ハードウェアプラットフォームは、ファーメモリと称され得る第２のレベルのメモリも含み得る。一実施形態において、ファーメモリは不揮発性メモリとして実装される。ファーメモリは、ニアメモリよりも大きく、遅い。ニアメモリは、ファーメモリに対して低レイテンシおよび高帯域幅のキャッシュを提供し得る。
【００２７】
一実施形態において、ニアメモリはニアメモリインターフェース（ＮＭＩ）を介してニアメモリコントローラ（ＮＭＣ）により管理され、ファーメモリはファーメモリインターフェース（ＦＭＩ）を介してファーメモリコントローラ（ＦＭＣ）により管理される。一実施形態において、ＦＭＣは、ハードウェアプラットフォーム上で実行されるホストオペレーティングシステムに、メインメモリとしてのファーメモリを報告する。そのような実装において、ニアメモリは、ファーメモリのトランスペアレントキャッシュとして動作し得、ホストオペレーティングシステムは、ニアメモリを認識またはアドレス指定するように別個に構成される必要はない。一実施形態において、不揮発性ストレージは次世代メモリとして実装され、次世代インターフェース（ＮＧＩ）を介してプロセッサとインターフェース接続する。一実施形態において、次世代インターフェース（ＮＧＩ）は、ファーメモリインターフェースである。
【００２８】
ＮＧＤは、以下の複数のメモリ技術のいずれかであるか、またはこれを含み得る。一実施形態において、ＮＧＤは３次元クロスポイントメモリデバイスである。ブロックベースのフラッシュメモリベースのデバイスと異なり、３次元クロスポイントメモリデバイスは、バイトアドレス指定可能であり、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）をシステム用のメインメモリとして代替するべく用いられ得る。ＮＧＤは、相変化メモリ（ＰＣＭ）、３次元クロスポイントメモリ、抵抗性メモリ、ナノワイヤメモリ、強誘電体トランジスタランダムアクセスメモリ（ＦｅＴＲＡＭ）、メモリスタ技術を組み込む磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）、スピン注入トルク（ＳＴＴ）ＭＲＡＭ、もしくは他のバイトアドレシ指定可能なメモリデバイス、または組み合わせを含むが、これらに限定されない他のバイトアドレシ指定可能なメモリ技術を含み得る。そのような不揮発性メモリを用いることにより、メモリがシステムメインメモリとして用いられることを可能にすると共に、システムブートのためのファームウェアイメージを格納し、ホストＯＳ、複数のアプリケーションおよび／または他のプログラムを格納することを可能にし得る。
【００２９】
複数の２ＬＭシステム、ニアメモリ、ファーメモリ、およびＦＭＩに関する詳細は、２０１０年１２月２２日に「Ｔｗｏ−Ｌｅｖｅｌ  Ｓｙｓｔｅｍ  Ｍａｉｎ  Ｍｅｍｏｒｙ」という名称で出願され、本願と同一の法人に譲渡された米国特許出願第１２／９７６，５４５号に見出され得る。２ＬＭシステムの一実施形態は、本明細書に説明されるシステムのいずれの実施形態においても実装され得、ＮＧＩとしてのそのような２ＬＭシステムおよびＦＭＩは、その特許出願に説明されていることにより理解され得る。
【００３０】
図１は、不揮発性ストレージデバイスにファームウェアをプロビジョニングするシステムの実施形態のブロック図である。システム１００は、ハードウェアプラットフォーム１０２、およびハードウェアプラットフォーム１０２に結合された外部ファームウェアソース１５０を含む。ハードウェアプラットフォーム１０２は、プロセッサ、不揮発性ストレージデバイス、および外部ハードウェアインターフェースが任意のタイプのコンピューティングデバイスまたはコンピューティングシステムのために互いに結合されるハードウェアプラットフォームを表す。ハードウェアプラットフォーム１０２は、様々なコンピュータシステム、ハンドヘルドデバイス、商業用電子製品、家庭用電子製品、または他のデバイスのいずれかに組み込まれ得る。
【００３１】
一実施形態において、ハードウェアプラットフォーム１０２は、複数の処理リソースを含むシステムオンチップ（ＳＯＣ）設計を含む。ＳＯＣも別個のコンポーネントとしてハードウェアプラットフォーム上に実装され得ることが理解されよう。ＳＯＣ１１０は、中央処理装置（ＣＰＵ）等、ハードウェアプラットフォーム１０２のプライマリプロセッサデバイスまたはホストプロセッサデバイスを表す。ＳＯＣ１１０もプラットフォームコントローラデバイスを含むものと理解され得る。一実施形態において、プロセッサデバイスは、プラットフォームコントローラである。一実施形態において、ＳＯＣ１１０は、プロセッサデバイスおよび別個のコントローラデバイスの双方を含む。コントローラデバイスは、汎用プロセッサではなく、プラットフォームの制御専用になり得るプロセッサデバイスとして実装され得ることが理解されよう。ホストプロセッサは、複数の動作を実行し、またはホストオペレーティングシステムを実行してハードウェアプラットフォーム１０２が組み込まれたシステムを制御する。
【００３２】
ＳＯＣ１１０はＲＯＭ１１２を含み、ＲＯＭ１１２は、ハードウェアプラットフォーム１０２が組み込まれたコンピューティングシステムのブートアップまたは初期化を開始する、ＳＯＣ１１０上のハードコードロジックを表す。ＲＯＭ１１２は、ＳＯＣの電源がオンにされると、ＳＯＣ１１０上の１または複数のデバイスの動作を開始するロジックを含む。電源がオンにされるＳＯＣ１１０に加えて、ＳＯＣ１１０が低電力もしくはスリープ状態から通常の動作状態に移行すると、ＲＯＭ１１２のＲＯＭコードまたはロジックも実行され得ることが理解されよう。ＲＯＭ１１２は、ＳＯＣ１１０用のファームウェアにアクセスするのに十分なロジックを含む。システム１００において、ＳＯＣ１１０用のファームウェアはファームウェア１２２であり、不揮発性（ＮＶ）ストレージ１２０に格納されている。ストレージ１２０は、ストレージデバイスに対する電力がたとえ中断されても、そのコンテンツが依然として確定しているという点で不揮発性である。不揮発性ストレージ１２０を揮発性メモリ１３０と対照されたい。メモリ１３０は、短期間（１秒の端数程度）よりも長く電力が中断されると、そのコンテンツが不確定になる点で、揮発性であるとみなされる。
【００３３】
従来のシステムでは、ファームウェアはフラッシュデバイスに格納され、ホストオペレーティングシステムは別個のストレージデバイスに格納され、ストレージ１２０は、システムファームウェア１２２およびホストオペレーティングシステム（ＯＳ）１２４の双方を格納する。従って、ストレージ１２０は、ハードウェアプラットフォーム１０２のプライマリ不揮発性ストレージデバイスである。ファームウェア１２２は、初期ソフトウェアおよびロジックを提供して、ホストＯＳ１２４をロードする。ファームウェア１２２は、プラットフォームの複数のコンポーネントを相互接続する複数の基本的動作等、ハードウェアプラットフォーム１０２を動作させる他のロジックも提供し得る。ファームウェア１２２の１または複数の部分は、ホストＯＳ１２４と並列に、かつそのバックグラウンドで動作し得る。
【００３４】
揮発性メモリ１２０は、ハードウェアプラットフォーム１０２の実行のための揮発性のコードの複数の動作イメージおよび動作データを格納し得る。より具体的には、メモリ１３０は、ホストプロセッサによる実行のためのストレージ１２０に格納されたホストＯＳ１２４の複数のイメージ、および複数のアプリケーションのイメージを格納する。通常、メモリ１３０は、ストレージ１２０のストレージ容量のごく一部に限定される。一実施形態において、ストレージ１３０は、メモリ１３０と同等のアクセス時間を有する次世代ストレージデバイス（ＮＧＤ）である。類似のアクセス時間およびはるかに多くのストレージを有するにもかかわらず、ハードウェアプラットフォーム１０２は、メモリ１３０およびＮＧＤストレージ１２０の双方を含み得る。一実施形態において、ストレージ１２０は、メモリアクセスコマンドをデコードし得る。従って、ＳＯＣ１１０は、従来のストレージアクセスコマンドおよびストレージ１２０に渡されるべきメモリアクセスコマンドの双方を可能にするストレージ１２０へのインターフェースを含み得る。
【００３５】
外部インターフェース１４０は、ハードウェアプラットフォーム１０２が外部デバイスに接続することを可能にするハードウェアプラットフォーム１０２上のハードウェアインターフェースを表す。一実施形態において、外部インターフェース１４０は、ハードウェアプラットフォーム１０２上のユニバーサルシリアルバス（ＵＳＢ）ポートである。しかし、外部インターフェース１４０は、Ｅｔｈｅｒｎｅｔ（登録商標）ポートもしくは他のネットワークインターフェース、無線インターフェースデバイス、別のデバイス・ツー・デバイスのバス（ファイヤワイヤもしくは他のインターコネクト等）、または専用の外部インターコネクトのような別のタイプのハードウェアインターフェースであり得ることが理解されよう。一実施形態において、ＳＯＣ１１０は、外部インターフェース１４０を含む。従って、外部インターフェース１４０は、ホストプロセッサシステム内に直接に構築されたハードウェア回路であり、プラットフォームコントローラがインターフェースに直接にアクセスすることを可能にし得る。ハードウェアインターフェース１４０は、ポートコネクタへのインターフェースであり得、同一のポートコネクタへの他の複数のハードウェアインターフェースに加えられる。ファームウェアソース１５０は、ハードウェアインターフェース１４０を介してプラットフォームとインターフェース接続するハードウェアプラットフォーム１０２の外部のデバイスを表す。従って、ファームウェアソース１５０は、外部インターフェース１４０を介してアクセスされることを可能にする互換性のあるコネクタインターフェースを含む。
【００３６】
通常の動作において、ファームウェア１２２は、ストレージ１２０内に存在し（格納されている）、有効である。しかし、いくつかのライフサイクルイベントのいずれかが、ファームウェア１２２が不明または破損している状況をを提示する可能性がある。別のライフサイクルイベントは、ファームウェア１２２が有効で機能的であるが、更新されるべき場合に起こる。そのような複数のイベントとしては、ハードウェアプラットフォーム１０２の製造、ファームウェア１２２のフィールド更新（例えば、新しいバージョンのＢＩＯＳ（基本入出力システム）もしくは他のファームウェア）、フィールドアップグレード（例えば、１６０ＧＢストレージデバイスから３２０ＧＢストレージデバイスへのアップグレード）、またはファームウェア１２２が違法に変更され（例えば、攻撃）もしくはファームウェア１２２の一部がディスクエラーにより不明であるリファービッシュもしくは破損イベントが挙げられ得る。従って、これらの状況のいずれかにおいて、ファームウェア１２２は、ファームウェア１２２が不明もしくは破損しているので機能的なファームウェアとはみなされず、あるいはより新しいバージョンにより代替されたので実行し得ない。
【００３７】
一実施形態において、ＲＯＭ１１２にエラーが発生してストレージ１２０から有効なファームウェアイメージにアクセスする場合、ＲＯＭ１１２は、ＲＯＭ１１２が外部インターフェース１４０を介してファームウェアソース１５０にアクセスさせるロジックを含む。次にハードウェアプラットフォームコントローラは、ファームウェアソース１５０からストレージデバイス１２０へとファームウェアをプロビジョニングし得る。外部ソースからファームウェアをプロビジョニングすることに関連する更なる詳細が、以下に提供される。ファームウェア１２２がストレージ１２０にプロビジョニングされると、ハードウェアプラットフォーム１０２はファームウェアをロードして、プロビジョニングされたファームウェアからブートシーケンスを開始し得る。
【００３８】
一実施形態において、システム１００は、２レベルメモリ（２ＬＭ）システム、または２レベルのメモリを有するシステムとして構成される。２ＬＭ構成において、システム１００は、不揮発性ストレージ１２０をファーメモリとして、また揮発性メモリ１３０をニアメモリとして含み得る。従って一実施形態において、揮発性メモリ１３０は、不揮発性ストレージ１２０のためのキャッシュとして用いられ得る。一実施形態において、ファーメモリは次世代インターフェースにより制御される。次世代インターフェースは、不揮発性ストレージ１２０をＳＯＣ１１０に接続するファーメモリインターフェース（ＦＭＩ）であり得る。
【００３９】
図２は、コンピューティングシステムの外部のソースからのファームウェアプロビジョニングを調整するマネージャビリティエンジンを有するコンピューティングシステムの実施形態のブロック図である。システム２００は、ハードウェアプラットフォームを表し、図１におけるハードウェアプラットフォーム１０２の一例であり得る。システム２００の全ての要素が各実装において存在するわけではない。一実施形態において、システム２００はＳＯＣ２１０を含み、ＳＯＣ２１０は、プロセッサ２２０、デコーダ２１２、メモリコントローラ２１４、およびＣＳＭＥ２３０を含む。一実施形態において、システム２００は、システムオンチップの形で構成されない別個のコンポーネントとしてＳＯＣ２１０の複数の要素を含む。一実施形態において、システム２００はＳＯＣ２１０に示されないものと同等の複数のコンポーネント構造物を含む。
【００４０】
プロセッサ２２０は、システム２００のためのホストプロセッサまたはホスト処理ユニットである。プロセッサは、シングルまたはマルチコアデバイスであり得る。通常、プロセッサ２２０は、キャッシュデバイス（具体的に示されない）および／またはメモリ２６０からの複数の命令を実行する。メモリ２６０は揮発性メモリデバイスを表し、メモリコントローラ２１４によりアクセス可能である。メモリコントローラ２１４は、デコーダ２１２によりデコードされた複数のデータ要求に基づいて複数のメモリアクセスコマンドを生成するロジックを表す。デコーダ２１２は、プロセッサ２２０により実行される複数の命令のデコードを提供し、これはシステム２００内に格納されたデータに影響する。一実施形態において、メモリ２６０は、データまたはコードに関係する命令がメモリ２６０内でキャッシュされない場合、直接のアクセス経路（具体的に示されない）を介して不揮発性ストレージ２４０にアクセスする。
【００４１】
ＣＳＭＥ２３０は、マネージャビリティエンジンを表す。マネージャビリティエンジンは、ハードウェアプラットフォームコントローラの１つのタイプである。一実施形態において、ＣＳＭＥ２３０は、ハードウェアプラットフォームシステム２００上のセキュリティ、ならびにハードウェアプラットフォーム上の複数のリソースへのアクセス管理の双方に関係する動作を実行するロジックを含む収束セキュリティマネージャビリティエンジンであり得る。システム２００の目的として、ＣＳＭＥ２３０は、ハードウェアプラットフォームが不揮発性ストレージデバイス２４０上に有効または機能的なファームウェアを含むか否かを判断する。一実施形態において、ハードウェアプラットフォームが機能的なファームウェアを欠く場合に、ＣＳＭＥ２３０は、外部インターフェース２５０にアクセスして、ファームウェアを取得する。一実施形態において、ストレージ２４０は、プライマリファームウェアイメージおよび１または複数のバックアップファームウェアイメージを格納する。従って、ＣＳＭＥ２３０は、ストレージ２４０が機能的または動作可能なプライマリファームウェアイメージを含むか否かをまず判断し得る。機能的なプライマリファームウェアイメージが存在しない場合、ＣＳＭＥ２３０は、ストレージ２４０にバックアップまたはセカンダリファームウェアイメージを取得するように要求し得る。機能的なファームウェアイメージが存在しない場合、ＣＳＭＥ２３０は、外部インターフェース２５０にアクセスしてファームウェアイメージを取得する。一実施形態において、ＳＯＣ２１０はＣＳＭＥ２３０を含まず、ファームウェアにアクセスするべくＲＯＭコードおよび／またはコントローラデバイスを含み、これらはファームウェアにアクセスしてプロビジョニングすることに関連して説明される複数の動作を実行し得る。
【００４２】
ストレージ２４０は、ファームウェアを用いるハードウェアプラットフォーム上の任意のコンポーネント用のファームウェアを含み得る。例えば一実施形態において、ストレージ２４０は、ＣＳＭＥ２３０、ストレージデバイス２４０、およびプロセッサ２２０用の１または複数のファームウェアイメージ（例えば、プライマリおよび１または複数のバックアップを各々）格納する。図示されるように、ＣＭＳＥファームウェア２４２は、ＣＳＭＥ２３０用のファームウェアを表す。ＣＳＭＥ２３０は、動作を開始すると、ＲＯＭコード２３２を実行する。ＲＯＭコード２３２は、ＣＭＳＥファームウェア２４２にアクセスすることを試みる。システムファームウェア２４４は、プロセッサ２２０用のファームウェアを表し、システム全体のファームウェアでもあり得る。例えばシステムファームウェア２４４は、ホストＯＳをロードすることに備えて実行されるホストプロセッサのためのＢＩＯＳを表し得る。ストレージファームウェア２４６は、ストレージデバイス自体（明示的に示されない）においてコントローラにより実行されるべきファームウェアを表す。ストレージ２４０が自身のファームウェアを見つけることができない場合、そのＲＯＭコード（具体的に示されない）は、メッセージをＣＳＭＥ２３０（プラットフォームコントローラ）に生成して、機能的なファームウェアイメージにアクセスできないことを示し得る。次にＣＳＭＥ２３０は、外部インターフェース２５０にアクセスして、ファームウェアイメージを取得し得る。
【００４３】
一実施形態において、ＣＳＭＥ２３０は、システムファームウェア２４４の実行を開始し、従って機能的なファームウェアイメージが存在するか否かを判断する。一実施形態において、プロセッサ２２０はＲＯＭを含み、自身のファームウェアを開始し得る。この場合、プロセッサ２２０はＣＳＭＥ２３０に、自身がファームウェアを欠いていることを示し得る。次にＣＳＭＥ２３０は、外部インターフェース２５０にアクセスして、ファームウェアイメージを取得し得る。従って、ＣＳＭＥ２３０はまず、ファームウェアイメージのためにストレージ２４０にアクセスし、ストレージ２４０が有効なファームウェアイメージを有しない場合、ＣＳＭＥ２３０は外部インターフェースにアクセスして、ファームウェアイメージを取得する。対照的に、従来のシステムにおいては、プラットフォームコントローラは、ファームウェアにアクセスするべくフラッシュデバイスにアクセスする。従って、ＳＯＣ２１０のＣＭＳＥ２３０もしくはプロセッサ２２０、または別のコントローラがシステム用のファームウェアおよび／またはコントローラデバイス自体にアクセスすることを試みることが理解されよう。一実施形態において、ＳＯＣ２１０のＣＭＳＥ２３０もしくはプロセッサ２２０、または別のコントローラは、プロセッサ２２０に対するファームウェアがシステムファームウェアとは別個である場合、そのようなファームウェアにアクセスすることを試みる。
【００４４】
外部インターフェース２５０は、ＣＳＭＥ２３０がＲＯＭ２３２を介して直接にアクセスし得る任意の１つまたは複数のハードウェアインターフェースを表す。通常、ＲＯＭ２３２はファームウェアをプロビジョニングする単一の外部インターフェースにアクセスするように構成される。一実施形態において、ＲＯＭ２３２は、複数の異なるハードウェアインターフェースにアクセスして、プロビジョニングするファームウェアイメージを取得するように構成され得る。ＲＯＭ２３２が複数の異なるインターフェースにアクセスするように構成される場合において、あるインターフェースがまず試みられ、次のインターフェースは、第１のインターフェースが有効なファームウェアイメージを含まない場合に試みられる優先順序が構成され得ることが理解されよう。外部インターフェース２５０の例としては、ＵＳＢ２５２、ネットワークインターフェース２５４、および他のインターフェース２５６が挙げられ得るが、これらに限定されない。ネットワークインターフェース２５４は、ワイドエリアネットワークインターフェース、ローカルエリアネットワークインターフェース、有線インターフェース、無線インターフェース、または複数のインターフェースのいくつかの組み合わせを含み得る。他のインターフェース２５６は、ファームウェアイメージ用の外部ソースを提供するように構成された複数の専用インターフェースを含む、具体的に識別されないインターフェースを表し得る。
【００４５】
図３は、マネージャビリティエンジンが不揮発性ストレージデバイスとインターフェース接続するシステムの実施形態のブロック図である。システム３００は、ハードウェアプラットフォームの複数の要素を表し、図２のシステム２００または図１のシステム１００における複数の要素の例であり得る。より具体的には、システム３００はＣＳＭＥ３１０を含み、ＣＳＭＥ３１０は、コンピューティングデバイス用のマネージャビリティエンジンまたはプラットフォームコントローラを表す。ＣＳＭＥ３１０は、１または複数の別個の要素として実装され得、システム３００において図示されるものよりも複雑であるか、または複雑でない可能性があることが理解されよう。一実施形態において、ＣＳＭＥ３１０は、システムオンチップおよび／またはマルチチップパッケージとしてのホストプロセッサ（図示せず）と共に集積される。
【００４６】
一実施形態において、ＣＳＭＥ３１０はプロセッサデバイスもしくはコントローラデバイスであるか、またはこれらを含む。ＣＳＭＥ３１０は、ＣＳＭＥ３１０に電源が投入され、または低電力状態からウェイクした状態のときには常に動作を開始するＲＯＭコード（システム３００には具体的に示されない）を含む。従来、プラットフォームコントローラ用のＲＯＭコードは非常に基本的なものであり、コントローラがそのファームウェアにアクセスすることを可能にする。ＣＳＭＥ３１０用のＲＯＭコードは、従来提供されたものと同一の基本的機能を含み、また、プラットフォーム上に機能的なファームウェアが存在するか否かを判断して、外部ソースからファームウェアをプロビジョニングし得る。
【００４７】
一実施形態において、ＣＳＭＥ３１０は外部インターフェースドライバ３３０を含む。ドライバ３３０は、直接にＣＳＭＥ３１０に提供されるハードウェアインターフェース用のコントローラであり得る。従って、ＣＳＭＥ３１０は、ファームウェアをプロビジョニングする外部インターフェースを直接に制御し得る。代替的な実施形態において、ＣＳＭＥ３１０は、そのＲＯＭコードにロジックを有するＣＳＭＥ３１０からオフチップのハードウェアコントローラを介して外部インターフェースにアクセスする。外部インターフェースドライバ３３０は、例えばＵＳＢポートに駆動するハードウェアであり得る。あるいは、ドライバ３３０は、上記の異なるタイプのバスまたはインターフェースを駆動し得る。ドライバ３３０は、同一のインターフェース用のハードウェアプラットフォーム内の他の複数のドライバに加えられ得る。一実施形態において、ハードウェアプラットフォームが機能的なファームウェアを欠いていると判断する場合、ＣＳＭＥ３１０がドライバ３３０にアクセスだけする。そうでなければ、ＣＳＭＥ３１０は、インターフェースをロードするのを阻止するべく、ドライバ３３０を高インピーダンスまたは他の非アクティブな状態に保持し得る。
【００４８】
一実施形態において、ＣＳＭＥ３１０は、従来はフラッシュデバイスに送信された複数の要求を、ホストプロセッサから受信する。例えば、従来は、ブートフロー中にフラッシュを読み取り、書き込み、および／または消去するためのフラッシュデバイスに送信された複数のコマンドは、ＣＳＭＥ３１０を介して不揮発性（ＮＶ）ストレージデバイス３４０に送信され得る。ＣＳＭＥ３１０は、不揮発性メモリインターフェース３２０を介してストレージデバイス３４０とインターフェース接続する。ストレージデバイス３４０が次世代デバイス（ＮＧＤ）である実施形態において、インターフェース３２０は、次世代デバイスインターフェース（ＮＧＩ）とも称され得る。ストレージデバイス３４０は、インターフェース３５０を含み、インターフェース３５０は、メモリインターフェース３４０に対応し、嵌合インターフェースを提供する。インターフェース３２０がブートアップの目的でストレージデバイス３４０に送信し得る複数のコマンドの例としては、読み取り、書き込み、消去、読み取りＳＦＤＰ、読み取りＪＥＤＥＣ  ＩＤ、読み取り状態、および書き込み状態が挙げられ得る。
【００４９】
一実施形態において、ＣＳＭＥ３１０のインターフェース３２０およびストレージデバイス３４０のインターフェース３５０は、低速動作および高速動作の双方をサポートする。低速３２２および低速３５２は、低速動作または低速モードを表すが、高速３２４および高速３５４は、高速動作または高速モードを表す。「低速」および「高速」は、相対的な用語であることが理解されよう。本明細書において用いられるように一般的には、高速は、複数の通信許容範囲を満たすことができる複数の設定を見つけるトレーニングを必要とするインターフェースを介する複数の通信速度を示す。低速は、適切な複数のインターフェース設定を見つけるべく、一般にトレーニングが必要とされない程に許容範囲が十分広い通信速度を示す。従って、低速動作はトレーニングを必要とせずに行われ得るが、高速動作は、トレーニングを通じて見つけられる複数の設定を必要とする。トレーニングは、インターフェースを介して既知の複数のメッセージを交換し、適切な送受信の試験を行うことを指す。トレーニングはイテレーティブになる傾向にあり、複数の異なる設定を試験して、最良の結果（例えば、ある期間またはデータ量に対してエラーが最も少なく、またはエラーのパーセンテージが最も低い）を提供する設定を選択する。一実施形態において、低速モード３２２および高速モード３２４は、同一のハードウェアインターフェースメカニズム（例えば、チャネル、ピン、レジスタ、ドライバ、および他のリソース）を用いるが、インターフェースがどのように動作するか（例えば、高速クロックを用い、読み取り／デコードのための異なる複数の設定を用いる）において異なる。
【００５０】
一実施形態において、インターフェース構成データは、既定の低速モードで受信され、次にインターフェース３２０および３５０が高速通信または高速モード３２４を用いることを優先するのを可能にし、これによってより大きいスループットを可能にする。一実施形態において、ＣＭＳＥ３１０は、自身が高速モード３２４を可能にするべく格納されたトレーニングデータまたは複数の設定を有するか否かを判断する。一実施形態において、トレーニングデータは、インターフェースに対する複数のタイミングパラメータまたはタイミング設定を含む。複数のタイミングパラメータは、レシーバによるデータサンプリングがトランスミッタによるデータ送信タイミングにそろうことを保証するべく、どのようにサンプリング信号を同期するかを示し得る。
【００５１】
インターフェース３２０がトレーニングされていないとＣＳＭＥ３１０が判断する場合、ＣＳＭＥ３１０は、ストレージデバイス３４０との初期通信に低速モード３２２を使用する。一実施形態において、ＣＳＭＥ３１０は、高速モード３２４を試みるが、ストレージデバイス３４０が高速モード３５４をサポートしないことを発見する。従って、ＣＳＭＥ３１０は、低速モード３２２を使用して、高速通信がトレーニングされ得るまで、低速モード３５４によりインターフェース３５０と通信し得る。一実施形態において、低速モード３２２、３５２によりストレージデバイス３４０に複数のブートアップコマンドまたは情報を送信する前、またはこれに代えて、ＣＭＳＥ３１０は、インターフェース３２０を介するインターフェース３５０に対するトレーニングを行う。システム３００に対する複数の設定によりインターフェースをトレーニングした後、ＣＳＭＥ３１０は、高速モード３２４、３５４を使用または再開して、ブートアップ動作を継続し得る。一実施形態において、ＣＳＭＥ３１０が、高速モード３２４、３５４により外部ファームウェアソースからストレージデバイス３４０へとファームウェアをプロビジョニングだけする。
【００５２】
一実施形態において、ＣＳＭＥ３１０およびストレージデバイス３４０は、インターフェース３２０および３５０を介した交換にセキュリティを提供する。インターフェースを介してセキュリティを実行するべく、インターフェースに結合された双方のデバイスは、実装されるセキュリティをサポートする複数のコンポーネントを含むことが理解されよう。従って、ＣＭＳＥ３１０は、セキュリティエンジン３１２、セキュリティキー３１４、および乱数生成器３１６を含み得るが、ストレージデバイス３４０は、対応するセキュリティエンジン３４２、セキュリティキー３４４、および乱数生成器３４６を含み得る。簡略にする目的で、セキュリティ動作については、ＣＳＭＥ３１０およびその複数のセキュリティコンポーネントおよびインターフェースに関して検討し、ストレージデバイス３４０およびその複数のセキュリティコンポーネントおよびインターフェースに適用されることが理解され得る。
【００５３】
セキュリティエンジン３１２は、ＣＳＭＥ３１０がインターフェース３２０を介して通信用のセキュリティに適用されることを可能にするロジックを表す。一実施形態において、セキュリティエンジン３１２は、ＣＳＭＥ３１０用のＲＯＭコードに実装される。一実施形態において、セキュリティエンジン３１２は、ＣＳＭＥ３１０用のファームウェアから実行される複数の要素を含み、従ってＣＳＭＥ３１０が有効なファームウェアを実行するまで適用されない。例えば、ＣＳＭＥ３１０は、ファームウェアをロードする前にインターフェース３２０を介した通信用の指数ベースのセキュリティ手順を適用し得、次にファームウェアをロードした後にインターフェース３２０を介した通信用の共有キーセキュリティ手順を適用し得る。一実施形態において、ＲＯＭコードは、共有キーを指数ベースのセキュリティ手順から生成するように構成され得る。
【００５４】
当業者には理解されるように、一般的な指数ベースのセキュリティ手順はディフィー・ヘルマン実装であり、ＣＳＭＥ３１０およびストレージデバイス３４０の双方は、（ＲＯＭの形で、または決まった位置に結合された）ベース値（「Ｇ」と称される）を含む。次に複数の別個のデバイスは、乱数生成器（３１６および３４６）を有する別個の指数部を生成し、これらの指数部は、「ａ」および「ｂ」と称される。次にＣＳＭＥ３１０は、Ｇ∧ａにより署名される要求を生成することができ、ストレージデバイス３４０は、Ｇ∧ｂにより署名される応答を生成することができる。次にデバイスは、ハンドシェイク手順を実行し得、これによりインターフェース上にセッション暗号化キーを確立する。セッション暗号化キーを確立した後、ＣＳＭＥ３１０およびストレージデバイス３４０は次に、暗号化済みのルートキーを交換するべくセッション暗号化キーを用いた暗号化済みの交換において、インターフェースを介して共有キーまたはルートキーを交換し得る。共有セキュリティキー３１４、３４４を生成するプロセスも既知であると想定される。セキュリティエンジン３１２および３４２は、複数のキー（非対称的および／または対称的なものの双方）を生成する動作、ならびに他の複数のセキュリティ交換動作を実行する。
【００５５】
複数の共有キーまたはルートキーは、所有攻撃（攻撃者がハードウェアおよびインターフェースにアクセスを有する）を通して取得され得ることが理解されよう。そのような攻撃は「反射攻撃」と称され得、攻撃者は、インターフェースを介して既に送信された交換をリプレイすることを試み、セキュリティの迂回を試みる。一実施形態において、ＣＳＭＥ３１０は、共有セキュリティキー３１４の生成および使用を監視することにより、システム３００を反射攻撃から保護し得る。一実施形態において、ＣＳＭＥ３１０は、キーの使用を監視する複数のオンチップヒューズ３１８を含む。例えば、セキュリティエンジン３１２は、生成される各共有キーについてヒューズを飛ばし、またはヒューズパターンを設定し得る。従って、セキュリティエンジン３１２を介するＣＳＭＥ３１０は、一度に１つのキーのみが有効であることを保証し得る。攻撃者が前のキーでメッセージに署名することを試みると、ＣＳＭＥ３１０は、それが現行の有効なキーでないことを検出して攻撃を阻止し得る。通常、キー毎に１つのヒューズを用いることで十分であるが、当業者は、より複雑なヒューズパターンが認識され得ることを理解するであろう。
【００５６】
当業者は、ＨＭＡＣ（ハッシュメッセージ認証コード）を既知の共有暗号化キーセキュリティ手順として認識するであろう。ＨＭＡＣにより、送信デバイスは共有キーを用いて複数のメッセージに署名し、署名済み／認証済みメッセージを送信する。受信デバイスは、署名済みメッセージを受信し、共有キーを用いてデコードする。メッセージが共有キーにより適切に認証されない場合、受信デバイスは、要求される動作またはコマンドを実行しない。メッセージが認証されると、受信デバイスは、要求された動作またはコマンドを実行する。一実施形態において、システム３００は、ＨＭＡＣ−ＳＨＡ−２５６等のセキュアハッシュアルゴリズム（ＳＨＡ）をセキュリティ／署名プロトコルとして使用する。従って、ルートキー（セキュリティキー３１４に格納される）は、インターフェース３２０、３５０全体で依然として秘密であり得る。
【００５７】
一実施形態において、セキュリティエンジン３１２は、共有キーをプロビジョニングして秘密を保持する複数の認証済みコマンドをサポートする。例えば上述のように、指数ベースのセキュリティは、共有キーを生成するべく使用され得る。認証済みコマンドとしては、認証済みルートキーの書き込みおよび認証済み共有キーの更新が挙げられ得るが、これらに必ずしも限定されるものではない。一実施形態において、ＣＳＭＥ３１０は、（例えば、セキュリティエンジン３１２による）リプレイ保護モノトニックカウンタ（ＲＰＭＣ）を保持する。ＲＰＭＣが含まれる実施形態において、追加の複数のコマンドは、認証済みのカウンタ読み取り、および認証済みのカウンタインクリメントを含み得る。
【００５８】
ストレージデバイス３４０は、ファームウェア３７０を含む。ファームウェア３７０は、ＣＳＭＥ３１０、ストレージデバイス３４０、およびホストプロセッサ（具体的に示されない）のようなハードウェアプラットフォームのハードウェアコンポーネント用のファームウェアを含む。ＣＳＭＥ３１０は、外部インターフェースドライバ３３０を介してハードウェアプラットフォームの外部のソースからストレージデバイス３４０へとファームウェア３７０をプロビジョニングする。複数のファームウェアイメージ３７２−０〜３７２−（Ｎ−１）は、各デバイス用のプライマリファームウェアイメージを含み、任意の１つまたは複数のコンポーネント用のゼロまたはそれより大きいバックアッププライマリイメージを含み得る。全てのコンポーネントがストレージデバイス３４０に格納された同一の数のファームウェアイメージを有する必要はない。一般的な実装は、ハードウェアプラットフォームの各ハードウェアコンポーネント用のプライマリおよびセカンダリファームウェアイメージを格納することであろう。
【００５９】
図４は、ファームウェアがＵＳＢデバイスからプロビジョニングされ得るシステムの実施形態のブロック図である。システム４００は、ハードウェアプラットフォームの複数の要素を表し、図２のシステム２００または図１のシステム１００における複数の要素の例であり得る。システム４００のハードウェアプラットフォームは、ＣＳＭＥ４１０として表されるハードウェアプラットフォームコントローラ、ＣＰＵ４３０として表されるホストプロセッサ、ＮＧ（次世代）メモリ４６０として表される不揮発性ストレージデバイス、およびＵＳＢインターフェース４８０として表される外部ハードウェアインターフェースを含む。ＵＳＢインターフェース４８０はＵＳＢデバイス４９０に接続し、ＵＳＢデバイス４９０は、外部ファームウェアソースを表す。一実施形態において、ハードウェアプラットフォームは、ＣＰＵ４３０からの複数のコマンドをＮＧメモリ４６０にインターフェース接続する複数のコントローラ要素を含み、コマンドは従来は、ファームウェアを格納するフラッシュデバイスにルーティングされた。複数のコントローラ要素は、ＳＰＩ  ＴＯ  ＮＧＩ４４０およびＮＧＩコントローラ４５０で表されるコマンドコンバータを含み得る。
【００６０】
ＣＳＭＥ４１０は、ＣＳＭＥ４１０が動作を開始する場合に、動作を開始するＲＯＭコード４１２を含む。ＣＳＭＥ４１０は、システム４００の製造を含み得る「ライフサイクルイベント」、ならびに破損からのリカバリ、ファームウェアの更新に関係するシステム４００の初期化、ＮＧメモリ４６０のアップグレードに関係するシステム４００の初期化、またはプラットフォームコントローラの他の複数のパワーサイクルイベントにおいて動作を開始する。ＣＳＭＥ  ＲＯＭコード４１２が開始すると、ＣＳＭＥ４１０に関連付けられたファームウェアを探す。一実施形態において、ＣＳＭＥ４１０は、次世代メモリデバイスに直接にアクセスするように構成され得る。一実施形態において示されるように、ハードウェアプラットフォームは、従来の経路がＮＧメモリ４６０にリルートされることを可能にする複数の要素を用いて変更され得る。
【００６１】
一実施形態において、ＣＳＭＥ４１０は、ＰＣＨ（周辺コントローラハブ）のＳＰＩコントローラ４２０として示されるハードウェアプラットフォーム上でＳＰＩ（シリアル周辺機器インターフェース）通信を制御するコントローラを含む。ＳＰＩは、ハードウェアプラットフォームを共有する複数のデバイスまたはチップのインターコネクトを可能にするマスタ・スレーブのインターフェースプロトコルであることが理解されよう。通常、スレーブデバイスは、システム４００のホストコントローラまたはホストＳＯＣの「周辺」デバイスである。従って、ＣＳＭＥ４１０は、ファームウェア用のＣＳＭＥ  ＲＯＭコード４１２において示される位置に対してアクセスを開始し得る。ＣＳＭＥ４１０は初めにはファームウェアを有さず、特定のライフサイクルイベントにおいて、ＮＧメモリ４６０も格納された有効なファームウェアを有しない。
【００６２】
一実施形態において、ＳＰＩコントローラ４２０は、ファームウェアを格納する外部のＳＰＩフラッシュにアクセスするのではなく、ＳＰＩ  ＴＯ  ＮＧＩ（次世代インターフェース）４４０を介して、ＮＧメモリ４６０に対する複数のアクセス動作を複数の命令にデコードする。ＮＧＩは、次世代メモリデバイスへのインターフェースを表し、従来のストレージデバイスとは異なることが期待され、また従来のＳＰＩデバイス、またはＳＰＩコントローラ４２０に接続されるデバイスとも異なる。ＳＰＩ  ＴＯ  ＮＧＩ４４０は、ＳＰＩプロトコルを介して送信された複数のコマンドおよび要求を、ＮＧメモリ４６０により理解される複数のコマンドおよび要求に変換する。ＮＧＩコントローラ４５０は、ハードウェアおよび／またはハードウェアインターフェース（例えば、送信用のドライブピンおよび受信用のサンプルピン）を制御するロジックを表す。ＮＧＩコントローラ４６２は、ＣＳＭＥ４１０からのインターフェースを完全なものにするＮＧメモリ４６０内のコントローラまたは制御ロジックを表す。
【００６３】
ＮＧメモリ４６０は、ＲＯＭコード４６４を含み、ＲＯＭコード４６４は、電源を投入され、またはパワーサイクルされると実行されるメモリデバイスのコードを表す（デバイスへの電源を中断することによるハードなパワーサイクルであっても、デバイスを低電力、スリープ、またはサスペンド状態に置くソフトなパワーサイクルであっても関係なく）。ＮＧ  ＲＯＭコード４６４は、ストレージデバイス上にローカルに格納されたファームウェアイメージを探す。ＮＧ  ＲＯＭコード４６４は、ファームウェア４６８をプロビジョニングするＣＳＭＥ４１０との通信に従事するのに必要なロジックを含む。ファームウェア４６８は、ＮＧメモリ４６０の次世代ストレージ４６６に格納される。ＮＧメモリ４６０もシステム４００用のホストオペレーティングシステムおよび複数のアプリケーションを格納することが理解されよう。ファームウェア４６８は、ＮＧメモリ４６０内にインシステムでプロビジョニングされ得る。ホストオペレーティングシステムおよび複数のアプリケーションも、ＮＧメモリ４６０にインシステムでプロビジョニングされ得る。
【００６４】
一実施形態において、ＣＳＭＥ４１０は、ＮＧメモリ４６０に複数の要求を送信する場合に用いる、ＮＧＩコントローラ４５０用のトレーニングデータ（例えば、タイミングパラメータもしくは他のパラメータ、または設定）を格納するか否かを判断する。トレーニングデータが存在しない場合、ＣＳＭＥ４１０は、低速インターフェースモードを用いてファームウェア要求をＮＧメモリ４６０に送信し得る。利用可能なトレーニングデータが存在する場合、ＣＳＭＥ４１０は、高速インターフェースモードを用いて複数の要求を送信し得る。一実施形態において、ＮＧメモリ４６０がＣＳＭＥ４１０により要求された機能的または有効なファームウェアイメージを格納しない場合、ＮＧメモリ４６０は、要求を拒否する。ＣＳＭＥ４１０は（ＣＳＭＥ  ＲＯＭコード４１２により）、ＮＧメモリ４６０から拒否を受信し、次に外部ソースからのファームウェアを要求する。従って、ＣＳＭＥ  ＲＯＭコード４１２は、まずＮＧメモリ４６０におけるファームウェアについて確認し、次に有効なファームウェアが見つからない場合にファームウェア用の外部インターフェースを確認するように構成され得る。一実施形態において、ＣＳＭＥ４１０およびＮＧメモリ４６０は、低速モードでインターフェースをトレーニングして、ファームウェアをプロビジョニングする高速モードを用いることを可能にし得る。
【００６５】
外部インターフェースにアクセスするべく、ＣＳＭＥ  ＲＯＭコード４１２は、ＰＣＨ  ＵＳＢコントローラ４７０または別のインターフェースコントローラ（図示せず）にアクセスすることで、適切なハードウェアインターフェースにアクセスし得る。システム４００におけるハードウェアインターフェースは、ＵＳＢデバイス４９０に接続するＵＳＢインターフェース４８０である。ＵＳＢデバイス４９０は次に、ファームウェアイメージ４９２を格納する。一実施形態において、ＣＳＭＥ４１０は、（ＳＰＩプロトコルに類似する）マスタ・スレーブ構成によりＵＳＢデバイス４９０にアクセスし、この場合、ＵＳＢデバイス４９０がマスタであり、ＣＳＭＥ４１０がスレーブである。そのような構成において、ＣＳＭＥ４１０は、ＵＳＢデバイス４９０用のストレージレシーバとして動作し得、ＣＳＭＥ４１０は、ファームウェアイメージをＮＧメモリ４６０へと渡す。
【００６６】
従って、ＣＳＭＥ  ＲＯＭコード４１２は、ファームウェアイメージ４９２をＵＳＢデバイス４９０から読み取って、データをＳＰＩコントローラ４２０に書き込み得る。次にＳＰＩコントローラ４２０は、ＳＰＩ  ＴＯ  ＮＧＩデコーダ４４０へと、またＮＧＩコントローラ４５０を通じてＮＧメモリ４６０のＮＧＩコントローラ４６２へとデータを転送し得る。最終的に、ＮＧ  ＲＯＭコード４６４は、イメージをファームウェア４６８としてＮＧストレージ４６６に書き込む。ファームウェアイメージ４９２を読み取り、ファームウェア４６８に書き込むことは通常、完全なイメージがＮＧメモリ４６０に書き込まれるまで反復される、複数の読み取りおよび書き込み動作により行われることが理解されよう。
【００６７】
一実施形態において、ファームウェアをＮＧメモリ４６０にプロビジョニングした後、ＣＳＭＥ  ＲＯＭコード４１２は、ＮＧメモリ４６０からのファームウェアを探すべく、ルーチンの実行を反復する。従って、ＣＳＭＥ４１０は、ＮＧＩ４３０およびＮＧＩコントローラ４５０へのＳＰＩ全体でＳＰＩコントローラ４２０を介して要求を生成する。一実施形態において、ＣＳＭＥ  ＲＯＭコード４１２は、低速モードで各ファームウェア要求を開始し、トレーニングシーケンスを使用して高速モードを可能にする。ファームウェアがプロビジョニングされた後にＣＳＭＥ  ＲＯＭコード４１２がファームウェアを要求する場合、ＮＧメモリ４６０は要求を満たし、首尾良いブート動作をもたらす。ファームウェア４６８が破損した場合、一実施形態において適切なＲＯＭコードは（例えば、ＣＳＭＥ４１０用のファームウェアに対する破損の場合におけるＣＳＭＥ  ＲＯＭコード４１２、またはＮＧメモリ４６０用のファームウェアに対する破損の場合におけるＮＧ  ＲＯＭコード４６４）、ファームウェアのセカンダリイメージを要求し得る。有効なファームウェアが存在しない場合、ＣＳＭＥ４１０は、再び外部ソースからのファームウェアイメージ４９２をプロビジョニングする。
【００６８】
一実施形態において、（ＳＰＩコントローラ４２０から、ＳＰＩ  ＴＯ  ＮＧＩ４４０へ、ＮＧＩコントローラ４５０へ、ＮＧＩコントローラ４６２への）ＮＧＩインターフェースは、標準的ＳＰＩインターフェース機能の変換をサポートする。従って、標準的ＳＰＩ読み取り、書き込み、および消去動作は、ＮＧメモリ４６０に対する同等の複数の動作にマッピングされ得る。更に一実施形態において、システム４００は、複数のＲＰＭＣをサポートする。ＲＰＭＣがサポートされる場合、ＮＧＩインターフェースは、複数のコマンドによりＲＰＭＣ機能を一意なＩ／Ｏ（入力／出力）パスにマッピングし得る。複数のコマンドによるそのようなパスは、ＲＰＭＣコマンドを用いることを可能にし、ＲＰＭＣコマンドは、ＮＧ  ＲＯＭコード４６４によりデコードされ得る。一実施形態において、ＮＧＩコントローラ４５０は、ＣＰＵ４３０により開始された複数のＳＰＩコマンドの終了をサポートする。ＳＰＩコマンドは、複数の規格モードコマンド、ＳＭＭ（システム管理モード）コマンド、およびＣＭＳＥ４１０の複数の実行エンジンからのコマンドを含み得る。
【００６９】
図５は、インシステムでファームウェアをプロビジョニングし得るシステムにおいて動作するファームウェアにアクセスするプロセス５００の実施形態のフロー図である。一実施形態において、プラットフォームコントローラ（例えば、マネージャビリティエンジンまたは収束セキュリティマネージャビリティエンジン）は、５０２でウェイクアップトリガを検出する。ウェイクアップトリガは、コントローラの実行を開始し、ソフト再起動（例えば、デバイスを低電力状態からウェイクさせる中断）またはハード再起動（例えば、デバイスへの電源投入）であり得る。コントローラは５０４において、ウェイクアップトリガに応答して自身のＲＯＭコードの実行を開始する。ＲＯＭコードは、コントローラの動作を開始すべく基本的な複数の初期動作を実行する。ＲＯＭコードが制御する１つの動作は、コントローラに対するランタイム実行ロジックを提供するファームウェアにアクセスすることである。一実施形態において、コントローラはホストプロセッサも開始し、それ自体に加えて、ホストプロセッサ用のファームウェアイメージにアクセスし得る。一実施形態において、ホストプロセッサは、プラットフォームコントローラとして動作する。
【００７０】
一実施形態において、コントローラは５０６において、複数のセキュリティ手順を行い、コントローラからファームウェアイメージが格納されるべき不揮発性ストレージデバイスまでのインターフェースを保護する。コントローラは、指数ベースのセキュリティ手順、共有キーセキュリティ手順、または別のセキュリティ手順を行い得る。コントローラは５０８において、ＮＧＭインターフェースにアクセスし、５１０においてインターフェースを介してＮＧＭデバイスにアクセスしてファームウェアを取得する。コントローラからのファームウェアに対する要求に応答して、ＮＧＭデバイスは、有効なファームウェアを有するか否かを判断し得る。一実施形態において、有効なファームウェアが存在するか否かについて判断することは、５１２において有効なプライマリファームウェアイメージが存在するか否かをＮＧＭデバイスが決定することを含む。コントローラは、そのファームウェアおよびホストプロセッサ用のファームウェアにアクセスし得ることが理解されよう。ＮＧＭは、そのファームウェアにアクセスして、それが有効なファームウェアイメージを見つけることができない場合に、コントローラに示し得る。
【００７１】
５１４の「ＹＥＳ」の分岐において有効なファームウェアイメージが存在するとＮＧＭデバイスが判断する場合、５３０において通常のブートシーケンスを使用する。一実施形態において、５１４の「ＮＯ」の分岐で有効なファームウェアイメージが存在しないとＮＧＭデバイスが判断する場合、ＮＧＭデバイスは５１６において、有効なセカンダリまたはバックアップファームウェアイメージが存在するか否かを判断し得る。５１８の「ＹＥＳ」の分岐で有効なセカンダリイメージが存在する場合、ＮＧＭデバイスは、ファームウェアイメージをコントローラに提供し、５２０においてプライマリファームウェアイメージをバックアップイメージから復元し得る。次にコントローラは、５３０において通常のブートシーケンスを実行する。５１８の「ＮＯ」の分岐においてＮＧＭデバイスが有効なセカンダリイメージを有しない場合、ＮＧＭデバイスは、コントローラに有効なファームウェアが存在しないことを示し、コントローラは５２２において、外部インターフェースにアクセスしてファームウェアイメージを取得する。次にコントローラは、５２４において、外部インターフェースに接続されたソースからＮＧＭデバイスにインシステムでファームウェアイメージをプロビジョニングする。ファームウェアがプロビジョニングされた後、コントローラは次に、ＮＧＭデバイスからファームウェアを要求し得、ＮＧＭデバイスはファームウェアをコントローラに提供する。次にコントローラは、５３０において通常のブートシーケンスを開始し得る。
【００７２】
通常のブートシーケンスにおいて、コントローラは５３２において、ＮＧＭデバイスからのファームウェアにアクセスし、実行するファームウェアをロードする。ファームウェアをロードすることは部分的に、５３４においてホストプロセッサ用のシステムファームウェアをロードして、システムを初期化することを含み得る。ホストプロセッサは、５３６においてシステムファームウェアを実行し、システム動作を開始する。システムを開始することは部分的に、ＮＧＭデバイスからホストオペレーティングシステムにアクセスして、システム上でロードすることを含む。次にシステムは、５３８において通常の動作を続行し得る。
【００７３】
図６Ａは、コンピューティングシステムの初期動作用のファームウェアをプロビジョニングするプロセス６１０の実施形態のフロー図である。コンピューティングシステムの初期動作は、ハードウェアプラットフォーム上のファームウェアに対するライフサイクルイベントの一例であり得、これに対してプラットフォームコントローラは、新しいファームウェアをプロビジョニングする。製造者は６１２において、ホストプロセッサおよび／またはプラットフォームコントローラを有するハードウェアプラットフォーム、ＮＧＭデバイス、ならびにファームウェアイメージをプロビジョニングするべくアクセスされ得る外部ハードウェアインターフェースを含むデバイスを製造する。一実施形態において、初期システムはベアメタルであり、従ってブートすることができるようになる前にファームウェアをプロビジョニングする必要がある。製造者は、外部インターフェースにおいて外部ファームウェアソースを提供して（例えば、ソースをＵＳＢポートまたは他のハードウェアインターフェースにプラグ接続する）、６１４において第１の動作のためにデバイスに電力供給する。システムは、ウェイクアップトリガとして動作するプラットフォームコントローラに電力投入し、および／または６１６においてプラットフォームコントローラに対するウェイクアップトリガを生成する。コントローラは、（プロセス５００から続く）５０２においてウェイクアップトリガを検出して、動作を開始する。
【００７４】
図６Ｂは、ファームウェアの更新と共にファームウェアをプロビジョニングするプロセス６２０の実施形態のフロー図である。ファームウェアの更新は、ハードウェアプラットフォーム上のファームウェアに対するライフサイクルイベントの一例であり得、これに対してプラットフォームコントローラは、新しいファームウェアをプロビジョニングする。６２２においてファームウェアの更新の準備ができたことをシステムが検出すると、（プロセス５００から続く）５３８においてシステムが正常に動作していると想定される。ファームウェアの更新は、システムリカバリの場合にも提供され得、これは図６Ｃのプロセス６３０において対処されることが理解されよう。一実施形態において、外部ファームウェアソースは、プラットフォームコントローラにファームウェアを示す。コントローラまたは他のロジック（例えば、メモリデバイスファームウェアの更新用のＮＧＭデバイスにおけるコントローラ）は、６２４においてＮＧＭデバイス上で現行のファームウェアイメージまたは複数のイメージ（バックアップの場合）を無効化し得る。一実施形態において、現行のファームウェアイメージを無効化した後、システムは次に、再起動するようにトリガされ得、これによりシステムに、ハードウェアプラットフォーム上に有効なファームウェアが存在しない状況が発生し、従ってコントローラは、外部ソースからのファームウェアを探すことになる。従ってシステムは、６２６においてコントローラに対してスリープまたはパワーダウンの状態をトリガし得る。システムは、（プロセス５００から続く）５０２においてコントローラに対してウェイクアップイベントも生成し得、これによりコントローラは、ファームウェアを探して、有効なファームウェアが見つからない場合にファームウェアをプロビジョニングする。
【００７５】
図６Ｃは、エラーからリカバリするべくファームウェアをプロビジョニングするプロセス６３０の実施形態のフロー図である。エラーまたは破損からのリカバリは、ハードウェアプラットフォーム上のファームウェアに対するライフサイクルイベントの一例であり得、これに対してプラットフォームコントローラは、新しいファームウェアをプロビジョニングする。いくつかの時点で、（プロセス５００から続く）５３８において、システムが破損イベント前に正常に動作することが想定され得る。６３２において、ファームウェアイメージに危害を与えるいくつかのコンピュータ障害または攻撃のいずれかが生じ得る。ファームウェアイメージが違法に変更される（例えば、有効な認証により実行されない）場合、ファームウェアイメージは、もはや有効とはみなされないことが理解されよう。コントローラは６３４において、ファームウェアイメージが破損していることを検出して、ファームウェアイメージを無効化し得る。一実施形態において、システムは、やはりＮＧＭデバイス上に格納されたセカンダリファームウェアイメージを実装する。セカンダリファームウェアイメージが用いられる場合、コントローラは、（プロセス５００から続く）５１６において有効なセカンダリイメージが存在するか否かを判断するようにＮＧＭデバイスに要求し得る。あるいは、システムがファームウェアの更新イベントに類似する複数のバックアップファームウェアイメージを実装しない場合、システムは再起動するようにトリガされ得、これによりシステムに、ハードウェアプラットフォーム上に有効なファームウェアが存在しない状況が発生する。従ってコントローラは、外部ソースからのファームウェアを探し、システムは、（プロセス５００から続く）５０２においてコントローラに対してウェイクアップイベントを生成し、これによりコントローラは、ファームウェアを探して、有効なファームウェアが見つからない場合にファームウェアをプロビジョニングする。
【００７６】
図６Ｄは、システムファームウェアを格納するデバイスにおけるハードウェアアップグレードと共にファームウェアをプロビジョニングするプロセス６４０の実施形態のフロー図である。ハードウェアアップグレードは、ハードウェアプラットフォーム上のファームウェアに対するライフサイクルイベントの一例であり得、これに対してプラットフォームコントローラは、新しいファームウェアをプロビジョニングする。システムは、（プロセス５００から続く）５３８においてハードウェアアップグレードの前に正常に動作するものと想定され得る。ユーザまたはコンピューティングシステムの管理者は、６４２においてＮＧＭデバイスを代替することを決定する。ＮＧＭデバイスは、ハードウェアプラットフォーム用のファームウェアイメージを格納する。一実施形態において、代替のＮＧＭデバイスは、前のストレージデバイスのコンテンツと共に首尾よくプリロードされ得、この場合にファームウェアは、首尾よく転送され得る。一実施形態において、代替のＮＧＭデバイスのためのインストール処理は、代替のＮＧＭデバイスにプリロードされたデータを破損する可能性がある。あるいは、データが現行のＮＧＭデバイスに格納された代替のＮＧＭデバイスをプリロードすることは、不便であるか、または困難であり得る。従ってデータは、ファームウェアイメージを含む外部の位置から代替のＮＧＭデバイスにプロビジョニングされる。
【００７７】
そのような代替を可能にするべく、管理者は６４４において、ハードウェアプラットフォームから離れ、または実行するファームウェアイメージを提供しない異なるストレージデバイスにあるバックアップ位置にデータコンテンツをコピーする。管理者は６４６において、ＮＧＭデバイスを代替し、６４８においてハードウェアプラットフォームの外部インターフェースにあるファームウェアイメージを提供する。ソースは、データコンテンツのバックアップコピーの位置であり得る。一実施形態では、コントローラは５２２において、外部インターフェースにアクセスしてファームウェアイメージを取得し、（プロセス５００から続く）５２４において外部ソースから（代替の）ＮＧＭデバイスへとファームウェアイメージをプロビジョニングする。次にシステムは、６５０において前のＮＧＭデバイスからのデータコンテンツを代替のＮＧＭデバイスに対して復元し、通常の動作を実行し得る。
【００７８】
図７は、プラットフォームコントローラまたはマネージャビリティエンジンから次世代メモリデバイスインターフェースにアクセスするプロセス７００の実施形態のフロー図である。一実施形態では、プラットフォームコントローラは、（プロセス５００から続く）５０４において、自身のＲＯＭコードの実行を開始する。コントローラＲＯＭコードは、７０２において実行され、これによりコントローラは、５０８においてＮＧＭインターフェース（ＮＧＩ）にアクセスし得る。本明細書の目的において、コントローラがＮＧＩにアクセスする主要な目的は、ファームウェアにアクセスし、および／またはこれをプロビジョニングすることである。一実施形態において、コントローラＲＯＭコードは、７０４において自身がＮＧＩに対するトレーニングデータを有するか否かを判断する。インターフェースが７０６の「ＹＥＳ」の分岐においてトレーニングされている場合、コントローラは、７０８においてインターフェース用の高速モードでアクセス動作を継続する。コントローラは、７１０において複数のアクセス要求を送信して、高速モードでトレーニング済みＮＧＩを介して複数の応答を受信し得る。
【００７９】
ＮＧＩが７０６の「ＮＯ」の分岐でトレーニングされていない場合、コントローラＲＯＭコードは、７１２においてＮＧＩ用の低速モードに入り得る。一実施形態において、コントローラＲＯＭコードは、７１４において低速モードでトレーニングシーケンスを開始する。トレーニングシーケンスが首尾よく完了すると、次にコントローラＲＯＭコードは、７１６においてＮＧＩ用の高速モードを使用し得る。高速モードに入った後、コントローラおよびＮＧＭデバイスは、７１０において高速モードでＮＧＩを介して通信し得る。
【００８０】
図８は、次世代メモリデバイスインターフェースを介した交換にセキュリティを適用するプロセス８００の実施形態のフロー図である。一実施形態において、プラットフォームコントローラは、５０６において複数のセキュリティ手順を行い、ＮＧＭデバイスからファームウェアイメージを取得し、および／またはプロビジョニングすると共にＮＧＩを保護する。コントローラは、８０２においてセキュアな交換を開始し得る。一実施形態において、用いられるセキュアな交換は、コントローラおよびＮＧＭデバイスが共有キー交換を確立したか否かに依存する。従って、コントローラは、８０４において有効で一致する、対称または共有キーが存在するか否かを判断し得る。８０６の「ＹＥＳ」の分岐において共有キーが存在する場合、コントローラおよびＮＧＭデバイスは、８０８においてキーを用いて複数の署名済みメッセージを交換する。送信デバイスは、キーを有する複数のメッセージを署名し、それらを受信デバイスに送信する。受信デバイスは、複数の暗号化メッセージを受信して、キーを用いてそれらをデコードする。
【００８１】
一実施形態において、８０８の「ＮＯ」の分岐において共有キーが存在しない場合、コントローラは、指数ベースのセキュリティ手順（例えば、ディフィー・ヘルマン）を使用し得る。従ってコントローラは、８１０において指数ベースのセキュリティ交換のための乱数指数部を生成し得る。次にコントローラおよびＮＧＭデバイスは、８１２において指数ベースのセキュリティ手順を用いる対称暗号化キーを確立し得る。一実施形態において、コントローラは、全ての共有キーの使用を管理および監視する。例えば、コントローラは、共有キーの使用に関連付けられた複数のヒューズを有し、キーを作成したことに応答してヒューズパターンを設定し、またはヒューズを設定し得る。次にキーはヒューズパターンに関連付けられ、キーが期待されるヒューズパターンと一致する場合にのみ有効となる。コントローラおよびＮＧＭデバイスは、８１４において現行のキーを有効化し、また複数の前のキーを無効化し得る。一実施形態において、有効化および無効化は、コントローラにより使用されるオンチップヒューズまたは他の追跡／監視メカニズムを用いることにより行われる。
【００８２】
図９は、インシステムファームウェアのプロビジョニングが実装され得るコンピューティングシステムの実施形態のブロック図である。システム９００は、本明細書において説明される任意の実施形態によるコンピューティングデバイスを表し、ラップトップコンピュータ、デスクトップコンピュータ、サーバ、ゲームもしくはエンターテインメント制御システム、スキャナ、コピー機、プリンタ、ルーティングもしくはスイッチングデバイス、または他の電子デバイスであり得る。システム９００はプロセッサ９２０を含み、プロセッサ９２０は、システム９００の処理、動作管理、および複数の命令の実行を提供する。プロセッサ９２０は、システム９００の処理を提供する任意のタイプのマイクロプロセッサ、中央処理装置（ＣＰＵ）、プロセッシングコア、または他のプロセッシングハードウェアを含み得る。プロセッサ９２０は、システム９００の動作全体を制御し、１もしくは複数のプログラミング可能な汎用もしくは専用マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、プログミング可能なコントローラ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックデバイス（ＰＬＤ）等、または複数のそのようなデバイスの組み合わせであるか、またはこれらを含み得る。
【００８３】
メモリサブシステム９３０はシステム９００のメインメモリを表し、プロセッサ９２０により実行されるべきコードおよびルーチンを実行するときに用いられるべきデータの値に対する一時的ストレージを提供する。メモリサブシステム９３０は、リードオンリメモリ（ＲＯＭ）、フラッシュメモリ、１もしくは複数の様々なランダムアクセスメモリ（ＲＡＭ）、他のメモリデバイス、または複数のそのようなデバイスの組み合わせのような１または複数のメモリデバイスを含み得る。メモリサブシステム９３０は、とりわけ、システム９００において複数の命令を実行するためのソフトウェアプラットフォームを提供するオペレーティングシステム（ＯＳ）９３６を格納してホストする。更に、他の複数の命令９３８がメモリサブシステム９３０から格納されて実行され、システム９００のロジックおよび処理を提供する。ＯＳ９３６および複数の命令９３８は、プロセッサ９２０により実行される。メモリサブシステム９３０は、データ、命令、プログラム、または他のアイテムを格納するメモリデバイス９３２を含む。一実施形態において、メモリサブシステムはメモリコントローラ９３４ を含み、メモリコントローラ９３４は、複数のコマンドを生成してメモリデバイス９３２に発行するメモリコントローラである。メモリコントローラ９３４は、プロセッサ９２０の物理的な一部であり得ることが理解されよう。
【００８４】
プロセッサ９２０およびメモリサブシステム９３０は、バス／バスシステム９１０に結合される。バス９１０は、適切なブリッジ、アダプタ、および／またはコントローラにより接続される任意の１もしくは複数の別個の物理バス、通信ライン／インターフェース、および／またはポイントツーポイント接続を表す抽象概念である。従って、バス９１０は例えば、システムバス、周辺構成要素相互接続（ＰＣＩ）バス、ハイパートランスポートもしくは業界標準アーキテクチャ（ＩＳＡ）バス、小型コンピュータシステムインターフェース（ＳＣＳＩ）バス、ユニバーサルシリアルバス（ＵＳＢ）、または米国電気電子学会（ＩＥＥＥ）規格１３９４バス（一般に「ファイヤワイヤ」と称される）のうちの１または複数を含み得る。バス９１０の複数のバスは、ネットワークインターフェース９５０における複数のインターフェースにも対応し得る。
【００８５】
また、システム９００は、バス９１０に結合された１または複数の入力／出力（Ｉ／Ｏ）インターフェース９４０、ネットワークインターフェース９５０、１または複数の内部大容量ストレージデバイス９６０、および周辺機器インターフェース９７０も含む。Ｉ／Ｏインターフェース９４０は１または複数のインターフェースコンポーネントを含み得、ユーザはこれを介してシステム９００とインタラクトする（例えば、動画、オーディオ、および／または英数字のインターフェース）。ネットワークインターフェース９５０はシステム９００に、１または複数のネットワークを介して複数の遠隔デバイス（例えば、サーバ、他のコンピューティングデバイス）と通信する機能を提供する。ネットワークインターフェース９５０は、Ｅｔｈｅｒｎｅｔ（登録商標）アダプタ、無線相互接続コンポーネント、ＵＳＢ（ユニバーサルシリアルバス）、または他の有線もしくは無線規格ベースまたは専用インターフェースを含み得る。
【００８６】
周辺機器インターフェース９７０は、具体的に上述されない任意のハードウェアインターフェースを含み得る。一般に周辺機器は、従属的にシステム９００を接続するデバイスを指す。従属接続は、動作が実行され、ユーザがインタラクトするソフトウェアおよび／またはハードウェアプラットフォームを、システム９００が提供するものである。
【００８７】
一実施形態において、ストレージ９６０は、１または複数の磁気、ソリッドステート、もしくは光ベースのディスク、または組み合わせ等、不揮発性の態様で大量のデータを格納する任意の従来の媒体であるか、またはこれらを含み得る。ストレージ９６０は、上記の次世代メモリ技術も含み得る。ストレージ９６０は、コードまたは命令およびデータ９６２を永続的状態に保つ（すなわち、値はシステム９００への電力が中断されたとしても保持される）。ストレージ９６０は、マネージャビリティエンジン（ＭＥ）９２２または別のプラットフォームコントローラにより用いるファームウェアイメージも格納する。メモリ９３０は複数の命令をプロセッサ９２０に提供する実行または動作メモリであるが、ストレージ９６０は一般的には「メモリ」とみなされ得る。ストレージ９６０は不揮発性であるが、メモリ９３０は揮発性メモリを含み得る（すなわち、データの値または状態は、システム９００への電力が中断された場合には不確定である）。ＭＥ９２２は、外部インターフェース（ネットワークインターフェース９５０または周辺機器インターフェース９７０等）からストレージ９６０へとファームウェアをプロビジョニングし得る。一般に、ＭＥ９２２は、ストレージ９６０上に格納された有効なプライマリファームウェアイメージが存在しない場合に、ファームウェアライフサイクルイベントに応答してファームウェアをプロビジョニングする。
【００８８】
図１０は、インシステムファームウェアのプロビジョニングが実装され得るモバイルデバイスの実施形態のブロック図である。デバイス１０００は、コンピューティングタブレット、携帯電話もしくはスマートフォン、無線機能付き電子書籍リーダ、ウェアラブルコンピューティングデバイス、または他のモバイルデバイス等のモバイルコンピューティングデバイスを表す。複数のコンポーネントのうちの特定のものが一般に示されており、そのようなデバイスの全てのコンポーネントがデバイス１０００に示されているわけではないことが理解されよう。
【００８９】
デバイス１０００はプロセッサ１０１０を含み、プロセッサ１０１０は、デバイス１０００の主要な複数の処理動作を実行する。プロセッサ１０１０は、マイクロプロセッサ、アプリケーションプロセッサ、マイクロコントローラ、プログラマブルロジックデバイス等、１または複数の物理デバイス、または他の処理手段を含み得る。プロセッサ１０１０により実行される複数の処理動作は、アプリケーションおよび／またはデバイスの機能が実行されるオペレーティングプラットフォームまたはオペレーティングシステムの実行を含む。複数の処理動作は、人間ユーザまたは複数の他のデバイスとのＩ／Ｏ（入力／出力）に関連する動作、電力管理に関連する動作、および／またはデバイス１０００を別のデバイスに接続することに関連する動作を含む。処理動作は、オーディオＩ／Ｏおよび／またはディスプレイＩ／Ｏに関連する動作も含み得る。
【００９０】
一実施形態において、デバイス１０００は、オーディオサブシステム１０２０を含み、オーディオサブシステム１０２０は、複数のオーディオ機能をコンピューティングデバイスに提供することに関連付けられたハードウェア（例えば、オーディオハードウェアおよびオーディオ回路）およびソフトウェア（例えば、ドライバ、コーデック）のコンポーネントを表す。オーディオ機能は、スピーカおよび／またはヘッドフォン出力、ならびにマイク入力を含み得る。そのような機能のための複数のデバイスは、デバイス１０００に統合され、またはデバイス１０００に接続され得る。一実施形態において、ユーザは、プロセッサ１０１０により受信および処理される複数のオーディオコマンドを提供することにより、デバイス１０００とインタラクトする。
【００９１】
ディスプレイサブシステム１０３０は、ユーザがコンピューティングデバイスとインタラクトする視覚および／または触覚ディスプレイを提供する、ハードウェア（例えば、ディスプレイデバイス）およびソフトウェア（例えば、ドライバ）の複数のコンポーネントを表す。ディスプレイサブシステム１０３０は、ディスプレイインターフェース１０３２を含み、ディスプレイインターフェース１０３２は、ディスプレイをユーザに提供するべく用いられる特定のスクリーンまたはハードウェアデバイスを含む。一実施形態において、ディスプレイインターフェース１０３２は、ディスプレイに関連する少なくともいくつかの処理を実行する、プロセッサ１０１０と別個のロジックを含む。一実施形態において、ディスプレイサブシステム１０３０は、ユーザに対して出力および入力の双方を提供するタッチスクリーンデバイスを含む。
【００９２】
Ｉ／Ｏコントローラ１０４０は、ユーザとのインタラクションに関連するハードウェアデバイスおよびソフトウェアコンポーネントを表す。Ｉ／Ｏコントローラ１０４０は、オーディオサブシステム１０２０および／またはディスプレイサブシステム１０３０の一部であるハードウェアを管理するように動作し得る。更に、Ｉ／Ｏコントローラ１０４０は、デバイス１０００に接続する追加の複数のデバイスに対する接続ポイントを図示し、ユーザはそれを介してシステムとインタラクトし得る。例えば、デバイス１０００に取り付けられ得る複数のデバイスは、マイクデバイス、スピーカもしくはステレオシステム、ビデオシステムもしくは他のディスプレイデバイス、キーボードもしくはキーパッドデバイス、またはカードリーダもしくは他のデバイス等の特定のアプリケーションと共に用いるための他のＩ／Ｏデバイスを含み得る。
【００９３】
上述したように、Ｉ／Ｏコントローラ１０４０は、オーディオサブシステム１０２０および／またはディスプレイサブシステム１０３０とインタラクトし得る。例えば、マイクまたは他のオーディオデバイスを介した入力は、デバイス１０００の１または複数のアプリケーションまたは機能に対する入力またはコマンドを提供し得る。更に、ディスプレイ出力に代えて、またはこれに加えてオーディオ出力が提供され得る。別の例において、ディスプレイサブシステムがタッチスクリーンを含む場合、ディスプレイデバイスは、Ｉ／Ｏコントローラ１０４０により少なくとも部分的に管理され得る入力デバイスとしても機能する。Ｉ／Ｏコントローラ１０４０により管理される複数のＩ／Ｏ機能を提供するべく、デバイス１０００上には追加の複数のボタンまたはスイッチも存在し得る。
【００９４】
一実施形態において、Ｉ／Ｏコントローラ１０４０は、デバイス１０００に含まれ得る加速度計、カメラ、光センサもしくは他の環境センサ、ジャイロスコープ、全地球測位システム（ＧＰＳ）、または他のハードウェア等の複数のデバイスを管理する。入力は、直接のユーザインタラクションの一部であると共に、システムの動作に影響する、システムへの環境入力（ノイズに対するフィルタリング、輝度検出のためのディスプレイの調整、カメラのフラッシュの適用、または他の複数の機能等）を提供することの一部であり得る。一実施形態において、デバイス１０００は、バッテリ電力使用量、バッテリの充電、および省電力動作に関連する複数の機能を管理する電力管理１０５０を含む。
【００９５】
メモリサブシステム１０６０は、デバイス１０００に情報を格納するためのメモリデバイス１０６２を含む。メモリサブシステム１０６０は、不揮発性（メモリデバイスへの電力が中断されても状態が変化しない）および／または揮発性（メモリデバイスへの電力が中断されると、状態が不確定になる）メモリデバイスを含み得る。メモリ１０６０は、システム１０００の複数のアプリケーションおよび機能の実行に関連するアプリケーションデータ、ユーザデータ、音楽、写真、文書、または他のデータ、ならびにシステムデータ（長期的または一時的あるかに関係なく）を格納し得る。一実施形態において、メモリサブシステム１０６０は、（システム１０００の制御の一部ともみなされ得、潜在的にプロセッサ１０１０の一部とみなされ得る）メモリコントローラ１０６４を含む。メモリコントローラ１０６４は、コマンドを生成してメモリデバイス１０６２に発行するスケジューラを含む。
【００９６】
接続１０７０は、デバイス１０００が複数の外部デバイスと通信することを可能にするハードウェアデバイス（例えば、無線および／または有線コネクタ、ならびに通信ハードウェア）およびソフトウェアコンポーネント（例えば、ドライバ、プロトコルスタック）を含む。外部デバイスは、他のコンピューティングデバイス、無線アクセスポイント、または基地局等の別個のデバイス、ならびにヘッドセット、プリンタ、または他のデバイス等の周辺機器であり得る。
【００９７】
接続１０７０は、複数の異なるタイプの接続を含み得る。一般化するべく、デバイス１０００はセルラー接続１０７２および無線接続１０７４と共に図示される。一般に、セルラー接続１０７２は、ＧＳＭ（登録商標）（汎欧州デジタル移動電話方式）または改変形態もしくは派生物、ＣＤＭＡ（符号分割多重アクセス）または改変形態もしくは派生物、ＴＤＭ（時分割多重化）または改変形態もしくは派生物、ＬＴＥ（ロングタームエボリューション、「４Ｇ」とも称される）、または他のセルラーサービス規格により提供されるもの等、無線キャリアにより提供されるセルラーネットワーク接続を指す。無線接続１０７４は、セルラーでない無線接続を指し、パーソナルエリアネットワーク（Ｂｌｕｅｔｏｏｔｈ（登録商標）等）、ローカルエリアネットワーク（ＷｉＦｉ（登録商標）等）、および／またはワイドエリアネットワーク（ＷｉＭＡＸ（登録商標）等）、または他の無線通信を含み得る。無線通信は、非固体媒体を介して変調された電磁放射の使用によるデータ転送を指す。有線通信は、固体通信媒体を介して行われる。
【００９８】
複数の周辺接続１０８０は、周辺接続を行うハードウェアインターフェースおよびコネクタ、ならびにソフトウェアコンポーネント（例えば、ドライバ、プロトコルスタック）を含む。デバイス１０００は、他のコンピューティングデバイスに対する周辺機器（「ｔｏ」１０８２）であり得ると共に、それに接続された複数の周辺機器を有するもの（「ｆｒｏｍ」１０８４）でもあり得ることが理解されよう。一般に、デバイス１０００は、デバイス１０００上のコンテンツの管理（例えば、ダウンロードおよび／またはアップロード、変更、同期）などを目的として複数の他のコンピューティングデバイスに接続する「ドッキング」コネクタを有する。更に、ドッキングコネクタは、デバイス１０００が特定の複数の周辺機器に接続することを可能にし得る。特定の複数の周辺機器は、デバイス１０００が例えばオーディオビジュアルまたは他の複数のシステムへのコンテンツ出力を制御することを可能にする。
【００９９】
専用のドッキングコネクタまたは他の専用の接続ハードウェアに加えて、デバイス１０００は一般的または規格ベースのコネクタにより周辺接続１０８０を行い得る。一般的タイプとしては、ユニバーサルシリアルバス（ＵＳＢ）コネクタ（いくつかの異なる複数のハードウェアインターフェースのうちのいずれかを含み得る）、ＭｉｎｉＤｉｓｐｌａｙＰｏｒｔ（ＭＤＰ）を含むＤｉｓｐｌａｙＰｏｒｔ、高解像度マルチメディアインターフェース（ＨＤＭＩ（登録商標））、ファイヤワイヤ、または他のタイプが挙げられ得る。
【０１００】
上記で検討されたことに加えて、メモリサブシステム１０６０は、上記の次世代メモリ技術を含み得る。メモリサブシステム１０６０は、マネージャビリティエンジン（ＭＥ）１０１２または別のプラットフォームコントローラにより用いるべく不揮発性状態でファームウェアイメージを格納する。ＭＥ１０１２は、外部インターフェース（接続１０７０または周辺接続１０８０等）からメモリサブシステム１０６０における不揮発性ストレージへとファームウェアをプロビジョニングし得る。一般に、ＭＥ１０１２は、メモリサブシステム１０６０に格納された有効なプライマリファームウェアイメージが存在しない場合に、ファームウェアライフサイクルイベントに応答してファームウェアをプロビジョニングする。
【０１０１】
一態様において、方法は、プロセッサ、不揮発性ストレージデバイス、およびハードウェアプラットフォームの外部のデバイスをインターフェース接続する外部インターフェースを含むハードウェアプラットフォームにおいて、ハードウェアプラットフォームが機能的なファームウェアを欠いていると判断して、ハードウェアプラットフォームをブートする段階と、外部インターフェースを介してソースからファームウェアにアクセスする段階と、ファームウェアをストレージデバイスにプロビジョニングする段階と、ストレージデバイスにプロビジョニングされたファームウェアからハードウェアプラットフォームをブートする段階とを備える。
【０１０２】
一実施形態において、ストレージデバイスは、バイトアドレス指定可能なメモリデバイスを含む。一実施形態において、ハードウェアプラットフォームは、２レベルのメモリシステムを含み、不揮発性ストレージデバイスは、プロセッサのためのメインメモリとして構成され、不揮発性ストレージデバイスのためのキャッシュとして構成された揮発性メモリデバイスを更に含む。一実施形態において、ハードウェアプラットフォームが機能的なファームウェアを欠いていると判断する段階は、ハードウェアプラットフォームが有効なプライマリファームウェアイメージを欠いており、有効なバックアップファームウェアイメージを欠いていると判断する段階を有する。一実施形態において、ファームウェアをプロビジョニングする段階は、製造、ファームウェアに対するフィールド更新、不揮発性ストレージデバイスのアップグレード、または破損リカバリの後の初期ブートのうちの１つを含むファームウェアライフサイクルイベントに対するファームウェアをプロビジョニングする段階を有する。一実施形態において、ファームウェアをプロビジョニングする段階は、ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされていないことを検出する段階と、複数のタイミングパラメータをトレーニングするべく、低速モードに入る段階と、ファームウェアをプロビジョニングするべく高速転送モードに入る段階とを更に有する。一実施形態において、ファームウェアをプロビジョニングする段階は、ストレージデバイスへのインターフェースを介してセキュリティを行う段階を更に有する。一実施形態において、セキュリティを行う段階は、対称キーを確立するべく、指数ベースのセキュリティハンドシェーク手順を使用する段階を更に有する。一実施形態において、セキュリティを行う段階は、複数の暗号化メッセージを対称キー交換と交換する段階を更に有する。一実施形態において、セキュリティを行う段階は、複数の反射攻撃を阻止するべく、対称キーの使用を監視する段階を更に有する。一実施形態において、複数の反射攻撃を阻止するべく、対称キーの使用を監視する段階は、複数の関連付けられたヒューズを用いて対称キーの使用を管理する段階を更に有し、対称キーは、予め定められたヒューズパターンに関連付けられた場合にのみ有効になる。
【０１０３】
一態様において、コンピューティングデバイスのためのハードウェアプラットフォームは、複数の動作を実行するプロセッサと、ハードウェアプラットフォームの外部のデバイスにインターフェース接続する外部ハードウェアインターフェースと、プロセッサに結合された不揮発性ストレージデバイスと、プロセッサ、外部ハードウェアインターフェース、およびストレージデバイスに結合されたコントローラデバイスであって、ハードウェアプラットフォームが機能的なファームウェアを欠いていることを判断して、ハードウェアプラットフォームをブートし、外部インターフェースを介してファームウェアにアクセスし、ストレージデバイスにファームウェアをプロビジョニングし、ストレージデバイスにプロビジョニングされたファームウェアからハードウェアプラットフォームに対するブートシーケンスを開始するコントローラデバイスとを備える。
【０１０４】
一実施形態において、ストレージデバイスは、ストレージデバイスによる動作のための複数のメモリアクセスコマンドをデコードするインターフェースを有する。一実施形態において、ストレージデバイスは、バイトアドレス指定可能なメモリデバイスを含む。一実施形態において、ハードウェアプラットフォームは、揮発性メモリデバイスを更に備え、ハードウェアプラットフォームは、２レベルのメモリシステムを含み、不揮発性ストレージデバイスは、プロセッサのためのメインメモリとして構成され、揮発性メモリデバイスは、不揮発性ストレージデバイスのキャッシュとして構成される。一実施形態において、コントローラデバイスは、マネージャビリティエンジンを有する。一実施形態において、コントローラデバイスは、収束セキュリティマネージャビリティエンジンを備える。一実施形態において、コントローラデバイスは、コントローラデバイス用のファームウェアにアクセスしてをプロビジョニングする。一実施形態において、コントローラデバイスは、プロセッサ用のファームウェアにアクセスしてプロビジョニングする。一実施形態において、コントローラデバイスは、ハードウェアプラットフォームが有効なプライマリファームウェアイメージを欠いており、有効なバックアップファームウェアイメージを欠いていると判断する。一実施形態において、コントローラデバイスは、製造、ファームウェアに対するフィールド更新、不揮発性ストレージデバイスのアップグレード、または破損リカバリの後の初期ブートのうちの１つを含むファームウェアライフサイクルイベントに対するファームウェアをプロビジョニングする。一実施形態において、外部ハードウェアインターフェースは、ユニバーサルシリアルバスインターフェース、ローカルエリアネットワークインターフェース、またはワイドエリアネットワークインターフェースのうちの１つに準拠したハードウェアインターフェースを有する。一実施形態において、コントローラは、更に、ストレージデバイスへのインターフェース用の複数のタイミングパラメータがトレーニングされていないことを検出し、複数のタイミングパラメータをトレーニングするべく、低速モードに入り、ファームウェアをプロビジョニングするべく高速転送モードに入る。一実施形態において、コントローラは、更に、ストレージデバイスへのインターフェースを介してセキュリティを行う。一実施形態において、コントローラは、対称キーセキュリティプロトコルに関連付けられたストレージデバイスとのオンチップヒューズを更に備え、コントローラは、生成される各対称キー用のヒューズを飛ばす。一実施形態において、コントローラは、対称キーを確立するべく、指数ベースのセキュリティハンドシェーク手順を更に使用する。一実施形態において、コントローラは、更に、複数の暗号化メッセージを対称キー交換と交換する。一実施形態において、コントローラは、更に、複数の反射攻撃を阻止するべく、対称キーの使用を監視する。一実施形態において、コントローラは、複数の関連付けられたヒューズを用いて対称キーの使用を更に管理し、対称キーは、予め定められたヒューズパターンに関連付けられた場合のみに有効になる。
【０１０５】
一態様において、電子デバイスは、複数の動作を実行するプロセッサと、ハードウェアプラットフォームの外部のデバイスにインターフェース接続する外部ハードウェアインターフェースと、プロセッサに結合された不揮発性ストレージデバイスと、プロセッサ、外部ハードウェアインターフェース、およびストレージデバイスに結合されたコントローラデバイスであって、ハードウェアプラットフォームが機能的なファームウェアを欠いていることを判断して、ハードウェアプラットフォームをブートし、外部インターフェースを介してファームウェアにアクセスし、ストレージデバイスにファームウェアをプロビジョニングし、ストレージデバイスにプロビジョニングされたファームウェアからハードウェアプラットフォームに対するブートシーケンスを開始するコントローラデバイスと、ハードウェアプラットフォームに結合され、プロセッサによる実行のために不揮発性ストレージデバイスからアクセスされる演算データを格納されるシンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）デバイスとを有するコンピューティングデバイスのためのハードウェアプラットフォームを備える。
【０１０６】
一態様において、製造物品は、コンピューティングデバイスにより実行されると、プロセッサ、不揮発性ストレージデバイス、およびハードウェアプラットフォームの外部のデバイスをインターフェース接続する外部インターフェースを含むハードウェアプラットフォームにおいて、ハードウェアプラットフォームが機能的なファームウェアを欠いていると判断して、ハードウェアプラットフォームをブートし、外部インターフェースを介してソースからファームウェアにアクセスし、ファームウェアをストレージデバイスにプロビジョニングし、ストレージデバイスにプロビジョニングされたファームウェアからハードウェアプラットフォームをブートすることを含む複数のオペレーションを実行するコンテンツを格納したコンピュータ可読ストレージ媒体を備える。製造物品は、上記の方法のいずれかの実施形態を実行する複数のオペレーションを実行するコンテンツを含み得る。
【０１０７】
一態様において、装置は、プロセッサ、不揮発性ストレージデバイス、およびハードウェアプラットフォームの外部のデバイスをインターフェース接続する外部インターフェースを含むハードウェアプラットフォームにおいて、ハードウェアプラットフォームが機能的なファームウェアを欠いていると判断して、ハードウェアプラットフォームをブートするための手段と、外部インターフェースを介してソースからファームウェアにアクセスするための手段と、ファームウェアをストレージデバイスにプロビジョニングするための手段と、ストレージデバイスにプロビジョニングされたファームウェアからハードウェアプラットフォームをブートするための手段とを備える。装置は、上記の方法のいずれかの実施形態を実行する複数のオペレーションを実行するための手段を備え得る。
【０１０８】
本明細書において図示される複数のフロー図は、一連の様々な処理動作の例を提供する。フロー図は、ソフトウェアまたはファームウェアルーチンにより実行されるべき複数の動作、および物理的動作を示し得る。一実施形態において、フロー図は、ハードウェアおよび／またはソフトウェアの形で実装され得る有限ステートマシン（ＦＳＭ）の状態を図示し得る。特定のシーケンスまたは順序で示されているが、別途指定されない限り、動作の順序は変更され得る。従って、図示される複数の実施形態は、専ら例として理解されるべきであり、処理は異なる順序で実行され得、いくつかの動作は並行して実行され得る。更に、１または複数の動作は、様々な実施形態において省略され得る。従って各実施形態において、全ての動作が必要とされるわけではない。他の複数の処理フローが可能である。
【０１０９】
様々な動作または機能が本明細書に説明される限りにおいて、動作または機能は、ソフトウェア、コード、命令、構成、および／またはデータとして説明され、または定義され得る。コンテンツは、直接に実行可能な（「オブジェクト」または「実行可能な」形式）、ソースコード、または差分コード（「デルタ」または「パッチ」コード）であり得る。本明細書に説明される複数の実施形態におけるソフトウェアコンテンツは、コンテンツが格納された製造物品、または通信インターフェースを介してデータを送信するように通信インターフェースを動作させる方法により提供され得る。機械可読ストレージ媒体は、説明される機械に複数の機能または動作を実行させ得、記録可能／記録不可能な媒体（例えば、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス等）のような機械（例えば、コンピューティングデバイス、電子システム等）によりアクセス可能な形態で情報を格納する任意のメカニズムを含む。通信インターフェースは、メモリバスインターフェース、プロセッサバスインターフェース、インターネット接続、ディスクコントローラ等のような別のデバイスに通信するハードワイヤード、無線、光等の媒体のいずれかにインターフェース接続する任意のメカニズムを含む。通信インターフェースは、複数の構成パラメータを提供し、および／または信号を送信して、通信インターフェースがソフトウェアコンテンツを記載するデータ信号を提供するように準備することにより構成され得る。通信インターフェースは、通信インターフェースに送信される１または複数のコマンドまたは信号によりアクセスされ得る。
【０１１０】
本明細書に説明される様々なコンポーネントは、説明される複数の動作または機能を実行するための手段であり得る。本明細書に説明される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。複数のコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）等）、エンベデッドコントローラ、ハードワイヤード回路等として実装され得る。
【０１１１】
本明細書において説明されるもの以外にも、本発明において開示される複数の実施形態および実装に対して、その範囲を逸脱することなく様々な変更が行われ得る。従って、本明細書における図示および例は、限定的な意味ではなく例示的な意味に解釈されるべきである。本発明の範囲は、以下の特許請求の範囲のみを参照して判断されるべきである。
【図１】
0006333993.tif 000002
【図２】
0006333993.tif 000003
【図３】
0006333993.tif 000004
【図４】
0006333993.tif 000005
【図５】
0006333993.tif 000006
【図６Ａ】
0006333993.tif 000007
【図６Ｂ】
0006333993.tif 000008
【図６Ｃ】
0006333993.tif 000009
【図６Ｄ】
0006333993.tif 000010
【図７】
0006333993.tif 000011
【図８】
0006333993.tif 000012
【図９】
0006333993.tif 000013
【図１０】
0006333993.tif 000014