説明

シリコンに一体化されたコードのシステムへの提供

【課題】プロセッサのハードウェア知的財産を守る。
【解決手段】プロセッサ製造業者のプラットフォームから独立したコードに対応する半導体一体化コード(SIC)を記憶するための不揮発性記憶手段は、プロセッサと、プロセッサとメモリとを接続する少なくとも1つのリンクとをイニシャライズする埋め込まれたプロセッサロジック、及び、メモリをイニシャライズするための埋め込まれたメモリロジックを有し、プロセッサリセットに応答し、かつ、オリジナル製品製造者(OEM)のプリブートコードに制御を提供する前に、前記SICが実行される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シリコンに一体化されたコードのシステムへの提供に関する。
【背景技術】
【0002】
歴史的に、基本入出力システム(BIOS)ソフトウエアは、コンピュータシステムにおいて、ローレベルのソフトウエアであり、ブートアップ及びローレベルのオペレーションを行う。そして、典型的に、いわゆるOEMメーカ(すなわちコンピュータメーカ)により組み込まれる。プロセッサのためのBIOSのサポートを提供するために、プロセッサメーカ(いわゆるシリコン製造業者)は、詳細な情報をOEMに提供する。この情報は、通常、ソフトウエアコードである。しかしながら、このコードを提供することによって、ハードウエア知的財産(IP:intellectual property)の態様、すなわち、どのようにプログラムするか、根底にあるハードウエアの詳細が、サードパーティに開示されてしまう。更に、ソースコードを提供することによって、OEMは、非標準的なやり方で、コードを変更することができ、統合することができる。あるいは、プログラムを修正して非標準のハードウエアをサポートする。これによって、複雑化を招き、動作時の不安を招来する。そして、シリコン製造業者のサポートのコストを増大させる。
【発明の概要】
【発明が解決しようとする課題】
【0003】
例えば、システムをイニシャライズする情報は、通常、プロセッサの詳細、内部リンク、メモリ構造その他を含んでいる。そのような詳細は、レジスタの定義及びこのハードウエアとのインターフェースが含まれる。この情報は、OEM業者以外に、独立のBIOSベンダー(IBV)にも拡散する。x86コンピュータシステムのIBV及びOEMの世界は比較的狭いものであった。この頃は、プロセッサ及びその他の拡張されたシリコンコントローラは、異なるタイプのシステムやデバイスに組み込まれていた。しかしながら、この世界は、今や大きく拡大し、IPの懸念やサポートに対する弊害が発生するようになってきた。
【課題を解決するための手段】
【0004】
一実施例によれば、プロセッサ製造業者のプラットフォームから独立したコードに対応する半導体一体化コード(SIC)を記憶するための不揮発性記憶手段であって、前記SICは、プロセッサ手段及び前記プロセッサ手段をメモリ手段に接続する少なくとも一つのリンクを初期化するために埋込型プロセッサロジックを含む、不揮発性記憶手段と、
前記メモリ手段を初期化するための埋込型メモリロジック手段と、を有し、プロセッサリセットに応答し、かつ、オリジナル製品製造者(OEM)のプリブートコードに制御を提供する前に、前記SICが実行される、装置が提供される。
【図面の簡単な説明】
【0005】
【図1】本発明の一実施例に従った、プラットフォームから独立したシリコン一体化コード(SIC:silicon integrated code)のコンポーネントのブロック図である。
【図2】本発明の実施例に従ったシステムのブロック図である。
【図3A】本発明の一実施例に従った、シリコン一体化コードをランチするためのフローのブロック図である。
【図3B】本発明の一実施例に従った、シリコン一体化コードをランチするためのフローのブロック図である。
【図4A】本発明の他の実施例に従った、SICをランチするフローのブロック図である。
【図4B】本発明の他の実施例に従った、SICをランチするフローのブロック図である。
【図5A】本発明の更に他の実施例に従った、SICをランチするフローのブロック図である。
【図5B】本発明の更に他の実施例に従った、SICをランチするフローのブロック図である。
【図6】本発明の実施例に従った、ランタイムSICの実行を行う方法のフローを示す図である。
【図7】本発明の実施例に従った、ブートタイムの概略フローを示す図である。
【図8】本発明の実施例に従った、一時的なSICコードの実行の方法を示す図である。
【発明を実施するための形態】
【0006】
様々な実施例において、初期のイニシャライゼーションは、密接に基本的なプロセッサハードウエアに結びついている。このため、シリコン製造業者が初期のイニシャライゼーションソフトウエアをコントロールし、かつ提供する。これは、OEM BIOSによりインプリメントされない。
【0007】
このシリコン一体化コードは、コードをロードする環境において用いられる。そして、これは、供給元を保証し、このSICの実行後、OEM BIOSに、シームレスな形で制御が引き渡される。このSICは、ローレベルの態様のメモリイニシャライゼーションを実行するために用いられてもよい。例えば、アナログリンクがセットアップされるトレーニング、診断及びフックのテストのデザインが挙げられる。SICの中には、メモリコントローラ及び内部リンクのキー・イニシャライゼーション、そして、様々なプロセッサ及びシステム機能の基本的なランタイムサポートが含まれる。なお、本発明の技術的範囲はこの点に限定されない。
【0008】
ある実施例においては、このコードの信用のルート(root of trust)は、プロセッサマイクロコードのフックを介して提供される。このマイクロコードは、SICローダをインプリメントし、認証し、そしてSICをロードする。これは、シリコン製造業者のBIOSに存在し、その後、OEM BIOSに制御が渡される。OEM BIOSのアップグレードの試みがなされるため、例えばフラッシュメモリに組み込まれたファームウェアが脅威となる。したがって、SICローダをランチするプロセッサパッケージ内のコアマイクロコードの信用のルートは、その後に実行されるSICを含むOEM BIOSのブロックが有効であることを保証するために利用される。
【0009】
SICが実行された後、制御がOEM BIOSに渡される。このOEM BIOSは、オープンソースコードの、UEFI(Unified Extensible Firmware Interface)(例えば、2006年2月26日のUEFI仕様書バージョン2.0)に従ってインプリメントされてもよい。あるいは、IEEEオープンファームウエアインスティテュート1275−1994に従ってインプリメントされてもよい。あるいは、従来のBIOSまたは、専用のOEMブートコードによりインプリメントされてもよい。これらは、複数のOSをブートすることができる。ある実施例では、このSICは、パッチを実行するために利用されてもよい。例えば、エラーを回復したり、バイナリ変換を実行したりしてもよい。また、SICは、特定のメモリブロックのプロテクトの設定を行ってもよい。例えば、バイナリ変換のためのメモリブロックを隠したり、エラーのハンドリングを行ったり、OSからは見えず、かつランタイムの際に実行するシリコン製造業者によるその他のコードをハンドリングしてもよい。このようにして、プロセッサが、マイクロコードROM(uROM)オフロード、コプロセッサ・サポート等のための予備のコードを使用し、マシンがサードパーティOEMコードを実行する前に、SICがこのメモリを提供するようにさせることによって、このメモリのサブセットをプロセッサが利用することを可能とする。
【0010】
様々な実施例において、SICは、例えばフラッシュあるいはその他の不揮発性メモリとして、OEM BIOSに組み込むために、バイナリーコードで提供されてもよい。あるいは、SICは、プロセッサパッケージの不揮発性記憶領域にインプリメントされてもよい。したがって、実施例において、プロセッサ(またはその他のシリコン)製造業者は、ソースコードではなく、バイナリモジュールを顧客に提供することができる。これによって、より強固なIP保護が提供される。更に、シリコンと共にBIOSビルディングブロックを提供することによって、顧客の数が増加しても、技術的なサポートのコストは軽減できる。
【実施例】
【0011】
図1は、本発明の一実施例に従った、プラットフォームから独立した(platform independent)BIOSのコンポーネントのブロック図を示している。これは、SICに組み込むことができる。プラットフォームから独立させることによって、内在するコンポーネントは、マシンの特徴(例えば、メモリのタイプ、リンクスピード、利用できる電圧等)に依存せずに、あらゆるプラットフォームにおいても実行できる。後述するように、これに代えて、プラットフォームに従属したものも、プラットフォーム製造業者データファイルによって記述しておくことができる。例としては、例えば、システムボード等の情報をパラメータとして規定することができる。サードパーティのコードに制御を渡す前に、基本的なイニシャライゼーション(例えば、信用のルートを確立するリンクイニシャライゼーション)を行う特定のコンポーネントをSICによって実行することができる。このSICによる時間的な隔離によって、パワーオンリセットの際に、プロセッサがハードウエアを所有していることの保証を提供する。そして、制御をサードパーティのコードに渡す前まで、SICコードのみが実行される。図1に示すように、SICコンポーネントは、イニシャルプログラムローダ(IPL)20を含んでもよい。これは、サードパーティのコードの前にSICの残部を見つけ、ローディングする役目を果たす。なお、このローダはSICの一部と認識しなくてもよい。SICのコンポーネントは、一時的なものであり(transitory)又は、永続的なもの(persistent)でもある。永続的なものとしては、アクティブなもの(プラットフォームイニシャライゼーション(PI)モジュールのように振る舞うもの)又はパッシブなもの(新しい命令を介するライブラリのように振る舞うもの)がある。図1の実施例において、SIC10は、埋め込まれた中央処理装置(CPU)ロジック(ECL)30を含む。これは、オンボードの相互接続などのインタープロセッサロジックをイニシャライズする。双方のリンクのトレーニング及びメモリイニシャライゼーションは、リンクの両端の間の通信を含む。リンクについては、プロセッサは、他のプロセッサ又は入出力(IO)ハブに接続されてもよく、そして、データをやりとりするための最適な周波数及びリンク幅を決定することができる。このECLモジュールは、一時的(transitory)なものであってもよい。ある実施例において、リンクイニシャライゼーションは、ローパワー状態からのレジュームオペレーションにおいて、メモリの内容にダメージを加えずに再実行されてもよい(例えば、ACPI(Advanced Configuration and Power Interface))仕様バージョン4.0(2009年6月6日)。
【0012】
SIC10は、更に、メモリをイニシャライズするために、埋め込まれたメモリロジック(EML)20を含んでもよい。このコンポーネントは、ランタイムの間、一部は一時的なものであり、一部は永続的なものである(例えば、温度スロットリングの取り扱い、又はエラーの取り扱いが挙げられる)。メモリイニシャライゼーションは、アドレッシングを設定することを含む。異なるコンポーネントからは異なるメモリとして見える(views of memory)。例えば、CPUは、プロセッサ物理アドレスを持つ。ダイナミックランダムアクセスメモリ(DRAM)は、DRAM物理アドレスを持ってもよい。そして、ある実施例では、プラットフォーム物理アドレスが手当てされてもよい。したがって、どのようにリンクアドレスデコーダがプログラムされているかによって、メモリの見え方は異なる。プロセッサのための隔離メモリ(sequestered memory)を確保するために、アドレスデコーダ及びメモリデコーダのサブセットが、そのプロセッサのためにプログラムされてもよい。この隔離したメモリは、システムオペレーションの際にプロセッサに対して独占的に使われてもよい。そして、マイクロコードオフロード、バイナリトランスレータ、ライセンシング情報、管理情報等を格納してもよい。加えて、予約ロジック(reserved logic)50は、プラットフォームに独立のロジックの他の機能をサポートするために用いられてもよい。実施例を図1に示したが、本発明はこの点に限定されるものではない。
【0013】
図2を参照すると、本発明の実施例に従ったブロック図が示されている。図2におけるシステム100は、ハードウエア及びソフトウエアの複数のレイヤを含んでいる。同様に、図に示されたハードウエアは概略であって、所定のシステムにおいては、更に多くのコンポーネントが存在してもよい。更に、ソフトウエア部分は、異なる位置に、複数のコンポーネントが記載されているが、SICの部分は、異なる実施例においては、異なる位置に存在しうる点に留意すべきである。このシステムの基本的なハードウエアに関しては、ハードウエア110は、1つ以上のプロセッサ、メモリ、入出力デバイス等の様々なコンポーネントを含んでもよい。しかしながら、図面を分かりやすくするために、図2の実施例には、幾つかのコンポーネントのみを示している。特に、コアにおける実行のため、プロセッサコア115及び対応するマイクロコード120が示されている。様々な実施例において、コア115は、マルチコアプロセッサの複数のコアを代表するものとして示されている。マルチコアプロセッサの各々は、自身のマイクロコード記憶領域を持っている。加えて、様々なインプリメンテーションにおいて、プロセッサパッケージは、更に、統合メモリコントローラ(IMC)125を含んでもよい。これは、システムメモリ130に接続され、1つの実施例においては、デュアルインラインメモリモジュール(DIMM)例えば、ダブルデータレートDDR−3DIMMである。更に示されているように、IMC125は、周辺機器コントローラハブ(PCH)135に接続されている。これは、更に他のデバイス、例えばTPM(trusted platform module)140及び周辺装置モジュール145に接続されている。様々な装置からPCH135への接続はLPC(low pin count)バスを介してなされてもよい。なお、本発明の技術的範囲はこれに限定されることはない。限定されたコンポーネントが示されているが、異なる実施例においては、更に多くのコンポーネントが存在してもよいことは言うまでもない。
【0014】
SICモジュール150は、プロセッサハードウエアと密接に接続されている。様々なインプリメンテーションにおいて、SICモジュールは、プロセッサパッケージ内に存在し得るフラッシュメモリのような不揮発性ストレージにインプリメントされてもよい。あるいは、SICモジュールは、バイナリの形式でプロセッサ製造業者からOEMに提供されてもよい。OEMにおいて、これをBIOSに組み込む。したがって、実施例によって、SICの実際の場所は異なる。1つの実施例において、SICは、OEM BIOSの一部であってもよい。例えば、マザーボードに装着されたフラッシュデバイスに統合されてもよい。あるいは、例示としては、SICモジュールは、別個のコードブロックとして示されてもよい。特に、複数のSICコードのレビジョン1521−152nを含んでもよい。すなわち、以下に詳述するように、SICはフィールドにおいてアップデートされてもよい。コードに加えて、SICには、様々なデータブロック1541−154nが存在してもよい。1つの実施例において、シリコン製造業者のポリシが、このSICデータブロックに組み込まれてもよい。これは、在庫管理ユニット(SKU:stock keeping unit)に基づいてもよい。このような情報は、パーツの等級(part grading)を示す電圧及び温度レーティング、サポートされる機能、及び/又は、温度―物理的シリコン特性が含まれてよい。これらの様々なコード及びデータブロックにアクセスするために、ファームウエアインターフェーステーブル(FIT)155が提供されてもよい。このコード及びデータブロックは、キーペア構成によってプロテクトされてもよい。様々な実施例において、SIC150は、暗号によってハードウエアに従属しており、かつ、ランチは、コアマイクロコード120によって調整される(mediated)。更に、システムソフトウエアは、OEM BIOSの形式をとってもよい。これには、UEFI標準に基づくプリブートコードが含まれる。このコードは、様々なファームエアにボリュームに保存されてもよい。そして、セキュリティイニシャライゼーションコード(SEC)、プリEFI(PEI)コード、及び、ドライバ実行環境(DXE)及びブートデバイスセレクト(BDS)コードが含まれてもよい。論理的な説明をすると、これらのコードは、第1のコードモジュール160及び第2のコードモジュール170にセグメント化されてもよい。ファームエアボリュームは、不揮発性メモリの論理パーティションであり、これには、BIOS及びその他のローレベルソフトウエアが含まれてもよい。一般的に、モジュール160及びモジュール170の各々は、サードパーティが実行可能なコードを含むファームウエアボリュームであってもよい。第1のコードモジュール160は、OEMプラットフォームのイニシャライゼーションを実行するために利用されてもよい。そして、SICコード(ブロック162)からメモリアパーチャ(memory aperture)を取得する。制御は、その後、コードブロック164に渡され、物理的な存在の分析(physical presence analysis)を行い、セキュアなハッシュオペレーションを実行する。これによって、メインファームエアボリューム168の測定をする前に、セキュアなファームエアアップデートメカニズム166を実行することが可能となる。もし、全ての認証にパスすると、制御は第2のコードモジュール170に移る。これは、DXEコードを含んでもよい。そして、UEFIセキュアブロックモジュール174を実行してもよい。例えば、ACPIメモリに記憶された計測ログ(measurement log)176を使用する。そして、OSローダ及びドライバ185が実行されてもよい。これは、後にOS180をロードする。OSは、UEFI準拠のOSであってもよい。他の実施例において、1つ以上のオプションROM195を介して、レガシーOS190がインプリメントされてもよい。SICイニシャルプログラムローダのインプリメンテーションは、SICのプラットフォームへバインドするために選択されたアプローチに依存する。これについては、以下に詳述する。一実施例において、パッチアットリセット(P@R)のオペレーションが発生する。この場合、プロセッサがパッチを実行すると、CPUのコアマイクロコード又は他のロジックは、CPUフラッシュ内またはOEMフラッシュ内に、SICセクションを探す。または、SICをランチするイニシャルプログラムロード(IPL)ロジック内のコアパッチを介して、ランチする。CPUの外又はCPU認証されたエレメントに、SICが存在する場合、SICバイナリを正当と認めるために、ローディングの前に認証が実行される
さて、図3Aを参照すると、本発明の実施例に従った、SICをランチ(launch)するフローを示している。図3Aに示されるように、オペレーションはプロセッサのリセット(ブロック210)によって開始される。最小限のローレベルオペレーションが、リセットに応答して、プロセッサによって実行される。次に、コアマイクロコードによって、パッチがロードされてもよい(ブロック215)。コアマイクロコードは、コアマイクロコードパッチをポイントしているFITポインタを含むファームウエアインターフェーステーブルにアクセスする。ある実施例において、テーブルは、IPLをポイントしてもよい。1つの実施例において、パッチメモリはFITをも含むOEMフラッシュにストアされてもよい。テーブルの各エントリは、所定のコードの位置をポイントしている。このパッチをロードした後、SICは、コアマイクロコードを介してランチされる(launched)(ブロック220)。異なるインプリメンテーションにおいて、パッチは、IPLを含んでもよい。IPLは、コアパッチロードの一部として検証される。そして、これは独自のインテグリティメカニズムを実行する。例えば、SICを検証する別個のキーペアである。1つの実施例では、IPLは、マイクロコードの一部であってもよい。したがって、図3Bに示すように、プロセッサのリセット(ブロック230)、そしてパッチローディング(ブロック235)の後、パッチの実行がなされる。これには、IPL(ブロック240)が含まれ、これは、その後SICをランチ(launch)する(ブロック250)。
【0015】
他のインプリメンテーションにおいて、プロセッサリセットの時に、認証されたコードモジュール(ACM:authenticated code module)がランチされ、適切なシャットダウン、及び/又は、メモリにゼロを書き込むこと(zeroing memory out)を実行し、その後BIOSコードのランチ(launch)がなされる。これらのオペレーションは、OEM BIOSにおいてハッシュの実行を含んでもよい。そして、認証されたコードモジュールによって、TPMへのアクセスが行われてもよい。このようなACMは、SIC又はIPLを埋め込むことができ、そして、例えばサードパーティBIOS内(例えばマザーボードのフラッシュデバイス)にSICを見つけられるようにする。したがって、他のインプリメンテーションにおいて、SICは、認証されたコードモジュールからランチされてもよい。図4Aには、本発明の他の実施例に従った、SICのランチのフローが示されている。ブロック310においてプロセッサがリセットされた後、ACMは、コアマイクロコードによってランチされてもよい(ブロック315)。これに対して、SICは、ACMのクリーンシャットダウンにおいてランチされる(ブロック320)。更に他のインプリメンテーションにおいては、IPLは、ACMのクリーンシャットダウンにおいてランチされてもよい。したがって、図4Bに示されるように、プロセッサのリセット後(ブロック350)、ACMがランチされ(ブロック360)、そして、ACMのクリーンシャットダウンにおいて、IPLがランチされ(ブロック370)、そして、SICがランチされる(ブロック380)。
【0016】
SICの実行後、制御はBIOS(SICはこの一部である)に移される。例えば、制御は、マシンのリセットベクトルに移される。そして、SICによって、FITエントリがアクセスされ、PIモジュールにおいて、UEFIエントリポイントを介して、OEM BIOSの実行が開始される。
【0017】
あるインプリメンテーションにおいて、利用できるPIコードが、SICの実行のために利用される。例えば、「SEC」モジュールは、何らハードウエアの変更なしに、論理的に「SIC_IPL」とリネームされる。これは、図5Aに示されている。ここにおいて、プロセッサリセット(ブロック410)で、IPLがランチされ(ブロック415)、そして、その後SICがランチされる(ブロック420)。その他の方法としては、SICをイニシャライゼーションROM(INIT ROM)に埋め込むことである。すなわち、フラッシュは、結局のところ、サードパーティのBIOS又はOSアドレススペースにマッピングされないことになる。これは、図5Bに示されている。ここで、プロセッサのリセット(ブロック430)において、IPLを含むINIT ROMが実行され、IPLは、SICをランチする(ブロック435、440及び450)。更に他のインプリメンテーションにおいては、(例えばPI SEC又はINIT ROMにより)プロセッサベースのコードを用いて、独立したSICのランチが行われる。
【0018】
「SEC」の場合、認証は、SICのランチの後に行われる。すなわち、このアプローチでは、BIOSブートブロックが信用のコアルート(CRTM:core root of trust)を意味する。このモデルのセキュリティの検討は、SICのインテグリティを担保することが含まれる。すなわち、バイナリの出所は、シリコン製造業者である。SICを認証されたコードモジュール又はパッチにバインドすることは、これらのバイナリに既に使われているインテグリティの有効範囲を利用する1つのメカニズムである。あるいは、他のモデルとしては、SIC_IPLを上述のエンティティに統合することである。このSIC_IPLは、SICのインテグリティチェックを確保する責任を担うこととなる。しかし、リセット時にロードされるエラッタパッチ(errata patch)の残存するロジック(extant logic)、BIOS ACM、INIT ROM、又は他のリセットタイムに実行可能なものは、SICから分離(decoupled)される。これは、アップグレードのメカニズムを可能とする。この場合、SICは、以前のバイナリエンティティとは異なる終了時期(different cadence)において、変化する。このデカプリング(decoupling)は、その場かぎりで(ad hoc)混合された様々なバージョンのSIC_IPLホストモジュール及び連続したSICインスタンスがあることを意味するものではない。むしろ、チューブル(tuple)(SIC_IPLホスト、SIC)は、一緒に検証される。これによって、SIC_IPLホスト及びSICのサポートされたバージョンが、アップデートを介してサポートされる。そのため、検証されていないコンビネーションを介して、ロールバック及び他のアタックにさらされることはない。シリコン製造業者によって初期のイニシャライゼーションの制御ができるようにするために、様々なデータモジュールが存在してもよい。一実施例において、全てのSICデータモジュールは、SICに関連しており、そして、プロセッサ製造業者、OEM、及びエンドユーザにより提供されたデータを含む。したがって、プロセッサ製造業者のデータに加えて、上述のように、SICプラットフォームデータエンコーディング(PDE)、すなわちプラットフォーム製造業者(PM)により作られ、システムボード結合されたデータ構造にアクセスできてもよい。一実施例において、PDEは、UEFI PIプラットフォーム構成データ(PCD:Platform Configuration Data)を含むことができ(なお、これに限られるものではない)、例えば、ファームウエアインターフェーステーブル(FIT)エントリによって参照される。PDEは、パワーマネージメント(PM)ポリシ、及び発見できない(non−discoverable)、ボードに特有な(board−specific)情報を提供する。プラットフォームデータエンコーディングは、プロセッサがどのようにボードに組み込まれたかに関する詳細を提供する。例えば、ボードがファンレスデザインであるか否かである。この情報には、ベンダによってデザインされた周波数モード設定、特定のシステムマネジメントバス(SMBUS)のルーティング、メモリDIMM上のSPD(serial presence detect)EEPROMのアドレス等が含まれる。あり得る情報としては、PDEにおける誤った情報によって、SICが安全に失敗するということである。例えば、ベンダによる誤り、又は、ROMに対してアタックするマルウエアによる場合が挙げられる。他のモデルとしては、信頼されたPDEである。例えば、PMファシリティにおいてシリコン製造業者のツールを持つことによって、PMの入力を取り除き、リモートのシリコン製造業者のサーバを使ってPDEにサインし、それをPMに戻し、引き続きプラットフォームの統合を行うことである。PDEのほかに、出荷後(post−ship)に設定し、SICに移すことが挙げられる。これらは、プラットフォームオーナ(PO)がもたらす典型的な変更である。特定のデータエンコーディング及び格納は、オーナデータエンコーディング(ODE)と呼ばれる。このODEは、異なるシステムにおいて異なる場所で行われる。例えば、信頼されたコンピューティンググループ(TCG)TPM不揮発性(NV)データ位置そして、SICに予約されたNVインデックス、又はオーナがオーソライズしたその他の場所が挙げられる。このODEに存在するデータのタイプとしては、オーナの選択が含まれ得る。例えば、メモリインターリーブ、機能のイネーブル/ディスエーブル(例えば、同時マルチスレッディング(SMT))が挙げられる。同様の課題がODEに関する信頼に対しても内在している。すなわち、ODEに対するオーナアップデートが悪意であったり、間違っていたりした場合、SICは、安全に失敗しなければならない。
【0019】
上述の検討は、SICのイニシャライゼーション時に焦点を当てたものである。実施例では、SICはランタイムの間においても利用される。例えば、信頼性、可用性、保守性(RAS:reliability−availability−serviceability)を目的とした利用性の高いサーバが挙げられる。特に、ブート/イニシャライゼーションの際になされる特定のオペレーション、例えば、リンクイニシャライゼーション、及びメモリイニシャライゼーションのコードは、ランタイムにおいても実行される。このランタイムのアクティビティは、全てACPIマシン語(AML)フローに開示されてしまう。こんため、OSパワーマネージメント(OSPM)コードは、ファームウェアの力を借りずにアクションを実行することができる。しかしながら、実際には、これらのフローの多くは、システムマネジメントモード(SMM)のアシストを利用している。このSMMのインプリメンテーションは、ACPI及びチップセットアクションを補完するハンドラであり、DIMMのホットアッドによるメモリイニシャライゼーションなどのアクションを完了するものである。これは、ランタイムにおいてSICを必要とする。しかしながら、SMMハンドラはOEMの制御下にあるため、メモリイニシャライゼーションにおいて必要なIPは、OEMに共有される。これに対して、本発明の実施例を用いた場合、SICは、ランタイム時においてこのような開示をすることを避けることができる。
【0020】
図6を参照すると、本発明の実施例に従った、ランタイムSIC実行を行うための方法のフローが示されている。図6は、例えばホットアッドオペレーションのように、システムに対して動的な変更を提供する、高度に利用されるシステム上でのランタイムオペレーションの場合を示している。更に、図6の方法500は、ACPIフロー環境において利用される。この場合、制御は通常、SMMコンテキストで流され、ACPIリクエストをハンドリングするための特定のタスクを実行する。図6に示すように、方法500は、ホットプラグインディケーションを受け取る(ブロック510)。このホットプラグインディケーションとは、新しいコンポーネントがシステムに加えられるインディケーションである。このようなコンポーネントは、マルチプロセッサシステムの新しいプロセッサ、追加メモリ等である。更に、図6の実施例では、ホットプラグオペレーションであるが、実施例は、システムへの他の動的な変更にも同様に適用できる。その例としては、例えば、取り除くイベント、フェイルオーバイベント等が挙げられる。ホットプラグインディケーションを受け取ると、パワーマネージメントオペレーションは、パワーマネージメントオペレーションがトリガーされ、ホットプラグイベントがハンドリグされる(ブロック520)。このパワーマネージメントオペレーションは、ACPIインプリメントオペレーションであり、例えば、ACPI AMLフローに従う。従来においては、このようなフローは、SMMイベントをトリガーし、様々なタスクをハンドリングし、これらのタスク(例えば、イニシャライゼーション等)が、ホットプラグイベントの際に実行されていた。SMMモードは、所定のOEMによってインプリメントされているため、しかしながら、OEMは、基本的な(例えばシリコン製造業者の)IPにアクセスする必要がある。このため、様々な実施例において、これに代えて、パワーマネージメントオペレーションは、一時的な(transitory)SICを呼び出すためのコードを含める(ブロック530)。この一時的なSICは、SMMが本来実行しなければならないイニシャライゼーション等の様々なタスクを実行する。更に具体的には、ブロック540に示すように、このSICは、例えばホットプラグコンポーネントなどのイニシャライゼーションを実行する。これは、1つ以上のFITエントリ及びパワーマネージメントオペレーションからの入力に基づいて実行される。例えば、ACPI AMLは、様々な入力情報を提供する。一実施例において、ACPIフローにおいて、インタープリタは、FITテーブルをアクセスすることができ、また、ACPIネームスペースにおけるルーチンSICモジュールを含ませる。そして、時間的アイソレーションを提供する。他の実施例において、ACPIは、コールバックのために、CPUドライバを起動することができる。そして、パッチモードを実行するようSICを起動する。あるいは、このSICモデルが認証されたコードモジュールである場合、EnterAccs命令を介して実行する。ACPI AMLを用いて、メモリへのリード又はライト、あるいは、入出力位置の探索(IO location)が実行される。したがって、一実施例においては、モードを示すために、人工的な(synthetic)周辺デバイスアドレスが、チップセットに合成される。この状態において、AMLは、チップセットの部分と通信していると信じ、そしてチップセットは、実際にSICを起動する。他のアプローチとしては、初期の一時的なSICコードを実行しているとき、これは隔離したメモリ(sequestered memory)にストアされ、その後、この合成された周辺デバイスを通じて再度起動され、リロードされる必要はない。したがって、異なる実施例においては、このインディケーションに応答して、永続的な(persistent)SICコードが実行されるか、あるいは、一時的なSICコードが実行される。
【0021】
イニシャライゼーション及び他のオペレーションの実行の後、一時的なSICは、アンロードされ、制御はパワーマネージメントオペレーションに返還される(部録550)。このようなパワーマネージメントオペレーション、例えば、ACPI AMLフローの継続的な実行は、システムによる追加的なコンポーネントの追加の準備をするためになされる。図6に、この典型的なインプリメンテーションを示したが、本発明はこれに限定されるものではない。
【0022】
上述のランタイムSIC(RT_SIC)オペレーションは、リセットベクトルから実行される上述のSIC(本明細書ではブートタイムSIC(BT_SIC)と呼ぶ)と区別される。RT_SICは、SIC_IPLと類似した顕著なIPLプロセスを持つ。このプロセスは、正しいSICモジュールを検証し、これによってSICのコンテンツがシステムボード制作者に対し不可視であることを確保する。この目的のために、一時的なまたは永続的な二つのモジュールのうち少なくとも1つのランタイム起動がインプリメントされる。一時的なモデルにおいては、ACPI AMLフローが(例えば、認証されたコードモジュール(ACM)として)ランタイムバイナリモジュールを起動することができる。ACMとして構築されたランタイムSICは、FITからSICデータを参照することができ、かつ、そのイニシャライゼーションのアクションを実行することができる。しかし、実行後、それ自身はアンロードされる。このモードにおいて、ランタイムSICのインテグリティの保護に対して、危険にさらされる範囲(window)は、単純にそのアクションの実行の間である。なお、プラットフォームに対する全時間に亘ってのSICの保護について心配することはない。これは、既に説明したブートタイムSICの信用モデルを補うものである。この例の場合、時間的なアイソレーションを採用している。すなわち、これは最初実行され、その後、自身をアンロードする。
【0023】
もう一つのランタイムサポートは、永続的なランタイムSICである。このモデルの場合、ブートタイムSICが付加的なIPLを持つ。すなわち、ランタイムSIC_IPLであり、これは、ランタイムコードの環境及び実行コンテキストを作る。ランタイムSICに対するポリシの入力は、コントロール/ステータスレジスタ(CSR)を持つ人工的な周辺デバイスである(例えば、PCI(peripheral component interconnect))。このSCRは、ランタイムアクションをパラメータ化する。例えば、ホットプラグ又は他の命令(injunction)が挙げられる。これらのSCRは、ランタイム永続性SIC(runtime persistent SIC)によって発行(publish)される必要があり、SICは、これらのディレクティブ(directive)に従って動作する。すなわち、これらの機能(capabilities)に対するホストプラットフォームのインターフェースは、SCRを介する。したがって、これはホストに対してハードウエアのように見える。実行の内容は、プラットフォームの存続期間全体に渡って保護しなければならず、ランタイム永続性SICに対しては、トラストモデルは挑戦的なものであるため、CMA(cryptographic memory aperture)が、ランタイム永続性SICの実行環境をカバーするために用いられ得る。
【0024】
実施例は、更に、SICのアップデート及びマイグレーションを規定する。工場及びユーザの構成(configuration)を維持するため、プラットフォームのオーナ又は製造業者の設定が維持される。例えば、SIC_DATA_rev1からSIC_DATA_rev2の変更は安全なトランスフォーメーションであり、すなわち、SIC_DATA_rev2 = T (SIC_DATA_rev1)である。このトランスフォーメーションT()の一実施例としては、SIC_DATA_rev2には定義されていないSIC_DATA_rev1の工場設定のいかなるものも取り除き、そして、インテグリティ又は秘密性メタデータブロック(例えば、暗号的な再署名、及び/又は、再暗号化)の再生(regeneration)をSIC_DATA_rev2に適用する。また、セキュリティの目的から、SIC_IPL及びSIC_CODEは、以前のレビジョンへのアップデートの許可を回避するよう構成することができる(例えば、SIC_CODE/CODE_rev”n”を持つシステムにSIC_CODE/DATA_rev”n−1”を適用することを回避する)。この基本原理は、システムの導入のモデルは、プロセッサ又はチップセット製造業者がレビジョンn−1に存在するセキュリティ上の欠陥をレビジョンnによって製造業者がフィックスをリリースしてこれに対処したということである。アタックは、しばしばフィックスをリバースエンジニアリングして、レビジョンn−1へのアップデートをシステムに適用することを試み、エラーの再発を起こさせることを目論むものである。このような、SIC_CODE及び SIC_IPLにおけるアンチロールバックへの対処は、このようなアタックに対する保護を提供する追加的なポリシである。
【0025】
このようなアップデートは、後に発見された問題に対する検討である。シリコンの誤り(errata)、セキュリティのフィクスは、カスタマーから報告された製品の欠陥に対処するため、プロセッサの出荷後の環境で見つかったもの、あるいは、利用上の不満(例えば、パワー、パフォーマンス、フィックス)によるものである。
【0026】
コアマイクロコード及びファームエアインターフェーステーブル(FIT)の増大によって、SIC_CODE及びSIC_DATAブロックが複数許容されるようになった。このコード及びデータは、レビジョン識別子に加えて、それらの過去の暗号化メタデータ(モジュールの機密性のためのもの、インテグリティのためのCMA及び署名が用いられる)。後者のレビジョンは、後者の過去の設定をマイグレートすることを仕組むために利用される。しかし、レビジョンは、コード及びデータが規定されたアクセス基準を持つようにするために使われる。例えば、「過去のバージョンへのロールバック禁止」は、アタックを回避することを目的とする。アタッカーは、既知のセキュリティ欠陥を持つ過去のSIC_CODE 及び SIC_DATAを意図的にシステムに適用して、その後に指摘された脆弱性を再度導入することができる。
【0027】
図7を参照すると、本発明の実施例に従った、システムのブートタイムの概略ブロック図が示されている。図7に示されるように、このブートタイムフローは、複数のSIC実行の適切な1つを決定することを示している。図示するように、電源オンの最初のフェーズで、コアマイクロコード710の実行が開始される。このコアマイクロコードは、FIT722を探し、そして、1以上のSICモジュール724及び726を認証する。この認証は、異なる実施例において、様々な形態をとってもよい。例えば、あるインプリメンテーションにおいては、この認証は、ハッシュ(例えばSHA−256)の実行、及び/又は、暗号デジタル署名(例えば、RSA(Rivest Shamir Adelman)、ECC(error correction coding)、DSA(digital signature algorithm))を含む。そして、プロセッサハードウエアにより、このハッシュ、及び/又は、デジタル署名と、プロセッサ又はチップセットの複合体に格納されたホワイトリスト(許可されたもの)及び/又はブラックリスト(禁止されているもの)とを比較することにより、プラットフォームのオーナシップを確保する。このフェーズは、SICを利用するかのポリシ決定によるSICのランチによって終了する。図示するように、FIT722の1以上のエントリに基づいて、対応するSICデータ728と共に、複数のSICレビジョン724及び726の1つが選択され得る。上述のように、SICデータは、プラットフォーム製造業者エンコーディング、及び、エンドユーザエンコーディング、これに加えて、プロセッサ製造業者データエンコーディングが含まれてもよい。したがって、制御は、イニシャライゼーションROM720が実行される第2のフェーズに移される。シリコン一体化コードのサードパーティ由来(third part−dourced)の従来のアクティビティを実行することによって、シリコン製造者のオーソライズしたアクティビティが行われる。これには、SICをアップグレードすることに係るポリシ(例えば、複数のSICコード及びデータブロックがある場合にいずれを使用すべきか)及び、SIC自身のアクティビティのコンテンツを隠すことが含まれる。イニシャライゼーションROMはSICを含んでもよい。又は、SICは、(プロセッサに対して)外部ROM(例えばOEM BIOSメモリ)に含まれてもよい。SICの実行は、プロセッサ、メモリ等に関連するリンクをイネーブルとする。制御は、第3のフェーズに移される。ここでは、一実施例において、UEFIファームエア730に基づいて、更なるプラットフォームのイニシャライゼーションが実行される。UEFIファームエア730は、セキュリティコード、実行前(pre−execution)イニシャライゼーション、及びDXEこれ735が含まれてもよい。これらのコードを実行するために、様々なデバイス、バス、又はサービスドライバ733b−nが実行されてもよい。このUEFIファームエアは、OEM BIOSにおいてインプリメントされてもよいことに留意すべきである。制御は、その後、UEFIインターフェースを介して、ブートマネジャ744によって実行されるブートデバイスセレクト(BDS)コード740aに移る。これによって、OSのブートが可能となる。SICは、一時的(transitory)であり、第2のフェーズでのみ存在する。これによって、空間的及び時間的な隔離(isolation)が可能となる。図7には示されていないが、ランタイムの際に、このコード又はランタイムSICは、アクセスされ得ることに留意すべきである。例えば、プラットフォームマネジメントオペレーションのために利用されうる上述の様々な動的なイベントと同様である。
【0028】
図8には、本発明の実施例に従ったSICコードを実行する方法のフローが示されている。図示するように、方法800は、マシンのリスタート(ブロック810)により開始される。特に、マイクロコードは、FITテーブルがアクセス可能か否かを判断する(ダイヤモンド815)。もし、アクセスできない場合には、フラッグをセットし、FITテーブルからのローディングが不可能であることを示す(ブロック823)。制御は、その後ブロック824に移り、ブート失敗によるリカバリ状態に入る。もし、インストールされたFITテーブルにアクセスできる場合、SICコードエントリが、最大のレビジョン番号に対応するか否かが判断される(ダイヤモンド820)。これがイエスであれば、イニシャルプログラムローダがランチされる(launched)(ブロック825)。IPLが成功した場合(ダイヤモンド830)、このSICが実行される(ブロック840)。不成功の場合には、制御は、ダイヤモンド835に移り、追加的なSIC FITエントリが存在するかが判断される。存在する場合には、制御はブロック840に移動し、ここでFITエントリはインクリメントされそして、制御はダイヤモンド820に戻る。
【0029】
図8を更に参照すると、SICコードが実行されているとき、制御はダイヤモンド850に移る。そして、正当なSICデータが存在するかが判断される。例えば、1つ以上の認証手続に基づいてこれがなされる(ダイヤモンド850)。もし、これが否定的であれば、制御は上述のブロック824に戻される。もし正当なデータモジュールが存在する場合には、制御は、ブロック855に移る。ここで、特定のシステムイニシャライゼーション、が実行され得る。これには、メモリイニシャライゼーション及びリンクイニシャライゼーションが含まれる。イニシャライゼーションの後、メモリ及びリンクは、自身の設定をテストする(ブロック860)。次に、テストがパスしたか否かが判断される(ダイヤモンド865)。もし、そうでない場合には、リカバリに移行する。もし、テストをパスしたら、制御はブロック870に移る。ここで、全ての設定が、安全な変換(transformation)を介して、最新のSICデータにマイグレートされる。一実施例において、このような安全な変換では、SIC_CODEによって実行されるSIC_CODEは、以前のSIC_DATAの設定をマッピングし、かつ、次のSIC_DATAにマッピングする。これは、SIC_DATAブロックのインテグリティ基準値を再生成することを含む。制御は、その後、例えばOEM BIOSに移る(ブロック875)。図8の実施例におけるこのような特定のインプリメンテーションを示したが、本発明の技術的範囲はこの点に限定されない。
【0030】
実施例は、コードによってインプリメントされ、そして記憶媒体に格納される。媒体に格納された命令は、命令を実行するシステムをプログラムするために使用される。記憶媒体としては、フロッピー(登録商標)ディスクを含むあらゆるタイプのディスク、光ディスク、個体ドライブ(SSD)、コンパクトディスク読み取り専用メモリ(CD−ROM)、再書き込み可能コンパクトディスク(CD−RW)、及び磁気光ディスク、半導体デバイス、例えば、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、例えばダイナミックランダムアクセスメモリ(DRAM)、静的ランダムアクセスメモリ(SRAM)、EPROM、磁気光カード、又は、その他の媒体であって、電気的命令を格納するのに適した媒体が含まれる。
【0031】
限定された数の実施例に基づいて本発明を説明したが、当業者は、様々な変更及びバリエーションをこれらから導くことができることは言うまでもない。添付の請求項はこれらの全ての変更及びバリエーションをカバーし、本発明の技術的範囲に含まれる。

