(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-16
(45)【発行日】2024-12-24
(54)【発明の名称】集積回路
(51)【国際特許分類】
G06F 11/07 20060101AFI20241217BHJP
G06F 11/10 20060101ALI20241217BHJP
G06F 15/78 20060101ALI20241217BHJP
【FI】
G06F11/07 166
G06F11/07 140N
G06F11/10 662
G06F15/78 516
G06F15/78 530
(21)【出願番号】P 2021001209
(22)【出願日】2021-01-07
【審査請求日】2023-12-15
(73)【特許権者】
【識別番号】000136136
【氏名又は名称】株式会社PFU
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】麦元 徹
(72)【発明者】
【氏名】岸 明奈
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2002-073427(JP,A)
【文献】特開2004-234263(JP,A)
【文献】特開平08-016420(JP,A)
【文献】米国特許出願公開第2020/0364339(US,A1)
【文献】特開2018-055337(JP,A)
【文献】特開2009-258985(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 11/10
G06F 15/78
(57)【特許請求の範囲】
【請求項1】
メモリコントローラと、システムエージェントと、割込コントローラを有するCPUコアとを具備する集積回路であって、
前記メモリコントローラが、
第一メモリから出力された
データにコレクタブルエラーが発生したことを検出したときに、前記コレクタブルエラーが発生したことを示すコレクタブルエラー通知を前記システムエージェントへ送信し、
前記システムエージェントが、前記コレクタブルエラー通知を受信したときに、前記コレクタブルエラー通知に基づいて
マシンチェックエラーを検出し、前記コレクタブルエラー通知に応じてマシンチェックエラー割込を前記割込コントローラへ送信し、
前記割込コントローラが、前記マシンチェックエラー割込を受信したときに、前記マシンチェックエラー割込を
システム管理割込に変換し、前記システム管理割込を前記CPUコアへ送信することにより、前記CPUコアの
動作モードを
非システム管理モードから
システム管理モードへ移行させ、
前記動作モードが前記システム管理モードにある前記CPUコアが、
システム管理割込ハンドラを実行することにより、前記コレクタブルエラーの情報を
第二メモリに記録する、
集積回路。
【請求項2】
メモリコントローラと、システムエージェントと、割込コントローラを有するCPUコアとを具備する集積回路であって、
マシンチェックエラーが発生したことを示すマシンチェックエラー通知を出力可能な第一ピンと、
前記マシンチェックエラー通知を受信したときにシステム管理割込を出力する第二ピンであって、前記第一ピンと接続された前記第二ピンと、
をさらに具備し、
前記メモリコントローラが、
第一メモリから出力された
データにアンコレクタブルエラーが発生したことを検出したときに、前記アンコレクタブルエラーが発生したことを示すアンコレクタブルエラー通知を前記システムエージェントへ送信し、
前記システムエージェントが、前記アンコレクタブルエラー通知を受信したときに、前記アンコレクタブルエラー通知に基づいて前記マシンチェックエラーを検出し、前記アンコレクタブルエラー通知に応じて前記第一ピンに前記マシンチェックエラー通知を出力させ、
前記第二ピンが、前記第一ピンから前記マシンチェックエラー通知を受信したときに、前記システム管理割込を前記割込コントローラへ出力し、
前記割込コントローラが、前記システム管理割込を受信したときに、受信した前記システム管理割込を前記CPUコアへ転送することにより、前記CPUコアの
動作モードを
非システム管理モードから
システム管理モードへ移行させ、
前記動作モードが前記システム管理モードにある前記CPUコアが、
システム管理割込ハンドラを実行することにより、前記アンコレクタブルエラーの情報を
第二メモリに記録する、
集積回路。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、集積回路に関する。
【背景技術】
【0002】
CPU(Central Processing Unit)コア、メモリコントローラ、システムエージェント、及び、IO(Input/Output)コントローラ等、コンピュータシステムの基本動作に必要な機能を1つの半導体チップに内蔵したモジュールとして、SoC(System on Chip)と呼ばれる集積回路が知られている。SoCは、メモリや各種のIOデバイスと接続されて使用される。
【0003】
SoCでは1つの半導体チップ上でコンピュータの基本システムが動作可能であるため、SoCを電子機器に実装することにより電子機器を小型化できる。一方で、SoCは大量生産品であり、かつ、SoCの製造はベンダーに依存しているため、ユーザが求める仕様変更をSoCに対して行うことは容易ではない。
【0004】
ここで、広く普及しているSoCの一つとして、Intel Atom(登録商標)シリーズのSoC(以下では「IAシリーズSoC」と呼ぶことがある)が挙げられる。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2017-091077号公報
【文献】特開2018-055337号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ここで、IAシリーズSoCに内蔵されているメモリコントローラ(以下では「IAメモリコントローラ」と呼ぶことがある)は、SoCに接続されたメモリからSoCへ出力されるデータ(以下では「メモリデータ」と呼ぶことがある)に発生したエラー(以下では「メモリエラー」と呼ぶことがある)を検出することが可能である。しかし、IAメモリコントローラは、メモリエラーを検出した場合でも、メモリエラーをハンドリングするためのシステム管理割込(System Management Interrupt,以下では「SMI」と呼ぶことがある)をCPUコアへ直接伝える機能を有していない。このため、IAシリーズSoCを実装する電子機器では、発生したメモリエラーを記録しておくことが困難であった。
【0007】
そこで、本開示では、発生したメモリエラーを記録しておくことが可能な技術を提案する。
【課題を解決するための手段】
【0008】
本開示の集積回路は、メモリコントローラと、システムエージェントと、割込コントローラを有するCPUコアとを有する。前記メモリコントローラは、前記集積回路に接続された第一メモリから出力されたデータにエラーが発生したことを検出したときに、前記エラーが発生したことを示すエラー通知を前記システムエージェントへ送信する。前記システムエージェントは、前記エラー通知を受信したときに、前記エラー通知に基づいてマシンチェックエラーを検出する。前記割込コントローラは、前記システムエージェントによって前記マシンチェックエラーが検出されたときに、システム管理割込を前記CPUコアへ送信することにより、前記CPUコアの動作モードを非システム管理モードからシステム管理モードへ移行させる。前記動作モードが前記システム管理モードにある前記CPUコアは、システム管理割込ハンドラを実行することにより、前記エラーの情報を、前記集積回路に接続された第二メモリに記録する。
【発明の効果】
【0009】
開示の技術によれば、発生したメモリエラーを記録しておくことが可能となる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、本開示の実施例のSoCの構成例を示す図である。
【
図2】
図2は、本開示の実施例のメモリエラーレジスタの構成例を示す図である。
【
図3】
図3は、本開示の実施例の第二マシンチェックレジスタの構成例を示す図である。
【
図4】
図4は、本開示の実施例のSoCにおける処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、本開示の実施例を図面に基づいて説明する。
【0012】
[実施例]
<SoCの構成>
図1は、本開示の実施例のSoCの構成例を示す図である。
図1において、SoC1は、CPUコア3と、メモリコントローラ4と、システムエージェント5と、IOコントローラ7と、IOファブリック9と、SPI(Serial Peripheral Interface)8とを有し、メモリ2及びBIOS(Basic Input Output System)フラッシュメモリ6に接続されて使用される。メモリ2はメモリコントローラ4に接続され、BIOSフラッシュメモリ6はSPI8に接続される。SoC1は集積回路の一例であり、SoC1の一例としてIAシリーズSoCが挙げられる。
【0013】
CPUコア3は、割込コントローラ31と、キャッシュ41とを有する。割込コントローラ31は、LVT(Local Vector Table)32を有する。メモリコントローラ4は、メモリエラーレジスタ11を有する。システムエージェント5は、マシンチェックレジスタ60を有する。IOコントローラ7は、機能設定レジスタ51と、GPIO(General Purpose Input Output)ピン52と、SMIピン53とを有する。
【0014】
SoC1に接続されるメモリ2は、SMRAM(System Management Random Access Memory)空間21を有する。SMRAM空間21には、SMRAM空間21内でSMIに対する処理(以下では「SMI処理」と呼ぶことがある)を行うSMIハンドラ22が予め記憶されている。SMRAM空間21は、メモリ2内の独立したアドレス空間であり、CPUコア3の動作モードがシステム管理モード(System Management Mode)にあるときにアクセス可能である一方で、CPUコア3の動作モードがシステム管理モード以外のモード(以下では「非システム管理モード」と呼ぶことがある)にあるときは、アクセス不可である。
【0015】
<メモリエラーレジスタの構成>
図2は、本開示の実施例のメモリエラーレジスタの構成例を示す図である。
図2に示すように、メモリエラーレジスタ11は、最下位ビットの0ビット目から順に、16ビットのRV(Reserved)フィールドと、ECC(Error Correction Code)シンドロームコードがセットされる8ビットのSYNDROMEフィールドと、エラーチャンク番号がセットされる1ビットのERR_CHUNKフィールドと、エラーバースト番号がセットされる2ビットのERR_BURSTフィールドと、UE(Uncorrectable Error)検出フラグがセットされる1ビットのUEフィールドと、CE(Correctable Error)検出フラグがセットされる1ビットのCEフィールドと、2ビットのRV(Reserved)フィールドと、メモリエラーレジスタ11が全クリアされるときにセットされるCLEARフィールドとを有する。
【0016】
メモリエラーレジスタ11の全フィールドの初期値はオール“0”である。SYNDROMEフィールドには、64ビットのメモリデータにおいてエラーが発生したビットを示す値(以下では「エラービット値」と呼ぶことがある)がセットされる。ERR_CHUNKフィールドには、下位32バイトのチャンクにメモリエラーが発生したときに“0”がセットされ、上位32バイトのチャンクにメモリエラーが発生したときに“1”がセットされる。ERR_BURSTフィールドには、チャンク内のメモリエラーのバースト番号がセットされる。UEフィールドには、メモリコントローラ4が訂正不可能な誤り(Uncorrectable Error,以下では「UE」と呼ぶことがある)がメモリデータに発生したときに“1”がセットされる。CEフィールドには、メモリコントローラ4が訂正可能な誤り(Correctable Error,以下では「CE」と呼ぶことがある)がメモリデータに発生したときに“1”がセットされる。CLEARフィールドには、メモリエラーレジスタ11が全クリアされるときに“1”がセットされる。
【0017】
<マシンチェックレジスタの構成>
図1に示すように、マシンチェックレジスタ60は、IA32_MCi_CTL2_MSRと呼ばれる第一マシンチェックレジスタ61と、IA32_MCi_STATUSと呼ばれる第二マシンチェックレジスタ62とから形成される。
【0018】
図3は、本開示の実施例の第二マシンチェックレジスタの構成例を示す図である。
図3に示すように、第二マシンチェックレジスタ62は、最下位ビットの0ビット目から順に、マシンチェックエラーコードがセットされる16ビットのマシンチェックエラーコードフィールドと、モデル固有の詳細エラーコードがセットされる16ビットの詳細エラーコードフィールドと、その他の情報がセットされる29ビットのその他情報フィールドと、マシンチェックの要因がUEであるかCEであるかを示すフラグがセットされる1ビットのUCフィールドと、その他の情報がセットされる1ビットのその他情報フィールドと、マシンチェックエラーの発生の有無を示すフラグがセットされるVALフィールドとを有する。
【0019】
第二マシンチェックレジスタ62の全フィールドの初期値はオール“0”である。マシンチェックエラーコードフィールドには、メモリエラーが発生したときに“009Xh”がセットされ、メモリエラー以外のエラーが発生したときに“0408h”がセットされる。詳細エラーコードフィールドには、UEが要因のマシンチェックエラーが発生したときに“0009h”がセットされ、CEが要因のマシンチェックエラーが発生したときに“000Ah”がセットされ、UE及びCE以外が要因のマシンエラーが発生したときには、“0009h”及び“000Ah”以外の値がセットされる。UCフィールドには、マシンチェックの要因がCEであるときは“0”がセットされ、マシンチェックの要因がUEであるときは“1”がセットされる。VALフィールドには、マシンチェックエラーが発生していないときに“0”がセットされ、マシンチェックエラーが発生したときに“1”がセットされる。
【0020】
<SoCの動作>
SoC1に接続されるメモリ2に記憶されているメモリデータには64ビット毎に8ビットの誤り訂正用データが付加されている。メモリコントローラ4は、8ビットの誤り訂正用データを用いて64ビットのメモリデータにおいて1ビットの誤りを訂正することが可能な誤り訂正機能を有する。一方で、64ビットのメモリデータにおいて同時に2ビット以上の誤りが発生したときは、メモリコントローラ4は、誤り自体を検出することは可能だが、誤りを訂正することは不可能である。メモリデータにCEが複数回、または、UEが1回でも発生したときは、ソフトエラーではなくハードエラーとしてメモリ2の不良が疑われる。また、メモリデータにCEが発生した場合でも、メモリコントローラ4は誤りを訂正することが可能であるため、コンピュータシステムの動作は継続可能である。一方で、メモリデータにUEが発生したときは、メモリコントローラ4は誤りを訂正することが不可能であるため、一般的にはハングアップやブルースクリーン/カーネルパニックが発生してコンピュータシステムの動作は停止する。
【0021】
また、SoC1のメモリコントローラ4は、メモリ2から出力されるデータにエラーを検出した場合でも、メモリエラーをハンドリングするためのSMIをCPUコア3へ直接伝える機能を有していない。
【0022】
以下、BIOSの初期設定からOS(Operating System)の動作開始までのSoCの動作と、メモリデータにCEが発生する場合のSoCの動作と、メモリデータにUEが発生する場合のSoCの動作とに分けて説明する。
【0023】
<BIOSの初期設定からOS(Operating System)の動作開始までのSoCの動作>
SoCが実装されている電子機器の電源がオンにされると、CPUコア3は、BIOSフラッシュメモリ6に予め格納されたBIOS初期化処理プログラムをキャッシュ及びメモリ2に読み込んで実行する。
【0024】
BIOS初期化処理プログラムの実行により、CPUコア3は、第一マシンチェックレジスタ61に対して、コレクタブルなマシンチェックエラー割込(Corrected Machine Check Error Interrupt,以下では「CMCI」と呼ぶことがある)の有効化と、割込コントローラ31に通知されるCMCIの生成条件となるCE発生回数(以下では「CMCI生成条件」と呼ぶことがある)とを設定する。例えば、CMCI生成条件が1回(“0001h”)に設定されることにより、CEが発生したときにシステムエージェント5から割込コントローラ31にCMCIを通知することが可能になる。
【0025】
また、BIOS初期化処理プログラムの実行により、CPUコア3は、LVT32における割込伝達モードをCMCIからSMIへの変換モードに設定する。本設定により、割込コントローラ31がCMCIをSMIに変換することが可能になるので、システムエージェント5から割込コントローラ31に送信されるCMCIをSMIとしてCPUコア3に伝達することが可能になる。
【0026】
また、BIOS初期化処理プログラムの実行により、CPUコア3は、マシンチェックエラーが発生したことを示す通知(以下では「マシンチェックエラー通知」と呼ぶことがある)を出力可能なピン(以下では「MCERRピン」と呼ぶことがある)としてGPIOピン52が機能するように機能設定レジスタ51を設定する。
図1に示すように、SMIピン53がGPIOピン52とプリント基板のパターン配線で接続されることで、GPIOピン52がアサートされたときにSMIピン53もアサートされて、アサートされたSMIピン53はSMIを割込コントローラ31へ出力する。よって、本設定により、メモリデータにUEが発生すると、GPIOピン52がアサートされることにより、IOコントローラ7からCPUコア3にSMIを送信することが可能になる。
【0027】
BIOS初期化処理プログラムの実行完了後、OSが起動してメモリテストプログラムが開始される。
【0028】
以下では、メモリテストプログラムの実行中に、メモリデータにCEまたはUEが発生する場合について説明する。
【0029】
<メモリデータにCEが発生する場合のSoCの動作>
まず、CPUコア3は、メモリ2に対してリードコマンドを発行する。
【0030】
次いで、メモリ2は、1ビットの誤りが発生しているメモリデータをメモリコントローラ4へ出力する。
【0031】
次いで、メモリコントローラ4は、メモリデータにCEを検出し、SYSDROMEフィールドにエラービット値をセットし、メモリエラーレジスタ11のCEフィールドを“1”にセットする。
【0032】
次いで、メモリコントローラ4は、メモリデータのCEを訂正し、誤り訂正後のメモリデータをCPUコア3へ送信するとともにメモリ2に書き込む。
【0033】
次いで、メモリコントローラ4は、メモリデータにCEが発生したことを示す通知(以下では「CE通知」と呼ぶことがある)をシステムエージェント5へ送信する。
【0034】
次いで、CE通知を受信したシステムエージェント5は、CE通知に基づいてマシンチェックエラーを検出し、第二マシンチェックレジスタ62において、マシンチェックエラーコードフィールドを“009Xh”にセットし、詳細エラーコードフィールドを“000Ah”にセットし、UCフィールドを“0”にセットし、VALフィールドを“1”にセットする。
【0035】
次いで、第二マシンチェックレジスタ62においてUCフィールドが“0”にセットされ、かつ、VALフィールドが“1”にセットされたシステムエージェント5は、CE通知に応じて、割込コントローラ31へCMCIを送信する。
【0036】
次いで、CMCIを受信した割込コントローラ31は、CMCIをSMIに変換する。
【0037】
次いで、割込コントローラ31は、変換後のSMIをCPUコア3へ送信することにより、CPUコア3の動作モードを非システム管理モードからシステム管理モードへ移行させる。
【0038】
次いで、動作モードがシステム管理モードにあるCPUコア3は、SMRAM空間21に記憶されているSMIハンドラ22を実行する。SMIハンドラ22は、メモリエラーレジスタ11のCEフィールドから“1”を取得し、メモリエラーレジスタ11のSYSDROMEフィールドからエラービット値を取得し、第二マシンチェックレジスタ62の詳細エラーコードフィールドから“000Ah”を取得し、第二マシンチェックレジスタ62のUCフィールドから“0”を取得し、第二マシンチェックレジスタ62のVALフィールドから“1”を取得する。そして、SMIハンドラは、CEフィールドが“1”であることと、SYSDROMEフィールドがエラービット値であることと、詳細エラーコードフィールドが“000Ah”であることと、UCフィールドが“0”であることと、VALフィールドが“1”であることとを、CEの情報(以下では「CE情報」と呼ぶことがある)として時刻情報と併せてBIOSフラッシュメモリ6に記録する。また、SMIハンドラは、CE情報の記録後に、メモリエラーレジスタ11及び第二マシンチェックレジスタ62を全クリアする。SMIハンドラは、メモリエラーレジスタ11及び第二マシンチェックレジスタ62の全クリア後、SMI処理を完了し、CPUコア3の動作モードをシステム管理モードから非システム管理モードに復帰させる。
【0039】
動作モードが非システム管理モードに復帰したCPUコア3は、システム管理モードへの移行直前に実行していたメモリテストプログラムの実行を再開する。
【0040】
以上にようにして、メモリテストプログラムの実行中にメモリデータにCEが発生する度に、CE情報がBIOSフラッシュメモリ6にエラーログとして随時記録される。
【0041】
メモリテストプログラムには、CE発生回数に対する閾値(以下では「CE閾値」と呼ぶことがある)が設定されており、メモリテストプログラムは、BIOSフラッシュメモリ6に格納されたエラーログを確認し、CE発生回数がCE閾値以上であるか否かを判定することにより、メモリ2の良否判定を行う。メモリテストプログラムは、CE発生回数がCE閾値未満であるときは、メモリ2が良好であると判定する一方で、CE発生回数がCE閾値以上であるときは、メモリ2が不良であると判定する。メモリテストプログラムは、メモリ2の良否判定が完了後、SoCが実装されている電子機器の電源をオフにする。
【0042】
<メモリデータにUEが発生する場合のSoCの動作>
まず、CPUコア3は、メモリ2に対してリードコマンドを発行する。
【0043】
次いで、メモリ2は、2ビット以上の誤りが発生しているメモリデータをメモリコントローラ4へ出力する。
【0044】
次いで、メモリコントローラ4は、メモリデータにUEを検出し、SYSDROMEフィールドにエラービット値をセットし、メモリエラーレジスタ11のUEフィールドを“1”にセットする。
【0045】
次いで、メモリコントローラ4は、メモリデータにUEが発生したことを示す通知(以下では「UE通知」と呼ぶことがある)をシステムエージェント5へ送信する。
【0046】
次いで、UE通知を受信したシステムエージェント5は、UE通知に基づいてマシンチェックエラーを検出し、第二マシンチェックレジスタ62において、マシンチェックエラーコードフィールドを“009Xh”にセットし、詳細エラーコードフィールドを“0009h”にセットし、UCフィールドを“1”にセットし、VALフィールドを“1”にセットする。
【0047】
次いで、第二マシンチェックレジスタ62においてUCフィールドが“1”にセットされ、かつ、VALフィールドが“1”にセットされたシステムエージェント5は、マシンチェックエラー通知をGPIOピン52へ送信する。GPIOピン52は、マシンチェックエラー通知を受信することによりアサートされ、アサートされたことを示す通知(以下では「アサート通知」と呼ぶことがある)を、GPIOピン52と接続されているSMIピン53へ出力する。つまり、GPIOピン52は、マシンチェックエラー通知をアサート通知として出力可能なピンとして機能する。このようにして、システムエージェント5は、UE通知に応じてGPIOピン52をアサートすることにより、GPIOピン52にマシンチェックエラー通知を出力させる。
【0048】
次いで、アサート通知を受信したSMIピン53は、アサート通知の受信によってアサートされて、割込コントローラ31へSMIを出力する。
【0049】
SMIを受信した割込コントローラ31は、受信したSMIをCPUコア3へ転送することにより、CPUコア3の動作モードを非システム管理モードからシステム管理モードへ移行させる。
【0050】
次いで、動作モードがシステム管理モードにあるCPUコア3は、SMRAM空間21に記憶されているSMIハンドラ22を実行する。SMIハンドラ22は、メモリエラーレジスタ11のUEフィールドから“1”を取得し、メモリエラーレジスタ11のSYSDROMEフィールドからエラービット値を取得し、第二マシンチェックレジスタ62の詳細エラーコードフィールドから“0009h”を取得し、第二マシンチェックレジスタ62のUCフィールドから“1”を取得し、第二マシンチェックレジスタ62のVALフィールドから“1”を取得する。そして、SMIハンドラは、UEフィールドが“1”であることと、SYSDROMEフィールドがエラービット値であることと、詳細エラーコードフィールドが“0009h”であることと、UCフィールドが“1”であることと、VALフィールドが“1”であることとを、UEの情報(以下では「UE情報」と呼ぶことがある)として時刻情報と併せてBIOSフラッシュメモリ6に記録する。
【0051】
以上にようにして、メモリテストプログラムの実行中にメモリデータにUEが発生したときに、UE情報がBIOSフラッシュメモリ6にエラーログとして記録される。
【0052】
また、SMIハンドラは、メモリデータにUEが発生したため、BIOSフラッシュメモリ6へのUE情報の記録後に、マスク不可能割込(Non-Maskable Interrupt,以下では「NMI」と呼ぶことがある)をOSへ送信する。SMIハンドラは、NMIの送信後、SMI処理を完了する。
【0053】
SMIハンドラからNMIを受信したOSは、ブルースクリーン/カーネルパニックとしてコンピュータシステムの動作を停止させ、SoCが実装されている電子機器の電源をオフにする。
【0054】
<SoCにおける処理手順>
図4は、本開示の実施例のSoCにおける処理手順の一例を示すフローチャートである。
【0055】
図4において、ステップS100では、メモリコントローラ4が、メモリエラーが発生したか否かを判定する。メモリエラーが発生するまで、ステップS100の処理が繰り返される(ステップS100:No)。メモリエラーが発生すると(ステップS100:Yes)、処理はステップS105へ進む。
【0056】
ステップS105では、メモリコントローラ4が、メモリエラーがCEであるかUEであるかを判定する。メモリエラーがCEであるときは、処理はステップS110へ進み、メモリエラーがUEであるときは、処理はステップS135へ進む。
【0057】
ステップS110では、メモリコントローラ4が、CE通知をシステムエージェント5へ送信する。
【0058】
次いで、ステップS115では、システムエージェント5が、CE通知に基づいてマシンチェックエラー(MCERR:Machine Check Error)を検出する。
【0059】
次いで、ステップS120では、システムエージェント5が、CMCIを割込コントローラ31へ送信する。
【0060】
次いで、ステップS125では、割込コントローラ31が、CMCIをSMIに変換する。
【0061】
次いで、ステップS130では、割込コントローラ31が、SMIをCPUコア3へ送信する。
【0062】
一方で、ステップS135では、メモリコントローラ4が、UE通知をシステムエージェント5へ送信する。
【0063】
次いで、ステップS140では、システムエージェント5が、UE通知に基づいてマシンチェックエラー(MCERR:Machine Check Error)を検出する。
【0064】
次いで、ステップS145では、システムエージェント5が、GPIOピン52にマシンチェックエラー通知を出力させる。
【0065】
次いで、ステップS150では、SMIピン53が、SMIを割込コントローラ31へ出力する。
【0066】
次いで、ステップS155では、割込コントローラ31が、受信したSMIをCPUコア3へ転送する。
【0067】
ステップS160では、SMIを受信したCPUコア3の動作モードが非システム管理モードからシステム管理モードへ移行する。
【0068】
そして、ステップS165では、CPUコア3がSMIハンドラ22を実行する。
【0069】
以上のように、本開示の集積回路(実施例のSoC1)は、メモリコントローラ(実施例のメモリコントローラ4)と、システムエージェント(実施例のシステムエージェント5)と、割込コントローラ(実施例の割込コントローラ31)を有するCPUコア(実施例のCPUコア3)とを有する。メモリコントローラは、集積回路に接続された第一メモリ(実施例のメモリ2)から出力されたデータにエラーが発生したことを検出したときに、エラーが発生したことを示すエラー通知(実施例のCE通知及びUE通知)をシステムエージェントへ送信する。システムエージェントは、エラー通知を受信したときに、エラー通知に基づいてマシンチェックエラーを検出する。割込コントローラは、システムエージェントによってマシンチェックエラーが検出されたときに、SMIをCPUコアへ送信することにより、CPUコアの動作モードを非システム管理モードからシステム管理モードへ移行させる。動作モードがシステム管理モードにあるCPUコアは、SMIハンドラを実行することにより、エラーの情報(実施例のCE情報及びUE情報)を、集積回路に接続された第二メモリ(実施例のBIOSフラッシュメモリ6)に記録する。
【0070】
例えば、メモリコントローラは、第一メモリから出力されたデータにCEが発生したことを検出したときに、CE通知をシステムエージェントへ送信する。システムエージェントは、CE通知を受信したときに、CE通知に基づいてマシンチェックエラーを検出し、CE通知に応じてマシンチェックエラー割込(実施例のCMCI)を割込コントローラへ送信する。割込コントローラは、マシンチェックエラー割込を受信したときに、マシンチェックエラー割込をSMIに変換し、変換後のSMIをCPUコアへ送信することにより、CPUコアの動作モードを非システム管理モードからシステム管理モードへ移行させる。動作モードがシステム管理モードにあるCPUコアは、SMIハンドラを実行することにより、CE情報を第二メモリに記録する。
【0071】
また例えば、本開示の集積回路は、マシンチェックエラー通知を出力可能な第一ピン(実施例のGPIOピン52)と、マシンチェックエラー通知を受信したときにSMIを出力する第二ピン(実施例のSMIピン53)とを有する。本開示の集積回路では、第一ピンと第二ピンとが接続されている。メモリコントローラは、第一メモリから出力されたデータにUEが発生したことを検出したときに、UE通知をシステムエージェントへ送信する。システムエージェントは、UE通知を受信したときに、UE通知に基づいてマシンチェックエラーを検出し、UE通知に応じて第一ピンにマシンチェックエラー通知を出力させる。第二ピンは、第一ピンからマシンチェックエラー通知を受信したときに、SMIを割込コントローラへ出力する。割込コントローラは、SMIを受信したときに、受信したSMIをCPUコアへ転送することにより、CPUコアの動作モードを非システム管理モードからシステム管理モードへ移行させる。動作モードがシステム管理モードにあるCPUコアは、SMIハンドラを実行することにより、UE情報を第二メモリに記録する。
【0072】
こうすることで、発生したメモリエラーをエラーログとして記録しておくことが可能になるため、メモリエラーの種別がCEまたはUEの何れであるかを判別することができるので、不良メモリの正確な検出が可能となる。例えば、メモリデータにCEが発生したときにCE情報をエラーログとして随時記録しておくことで、CE発生回数がCE閾値に達したときにメモリが不良であると判定することができる。また例えば、メモリデータにUEが発生したときにUE情報をエラーログとして記録しておくことで、ブルースクリーン/カーネルパニックの発生原因がUEであることを特定できる。
【符号の説明】
【0073】
1 SoC
3 CPUコア
4 メモリコントローラ
5 システムエージェント
7 IOコントローラ
31 割込コントローラ
52 GPIOピン
53 SMIピン