@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそ、すべては、SystemC v0.9公開から始まった
昨日の続き、今日は、Pixel 4のASICのデバイスドライバを見てみます。
このブログにも書きましたが、Pixel 4に搭載されているASICには、TPUが入っています。
このツイートの[2]に、そのデバイスドライバがあります。
The device driver of the EdgeTPU in Pixel 4 is different from the Dev board one (apex). The apex, as I noted couple months ago [1] was upstreamed. This Pixel 4 one is packaged in with IPU, DRAM and others [2]. #EdgeTPU
— freedom Koan-Sin Tan (@koansin) 2019年11月28日
[1] https://t.co/ZGLg2QvQHC
[2] https://t.co/wMI9cV0Txh
ここ、です。
どうやら、airbrush というデバイスドライバです。こちらは、misc ディレクトリにありますね。
android-msm-coral-4.14-android10-c2f2 とありますね。
これらのファイルのCopyrightには、Samsungとありますね。
これから妄想すると、このASICはSamsung製で回路の一部、特にこのデバイスドライバに関連するところは、Samsung製なんでしょうね。。
Pankaj Kumar Dubey さん と Alim Akhtar さん は、Samsung Electronics (インド)でSoCのデバイスドライバを長年やっているようです。
に、
seq_printf(m, " IPU RO: %d\n", get_ipu_ro());
seq_printf(m, " TPU RO: %d\n", get_tpu_ro());
にあるように、IPU と TPU が出てきます。ビンゴですね。
このファイルを見ると、M0が出てきますね。
チップには、A0、B0があるようですね。一般的には、A0が最初のサンプルで何も問題がなければいいのですが、不具合等は修正して、B0に進みます。
このFirmware、SPI経由でASICと通信していますね。
IPU、TPU、DRAM、MIF(メモリコントローラ?)、FSYS、AONという機能があるようですね。AONって、何でしょうか。
このファイルの上の方に、
#define MAX_AON_FREQ 934000000
とあるので、どうやらプロセッサですね。これだと、934MHzですかね。結構速いですね。WikiChipにあるPixel Visual Coreでは、A53が搭載されているので、AONってA53なんでしょうね。これを変えるといろいろと面倒だからね。となると、こっちのASICも実はSamsung製だったのかな。。。。
また、このファイルをよく見てみると、
IPUの動作周波数は、19.2MHz、50.2MHz、271.8MHz、408.14MHz、543.6MHz、680MHz
BLK_(200, Sleep, Sleep, 3, on, 0_75, off, 0, 0, 0, 0, 0),
BLK_(300, Normal, Ready, 3, on, 0_75, on, 19.2, 14, 0, 0, 0),
BLK_(301, Normal, AonCompute, 3, on, 0_75, on, 50, 2, 2, 0, 0),
BLK_(302, Normal, MinCompute, 3, on, 0_75, on, 271.8, 14, 14, 0, 0),
BLK_(303, Normal, LowCompute, 3, on, 0_75, on, 408, 14, 14, 0, 0),
BLK_(304, Normal, MidCompute, 3, on, 0_75, on, 543.6, 14, 14, 0, 0),
BLK_(305, Normal, MaxCompute, 3, on, 0_75, on, 680, 14, 14, 0, 0),
TPUの動作周波数は、19.2MHz、50.0MHz、316MHz、474MHz、632MHz、789.6MHz、934MHz
BLK_(200, Sleep, Sleep, 2, on, 0_75, off, 0, 0, 0, 0, 0),
BLK_(300, Normal, Ready, 3, on, 0_75, on, 19.2, 0, 0, 16, 0),
BLK_(301, Normal, AonCompute, 3, on, 0_75, on, 50, 0, 0, 16, 0),
BLK_(302, Normal, MinCompute, 3, on, 0_75, on, 316, 0, 0, 16, 0),
BLK_(303, Normal, LowCompute, 3, on, 0_75, on, 474, 0, 0, 16, 0),
BLK_(304, Normal, MidCompute, 3, on, 0_75, on, 632, 0, 0, 16, 0),
BLK_(305, Normal, MaxCompute, 3, on, 0_75, on, 789.6, 0, 0, 16, 0),
DRAMの動作周波数は、1867~3733HMまで動くようですね。
BLK_(300, PowerUp, AonTran, 0, on, 0_60, on, 934, 0, 0, 0, 1867), BLK_(301, PowerUp, HalfMidTran, 0, on, 0_60, on, 934, 0, 0, 0, 1867),
BLK_(302, PowerUp, HalfMaxTran, 0, on, 0_60, on, 934, 0, 0, 0, 1867),
BLK_(303, PowerUp, LowTran, 0, on, 0_60, on, 1200, 0, 0, 0, 2400),
BLK_(304, PowerUp, MidTran, 0, on, 0_60, on, 1600, 0, 0, 0, 3200),
BLK_(305, PowerUp, MaxTran, 0, on, 0_60, on, 1867, 0, 0, 0, 3733),
AONの動作周波数は、19.2MZz、93.312MHz、466.56MHz、933.12MHz
BLK_(0, Disabled, NoRail, 0, off, 0_0, off, 0, 0, 0, 0, 0),
BLK_(300, Normal, Min, 0, on, 0_85, on, 19.2, 0, 0, 0, 0),
BLK_(301, Normal, Low, 0, on, 0_85, on, 93.312, 0, 0, 0, 0),
BLK_(302, Normal, Mid, 0, on, 0_85, on, 466.56, 0, 0, 0, 0),
BLK_(303, Normal, Max, 0, on, 0_85, on, 933.12, 0, 0, 0, 0),
もっといろいろと調べないといけませんね。ソースコード解析職人としては。