【特許請求の範囲】
【請求項1】
プロセッサ製造業者のプラットフォームから独立したコードに対応する半導体一体化コード(SIC)を記憶するための不揮発性記憶手段であって、前記SICは、プロセッサ手段及び前記プロセッサ手段をメモリ手段に接続する少なくとも一つのリンクを初期化するために埋込型プロセッサロジックを含む、不揮発性記憶手段と、
前記メモリ手段を初期化するための埋込型メモリロジック手段と、
を有し、
プロセッサリセットに応答し、かつ、オリジナル製品製造者(OEM)のプリブートコードに制御を提供する前に、前記SICが実行される、
装置。
【請求項2】
前記SICをロードするためのイニシャル・プログラム・ローダ(IPL)を更に有し、
前記IPLは、前記プロセッサ手段のマイクロコードからランチされ、
前記IPLは、前記SICを認証し、かつ、その後、前記SICをランチする、
請求項1記載の装置。
【請求項3】
前記IPLは、前記SICの位置をポイントするポインタを含むエントリを有するファームウェア・インターフェース・テーブル(FIT)にアクセスする、
請求項2記載の装置。
【請求項4】
前記SICは、前記不揮発性記憶手段へ組み入れるために、バイナリとして前記OEMに提供され、
前記不揮発性記憶手段は、OEM基本入出力システム(BIOS)を含んでいる、
請求項3記載の装置。
【請求項5】
前記不揮発性記憶手段は、複数のSICレビジョンを含み、
前記複数のSICレビジョンの各々は、対応するSICデータモジュールに関連づけられており、
前記IPLは、前記FITのエントリに基づいて、ランチするために、前記複数のSICバージョン及びSICデータモジュールのうちの1つを選択する、
請求項4記載の装置。
【請求項6】
前記SICデータモジュールは、プロセッサ製造業者データ、OEMデータ、及びエンドユーザデータを含み、
前記OEMデータ、及び前記エンドユーザデータは、プラットフォームに依存する、
請求項5記載の装置。
【請求項7】
前記OEMデータは、前記不揮発性記憶手段に書き込まれる前に、前記プロセッサ製造業者によって署名された信頼されたデータである、
請求項6記載の装置。
【請求項8】
前記不揮発性記憶手段は、複数のコアと、少なくとも一つのマイクロコードストアと、一体化されたメモリコントローラと、を含むプロセッサパッケージの中にある、
請求項1記載の装置。
【請求項9】
前記SICは、前記プロセッサ手段のために、一部の前記メモリ手段を隔離し、
前記隔離された部分は、オペレーティングシステムから見えない、
請求項1記載の装置。
【請求項10】
前記プロセッサ手段は、前記隔離された部分に、バイナリトランスレータを記憶する、
請求項9記載の装置。
【請求項11】
システムにおいて少なくとも一つのコンポーネントが前記システムに動的に組み込まれる指示を受け取るステップと;
前記指示に応答するオペレーティングシステムパワーマネジメント(OSPM)コードを介して、パワーマネージメントオペレーションを起動させるステップと;
システムマネジメントモードに移行せずに、前記OSPMコードから半導体に一体化されたコード(SIC)を呼び出すステップであって、前記SICは、プロセッサ製造業者のプラットフォームから独立したコードに対応し、かつ、前記SICを用いて、前記少なくとも一つのコンポーネントのイニシャライゼーションを実行する、ステップと;
前記SICをアンロードし、かつ、前記OSPMに返すステップであって、前記SICはバイナリのモジュールとして、前記システムのオリジナル製品製造者(OEM)に、前記プロセッサ製造業者によって提供される、ステップと;
を有する方法。
【請求項12】
前記SICを用いて、ファームウェア・インターフェース・テーブル(FIT)のエントリに基づいて、SICデータモジュールにアクセスするステップ、
を更に有する請求項11記載の方法。
【請求項13】
前記SICデータモジュールの情報を用いて、前記イニシャライゼーションを実行するステップ;
を更に有する請求項12記載の方法。
【請求項14】
システムスタートアップにおいて、前記システムのプロセッサ及びメモリのイニシャライゼーションを実行するために、SICをランチするステップ;
を更に有する請求項11記載の方法。
【請求項15】
前記イニシャライゼーションの実行の後に、
SICによるメモリセットアップの隔離された部分に前記SICを記憶するステップ;
を更に有する請求項14記載の方法。
【請求項16】
前記隔離された部分に記憶された前記SICを呼び出すステップ;
を更に有する請求項15記載の方法。
【請求項17】
チップセットに周辺デバイスアドレスを合成し、前記OSPMコードによって前記周辺デバイスアドレスへのアクセスを介して前記SICを呼び出すステップ;
を更に有する請求項11記載の方法。
【請求項18】
複数のコア及び不揮発性メモリを含むプロセッサ手段であって、半導体に一体化されたコード(SIC)に対する前記不揮発性メモリは、前記プロセッサ手段の製造業者のプラットフォームから独立したコードに対応し、前記SICは、前記プロセッサと、前記プロセッサ手段をシステムメモリに接続する少なくとも一つのリンクと、を初期化するための埋込み型プロセッサロジック及び前記システムメモリを初期化する埋め込みメモリロジックを含み、前記SICは、プロセッサリセットに応答し、かつ、オリジナル製品製造者(OEM)基本入出力システム(BIOS)に制御を提供する前に、実行される、プロセッサ手段と;
前記OEMのファームウェアを記憶するためのフラッシュメモリ手段であって、前記ファームウェアは前記OEM BIOSを含む、フラッシュメモリ手段と;
前記プロセッサ手段に接続された前記システムメモリと;
を有するシステム。
【請求項19】
前記SICを認証し、かつ、その後、ランチするためのイニシャル・プログラム・ローダ(IPL)であって、前記IPLは、前記プロセッサ手段のマイクロコードからランチされる、イニシャルプログラムローダ(IPL)、
を更に有する請求項18記載のシステム。
【請求項20】
前記SICは、システムオペレーションの間、前記プロセッサ手段の独占的使用のために、前記システムメモリの一部を隔離し、
前記隔離された部分は、オペレーティングシステムから見えない、
請求項19記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3A】
image rotate

【図3B】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate