SlideShare a Scribd company logo
Pixel Visual Core
デバイスドライバ解析
作成:2019.12.01

公開:2019.12.08 (Slideshare)

@Vengineer



Google Pixel シリーズ
https://developers.google.com/android/images
floral :"coral" for Pixel 4 XL, "flame" for Pixel 4
:"bonito" for Pixel 3a XL, "sargo" for Pixel 3a
wahoo :"crosshatch" for Pixel 3 XL, "blueline" for Pixel 3
:"taimen" for Pixel 2 XL, "walleye" for Pixel 2
:"marlin" for Pixel XL, "sailfish" for Pixel
Google Pixel 2 / 3 : Pixel Visual Core
2017年10月発売のGoogle Pixel 2 / 2 XL に初めて搭載された Pixel Visual
Core (ASICとして)は、翌年2018年発売の Pixel 3 / 3 XLにも搭載されている。な
お、Pixel 3a (2019年5月発売)には搭載されていない。
Pixel Visual Coreは、FabはTSMC 28nm(下記のHotchip 2018の資料に明記)
で、開発にはIntelが関わっている。
Hotchip 2018 : Pixel Visual Core: Google's Fully Programmable Image,
Vision, and AI Processor For Mobile Devices
Google worked with Intel on a custom A.I. chip for its Pixel phones
The Real Mystery of Intel's Monette Hill
Intel And HCL Collaborating For New Coprocessor With Enhanced Image Processing.
The Pixel 2’s custom camera SoC uses Intel technology
Pixel 2側のデバイスドライバ名は、mnh (intel)
Pixel 2 側 (Snapdragon 835のCPUコアが動くという意味で)でのデバイスドライ
バ (Android 8.1) は、mnh (Monette-Hill Co-processor), Intel製
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-wahoo-4.4-oreo-dr1/
drivers/misc/mnh/
mnh-sm-ion.c (このファイルのみ、Google製)には、下記のように、ホスト側から
Pixel Visual Coreで動作するKernel等をコピーしている
* mnh_ion_fw_copy - Copy data to ION buffer and flush cache
* Return 0 on success
* -ENOMEMif exceeding totoal buffer size
* mnh_ion_fw_copy must be called in slot incrementing order:
* 1. MNH_FW_SLOT_SBL, 2. MNH_FW_SLOT_KERNEL,
* 3. MNH_FW_SLOT_DTB, 4. MNH_FW_SLOT_RAMDISK
Pixel Visual Coreで、Headless Androidが動いている
Pixel Visual Coreの内部には、Arm Corex-A53が1個搭載されている。
このA53上で、Headless Androidが動いている。
Pixel 2 (Android 8.1) / Pixel Visual Core用の Headless Android
https://android.googlesource.com/kernel/arm64/+/refs/heads/android-easel-intel-linux-4.7-oreo-
dr1
Kernel Configの defconfig は、mnh_defconfig
CONFIG_ARCH_MNH=y
CONFIG_ANDROID=y
dts は、mnh.dts
model = "Monette Hill";
Headless Androidにも名前がある?
Pixel 2 :android-easel-intel-linux-4.7-oreo-dr1 (Android 8.1)
Pixel 3 :android-blue-intel-linux-4.7-pie-dr1-release(Android 9)
:android-amber-intel-linux-4.7-pie (Android 9)
https://android.googlesource.com/kernel/arm64/+refs
Pixel Visual Coreのデバイスドライバ名は、paintbox
CONFIG_PAINTBOX=y
CONFIG_PAINTBOX_DEBUG=y
CONFIG_PAINTBOX_TEST_SUPPORT=y
# CONFIG_PAINTBOX_IOMMU_ENABLED is not set
CONFIG_PAINTBOX_TEST_CMA=y
CONFIG_PAINTBOX_IOMMU=y
https://android.googlesource.com/kernel/arm64/+/refs/heads/android-easel-intel-linux-4.7-oreo-
dr1/drivers/misc/paintbox/
https://android.googlesource.com/kernel/arm64/+/refs/heads/android-easel-intel-linux-4.7-oreo-
dr1/include/uapi/paintbox.h
Pixel Visual Coreは、FPGA Prototypeされていた?
https://android.googlesource.com/kernel/arm64/+/refs/heads/android-amber-intel-linux-4
.7-android10/drivers/misc/paintbox/paintbox.c#547
val = readl(pb->reg_base + IPU_VERSION);
major = (val & IPU_VERSION_MAJOR_MASK) >> IPU_VERSION_MAJOR_SHIFT;
minor = (val & IPU_VERSION_MINOR_MASK) >> IPU_VERSION_MAJOR_SHIFT;
build = val & IPU_VERSION_INCR_MASK;
is_fpga = !!(val & IPU_VERSION_FPGA_BUILD_MASK);
Google Easel デバイスドライバ
Android/Easel coprocessor communication hardware access to the PCIe/EP
driver on the local side of the link (AP or Easel), used by the common and
link-partner-specific code.
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-wahoo-4.4-oreo-dr1/driv
ers/misc <= Pixel 2側
https://android.googlesource.com/kernel/arm64/+/refs/heads/android-easel-intel-linux-4.7-oreo-dr1
/drivers/misc/ <= Pixel Visual Core側
google-easel-common.c, google-easel-common-shared.h, google-easel-common-private.h,
google-easel-common-hw.c, google-easel-common-dma.c
Android側からアクセスするときのライブラリ(HDR+ service)
:https://android.googlesource.com/platform/hardware/google/easel/
GOOGLE_EASEL
config GOOGLE_EASEL
tristate "Google Easel/Paintbox Coprocessor Support"
---help---
Say 'y' if platform has the Paintbox IPU on an Easel
coprocessor, aka MonetteHill.
config GOOGLE_EASEL_AP
bool "Local system is Application Processor / Android"
depends on GOOGLE_EASEL
---help---
Say 'y' if this kernel is for the AP/Android side of the link. Say
'n' if this kernel is for the Easel/MonetteHill side of the link.
defconfigファイル
Pixel 2:
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-wahoo-4.4-oreo-dr1/arc
h/arm64/configs/wahoo_defconfig
Pixel 3:
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-crosshatch-4.9-pie-qpr1
/arch/arm64/configs/b1c1_defconfig
CONFIG_GOOGLE_EASEL=y
CONFIG_GOOGLE_EASEL_AP=y
Pixel Visual Core側
https://android.googlesource.com/kernel/arm64/+/refs/heads/android-easel-intel-linux-4.7-oreo-dr1
/arch/arm64/configs/mnh_defconfig
CONFIG_GOOGLE_EASEL=y
(CONFIG_GOOGLE_EASEL_APが設定されていない)
Pixel 4 : Pixel Neural Core & Pixel Visual Core
2019年10月発売の Pixel 4 には、Pixel Neural Coreが搭載されていると発表が
あった。その後、この Pixel Neural Coreは、Google Edge TPUをベースにしたも
のであると、Googleから発表があった。
Introducing the Next Generation of On-Device Vision Models: MobileNetV3 and
MobileNetEdgeTPU
Pixel 4に搭載されたASICには、Pixel Neural Core と Pixel Visual Core が同居
する形になっている。また、開発にはSamsungが関わっており、IFIXITのPixel 4
XL Teardownでは、Samsungの型番が付いたICが搭載されていることからFab
はSamsungと想定している。
Google Pixel 4 XL Teardown
ABC PCIeデバイスドライバ:abc-pcie (samsung)
IPUとTPUなど複数のデバイスを管理するために、mfd (Multi Function Device)
になっている?
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/mfd/abc-pcie.c
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/include/linux/mfd/abc-pcie.h
abc-pcie.c
abc-pcie-private.h
abc-pcie-fsys.c
abc-pcie-dma.c
abc-pcie-dma-uapi.c
デバイスドライバ:airbrush (samsung)
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/airbrush/
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/airbrush/airbrush-sm-ctrl.c#199
IPU :Max 680MHz
TPU :Max 789.6MHz
CPU :Max 933.12MHz (Arm Cortex-A53?)
DRAM :Max 3733MHz (LPDDR4-3733)
airbrush-cooling.{h,c}、airbrush-thermal.{h,c}、tmu 以外は、Samsung製
実は、airbrush は stub のみ
下記の関数で外部から各ops を設定している?
● ab_sm_register_pmu_ops
● ab_sm_unregister_pmu_ops
● ab_sm_register_clk_ops
● ab_sm_unregister_clk_ops
● ab_sm_register_dram_ops
● ab_sm_unregister_dram_ops
● ab_sm_register_mfd_ops
● ab_sm_unregister_mfd_ops
Arm Cortex-M0も?
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/airbrush/airbrush-M0-interrupt.c
int ab_interrupt_M0(int tar_dev)
{
printk("Interrupting M0n");
aon_config_write(SYSREG_AON + 0x037C, 0x4, 1);
aon_config_write(SYSREG_AON + 0x0380, 0x4, 1);
return 0;
}
EXPORT_SYMBOL(ab_interrupt_M0);
IPUデバイスドライバ:paintbox-ipu (google)
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/ipu/
IPUは、v2に
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/ipu/ipu-regs-v2-generated.h
IPU Adapter : paintbox-ipuを登録
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/ipu/ipu-adapter-ab-mfd.c
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/ipu/ipu-adapter.h
Firmware : Headless Androidじゃない?
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/drivers/misc/ipu/ipu-core-jqs.c#181
int ipu_core_jqs_load_firmware(struct paintbox_bus *bus)
{
int ret;
// …
dev_dbg(bus->parent_dev, "requesting firmware %sn", JQS_FIRMWARE_NAME);
ret = request_firmware(&bus->jqs.fw, JQS_FIRMWARE_NAME,
bus->parent_dev); // JQS_FIRMWARE_NAME "paintbox-jqs.fw"
// ...
}
bus->jqs.status = JQS_FW_STATUS_REQUESTED;
return 0;
}
defconigファイル:floral_defconfig
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/arch/arm64/configs/floral_defconfig
CONFIG_AIRBRUSH_SM=y
CONFIG_AIRBRUSH_SM_DEBUGFS=y
CONFIG_AIRBRUSH_DRAM=y
CONFIG_IPU=y
CONFIG_IPU_AB_MFD_ADAPTER=y
CONFIG_IPU_IOMMU=y
CONFIG_IPU_IOMMU_ENABLED=y
CONFIG_IPU_IOMMU_PAGE_TABLE_ON_AB=y
dtsファイル:airbrush部
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-coral-4.14-android10
-c2f2/arch/arm64/boot/dts/google/sm8150-floral-airbrush-trip-points.dtsi
IPU 4コア? :airbrush-ipu[0:3]
TPU 2コア? :airbrush-tpu[0:1]
あたしは、
ディープラーニング職人 ではありません
コンピュータエンジニア です




ありがとうございました
@Vengineer
ソースコード解析職人
Google Edge TPU Device Driver:apex
https://github.com/torvalds/linux/tree/master/drivers/staging/gasket
https://github.com/torvalds/linux/blob/master/drivers/staging/gasket/Kconfig
gasket および Apex は、Moduleとして生成される
config STAGING_GASKET_FRAMEWORK
tristate "Gasket framework"
depends on PCI && (X86_64 || ARM64)
config STAGING_APEX_DRIVER
tristate "Apex Driver"
depends on STAGING_GASKET_FRAMEWORK

More Related Content

What's hot (20)

PDF
20170518 eureka dli
ManaMurakami1
 
PDF
AWS EC2 F1とXilinx SDAccel
Mr. Vengineer
 
PDF
Maxwell と Java CUDAプログラミング
NVIDIA Japan
 
PDF
1076: CUDAデバッグ・プロファイリング入門
NVIDIA Japan
 
PDF
1070: CUDA プログラミング入門
NVIDIA Japan
 
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
 
PDF
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
 
PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
 
PDF
Webアプリケーション開発者のためのDockerハンズオン
虎の穴 開発室
 
PDF
.NET 5 勉強会 ~.NET Framework から .NET へ~
Fujio Kojima
 
PDF
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA Japan
 
PDF
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Preferred Networks
 
PDF
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
 
PDF
DSPでディープラーニング
Mr. Vengineer
 
PDF
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
ManaMurakami1
 
PDF
Google I/O 2021 Flutter 全体報告
cch-robo
 
PDF
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
ManaMurakami1
 
PDF
【とらラボLT】go言語でのweb apiの作り方3選
虎の穴 開発室
 
PDF
2017年のFPGA Community活動について
Mr. Vengineer
 
PDF
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
 
20170518 eureka dli
ManaMurakami1
 
AWS EC2 F1とXilinx SDAccel
Mr. Vengineer
 
Maxwell と Java CUDAプログラミング
NVIDIA Japan
 
1076: CUDAデバッグ・プロファイリング入門
NVIDIA Japan
 
1070: CUDA プログラミング入門
NVIDIA Japan
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
 
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
 
Webアプリケーション開発者のためのDockerハンズオン
虎の穴 開発室
 
.NET 5 勉強会 ~.NET Framework から .NET へ~
Fujio Kojima
 
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA Japan
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Preferred Networks
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
 
DSPでディープラーニング
Mr. Vengineer
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
ManaMurakami1
 
Google I/O 2021 Flutter 全体報告
cch-robo
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
ManaMurakami1
 
【とらラボLT】go言語でのweb apiの作り方3選
虎の穴 開発室
 
2017年のFPGA Community活動について
Mr. Vengineer
 
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
 

More from Mr. Vengineer (20)

PDF
XilinxのxsimでSoftware Driven Verification.pdf
Mr. Vengineer
 
PDF
VerilatorとSystemCでSoftware Driven Verification
Mr. Vengineer
 
PDF
VerilatorとSystemC
Mr. Vengineer
 
PDF
TVM VTA (TSIM)
Mr. Vengineer
 
PDF
Cloud TPU Driver API ソースコード解析
Mr. Vengineer
 
PDF
Cloud Deep Learning Chips Training & Inference
Mr. Vengineer
 
PDF
TensorFlow Lite Delegateとは?
Mr. Vengineer
 
PDF
Google Edge TPUで TensorFlow Liteを使った時に 何をやっているのかを妄想してみる 2 「エッジAIモダン計測制御の世界」オ...
Mr. Vengineer
 
PDF
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
Mr. Vengineer
 
PDF
Facebook Glow Compiler のソースコードをグダグダ語る会
Mr. Vengineer
 
PDF
Ultra96(UltraZed)実践勉強会
Mr. Vengineer
 
PDF
Bridge TensorFlow to run on Intel nGraph backends (v0.4)
Mr. Vengineer
 
PDF
Bridge TensorFlow to run on Intel nGraph backends (v0.5)
Mr. Vengineer
 
PDF
TensorFlow XLA RPC
Mr. Vengineer
 
PDF
TensorFlow local Python XLA client
Mr. Vengineer
 
PDF
Tiramisu をちょっと、味見してみました。
Mr. Vengineer
 
PDF
LeFlowを調べてみました
Mr. Vengineer
 
PDF
Tensorflow dynamically loadable XLA plugin ソースコード解析
Mr. Vengineer
 
PDF
Tiramisu概要
Mr. Vengineer
 
PDF
Tensor comprehensions
Mr. Vengineer
 
XilinxのxsimでSoftware Driven Verification.pdf
Mr. Vengineer
 
VerilatorとSystemCでSoftware Driven Verification
Mr. Vengineer
 
VerilatorとSystemC
Mr. Vengineer
 
TVM VTA (TSIM)
Mr. Vengineer
 
Cloud TPU Driver API ソースコード解析
Mr. Vengineer
 
Cloud Deep Learning Chips Training & Inference
Mr. Vengineer
 
TensorFlow Lite Delegateとは?
Mr. Vengineer
 
Google Edge TPUで TensorFlow Liteを使った時に 何をやっているのかを妄想してみる 2 「エッジAIモダン計測制御の世界」オ...
Mr. Vengineer
 
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
Mr. Vengineer
 
Facebook Glow Compiler のソースコードをグダグダ語る会
Mr. Vengineer
 
Ultra96(UltraZed)実践勉強会
Mr. Vengineer
 
Bridge TensorFlow to run on Intel nGraph backends (v0.4)
Mr. Vengineer
 
Bridge TensorFlow to run on Intel nGraph backends (v0.5)
Mr. Vengineer
 
TensorFlow XLA RPC
Mr. Vengineer
 
TensorFlow local Python XLA client
Mr. Vengineer
 
Tiramisu をちょっと、味見してみました。
Mr. Vengineer
 
LeFlowを調べてみました
Mr. Vengineer
 
Tensorflow dynamically loadable XLA plugin ソースコード解析
Mr. Vengineer
 
Tiramisu概要
Mr. Vengineer
 
Tensor comprehensions
Mr. Vengineer
 
Ad

Pixel Visual Core device driver source code analysis